Skip to content

Commit 8940d9a

Browse files
committed
perf(bridge): skip JS-side unresolved-import walk for tsgo-backed programs
Project.updateGraph() runs getUnresolvedImports on every update, which for a tsgo-backed thin program re-derives the same data through two whole-program RPC dumps (getModuleExportMap + getProgramResolutionInfo) that are cleared on every updateSnapshot. Its only consumer is the typings installer (auto-install @types), which tsgo does not route through the JS resolver, so skip it.
1 parent cbb2bee commit 8940d9a

1 file changed

Lines changed: 25 additions & 7 deletions

File tree

patches/typescript/0003-tsgo-tsserver-scriptinfo.patch

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
diff --git a/src/server/project.ts b/src/server/project.ts
2-
index 88fa23c1bc..59eaae37d6 100644
2+
index 88fa23c1bc..2d8b70564d 100644
33
--- a/src/server/project.ts
44
+++ b/src/server/project.ts
55
@@ -76,6 +76,7 @@ import {
@@ -52,7 +52,25 @@ index 88fa23c1bc..59eaae37d6 100644
5252
});
5353
}
5454

55-
@@ -1690,8 +1700,12 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
55+
@@ -1449,7 +1459,16 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
56+
// (can reuse cached imports for files that were not changed)
57+
// 4. compilation settings were changed in the way that might affect module resolution - drop all caches and collect all data from the scratch
58+
if (hasNewProgram || changedFiles.length) {
59+
- this.lastCachedUnresolvedImportsList = getUnresolvedImports(this.program!, this.cachedUnresolvedImportsPerFile);
60+
+ // tsgo-backed programs resolve modules in Go (their own
61+
+ // resolution cache: getProgramResolutionInfo /
62+
+ // getModuleExportMap), so the JS-side unresolved-import walk —
63+
+ // which re-derives the same data through a whole-program RPC
64+
+ // dump on every update — is skipped. Its only consumer is the
65+
+ // typings installer (auto-install @types), which tsgo does not
66+
+ // route through the JS resolver.
67+
+ this.lastCachedUnresolvedImportsList = (this.program as any)?.isTsgoBackedProgram
68+
+ ? emptyArray
69+
+ : getUnresolvedImports(this.program!, this.cachedUnresolvedImportsPerFile);
70+
}
71+
72+
this.enqueueInstallTypingsForProject(hasAddedorRemovedFiles);
73+
@@ -1690,8 +1709,12 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
5674
const file = this.program!.getSourceFileByPath(path);
5775
const info = value.info;
5876
if (!file || value.info?.path === file.resolvedPath) return;
@@ -67,7 +85,7 @@ index 88fa23c1bc..59eaae37d6 100644
6785
info?.detachFromProject(this);
6886
});
6987

70-
@@ -1956,6 +1970,14 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
88+
@@ -1956,6 +1979,14 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
7189

7290
/** @internal */
7391
print(writeProjectFileNames: boolean, writeFileExplaination: boolean, writeFileVersionAndText: boolean): void {
@@ -82,7 +100,7 @@ index 88fa23c1bc..59eaae37d6 100644
82100
this.writeLog(`Project '${this.projectName}' (${ProjectKind[this.projectKind]})`);
83101
this.writeLog(this.filesToStringWorker(
84102
writeProjectFileNames && this.projectService.logger.hasLevel(LogLevel.verbose),
85-
@@ -2646,7 +2668,8 @@ export class AutoImportProviderProject extends Project {
103+
@@ -2646,7 +2677,8 @@ export class AutoImportProviderProject extends Project {
86104
}
87105
}
88106

@@ -92,7 +110,7 @@ index 88fa23c1bc..59eaae37d6 100644
92110
let referencesAddded = 0;
93111
if (references?.length && hostProject.projectService.getHostPreferences().includeCompletionsForModuleExports) {
94112
// Add direct referenced projects to rootFiles names
95-
@@ -2729,6 +2752,27 @@ export class AutoImportProviderProject extends Project {
113+
@@ -2729,6 +2761,27 @@ export class AutoImportProviderProject extends Project {
96114
}
97115
});
98116
}
@@ -120,7 +138,7 @@ index 88fa23c1bc..59eaae37d6 100644
120138
}
121139

122140
/** @internal */
123-
@@ -2751,10 +2795,20 @@ export class AutoImportProviderProject extends Project {
141+
@@ -2751,10 +2804,20 @@ export class AutoImportProviderProject extends Project {
124142
return undefined;
125143
}
126144

@@ -145,7 +163,7 @@ index 88fa23c1bc..59eaae37d6 100644
145163

146164
const rootNames = this.getRootFileNames(dependencySelection, hostProject, host, compilerOptions);
147165
if (!rootNames.length) {
148-
@@ -2815,7 +2869,13 @@ export class AutoImportProviderProject extends Project {
166+
@@ -2815,7 +2878,13 @@ export class AutoImportProviderProject extends Project {
149167
this.rootFileNames = rootFileNames;
150168
const oldProgram = this.getCurrentProgram();
151169
const hasSameSetOfFiles = super.updateGraph();

0 commit comments

Comments
 (0)