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.

llvm-svn: 180173
This commit is contained in:
Daniel Jasper 2013-04-24 06:33:59 +00:00
parent f759989bcd
commit 770eb7c5f9
3 changed files with 12 additions and 3 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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) {