From 304a986a7295483c0d9a7938a16107f1c3602666 Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Mon, 21 Jan 2013 22:49:20 +0000 Subject: [PATCH] Remove "incorrect" aligning of trailing comments. We used to align trailing comments belong to different things. Before: void f() { // some function.. } int a; // some variable.. After: void f() { // some function.. } int a; // some variable.. llvm-svn: 173100 --- clang/lib/Format/Format.cpp | 15 +++++++++++---- clang/unittests/Format/FormatTest.cpp | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 6fb1bc2..05c96bd 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -202,7 +202,13 @@ public: void replaceWhitespace(const AnnotatedToken &Tok, unsigned NewLines, unsigned Spaces, unsigned WhitespaceStartColumn, const FormatStyle &Style) { - if (Tok.Type == TT_LineComment && NewLines < 2 && + // 2+ newlines mean an empty line separating logic scopes. + if (NewLines >= 2) + alignComments(); + + // Align line comments if they are trailing or if they continue other + // trailing comments. + if (Tok.Type == TT_LineComment && (Tok.Parent != NULL || !Comments.empty())) { if (Style.ColumnLimit >= Spaces + WhitespaceStartColumn + Tok.FormatTok.TokenLength) { @@ -215,10 +221,11 @@ public: Spaces - Tok.FormatTok.TokenLength; return; } - } else if (NewLines == 0 && Tok.Children.empty() && - Tok.Type != TT_LineComment) { - alignComments(); } + + // If this line does not have a trailing comment, align the stored comments. + if (Tok.Children.empty() && Tok.Type != TT_LineComment) + alignComments(); storeReplacement(Tok.FormatTok, std::string(NewLines, '\n') + std::string(Spaces, ' ')); } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index c9b255c..ba6d751 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -404,6 +404,21 @@ TEST_F(FormatTest, UnderstandsSingleLineComments) { " // Comment inside a statement.\n" " bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;"); + EXPECT_EQ("void f() { // This does something ..\n" + "}\n" + "int a; // This is unrelated", + format("void f() { // This does something ..\n" + " }\n" + "int a; // This is unrelated")); + EXPECT_EQ("void f() { // This does something ..\n" + "} // awesome..\n" + "\n" + "int a; // This is unrelated", + format("void f() { // This does something ..\n" + " } // awesome..\n" + " \n" + "int a; // This is unrelated")); + EXPECT_EQ("int i; // single line trailing comment", format("int i;\\\n// single line trailing comment")); -- 2.7.4