mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-13 06:20:23 -06:00
Mark local "react" symbol as referenced since it might not be marked if there was no error message being displayed
Fixes #10312
This commit is contained in:
parent
17cf4357ad
commit
96a7b7b00f
@ -11070,14 +11070,20 @@ namespace ts {
|
||||
function checkJsxOpeningLikeElement(node: JsxOpeningLikeElement) {
|
||||
checkGrammarJsxElement(node);
|
||||
checkJsxPreconditions(node);
|
||||
|
||||
// The reactNamespace symbol should be marked as 'used' so we don't incorrectly elide its import. And if there
|
||||
// is no reactNamespace symbol in scope when targeting React emit, we should issue an error.
|
||||
const reactRefErr = compilerOptions.jsx === JsxEmit.React ? Diagnostics.Cannot_find_name_0 : undefined;
|
||||
const reactNamespace = compilerOptions.reactNamespace ? compilerOptions.reactNamespace : "React";
|
||||
const reactSym = resolveName(node.tagName, reactNamespace, SymbolFlags.Value, reactRefErr, reactNamespace);
|
||||
if (reactSym) {
|
||||
getSymbolLinks(reactSym).referenced = true;
|
||||
// Mark local symbol as referenced here because it might not have been marked
|
||||
// if jsx emit was not react as there wont be error being emitted
|
||||
reactSym.isReferenced = true;
|
||||
|
||||
// If react symbol is alias, mark it as refereced
|
||||
if (reactSym.flags & SymbolFlags.Alias && !isConstEnumOrConstEnumOnlyModule(resolveAlias(reactSym))) {
|
||||
markAliasSymbolAsReferenced(reactSym);
|
||||
}
|
||||
}
|
||||
|
||||
const targetAttributesType = getJsxElementAttributesType(node);
|
||||
|
||||
@ -1,25 +0,0 @@
|
||||
tests/cases/compiler/foo.tsx(2,8): error TS6133: 'React' is declared but never used.
|
||||
|
||||
|
||||
==== tests/cases/compiler/foo.tsx (1 errors) ====
|
||||
|
||||
import React = require("react");
|
||||
~~~~~
|
||||
!!! error TS6133: 'React' is declared but never used.
|
||||
|
||||
export const FooComponent = <div></div>
|
||||
|
||||
==== tests/cases/compiler/node_modules/@types/react/index.d.ts (0 errors) ====
|
||||
export = React;
|
||||
export as namespace React;
|
||||
|
||||
declare namespace React {
|
||||
function createClass<P, S>(spec);
|
||||
}
|
||||
declare global {
|
||||
namespace JSX {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
36
tests/baselines/reference/unusedImports13.symbols
Normal file
36
tests/baselines/reference/unusedImports13.symbols
Normal file
@ -0,0 +1,36 @@
|
||||
=== tests/cases/compiler/foo.tsx ===
|
||||
|
||||
import React = require("react");
|
||||
>React : Symbol(React, Decl(foo.tsx, 0, 0))
|
||||
|
||||
export const FooComponent = <div></div>
|
||||
>FooComponent : Symbol(FooComponent, Decl(foo.tsx, 3, 12))
|
||||
>div : Symbol(unknown)
|
||||
>div : Symbol(unknown)
|
||||
|
||||
=== tests/cases/compiler/node_modules/@types/react/index.d.ts ===
|
||||
export = React;
|
||||
>React : Symbol(React, Decl(index.d.ts, 1, 26))
|
||||
|
||||
export as namespace React;
|
||||
>React : Symbol(React, Decl(index.d.ts, 0, 15))
|
||||
|
||||
declare namespace React {
|
||||
>React : Symbol(React, Decl(index.d.ts, 1, 26))
|
||||
|
||||
function createClass<P, S>(spec);
|
||||
>createClass : Symbol(createClass, Decl(index.d.ts, 3, 25))
|
||||
>P : Symbol(P, Decl(index.d.ts, 4, 25))
|
||||
>S : Symbol(S, Decl(index.d.ts, 4, 27))
|
||||
>spec : Symbol(spec, Decl(index.d.ts, 4, 31))
|
||||
}
|
||||
declare global {
|
||||
>global : Symbol(global, Decl(index.d.ts, 5, 1))
|
||||
|
||||
namespace JSX {
|
||||
>JSX : Symbol(JSX, Decl(index.d.ts, 6, 16))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
37
tests/baselines/reference/unusedImports13.types
Normal file
37
tests/baselines/reference/unusedImports13.types
Normal file
@ -0,0 +1,37 @@
|
||||
=== tests/cases/compiler/foo.tsx ===
|
||||
|
||||
import React = require("react");
|
||||
>React : typeof React
|
||||
|
||||
export const FooComponent = <div></div>
|
||||
>FooComponent : any
|
||||
><div></div> : any
|
||||
>div : any
|
||||
>div : any
|
||||
|
||||
=== tests/cases/compiler/node_modules/@types/react/index.d.ts ===
|
||||
export = React;
|
||||
>React : typeof React
|
||||
|
||||
export as namespace React;
|
||||
>React : typeof React
|
||||
|
||||
declare namespace React {
|
||||
>React : typeof React
|
||||
|
||||
function createClass<P, S>(spec);
|
||||
>createClass : <P, S>(spec: any) => any
|
||||
>P : P
|
||||
>S : S
|
||||
>spec : any
|
||||
}
|
||||
declare global {
|
||||
>global : any
|
||||
|
||||
namespace JSX {
|
||||
>JSX : any
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user