diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2022-10-16 17:11:24 +0200 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2022-10-16 19:45:08 +0200 |
| commit | d5f467aa4a6b28ffa6acb7673bfea472fdcd64c8 (patch) | |
| tree | 4aae97003f1d6556b90a97491a65a2f818cc284c /editors/code/src/client.ts | |
| parent | ee2d9eddb6f31773a507c918553214cb816a0abe (diff) | |
| download | rust-d5f467aa4a6b28ffa6acb7673bfea472fdcd64c8.tar.gz rust-d5f467aa4a6b28ffa6acb7673bfea472fdcd64c8.zip | |
Substitute some VSCode variables in the VSCode client
Diffstat (limited to 'editors/code/src/client.ts')
| -rw-r--r-- | editors/code/src/client.ts | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/editors/code/src/client.ts b/editors/code/src/client.ts index 05d4d08f70b..45a7970b217 100644 --- a/editors/code/src/client.ts +++ b/editors/code/src/client.ts @@ -5,7 +5,7 @@ import * as Is from "vscode-languageclient/lib/common/utils/is"; import { assert } from "./util"; import { WorkspaceEdit } from "vscode"; import { Workspace } from "./ctx"; -import { substituteVariablesInEnv } from "./config"; +import { substituteVariablesInEnv, substituteVSCodeVariables } from "./config"; import { outputChannel, traceOutputChannel } from "./main"; import { randomUUID } from "crypto"; @@ -83,15 +83,17 @@ export async function createClient( debug: run, }; - let initializationOptions = vscode.workspace.getConfiguration("rust-analyzer"); + let rawInitializationOptions = vscode.workspace.getConfiguration("rust-analyzer"); if (workspace.kind === "Detached Files") { - initializationOptions = { + rawInitializationOptions = { detachedFiles: workspace.files.map((file) => file.uri.fsPath), - ...initializationOptions, + ...rawInitializationOptions, }; } + const initializationOptions = substituteVSCodeVariables(rawInitializationOptions); + const clientOptions: lc.LanguageClientOptions = { documentSelector: [{ scheme: "file", language: "rust" }], initializationOptions, @@ -99,6 +101,22 @@ export async function createClient( traceOutputChannel: traceOutputChannel(), outputChannel: outputChannel(), middleware: { + workspace: { + async configuration( + params: lc.ConfigurationParams, + token: vscode.CancellationToken, + next: lc.ConfigurationRequest.HandlerSignature + ) { + const resp = await next(params, token); + if (resp && Array.isArray(resp)) { + return resp.map((val) => { + return substituteVSCodeVariables(val); + }); + } else { + return resp; + } + }, + }, async provideHover( document: vscode.TextDocument, position: vscode.Position, |
