Improved fix from @JsonFreeman
This commit is contained in:
parent
311d20fa99
commit
99fc99f3bc
|
@ -7096,18 +7096,18 @@ namespace ts {
|
||||||
// Look up the value in the current scope
|
// Look up the value in the current scope
|
||||||
if (node.tagName.kind === SyntaxKind.Identifier) {
|
if (node.tagName.kind === SyntaxKind.Identifier) {
|
||||||
let tag = <Identifier>node.tagName;
|
let tag = <Identifier>node.tagName;
|
||||||
valueSymbol = resolveName(tag, tag.text, SymbolFlags.Value, Diagnostics.Cannot_find_name_0, tag.text);
|
let maybeExportSymbol = getResolvedSymbol(<Identifier>node.tagName);
|
||||||
|
let valueDecl = maybeExportSymbol.valueDeclaration;
|
||||||
|
|
||||||
|
valueSymbol = (valueDecl && valueDecl.localSymbol) || maybeExportSymbol;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
valueSymbol = checkQualifiedName(<QualifiedName>node.tagName).symbol;
|
valueSymbol = checkQualifiedName(<QualifiedName>node.tagName).symbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (valueSymbol && valueSymbol !== unknownSymbol) {
|
if (valueSymbol && valueSymbol !== unknownSymbol) {
|
||||||
let symbolLinks = getSymbolLinks(valueSymbol);
|
|
||||||
if (symbolLinks) {
|
|
||||||
symbolLinks.referenced = true;
|
|
||||||
}
|
|
||||||
links.jsxFlags |= JsxFlags.ClassElement;
|
links.jsxFlags |= JsxFlags.ClassElement;
|
||||||
|
getSymbolLinks(valueSymbol).referenced = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return valueSymbol || unknownSymbol;
|
return valueSymbol || unknownSymbol;
|
||||||
|
|
|
@ -1,45 +1,47 @@
|
||||||
=== tests/cases/conformance/jsx/tsxAttributeResolution9.tsx ===
|
=== tests/cases/conformance/jsx/react.d.ts ===
|
||||||
|
|
||||||
declare module JSX {
|
declare module JSX {
|
||||||
>JSX : Symbol(JSX, Decl(tsxAttributeResolution9.tsx, 0, 0))
|
>JSX : Symbol(JSX, Decl(react.d.ts, 0, 0))
|
||||||
|
|
||||||
interface Element { }
|
interface Element { }
|
||||||
>Element : Symbol(Element, Decl(tsxAttributeResolution9.tsx, 0, 20))
|
>Element : Symbol(Element, Decl(react.d.ts, 1, 20))
|
||||||
|
|
||||||
interface IntrinsicElements {
|
interface IntrinsicElements {
|
||||||
>IntrinsicElements : Symbol(IntrinsicElements, Decl(tsxAttributeResolution9.tsx, 1, 22))
|
>IntrinsicElements : Symbol(IntrinsicElements, Decl(react.d.ts, 2, 22))
|
||||||
}
|
}
|
||||||
interface ElementAttributesProperty {
|
interface ElementAttributesProperty {
|
||||||
>ElementAttributesProperty : Symbol(ElementAttributesProperty, Decl(tsxAttributeResolution9.tsx, 3, 2))
|
>ElementAttributesProperty : Symbol(ElementAttributesProperty, Decl(react.d.ts, 4, 2))
|
||||||
|
|
||||||
props;
|
props;
|
||||||
>props : Symbol(props, Decl(tsxAttributeResolution9.tsx, 4, 38))
|
>props : Symbol(props, Decl(react.d.ts, 5, 38))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
>Props : Symbol(Props, Decl(tsxAttributeResolution9.tsx, 7, 1))
|
>Props : Symbol(Props, Decl(react.d.ts, 8, 1))
|
||||||
|
|
||||||
foo: string;
|
foo: string;
|
||||||
>foo : Symbol(foo, Decl(tsxAttributeResolution9.tsx, 9, 17))
|
>foo : Symbol(foo, Decl(react.d.ts, 10, 17))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=== tests/cases/conformance/jsx/file.tsx ===
|
||||||
export class MyComponent {
|
export class MyComponent {
|
||||||
>MyComponent : Symbol(MyComponent, Decl(tsxAttributeResolution9.tsx, 11, 1))
|
>MyComponent : Symbol(MyComponent, Decl(file.tsx, 0, 0))
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
>render : Symbol(render, Decl(tsxAttributeResolution9.tsx, 13, 26))
|
>render : Symbol(render, Decl(file.tsx, 0, 26))
|
||||||
}
|
}
|
||||||
|
|
||||||
props: { foo: string; }
|
props: { foo: string; }
|
||||||
>props : Symbol(props, Decl(tsxAttributeResolution9.tsx, 15, 3))
|
>props : Symbol(props, Decl(file.tsx, 2, 3))
|
||||||
>foo : Symbol(foo, Decl(tsxAttributeResolution9.tsx, 17, 10))
|
>foo : Symbol(foo, Decl(file.tsx, 4, 10))
|
||||||
}
|
}
|
||||||
|
|
||||||
<MyComponent foo="bar" />; // ok
|
<MyComponent foo="bar" />; // ok
|
||||||
>MyComponent : Symbol(MyComponent, Decl(tsxAttributeResolution9.tsx, 11, 1))
|
>MyComponent : Symbol(MyComponent, Decl(file.tsx, 0, 0))
|
||||||
>foo : Symbol(unknown)
|
>foo : Symbol(unknown)
|
||||||
|
|
||||||
<MyComponent foo={0} />; // should be an error
|
<MyComponent foo={0} />; // should be an error
|
||||||
>MyComponent : Symbol(MyComponent, Decl(tsxAttributeResolution9.tsx, 11, 1))
|
>MyComponent : Symbol(MyComponent, Decl(file.tsx, 0, 0))
|
||||||
>foo : Symbol(unknown)
|
>foo : Symbol(unknown)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
=== tests/cases/conformance/jsx/tsxAttributeResolution9.tsx ===
|
=== tests/cases/conformance/jsx/react.d.ts ===
|
||||||
|
|
||||||
declare module JSX {
|
declare module JSX {
|
||||||
>JSX : any
|
>JSX : any
|
||||||
|
|
||||||
|
@ -23,6 +24,7 @@ interface Props {
|
||||||
>foo : string
|
>foo : string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=== tests/cases/conformance/jsx/file.tsx ===
|
||||||
export class MyComponent {
|
export class MyComponent {
|
||||||
>MyComponent : MyComponent
|
>MyComponent : MyComponent
|
||||||
|
|
||||||
|
@ -36,12 +38,12 @@ export class MyComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
<MyComponent foo="bar" />; // ok
|
<MyComponent foo="bar" />; // ok
|
||||||
><MyComponent foo="bar" /> : any
|
><MyComponent foo="bar" /> : JSX.Element
|
||||||
>MyComponent : typeof MyComponent
|
>MyComponent : typeof MyComponent
|
||||||
>foo : any
|
>foo : any
|
||||||
|
|
||||||
<MyComponent foo={0} />; // should be an error
|
<MyComponent foo={0} />; // should be an error
|
||||||
><MyComponent foo={0} /> : any
|
><MyComponent foo={0} /> : JSX.Element
|
||||||
>MyComponent : typeof MyComponent
|
>MyComponent : typeof MyComponent
|
||||||
>foo : any
|
>foo : any
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue