refactor(language-server): modify connectToLanguageServer to return both client and webSocket

This commit is contained in:
cfngc4594 2025-03-23 23:51:12 +08:00
parent f246ff1a6d
commit 1796d21a09

View File

@ -7,8 +7,7 @@ import { toSocket, WebSocketMessageReader, WebSocketMessageWriter } from "vscode
// Create the WebSocket URL based on the protocol and port // Create the WebSocket URL based on the protocol and port
function createUrl(languageServerConfig: LanguageServerConfig): string { function createUrl(languageServerConfig: LanguageServerConfig): string {
return normalizeUrl( return normalizeUrl(
`${languageServerConfig.protocol}://${languageServerConfig.hostname}${ `${languageServerConfig.protocol}://${languageServerConfig.hostname}${languageServerConfig.port ? `:${languageServerConfig.port}` : ""
languageServerConfig.port ? `:${languageServerConfig.port}` : ""
}${languageServerConfig.path || ""}` }${languageServerConfig.path || ""}`
); );
} }
@ -34,9 +33,7 @@ async function createLanguageClient(
}, },
// create a language client connection from the JSON RPC connection on demand // create a language client connection from the JSON RPC connection on demand
connectionProvider: { connectionProvider: {
get: () => { get: () => Promise.resolve(transports),
return Promise.resolve(transports);
},
}, },
}); });
} }
@ -45,7 +42,7 @@ async function createLanguageClient(
export function connectToLanguageServer( export function connectToLanguageServer(
editorLanguageConfig: EditorLanguageConfig, editorLanguageConfig: EditorLanguageConfig,
languageServerConfig: LanguageServerConfig languageServerConfig: LanguageServerConfig
): Promise<MonacoLanguageClient> { ): Promise<{ client: MonacoLanguageClient; webSocket: WebSocket }> {
const url = createUrl(languageServerConfig); const url = createUrl(languageServerConfig);
const webSocket = new WebSocket(url); const webSocket = new WebSocket(url);
@ -57,14 +54,18 @@ export function connectToLanguageServer(
const writer = new WebSocketMessageWriter(socket); const writer = new WebSocketMessageWriter(socket);
try { try {
const languageClient = await createLanguageClient({ reader, writer }, editorLanguageConfig); const languageClient = await createLanguageClient(
{ reader, writer },
editorLanguageConfig
);
// Start the language client // Start the language client
languageClient.start(); languageClient.start();
// Stop the language client when the reader closes // Stop the language client when the reader closes
reader.onClose(() => languageClient.stop()); reader.onClose(() => languageClient.stop());
resolve(languageClient); resolve({ client: languageClient, webSocket });
} catch (error) { } catch (error) {
reject(error); reject(error);
} }