https://github.com/HazardyKnusperkeks updated https://github.com/llvm/llvm-project/pull/71672
From fccdc52e0111f827565c84a0386f01ef82fcfa3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Sch=C3=A4pers?= <[email protected]> Date: Wed, 24 Sep 2025 23:02:39 +0200 Subject: [PATCH] [clang-format] Remove special handling of comments after brace/paren Fixes http://llvm.org/PR55487 (#55487) The code did not match the documentation about Cpp11BracedListStyle. Changed handling of comments after opening braces, which are supposedly function call like to behave exactly like their parenthesis counter part. --- clang/lib/Format/ContinuationIndenter.cpp | 5 +- clang/lib/Format/TokenAnnotator.cpp | 13 +-- clang/unittests/Format/FormatTest.cpp | 18 ++-- clang/unittests/Format/FormatTestComments.cpp | 85 +++++++++++++++++-- 4 files changed, 94 insertions(+), 27 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index cd4c1aabac971..56b2c766ea9af 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -925,7 +925,10 @@ void ContinuationIndenter::addTokenOnCurrentLine(LineState &State, bool DryRun, TT_TableGenDAGArgOpenerToBreak) && !(Current.MacroParent && Previous.MacroParent) && (Current.isNot(TT_LineComment) || - Previous.isOneOf(BK_BracedInit, TT_VerilogMultiLineListLParen)) && + (Previous.is(BK_BracedInit) && + (!Style.Cpp11BracedListStyle || !Previous.Previous || + Previous.Previous->isNotOneOf(tok::identifier, tok::l_paren))) || + Previous.is(TT_VerilogMultiLineListLParen)) && !IsInTemplateString(Current)) { CurrentState.Indent = State.Column + Spaces; CurrentState.IsAligned = true; diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 5b784eded4601..b05e074527c53 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -4096,16 +4096,9 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) const { for (auto *Current = First->Next; Current; Current = Current->Next) { const FormatToken *Prev = Current->Previous; if (Current->is(TT_LineComment)) { - if (Prev->is(BK_BracedInit) && Prev->opensScope()) { - Current->SpacesRequiredBefore = - (Style.Cpp11BracedListStyle && !Style.SpacesInParensOptions.Other) - ? 0 - : 1; - } else if (Prev->is(TT_VerilogMultiLineListLParen)) { - Current->SpacesRequiredBefore = 0; - } else { - Current->SpacesRequiredBefore = Style.SpacesBeforeTrailingComments; - } + Current->SpacesRequiredBefore = Prev->is(TT_VerilogMultiLineListLParen) + ? 0 + : Style.SpacesBeforeTrailingComments; // If we find a trailing comment, iterate backwards to determine whether // it seems to relate to a specific parameter. If so, break before that diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index fef70365b5e18..a6f4a9a13cd54 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -14312,20 +14312,18 @@ TEST_F(FormatTest, LayoutCxx11BraceInitializers) { " CDDDP83848_RBR_REGISTER};", NoBinPacking); - // FIXME: The alignment of these trailing comments might be bad. Then again, - // this might be utterly useless in real code. verifyFormat("Constructor::Constructor()\n" - " : some_value{ //\n" - " aaaaaaa, //\n" - " bbbbbbb} {}"); + " : some_value{ //\n" + " aaaaaaa, //\n" + " bbbbbbb} {}"); // In braced lists, the first comment is always assumed to belong to the // first element. Thus, it can be moved to the next or previous line as // appropriate. - verifyFormat("function({// First element:\n" - " 1,\n" - " // Second element:\n" - " 2});", + verifyFormat("function({ // First element:\n" + " 1,\n" + " // Second element:\n" + " 2});", "function({\n" " // First element:\n" " 1,\n" @@ -14447,7 +14445,7 @@ TEST_F(FormatTest, LayoutCxx11BraceInitializers) { verifyFormat("vector< int > x{ 1, 2, 3, 4 };", SpaceBetweenBraces); verifyFormat("f( {}, { {}, {} }, MyMap[ { k, v } ] );", SpaceBetweenBraces); verifyFormat("vector< int > x{ // comment 1\n" - " 1, 2, 3, 4 };", + " 1, 2, 3, 4 };", SpaceBetweenBraces); SpaceBetweenBraces.ColumnLimit = 20; verifyFormat("vector< int > x{\n" diff --git a/clang/unittests/Format/FormatTestComments.cpp b/clang/unittests/Format/FormatTestComments.cpp index 69026bce98705..f0aff7947b58a 100644 --- a/clang/unittests/Format/FormatTestComments.cpp +++ b/clang/unittests/Format/FormatTestComments.cpp @@ -1474,12 +1474,12 @@ TEST_F(FormatTestComments, CommentsInStaticInitializers) { verifyFormat("S s = {{a, b, c}, // Group #1\n" " {d, e, f}, // Group #2\n" " {g, h, i}}; // Group #3"); - verifyFormat("S s = {{// Group #1\n" - " a, b, c},\n" - " {// Group #2\n" - " d, e, f},\n" - " {// Group #3\n" - " g, h, i}};"); + verifyFormat("S s = {{ // Group #1\n" + " a, b, c},\n" + " { // Group #2\n" + " d, e, f},\n" + " { // Group #3\n" + " g, h, i}};"); EXPECT_EQ("S s = {\n" " // Some comment\n" @@ -4699,6 +4699,79 @@ TEST_F(FormatTestComments, SplitCommentIntroducers) { getLLVMStyleWithColumns(10))); } +TEST_F(FormatTestComments, LineCommentsOnStartOfFunctionCall) { + auto Style = getLLVMStyle(); + + EXPECT_TRUE(Style.Cpp11BracedListStyle); + + verifyFormat("T foo( // Comment\n" + " arg);", + Style); + + verifyFormat("T bar{ // Comment\n" + " arg};", + Style); + + verifyFormat("T baz({ // Comment\n" + " arg});", + Style); + + verifyFormat("T baz{{ // Comment\n" + " arg}};", + Style); + + verifyFormat("T b0z(f( // Comment\n" + " arg));", + Style); + + verifyFormat("T b0z(F{ // Comment\n" + " arg});", + Style); + + verifyFormat("func( // Comment\n" + " arg);", + Style); + + verifyFormat("func({ // Comment\n" + " arg});", + Style); + + Style.Cpp11BracedListStyle = false; + + verifyFormat("T foo( // Comment\n" + " arg);", + Style); + + verifyFormat("T bar{ // Comment\n" + " arg\n" + "};", + Style); + + verifyFormat("T baz({ // Comment\n" + " arg });", + Style); + + verifyFormat("T baz{ { // Comment\n" + " arg } };", + Style); + + verifyFormat("T b0z(f( // Comment\n" + " arg));", + Style); + + verifyFormat("T b0z(F{ // Comment\n" + " arg });", + Style); + + verifyFormat("func( // Comment\n" + " arg);", + Style); + + verifyFormat("func({ // Comment\n" + " arg });", + Style); +} + } // end namespace } // namespace test } // end namespace format _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
