From c130fde79e1d8305bc13a920891438a749eab56c Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Wed, 13 Mar 2019 15:10:54 -0700 Subject: [PATCH 1/2] fix check for default export --- src/services/findAllReferences.ts | 4 +++- src/services/importTracker.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index f96c53ee20076..ef6a344c99218 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 6b50d62d9b402..e8512528af958 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. */ From 66e2c54fe532f34b8e5a41f406deed32a16ae23c Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Wed, 13 Mar 2019 15:11:33 -0700 Subject: [PATCH 2/2] add tests for finding references of named and default exports --- .../fourslash/findAllRefsImportDefault.ts | 18 ++++++++++++++++++ .../cases/fourslash/findAllRefsImportNamed.ts | 15 +++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 tests/cases/fourslash/findAllRefsImportDefault.ts create mode 100644 tests/cases/fourslash/findAllRefsImportNamed.ts diff --git a/tests/cases/fourslash/findAllRefsImportDefault.ts b/tests/cases/fourslash/findAllRefsImportDefault.ts new file mode 100644 index 0000000000000..15b3bda8ddf1a --- /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 0000000000000..5d18a8de1640d --- /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]);