@@ -9033,7 +9033,12 @@ namespace ts {
90339033 checkJsxOpeningLikeElement(node.openingElement);
90349034
90359035 // Perform resolution on the closing tag so that rename/go to definition/etc work
9036- getJsxTagSymbol(node.closingElement);
9036+ if (isJsxIntrinsicIdentifier(node.closingElement.tagName)) {
9037+ getIntrinsicTagSymbol(node.closingElement);
9038+ }
9039+ else {
9040+ checkExpression(node.closingElement.tagName);
9041+ }
90379042
90389043 // Check children
90399044 for (const child of node.children) {
@@ -9143,18 +9148,6 @@ namespace ts {
91439148 return jsxTypes[name];
91449149 }
91459150
9146- function getJsxTagSymbol(node: JsxOpeningLikeElement | JsxClosingElement): Symbol {
9147- if (isJsxIntrinsicIdentifier(node.tagName)) {
9148- return getIntrinsicTagSymbol(node);
9149- }
9150- else if (node.tagName.kind === SyntaxKind.Identifier) {
9151- return resolveEntityName(node.tagName, SymbolFlags.Value | SymbolFlags.Alias);
9152- }
9153- else {
9154- return checkExpression(node.tagName).symbol;
9155- }
9156- }
9157-
91589151 /**
91599152 * Looks up an intrinsic tag name and returns a symbol that either points to an intrinsic
91609153 * property (in which case nodeLinks.jsxFlags will be IntrinsicNamedElement) or an intrinsic
@@ -16211,19 +16204,17 @@ namespace ts {
1621116204 meaning |= SymbolFlags.Alias;
1621216205 return resolveEntityName(<EntityName>entityName, meaning);
1621316206 }
16214- else if ((entityName.parent.kind === SyntaxKind.JsxOpeningElement) ||
16215- (entityName.parent.kind === SyntaxKind.JsxSelfClosingElement) ||
16216- (entityName.parent.kind === SyntaxKind.JsxClosingElement)) {
16217-
16218- return getJsxTagSymbol(<JsxOpeningLikeElement>entityName.parent);
16219- }
1622016207 else if (isExpression(entityName)) {
1622116208 if (nodeIsMissing(entityName)) {
1622216209 // Missing entity name.
1622316210 return undefined;
1622416211 }
1622516212
1622616213 if (entityName.kind === SyntaxKind.Identifier) {
16214+ if (isJSXTagName(entityName) && isJsxIntrinsicIdentifier(<Identifier>entityName)) {
16215+ return getIntrinsicTagSymbol(<JsxOpeningLikeElement>entityName.parent);
16216+ }
16217+
1622716218 // Include aliases in the meaning, this ensures that we do not follow aliases to where they point and instead
1622816219 // return the alias symbol.
1622916220 const meaning: SymbolFlags = SymbolFlags.Value | SymbolFlags.Alias;
0 commit comments