r248714 - clang-format: [JS] Support pseudo-keywords
Daniel Jasper via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 28 07:29:45 PDT 2015
Author: djasper
Date: Mon Sep 28 09:29:45 2015
New Revision: 248714
URL: http://llvm.org/viewvc/llvm-project?rev=248714&view=rev
Log:
clang-format: [JS] Support pseudo-keywords
JavaScript allows keywords to appear in IdenfierName positions, e.g.
fields, or object literal members, but not as plain identifiers.
Patch by Martin Probst. Thank you!
Modified:
cfe/trunk/lib/Format/TokenAnnotator.cpp
cfe/trunk/lib/Format/UnwrappedLineParser.cpp
cfe/trunk/unittests/Format/FormatTestJS.cpp
Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=248714&r1=248713&r2=248714&view=diff
==============================================================================
--- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)
+++ cfe/trunk/lib/Format/TokenAnnotator.cpp Mon Sep 28 09:29:45 2015
@@ -374,7 +374,7 @@ private:
FormatToken *Previous = CurrentToken->getPreviousNonComment();
if ((CurrentToken->is(tok::colon) ||
Style.Language == FormatStyle::LK_Proto) &&
- Previous->is(tok::identifier))
+ Previous->Tok.getIdentifierInfo())
Previous->Type = TT_SelectorName;
if (CurrentToken->is(tok::colon) ||
Style.Language == FormatStyle::LK_JavaScript)
Modified: cfe/trunk/lib/Format/UnwrappedLineParser.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=248714&r1=248713&r2=248714&view=diff
==============================================================================
--- cfe/trunk/lib/Format/UnwrappedLineParser.cpp (original)
+++ cfe/trunk/lib/Format/UnwrappedLineParser.cpp Mon Sep 28 09:29:45 2015
@@ -844,6 +844,11 @@ void UnwrappedLineParser::parseStructura
if (Style.Language == FormatStyle::LK_Java && FormatTok &&
FormatTok->is(tok::kw_class))
nextToken();
+ if (Style.Language == FormatStyle::LK_JavaScript && FormatTok &&
+ FormatTok->Tok.getIdentifierInfo())
+ // JavaScript only has pseudo keywords, all keywords are allowed to
+ // appear in "IdentifierName" positions. See http://es5.github.io/#x7.6
+ nextToken();
break;
case tok::semi:
nextToken();
Modified: cfe/trunk/unittests/Format/FormatTestJS.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTestJS.cpp?rev=248714&r1=248713&r2=248714&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTestJS.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTestJS.cpp Mon Sep 28 09:29:45 2015
@@ -99,6 +99,19 @@ TEST_F(FormatTestJS, LiteralOperatorsCan
verifyFormat("not.and.or.not_eq = 1;");
}
+TEST_F(FormatTestJS, ReservedWords) {
+ // JavaScript reserved words (aka keywords) are only illegal when used as
+ // Identifiers, but are legal as IdentifierNames.
+ verifyFormat("x.class.struct = 1;");
+ verifyFormat("x.case = 1;");
+ verifyFormat("x.interface = 1;");
+ verifyFormat("x = {\n"
+ " a: 12,\n"
+ " interface: 1,\n"
+ " switch: 1,\n"
+ "};");
+}
+
TEST_F(FormatTestJS, ES6DestructuringAssignment) {
verifyFormat("var [a, b, c] = [1, 2, 3];");
verifyFormat("let [a, b, c] = [1, 2, 3];");
More information about the cfe-commits
mailing list