@@ -303,7 +303,8 @@ namespace ts.codefix {
303
303
304
304
function getImportFixForSymbol ( sourceFile : SourceFile , exportInfos : readonly SymbolExportInfo [ ] , moduleSymbol : Symbol , symbolName : string , program : Program , position : number | undefined , isValidTypeOnlyUseSite : boolean , useRequire : boolean , host : LanguageServiceHost , preferences : UserPreferences ) {
305
305
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 ) ;
307
308
}
308
309
309
310
function codeFixActionToCodeAction ( { description, changes, commands } : CodeFixAction ) : CodeAction {
@@ -369,6 +370,7 @@ namespace ts.codefix {
369
370
program : Program ,
370
371
host : LanguageServiceHost ,
371
372
preferences : UserPreferences ,
373
+ packageJsonImportFilter ?: PackageJsonImportFilter ,
372
374
fromCacheOnly ?: boolean ,
373
375
) : { exportInfo ?: SymbolExportInfo , moduleSpecifier : string , computedWithoutCacheCount : number } | undefined {
374
376
const { fixes, computedWithoutCacheCount } = getNewImportFixes (
@@ -381,7 +383,7 @@ namespace ts.codefix {
381
383
host ,
382
384
preferences ,
383
385
fromCacheOnly ) ;
384
- const result = getBestFix ( fixes , importingFile , program , host , preferences ) ;
386
+ const result = getBestFix ( fixes , importingFile , program , packageJsonImportFilter || createPackageJsonImportFilter ( importingFile , preferences , host ) ) ;
385
387
return result && { ...result , computedWithoutCacheCount } ;
386
388
}
387
389
@@ -652,24 +654,23 @@ namespace ts.codefix {
652
654
const info = errorCode === Diagnostics . _0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead . code
653
655
? getFixesInfoForUMDImport ( context , symbolToken )
654
656
: 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 ) } ;
656
659
}
657
660
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 ) ) ;
661
663
}
662
664
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 {
664
666
if ( ! some ( fixes ) ) return ;
665
667
// These will always be placed first if available, and are better than other kinds
666
668
if ( fixes [ 0 ] . kind === ImportFixKind . UseNamespace || fixes [ 0 ] . kind === ImportFixKind . AddToExisting ) {
667
669
return fixes [ 0 ] ;
668
670
}
669
- const { allowsImportingSpecifier } = createPackageJsonImportFilter ( sourceFile , preferences , host ) ;
670
671
return fixes . reduce ( ( best , fix ) =>
671
672
// 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
673
674
) ;
674
675
}
675
676
0 commit comments