Skip to content

Commit d61938d

Browse files
authored
Fixed default-like export info lookup with export= that have default export (#60035)
1 parent 40caf34 commit d61938d

File tree

2 files changed

+96
-1
lines changed

2 files changed

+96
-1
lines changed

src/services/exportInfoMap.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,11 @@ export function getDefaultLikeExportInfo(moduleSymbol: Symbol, checker: TypeChec
604604
exportKind: ExportKind;
605605
} | undefined {
606606
const exportEquals = checker.resolveExternalModuleSymbol(moduleSymbol);
607-
if (exportEquals !== moduleSymbol) return { symbol: exportEquals, exportKind: ExportKind.ExportEquals };
607+
if (exportEquals !== moduleSymbol) {
608+
const defaultExport = checker.tryGetMemberInModuleExports(InternalSymbolName.Default, exportEquals);
609+
if (defaultExport) return { symbol: defaultExport, exportKind: ExportKind.Default };
610+
return { symbol: exportEquals, exportKind: ExportKind.ExportEquals };
611+
}
608612
const defaultExport = checker.tryGetMemberInModuleExports(InternalSymbolName.Default, moduleSymbol);
609613
if (defaultExport) return { symbol: defaultExport, exportKind: ExportKind.Default };
610614
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @strict: true
4+
// @module: commonjs
5+
6+
// @filename: node.ts
7+
//// import Container from "./container.js";
8+
//// import Document from "./document.js";
9+
////
10+
//// declare namespace Node {
11+
//// class Node extends Node_ {}
12+
////
13+
//// export { Node as default };
14+
//// }
15+
////
16+
//// declare abstract class Node_ {
17+
//// parent: Container | Document | undefined;
18+
//// }
19+
////
20+
//// declare class Node extends Node_ {}
21+
////
22+
//// export = Node;
23+
24+
// @filename: document.ts
25+
//// import Container from "./container.js";
26+
////
27+
//// declare namespace Document {
28+
//// export { Document_ as default };
29+
//// }
30+
////
31+
//// declare class Document_ extends Container {}
32+
////
33+
//// declare class Document extends Document_ {}
34+
////
35+
//// export = Document;
36+
37+
// @filename: container.ts
38+
//// import Node from "./node.js";
39+
////
40+
//// declare namespace Container {
41+
//// export { Container_ as default };
42+
//// }
43+
////
44+
//// declare abstract class Container_ extends Node {
45+
//// p/*1*/
46+
//// }
47+
////
48+
//// declare class Container extends Container_ {}
49+
////
50+
//// export = Container;
51+
52+
const preferences = {
53+
includeCompletionsWithInsertText: true,
54+
includeCompletionsWithClassMemberSnippets: true,
55+
};
56+
57+
verify.completions({
58+
marker: "1",
59+
includes: [
60+
{
61+
name: "parent",
62+
insertText: "parent: Container_ | Document_ | undefined;",
63+
filterText: "parent",
64+
hasAction: true,
65+
source: "ClassMemberSnippet/",
66+
},
67+
],
68+
preferences,
69+
isNewIdentifierLocation: true,
70+
});
71+
72+
verify.applyCodeActionFromCompletion("1", {
73+
name: "parent",
74+
source: "ClassMemberSnippet/",
75+
description: `Includes imports of types referenced by 'parent'`,
76+
newFileContent: `import Document_ from "./document.js";
77+
import Node from "./node.js";
78+
79+
declare namespace Container {
80+
export { Container_ as default };
81+
}
82+
83+
declare abstract class Container_ extends Node {
84+
p
85+
}
86+
87+
declare class Container extends Container_ {}
88+
89+
export = Container;`,
90+
preferences,
91+
});

0 commit comments

Comments
 (0)