Skip to content

Commit 842fa99

Browse files
iisaduantypescript-bot
authored andcommitted
fix missing react error with fragments in react-native (#60615)
1 parent d701d90 commit 842fa99

8 files changed

+123
-3
lines changed

src/compiler/checker.ts

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29882,7 +29882,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2988229882
// #38720/60122, allow null as jsxFragmentFactory
2988329883
let jsxFactorySym: Symbol | undefined;
2988429884
if (!(isJsxOpeningFragment(node) && jsxFactoryNamespace === "null")) {
29885-
jsxFactorySym = resolveName(jsxFactoryLocation, jsxFactoryNamespace, compilerOptions.jsx === JsxEmit.Preserve ? SymbolFlags.Value & ~SymbolFlags.Enum : SymbolFlags.Value, jsxFactoryRefErr, /*isUse*/ true);
29885+
jsxFactorySym = resolveName(
29886+
jsxFactoryLocation,
29887+
jsxFactoryNamespace,
29888+
(compilerOptions.jsx === JsxEmit.Preserve || compilerOptions.jsx === JsxEmit.ReactNative) ? SymbolFlags.Value & ~SymbolFlags.Enum : SymbolFlags.Value,
29889+
jsxFactoryRefErr,
29890+
/*isUse*/ true,
29891+
);
2988629892
}
2988729893

2988829894
if (jsxFactorySym) {
@@ -29901,7 +29907,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2990129907
const file = getSourceFileOfNode(node);
2990229908
const localJsxNamespace = getLocalJsxNamespace(file);
2990329909
if (localJsxNamespace) {
29904-
resolveName(jsxFactoryLocation, localJsxNamespace, compilerOptions.jsx === JsxEmit.Preserve ? SymbolFlags.Value & ~SymbolFlags.Enum : SymbolFlags.Value, jsxFactoryRefErr, /*isUse*/ true);
29910+
resolveName(
29911+
jsxFactoryLocation,
29912+
localJsxNamespace,
29913+
(compilerOptions.jsx === JsxEmit.Preserve || compilerOptions.jsx === JsxEmit.ReactNative) ? SymbolFlags.Value & ~SymbolFlags.Enum : SymbolFlags.Value,
29914+
jsxFactoryRefErr,
29915+
/*isUse*/ true,
29916+
);
2990529917
}
2990629918
}
2990729919
}
@@ -36655,7 +36667,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3665536667

3665636668
const jsxFactoryRefErr = diagnostics ? Diagnostics.Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found : undefined;
3665736669
const jsxFactorySymbol = getJsxNamespaceContainerForImplicitImport(node) ??
36658-
resolveName(node, jsxFragmentFactoryName, compilerOptions.jsx === JsxEmit.Preserve ? SymbolFlags.Value & ~SymbolFlags.Enum : SymbolFlags.Value, /*nameNotFoundMessage*/ jsxFactoryRefErr, /*isUse*/ true);
36670+
resolveName(
36671+
node,
36672+
jsxFragmentFactoryName,
36673+
(compilerOptions.jsx === JsxEmit.Preserve || compilerOptions.jsx === JsxEmit.ReactNative) ? SymbolFlags.Value & ~SymbolFlags.Enum : SymbolFlags.Value,
36674+
/*nameNotFoundMessage*/ jsxFactoryRefErr,
36675+
/*isUse*/ true,
36676+
);
3665936677

3666036678
if (jsxFactorySymbol === undefined) return sourceFileLinks.jsxFragmentType = errorType;
3666136679
if (jsxFactorySymbol.escapedName === ReactNames.Fragment) return sourceFileLinks.jsxFragmentType = getTypeOfSymbol(jsxFactorySymbol);
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//// [tests/cases/compiler/jsxFragReactReferenceErrors.tsx] ////
2+
3+
//// [jsxFragReactReferenceErrors.tsx]
4+
/// <reference path="/.lib/react18/react18.d.ts" />
5+
/// <reference path="/.lib/react18/global.d.ts" />
6+
export function Component(){
7+
8+
return <>
9+
</>
10+
}
11+
12+
//// [jsxFragReactReferenceErrors.jsx]
13+
/// <reference path="react18/react18.d.ts" />
14+
/// <reference path="react18/global.d.ts" />
15+
export function Component() {
16+
return <>
17+
</>;
18+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [tests/cases/compiler/jsxFragReactReferenceErrors.tsx] ////
2+
3+
=== jsxFragReactReferenceErrors.tsx ===
4+
/// <reference path="react18/react18.d.ts" />
5+
/// <reference path="react18/global.d.ts" />
6+
export function Component(){
7+
>Component : Symbol(Component, Decl(jsxFragReactReferenceErrors.tsx, 0, 0))
8+
9+
return <>
10+
</>
11+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
//// [tests/cases/compiler/jsxFragReactReferenceErrors.tsx] ////
2+
3+
=== jsxFragReactReferenceErrors.tsx ===
4+
/// <reference path="react18/react18.d.ts" />
5+
/// <reference path="react18/global.d.ts" />
6+
export function Component(){
7+
>Component : () => JSX.Element
8+
> : ^^^^^^^^^^^^^^^^^
9+
10+
return <>
11+
><> </> : JSX.Element
12+
> : ^^^^^^^^^^^
13+
14+
</>
15+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//// [tests/cases/compiler/jsxFragReactReferenceErrors.tsx] ////
2+
3+
//// [jsxFragReactReferenceErrors.tsx]
4+
/// <reference path="/.lib/react18/react18.d.ts" />
5+
/// <reference path="/.lib/react18/global.d.ts" />
6+
export function Component(){
7+
8+
return <>
9+
</>
10+
}
11+
12+
//// [jsxFragReactReferenceErrors.js]
13+
/// <reference path="react18/react18.d.ts" />
14+
/// <reference path="react18/global.d.ts" />
15+
export function Component() {
16+
return <>
17+
</>;
18+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [tests/cases/compiler/jsxFragReactReferenceErrors.tsx] ////
2+
3+
=== jsxFragReactReferenceErrors.tsx ===
4+
/// <reference path="react18/react18.d.ts" />
5+
/// <reference path="react18/global.d.ts" />
6+
export function Component(){
7+
>Component : Symbol(Component, Decl(jsxFragReactReferenceErrors.tsx, 0, 0))
8+
9+
return <>
10+
</>
11+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
//// [tests/cases/compiler/jsxFragReactReferenceErrors.tsx] ////
2+
3+
=== jsxFragReactReferenceErrors.tsx ===
4+
/// <reference path="react18/react18.d.ts" />
5+
/// <reference path="react18/global.d.ts" />
6+
export function Component(){
7+
>Component : () => JSX.Element
8+
> : ^^^^^^^^^^^^^^^^^
9+
10+
return <>
11+
><> </> : JSX.Element
12+
> : ^^^^^^^^^^^
13+
14+
</>
15+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// @jsx: react-native, preserve
2+
// @strict: true
3+
// @skipLibCheck: true
4+
// @target: ES2017
5+
// @module: ESNext
6+
// @esModuleInterop: true
7+
8+
/// <reference path="/.lib/react18/react18.d.ts" />
9+
/// <reference path="/.lib/react18/global.d.ts" />
10+
export function Component(){
11+
12+
return <>
13+
</>
14+
}

0 commit comments

Comments
 (0)