diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index b7779fc9da039..c94027b40acb4 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -8755,6 +8755,9 @@ namespace ts {
if (isJsxIntrinsicIdentifier(node.tagName)) {
return getIntrinsicTagSymbol(node);
}
+ else if (node.tagName.kind === SyntaxKind.Identifier) {
+ return resolveEntityName(node.tagName, SymbolFlags.Value | SymbolFlags.Alias);
+ }
else {
return checkExpression(node.tagName).symbol;
}
diff --git a/tests/baselines/reference/jsxReactTestSuite.symbols b/tests/baselines/reference/jsxReactTestSuite.symbols
index 1ee71370dbc75..24ff3a1cf3d6f 100644
--- a/tests/baselines/reference/jsxReactTestSuite.symbols
+++ b/tests/baselines/reference/jsxReactTestSuite.symbols
@@ -56,9 +56,11 @@ declare var hasOwnProperty:any;
>div : Symbol(unknown)
{foo}
{bar}
+>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
>foo : Symbol(foo, Decl(jsxReactTestSuite.tsx, 7, 11))
>br : Symbol(unknown)
>bar : Symbol(bar, Decl(jsxReactTestSuite.tsx, 8, 11))
+>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
>br : Symbol(unknown)
@@ -68,12 +70,20 @@ declare var hasOwnProperty:any;
+>Composite : Symbol(Composite, Decl(jsxReactTestSuite.tsx, 3, 11))
+
{this.props.children}
;
+>Composite : Symbol(Composite, Decl(jsxReactTestSuite.tsx, 3, 11))
+>Composite : Symbol(Composite, Decl(jsxReactTestSuite.tsx, 3, 11))
+
+>Composite2 : Symbol(Composite2, Decl(jsxReactTestSuite.tsx, 4, 11))
+
;
+>Composite : Symbol(Composite, Decl(jsxReactTestSuite.tsx, 3, 11))
var x =
>x : Symbol(x, Decl(jsxReactTestSuite.tsx, 10, 11), Decl(jsxReactTestSuite.tsx, 35, 3))
@@ -164,6 +174,7 @@ var x =
>hasOwnProperty : Symbol(unknown)
;
+>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
>constructor : Symbol(unknown)
;
@@ -171,6 +182,7 @@ var x =
;
Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
>x : Symbol(x, Decl(jsxReactTestSuite.tsx, 10, 11), Decl(jsxReactTestSuite.tsx, 35, 3))
>y : Symbol(unknown)
@@ -178,6 +190,8 @@ var x =
>z : Symbol(unknown)
Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
+
{...this.props} sound="moo" />;
>sound : Symbol(unknown)
@@ -185,6 +199,7 @@ var x =
>font-face : Symbol(unknown)
;
+>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
>x : Symbol(unknown)
>y : Symbol(y, Decl(jsxReactTestSuite.tsx, 9, 11))
@@ -192,34 +207,43 @@ var x =
>x-component : Symbol(unknown)
;
+>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
>x : Symbol(x, Decl(jsxReactTestSuite.tsx, 10, 11), Decl(jsxReactTestSuite.tsx, 35, 3))
;
+>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
>x : Symbol(x, Decl(jsxReactTestSuite.tsx, 10, 11), Decl(jsxReactTestSuite.tsx, 35, 3))
>y : Symbol(unknown)
;
+>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
>x : Symbol(x, Decl(jsxReactTestSuite.tsx, 10, 11), Decl(jsxReactTestSuite.tsx, 35, 3))
>y : Symbol(unknown)
>z : Symbol(unknown)
;
+>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
>x : Symbol(unknown)
>y : Symbol(y, Decl(jsxReactTestSuite.tsx, 9, 11))
;
+>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
>x : Symbol(unknown)
>y : Symbol(unknown)
>z : Symbol(z, Decl(jsxReactTestSuite.tsx, 11, 11))
>z : Symbol(z, Decl(jsxReactTestSuite.tsx, 11, 11))
+>Child : Symbol(Child, Decl(jsxReactTestSuite.tsx, 5, 11))
+>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
Text;
+>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
>x : Symbol(unknown)
>z : Symbol(z, Decl(jsxReactTestSuite.tsx, 11, 11))
>y : Symbol(y, Decl(jsxReactTestSuite.tsx, 113, 27))
>z : Symbol(z, Decl(jsxReactTestSuite.tsx, 11, 11))
>z : Symbol(unknown)
+>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
diff --git a/tests/baselines/reference/reactNamespaceJSXEmit.symbols b/tests/baselines/reference/reactNamespaceJSXEmit.symbols
index a0012cfd07a16..3ca5b91e538d1 100644
--- a/tests/baselines/reference/reactNamespaceJSXEmit.symbols
+++ b/tests/baselines/reference/reactNamespaceJSXEmit.symbols
@@ -17,6 +17,7 @@ declare var x: any;
>data : Symbol(unknown)
;
+>Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 3, 11))
>x : Symbol(unknown)
>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11))
@@ -24,9 +25,11 @@ declare var x: any;
>x-component : Symbol(unknown)
;
+>Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 3, 11))
>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11))
;
+>Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 3, 11))
>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11))
>y : Symbol(unknown)
diff --git a/tests/baselines/reference/tsxElementResolution19.symbols b/tests/baselines/reference/tsxElementResolution19.symbols
index 87c48ccedf0df..48aa4f962b69a 100644
--- a/tests/baselines/reference/tsxElementResolution19.symbols
+++ b/tests/baselines/reference/tsxElementResolution19.symbols
@@ -24,5 +24,5 @@ import {MyClass} from './file1';
>MyClass : Symbol(MyClass, Decl(file2.tsx, 3, 8))
;
->MyClass : Symbol(MyClass, Decl(file1.tsx, 2, 1))
+>MyClass : Symbol(MyClass, Decl(file2.tsx, 3, 8))
diff --git a/tests/baselines/reference/tsxExternalModuleEmit1.symbols b/tests/baselines/reference/tsxExternalModuleEmit1.symbols
index 261a90352161d..e2d3eee98b0f3 100644
--- a/tests/baselines/reference/tsxExternalModuleEmit1.symbols
+++ b/tests/baselines/reference/tsxExternalModuleEmit1.symbols
@@ -25,7 +25,7 @@ export class App extends React.Component {
>render : Symbol(App.render, Decl(app.tsx, 5, 52))
return ;
->Button : Symbol(Button, Decl(button.tsx, 0, 31))
+>Button : Symbol(Button, Decl(app.tsx, 3, 8))
}
}
diff --git a/tests/baselines/reference/tsxExternalModuleEmit2.symbols b/tests/baselines/reference/tsxExternalModuleEmit2.symbols
index 29d8d90197928..ff5fdc4917137 100644
--- a/tests/baselines/reference/tsxExternalModuleEmit2.symbols
+++ b/tests/baselines/reference/tsxExternalModuleEmit2.symbols
@@ -18,11 +18,15 @@ declare var Foo, React;
// Should see mod_1['default'] in emit here
;
+>Foo : Symbol(Foo, Decl(app.tsx, 1, 11))
>handler : Symbol(unknown)
>Main : Symbol(Main, Decl(app.tsx, 0, 6))
+>Foo : Symbol(Foo, Decl(app.tsx, 1, 11))
// Should see mod_1['default'] in emit here
;
+>Foo : Symbol(Foo, Decl(app.tsx, 1, 11))
>Main : Symbol(Main, Decl(app.tsx, 0, 6))
+>Foo : Symbol(Foo, Decl(app.tsx, 1, 11))
diff --git a/tests/baselines/reference/tsxGenericArrowFunctionParsing.symbols b/tests/baselines/reference/tsxGenericArrowFunctionParsing.symbols
index 510e9e127a836..6d90c583a66e3 100644
--- a/tests/baselines/reference/tsxGenericArrowFunctionParsing.symbols
+++ b/tests/baselines/reference/tsxGenericArrowFunctionParsing.symbols
@@ -15,6 +15,8 @@ var T, T1, T2;
// This is an element
var x1 = () => {};
>x1 : Symbol(x1, Decl(file.tsx, 7, 3))
+>T : Symbol(T, Decl(file.tsx, 4, 3))
+>T : Symbol(T, Decl(file.tsx, 4, 3))
x1.isElement;
>x1.isElement : Symbol(JSX.Element.isElement, Decl(file.tsx, 1, 20))
@@ -41,7 +43,9 @@ x3();
// This is an element
var x4 = () => {};
>x4 : Symbol(x4, Decl(file.tsx, 19, 3))
+>T : Symbol(T, Decl(file.tsx, 4, 3))
>extends : Symbol(unknown)
+>T : Symbol(T, Decl(file.tsx, 4, 3))
x4.isElement;
>x4.isElement : Symbol(JSX.Element.isElement, Decl(file.tsx, 1, 20))
@@ -51,7 +55,9 @@ x4.isElement;
// This is an element
var x5 = () => {};
>x5 : Symbol(x5, Decl(file.tsx, 23, 3))
+>T : Symbol(T, Decl(file.tsx, 4, 3))
>extends : Symbol(unknown)
+>T : Symbol(T, Decl(file.tsx, 4, 3))
x5.isElement;
>x5.isElement : Symbol(JSX.Element.isElement, Decl(file.tsx, 1, 20))
diff --git a/tests/baselines/reference/tsxPreserveEmit1.symbols b/tests/baselines/reference/tsxPreserveEmit1.symbols
index 612f5cff9b222..53707b86104d4 100644
--- a/tests/baselines/reference/tsxPreserveEmit1.symbols
+++ b/tests/baselines/reference/tsxPreserveEmit1.symbols
@@ -13,6 +13,7 @@ import Route = ReactRouter.Route;
var routes1 = ;
>routes1 : Symbol(routes1, Decl(test.tsx, 6, 3))
+>Route : Symbol(Route, Decl(test.tsx, 2, 45))
module M {
>M : Symbol(M, Decl(test.tsx, 6, 24), Decl(test.tsx, 10, 1))
@@ -26,6 +27,8 @@ module M {
// Should emit 'M.X' in both opening and closing tags
var y = ;
>y : Symbol(y, Decl(test.tsx, 13, 4))
+>X : Symbol(X, Decl(test.tsx, 9, 11))
+>X : Symbol(X, Decl(test.tsx, 9, 11))
}
=== tests/cases/conformance/jsx/react.d.ts ===
diff --git a/tests/baselines/reference/tsxPreserveEmit2.symbols b/tests/baselines/reference/tsxPreserveEmit2.symbols
index e136cebbdf0bb..4013b2e35ea8f 100644
--- a/tests/baselines/reference/tsxPreserveEmit2.symbols
+++ b/tests/baselines/reference/tsxPreserveEmit2.symbols
@@ -6,4 +6,5 @@ var Route: any;
var routes1 = ;
>routes1 : Symbol(routes1, Decl(test.tsx, 3, 3))
+>Route : Symbol(Route, Decl(test.tsx, 2, 3))
diff --git a/tests/baselines/reference/tsxReactEmit3.symbols b/tests/baselines/reference/tsxReactEmit3.symbols
index 3d6d6c43c1486..cec45805c1e70 100644
--- a/tests/baselines/reference/tsxReactEmit3.symbols
+++ b/tests/baselines/reference/tsxReactEmit3.symbols
@@ -13,3 +13,11 @@ declare var Foo, Bar, baz;
>baz : Symbol(baz, Decl(test.tsx, 4, 21))
q s ;
+>Foo : Symbol(Foo, Decl(test.tsx, 4, 11))
+>Bar : Symbol(Bar, Decl(test.tsx, 4, 16))
+>Bar : Symbol(Bar, Decl(test.tsx, 4, 16))
+>Bar : Symbol(Bar, Decl(test.tsx, 4, 16))
+>Bar : Symbol(Bar, Decl(test.tsx, 4, 16))
+>Bar : Symbol(Bar, Decl(test.tsx, 4, 16))
+>Foo : Symbol(Foo, Decl(test.tsx, 4, 11))
+
diff --git a/tests/baselines/reference/tsxStatelessFunctionComponents3.symbols b/tests/baselines/reference/tsxStatelessFunctionComponents3.symbols
index 4392321347988..4ce502c6a6a08 100644
--- a/tests/baselines/reference/tsxStatelessFunctionComponents3.symbols
+++ b/tests/baselines/reference/tsxStatelessFunctionComponents3.symbols
@@ -11,7 +11,7 @@ const Foo = (props: any) => ;
// Should be OK
const foo = ;
>foo : Symbol(foo, Decl(file.tsx, 5, 5))
->Foo : Symbol((Anonymous function), Decl(file.tsx, 3, 11))
+>Foo : Symbol(Foo, Decl(file.tsx, 3, 5))
// Should be OK
@@ -40,7 +40,7 @@ var App: React.StatelessComponent<{ children }> = ({children}) => (
>div : Symbol(JSX.IntrinsicElements.div, Decl(react.d.ts, 927, 45))
->MainMenu : Symbol(React.StatelessComponent, Decl(react.d.ts, 139, 5))
+>MainMenu : Symbol(MainMenu, Decl(file.tsx, 9, 3))
>div : Symbol(JSX.IntrinsicElements.div, Decl(react.d.ts, 927, 45))
diff --git a/tests/cases/fourslash/findReferencesJSXTagName.ts b/tests/cases/fourslash/findReferencesJSXTagName.ts
new file mode 100644
index 0000000000000..a6170b4fc8f55
--- /dev/null
+++ b/tests/cases/fourslash/findReferencesJSXTagName.ts
@@ -0,0 +1,22 @@
+///
+
+// @Filename: index.tsx
+////import { /*1*/SubmissionComp } from "./RedditSubmission"
+////function displaySubreddit(subreddit: string) {
+//// let components = submissions
+//// .map((value, index) => *2*/SubmissionComp key={ index } elementPosition= { index } {...value.data} />);
+////}
+
+// @Filename: RedditSubmission.ts
+////export const /*3*/SubmissionComp = (submission: SubmissionProps) =>
+//// ;
+
+
+goTo.marker("1");
+verify.referencesCountIs(3);
+
+goTo.marker("2");
+verify.referencesCountIs(3);
+
+goTo.marker("3");
+verify.referencesCountIs(3);
\ No newline at end of file