Skip to content

Commit 303af6c

Browse files
refactor(language-server): remove typescript.tsserverRequestCommand initialization option (#5410)
1 parent 235de4c commit 303af6c

File tree

5 files changed

+24
-57
lines changed

5 files changed

+24
-57
lines changed

extensions/vscode/src/languageClient.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import * as lsp from '@volar/vscode';
2-
import type { VueInitializationOptions } from '@vue/language-server';
32
import * as fs from 'node:fs';
43
import * as path from 'node:path';
54
import {
@@ -25,7 +24,6 @@ type CreateLanguageClient = (
2524
id: string,
2625
name: string,
2726
langs: lsp.DocumentSelector,
28-
initOptions: VueInitializationOptions,
2927
port: number,
3028
outputChannel: vscode.OutputChannel
3129
) => lsp.BaseLanguageClient;
@@ -72,11 +70,6 @@ async function activateLc(
7270
'vue',
7371
'Vue',
7472
selectors,
75-
{
76-
typescript: {
77-
tsserverRequestCommand: 'typescript.tsserverRequest',
78-
},
79-
} satisfies VueInitializationOptions,
8073
6009,
8174
outputChannel
8275
);

extensions/vscode/src/nodeClientMain.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export const { activate, deactivate } = defineExtension(async () => {
4141
const context = extensionContext.value!;
4242
activateLanguageClient(
4343
context,
44-
(id, name, documentSelector, initOptions, port, outputChannel) => {
44+
(id, name, documentSelector, port, outputChannel) => {
4545
class _LanguageClient extends lsp.LanguageClient {
4646
fillInitializeParams(params: lsp.InitializeParams) {
4747
// fix https://github.com/vuejs/language-tools/issues/1959
@@ -66,7 +66,6 @@ export const { activate, deactivate } = defineExtension(async () => {
6666
const clientOptions: lsp.LanguageClientOptions = {
6767
middleware,
6868
documentSelector: documentSelector,
69-
initializationOptions: initOptions,
7069
markdown: {
7170
isTrusted: true,
7271
supportHtml: true
@@ -85,7 +84,7 @@ export const { activate, deactivate } = defineExtension(async () => {
8584

8685
updateProviders(client);
8786

88-
client.onRequest('typescript.tsserverRequest', async ([command, args]) => {
87+
client.onNotification('tsserver/request', async ([id, command, args]) => {
8988
const tsserver = (globalThis as any).__TSSERVER__?.semantic;
9089
if (!tsserver) {
9190
return;
@@ -97,7 +96,7 @@ export const { activate, deactivate } = defineExtension(async () => {
9796
lowPriority: true,
9897
requireSemantic: true,
9998
})[0];
100-
return res.body;
99+
client.sendNotification('tsserver/response', [id, res.body]);
101100
} catch {
102101
// noop
103102
}

packages/language-server/lib/types.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
export type VueInitializationOptions = {
2-
typescript: {
3-
tsserverRequestCommand?: string | [request: string, response: string];
4-
};
5-
};
6-
71
export * from '@volar/language-server/lib/types';
82
export * from '@vue/language-service/lib/types';
93

packages/language-server/node.ts

Lines changed: 18 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,13 @@ import { createLanguage, createParsedCommandLine, createVueLanguagePlugin, getDe
55
import { createLanguageService, createUriMap, getHybridModeLanguageServicePlugins, type LanguageService } from '@vue/language-service';
66
import * as ts from 'typescript';
77
import { URI } from 'vscode-uri';
8-
import type { VueInitializationOptions } from './lib/types';
98

109
const connection = createConnection();
1110
const server = createServer(connection);
1211

1312
connection.listen();
1413

1514
connection.onInitialize(params => {
16-
const options: VueInitializationOptions = params.initializationOptions;
17-
18-
if (!options.typescript?.tsserverRequestCommand) {
19-
connection.console.warn('typescript.tsserverRequestCommand is required since >= 3.0 for complete TS features');
20-
}
21-
2215
const tsconfigProjects = createUriMap<LanguageService>();
2316
const file2ProjectInfo = new Map<string, Promise<ts.server.protocol.ProjectInfo | null>>();
2417

@@ -38,19 +31,17 @@ connection.onInitialize(params => {
3831

3932
const tsserverRequestHandlers = new Map<number, (res: any) => void>();
4033

41-
if (Array.isArray(options.typescript.tsserverRequestCommand)) {
42-
connection.onNotification(options.typescript.tsserverRequestCommand[1], ([id, res]) => {
43-
tsserverRequestHandlers.get(id)?.(res);
44-
tsserverRequestHandlers.delete(id);
45-
});
46-
}
34+
connection.onNotification('tsserver/response', ([id, res]) => {
35+
tsserverRequestHandlers.get(id)?.(res);
36+
tsserverRequestHandlers.delete(id);
37+
});
4738

4839
return server.initialize(
4940
params,
5041
{
5142
setup() { },
5243
async getLanguageService(uri) {
53-
if (uri.scheme === 'file' && options.typescript.tsserverRequestCommand) {
44+
if (uri.scheme === 'file') {
5445
const fileName = uri.fsPath.replace(/\\/g, '/');
5546
let projectInfoPromise = file2ProjectInfo.get(fileName);
5647
if (!projectInfoPromise) {
@@ -83,17 +74,17 @@ connection.onInitialize(params => {
8374
].filter(promise => !!promise));
8475
},
8576
reload() {
86-
for (const ls of [
87-
...tsconfigProjects.values(),
88-
simpleLs,
89-
]) {
90-
ls?.dispose();
77+
for (const ls of tsconfigProjects.values()) {
78+
ls.dispose();
9179
}
9280
tsconfigProjects.clear();
93-
simpleLs = undefined;
81+
if (simpleLs) {
82+
simpleLs.dispose();
83+
simpleLs = undefined;
84+
}
9485
},
9586
},
96-
getHybridModeLanguageServicePlugins(ts, options.typescript.tsserverRequestCommand ? {
87+
getHybridModeLanguageServicePlugins(ts, {
9788
collectExtractProps(...args) {
9889
return sendTsRequest('vue:collectExtractProps', args);
9990
},
@@ -142,20 +133,15 @@ connection.onInitialize(params => {
142133
);
143134
return ts.displayPartsToString(result?.displayParts ?? []);
144135
},
145-
} : undefined)
136+
})
146137
);
147138

148139
async function sendTsRequest<T>(command: string, args: any): Promise<T | null> {
149-
if (typeof options.typescript.tsserverRequestCommand === 'string') {
150-
return await connection.sendRequest<T>(options.typescript.tsserverRequestCommand, [command, args]);
151-
} else {
152-
const [requestCommand] = options.typescript.tsserverRequestCommand!;
153-
return await new Promise<T | null>(resolve => {
154-
const requestId = ++tsserverRequestId;
155-
tsserverRequestHandlers.set(requestId, resolve);
156-
connection.sendNotification(requestCommand, [command, args, requestId]);
157-
});
158-
}
140+
return await new Promise<T | null>(resolve => {
141+
const requestId = ++tsserverRequestId;
142+
tsserverRequestHandlers.set(requestId, resolve);
143+
connection.sendNotification('tsserver/request', [requestId, command, args]);
144+
});
159145
}
160146

161147
function createLs(server: LanguageServer, tsconfig: string | undefined) {

packages/language-server/tests/server.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import type { LanguageServerHandle } from '@volar/test-utils';
44
import { startLanguageServer } from '@volar/test-utils';
55
import * as path from 'node:path';
66
import { URI } from 'vscode-uri';
7-
import type { VueInitializationOptions } from '../lib/types';
87

98
let serverHandle: LanguageServerHandle | undefined;
109
let tsserver: import('@typescript/server-harness').Server;
@@ -44,22 +43,18 @@ export async function getLanguageServer(): Promise<{
4443
return null;
4544
});
4645
});
47-
serverHandle.connection.onRequest('tsserverRequest', async ([command, args]) => {
46+
serverHandle.connection.onNotification('tsserver/request', async ([id, command, args]) => {
4847
const res = await tsserver.message({
4948
seq: seq++,
5049
command: command,
5150
arguments: args,
5251
});
53-
return res.body;
52+
serverHandle!.connection.sendNotification('tsserver/response', [id, res.body]);
5453
});
5554

5655
await serverHandle.initialize(
5756
URI.file(testWorkspacePath).toString(),
58-
{
59-
typescript: {
60-
tsserverRequestCommand: 'tsserverRequest',
61-
},
62-
} satisfies VueInitializationOptions,
57+
{},
6358
{
6459
workspace: {
6560
configuration: true,

0 commit comments

Comments
 (0)