diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/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); diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp --- a/clang/unittests/Format/FormatTest.cpp +++ b/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) {