Browse Source

clang-format: Fix aligning of comments and escaped newlines in macros.

Before:
  #define A      \
    int i;   /*a*/ \
    int jjj; /*b*/

After:
  #define A        \
    int i;   /*a*/ \
    int jjj; /*b*/

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205011 91177308-0d34-0410-b5e6-96231b3b80d8
Daniel Jasper 11 năm trước cách đây
mục cha
commit
2c79e2c95b

+ 4 - 0
lib/Format/WhitespaceManager.cpp

@@ -193,6 +193,10 @@ void WhitespaceManager::alignTrailingComments(unsigned Start, unsigned End,
     if (Changes[i].IsTrailingComment) {
     if (Changes[i].IsTrailingComment) {
       assert(Column >= Changes[i].StartOfTokenColumn);
       assert(Column >= Changes[i].StartOfTokenColumn);
       Changes[i].Spaces += Column - Changes[i].StartOfTokenColumn;
       Changes[i].Spaces += Column - Changes[i].StartOfTokenColumn;
+      if (i + 1 != End) {
+        Changes[i + 1].PreviousEndOfTokenColumn +=
+            Column - Changes[i].StartOfTokenColumn;
+      }
       Changes[i].StartOfTokenColumn = Column;
       Changes[i].StartOfTokenColumn = Column;
     }
     }
   }
   }

+ 5 - 0
unittests/Format/FormatTest.cpp

@@ -946,6 +946,11 @@ TEST_F(FormatTest, UnderstandsBlockComments) {
                "         /* parameter 3 */ aaaaaa,\n"
                "         /* parameter 3 */ aaaaaa,\n"
                "         /* parameter 4 */ aaaaaa);",
                "         /* parameter 4 */ aaaaaa);",
                NoBinPacking);
                NoBinPacking);
+
+  // Aligning block comments in macros.
+  verifyGoogleFormat("#define A        \\\n"
+                     "  int i;   /*a*/ \\\n"
+                     "  int jjj; /*b*/");
 }
 }
 
 
 TEST_F(FormatTest, AlignsBlockComments) {
 TEST_F(FormatTest, AlignsBlockComments) {