Skip to content

Commit cbbbf4a

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 dad8851 commit cbbbf4a

39 files changed

Lines changed: 9 additions & 169 deletions

File tree

src/server/project.ts

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

800800
/** @internal */
801801
resolveModuleNameLiterals(moduleLiterals: readonly StringLiteralLike[], containingFile: string, redirectedReference: ResolvedProjectReference | undefined, options: CompilerOptions, containingSourceFile: SourceFile, reusedNames: readonly StringLiteralLike[] | undefined): readonly ResolvedModuleWithFailedLookupLocations[] {
802-
let needsUpdate = this.recordChangesToUnresolvedImports && this.cachedUnresolvedImportsPerFile.has(this.toPath(containingFile));
802+
let invalidated = false;
803803
return this.resolutionCache.resolveModuleNameLiterals(
804804
moduleLiterals,
805805
containingFile,
806806
redirectedReference,
807807
options,
808808
containingSourceFile,
809809
reusedNames,
810-
needsUpdate ? (existing, current, path, name) => {
811-
if (!needsUpdate || isExternalModuleNameRelative(name)) return;
810+
this.recordChangesToUnresolvedImports ? (existing, current, path, name) => {
811+
if (invalidated || isExternalModuleNameRelative(name)) return;
812812
// If only unresolved flag is changed, update
813813
if ((existing && isUnresolvedOrResolvedToJs(existing)) === isUnresolvedOrResolvedToJs(current)) return;
814-
needsUpdate = false;
814+
invalidated = true;
815815
this.cachedUnresolvedImportsPerFile.delete(path);
816816
this.lastCachedUnresolvedImportsList = undefined;
817817
} : undefined,
@@ -1469,20 +1469,11 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
14691469
this.recordChangesToUnresolvedImports = false;
14701470

14711471
if (useTypingsFromGlobalCache) {
1472-
// 1. no changes in structure, no changes in unresolved imports - do nothing
1473-
// 2. no changes in structure, unresolved imports were changed - collect unresolved imports for all files
1474-
// (can reuse cached imports for files that were not changed)
1475-
// 3. new files were added/removed, but compilation settings stays the same - collect unresolved imports for all new/modified files
1476-
// (can reuse cached imports for files that were not changed)
1477-
// 4. compilation settings were changed in the way that might affect module resolution - drop all caches and collect all data from the scratch
1478-
if (!this.lastCachedUnresolvedImportsList || hasNewProgram) {
1479-
this.lastCachedUnresolvedImportsList = getUnresolvedImports(
1480-
this.program!,
1481-
this.cachedUnresolvedImportsPerFile,
1482-
s => this.writeLog(s),
1483-
);
1484-
}
1485-
1472+
this.lastCachedUnresolvedImportsList ??= getUnresolvedImports(
1473+
this.program!,
1474+
this.cachedUnresolvedImportsPerFile,
1475+
s => this.writeLog(s),
1476+
);
14861477
this.enqueueInstallTypingsForProject(hasAddedorRemovedFiles);
14871478
}
14881479
else {

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4392,8 +4392,6 @@ Info seq [hh:mm:ss:mss] Files (5)
43924392
/home/src/workspaces/project/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}"
43934393

43944394
Info seq [hh:mm:ss:mss] -----------------------------------------------
4395-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 5
4396-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 5 Done: []
43974395
Info seq [hh:mm:ss:mss] getCompletionData: Get current token: *
43984396
Info seq [hh:mm:ss:mss] getCompletionData: Is inside comment: *
43994397
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
@@ -339,9 +339,6 @@ Info seq [hh:mm:ss:mss] Files (3)
339339
Root file specified for compilation
340340

341341
Info seq [hh:mm:ss:mss] -----------------------------------------------
342-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
343-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/project/a/file2.ts:: []
344-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
345342
TI:: [hh:mm:ss:mss] Got install request
346343
{
347344
"projectName": "/dev/null/inferredProject1*",
@@ -1540,9 +1537,6 @@ Info seq [hh:mm:ss:mss] Files (2)
15401537
Root file specified for compilation
15411538

15421539
Info seq [hh:mm:ss:mss] -----------------------------------------------
1543-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 2
1544-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/project/a/file1.ts:: []
1545-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 2 Done: []
15461540
TI:: [hh:mm:ss:mss] Got install request
15471541
{
15481542
"projectName": "/dev/null/inferredProject1*",
@@ -1844,9 +1838,6 @@ Info seq [hh:mm:ss:mss] Files (3)
18441838
Root file specified for compilation
18451839

18461840
Info seq [hh:mm:ss:mss] -----------------------------------------------
1847-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
1848-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/project/a/file2.ts:: []
1849-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
18501841
TI:: [hh:mm:ss:mss] Got install request
18511842
{
18521843
"projectName": "/dev/null/inferredProject1*",
@@ -3383,9 +3374,6 @@ Info seq [hh:mm:ss:mss] Files (3)
33833374
Root file specified for compilation
33843375

33853376
Info seq [hh:mm:ss:mss] -----------------------------------------------
3386-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
3387-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/project/a/file2.ts:: []
3388-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
33893377
TI:: [hh:mm:ss:mss] Got install request
33903378
{
33913379
"projectName": "/dev/null/inferredProject1*",
@@ -4581,9 +4569,6 @@ Info seq [hh:mm:ss:mss] Files (2)
45814569
Root file specified for compilation
45824570

45834571
Info seq [hh:mm:ss:mss] -----------------------------------------------
4584-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 2
4585-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/project/a/file1.ts:: []
4586-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 2 Done: []
45874572
TI:: [hh:mm:ss:mss] Got install request
45884573
{
45894574
"projectName": "/dev/null/inferredProject1*",
@@ -4885,9 +4870,6 @@ Info seq [hh:mm:ss:mss] Files (3)
48854870
Root file specified for compilation
48864871

48874872
Info seq [hh:mm:ss:mss] -----------------------------------------------
4888-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
4889-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/project/a/file2.ts:: []
4890-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
48914873
TI:: [hh:mm:ss:mss] Got install request
48924874
{
48934875
"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
@@ -343,9 +343,6 @@ Info seq [hh:mm:ss:mss] Files (3)
343343
Root file specified for compilation
344344

345345
Info seq [hh:mm:ss:mss] -----------------------------------------------
346-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
347-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/project/A/file2.ts:: []
348-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
349346
TI:: [hh:mm:ss:mss] Got install request
350347
{
351348
"projectName": "/dev/null/inferredProject1*",
@@ -1590,9 +1587,6 @@ Info seq [hh:mm:ss:mss] Files (2)
15901587
Root file specified for compilation
15911588

15921589
Info seq [hh:mm:ss:mss] -----------------------------------------------
1593-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 2
1594-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/project/a/file1.ts:: []
1595-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 2 Done: []
15961590
TI:: [hh:mm:ss:mss] Got install request
15971591
{
15981592
"projectName": "/dev/null/inferredProject1*",
@@ -3628,10 +3622,6 @@ Info seq [hh:mm:ss:mss] Files (3)
36283622
Root file specified for compilation
36293623
36303624
Info seq [hh:mm:ss:mss] -----------------------------------------------
3631-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
3632-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/project/a/file1.ts:: []
3633-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/project/A/file2.ts:: []
3634-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
36353625
TI:: [hh:mm:ss:mss] Got install request
36363626
{
36373627
"projectName": "/dev/null/inferredProject1*",
@@ -4873,9 +4863,6 @@ Info seq [hh:mm:ss:mss] Files (2)
48734863
Root file specified for compilation
48744864
48754865
Info seq [hh:mm:ss:mss] -----------------------------------------------
4876-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 2
4877-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/project/a/file1.ts:: []
4878-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 2 Done: []
48794866
TI:: [hh:mm:ss:mss] Got install request
48804867
{
48814868
"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
@@ -339,9 +339,6 @@ Info seq [hh:mm:ss:mss] Files (3)
339339
Root file specified for compilation
340340

341341
Info seq [hh:mm:ss:mss] -----------------------------------------------
342-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
343-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/project/a/file2.ts:: []
344-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
345342
TI:: [hh:mm:ss:mss] Got install request
346343
{
347344
"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
@@ -516,9 +516,6 @@ Info seq [hh:mm:ss:mss] Files (2)
516516
Root file specified for compilation
517517
518518
Info seq [hh:mm:ss:mss] -----------------------------------------------
519-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 2
520-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/myproject/jsfile2.js:: []
521-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 2 Done: []
522519
TI:: [hh:mm:ss:mss] Got install request
523520
{
524521
"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
@@ -324,10 +324,6 @@ Info seq [hh:mm:ss:mss] Files (4)
324324
Root file specified for compilation
325325

326326
Info seq [hh:mm:ss:mss] -----------------------------------------------
327-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 4
328-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/myproject/src/server/utilities.js:: []
329-
Info seq [hh:mm:ss:mss] extractUnresolvedImportsFromSourceFile:: /user/username/projects/myproject/test/backend/index.js:: []
330-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 4 Done: []
331327
TI:: [hh:mm:ss:mss] Got install request
332328
{
333329
"projectName": "/dev/null/inferredProject1*",
@@ -806,8 +802,6 @@ Info seq [hh:mm:ss:mss] Files (2)
806802
Root file specified for compilation
807803

808804
Info seq [hh:mm:ss:mss] -----------------------------------------------
809-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 2
810-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 2 Done: []
811805
TI:: [hh:mm:ss:mss] Got install request
812806
{
813807
"projectName": "/dev/null/inferredProject1*",
@@ -923,8 +917,6 @@ Info seq [hh:mm:ss:mss] Files (3)
923917
Root file specified for compilation
924918

925919
Info seq [hh:mm:ss:mss] -----------------------------------------------
926-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
927-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
928920
TI:: [hh:mm:ss:mss] Got install request
929921
{
930922
"projectName": "/dev/null/inferredProject1*",

tests/baselines/reference/tsserver/typeAquisition/change-after-enabling-typeAquisition.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -679,8 +679,6 @@ Info seq [hh:mm:ss:mss] Files (3)
679679
/users/user/projects/project1/app.js SVC-1-0 "var x = require('bar');"
680680

681681
Info seq [hh:mm:ss:mss] -----------------------------------------------
682-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
683-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
684682
Info seq [hh:mm:ss:mss] event:
685683
{
686684
"seq": 0,

tests/baselines/reference/tsserver/typeAquisition/changes-to-typeAquisition-when-typing-installer-installs-typing-multiple-projects-with-shared-resolution.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1644,8 +1644,6 @@ Info seq [hh:mm:ss:mss] Files (3)
16441644
/users/user/projects/project1/app.js SVC-1-0 "var x = require('bar');"
16451645
16461646
Info seq [hh:mm:ss:mss] -----------------------------------------------
1647-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
1648-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
16491647
Info seq [hh:mm:ss:mss] Running: /users/user/projects/project2/jsconfig.json
16501648
Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /users/user/projects/project2/jsconfig.json
16511649
Info seq [hh:mm:ss:mss] ======== Resolving module 'bar' from '/users/user/projects/project2/app.js'. ========
@@ -1835,8 +1833,6 @@ Info seq [hh:mm:ss:mss] Files (5)
18351833
/users/user/projects/project2/app2.js Text-1 "var x = require('foo');"
18361834

18371835
Info seq [hh:mm:ss:mss] -----------------------------------------------
1838-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 5
1839-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 5 Done: []
18401836
After running Timeout callback:: count: 3
18411837

18421838
PolledWatches::

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1698,8 +1698,6 @@ Info seq [hh:mm:ss:mss] Files (3)
16981698
/users/user/projects/project1/app.js SVC-1-0 "var x = require('bar');"
16991699
17001700
Info seq [hh:mm:ss:mss] -----------------------------------------------
1701-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
1702-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
17031701
Info seq [hh:mm:ss:mss] Running: /users/user/projects/project2/jsconfig.json
17041702
Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /users/user/projects/project2/jsconfig.json
17051703
Info seq [hh:mm:ss:mss] ======== Resolving module 'bar' from '/users/user/projects/project2/app.js'. ========
@@ -1891,8 +1889,6 @@ Info seq [hh:mm:ss:mss] Files (5)
18911889
/users/user/projects/project2/app2.js Text-1 "var x = require('foo');"
18921890

18931891
Info seq [hh:mm:ss:mss] -----------------------------------------------
1894-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 5
1895-
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 5 Done: []
18961892
After running Timeout callback:: count: 3
18971893

18981894
PolledWatches::

0 commit comments

Comments
 (0)