aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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"
+ "}"));
}
//===----------------------------------------------------------------------===//