]> granicus.if.org Git - clang/commitdiff
[clang-format] Fix regression about not aligning trailing comments in case they were...
authorKrasimir Georgiev <krasimir@google.com>
Wed, 1 Feb 2017 10:10:04 +0000 (10:10 +0000)
committerKrasimir Georgiev <krasimir@google.com>
Wed, 1 Feb 2017 10:10:04 +0000 (10:10 +0000)
Summary:
Comment reflower was adding untouchable tokens in case two consecutive comment lines are aligned in the source code. This disallows the whitespace manager to re-indent them later.

source:
```
int i = f(abc, // line 1
          d, // line 2
     // line 3
  b);
```
Since line 2 and line 3 are aligned, the reflower was marking line 3 as untouchable; however the three comment lines need to be re-aligned.
output before:
```
int i = f(abc, // line 1
          d,   // line 2
     // line 3
  b);
```
output after:
```
int i = f(abc, // line 1
          d,   // line 2
       // line 3
  b);
```

Reviewers: djasper

Reviewed By: djasper

Subscribers: sammccall, cfe-commits, klimek

Differential Revision: https://reviews.llvm.org/D29383

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@293755 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/BreakableToken.cpp
unittests/Format/FormatTest.cpp

index 148656080d32604c477ccdd8319852e2b544d318..0141e2381dbdecdae2ca4fdf02f93feebe4222e1 100644 (file)
@@ -803,18 +803,16 @@ void BreakableLineCommentSection::replaceWhitespaceBefore(
           ContentColumn[LineIndex] -
           (Content[LineIndex].data() - Lines[LineIndex].data()) +
           (OriginalPrefix[LineIndex].size() - Prefix[LineIndex].size());
-      if (tokenAt(LineIndex).OriginalColumn != LineColumn) {
-        Whitespaces.replaceWhitespace(*Tokens[LineIndex],
-                                      /*Newlines=*/1,
-                                      /*Spaces=*/LineColumn,
-                                      /*StartOfTokenColumn=*/LineColumn,
-                                      /*InPPDirective=*/false);
-      } else {
-        // The whitespace preceding the first line of this token does not need
-        // to be touched.
-        Whitespaces.addUntouchableToken(tokenAt(LineIndex),
-                                        /*InPPDirective=*/false);
-      }
+
+      // We always want to create a replacement instead of adding an untouchable
+      // token, even if LineColumn is the same as the original column of the
+      // token. This is because WhitespaceManager doesn't align trailing
+      // comments if they are untouchable.
+      Whitespaces.replaceWhitespace(*Tokens[LineIndex],
+                                    /*Newlines=*/1,
+                                    /*Spaces=*/LineColumn,
+                                    /*StartOfTokenColumn=*/LineColumn,
+                                    /*InPPDirective=*/false);
     }
   }
   if (OriginalPrefix[LineIndex] != Prefix[LineIndex]) {
index ebf37fb0e228c840947c912a94df9f5be6934926..390dd203704506beaf1e83d651f6ea8360bbe4c0 100644 (file)
@@ -2238,7 +2238,7 @@ TEST_F(FormatTest, ReflowsComments) {
   EXPECT_EQ("int i; // This long\n"
             "       // line gets\n"
             "       // broken.\n"
-            "       //  \n"
+            "       //\n"
             "       // keep.\n",
             format("int i; // This long line gets broken.\n"
                    "       //  \n"
@@ -11741,7 +11741,7 @@ TEST_F(ReplacementTest, SortIncludesAfterReplacement) {
   EXPECT_EQ(Expected, *Result);
 }
 
-TEST_F(FormatTest, AllignTrailingComments) {
+TEST_F(FormatTest, AlignTrailingComments) {
   EXPECT_EQ("#define MACRO(V)                       \\\n"
             "  V(Rt2) /* one more char */           \\\n"
             "  V(Rs)  /* than here  */              \\\n"
@@ -11751,6 +11751,15 @@ TEST_F(FormatTest, AllignTrailingComments) {
                    "V(Rs) /* than here  */    \\\n"
                    "/* comment 3 */         \\\n",
                    getLLVMStyleWithColumns(40)));
+  EXPECT_EQ("int i = f(abc, // line 1\n"
+            "          d,   // line 2\n"
+            "               // line 3\n"
+            "          b);",
+            format("int i = f(abc, // line 1\n"
+                   "          d, // line 2\n"
+                   "             // line 3\n"
+                   "          b);",
+                   getLLVMStyleWithColumns(40)));
 }
 } // end namespace
 } // end namespace format