Skip to content

Commit 7f597be

Browse files
authored
Don’t try to recreate AutoImportProvider after giving up because of too many dependencies until program structure changes (#59692)
1 parent 533ed3d commit 7f597be

File tree

1,217 files changed

+10807
-84
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,217 files changed

+10807
-84
lines changed

src/server/project.ts

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1365,20 +1365,13 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
13651365

13661366
/** @internal */
13671367
onAutoImportProviderSettingsChanged() {
1368-
if (this.autoImportProviderHost === false) {
1369-
this.autoImportProviderHost = undefined;
1370-
}
1371-
else {
1372-
this.autoImportProviderHost?.markAsDirty();
1373-
}
1368+
this.markAutoImportProviderAsDirty();
13741369
}
13751370

13761371
/** @internal */
13771372
onPackageJsonChange() {
13781373
this.moduleSpecifierCache.clear();
1379-
if (this.autoImportProviderHost) {
1380-
this.autoImportProviderHost.markAsDirty();
1381-
}
1374+
this.markAutoImportProviderAsDirty();
13821375
}
13831376

13841377
/** @internal */
@@ -2275,7 +2268,7 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
22752268
if (dependencySelection) {
22762269
tracing?.push(tracing.Phase.Session, "getPackageJsonAutoImportProvider");
22772270
const start = timestamp();
2278-
this.autoImportProviderHost = AutoImportProviderProject.create(dependencySelection, this, this.getHostForAutoImportProvider(), this.documentRegistry);
2271+
this.autoImportProviderHost = AutoImportProviderProject.create(dependencySelection, this, this.getHostForAutoImportProvider(), this.documentRegistry) ?? false;
22792272
if (this.autoImportProviderHost) {
22802273
updateProjectIfDirty(this.autoImportProviderHost);
22812274
this.sendPerformanceEvent("CreatePackageJsonAutoImportProvider", timestamp() - start);
@@ -2552,7 +2545,7 @@ export class AutoImportProviderProject extends Project {
25522545
const symlinkCache = hostProject.getSymlinkCache();
25532546
for (const name of arrayFrom(dependencyNames.keys())) {
25542547
// Avoid creating a large project that would significantly slow down time to editor interactivity
2555-
if (dependencySelection === PackageJsonAutoImportPreference.Auto && dependenciesAdded > this.maxDependencies) {
2548+
if (dependencySelection === PackageJsonAutoImportPreference.Auto && dependenciesAdded >= this.maxDependencies) {
25562549
hostProject.log(`AutoImportProviderProject: attempted to add more than ${this.maxDependencies} dependencies. Aborting.`);
25572550
return ts.emptyArray;
25582551
}

src/testRunner/unittests/tsserver/autoImportProvider.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ describe("unittests:: tsserver:: autoImportProvider", () => {
114114

115115
host.writeFile(packageJson.path, packageJson.content);
116116
session.host.baselineHost("Before getAutoImportProvider");
117+
host.runQueuedTimeoutCallbacks();
117118
assert.ok(session.getProjectService().configuredProjects.get(tsconfig.path)!.getLanguageService().getAutoImportProvider());
118119
session.host.baselineHost("After getAutoImportProvider");
119120
baselineTsserverLogs("autoImportProvider", "Responds to package_json changes", session);
@@ -272,7 +273,7 @@ describe("unittests:: tsserver:: autoImportProvider", () => {
272273
];
273274

274275
const packages = [];
275-
for (let i = 0; i < 11; i++) {
276+
for (let i = 0; i < 10; i++) {
276277
packages.push(createPackage(i));
277278
}
278279

tests/baselines/reference/tsserver/applyChangesToOpenFiles/with-applyChangedToOpenFiles-request.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ Projects::
193193
/a/b/tsconfig.json (Configured) *new*
194194
projectStateVersion: 1
195195
projectProgramVersion: 1
196+
autoImportProviderHost: false
196197

197198
ScriptInfos::
198199
/a/b/app.ts (Open) *new*
@@ -285,6 +286,7 @@ Projects::
285286
/a/b/tsconfig.json (Configured) *changed*
286287
projectStateVersion: 2 *changed*
287288
projectProgramVersion: 1
289+
autoImportProviderHost: false
288290

289291
ScriptInfos::
290292
/a/b/app.ts (Open)
@@ -412,6 +414,7 @@ Projects::
412414
/a/b/tsconfig.json (Configured) *changed*
413415
projectStateVersion: 3 *changed*
414416
projectProgramVersion: 1
417+
autoImportProviderHost: false
415418

416419
ScriptInfos::
417420
/a/b/app.ts (Open) *changed*
@@ -490,6 +493,7 @@ Projects::
490493
/a/b/tsconfig.json (Configured) *changed*
491494
projectStateVersion: 4 *changed*
492495
projectProgramVersion: 1
496+
autoImportProviderHost: false
493497

494498
ScriptInfos::
495499
/a/b/app.ts (Open)

tests/baselines/reference/tsserver/applyChangesToOpenFiles/with-updateOpen-request.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ Projects::
193193
/a/b/tsconfig.json (Configured) *new*
194194
projectStateVersion: 1
195195
projectProgramVersion: 1
196+
autoImportProviderHost: false
196197

197198
ScriptInfos::
198199
/a/b/app.ts (Open) *new*
@@ -285,6 +286,7 @@ Projects::
285286
/a/b/tsconfig.json (Configured) *changed*
286287
projectStateVersion: 2 *changed*
287288
projectProgramVersion: 1
289+
autoImportProviderHost: false
288290

289291
ScriptInfos::
290292
/a/b/app.ts (Open)
@@ -420,6 +422,7 @@ Projects::
420422
/a/b/tsconfig.json (Configured) *changed*
421423
projectStateVersion: 3 *changed*
422424
projectProgramVersion: 1
425+
autoImportProviderHost: false
423426

424427
ScriptInfos::
425428
/a/b/app.ts (Open) *changed*
@@ -498,6 +501,7 @@ Projects::
498501
/a/b/tsconfig.json (Configured) *changed*
499502
projectStateVersion: 4 *changed*
500503
projectProgramVersion: 1
504+
autoImportProviderHost: false
501505

502506
ScriptInfos::
503507
/a/b/app.ts (Open)

tests/baselines/reference/tsserver/autoImportProvider/Auto-importable-file-is-in-inferred-project-until-imported.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,7 @@ Projects::
460460
/tsconfig.json (Configured) *new*
461461
projectStateVersion: 1
462462
projectProgramVersion: 1
463+
autoImportProviderHost: false
463464

464465
ScriptInfos::
465466
/index.ts (Open) *new*

tests/baselines/reference/tsserver/autoImportProvider/Does-not-create-an-auto-import-provider-if-there-are-too-many-dependencies.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,6 @@ Before request
6161
//// [/node_modules/package9/index.d.ts]
6262

6363

64-
//// [/node_modules/package10/package.json]
65-
{ "name": "package10" }
66-
67-
//// [/node_modules/package10/index.d.ts]
68-
69-
7064
//// [/index.ts]
7165

7266

@@ -84,8 +78,7 @@ Before request
8478
"package6": "*",
8579
"package7": "*",
8680
"package8": "*",
87-
"package9": "*",
88-
"package10": "*"
81+
"package9": "*"
8982
}
9083

9184

@@ -306,6 +299,7 @@ Projects::
306299
/tsconfig.json (Configured) *new*
307300
projectStateVersion: 1
308301
projectProgramVersion: 1
302+
autoImportProviderHost: false
309303

310304
ScriptInfos::
311305
/index.ts (Open) *new*

tests/baselines/reference/tsserver/autoImportProvider/Does-not-schedule-ensureProjectForOpenFiles-on-AutoImportProviderProject-creation.js

Lines changed: 1 addition & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ Projects::
228228
/tsconfig.json (Configured) *new*
229229
projectStateVersion: 1
230230
projectProgramVersion: 1
231+
autoImportProviderHost: false
231232

232233
ScriptInfos::
233234
/index.ts (Open) *new*
@@ -298,56 +299,4 @@ FsWatchesRecursive::
298299
/:
299300
{}
300301

301-
Info seq [hh:mm:ss:mss] AutoImportProviderProject: found 1 root files in 1 dependencies 0 referenced projects in * ms
302-
Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /node_modules 1 undefined WatchType: node_modules for closed script infos and package.jsons affecting module specifier cache
303-
Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /node_modules 1 undefined WatchType: node_modules for closed script infos and package.jsons affecting module specifier cache
304-
Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/autoImportProviderProject1*
305-
Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /node_modules/@angular/forms/package.json 2000 undefined Project: /dev/null/autoImportProviderProject1* WatchType: File location affecting resolution
306-
Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/autoImportProviderProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
307-
Info seq [hh:mm:ss:mss] Project '/dev/null/autoImportProviderProject1*' (AutoImportProvider)
308-
Info seq [hh:mm:ss:mss] Files (1)
309-
/node_modules/@angular/forms/forms.d.ts Text-1 "export declare class PatternValidator {}"
310-
311-
312-
node_modules/@angular/forms/forms.d.ts
313-
Root file specified for compilation
314-
315-
Info seq [hh:mm:ss:mss] -----------------------------------------------
316302
After getPackageJsonAutoImportProvider
317-
318-
PolledWatches::
319-
/a/lib/lib.d.ts:
320-
{"pollingInterval":500}
321-
322-
FsWatches::
323-
/node_modules/@angular/forms/package.json: *new*
324-
{}
325-
/package.json:
326-
{}
327-
/tsconfig.json:
328-
{}
329-
330-
FsWatchesRecursive::
331-
/:
332-
{}
333-
/node_modules: *new*
334-
{}
335-
336-
Projects::
337-
/dev/null/autoImportProviderProject1* (AutoImportProvider) *new*
338-
projectStateVersion: 1
339-
projectProgramVersion: 1
340-
/tsconfig.json (Configured) *changed*
341-
projectStateVersion: 1
342-
projectProgramVersion: 1
343-
autoImportProviderHost: /dev/null/autoImportProviderProject1* *changed*
344-
345-
ScriptInfos::
346-
/index.ts (Open)
347-
version: SVC-1-0
348-
containingProjects: 1
349-
/tsconfig.json *default*
350-
/node_modules/@angular/forms/forms.d.ts *new*
351-
version: Text-1
352-
containingProjects: 1
353-
/dev/null/autoImportProviderProject1*

tests/baselines/reference/tsserver/autoImportProvider/Recovers-from-an-unparseable-package_json.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ Projects::
234234
/tsconfig.json (Configured) *new*
235235
projectStateVersion: 1
236236
projectProgramVersion: 1
237+
autoImportProviderHost: false
237238

238239
ScriptInfos::
239240
/index.ts (Open) *new*
@@ -250,6 +251,12 @@ Before getAutoImportProvider
250251
{ "dependencies": { "@angular/forms": "*", "@angular/core": "*" } }
251252

252253

254+
Projects::
255+
/tsconfig.json (Configured) *changed*
256+
projectStateVersion: 1
257+
projectProgramVersion: 1
258+
autoImportProviderHost: undefined *changed*
259+
253260
Info seq [hh:mm:ss:mss] AutoImportProviderProject: found 1 root files in 1 dependencies 0 referenced projects in * ms
254261
Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /node_modules 1 undefined WatchType: node_modules for closed script infos and package.jsons affecting module specifier cache
255262
Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /node_modules 1 undefined WatchType: node_modules for closed script infos and package.jsons affecting module specifier cache

tests/baselines/reference/tsserver/autoImportProvider/Responds-to-package_json-changes.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ Projects::
234234
/tsconfig.json (Configured) *new*
235235
projectStateVersion: 1
236236
projectProgramVersion: 1
237+
autoImportProviderHost: false
237238

238239
ScriptInfos::
239240
/index.ts (Open) *new*
@@ -250,6 +251,16 @@ Before getAutoImportProvider
250251
{ "dependencies": { "@angular/forms": "*", "@angular/core": "*" } }
251252

252253

254+
Projects::
255+
/tsconfig.json (Configured) *changed*
256+
projectStateVersion: 1
257+
projectProgramVersion: 1
258+
autoImportProviderHost: undefined *changed*
259+
260+
Before running Timeout callback:: count: 0
261+
262+
After running Timeout callback:: count: 0
263+
253264
Info seq [hh:mm:ss:mss] AutoImportProviderProject: found 1 root files in 1 dependencies 0 referenced projects in * ms
254265
Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /node_modules 1 undefined WatchType: node_modules for closed script infos and package.jsons affecting module specifier cache
255266
Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /node_modules 1 undefined WatchType: node_modules for closed script infos and package.jsons affecting module specifier cache

tests/baselines/reference/tsserver/autoImportProvider/dependencies-are-already-in-main-program.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ Projects::
244244
/tsconfig.json (Configured) *new*
245245
projectStateVersion: 1
246246
projectProgramVersion: 1
247+
autoImportProviderHost: false
247248

248249
ScriptInfos::
249250
/index.ts (Open) *new*

0 commit comments

Comments
 (0)