diff options
-rw-r--r-- | clang/lib/Format/UnwrappedLineFormatter.cpp | 13 | ||||
-rw-r--r-- | clang/unittests/Format/FormatTest.cpp | 37 |
2 files changed, 49 insertions, 1 deletions
diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp index 8b8d357d9cb..fec85f1174d 100644 --- a/clang/lib/Format/UnwrappedLineFormatter.cpp +++ b/clang/lib/Format/UnwrappedLineFormatter.cpp @@ -326,6 +326,19 @@ private: FormatStyle::BWACS_Always) ? tryMergeSimpleBlock(I, E, Limit) : 0; + } else if (I[1]->First->is(tok::l_brace) && + TheLine->First->isOneOf(tok::kw_else, tok::kw_catch) && + Style.BraceWrapping.AfterControlStatement == + FormatStyle::BWACS_MultiLine) { + // This case if different from the upper BWACS_MultiLine processing + // in that a preceding r_brace is not on the same line as else/catch + // most likely because of BeforeElse/BeforeCatch set to true. + // If the line length doesn't fit ColumnLimit, leave l_brace on the + // next line to respect the BWACS_MultiLine. + return (Style.ColumnLimit == 0 || + TheLine->Last->TotalLength <= Style.ColumnLimit) + ? 1 + : 0; } // Try to merge either empty or one-line block if is precedeed by control // statement token diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 069542683c0..2d67b9759d7 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -1565,6 +1565,41 @@ TEST_F(FormatTest, MultiLineControlStatements) { " baz();\n" "}", format("try{foo();}catch(Exception&bar){baz();}", Style)); + Style.ColumnLimit = + 40; // to concentrate at brace wrapping, not line wrap due to column limit + EXPECT_EQ("try {\n" + " foo();\n" + "} catch (Exception &bar) {\n" + " baz();\n" + "}", + format("try{foo();}catch(Exception&bar){baz();}", Style)); + Style.ColumnLimit = + 20; // to concentrate at brace wrapping, not line wrap due to column limit + + Style.BraceWrapping.BeforeElse = true; + EXPECT_EQ( + "if (foo) {\n" + " bar();\n" + "}\n" + "else if (baz ||\n" + " quux)\n" + "{\n" + " foobar();\n" + "}\n" + "else {\n" + " barbaz();\n" + "}", + format("if(foo){bar();}else if(baz||quux){foobar();}else{barbaz();}", + Style)); + + Style.BraceWrapping.BeforeCatch = true; + EXPECT_EQ("try {\n" + " foo();\n" + "}\n" + "catch (...) {\n" + " baz();\n" + "}", + format("try{foo();}catch(...){baz();}", Style)); } //===----------------------------------------------------------------------===// @@ -14881,7 +14916,7 @@ TEST_F(FormatTest, AmbersandInLamda) { verifyFormat("auto lambda = [&a = a]() { a = 2; };", AlignStyle); } - TEST_F(FormatTest, SpacesInConditionalStatement) { +TEST_F(FormatTest, SpacesInConditionalStatement) { FormatStyle Spaces = getLLVMStyle(); Spaces.SpacesInConditionalStatement = true; verifyFormat("for ( int i = 0; i; i++ )\n continue;", Spaces); |