diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 23fb846c0b4..14752945f84 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3183,6 +3183,7 @@ namespace ts { if (sourceFile.languageVariant !== LanguageVariant.JSX) { return parseTypeAssertion(); } + debugger; if (lookAhead(nextTokenIsIdentifierOrKeyword)) { return parseJsxElementOrSelfClosingElement(/*inExpressionContext*/ true); } diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 58ca14ab577..2ca075e1786 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -1361,7 +1361,9 @@ namespace ts { if (text.charCodeAt(pos + 1) === CharacterCodes.equals) { return pos += 2, token = SyntaxKind.LessThanEqualsToken; } - if (text.charCodeAt(pos + 1) === CharacterCodes.slash && languageVariant === LanguageVariant.JSX) { + if (text.charCodeAt(pos + 1) === CharacterCodes.slash && + text.charCodeAt(pos + 2) !== CharacterCodes.asterisk && + languageVariant === LanguageVariant.JSX) { return pos += 2, token = SyntaxKind.LessThanSlashToken; } return pos++, token = SyntaxKind.LessThanToken; diff --git a/tests/baselines/reference/tsxParseTests2.js b/tests/baselines/reference/tsxParseTests2.js new file mode 100644 index 00000000000..c179d75776a --- /dev/null +++ b/tests/baselines/reference/tsxParseTests2.js @@ -0,0 +1,11 @@ +//// [tsxParseTests2.tsx] +declare module JSX { + interface Element { } + interface IntrinsicElements { div; span; } +} + +var x = **/div>; + + +//// [tsxParseTests2.jsx] +var x =
; diff --git a/tests/baselines/reference/tsxParseTests2.symbols b/tests/baselines/reference/tsxParseTests2.symbols new file mode 100644 index 00000000000..17b612df786 --- /dev/null +++ b/tests/baselines/reference/tsxParseTests2.symbols @@ -0,0 +1,18 @@ +=== tests/cases/conformance/jsx/tsxParseTests2.tsx === +declare module JSX { +>JSX : Symbol(JSX, Decl(tsxParseTests2.tsx, 0, 0)) + + interface Element { } +>Element : Symbol(Element, Decl(tsxParseTests2.tsx, 0, 20)) + + interface IntrinsicElements { div; span; } +>IntrinsicElements : Symbol(IntrinsicElements, Decl(tsxParseTests2.tsx, 1, 22)) +>div : Symbol(div, Decl(tsxParseTests2.tsx, 2, 30)) +>span : Symbol(span, Decl(tsxParseTests2.tsx, 2, 35)) +} + +var x = **/div>; +>x : Symbol(x, Decl(tsxParseTests2.tsx, 5, 3)) +>div : Symbol(JSX.IntrinsicElements.div, Decl(tsxParseTests2.tsx, 2, 30)) +>div : Symbol(JSX.IntrinsicElements.div, Decl(tsxParseTests2.tsx, 2, 30)) + diff --git a/tests/baselines/reference/tsxParseTests2.types b/tests/baselines/reference/tsxParseTests2.types new file mode 100644 index 00000000000..5714a4d3483 --- /dev/null +++ b/tests/baselines/reference/tsxParseTests2.types @@ -0,0 +1,19 @@ +=== tests/cases/conformance/jsx/tsxParseTests2.tsx === +declare module JSX { +>JSX : any + + interface Element { } +>Element : Element + + interface IntrinsicElements { div; span; } +>IntrinsicElements : IntrinsicElements +>div : any +>span : any +} + +var x = **/div>; +>x : JSX.Element +>**/div> : JSX.Element +>div : any +>div : any + diff --git a/tests/cases/conformance/jsx/tsxParseTests2.tsx b/tests/cases/conformance/jsx/tsxParseTests2.tsx new file mode 100644 index 00000000000..9ced9b93b79 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxParseTests2.tsx @@ -0,0 +1,8 @@ +//@filename: file.tsx +//@jsx: preserve +declare module JSX { + interface Element { } + interface IntrinsicElements { div; span; } +} + +var x = **/div>;