forked from OSchip/llvm-project
[Format] Fix for bug 35641
Summary: Bug was caused due to comments at the start of scope. For a code like: ``` int func() { // int b; int c; } ``` the comment at the first line gets IndentAndNestingLevel (1,1) whereas the following declarations get only (0,1) which prevents them from insertion of a new scope. So, I changed the AlignTokenSequence to look at previous *non-comment* token when deciding whether to introduce a new scope into stack or not. Patch by Kadir Cetinkaya! Reviewers: rsmith, djasper Reviewed By: djasper Subscribers: lebedev.ri, cfe-commits, klimek Tags: #clang Differential Revision: https://reviews.llvm.org/D43303 llvm-svn: 338578
This commit is contained in:
parent
e0fcc68a32
commit
f16a6fa8f3
|
@ -255,8 +255,14 @@ AlignTokenSequence(unsigned Start, unsigned End, unsigned Column, F &&Matches,
|
|||
Changes[ScopeStack.back()].indentAndNestingLevel())
|
||||
ScopeStack.pop_back();
|
||||
|
||||
// Compare current token to previous non-comment token to ensure whether
|
||||
// it is in a deeper scope or not.
|
||||
unsigned PreviousNonComment = i - 1;
|
||||
while (PreviousNonComment > Start &&
|
||||
Changes[PreviousNonComment].Tok->is(tok::comment))
|
||||
PreviousNonComment--;
|
||||
if (i != Start && Changes[i].indentAndNestingLevel() >
|
||||
Changes[i - 1].indentAndNestingLevel())
|
||||
Changes[PreviousNonComment].indentAndNestingLevel())
|
||||
ScopeStack.push_back(i);
|
||||
|
||||
bool InsideNestedScope = ScopeStack.size() != 0;
|
||||
|
|
|
@ -9804,6 +9804,14 @@ TEST_F(FormatTest, AlignConsecutiveDeclarations) {
|
|||
"});\n",
|
||||
Alignment);
|
||||
Alignment.PointerAlignment = FormatStyle::PAS_Right;
|
||||
|
||||
// See llvm.org/PR35641
|
||||
Alignment.AlignConsecutiveDeclarations = true;
|
||||
verifyFormat("int func() { //\n"
|
||||
" int b;\n"
|
||||
" unsigned c;\n"
|
||||
"}",
|
||||
Alignment);
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, LinuxBraceBreaking) {
|
||||
|
|
Loading…
Reference in New Issue