From f67bdd429a3d16313eefaf3bb33d697b33241faf Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 25 Jul 2018 14:01:48 -0700 Subject: [PATCH] Skip loading configured project just to report project info through synchronizeProjectList for project opened by external project --- src/server/project.ts | 10 +++++++++- src/testRunner/unittests/tsserverProjectSystem.ts | 5 +---- tests/baselines/reference/api/tsserverlibrary.d.ts | 2 ++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/server/project.ts b/src/server/project.ts index ca8762da242..ff2c504a54a 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -149,6 +149,8 @@ namespace ts.server { */ private projectStateVersion = 0; + protected isInitialLoadPending: () => boolean = returnFalse; + /*@internal*/ dirty = false; @@ -1033,7 +1035,10 @@ namespace ts.server { /* @internal */ getChangesSinceVersion(lastKnownVersion?: number): ProjectFilesWithTSDiagnostics { - updateProjectIfDirty(this); + // Update the graph only if initial configured project load is not pending + if (!this.isInitialLoadPending()) { + updateProjectIfDirty(this); + } const info: protocol.ProjectVersionInfo = { projectName: this.getProjectName(), @@ -1320,6 +1325,8 @@ namespace ts.server { /*@internal*/ projectOptions?: ProjectOptions | true; + protected isInitialLoadPending: () => boolean = returnTrue; + /*@internal*/ constructor(configFileName: NormalizedPath, projectService: ProjectService, @@ -1343,6 +1350,7 @@ namespace ts.server { * @returns: true if set of files in the project stays the same and false - otherwise. */ updateGraph(): boolean { + this.isInitialLoadPending = returnFalse; const reloadLevel = this.pendingReload; this.pendingReload = ConfigFileProgramReloadLevel.None; let result: boolean; diff --git a/src/testRunner/unittests/tsserverProjectSystem.ts b/src/testRunner/unittests/tsserverProjectSystem.ts index 4f85cbf00b3..64b4a4622f1 100644 --- a/src/testRunner/unittests/tsserverProjectSystem.ts +++ b/src/testRunner/unittests/tsserverProjectSystem.ts @@ -2976,10 +2976,7 @@ namespace ts.projectSystem { checkNumberOfProjects(projectService, { configuredProjects: 1, externalProjects: 0, inferredProjects: 0 }); const configProject = configuredProjectAt(projectService, 0); - checkProjectActualFiles(configProject, [libFile.path, configFile.path]); - - const diagnostics = configProject.getAllProjectErrors(); - assert.equal(diagnostics[0].code, Diagnostics.No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2.code); + checkProjectActualFiles(configProject, []); // Since no files opened from this project, its not loaded host.reloadFS([libFile, site]); host.checkTimeoutQueueLengthAndRun(1); diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index b5c92c4c94a..373b1738608 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -8198,6 +8198,7 @@ declare namespace ts.server { * This property is different from projectStructureVersion since in most cases edits don't affect set of files in the project */ private projectStateVersion; + protected isInitialLoadPending: () => boolean; private readonly cancellationToken; isNonTsProject(): boolean; isJsOnlyProject(): boolean; @@ -8318,6 +8319,7 @@ declare namespace ts.server { private externalProjectRefCount; private projectErrors; private projectReferences; + protected isInitialLoadPending: () => boolean; /** * If the project has reload from disk pending, it reloads (and then updates graph as part of that) instead of just updating the graph * @returns: true if set of files in the project stays the same and false - otherwise.