@@ -25,6 +25,7 @@ export function decorateLanguageServiceHost(
2525 const resolveModuleNames = languageServiceHost . resolveModuleNames ?. bind ( languageServiceHost ) ;
2626 const getScriptSnapshot = languageServiceHost . getScriptSnapshot . bind ( languageServiceHost ) ;
2727 const getScriptKind = languageServiceHost . getScriptKind ?. bind ( languageServiceHost ) ;
28+ const getScriptFileNames = languageServiceHost . getScriptFileNames ?. bind ( languageServiceHost ) ;
2829
2930 // path completion
3031 if ( readDirectory ) {
@@ -58,12 +59,34 @@ export function decorateLanguageServiceHost(
5859 ) ;
5960
6061 let moduleResolutionProjectVersion : string | undefined ;
62+ let moduleResolutionProjectFileNames : Set < string > | undefined ;
6163 const tryClearModuleResolutionCache = ( ) => {
6264 const projectVersion = languageServiceHost . getProjectVersion ?.( ) ;
63- if ( projectVersion === undefined || projectVersion !== moduleResolutionProjectVersion ) {
65+ const scriptFileNames = getScriptFileNames ?.( ) ;
66+ const canonicalScriptFileNames = scriptFileNames ?. map ( getCanonicalFileName ) ;
67+ const filesUnchanged = Boolean (
68+ canonicalScriptFileNames
69+ && moduleResolutionProjectFileNames
70+ && canonicalScriptFileNames . length === moduleResolutionProjectFileNames . size
71+ && canonicalScriptFileNames . every ( name => moduleResolutionProjectFileNames ?. has ( name ) ) ,
72+ ) ;
73+
74+ if ( projectVersion === moduleResolutionProjectVersion && ( ! scriptFileNames || filesUnchanged ) ) {
75+ return ;
76+ }
77+
78+ moduleResolutionProjectVersion = projectVersion ;
79+
80+ if ( ! scriptFileNames ) {
81+ moduleResolutionProjectFileNames = undefined ;
82+ moduleResolutionCache . clear ( ) ;
83+ return ;
84+ }
85+
86+ if ( ! filesUnchanged ) {
6487 moduleResolutionCache . clear ( ) ;
65- moduleResolutionProjectVersion = projectVersion ;
6688 }
89+ moduleResolutionProjectFileNames = new Set ( canonicalScriptFileNames ?? [ ] ) ;
6790 } ;
6891
6992 if ( resolveModuleNameLiterals ) {
0 commit comments