From: Daniel Jasper Date: Sun, 8 Sep 2013 14:07:57 +0000 (+0000) Subject: clang-format: Keep empty lines and format 1-line nested blocks. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=14e25c0477bf9f51e980fdc23b7f0bff800f3ae7;p=clang clang-format: Keep empty lines and format 1-line nested blocks. Let clang-format consistently keep up to one empty line (configured via FormatStyle::MaxEmptyLinesToKeep) in nested blocks, e.g. lambdas. Also, actually format single statements in nested blocks. Before: DEBUG({ int i; }); DEBUG({ int i; // an empty line here would just be removed. int j; }); After: DEBUG({ int i; }); DEBUG({ int i; int j; }); git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190278 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index ce39c480e7..fe6660b3bc 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -530,10 +530,14 @@ private: I != E; ++I) { unsigned Indent = ParentIndent + ((*I)->Level - Line.Level) * Style.IndentWidth; - if (!DryRun) + if (!DryRun) { + unsigned Newlines = std::min((*I)->First->NewlinesBefore, + Style.MaxEmptyLinesToKeep + 1); + Newlines = std::max(1u, Newlines); Whitespaces->replaceWhitespace( - *(*I)->First, /*Newlines=*/1, /*Spaces=*/Indent, + *(*I)->First, Newlines, /*Spaces=*/Indent, /*StartOfTokenColumn=*/Indent, Line.InPPDirective); + } UnwrappedLineFormatter Formatter(Indenter, Whitespaces, Style, **I); Penalty += Formatter.format(Indent, DryRun); } @@ -552,6 +556,9 @@ private: /*Newlines=*/0, /*Spaces=*/1, /*StartOfTokenColumn=*/State.Column, State.Line->InPPDirective); + UnwrappedLineFormatter Formatter(Indenter, Whitespaces, Style, + *LBrace.Children[0]); + Penalty += Formatter.format(State.Column + 1, DryRun); } State.Column += 1 + LBrace.Children[0]->Last->TotalLength; diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 10a6316054..ef7d63c1eb 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -2276,6 +2276,19 @@ TEST_F(FormatTest, LayoutNestedBlocks) { " somethingElse();\n" "});", getLLVMStyleWithColumns(29))); + EXPECT_EQ("DEBUG({ int i; });", format("DEBUG({ int i; });")); + EXPECT_EQ("DEBUG({\n" + " int i;\n" + "\n" + " // comment\n" + " int j;\n" + "});", + format("DEBUG({\n" + " int i;\n" + "\n" + " // comment\n" + " int j;\n" + "});")); } TEST_F(FormatTest, PutEmptyBlocksIntoOneLine) { @@ -6395,7 +6408,7 @@ TEST_F(FormatTest, FormatsLambdas) { verifyFormat("auto c = { [&a, &a, a] {\n" " [=, a, b, &c] { return b++; }();\n" "} }\n"); - verifyFormat("auto c = { [&a, &a, a] { [=, a, b, &c] { }(); } }\n"); + verifyFormat("auto c = { [&a, &a, a] { [=, a, b, &c] {}(); } }\n"); verifyFormat("void f() {\n" " other(x.begin(), x.end(), [&](int, int) { return 1; });\n" "}\n");