Skip to content

Commit 756043e

Browse files
feat(language-server): notification-based tsserver request forwarding (#5395)
1 parent e40b574 commit 756043e

File tree

4 files changed

+25
-5
lines changed

4 files changed

+25
-5
lines changed

extensions/vscode/src/languageClient.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ async function getInitializationOptions(context: vscode.ExtensionContext): Promi
106106
return {
107107
typescript: {
108108
tsdk: (await lsp.getTsdk(context))!.tsdk,
109-
tsserverRequestCommand: 'tsserverRequest',
109+
tsserverRequestCommand: 'typescript.tsserverRequest',
110110
},
111111
};
112112
}

extensions/vscode/src/nodeClientMain.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ export const { activate, deactivate } = defineExtension(async () => {
8585

8686
updateProviders(client);
8787

88-
client.onRequest('tsserverRequest', async ([command, args]) => {
88+
client.onRequest('typescript.tsserverRequest', async ([command, args]) => {
8989
const tsserver = (globalThis as any).__TSSERVER__?.semantic;
9090
if (!tsserver) {
9191
return;

packages/language-server/lib/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
export type VueInitializationOptions = {
22
typescript: {
33
tsdk: string;
4-
tsserverRequestCommand?: string;
4+
tsserverRequestCommand?: string | [request: string, response: string];
55
};
66
};
77

packages/language-server/node.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,16 @@ connection.onInitialize(params => {
3838
});
3939

4040
let simpleLs: LanguageService | undefined;
41+
let tsserverRequestId = 0;
42+
43+
const tsserverRequestHandlers = new Map<number, (res: any) => void>();
44+
45+
if (Array.isArray(options.typescript.tsserverRequestCommand)) {
46+
connection.onNotification(options.typescript.tsserverRequestCommand[1], ([id, res]) => {
47+
tsserverRequestHandlers.get(id)?.(res);
48+
tsserverRequestHandlers.delete(id);
49+
});
50+
}
4151

4252
return server.initialize(
4353
params,
@@ -139,8 +149,17 @@ connection.onInitialize(params => {
139149
} : undefined)
140150
);
141151

142-
function sendTsRequest<T>(command: string, args: any): Promise<T | null> {
143-
return connection.sendRequest<T>(options.typescript.tsserverRequestCommand!, [command, args]);
152+
async function sendTsRequest<T>(command: string, args: any): Promise<T | null> {
153+
if (typeof options.typescript.tsserverRequestCommand === 'string') {
154+
return await connection.sendRequest<T>(options.typescript.tsserverRequestCommand, [command, args]);
155+
} else {
156+
const [requestCommand] = options.typescript.tsserverRequestCommand!;
157+
return await new Promise<T | null>(resolve => {
158+
const requestId = ++tsserverRequestId;
159+
tsserverRequestHandlers.set(requestId, resolve);
160+
connection.sendNotification(requestCommand, [command, args, requestId]);
161+
});
162+
}
144163
}
145164

146165
function createLs(server: LanguageServer, tsconfig: string | undefined) {
@@ -185,3 +204,4 @@ connection.onInitialize(params => {
185204
connection.onInitialized(server.initialized);
186205

187206
connection.onShutdown(server.shutdown);
207+

0 commit comments

Comments
 (0)