@@ -303,7 +303,8 @@ namespace ts.codefix {
303303
304304 function getImportFixForSymbol ( sourceFile : SourceFile , exportInfos : readonly SymbolExportInfo [ ] , moduleSymbol : Symbol , symbolName : string , program : Program , position : number | undefined , isValidTypeOnlyUseSite : boolean , useRequire : boolean , host : LanguageServiceHost , preferences : UserPreferences ) {
305305 Debug . assert ( exportInfos . some ( info => info . moduleSymbol === moduleSymbol || info . symbol . parent === moduleSymbol ) , "Some exportInfo should match the specified moduleSymbol" ) ;
306- return getBestFix ( getImportFixes ( exportInfos , symbolName , position , isValidTypeOnlyUseSite , useRequire , program , sourceFile , host , preferences ) , sourceFile , program , host , preferences ) ;
306+ const packageJsonImportFilter = createPackageJsonImportFilter ( sourceFile , preferences , host ) ;
307+ return getBestFix ( getImportFixes ( exportInfos , symbolName , position , isValidTypeOnlyUseSite , useRequire , program , sourceFile , host , preferences ) , sourceFile , program , packageJsonImportFilter ) ;
307308 }
308309
309310 function codeFixActionToCodeAction ( { description, changes, commands } : CodeFixAction ) : CodeAction {
@@ -369,6 +370,7 @@ namespace ts.codefix {
369370 program : Program ,
370371 host : LanguageServiceHost ,
371372 preferences : UserPreferences ,
373+ packageJsonImportFilter ?: PackageJsonImportFilter ,
372374 fromCacheOnly ?: boolean ,
373375 ) : { exportInfo ?: SymbolExportInfo , moduleSpecifier : string , computedWithoutCacheCount : number } | undefined {
374376 const { fixes, computedWithoutCacheCount } = getNewImportFixes (
@@ -381,7 +383,7 @@ namespace ts.codefix {
381383 host ,
382384 preferences ,
383385 fromCacheOnly ) ;
384- const result = getBestFix ( fixes , importingFile , program , host , preferences ) ;
386+ const result = getBestFix ( fixes , importingFile , program , packageJsonImportFilter || createPackageJsonImportFilter ( importingFile , preferences , host ) ) ;
385387 return result && { ...result , computedWithoutCacheCount } ;
386388 }
387389
@@ -652,24 +654,23 @@ namespace ts.codefix {
652654 const info = errorCode === Diagnostics . _0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead . code
653655 ? getFixesInfoForUMDImport ( context , symbolToken )
654656 : isIdentifier ( symbolToken ) ? getFixesInfoForNonUMDImport ( context , symbolToken , useAutoImportProvider ) : undefined ;
655- return info && { ...info , fixes : sortFixes ( info . fixes , context . sourceFile , context . program , context . host , context . preferences ) } ;
657+ const packageJsonImportFilter = createPackageJsonImportFilter ( context . sourceFile , context . preferences , context . host ) ;
658+ return info && { ...info , fixes : sortFixes ( info . fixes , context . sourceFile , context . program , packageJsonImportFilter ) } ;
656659 }
657660
658- function sortFixes ( fixes : readonly ImportFix [ ] , sourceFile : SourceFile , program : Program , host : LanguageServiceHost , preferences : UserPreferences ) : readonly ImportFix [ ] {
659- const { allowsImportingSpecifier } = createPackageJsonImportFilter ( sourceFile , preferences , host ) ;
660- return sort ( fixes , ( a , b ) => compareValues ( a . kind , b . kind ) || compareModuleSpecifiers ( a , b , sourceFile , program , allowsImportingSpecifier ) ) ;
661+ function sortFixes ( fixes : readonly ImportFix [ ] , sourceFile : SourceFile , program : Program , packageJsonImportFilter : PackageJsonImportFilter ) : readonly ImportFix [ ] {
662+ return sort ( fixes , ( a , b ) => compareValues ( a . kind , b . kind ) || compareModuleSpecifiers ( a , b , sourceFile , program , packageJsonImportFilter . allowsImportingSpecifier ) ) ;
661663 }
662664
663- function getBestFix < T extends ImportFix > ( fixes : readonly T [ ] , sourceFile : SourceFile , program : Program , host : LanguageServiceHost , preferences : UserPreferences ) : T | undefined {
665+ function getBestFix < T extends ImportFix > ( fixes : readonly T [ ] , sourceFile : SourceFile , program : Program , packageJsonImportFilter : PackageJsonImportFilter ) : T | undefined {
664666 if ( ! some ( fixes ) ) return ;
665667 // These will always be placed first if available, and are better than other kinds
666668 if ( fixes [ 0 ] . kind === ImportFixKind . UseNamespace || fixes [ 0 ] . kind === ImportFixKind . AddToExisting ) {
667669 return fixes [ 0 ] ;
668670 }
669- const { allowsImportingSpecifier } = createPackageJsonImportFilter ( sourceFile , preferences , host ) ;
670671 return fixes . reduce ( ( best , fix ) =>
671672 // Takes true branch of conditional if `fix` is better than `best`
672- compareModuleSpecifiers ( fix , best , sourceFile , program , allowsImportingSpecifier ) === Comparison . LessThan ? fix : best
673+ compareModuleSpecifiers ( fix , best , sourceFile , program , packageJsonImportFilter . allowsImportingSpecifier ) === Comparison . LessThan ? fix : best
673674 ) ;
674675 }
675676
0 commit comments