aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2013-02-20 12:56:39 +0000
committerDaniel Jasper <djasper@google.com>2013-02-20 12:56:39 +0000
commitc4615b7aaf97e303a4fc675956f7f5572d492885 (patch)
tree77430a4d47484d505b20c7f635da4c9efc545dc3
parent8092a940922f307edb569036a3bb6bb722fb3a3d (diff)
Don't remove blank lines within unwrapped lines.
If the code author decides to put empty lines anywhere into the code we should treat them equally, i.e. reduce them to the configured MaxEmptyLinesToKeep. With this change, we e.g. keep the newline in: SomeType ST = { // First value a, // Second value b }; git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175620 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Format/Format.cpp15
-rw-r--r--lib/Format/TokenAnnotator.cpp4
-rw-r--r--unittests/Format/FormatTest.cpp14
3 files changed, 26 insertions, 7 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp
index 21f32d257c..625f93151f 100644
--- a/lib/Format/Format.cpp
+++ b/lib/Format/Format.cpp
@@ -278,9 +278,9 @@ public:
LineState State;
State.Column = FirstIndent;
State.NextToken = &RootToken;
- State.Stack.push_back(
- ParenState(FirstIndent + 4, FirstIndent, !Style.BinPackParameters,
- /*HasMultiParameterLine=*/ false));
+ State.Stack.push_back(ParenState(FirstIndent + 4, FirstIndent,
+ !Style.BinPackParameters,
+ /*HasMultiParameterLine=*/ false));
State.VariablePos = 0;
State.LineContainsContinuedForLoopSection = false;
State.ParenLevel = 0;
@@ -368,7 +368,7 @@ private:
/// \brief The position of the colon in an ObjC method declaration/call.
unsigned ColonPos;
-
+
/// \brief Break before third operand in ternary expression.
bool BreakBeforeThirdOperand;
@@ -520,11 +520,14 @@ private:
State.LineContainsContinuedForLoopSection = Previous.isNot(tok::semi);
if (!DryRun) {
+ unsigned NewLines =
+ std::max(1u, std::min(Current.FormatTok.NewlinesBefore,
+ Style.MaxEmptyLinesToKeep + 1));
if (!Line.InPPDirective)
- Whitespaces.replaceWhitespace(Current, 1, State.Column,
+ Whitespaces.replaceWhitespace(Current, NewLines, State.Column,
WhitespaceStartColumn, Style);
else
- Whitespaces.replacePPWhitespace(Current, 1, State.Column,
+ Whitespaces.replacePPWhitespace(Current, NewLines, State.Column,
WhitespaceStartColumn, Style);
}
diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp
index ac7301eebd..2bce7c0f34 100644
--- a/lib/Format/TokenAnnotator.cpp
+++ b/lib/Format/TokenAnnotator.cpp
@@ -266,7 +266,7 @@ private:
}
return true;
}
-
+
void updateParameterCount(AnnotatedToken *Left, AnnotatedToken *Current) {
if (Current->is(tok::comma))
++Left->ParameterCount;
@@ -835,6 +835,8 @@ 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 4fefb9627e..dba6183e09 100644
--- a/unittests/Format/FormatTest.cpp
+++ b/unittests/Format/FormatTest.cpp
@@ -576,6 +576,20 @@ TEST_F(FormatTest, CommentsInStaticInitializers) {
" d, e, f },\n"
" { // Group #3\n"
" g, h, i } };");
+
+ EXPECT_EQ("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"
+ "}"));
}
//===----------------------------------------------------------------------===//