diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cd1409b13f37a..34297a23b04d0 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -30041,8 +30041,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { // if JsxFragment, additionally mark jsx pragma as referenced, since `getJsxNamespace` above would have resolved to only the fragment factory if they are distinct if (isJsxOpeningFragment(node)) { const file = getSourceFileOfNode(node); - const localJsxNamespace = getLocalJsxNamespace(file); - if (localJsxNamespace) { + const entity = getJsxFactoryEntity(file); + if (entity) { + const localJsxNamespace = getFirstIdentifier(entity).escapedText; resolveName( jsxFactoryLocation, localJsxNamespace, diff --git a/tests/baselines/reference/jsxFragmentAndFactoryUsedOnFragmentUse.js b/tests/baselines/reference/jsxFragmentAndFactoryUsedOnFragmentUse.js new file mode 100644 index 0000000000000..d30158153ae59 --- /dev/null +++ b/tests/baselines/reference/jsxFragmentAndFactoryUsedOnFragmentUse.js @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/jsxFragmentAndFactoryUsedOnFragmentUse.tsx] //// + +//// [index.tsx] +import {element, fragment} from "./jsx"; + +export const a = <>fragment text + +//// [jsx.ts] +export function element() {} + +export function fragment() {} + +//// [jsx.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.element = element; +exports.fragment = fragment; +function element() { } +function fragment() { } +//// [index.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.a = void 0; +var jsx_1 = require("./jsx"); +exports.a = (0, jsx_1.element)(jsx_1.fragment, null, "fragment text"); diff --git a/tests/baselines/reference/jsxFragmentAndFactoryUsedOnFragmentUse.symbols b/tests/baselines/reference/jsxFragmentAndFactoryUsedOnFragmentUse.symbols new file mode 100644 index 0000000000000..c3152c3e6b4f6 --- /dev/null +++ b/tests/baselines/reference/jsxFragmentAndFactoryUsedOnFragmentUse.symbols @@ -0,0 +1,17 @@ +//// [tests/cases/compiler/jsxFragmentAndFactoryUsedOnFragmentUse.tsx] //// + +=== index.tsx === +import {element, fragment} from "./jsx"; +>element : Symbol(element, Decl(index.tsx, 0, 8)) +>fragment : Symbol(fragment, Decl(index.tsx, 0, 16)) + +export const a = <>fragment text +>a : Symbol(a, Decl(index.tsx, 2, 12)) + +=== jsx.ts === +export function element() {} +>element : Symbol(element, Decl(jsx.ts, 0, 0)) + +export function fragment() {} +>fragment : Symbol(fragment, Decl(jsx.ts, 0, 28)) + diff --git a/tests/baselines/reference/jsxFragmentAndFactoryUsedOnFragmentUse.types b/tests/baselines/reference/jsxFragmentAndFactoryUsedOnFragmentUse.types new file mode 100644 index 0000000000000..c2562565bb57d --- /dev/null +++ b/tests/baselines/reference/jsxFragmentAndFactoryUsedOnFragmentUse.types @@ -0,0 +1,22 @@ +//// [tests/cases/compiler/jsxFragmentAndFactoryUsedOnFragmentUse.tsx] //// + +=== index.tsx === +import {element, fragment} from "./jsx"; +>element : () => void +> : ^^^^^^^^^^ +>fragment : () => void +> : ^^^^^^^^^^ + +export const a = <>fragment text +>a : any +><>fragment text : any + +=== jsx.ts === +export function element() {} +>element : () => void +> : ^^^^^^^^^^ + +export function fragment() {} +>fragment : () => void +> : ^^^^^^^^^^ + diff --git a/tests/cases/compiler/jsxFragmentAndFactoryUsedOnFragmentUse.tsx b/tests/cases/compiler/jsxFragmentAndFactoryUsedOnFragmentUse.tsx new file mode 100644 index 0000000000000..fcbb20a5c8388 --- /dev/null +++ b/tests/cases/compiler/jsxFragmentAndFactoryUsedOnFragmentUse.tsx @@ -0,0 +1,13 @@ +// @jsx: react +// @jsxFactory: element +// @jsxFragmentFactory: fragment +// @noUnusedLocals: true +// @filename: index.tsx +import {element, fragment} from "./jsx"; + +export const a = <>fragment text + +// @filename: jsx.ts +export function element() {} + +export function fragment() {} \ No newline at end of file