mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-22 10:02:58 +00:00
Send detached files info to server via init params
This commit is contained in:
parent
d9a5490646
commit
b3383b0661
3 changed files with 27 additions and 6 deletions
|
@ -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: {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue