From d3a247cc4e136af6b71dc5968ca6190e6c68f4c5 Mon Sep 17 00:00:00 2001 From: Manuel Klimek Date: Wed, 7 Aug 2013 19:20:45 +0000 Subject: [PATCH] Fixes a couple of bugs with the Allman brace breaking. In particular, left braces after an enum declaration now occur on their own line. Further, when short ifs/whiles are allowed these no longer cause the left brace to be on the same line as the if/while when a brace is included. Patch by Thomas Gibson-Robinson. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187901 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Format/Format.cpp | 3 +++ lib/Format/UnwrappedLineParser.cpp | 2 ++ unittests/Format/FormatTest.cpp | 31 ++++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 140bda2193..255f5142f0 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -1710,6 +1710,9 @@ private: unsigned Limit) { if (Limit == 0) return; + if (Style.BreakBeforeBraces == FormatStyle::BS_Allman && + (I + 1)->First->is(tok::l_brace)) + return; if ((I + 1)->InPPDirective != I->InPPDirective || ((I + 1)->InPPDirective && (I + 1)->First->HasUnescapedNewline)) return; diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp index c80c297de2..56fe81f3f2 100644 --- a/lib/Format/UnwrappedLineParser.cpp +++ b/lib/Format/UnwrappedLineParser.cpp @@ -930,6 +930,8 @@ void UnwrappedLineParser::parseEnum() { nextToken(); } if (FormatTok->Tok.is(tok::l_brace)) { + if (Style.BreakBeforeBraces == FormatStyle::BS_Allman) + addUnwrappedLine(); nextToken(); addUnwrappedLine(); ++Line->Level; diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 2b1b94c4c6..2969e568eb 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -5530,6 +5530,37 @@ TEST_F(FormatTest, AllmanBraceBreaking) { " }\n" "}\n", BreakBeforeBrace); + + verifyFormat("enum X\n" + "{\n" + " Y = 0,\n" + "}\n", + BreakBeforeBrace); + + FormatStyle BreakBeforeBraceShortIfs = BreakBeforeBrace; + BreakBeforeBraceShortIfs.AllowShortIfStatementsOnASingleLine = true; + BreakBeforeBraceShortIfs.AllowShortLoopsOnASingleLine = true; + verifyFormat("void f(bool b)\n" + "{\n" + " if (b)\n" + " {\n" + " return;\n" + " }\n" + "}\n", + BreakBeforeBraceShortIfs); + verifyFormat("void f(bool b)\n" + "{\n" + " if (b) return;\n" + "}\n", + BreakBeforeBraceShortIfs); + verifyFormat("void f(bool b)\n" + "{\n" + " while (b)\n" + " {\n" + " return;\n" + " }\n" + "}\n", + BreakBeforeBraceShortIfs); } TEST_F(FormatTest, UnderstandsPragmas) { -- 2.40.0