]> granicus.if.org Git - clang/commitdiff
clang-format: [JS] Support getters, setters and methods in object literals.
authorDaniel Jasper <djasper@google.com>
Tue, 31 Mar 2015 14:34:15 +0000 (14:34 +0000)
committerDaniel Jasper <djasper@google.com>
Tue, 31 Mar 2015 14:34:15 +0000 (14:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@233698 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/UnwrappedLineParser.cpp
unittests/Format/FormatTestJS.cpp

index a036fb29da31a323c2c4f65935b5df624382c930..7e8efad26b6b1dc6c03b8520aedbb4ffbd982734 100644 (file)
@@ -1036,6 +1036,17 @@ bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons) {
       FormatTok->BlockKind = BK_BracedInit;
       parseBracedList();
       break;
+    case tok::r_paren:
+      // 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();
       return !HasError;
index 4378ded5c361b13785fd7e09055c669d6a40ad68..00744728ddbc2c952b8e876adfc523cfb5f8d5c1 100644 (file)
@@ -144,6 +144,27 @@ TEST_F(FormatTestJS, ContainerLiterals) {
   verifyFormat("x = foo && {a: 123};");
 }
 
+TEST_F(FormatTestJS, MethodsInObjectLiterals) {
+  verifyFormat("var o = {\n"
+               "  value: 'test',\n"
+               "  get value() {  // getter\n"
+               "    return this.value;\n"
+               "  }\n"
+               "};");
+  verifyFormat("var o = {\n"
+               "  value: 'test',\n"
+               "  set value(val) {  // setter\n"
+               "    this.value = val;\n"
+               "  }\n"
+               "};");
+  verifyFormat("var o = {\n"
+               "  value: 'test',\n"
+               "  someMethod(val) {  // method\n"
+               "    doSomething(this.value + val);\n"
+               "  }\n"
+               "};");
+}
+
 TEST_F(FormatTestJS, SpacesInContainerLiterals) {
   verifyFormat("var arr = [1, 2, 3];");
   verifyFormat("f({a: 1, b: 2, c: 3});");