Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'editors/code/src/client.ts')
-rw-r--r--editors/code/src/client.ts26
1 files changed, 22 insertions, 4 deletions
diff --git a/editors/code/src/client.ts b/editors/code/src/client.ts
index 05d4d08f70..45a7970b21 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,