[clang-format] Don't move comments if AlignTrailingComments: Leave
For comments that start after a new line, currently, the comments are being indented. This happens because the OriginalWhitespaceRange considers newlines on the range. Therefore, when AlignTrailingComments: Kind: Leave, deduct the number of newlines before the token to calculate the number of spaces for trailing comments. Fixes #59203. Differential Revision: https://reviews.llvm.org/D139029
This commit is contained in:
parent
2b234ce3f0
commit
ad83bead3d
|
@ -957,7 +957,8 @@ void WhitespaceManager::alignTrailingComments() {
|
|||
if (Style.AlignTrailingComments.Kind == FormatStyle::TCAS_Leave) {
|
||||
auto OriginalSpaces =
|
||||
Changes[i].OriginalWhitespaceRange.getEnd().getRawEncoding() -
|
||||
Changes[i].OriginalWhitespaceRange.getBegin().getRawEncoding();
|
||||
Changes[i].OriginalWhitespaceRange.getBegin().getRawEncoding() -
|
||||
Changes[i].Tok->NewlinesBefore;
|
||||
unsigned RestoredLineLength = Changes[i].StartOfTokenColumn +
|
||||
Changes[i].TokenLength + OriginalSpaces;
|
||||
// If leaving comments makes the line exceed the column limit, give up to
|
||||
|
|
|
@ -3062,6 +3062,61 @@ TEST_F(FormatTestComments, AlignTrailingCommentsLeave) {
|
|||
"int d;// comment\n",
|
||||
Style));
|
||||
|
||||
EXPECT_EQ("// do not touch\n"
|
||||
"int a; // any comments\n"
|
||||
"\n"
|
||||
" // comment\n"
|
||||
"// comment\n"
|
||||
"\n"
|
||||
"// comment",
|
||||
format("// do not touch\n"
|
||||
"int a; // any comments\n"
|
||||
"\n"
|
||||
" // comment\n"
|
||||
"// comment\n"
|
||||
"\n"
|
||||
"// comment",
|
||||
Style));
|
||||
|
||||
EXPECT_EQ("// do not touch\n"
|
||||
"int a; // any comments\n"
|
||||
"\n"
|
||||
" // comment\n"
|
||||
"// comment\n"
|
||||
"\n"
|
||||
"// comment",
|
||||
format("// do not touch\n"
|
||||
"int a; // any comments\n"
|
||||
"\n"
|
||||
"\n"
|
||||
" // comment\n"
|
||||
"// comment\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"// comment",
|
||||
Style));
|
||||
|
||||
// Allow to keep 2 empty lines
|
||||
Style.MaxEmptyLinesToKeep = 2;
|
||||
EXPECT_EQ("// do not touch\n"
|
||||
"int a; // any comments\n"
|
||||
"\n"
|
||||
"\n"
|
||||
" // comment\n"
|
||||
"// comment\n"
|
||||
"\n"
|
||||
"// comment",
|
||||
format("// do not touch\n"
|
||||
"int a; // any comments\n"
|
||||
"\n"
|
||||
"\n"
|
||||
" // comment\n"
|
||||
"// comment\n"
|
||||
"\n"
|
||||
"// comment",
|
||||
Style));
|
||||
Style.MaxEmptyLinesToKeep = 1;
|
||||
|
||||
// Just format comments normally when leaving exceeds the column limit
|
||||
Style.ColumnLimit = 35;
|
||||
EXPECT_EQ("int foo = 12345; // comment\n"
|
||||
|
|
Loading…
Reference in New Issue