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.

llvm-svn: 187901
This commit is contained in:
Manuel Klimek 2013-08-07 19:20:45 +00:00
parent 89c862f298
commit a027f306a6
3 changed files with 36 additions and 0 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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) {