aboutsummaryrefslogtreecommitdiff
path: root/editors/code/src/ctx.ts
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2021-05-24 13:40:25 +0100
committerGitHub <[email protected]>2021-05-24 13:40:25 +0100
commit05fc97e31b1d04bf5d5885edd98a1510f0931a62 (patch)
tree27a99294690e75990250b0c1306ef99fad4558fa /editors/code/src/ctx.ts
parent31a19148e967163ea9ebb42e341944be76ce8960 (diff)
parent5c0369b1d0c5351672f2a16e9a0d17beee84bcbe (diff)
Merge #8955
8955: feature: Support standalone Rust files r=matklad a=SomeoneToIgnore ![standalone](https://user-images.githubusercontent.com/2690773/119277037-0b579380-bc26-11eb-8d77-20d46ab4916a.gif) Closes https://github.com/rust-analyzer/rust-analyzer/issues/6388 Caveats: * I've decided to support multiple detached files in the code (anticipating the scratch files), but I found no way to open multiple files in VSCode at once: running `code *.rs` makes the plugin to register in the `vscode.workspace.textDocuments` only the first file, while code actually displays all files later. Apparently what happens is the same as when you have VSCode open at some workplace already and then run `code some_other_file.rs`: it gets opened in the same workspace of the same VSCode with no server to support it. If there's a way to override it, I'd appreciate the pointer. * No way to toggle inlay hints, since the setting is updated for the workspace (which does not exist for a single file opened) > [2021-05-24 00:22:49.100] [exthost] [error] Error: Unable to write to Workspace Settings because no workspace is opened. Please open a workspace first and try again. * No runners/lens to run or check the code are implemented for this mode. In theory, we can detect `rustc`, run it on a file and run the resulting binary, but not sure if worth doing it at this stage. Otherwise imports, hints, completion and other features work. Co-authored-by: Kirill Bulatov <[email protected]>
Diffstat (limited to 'editors/code/src/ctx.ts')
-rw-r--r--editors/code/src/ctx.ts14
1 files changed, 12 insertions, 2 deletions
diff --git a/editors/code/src/ctx.ts b/editors/code/src/ctx.ts
index bd023f803..22c5f62a1 100644
--- a/editors/code/src/ctx.ts
+++ b/editors/code/src/ctx.ts
@@ -7,6 +7,16 @@ import { createClient } from './client';
7import { isRustEditor, RustEditor } from './util'; 7import { isRustEditor, RustEditor } from './util';
8import { ServerStatusParams } from './lsp_ext'; 8import { ServerStatusParams } from './lsp_ext';
9 9
10export type Workspace =
11 {
12 kind: 'Workspace Folder';
13 folder: vscode.Uri;
14 }
15 | {
16 kind: 'Detached Files';
17 files: vscode.TextDocument[];
18 };
19
10export class Ctx { 20export class Ctx {
11 private constructor( 21 private constructor(
12 readonly config: Config, 22 readonly config: Config,
@@ -22,9 +32,9 @@ export class Ctx {
22 config: Config, 32 config: Config,
23 extCtx: vscode.ExtensionContext, 33 extCtx: vscode.ExtensionContext,
24 serverPath: string, 34 serverPath: string,
25 cwd: string, 35 workspace: Workspace,
26 ): Promise<Ctx> { 36 ): Promise<Ctx> {
27 const client = createClient(serverPath, cwd, config.serverExtraEnv); 37 const client = createClient(serverPath, workspace, config.serverExtraEnv);
28 38
29 const statusBar = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left); 39 const statusBar = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left);
30 extCtx.subscriptions.push(statusBar); 40 extCtx.subscriptions.push(statusBar);