clang-format: Support @autoreleasepool.

Format @autoreleasepool properly for the Attach brace style
by recognizing @autoreleasepool as a block introducer.

Patch from Strager Neds!
http://reviews.llvm.org/D10372

llvm-svn: 240896
This commit is contained in:
Nico Weber
2015-06-28 01:06:16 +00:00
parent 226937eb15
commit 45c4812851
2 changed files with 31 additions and 0 deletions

View File

@@ -656,6 +656,16 @@ void UnwrappedLineParser::parseStructuralElement() {
nextToken();
addUnwrappedLine();
return;
case tok::objc_autoreleasepool:
nextToken();
if (FormatTok->Tok.is(tok::l_brace)) {
if (Style.BreakBeforeBraces == FormatStyle::BS_Allman ||
Style.BreakBeforeBraces == FormatStyle::BS_GNU)
addUnwrappedLine();
parseBlock(/*MustBeDeclaration=*/false);
}
addUnwrappedLine();
return;
case tok::objc_try:
// This branch isn't strictly necessary (the kw_try case below would
// do this too after the tok::at is parsed above). But be explicit.

View File

@@ -2391,6 +2391,27 @@ TEST_F(FormatTest, FormatObjCTryCatch) {
"});\n");
}
TEST_F(FormatTest, FormatObjCAutoreleasepool) {
FormatStyle Style = getLLVMStyle();
verifyFormat("@autoreleasepool {\n"
" f();\n"
"}\n"
"@autoreleasepool {\n"
" f();\n"
"}\n",
Style);
Style.BreakBeforeBraces = FormatStyle::BS_Allman;
verifyFormat("@autoreleasepool\n"
"{\n"
" f();\n"
"}\n"
"@autoreleasepool\n"
"{\n"
" f();\n"
"}\n",
Style);
}
TEST_F(FormatTest, StaticInitializers) {
verifyFormat("static SomeClass SC = {1, 'a'};");