diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index f96c53ee200..ef6a344c992 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -1196,7 +1196,9 @@ namespace ts.FindAllReferences.Core { // For `export { foo as bar }`, rename `foo`, but not `bar`. if (!isForRenameWithPrefixAndSuffixText(state.options) || alwaysGetReferences) { - const exportKind = referenceLocation.originalKeywordKind === SyntaxKind.DefaultKeyword ? ExportKind.Default : ExportKind.Named; + const isDefaultExport = referenceLocation.originalKeywordKind === SyntaxKind.DefaultKeyword + || exportSpecifier.name.originalKeywordKind === SyntaxKind.DefaultKeyword; + const exportKind = isDefaultExport ? ExportKind.Default : ExportKind.Named; const exportSymbol = Debug.assertDefined(exportSpecifier.symbol); const exportInfo = Debug.assertDefined(getExportInfo(exportSymbol, exportKind, state.checker)); searchForImportsOfExport(referenceLocation, exportSymbol, exportInfo, state); diff --git a/src/services/importTracker.ts b/src/services/importTracker.ts index 6b50d62d9b4..e8512528af9 100644 --- a/src/services/importTracker.ts +++ b/src/services/importTracker.ts @@ -269,7 +269,7 @@ namespace ts.FindAllReferences { } /** - * `import x = require("./x") or `import * as x from "./x"`. + * `import x = require("./x")` or `import * as x from "./x"`. * An `export =` may be imported by this syntax, so it may be a direct import. * If it's not a direct import, it will be in `indirectUsers`, so we don't have to do anything here. */ diff --git a/tests/cases/fourslash/findAllRefsImportDefault.ts b/tests/cases/fourslash/findAllRefsImportDefault.ts new file mode 100644 index 00000000000..15b3bda8ddf --- /dev/null +++ b/tests/cases/fourslash/findAllRefsImportDefault.ts @@ -0,0 +1,18 @@ +/// + +// @Filename: f.ts +////export { [|foo|] as [|{| "isWriteAccess": true, "isDefinition": true |}default|] }; +////function /*start*/[|{| "isWriteAccess": true, "isDefinition": true |}foo|](a: number, b: number) { +//// return a + b; +////} + +// @Filename: b.ts +////import [|{| "isWriteAccess": true, "isDefinition": true |}bar|] from "./f"; +////[|bar|](1, 2); + +verify.noErrors(); +const [ foo0, foo1, foo2, bar0, bar1 ] = test.ranges(); +const fooGroup = { definition: "function foo(a: number, b: number): number", ranges: [foo0, foo2] }; +const exportDefaultGroup = { definition: "(alias) function foo(a: number, b: number): number\nexport default", ranges: [foo1] }; +const barGroup = { definition: "(alias) function bar(a: number, b: number): number\nimport bar", ranges: [bar0, bar1]}; +verify.referenceGroups("start", [fooGroup, exportDefaultGroup, barGroup]); diff --git a/tests/cases/fourslash/findAllRefsImportNamed.ts b/tests/cases/fourslash/findAllRefsImportNamed.ts new file mode 100644 index 00000000000..5d18a8de164 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsImportNamed.ts @@ -0,0 +1,15 @@ +/// + +// @Filename: f.ts +////export { [|foo|] as [|{| "isWriteAccess": true, "isDefinition": true |}foo|] } +////function /*start*/[|{| "isWriteAccess": true, "isDefinition": true |}foo|](a: number, b: number) { } + +// @Filename: b.ts +////import x = require("./f"); +////x.[|foo|](1, 2); + +verify.noErrors(); +const [ foo0, foo1, foo2, foo3 ] = test.ranges(); +const fooGroup = { definition: "function foo(a: number, b: number): void", ranges: [foo0, foo2] }; +const exportFooGroup = { definition: "(alias) function foo(a: number, b: number): void\nexport foo", ranges: [foo1, foo3] }; +verify.referenceGroups("start", [fooGroup, exportFooGroup]);