This revision was automatically updated to reflect the committed changes. Closed by commit rG6c7e6fc7b665: [clang-format] Do not remove required spaces when aligning tokens. (authored by curdeius).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D119419/new/ https://reviews.llvm.org/D119419 Files: clang/lib/Format/WhitespaceManager.cpp clang/unittests/Format/FormatTest.cpp Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -17277,6 +17277,31 @@ "const unsigned g;\n" "Const unsigned h;", Alignment); + + // See PR46529 + FormatStyle BracedAlign = getLLVMStyle(); + BracedAlign.AlignConsecutiveDeclarations = FormatStyle::ACS_Consecutive; + verifyFormat("const auto result{[]() {\n" + " const auto something = 1;\n" + " return 2;\n" + "}};", + BracedAlign); + verifyFormat("int foo{[]() {\n" + " int bar{0};\n" + " return 0;\n" + "}()};", + BracedAlign); + BracedAlign.Cpp11BracedListStyle = false; + verifyFormat("const auto result{ []() {\n" + " const auto something = 1;\n" + " return 2;\n" + "} };", + BracedAlign); + verifyFormat("int foo{ []() {\n" + " int bar{ 0 };\n" + " return 0;\n" + "}() };", + BracedAlign); } TEST_F(FormatTest, AlignWithLineBreaks) { Index: clang/lib/Format/WhitespaceManager.cpp =================================================================== --- clang/lib/Format/WhitespaceManager.cpp +++ clang/lib/Format/WhitespaceManager.cpp @@ -331,6 +331,12 @@ FoundMatchOnLine = true; Shift = Column - Changes[i].StartOfTokenColumn; Changes[i].Spaces += Shift; + // FIXME: This is a workaround that should be removed when we fix + // http://llvm.org/PR53699. An assertion later below verifies this. + if (Changes[i].NewlinesBefore == 0) + Changes[i].Spaces = + std::max(Changes[i].Spaces, + static_cast<int>(Changes[i].Tok->SpacesRequiredBefore)); } // This is for function parameters that are split across multiple lines, @@ -399,6 +405,12 @@ if (ContinuedStringLiteral) Changes[i].Spaces += Shift; + // We should not remove required spaces unless we break the line before. + assert(Changes[i].NewlinesBefore > 0 || + Changes[i].Spaces >= + static_cast<int>(Changes[i].Tok->SpacesRequiredBefore) || + Changes[i].Tok->is(tok::eof)); + Changes[i].StartOfTokenColumn += Shift; if (i + 1 != Changes.size()) Changes[i + 1].PreviousEndOfTokenColumn += Shift;
Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -17277,6 +17277,31 @@ "const unsigned g;\n" "Const unsigned h;", Alignment); + + // See PR46529 + FormatStyle BracedAlign = getLLVMStyle(); + BracedAlign.AlignConsecutiveDeclarations = FormatStyle::ACS_Consecutive; + verifyFormat("const auto result{[]() {\n" + " const auto something = 1;\n" + " return 2;\n" + "}};", + BracedAlign); + verifyFormat("int foo{[]() {\n" + " int bar{0};\n" + " return 0;\n" + "}()};", + BracedAlign); + BracedAlign.Cpp11BracedListStyle = false; + verifyFormat("const auto result{ []() {\n" + " const auto something = 1;\n" + " return 2;\n" + "} };", + BracedAlign); + verifyFormat("int foo{ []() {\n" + " int bar{ 0 };\n" + " return 0;\n" + "}() };", + BracedAlign); } TEST_F(FormatTest, AlignWithLineBreaks) { Index: clang/lib/Format/WhitespaceManager.cpp =================================================================== --- clang/lib/Format/WhitespaceManager.cpp +++ clang/lib/Format/WhitespaceManager.cpp @@ -331,6 +331,12 @@ FoundMatchOnLine = true; Shift = Column - Changes[i].StartOfTokenColumn; Changes[i].Spaces += Shift; + // FIXME: This is a workaround that should be removed when we fix + // http://llvm.org/PR53699. An assertion later below verifies this. + if (Changes[i].NewlinesBefore == 0) + Changes[i].Spaces = + std::max(Changes[i].Spaces, + static_cast<int>(Changes[i].Tok->SpacesRequiredBefore)); } // This is for function parameters that are split across multiple lines, @@ -399,6 +405,12 @@ if (ContinuedStringLiteral) Changes[i].Spaces += Shift; + // We should not remove required spaces unless we break the line before. + assert(Changes[i].NewlinesBefore > 0 || + Changes[i].Spaces >= + static_cast<int>(Changes[i].Tok->SpacesRequiredBefore) || + Changes[i].Tok->is(tok::eof)); + Changes[i].StartOfTokenColumn += Shift; if (i + 1 != Changes.size()) Changes[i + 1].PreviousEndOfTokenColumn += Shift;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits