From: Daniel Jasper Date: Mon, 2 Jun 2014 10:17:32 +0000 (+0000) Subject: clang-format: Fix Allman brace breaking of enums. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=801fc6d5442ebdbc217f574488209b0799b0e77c;p=clang clang-format: Fix Allman brace breaking of enums. Before: enum Side { LEFT, RIGHT }; After: enum Side { LEFT, RIGHT }; This fixes llvm.org/PR19911. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@210011 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index a66f1dfcb2..685bfe39f2 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/lib/Format/TokenAnnotator.cpp @@ -1570,6 +1570,12 @@ bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line, return spaceRequiredBetween(Line, *Tok.Previous, Tok); } +// Returns 'true' if 'Tok' is a brace we'd want to break before in Allman style. +static bool isAllmanBrace(const FormatToken &Tok) { + return Tok.is(tok::l_brace) && Tok.BlockKind == BK_Block && + Tok.Type != TT_ObjCBlockLBrace && Tok.Type != TT_DictLiteral; +} + bool TokenAnnotator::mustBreakBefore(const AnnotatedLine &Line, const FormatToken &Right) { const FormatToken &Left = *Right.Previous; @@ -1596,10 +1602,6 @@ bool TokenAnnotator::mustBreakBefore(const AnnotatedLine &Line, Style.BreakConstructorInitializersBeforeComma && !Style.ConstructorInitializerAllOnOneLineOrOnePerLine) { return true; - } else if (Right.is(tok::l_brace) && Right.BlockKind == BK_Block && - Right.Type != TT_ObjCBlockLBrace && Right.Type != TT_DictLiteral) { - return Style.BreakBeforeBraces == FormatStyle::BS_Allman || - Style.BreakBeforeBraces == FormatStyle::BS_GNU; } else if (Right.is(tok::string_literal) && Right.TokenText.startswith("R\"")) { // Raw string literals are special wrt. line breaks. The author has made a @@ -1610,6 +1612,9 @@ bool TokenAnnotator::mustBreakBefore(const AnnotatedLine &Line, Style.Language == FormatStyle::LK_Proto) { // Don't enums onto single lines in protocol buffers. return true; + } else if (isAllmanBrace(Left) || isAllmanBrace(Right)) { + return Style.BreakBeforeBraces == FormatStyle::BS_Allman || + Style.BreakBeforeBraces == FormatStyle::BS_GNU; } // If the last token before a '}' is a comma or a comment, the intention is to diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 9a91b9ef04..19abd37c33 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -7679,6 +7679,11 @@ TEST_F(FormatTest, AllmanBraceBreaking) { " Y = 0,\n" "}\n", BreakBeforeBrace); + verifyFormat("enum X\n" + "{\n" + " Y = 0\n" + "}\n", + BreakBeforeBrace); verifyFormat("@interface BSApplicationController ()\n" "{\n"