From: Daniel Jasper Date: Wed, 24 Apr 2013 06:33:59 +0000 (+0000) Subject: Fix comment alignment behavior. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=af8497681e38106ad6f84408e029537e2a13d79d;p=clang Fix comment alignment behavior. In the following snippet, clang-format incorrectly aligned the trailing comment, when only the last line was formatted: int aaaaaa; // comment int b; int c; // Formatting only this line moved this comment. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@180173 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 2538f33f50..0c3f85d124 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -1069,6 +1069,8 @@ public: if (TheLine.Last->is(tok::comment)) Whitespaces.addUntouchableComment(SourceMgr.getSpellingColumnNumber( TheLine.Last->FormatTok.Tok.getLocation()) - 1); + else + Whitespaces.alignComments(); } PreviousLineLastToken = I->Last; } diff --git a/lib/Format/WhitespaceManager.h b/lib/Format/WhitespaceManager.h index 252997f6d8..2833e249c4 100644 --- a/lib/Format/WhitespaceManager.h +++ b/lib/Format/WhitespaceManager.h @@ -66,6 +66,9 @@ public: void addUntouchableComment(unsigned Column); + /// \brief Try to align all stashed comments. + void alignComments(); + private: std::string getNewLineText(unsigned NewLines, unsigned Spaces); @@ -84,9 +87,6 @@ private: SmallVector Comments; typedef SmallVector::iterator comment_iterator; - /// \brief Try to align all stashed comments. - void alignComments(); - /// \brief Put all the comments between \p I and \p E into \p Column. void alignComments(comment_iterator I, comment_iterator E, unsigned Column); diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 0095d58c6b..97539d91a6 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -621,6 +621,13 @@ TEST_F(FormatTest, CanFormatCommentsLocally) { " // line 2\n" "int b;", 28, 0, getLLVMStyle())); + EXPECT_EQ("int aaaaaa; // comment\n" + "int b;\n" + "int c; // unrelated comment", + format("int aaaaaa; // comment\n" + "int b;\n" + "int c; // unrelated comment", + 31, 0, getLLVMStyle())); } TEST_F(FormatTest, RemovesTrailingWhitespaceOfComments) {