From 793cc2b0219180dd34fe87b445b7fc204b1efd8f Mon Sep 17 00:00:00 2001 From: Isabel Duan Date: Tue, 26 Nov 2024 12:02:09 -0800 Subject: [PATCH 1/2] test cases --- ...sxFragReactReferenceErrors(jsx=preserve).js | 18 ++++++++++++++++++ ...gReactReferenceErrors(jsx=preserve).symbols | 11 +++++++++++ ...ragReactReferenceErrors(jsx=preserve).types | 15 +++++++++++++++ ...eferenceErrors(jsx=react-native).errors.txt | 13 +++++++++++++ ...agReactReferenceErrors(jsx=react-native).js | 18 ++++++++++++++++++ ...ctReferenceErrors(jsx=react-native).symbols | 11 +++++++++++ ...eactReferenceErrors(jsx=react-native).types | 15 +++++++++++++++ .../compiler/jsxFragReactReferenceErrors.tsx | 14 ++++++++++++++ 8 files changed, 115 insertions(+) create mode 100644 tests/baselines/reference/jsxFragReactReferenceErrors(jsx=preserve).js create mode 100644 tests/baselines/reference/jsxFragReactReferenceErrors(jsx=preserve).symbols create mode 100644 tests/baselines/reference/jsxFragReactReferenceErrors(jsx=preserve).types create mode 100644 tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).errors.txt create mode 100644 tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).js create mode 100644 tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).symbols create mode 100644 tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).types create mode 100644 tests/cases/compiler/jsxFragReactReferenceErrors.tsx diff --git a/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=preserve).js b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=preserve).js new file mode 100644 index 0000000000000..29e499dbf98ea --- /dev/null +++ b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=preserve).js @@ -0,0 +1,18 @@ +//// [tests/cases/compiler/jsxFragReactReferenceErrors.tsx] //// + +//// [jsxFragReactReferenceErrors.tsx] +/// +/// +export function Component(){ + +return <> + +} + +//// [jsxFragReactReferenceErrors.jsx] +/// +/// +export function Component() { + return <> + ; +} diff --git a/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=preserve).symbols b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=preserve).symbols new file mode 100644 index 0000000000000..df63a975364b0 --- /dev/null +++ b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=preserve).symbols @@ -0,0 +1,11 @@ +//// [tests/cases/compiler/jsxFragReactReferenceErrors.tsx] //// + +=== jsxFragReactReferenceErrors.tsx === +/// +/// +export function Component(){ +>Component : Symbol(Component, Decl(jsxFragReactReferenceErrors.tsx, 0, 0)) + +return <> + +} diff --git a/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=preserve).types b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=preserve).types new file mode 100644 index 0000000000000..64a3cab0824cf --- /dev/null +++ b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=preserve).types @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/jsxFragReactReferenceErrors.tsx] //// + +=== jsxFragReactReferenceErrors.tsx === +/// +/// +export function Component(){ +>Component : () => JSX.Element +> : ^^^^^^^^^^^^^^^^^ + +return <> +><> : JSX.Element +> : ^^^^^^^^^^^ + + +} diff --git a/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).errors.txt b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).errors.txt new file mode 100644 index 0000000000000..bcca5aebffbeb --- /dev/null +++ b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).errors.txt @@ -0,0 +1,13 @@ +jsxFragReactReferenceErrors.tsx(5,8): error TS2686: 'React' refers to a UMD global, but the current file is a module. Consider adding an import instead. + + +==== jsxFragReactReferenceErrors.tsx (1 errors) ==== + /// + /// + export function Component(){ + + return <> + ~~ +!!! error TS2686: 'React' refers to a UMD global, but the current file is a module. Consider adding an import instead. + + } \ No newline at end of file diff --git a/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).js b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).js new file mode 100644 index 0000000000000..9ccb21875c4e4 --- /dev/null +++ b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).js @@ -0,0 +1,18 @@ +//// [tests/cases/compiler/jsxFragReactReferenceErrors.tsx] //// + +//// [jsxFragReactReferenceErrors.tsx] +/// +/// +export function Component(){ + +return <> + +} + +//// [jsxFragReactReferenceErrors.js] +/// +/// +export function Component() { + return <> + ; +} diff --git a/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).symbols b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).symbols new file mode 100644 index 0000000000000..df63a975364b0 --- /dev/null +++ b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).symbols @@ -0,0 +1,11 @@ +//// [tests/cases/compiler/jsxFragReactReferenceErrors.tsx] //// + +=== jsxFragReactReferenceErrors.tsx === +/// +/// +export function Component(){ +>Component : Symbol(Component, Decl(jsxFragReactReferenceErrors.tsx, 0, 0)) + +return <> + +} diff --git a/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).types b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).types new file mode 100644 index 0000000000000..64a3cab0824cf --- /dev/null +++ b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).types @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/jsxFragReactReferenceErrors.tsx] //// + +=== jsxFragReactReferenceErrors.tsx === +/// +/// +export function Component(){ +>Component : () => JSX.Element +> : ^^^^^^^^^^^^^^^^^ + +return <> +><> : JSX.Element +> : ^^^^^^^^^^^ + + +} diff --git a/tests/cases/compiler/jsxFragReactReferenceErrors.tsx b/tests/cases/compiler/jsxFragReactReferenceErrors.tsx new file mode 100644 index 0000000000000..92f4725d51bc3 --- /dev/null +++ b/tests/cases/compiler/jsxFragReactReferenceErrors.tsx @@ -0,0 +1,14 @@ +// @jsx: react-native, preserve +// @strict: true +// @skipLibCheck: true +// @target: ES2017 +// @module: ESNext +// @esModuleInterop: true + +/// +/// +export function Component(){ + +return <> + +} \ No newline at end of file From 861c718f9906bb0f306416873b7be37a118f04fa Mon Sep 17 00:00:00 2001 From: Isabel Duan Date: Tue, 26 Nov 2024 12:16:45 -0800 Subject: [PATCH 2/2] fix --- src/compiler/checker.ts | 24 ++++++++++++++++--- ...ferenceErrors(jsx=react-native).errors.txt | 13 ---------- 2 files changed, 21 insertions(+), 16 deletions(-) delete mode 100644 tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).errors.txt diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3d044fa5bf0f4..902b64c847ace 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -30018,7 +30018,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { // #38720/60122, allow null as jsxFragmentFactory let jsxFactorySym: Symbol | undefined; if (!(isJsxOpeningFragment(node) && jsxFactoryNamespace === "null")) { - jsxFactorySym = resolveName(jsxFactoryLocation, jsxFactoryNamespace, compilerOptions.jsx === JsxEmit.Preserve ? SymbolFlags.Value & ~SymbolFlags.Enum : SymbolFlags.Value, jsxFactoryRefErr, /*isUse*/ true); + jsxFactorySym = resolveName( + jsxFactoryLocation, + jsxFactoryNamespace, + (compilerOptions.jsx === JsxEmit.Preserve || compilerOptions.jsx === JsxEmit.ReactNative) ? SymbolFlags.Value & ~SymbolFlags.Enum : SymbolFlags.Value, + jsxFactoryRefErr, + /*isUse*/ true, + ); } if (jsxFactorySym) { @@ -30037,7 +30043,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { const file = getSourceFileOfNode(node); const localJsxNamespace = getLocalJsxNamespace(file); if (localJsxNamespace) { - resolveName(jsxFactoryLocation, localJsxNamespace, compilerOptions.jsx === JsxEmit.Preserve ? SymbolFlags.Value & ~SymbolFlags.Enum : SymbolFlags.Value, jsxFactoryRefErr, /*isUse*/ true); + resolveName( + jsxFactoryLocation, + localJsxNamespace, + (compilerOptions.jsx === JsxEmit.Preserve || compilerOptions.jsx === JsxEmit.ReactNative) ? SymbolFlags.Value & ~SymbolFlags.Enum : SymbolFlags.Value, + jsxFactoryRefErr, + /*isUse*/ true, + ); } } } @@ -36825,7 +36837,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { const jsxFactoryRefErr = diagnostics ? Diagnostics.Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found : undefined; const jsxFactorySymbol = getJsxNamespaceContainerForImplicitImport(node) ?? - resolveName(node, jsxFragmentFactoryName, compilerOptions.jsx === JsxEmit.Preserve ? SymbolFlags.Value & ~SymbolFlags.Enum : SymbolFlags.Value, /*nameNotFoundMessage*/ jsxFactoryRefErr, /*isUse*/ true); + resolveName( + node, + jsxFragmentFactoryName, + (compilerOptions.jsx === JsxEmit.Preserve || compilerOptions.jsx === JsxEmit.ReactNative) ? SymbolFlags.Value & ~SymbolFlags.Enum : SymbolFlags.Value, + /*nameNotFoundMessage*/ jsxFactoryRefErr, + /*isUse*/ true, + ); if (jsxFactorySymbol === undefined) return sourceFileLinks.jsxFragmentType = errorType; if (jsxFactorySymbol.escapedName === ReactNames.Fragment) return sourceFileLinks.jsxFragmentType = getTypeOfSymbol(jsxFactorySymbol); diff --git a/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).errors.txt b/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).errors.txt deleted file mode 100644 index bcca5aebffbeb..0000000000000 --- a/tests/baselines/reference/jsxFragReactReferenceErrors(jsx=react-native).errors.txt +++ /dev/null @@ -1,13 +0,0 @@ -jsxFragReactReferenceErrors.tsx(5,8): error TS2686: 'React' refers to a UMD global, but the current file is a module. Consider adding an import instead. - - -==== jsxFragReactReferenceErrors.tsx (1 errors) ==== - /// - /// - export function Component(){ - - return <> - ~~ -!!! error TS2686: 'React' refers to a UMD global, but the current file is a module. Consider adding an import instead. - - } \ No newline at end of file