Skip to content

Commit 96e6140

Browse files
committed
Add option --lazyConfiguredProjectsFromExternalProject to enable lazy load of configured projects referenced by external project
Fixes #26696
1 parent 1b5de9d commit 96e6140

File tree

5 files changed

+297
-220
lines changed

5 files changed

+297
-220
lines changed

src/server/editorServices.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@ namespace ts.server {
323323
cancellationToken: HostCancellationToken;
324324
useSingleInferredProject: boolean;
325325
useInferredProjectPerProjectRoot: boolean;
326+
lazyConfiguredProjectsFromExternalProject?: boolean;
326327
typingsInstaller: ITypingsInstaller;
327328
eventHandler?: ProjectServiceEventHandler;
328329
suppressDiagnosticEvents?: boolean;
@@ -440,6 +441,7 @@ namespace ts.server {
440441
public readonly cancellationToken: HostCancellationToken;
441442
public readonly useSingleInferredProject: boolean;
442443
public readonly useInferredProjectPerProjectRoot: boolean;
444+
private readonly lazyConfiguredProjectsFromExternalProject?: boolean;
443445
public readonly typingsInstaller: ITypingsInstaller;
444446
private readonly globalCacheLocationDirectoryPath: Path | undefined;
445447
public readonly throttleWaitMilliseconds?: number;
@@ -465,6 +467,7 @@ namespace ts.server {
465467
this.cancellationToken = opts.cancellationToken;
466468
this.useSingleInferredProject = opts.useSingleInferredProject;
467469
this.useInferredProjectPerProjectRoot = opts.useInferredProjectPerProjectRoot;
470+
this.lazyConfiguredProjectsFromExternalProject = opts.lazyConfiguredProjectsFromExternalProject;
468471
this.typingsInstaller = opts.typingsInstaller || nullTypingsInstaller;
469472
this.throttleWaitMilliseconds = opts.throttleWaitMilliseconds;
470473
this.eventHandler = opts.eventHandler;
@@ -1561,6 +1564,13 @@ namespace ts.server {
15611564
return project;
15621565
}
15631566

1567+
/* @internal */
1568+
private createLoadAndUpdateConfiguredProject(configFileName: NormalizedPath) {
1569+
const project = this.createAndLoadConfiguredProject(configFileName);
1570+
project.updateGraph();
1571+
return project;
1572+
}
1573+
15641574
/**
15651575
* Read the config file of the project, and update the project root file names.
15661576
*/
@@ -2192,8 +2202,7 @@ namespace ts.server {
21922202
if (configFileName) {
21932203
project = this.findConfiguredProjectByProjectName(configFileName);
21942204
if (!project) {
2195-
project = this.createAndLoadConfiguredProject(configFileName);
2196-
project.updateGraph();
2205+
project = this.createLoadAndUpdateConfiguredProject(configFileName);
21972206
// Send the event only if the project got created as part of this open request and info is part of the project
21982207
if (info.isOrphan()) {
21992208
// Since the file isnt part of configured project, do not send config file info
@@ -2633,7 +2642,9 @@ namespace ts.server {
26332642
let project = this.findConfiguredProjectByProjectName(tsconfigFile);
26342643
if (!project) {
26352644
// errors are stored in the project, do not need to update the graph
2636-
project = this.createConfiguredProjectWithDelayLoad(tsconfigFile);
2645+
project = this.lazyConfiguredProjectsFromExternalProject ?
2646+
this.createConfiguredProjectWithDelayLoad(tsconfigFile) :
2647+
this.createLoadAndUpdateConfiguredProject(tsconfigFile);
26372648
}
26382649
if (project && !contains(exisingConfigFiles, tsconfigFile)) {
26392650
// keep project alive even if no documents are opened - its lifetime is bound to the lifetime of containing external project

src/server/session.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,7 @@ namespace ts.server {
465465
cancellationToken: ServerCancellationToken;
466466
useSingleInferredProject: boolean;
467467
useInferredProjectPerProjectRoot: boolean;
468+
lazyConfiguredProjectsFromExternalProject?: boolean;
468469
typingsInstaller: ITypingsInstaller;
469470
byteLength: (buf: string, encoding?: string) => number;
470471
hrtime: (start?: number[]) => number[];
@@ -536,6 +537,7 @@ namespace ts.server {
536537
cancellationToken: this.cancellationToken,
537538
useSingleInferredProject: opts.useSingleInferredProject,
538539
useInferredProjectPerProjectRoot: opts.useInferredProjectPerProjectRoot,
540+
lazyConfiguredProjectsFromExternalProject: opts.lazyConfiguredProjectsFromExternalProject,
539541
typingsInstaller: this.typingsInstaller,
540542
throttleWaitMilliseconds,
541543
eventHandler: this.eventHandler,

0 commit comments

Comments
 (0)