From e52bfc4d1737c2acda34daf72b6604b0d18d817f Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Fri, 5 Dec 2025 04:24:10 +0800 Subject: [PATCH 1/2] Enhance isJS check in getNewImportFixes function --- src/services/codefixes/importFixes.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 6034c9dfc3de1..19120e663a2a5 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -135,6 +135,7 @@ import { RequireOrImportCall, RequireVariableStatement, sameMap, + ScriptKind, SemanticMeaning, shouldUseUriStyleNodeCoreModules, single, @@ -1255,7 +1256,6 @@ function getNewImportFixes( preferences: UserPreferences, fromCacheOnly?: boolean, ): { computedWithoutCacheCount: number; fixes: readonly (FixAddNewImport | FixAddJsdocTypeImport)[]; } { - const isJs = hasJSFileExtension(sourceFile.fileName); const compilerOptions = program.getCompilerOptions(); const moduleSpecifierResolutionHost = createModuleSpecifierResolutionHost(program, host); const getChecker = createGetChecker(program, host); @@ -1276,9 +1276,17 @@ function getNewImportFixes( if (rejectNodeModulesRelativePaths && pathContainsNodeModules(moduleSpecifier)) { return undefined; } - if (!importedSymbolHasValueMeaning && isJs && usagePosition !== undefined) { - // `position` should only be undefined at a missing jsx namespace, in which case we shouldn't be looking for pure types. - return { kind: ImportFixKind.JsdocTypeImport, moduleSpecifierKind, moduleSpecifier, usagePosition, exportInfo, isReExport: i > 0 }; + if (!importedSymbolHasValueMeaning && usagePosition !== undefined) { + const scriptKind = 'scriptKind' in sourceFile + ? sourceFile.scriptKind + : host.getScriptKind?.(sourceFile.fileName); + const isJs = scriptKind !== undefined + ? scriptKind === ScriptKind.JS || scriptKind === ScriptKind.JSX + : hasJSFileExtension(sourceFile.fileName); + if (isJs) { + // `position` should only be undefined at a missing jsx namespace, in which case we shouldn't be looking for pure types. + return { kind: ImportFixKind.JsdocTypeImport, moduleSpecifierKind, moduleSpecifier, usagePosition, exportInfo, isReExport: i > 0 }; + } } const importKind = getImportKind(sourceFile, exportInfo.exportKind, program); let qualification: Qualification | undefined; From 04f5cc2e8e6058e4186d1a3d098ef68f258d096d Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Fri, 5 Dec 2025 04:39:03 +0800 Subject: [PATCH 2/2] Update src/services/codefixes/importFixes.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/services/codefixes/importFixes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 19120e663a2a5..467cae2e75309 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -1277,7 +1277,7 @@ function getNewImportFixes( return undefined; } if (!importedSymbolHasValueMeaning && usagePosition !== undefined) { - const scriptKind = 'scriptKind' in sourceFile + const scriptKind = isFullSourceFile(sourceFile) ? sourceFile.scriptKind : host.getScriptKind?.(sourceFile.fileName); const isJs = scriptKind !== undefined