clang-format: [JS] support `interface` as a free standing identifier.
Summary: `interface` can be used as a fee standing identifier in JavaScript/TypeScript. This change uses the heuristic of whether it's followed by another identifier as an indication. Reviewers: djasper Subscribers: klimek, cfe-commits Differential Revision: http://reviews.llvm.org/D19240 llvm-svn: 266789
This commit is contained in:
parent
461f2ff445
commit
1e8261ea04
|
@ -1007,6 +1007,21 @@ void UnwrappedLineParser::parseStructuralElement() {
|
|||
if ((Style.Language == FormatStyle::LK_JavaScript ||
|
||||
Style.Language == FormatStyle::LK_Java) &&
|
||||
FormatTok->is(Keywords.kw_interface)) {
|
||||
if (Style.Language == FormatStyle::LK_JavaScript) {
|
||||
// In JavaScript/TypeScript, "interface" can be used as a standalone
|
||||
// identifier, e.g. in `var interface = 1;`. If "interface" is
|
||||
// followed by another identifier, it is very like to be an actual
|
||||
// interface declaration.
|
||||
unsigned StoredPosition = Tokens->getPosition();
|
||||
FormatToken *Next = Tokens->getNextToken();
|
||||
FormatTok = Tokens->setPosition(StoredPosition);
|
||||
if (Next && (Next->isNot(tok::identifier) ||
|
||||
Next->isOneOf(Keywords.kw_instanceof, Keywords.kw_of,
|
||||
Keywords.kw_in))) {
|
||||
nextToken();
|
||||
break;
|
||||
}
|
||||
}
|
||||
parseRecord();
|
||||
addUnwrappedLine();
|
||||
return;
|
||||
|
|
|
@ -136,6 +136,9 @@ TEST_F(FormatTestJS, ReservedWords) {
|
|||
"};");
|
||||
verifyFormat("var struct = 2;");
|
||||
verifyFormat("var union = 2;");
|
||||
verifyFormat("var interface = 2;");
|
||||
verifyFormat("interface = 2;");
|
||||
verifyFormat("x = interface instanceof y;");
|
||||
}
|
||||
|
||||
TEST_F(FormatTestJS, CppKeywords) {
|
||||
|
|
Loading…
Reference in New Issue