summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2013-04-24 06:33:59 +0000
committerDaniel Jasper <djasper@google.com>2013-04-24 06:33:59 +0000
commitaf8497681e38106ad6f84408e029537e2a13d79d (patch)
treea5dc54db9377b7a60d54e014d9bc0bf62515bc48
parent44f72d34a947c654f88ea212b7fe5834615bca11 (diff)
downloadclang-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.cpp2
-rw-r--r--lib/Format/WhitespaceManager.h6
-rw-r--r--unittests/Format/FormatTest.cpp7
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) {