clang-format: Break before 'else' in Stroustrup style.
authorDaniel Jasper <djasper@google.com>
Tue, 5 Aug 2014 12:06:20 +0000 (12:06 +0000)
committerDaniel Jasper <djasper@google.com>
Tue, 5 Aug 2014 12:06:20 +0000 (12:06 +0000)
Seems to be the desired thing to do according to:
  http://www.stroustrup.com/Programming/PPP-style-rev3.pdf

Patch by Jarkko Hietaniemi, thank you!

llvm-svn: 214857

clang/include/clang/Format/Format.h
clang/lib/Format/UnwrappedLineParser.cpp
clang/unittests/Format/FormatTest.cpp

index 45cccaa..b21efa1 100644 (file)
@@ -269,7 +269,7 @@ struct FormatStyle {
     /// Like \c Attach, but break before braces on function, namespace and
     /// class definitions.
     BS_Linux,
-    /// Like \c Attach, but break before function definitions.
+    /// Like \c Attach, but break before function definitions, and 'else'.
     BS_Stroustrup,
     /// Always break before braces.
     BS_Allman,
index ed28497..1751173 100644 (file)
@@ -1080,6 +1080,8 @@ void UnwrappedLineParser::parseIfThenElse() {
     --Line->Level;
   }
   if (FormatTok->Tok.is(tok::kw_else)) {
+    if (Style.BreakBeforeBraces == FormatStyle::BS_Stroustrup)
+      addUnwrappedLine();
     nextToken();
     if (FormatTok->Tok.is(tok::l_brace)) {
       CompoundStatementIndenter Indenter(this, Style, Line->Level);
index 8089b3e..e0841ca 100644 (file)
@@ -7677,6 +7677,17 @@ TEST_F(FormatTest, StroustrupBraceBreaking) {
                "}",
                BreakBeforeBrace);
 
+  verifyFormat("void foo()\n"
+               "{\n"
+               "  if (a) {\n"
+               "    a();\n"
+               "  }\n"
+               "  else {\n"
+               "    b();\n"
+               "  }\n"
+               "}\n",
+               BreakBeforeBrace);
+
   verifyFormat("#ifdef _DEBUG\n"
                "int foo(int i = 0)\n"
                "#else\n"