This revision was automatically updated to reflect the committed changes. Closed by commit rGf74413d16345: [clang-format] Fix invalid code generation with comments in lambda (authored by owenpan).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D122301/new/ https://reviews.llvm.org/D122301 Files: clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/FormatTest.cpp Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -21934,6 +21934,30 @@ "auto k = []() // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" "{ return; }", LLVMWithBeforeLambdaBody); + + LLVMWithBeforeLambdaBody.ColumnLimit = 0; + + verifyFormat("foo([]()\n" + " {\n" + " bar(); //\n" + " return 1; // comment\n" + " }());", + "foo([]() {\n" + " bar(); //\n" + " return 1; // comment\n" + "}());", + LLVMWithBeforeLambdaBody); + verifyFormat("foo(\n" + " 1, MACRO {\n" + " baz();\n" + " bar(); // comment\n" + " },\n" + " []() {});", + "foo(\n" + " 1, MACRO { baz(); bar(); // comment\n" + " }, []() {}\n" + ");", + LLVMWithBeforeLambdaBody); } TEST_F(FormatTest, EmptyLinesInLambdas) { Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2762,12 +2762,16 @@ Current->SpacesRequiredBefore = 1; } - Current->MustBreakBefore = - Current->MustBreakBefore || mustBreakBefore(Line, *Current); - - if (!Current->MustBreakBefore && InFunctionDecl && - Current->is(TT_FunctionDeclarationName)) - Current->MustBreakBefore = mustBreakForReturnType(Line); + const auto &Children = Prev->Children; + if (!Children.empty() && Children.back()->Last->is(TT_LineComment)) { + Current->MustBreakBefore = true; + } else { + Current->MustBreakBefore = + Current->MustBreakBefore || mustBreakBefore(Line, *Current); + if (!Current->MustBreakBefore && InFunctionDecl && + Current->is(TT_FunctionDeclarationName)) + Current->MustBreakBefore = mustBreakForReturnType(Line); + } Current->CanBreakBefore = Current->MustBreakBefore || canBreakBefore(Line, *Current);
Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -21934,6 +21934,30 @@ "auto k = []() // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" "{ return; }", LLVMWithBeforeLambdaBody); + + LLVMWithBeforeLambdaBody.ColumnLimit = 0; + + verifyFormat("foo([]()\n" + " {\n" + " bar(); //\n" + " return 1; // comment\n" + " }());", + "foo([]() {\n" + " bar(); //\n" + " return 1; // comment\n" + "}());", + LLVMWithBeforeLambdaBody); + verifyFormat("foo(\n" + " 1, MACRO {\n" + " baz();\n" + " bar(); // comment\n" + " },\n" + " []() {});", + "foo(\n" + " 1, MACRO { baz(); bar(); // comment\n" + " }, []() {}\n" + ");", + LLVMWithBeforeLambdaBody); } TEST_F(FormatTest, EmptyLinesInLambdas) { Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2762,12 +2762,16 @@ Current->SpacesRequiredBefore = 1; } - Current->MustBreakBefore = - Current->MustBreakBefore || mustBreakBefore(Line, *Current); - - if (!Current->MustBreakBefore && InFunctionDecl && - Current->is(TT_FunctionDeclarationName)) - Current->MustBreakBefore = mustBreakForReturnType(Line); + const auto &Children = Prev->Children; + if (!Children.empty() && Children.back()->Last->is(TT_LineComment)) { + Current->MustBreakBefore = true; + } else { + Current->MustBreakBefore = + Current->MustBreakBefore || mustBreakBefore(Line, *Current); + if (!Current->MustBreakBefore && InFunctionDecl && + Current->is(TT_FunctionDeclarationName)) + Current->MustBreakBefore = mustBreakForReturnType(Line); + } Current->CanBreakBefore = Current->MustBreakBefore || canBreakBefore(Line, *Current);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits