Skip to content

Commit 3b9eb1e

Browse files
Fix premature closing of AutoImportProviderProject for unbuilt monorepos (#40620)
* Fix premature closing of AutoImportProviderProject for unbuilt monorepos * Update src/server/project.ts Co-authored-by: Daniel Rosenwasser <[email protected]> * Update API baseline * Don’t override hasRoots * Update API baselines * Really actually update baselines Co-authored-by: Daniel Rosenwasser <[email protected]>
1 parent a1a9d6d commit 3b9eb1e

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

src/server/project.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1671,7 +1671,7 @@ namespace ts.server {
16711671
}
16721672
if (this.autoImportProviderHost) {
16731673
updateProjectIfDirty(this.autoImportProviderHost);
1674-
if (!this.autoImportProviderHost.hasRoots()) {
1674+
if (this.autoImportProviderHost.isEmpty()) {
16751675
this.autoImportProviderHost.close();
16761676
this.autoImportProviderHost = undefined;
16771677
return undefined;
@@ -1935,6 +1935,11 @@ namespace ts.server {
19351935
this.rootFileNames = initialRootNames;
19361936
}
19371937

1938+
/*@internal*/
1939+
isEmpty() {
1940+
return !some(this.rootFileNames);
1941+
}
1942+
19381943
isOrphan() {
19391944
return true;
19401945
}

src/testRunner/unittests/tsserver/autoImportProvider.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,25 @@ namespace ts.projectSystem {
283283
// Project for A is created - ensure it doesn't have an autoImportProvider
284284
assert.isUndefined(projectService.configuredProjects.get("/packages/a/tsconfig.json")!.getLanguageService().getAutoImportProvider());
285285
});
286+
287+
it("Does not close when root files are redirects that don't actually exist", () => {
288+
const files = [
289+
// packages/a
290+
{ path: "/packages/a/package.json", content: `{ "dependencies": { "b": "*" } }` },
291+
{ path: "/packages/a/tsconfig.json", content: `{ "compilerOptions": { "composite": true }, "references": [{ "path": "./node_modules/b" }] }` },
292+
{ path: "/packages/a/index.ts", content: "" },
293+
294+
// packages/b
295+
{ path: "/packages/a/node_modules/b/package.json", content: `{ "types": "dist/index.d.ts" }` },
296+
{ path: "/packages/a/node_modules/b/tsconfig.json", content: `{ "compilerOptions": { "composite": true, "outDir": "dist" } }` },
297+
{ path: "/packages/a/node_modules/b/index.ts", content: `export class B {}` }
298+
];
299+
300+
const { projectService, session } = setup(files);
301+
openFilesForSession([files[2]], session);
302+
assert.isDefined(projectService.configuredProjects.get("/packages/a/tsconfig.json")!.getPackageJsonAutoImportProvider());
303+
assert.isDefined(projectService.configuredProjects.get("/packages/a/tsconfig.json")!.getPackageJsonAutoImportProvider());
304+
});
286305
});
287306

288307
function setup(files: File[]) {

0 commit comments

Comments
 (0)