diff options
author | Daniel Jasper <djasper@google.com> | 2013-04-24 06:33:59 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2013-04-24 06:33:59 +0000 |
commit | af8497681e38106ad6f84408e029537e2a13d79d (patch) | |
tree | a5dc54db9377b7a60d54e014d9bc0bf62515bc48 | |
parent | 44f72d34a947c654f88ea212b7fe5834615bca11 (diff) | |
download | clang-af8497681e38106ad6f84408e029537e2a13d79d.tar.gz clang-af8497681e38106ad6f84408e029537e2a13d79d.tar.bz2 clang-af8497681e38106ad6f84408e029537e2a13d79d.tar.xz |
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
-rw-r--r-- | lib/Format/Format.cpp | 2 | ||||
-rw-r--r-- | lib/Format/WhitespaceManager.h | 6 | ||||
-rw-r--r-- | unittests/Format/FormatTest.cpp | 7 |
3 files changed, 12 insertions, 3 deletions
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<StoredComment, 16> Comments; typedef SmallVector<StoredComment, 16>::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) { |