clang-format: [JS/TypeScript] Support "enum" as an optional property name, too.
authorDaniel Jasper <djasper@google.com>
Wed, 3 Feb 2016 05:33:44 +0000 (05:33 +0000)
committerDaniel Jasper <djasper@google.com>
Wed, 3 Feb 2016 05:33:44 +0000 (05:33 +0000)
Before:
  enum?: string
  [];

After:
  enum?: string[];

llvm-svn: 259628

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

index 7b8f6e6..0c94c52 100644 (file)
@@ -1550,7 +1550,8 @@ bool UnwrappedLineParser::parseEnum() {
   // In TypeScript, "enum" can also be used as property name, e.g. in interface
   // declarations. An "enum" keyword followed by a colon would be a syntax
   // error and thus assume it is just an identifier.
-  if (Style.Language == FormatStyle::LK_JavaScript && FormatTok->is(tok::colon))
+  if (Style.Language == FormatStyle::LK_JavaScript &&
+      FormatTok->isOneOf(tok::colon, tok::question))
     return false;
 
   // Eat up enum class ...
index 5807041..7f25d59 100644 (file)
@@ -804,6 +804,7 @@ TEST_F(FormatTestJS, InterfaceDeclarations) {
   verifyFormat("interface I {\n"
                "  x: string;\n"
                "  enum: string[];\n"
+               "  enum?: string[];\n"
                "}\n"
                "var y;");
   // Ensure that state is reset after parsing the interface.