[clang] [clang-format] Remove special handling of comments after brace/paren (PR #71672)
Björn Schäpers via cfe-commits
cfe-commits at lists.llvm.org
Fri Nov 10 03:23:16 PST 2023
https://github.com/HazardyKnusperkeks updated https://github.com/llvm/llvm-project/pull/71672
>From aeec6f1e767bc2bb11823cb694bf6ccc267b060d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Sch=C3=A4pers?= <bjoern at hazardy.de>
Date: Wed, 8 Nov 2023 13:31:32 +0100
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 | 61 +++++++++++++++++--
4 files changed, 70 insertions(+), 27 deletions(-)
diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp
index 3a829cdedb77fc7..04b799a0ea275e1 100644
--- a/clang/lib/Format/ContinuationIndenter.cpp
+++ b/clang/lib/Format/ContinuationIndenter.cpp
@@ -802,7 +802,10 @@ void ContinuationIndenter::addTokenOnCurrentLine(LineState &State, bool DryRun,
Previous.isNot(TT_ObjCMethodExpr) && Previous.isNot(TT_RequiresClause) &&
!(Current.MacroParent && Previous.MacroParent) &&
(Current.isNot(TT_LineComment) ||
- Previous.isOneOf(BK_BracedInit, TT_VerilogMultiLineListLParen))) {
+ (Previous.is(BK_BracedInit) &&
+ (!Style.Cpp11BracedListStyle || !Previous.Previous ||
+ Previous.Previous->isNot(tok::identifier))) ||
+ Previous.is(TT_VerilogMultiLineListLParen))) {
CurrentState.Indent = State.Column + Spaces;
CurrentState.IsAligned = true;
}
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index d648e441f23fe9e..25c9666b0b726ca 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -3507,16 +3507,9 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) const {
while (Current) {
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 80903e7630c8073..81a98c3158a425e 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -13500,20 +13500,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"
@@ -13635,7 +13633,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 967ffa32db79c75..09348ff2a6cb196 100644
--- a/clang/unittests/Format/FormatTestComments.cpp
+++ b/clang/unittests/Format/FormatTestComments.cpp
@@ -1376,12 +1376,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"
@@ -4576,6 +4576,55 @@ 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("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("func( // Comment\n"
+ " arg);",
+ Style);
+
+ verifyFormat("func({ // Comment\n"
+ " arg });",
+ Style);
+}
+
} // end namespace
} // namespace test
} // end namespace format
More information about the cfe-commits
mailing list