diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 350b9d450b..57e1915656 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -12,6 +12,10 @@ namespace ts { export function createNode(kind: SyntaxKind): Node { return new (getNodeConstructor(kind))(); } + + export function tokenIsIdentifierOrKeyword(token: SyntaxKind): boolean { + return token >= SyntaxKind.Identifier; + } function visitNode(cbNode: (node: Node) => T, node: Node): T { if (node) { @@ -4102,7 +4106,7 @@ namespace ts { } function isIdentifierOrKeyword() { - return token >= SyntaxKind.Identifier; + return tokenIsIdentifierOrKeyword(token); } function nextTokenIsIdentifierOrKeywordOnSameLine() { diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 199e7e9b63..2e10a1f1b8 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -1590,7 +1590,7 @@ namespace ts { // Scans a JSX identifier; these differ from normal identifiers in that // they allow dashes function scanJsxIdentifier(): SyntaxKind { - if (token === SyntaxKind.Identifier) { + if (tokenIsIdentifierOrKeyword(token)) { let firstCharPosition = pos; while (pos < end) { let ch = text.charCodeAt(pos); diff --git a/tests/baselines/reference/keywordInJsxIdentifier.js b/tests/baselines/reference/keywordInJsxIdentifier.js new file mode 100644 index 0000000000..8a00a68e33 --- /dev/null +++ b/tests/baselines/reference/keywordInJsxIdentifier.js @@ -0,0 +1,7 @@ +//// [keywordInJsxIdentifier.tsx] + +declare var React: any; + + +//// [keywordInJsxIdentifier.js] +React.createElement("foo", {"class-id": true}); diff --git a/tests/baselines/reference/keywordInJsxIdentifier.symbols b/tests/baselines/reference/keywordInJsxIdentifier.symbols new file mode 100644 index 0000000000..6617a640dc --- /dev/null +++ b/tests/baselines/reference/keywordInJsxIdentifier.symbols @@ -0,0 +1,8 @@ +=== tests/cases/compiler/keywordInJsxIdentifier.tsx === + +declare var React: any; +>React : Symbol(React, Decl(keywordInJsxIdentifier.tsx, 1, 11)) + + +>class-id : Symbol(unknown) + diff --git a/tests/baselines/reference/keywordInJsxIdentifier.types b/tests/baselines/reference/keywordInJsxIdentifier.types new file mode 100644 index 0000000000..888d027fdd --- /dev/null +++ b/tests/baselines/reference/keywordInJsxIdentifier.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/keywordInJsxIdentifier.tsx === + +declare var React: any; +>React : any + + +> : any +>foo : any +>class-id : any + diff --git a/tests/cases/compiler/keywordInJsxIdentifier.tsx b/tests/cases/compiler/keywordInJsxIdentifier.tsx new file mode 100644 index 0000000000..8c09c90b17 --- /dev/null +++ b/tests/cases/compiler/keywordInJsxIdentifier.tsx @@ -0,0 +1,4 @@ +//@jsx: react + +declare var React: any; + \ No newline at end of file