diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 19f3f5b36927c..6dbd1da2e70f4 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -3112,7 +3112,10 @@ namespace ts { return (parent as BindingElement | ImportSpecifier).propertyName === node; case SyntaxKind.ExportSpecifier: case SyntaxKind.JsxAttribute: - // Any name in an export specifier or JSX Attribute + case SyntaxKind.JsxSelfClosingElement: + case SyntaxKind.JsxOpeningElement: + case SyntaxKind.JsxClosingElement: + // Any name in an export specifier or JSX Attribute or Jsx Element return true; } return false; diff --git a/tests/baselines/reference/jsxElementsAsIdentifierNames.js b/tests/baselines/reference/jsxElementsAsIdentifierNames.js new file mode 100644 index 0000000000000..12e0c286b682f --- /dev/null +++ b/tests/baselines/reference/jsxElementsAsIdentifierNames.js @@ -0,0 +1,25 @@ +//// [a.tsx] +declare const React: any; +declare module JSX { + interface IntrinsicElements { + ["package"]: any; + } +} + +function A() { + return +} + +function B() { + return +} + + +//// [a.js] +"use strict"; +function A() { + return React.createElement("package", null); +} +function B() { + return React.createElement("package", null); +} diff --git a/tests/baselines/reference/jsxElementsAsIdentifierNames.symbols b/tests/baselines/reference/jsxElementsAsIdentifierNames.symbols new file mode 100644 index 0000000000000..3b504d515aac9 --- /dev/null +++ b/tests/baselines/reference/jsxElementsAsIdentifierNames.symbols @@ -0,0 +1,31 @@ +=== tests/cases/compiler/a.tsx === +declare const React: any; +>React : Symbol(React, Decl(a.tsx, 0, 13)) + +declare module JSX { +>JSX : Symbol(JSX, Decl(a.tsx, 0, 25)) + + interface IntrinsicElements { +>IntrinsicElements : Symbol(IntrinsicElements, Decl(a.tsx, 1, 20)) + + ["package"]: any; +>["package"] : Symbol(IntrinsicElements["package"], Decl(a.tsx, 2, 33)) +>"package" : Symbol(IntrinsicElements["package"], Decl(a.tsx, 2, 33)) + } +} + +function A() { +>A : Symbol(A, Decl(a.tsx, 5, 1)) + + return +>package : Symbol(JSX.IntrinsicElements["package"], Decl(a.tsx, 2, 33)) +} + +function B() { +>B : Symbol(B, Decl(a.tsx, 9, 1)) + + return +>package : Symbol(JSX.IntrinsicElements["package"], Decl(a.tsx, 2, 33)) +>package : Symbol(JSX.IntrinsicElements["package"], Decl(a.tsx, 2, 33)) +} + diff --git a/tests/baselines/reference/jsxElementsAsIdentifierNames.types b/tests/baselines/reference/jsxElementsAsIdentifierNames.types new file mode 100644 index 0000000000000..3617a88c1c58e --- /dev/null +++ b/tests/baselines/reference/jsxElementsAsIdentifierNames.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/a.tsx === +declare const React: any; +>React : any + +declare module JSX { + interface IntrinsicElements { + ["package"]: any; +>["package"] : any +>"package" : "package" + } +} + +function A() { +>A : () => any + + return +> : error +>package : any +} + +function B() { +>B : () => any + + return +> : error +>package : any +>package : any +} + diff --git a/tests/baselines/reference/jsxParsingError4(strict=true).errors.txt b/tests/baselines/reference/jsxParsingError4(strict=true).errors.txt deleted file mode 100644 index aeac8698a0ae0..0000000000000 --- a/tests/baselines/reference/jsxParsingError4(strict=true).errors.txt +++ /dev/null @@ -1,24 +0,0 @@ -tests/cases/conformance/jsx/a.tsx(13,4): error TS1212: Identifier expected. 'public' is a reserved word in strict mode. -tests/cases/conformance/jsx/a.tsx(13,13): error TS1212: Identifier expected. 'public' is a reserved word in strict mode. - - -==== tests/cases/conformance/jsx/a.tsx (2 errors) ==== - declare const React: any - declare namespace JSX { - interface IntrinsicElements { - [k: string]: any - } - } - - const a = ( - - ); - - const b = ( - - ~~~~~~ -!!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode. - ~~~~~~ -!!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode. - ); - \ No newline at end of file diff --git a/tests/baselines/reference/jsxParsingError4(strict=true).types b/tests/baselines/reference/jsxParsingError4(strict=true).types index f65d2d679b39c..021360520c02f 100644 --- a/tests/baselines/reference/jsxParsingError4(strict=true).types +++ b/tests/baselines/reference/jsxParsingError4(strict=true).types @@ -10,22 +10,22 @@ declare namespace JSX { } const a = ( ->a : any ->( ) : any +>a : error +>( ) : error -> : any +> : error >public-foo : any >public-foo : any ); const b = ( ->b : any ->( ) : any +>b : error +>( ) : error -> : any +> : error >public : any >public : any diff --git a/tests/cases/compiler/jsxElementsAsIdentifierNames.tsx b/tests/cases/compiler/jsxElementsAsIdentifierNames.tsx new file mode 100644 index 0000000000000..bc1f7d9cdcb96 --- /dev/null +++ b/tests/cases/compiler/jsxElementsAsIdentifierNames.tsx @@ -0,0 +1,18 @@ +// @strict: true +// @jsx: react +// @filename: a.tsx + +declare const React: any; +declare module JSX { + interface IntrinsicElements { + ["package"]: any; + } +} + +function A() { + return +} + +function B() { + return +}