diff --git a/src/services/importTracker.ts b/src/services/importTracker.ts index a9e2f202726..beecafe0e81 100644 --- a/src/services/importTracker.ts +++ b/src/services/importTracker.ts @@ -109,7 +109,9 @@ namespace ts.FindAllReferences { } else if (isDefaultImport(direct)) { const sourceFileLike = getSourceFileLikeForImportDeclaration(direct); - addIndirectUser(sourceFileLike); // Add a check for indirect uses to handle synthetic default imports + if (!isAvailableThroughGlobal) { + addIndirectUser(sourceFileLike); // Add a check for indirect uses to handle synthetic default imports + } directImports.push(direct); } else { @@ -651,8 +653,8 @@ namespace ts.FindAllReferences { if (parent.kind === SyntaxKind.SourceFile) { return parent as SourceFile; } - Debug.assert(parent.kind === SyntaxKind.ModuleBlock && isAmbientModuleDeclaration(parent.parent)); - return parent.parent as AmbientModuleDeclaration; + Debug.assert(parent.kind === SyntaxKind.ModuleBlock); + return cast(parent.parent, isAmbientModuleDeclaration); } function isAmbientModuleDeclaration(node: Node): node is AmbientModuleDeclaration { diff --git a/tests/cases/fourslash/esModuleInteropFindAllReferences.ts b/tests/cases/fourslash/esModuleInteropFindAllReferences.ts index 9ead793a867..5ec348bb120 100644 --- a/tests/cases/fourslash/esModuleInteropFindAllReferences.ts +++ b/tests/cases/fourslash/esModuleInteropFindAllReferences.ts @@ -1,3 +1,5 @@ +/// + // @esModuleInterop: true // @Filename: /abc.d.ts @@ -6,7 +8,7 @@ ////} // @Filename: /b.ts -////import * as a from "a"; +////import a from "a"; ////a.[|x|]; verify.rangesReferenceEachOther(); \ No newline at end of file diff --git a/tests/cases/fourslash/esModuleInteropFindAllReferences2.ts b/tests/cases/fourslash/esModuleInteropFindAllReferences2.ts new file mode 100644 index 00000000000..55fc6cc89e4 --- /dev/null +++ b/tests/cases/fourslash/esModuleInteropFindAllReferences2.ts @@ -0,0 +1,15 @@ +/// + +// Tests that we don't always add an indirect user, which causes problems if the module is already available globally. + +// @esModuleInterop: true + +// @Filename: /a.d.ts +////export as namespace abc; +////export const [|x|]: number; + +// @Filename: /b.ts +////import a from "./a"; +////a.[|x|]; + +verify.rangesReferenceEachOther();