forked from OSchip/llvm-project
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! llvm-svn: 248714
This commit is contained in:
parent
9f642f7d7a
commit
ba52fcb7d5
|
@ -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)
|
||||
|
|
|
@ -844,6 +844,11 @@ void UnwrappedLineParser::parseStructuralElement() {
|
|||
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();
|
||||
|
|
|
@ -99,6 +99,19 @@ TEST_F(FormatTestJS, LiteralOperatorsCanBeKeywords) {
|
|||
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];");
|
||||
|
|
Loading…
Reference in New Issue