Skip to content

Commit a79e9b9

Browse files
committed
If the there is no change detected in module resolution we shouldnt need to update last cached unresolved imports just because we have new program
1 parent 05b818c commit a79e9b9

26 files changed

Lines changed: 9 additions & 139 deletions

src/server/project.ts

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -786,19 +786,19 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
786786

787787
/** @internal */
788788
resolveModuleNameLiterals(moduleLiterals: readonly StringLiteralLike[], containingFile: string, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions, containingSourceFile: SourceFile, reusedNames: readonly StringLiteralLike[] | undefined): readonly ResolvedModuleWithFailedLookupLocations[] {
789-
let needsUpdate = this.recordChangesToUnresolvedImports && this.cachedUnresolvedImportsPerFile.has(this.toPath(containingFile));
789+
let invalidated = false;
790790
return this.resolutionCache.resolveModuleNameLiterals(
791791
moduleLiterals,
792792
containingFile,
793793
redirectedReference,
794794
options,
795795
containingSourceFile,
796796
reusedNames,
797-
needsUpdate ? (existing, current, path, name) => {
798-
if (!needsUpdate || isExternalModuleNameRelative(name)) return;
797+
this.recordChangesToUnresolvedImports ? (existing, current, path, name) => {
798+
if (invalidated || isExternalModuleNameRelative(name)) return;
799799
// If only unresolved flag is changed, update
800800
if ((existing && isUnresolvedOrResolvedToJs(existing)) === isUnresolvedOrResolvedToJs(current)) return;
801-
needsUpdate = false;
801+
invalidated = true;
802802
this.cachedUnresolvedImportsPerFile.delete(path);
803803
this.lastCachedUnresolvedImportsList = undefined;
804804
} : undefined,
@@ -1435,20 +1435,11 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
14351435
this.recordChangesToUnresolvedImports = false;
14361436

14371437
if (useTypingsFromGlobalCache) {
1438-
// 1. no changes in structure, no changes in unresolved imports - do nothing
1439-
// 2. no changes in structure, unresolved imports were changed - collect unresolved imports for all files
1440-
// (can reuse cached imports for files that were not changed)
1441-
// 3. new files were added/removed, but compilation settings stays the same - collect unresolved imports for all new/modified files
1442-
// (can reuse cached imports for files that were not changed)
1443-
// 4. compilation settings were changed in the way that might affect module resolution - drop all caches and collect all data from the scratch
1444-
if (!this.lastCachedUnresolvedImportsList || hasNewProgram) {
1445-
this.lastCachedUnresolvedImportsList = getUnresolvedImports(
1446-
this.program!,
1447-
this.cachedUnresolvedImportsPerFile,
1448-
s => this.writeLog(s),
1449-
);
1450-
}
1451-
1438+
this.lastCachedUnresolvedImportsList ??= getUnresolvedImports(
1439+
this.program!,
1440+
this.cachedUnresolvedImportsPerFile,
1441+
s => this.writeLog(s),
1442+
);
14521443
this.enqueueInstallTypingsForProject(hasAddedorRemovedFiles);
14531444
}
14541445
else {

tests/baselines/reference/tsserver/fourslashServer/importSuggestionsCache_coreNodeModules.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2085,8 +2085,6 @@ Info seq [hh:mm:ss:mss] Files (5)
20852085
/node_modules/@types/node/index.d.ts Text-1 "declare module 'fs' {\n export function readFile(): void;\n}\ndeclare module 'util' {\n export function promisify(): void;\n}"
20862086

20872087
Info seq [hh:mm:ss:mss] -----------------------------------------------
2088-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 5
2089-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 5 Done: []
20902088
Info seq [hh:mm:ss:mss] getCompletionData: Get current token: *
20912089
Info seq [hh:mm:ss:mss] getCompletionData: Is inside comment: *
20922090
Info seq [hh:mm:ss:mss] getCompletionData: Get previous token: *
@@ -2731,8 +2729,6 @@ Info seq [hh:mm:ss:mss] Files (5)
27312729
/node_modules/@types/node/index.d.ts Text-1 "declare module 'fs' {\n export function readFile(): void;\n}\ndeclare module 'util' {\n export function promisify(): void;\n}"
27322730

27332731
Info seq [hh:mm:ss:mss] -----------------------------------------------
2734-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 5
2735-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 5 Done: []
27362732
Info seq [hh:mm:ss:mss] getCompletionData: Get current token: *
27372733
Info seq [hh:mm:ss:mss] getCompletionData: Is inside comment: *
27382734
Info seq [hh:mm:ss:mss] getCompletionData: Get previous token: *

tests/baselines/reference/tsserver/inferredProjects/inferred-projects-per-project-root-with-case-insensitive-system.js

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,6 @@ Info seq [hh:mm:ss:mss] Files (2)
233233
Root file specified for compilation
234234

235235
Info seq [hh:mm:ss:mss] -----------------------------------------------
236-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2
237-
Info seq [hh:mm:ss:mss] New unresolvedImports for /a/file2.ts:: []
238-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2 Done: []
239236
TI:: [hh:mm:ss:mss] Got install request
240237
{
241238
"projectName": "/dev/null/inferredProject1*",
@@ -859,9 +856,6 @@ Info seq [hh:mm:ss:mss] Files (1)
859856
Root file specified for compilation
860857

861858
Info seq [hh:mm:ss:mss] -----------------------------------------------
862-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 1
863-
Info seq [hh:mm:ss:mss] New unresolvedImports for /a/file1.ts:: []
864-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 1 Done: []
865859
TI:: [hh:mm:ss:mss] Got install request
866860
{
867861
"projectName": "/dev/null/inferredProject1*",
@@ -1046,9 +1040,6 @@ Info seq [hh:mm:ss:mss] Files (2)
10461040
Root file specified for compilation
10471041

10481042
Info seq [hh:mm:ss:mss] -----------------------------------------------
1049-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2
1050-
Info seq [hh:mm:ss:mss] New unresolvedImports for /a/file2.ts:: []
1051-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2 Done: []
10521043
TI:: [hh:mm:ss:mss] Got install request
10531044
{
10541045
"projectName": "/dev/null/inferredProject1*",
@@ -1886,9 +1877,6 @@ Info seq [hh:mm:ss:mss] Files (2)
18861877
Root file specified for compilation
18871878

18881879
Info seq [hh:mm:ss:mss] -----------------------------------------------
1889-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2
1890-
Info seq [hh:mm:ss:mss] New unresolvedImports for /a/file2.ts:: []
1891-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2 Done: []
18921880
TI:: [hh:mm:ss:mss] Got install request
18931881
{
18941882
"projectName": "/dev/null/inferredProject1*",
@@ -2512,9 +2500,6 @@ Info seq [hh:mm:ss:mss] Files (1)
25122500
Root file specified for compilation
25132501

25142502
Info seq [hh:mm:ss:mss] -----------------------------------------------
2515-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 1
2516-
Info seq [hh:mm:ss:mss] New unresolvedImports for /a/file1.ts:: []
2517-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 1 Done: []
25182503
TI:: [hh:mm:ss:mss] Got install request
25192504
{
25202505
"projectName": "/dev/null/inferredProject1*",
@@ -2699,9 +2684,6 @@ Info seq [hh:mm:ss:mss] Files (2)
26992684
Root file specified for compilation
27002685

27012686
Info seq [hh:mm:ss:mss] -----------------------------------------------
2702-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2
2703-
Info seq [hh:mm:ss:mss] New unresolvedImports for /a/file2.ts:: []
2704-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2 Done: []
27052687
TI:: [hh:mm:ss:mss] Got install request
27062688
{
27072689
"projectName": "/dev/null/inferredProject1*",

tests/baselines/reference/tsserver/inferredProjects/inferred-projects-per-project-root-with-case-sensitive-system.js

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,6 @@ Info seq [hh:mm:ss:mss] Files (2)
233233
Root file specified for compilation
234234

235235
Info seq [hh:mm:ss:mss] -----------------------------------------------
236-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2
237-
Info seq [hh:mm:ss:mss] New unresolvedImports for /A/file2.ts:: []
238-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2 Done: []
239236
TI:: [hh:mm:ss:mss] Got install request
240237
{
241238
"projectName": "/dev/null/inferredProject1*",
@@ -859,9 +856,6 @@ Info seq [hh:mm:ss:mss] Files (1)
859856
Root file specified for compilation
860857

861858
Info seq [hh:mm:ss:mss] -----------------------------------------------
862-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 1
863-
Info seq [hh:mm:ss:mss] New unresolvedImports for /a/file1.ts:: []
864-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 1 Done: []
865859
TI:: [hh:mm:ss:mss] Got install request
866860
{
867861
"projectName": "/dev/null/inferredProject1*",
@@ -1969,10 +1963,6 @@ Info seq [hh:mm:ss:mss] Files (2)
19691963
Root file specified for compilation
19701964
19711965
Info seq [hh:mm:ss:mss] -----------------------------------------------
1972-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2
1973-
Info seq [hh:mm:ss:mss] New unresolvedImports for /a/file1.ts:: []
1974-
Info seq [hh:mm:ss:mss] New unresolvedImports for /A/file2.ts:: []
1975-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2 Done: []
19761966
TI:: [hh:mm:ss:mss] Got install request
19771967
{
19781968
"projectName": "/dev/null/inferredProject1*",
@@ -2596,9 +2586,6 @@ Info seq [hh:mm:ss:mss] Files (1)
25962586
Root file specified for compilation
25972587
25982588
Info seq [hh:mm:ss:mss] -----------------------------------------------
2599-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 1
2600-
Info seq [hh:mm:ss:mss] New unresolvedImports for /a/file1.ts:: []
2601-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 1 Done: []
26022589
TI:: [hh:mm:ss:mss] Got install request
26032590
{
26042591
"projectName": "/dev/null/inferredProject1*",

tests/baselines/reference/tsserver/inferredProjects/inferred-projects-per-project-root.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,6 @@ Info seq [hh:mm:ss:mss] Files (2)
233233
Root file specified for compilation
234234

235235
Info seq [hh:mm:ss:mss] -----------------------------------------------
236-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2
237-
Info seq [hh:mm:ss:mss] New unresolvedImports for /a/file2.ts:: []
238-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2 Done: []
239236
TI:: [hh:mm:ss:mss] Got install request
240237
{
241238
"projectName": "/dev/null/inferredProject1*",

tests/baselines/reference/tsserver/inferredProjects/should-still-retain-configured-project-created-while-opening-the-file.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -333,9 +333,6 @@ Info seq [hh:mm:ss:mss] Files (2)
333333
Root file specified for compilation
334334
335335
Info seq [hh:mm:ss:mss] -----------------------------------------------
336-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2
337-
Info seq [hh:mm:ss:mss] New unresolvedImports for /user/username/projects/myproject/jsfile2.js:: []
338-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2 Done: []
339336
TI:: [hh:mm:ss:mss] Got install request
340337
{
341338
"projectName": "/dev/null/inferredProject1*",

tests/baselines/reference/tsserver/inferredProjects/when-existing-inferred-project-has-no-root-files.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -364,12 +364,6 @@ Info seq [hh:mm:ss:mss] Files (4)
364364
Root file specified for compilation
365365

366366
Info seq [hh:mm:ss:mss] -----------------------------------------------
367-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 4
368-
Info seq [hh:mm:ss:mss] New unresolvedImports for /a/lib/lib.d.ts:: []
369-
Info seq [hh:mm:ss:mss] New unresolvedImports for /user/username/projects/myproject/module2.d.ts:: []
370-
Info seq [hh:mm:ss:mss] New unresolvedImports for /user/username/projects/myproject/node_modules/module3/index.d.ts:: []
371-
Info seq [hh:mm:ss:mss] New unresolvedImports for /user/username/projects/myproject/module.d.ts:: []
372-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 4 Done: []
373367
TI:: [hh:mm:ss:mss] Got install request
374368
{
375369
"projectName": "/dev/null/inferredProject1*",

tests/baselines/reference/tsserver/projectErrors/reports-errors-correctly-when-file-referenced-by-inferred-project-root,-is-opened-right-after-closing-the-root-file.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -272,10 +272,6 @@ Info seq [hh:mm:ss:mss] Files (4)
272272
Root file specified for compilation
273273

274274
Info seq [hh:mm:ss:mss] -----------------------------------------------
275-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 4
276-
Info seq [hh:mm:ss:mss] New unresolvedImports for /user/username/projects/myproject/src/server/utilities.js:: []
277-
Info seq [hh:mm:ss:mss] New unresolvedImports for /user/username/projects/myproject/test/backend/index.js:: []
278-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 4 Done: []
279275
TI:: [hh:mm:ss:mss] Got install request
280276
{
281277
"projectName": "/dev/null/inferredProject1*",
@@ -646,8 +642,6 @@ Info seq [hh:mm:ss:mss] Files (2)
646642
Root file specified for compilation
647643

648644
Info seq [hh:mm:ss:mss] -----------------------------------------------
649-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2
650-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2 Done: []
651645
TI:: [hh:mm:ss:mss] Got install request
652646
{
653647
"projectName": "/dev/null/inferredProject1*",
@@ -742,8 +736,6 @@ Info seq [hh:mm:ss:mss] Files (3)
742736
Root file specified for compilation
743737

744738
Info seq [hh:mm:ss:mss] -----------------------------------------------
745-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 3
746-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 3 Done: []
747739
TI:: [hh:mm:ss:mss] Got install request
748740
{
749741
"projectName": "/dev/null/inferredProject1*",

tests/baselines/reference/tsserver/typeAquisition/changes-to-typeAquisition-when-typing-installer-installs-typing.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -481,8 +481,6 @@ Info seq [hh:mm:ss:mss] Files (2)
481481
/users/user/projects/project1/app.js SVC-1-0 "var x = require('bar');"
482482
483483
Info seq [hh:mm:ss:mss] -----------------------------------------------
484-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2
485-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2 Done: []
486484
Info seq [hh:mm:ss:mss] Running: *ensureProjectForOpenFiles*
487485
Info seq [hh:mm:ss:mss] Before ensureProjectForOpenFiles:
488486
Info seq [hh:mm:ss:mss] Project '/users/user/projects/project1/jsconfig.json' (Configured)

tests/baselines/reference/tsserver/typingsInstaller/configured-projects-discover-from-bower_components.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -305,9 +305,6 @@ Info seq [hh:mm:ss:mss] Files (2)
305305
Matched by default include pattern '**/*'
306306

307307
Info seq [hh:mm:ss:mss] -----------------------------------------------
308-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2
309-
Info seq [hh:mm:ss:mss] New unresolvedImports for /tmp/node_modules/@types/jquery/index.d.ts:: []
310-
Info seq [hh:mm:ss:mss] Calculating unresolved imports list of program:: Files:: 2 Done: []
311308
TI:: [hh:mm:ss:mss] Got install request
312309
{
313310
"projectName": "/jsconfig.json",

0 commit comments

Comments
 (0)