about summary refs log tree commit diff
path: root/editors/code/src/client.ts
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2022-10-16 17:11:24 +0200
committerLukas Wirth <lukastw97@gmail.com>2022-10-16 19:45:08 +0200
commitd5f467aa4a6b28ffa6acb7673bfea472fdcd64c8 (patch)
tree4aae97003f1d6556b90a97491a65a2f818cc284c /editors/code/src/client.ts
parentee2d9eddb6f31773a507c918553214cb816a0abe (diff)
downloadrust-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.ts26
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,