]> granicus.if.org Git - clang/commitdiff
clang-format: Properly parse parenthesis in braced lists.
authorDaniel Jasper <djasper@google.com>
Tue, 30 Jun 2015 11:32:22 +0000 (11:32 +0000)
committerDaniel Jasper <djasper@google.com>
Tue, 30 Jun 2015 11:32:22 +0000 (11:32 +0000)
Among other things, this makes clang-format understand arbitrary blocks
embedded in them, such as:

  SomeFunction({MACRO({ return output; }), b});

where MACRO could e.g. expand to a lambda.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241059 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/UnwrappedLineParser.cpp
unittests/Format/FormatTest.cpp

index 72652a7d0d1e86d27c4662a2a7438e42e332788d..c58e6bccd9bc9f965034022148f57db693232d38 100644 (file)
@@ -1111,16 +1111,15 @@ bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons) {
       FormatTok->BlockKind = BK_BracedInit;
       parseBracedList();
       break;
-    case tok::r_paren:
+    case tok::l_paren:
+      parseParens();
       // JavaScript can just have free standing methods and getters/setters in
       // object literals. Detect them by a "{" following ")".
       if (Style.Language == FormatStyle::LK_JavaScript) {
-        nextToken();
         if (FormatTok->is(tok::l_brace))
           parseChildBlock();
         break;
       }
-      nextToken();
       break;
     case tok::r_brace:
       nextToken();
index 743171fb003de95968848380b1a00173d2beb8fb..ef5299aada765ab3010ac3f73ac9b229ffaf2488 100644 (file)
@@ -3184,6 +3184,8 @@ TEST_F(FormatTest, LayoutNestedBlocks) {
                "}, a);",
                Style);
 
+  verifyFormat("SomeFunction({MACRO({ return output; }), b});");
+
   verifyNoCrash("^{v^{a}}");
 }