aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2013-02-26 13:10:34 +0000
committerDaniel Jasper <djasper@google.com>2013-02-26 13:10:34 +0000
commit1ef81d57fbcc26080c98e140e7c82db6d2aeba87 (patch)
tree2b2e4a53bd27b567282ce6f5b8a5ac77ccbb1daf
parent0fb382bfbfbfee73763a213b2257042ed342c4b0 (diff)
Only keep empty lines in unwrapped lines if they preceed a line comment.
Empty lines followed by line comments are often used to highlight the comment. Empty lines somewhere else are usually left over from manual or automatic formatting and should probably be removed. Before (clang-format would keep): S s = { a, b }; After: S s = { a, b }; git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176086 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Format/Format.cpp8
-rw-r--r--lib/Format/TokenAnnotator.cpp2
-rw-r--r--unittests/Format/FormatTest.cpp22
3 files changed, 19 insertions, 13 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp
index 7687aa347b..8bc414cd02 100644
--- a/lib/Format/Format.cpp
+++ b/lib/Format/Format.cpp
@@ -518,9 +518,11 @@ private:
State.Stack.back().BreakBeforeParameter = false;
if (!DryRun) {
- unsigned NewLines =
- std::max(1u, std::min(Current.FormatTok.NewlinesBefore,
- Style.MaxEmptyLinesToKeep + 1));
+ unsigned NewLines = 1;
+ if (Current.Type == TT_LineComment)
+ NewLines =
+ std::max(NewLines, std::min(Current.FormatTok.NewlinesBefore,
+ Style.MaxEmptyLinesToKeep + 1));
if (!Line.InPPDirective)
Whitespaces.replaceWhitespace(Current, NewLines, State.Column,
WhitespaceStartColumn, Style);
diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp
index 86daa8d60e..08290b905a 100644
--- a/lib/Format/TokenAnnotator.cpp
+++ b/lib/Format/TokenAnnotator.cpp
@@ -842,8 +842,6 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) {
Current->Parent->is(tok::string_literal) &&
Current->Children[0].is(tok::string_literal)) {
Current->MustBreakBefore = true;
- } else if (Current->FormatTok.NewlinesBefore > 1) {
- Current->MustBreakBefore = true;
} else {
Current->MustBreakBefore = false;
}
diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp
index a902466c4c..53f3773d5c 100644
--- a/unittests/Format/FormatTest.cpp
+++ b/unittests/Format/FormatTest.cpp
@@ -588,17 +588,23 @@ TEST_F(FormatTest, CommentsInStaticInitializers) {
EXPECT_EQ("S s = {\n"
" // Some comment\n"
- " a\n"
+ " a,\n"
"\n"
" // Comment after empty line\n"
" b\n"
- "}", format("S s = {\n"
- " // Some comment\n"
- " a\n"
- " \n"
- " // Comment after empty line\n"
- " b\n"
- "}"));
+ "}",
+ format("S s = {\n"
+ " // Some comment\n"
+ " a,\n"
+ " \n"
+ " // Comment after empty line\n"
+ " b\n"
+ "}"));
+ EXPECT_EQ("S s = { a, b };", format("S s = {\n"
+ " a,\n"
+ "\n"
+ " b\n"
+ "};"));
}
//===----------------------------------------------------------------------===//