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.ts43
1 files changed, 10 insertions, 33 deletions
diff --git a/editors/code/src/client.ts b/editors/code/src/client.ts
index 45a7970b21..3408a2ee84 100644
--- a/editors/code/src/client.ts
+++ b/editors/code/src/client.ts
@@ -4,9 +4,7 @@ import * as ra from "../src/lsp_ext";
import * as Is from "vscode-languageclient/lib/common/utils/is";
import { assert } from "./util";
import { WorkspaceEdit } from "vscode";
-import { Workspace } from "./ctx";
-import { substituteVariablesInEnv, substituteVSCodeVariables } from "./config";
-import { outputChannel, traceOutputChannel } from "./main";
+import { substituteVSCodeVariables } from "./config";
import { randomUUID } from "crypto";
export interface Env {
@@ -65,41 +63,17 @@ function renderHoverActions(actions: ra.CommandLinkGroup[]): vscode.MarkdownStri
}
export async function createClient(
- serverPath: string,
- workspace: Workspace,
- extraEnv: Env
+ traceOutputChannel: vscode.OutputChannel,
+ outputChannel: vscode.OutputChannel,
+ initializationOptions: vscode.WorkspaceConfiguration,
+ serverOptions: lc.ServerOptions
): Promise<lc.LanguageClient> {
- // '.' Is the fallback if no folder is open
- // TODO?: Workspace folders support Uri's (eg: file://test.txt).
- // It might be a good idea to test if the uri points to a file.
-
- const newEnv = substituteVariablesInEnv(Object.assign({}, process.env, extraEnv));
- const run: lc.Executable = {
- command: serverPath,
- options: { env: newEnv },
- };
- const serverOptions: lc.ServerOptions = {
- run,
- debug: run,
- };
-
- let rawInitializationOptions = vscode.workspace.getConfiguration("rust-analyzer");
-
- if (workspace.kind === "Detached Files") {
- rawInitializationOptions = {
- detachedFiles: workspace.files.map((file) => file.uri.fsPath),
- ...rawInitializationOptions,
- };
- }
-
- const initializationOptions = substituteVSCodeVariables(rawInitializationOptions);
-
const clientOptions: lc.LanguageClientOptions = {
documentSelector: [{ scheme: "file", language: "rust" }],
initializationOptions,
diagnosticCollectionName: "rustc",
- traceOutputChannel: traceOutputChannel(),
- outputChannel: outputChannel(),
+ traceOutputChannel,
+ outputChannel,
middleware: {
workspace: {
async configuration(
@@ -273,6 +247,9 @@ export async function createClient(
}
class ExperimentalFeatures implements lc.StaticFeature {
+ getState(): lc.FeatureState {
+ return { kind: "static" };
+ }
fillClientCapabilities(capabilities: lc.ClientCapabilities): void {
const caps: any = capabilities.experimental ?? {};
caps.snippetTextEdit = true;