diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 9b5b4ff3818..b4977d9abb7 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -5009,6 +5009,14 @@ namespace ts { return node.kind === SyntaxKind.PropertyAccessExpression || node.kind === SyntaxKind.ElementAccessExpression; } + export function getNameOfAccessExpression(node: AccessExpression) { + if (node.kind === SyntaxKind.PropertyAccessExpression) { + return node.name; + } + Debug.assert(node.kind === SyntaxKind.ElementAccessExpression); + return node.argumentExpression; + } + export function isBundleFileTextLike(section: BundleFileSection): section is BundleFileTextLike { switch (section.kind) { case BundleFileSectionKind.Text: diff --git a/src/services/importTracker.ts b/src/services/importTracker.ts index 7e8955f8c9c..41d908efb23 100644 --- a/src/services/importTracker.ts +++ b/src/services/importTracker.ts @@ -517,7 +517,7 @@ namespace ts.FindAllReferences { return undefined; } - const sym = useLhsSymbol ? checker.getSymbolAtLocation(cast(node.left, isPropertyAccessExpression).name) : symbol; + const sym = useLhsSymbol ? checker.getSymbolAtLocation(getNameOfAccessExpression(cast(node.left, isAccessExpression))) : symbol; // Better detection for GH#20803 if (sym && !(checker.getMergedSymbol(sym.parent!).flags & SymbolFlags.Module)) { Debug.fail(`Special property assignment kind does not have a module as its parent. Assignment is ${Debug.formatSymbol(sym)}, parent is ${Debug.formatSymbol(sym.parent!)}`); diff --git a/tests/baselines/reference/renameExportCrash.baseline b/tests/baselines/reference/renameExportCrash.baseline new file mode 100644 index 00000000000..6760dfe1a8f --- /dev/null +++ b/tests/baselines/reference/renameExportCrash.baseline @@ -0,0 +1,5 @@ +/*====== /tests/cases/fourslash/Foo.js ======*/ + +let RENAME; +module.exports = [|RENAME|]; +exports["foo"] = RENAME; diff --git a/tests/cases/fourslash/renameExportCrash.ts b/tests/cases/fourslash/renameExportCrash.ts new file mode 100644 index 00000000000..f0b430c3c20 --- /dev/null +++ b/tests/cases/fourslash/renameExportCrash.ts @@ -0,0 +1,9 @@ +/// + +// @allowNonTsExtensions: true +// @Filename: Foo.js +//// let a; +//// module.exports = /**/a; +//// exports["foo"] = a; + +verify.baselineRename("", { });