Send detached files info to server via init params

This commit is contained in:
Kirill Bulatov 2021-05-23 16:22:13 +03:00
parent d9a5490646
commit b3383b0661
3 changed files with 27 additions and 6 deletions

View file

@ -4,6 +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';
export interface Env {
[name: string]: string;
@ -23,7 +24,7 @@ function renderHoverActions(actions: ra.CommandLinkGroup[]): vscode.MarkdownStri
return result;
}
export function createClient(serverPath: string, cwd: string | undefined, extraEnv: Env): lc.LanguageClient {
export function createClient(serverPath: string, workspace: Workspace, extraEnv: Env): 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.
@ -31,6 +32,11 @@ export function createClient(serverPath: string, cwd: string | undefined, extraE
const newEnv = Object.assign({}, process.env);
Object.assign(newEnv, extraEnv);
let cwd = undefined;
if (workspace.kind == "Workspace Folder") {
cwd = workspace.folder.fsPath;
};
const run: lc.Executable = {
command: serverPath,
options: { cwd, env: newEnv },
@ -43,9 +49,14 @@ export function createClient(serverPath: string, cwd: string | undefined, extraE
'Rust Analyzer Language Server Trace',
);
let initializationOptions = vscode.workspace.getConfiguration("rust-analyzer");
if (workspace.kind == "Detached files") {
initializationOptions = { "detachedFiles": workspace.files.map(file => file.uri.fsPath), ...initializationOptions };
}
const clientOptions: lc.LanguageClientOptions = {
documentSelector: [{ scheme: 'file', language: 'rust' }],
initializationOptions: vscode.workspace.getConfiguration("rust-analyzer"),
initializationOptions,
diagnosticCollectionName: "rustc",
traceOutputChannel,
middleware: {