Skip to content

Commit e1dfb91

Browse files
author
Andy
committed
importFixes: Skip alias when testing isTypeOnlySymbol (#27674)
1 parent 1998d68 commit e1dfb91

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

src/services/codefixes/importFixes.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,20 +185,20 @@ namespace ts.codefix {
185185

186186
const defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
187187
if (defaultInfo && defaultInfo.name === symbolName && skipAlias(defaultInfo.symbol, checker) === exportedSymbol) {
188-
result.push({ moduleSymbol, importKind: defaultInfo.kind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(defaultInfo.symbol) });
188+
result.push({ moduleSymbol, importKind: defaultInfo.kind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(defaultInfo.symbol, checker) });
189189
}
190190

191191
for (const exported of checker.getExportsOfModule(moduleSymbol)) {
192192
if (exported.name === symbolName && skipAlias(exported, checker) === exportedSymbol) {
193-
result.push({ moduleSymbol, importKind: ImportKind.Named, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exported) });
193+
result.push({ moduleSymbol, importKind: ImportKind.Named, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exported, checker) });
194194
}
195195
}
196196
});
197197
return result;
198198
}
199199

200-
function isTypeOnlySymbol(s: Symbol): boolean {
201-
return !(s.flags & SymbolFlags.Value);
200+
function isTypeOnlySymbol(s: Symbol, checker: TypeChecker): boolean {
201+
return !(skipAlias(s, checker).flags & SymbolFlags.Value);
202202
}
203203

204204
function getFixForImport(
@@ -398,7 +398,7 @@ namespace ts.codefix {
398398
// Maps symbol id to info for modules providing that symbol (original export + re-exports).
399399
const originalSymbolToExportInfos = createMultiMap<SymbolExportInfo>();
400400
function addSymbol(moduleSymbol: Symbol, exportedSymbol: Symbol, importKind: ImportKind): void {
401-
originalSymbolToExportInfos.add(getUniqueSymbolId(exportedSymbol, checker).toString(), { moduleSymbol, importKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exportedSymbol) });
401+
originalSymbolToExportInfos.add(getUniqueSymbolId(exportedSymbol, checker).toString(), { moduleSymbol, importKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exportedSymbol, checker) });
402402
}
403403
forEachExternalModuleToImportFrom(checker, sourceFile, program.getSourceFiles(), moduleSymbol => {
404404
cancellationToken.throwIfCancellationRequested();
@@ -424,7 +424,7 @@ namespace ts.codefix {
424424
if (!exported) return undefined;
425425
const { symbol, kind } = exported;
426426
const info = getDefaultExportInfoWorker(symbol, moduleSymbol, checker, compilerOptions);
427-
return info && { symbol, symbolForMeaning: info.symbolForMeaning, name: info.name, kind };
427+
return info && { symbol, kind, ...info };
428428
}
429429

430430
function getDefaultLikeExportWorker(moduleSymbol: Symbol, checker: TypeChecker): { readonly symbol: Symbol, readonly kind: ImportKind.Default | ImportKind.Equals } | undefined {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @allowJs: true
4+
// @checkJs: true
5+
6+
// @Filename: /a.js
7+
////class C {}
8+
////export default C;
9+
10+
// @Filename: /b.js
11+
////[|C;|]
12+
13+
goTo.file("/b.js");
14+
verify.importFixAtPosition([
15+
`import C from "./a";
16+
17+
C;`,
18+
]);

0 commit comments

Comments
 (0)