From 74f597e1a9a30b54aa6db73a6c80e8e4e31295de Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Fri, 29 May 2015 06:19:49 +0000 Subject: [PATCH] clang-format: [JS] Support ES6 computed property names. Before: var x = { [a]: 1, b: 2 }; After: var x = { [a]: 1, b: 2 }; git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@238544 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Format/FormatToken.h | 1 + lib/Format/TokenAnnotator.cpp | 3 +++ unittests/Format/FormatTestJS.cpp | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/lib/Format/FormatToken.h b/lib/Format/FormatToken.h index ec0fdf4aa8..dd12969454 100644 --- a/lib/Format/FormatToken.h +++ b/lib/Format/FormatToken.h @@ -51,6 +51,7 @@ enum TokenType { TT_InlineASMBrace, TT_InlineASMColon, TT_JavaAnnotation, + TT_JsComputedPropertyName, TT_JsFatArrow, TT_JsTypeColon, TT_JsTypeOptionalQuestion, diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index 2d8dbdbad5..3b6628ecfb 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/lib/Format/TokenAnnotator.cpp @@ -275,6 +275,9 @@ private: if (Left->is(TT_Unknown)) { if (StartsObjCMethodExpr) { Left->Type = TT_ObjCMethodExpr; + } else if (Style.Language == FormatStyle::LK_JavaScript && Parent && + Parent->isOneOf(tok::l_brace, tok::comma)) { + Left->Type = TT_JsComputedPropertyName; } else if (Parent && Parent->isOneOf(tok::at, tok::equal, tok::comma)) { Left->Type = TT_ArrayInitializerLSquare; } else { diff --git a/unittests/Format/FormatTestJS.cpp b/unittests/Format/FormatTestJS.cpp index a536926c73..d95ff9ba83 100644 --- a/unittests/Format/FormatTestJS.cpp +++ b/unittests/Format/FormatTestJS.cpp @@ -151,6 +151,11 @@ TEST_F(FormatTestJS, ContainerLiterals) { // Arrow functions in object literals. verifyFormat("var x = {y: (a) => { return a; }};"); verifyFormat("var x = {y: (a) => a};"); + + // Computed keys. + verifyFormat("var x = {\n" + " [a]: 1,\n" + "};"); } TEST_F(FormatTestJS, MethodsInObjectLiterals) { -- 2.40.0