aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/user/readme.adoc10
-rw-r--r--editors/code/package.json66
-rw-r--r--editors/code/src/main.ts6
-rw-r--r--editors/code/src/util.ts5
4 files changed, 86 insertions, 1 deletions
diff --git a/docs/user/readme.adoc b/docs/user/readme.adoc
index 9539d326d..64bd0feb1 100644
--- a/docs/user/readme.adoc
+++ b/docs/user/readme.adoc
@@ -65,6 +65,16 @@ The server binary is stored in:
65 65
66Note that we only support two most recent versions of VS Code. 66Note that we only support two most recent versions of VS Code.
67 67
68==== Special `when` clause context for keybindings.
69You may use `inRustProject` context to configure keybindings for rust projects only. For example:
70[source,json]
71----
72{ "key": "ctrl+shift+f5", "command": "workbench.action.debug.restart", "when": "inDebugMode && !inRustProject"},
73{ "key": "ctrl+shift+f5", "command": "rust-analyzer.debug", "when": "inRustProject"},
74{ "key": "ctrl+i", "command": "rust-analyzer.toggleInlayHints", "when": "inRustProject" }
75----
76More about `when` clause contexts https://code.visualstudio.com/docs/getstarted/keybindings#_when-clause-contexts[here].
77
68==== Updates 78==== Updates
69 79
70The extension will be updated automatically as new versions become available. It will ask your permission to download the matching language server version binary if needed. 80The extension will be updated automatically as new versions become available. It will ask your permission to download the matching language server version binary if needed.
diff --git a/editors/code/package.json b/editors/code/package.json
index acf3ca4b5..75dbafc05 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -694,6 +694,70 @@
694 ] 694 ]
695 } 695 }
696 } 696 }
697 ] 697 ],
698 "menus": {
699 "commandPalette": [
700 {
701 "command": "rust-analyzer.syntaxTree",
702 "when": "inRustProject"
703 },
704 {
705 "command": "rust-analyzer.expandMacro",
706 "when": "inRustProject"
707 },
708 {
709 "command": "rust-analyzer.matchingBrace",
710 "when": "inRustProject"
711 },
712 {
713 "command": "rust-analyzer.parentModule",
714 "when": "inRustProject"
715 },
716 {
717 "command": "rust-analyzer.joinLines",
718 "when": "inRustProject"
719 },
720 {
721 "command": "rust-analyzer.run",
722 "when": "inRustProject"
723 },
724 {
725 "command": "rust-analyzer.debug",
726 "when": "inRustProject"
727 },
728 {
729 "command": "rust-analyzer.newDebugConfig",
730 "when": "inRustProject"
731 },
732 {
733 "command": "rust-analyzer.analyzerStatus",
734 "when": "inRustProject"
735 },
736 {
737 "command": "rust-analyzer.collectGarbage",
738 "when": "inRustProject"
739 },
740 {
741 "command": "rust-analyzer.reload",
742 "when": "inRustProject"
743 },
744 {
745 "command": "rust-analyzer.onEnter",
746 "when": "inRustProject"
747 },
748 {
749 "command": "rust-analyzer.ssr",
750 "when": "inRustProject"
751 },
752 {
753 "command": "rust-analyzer.serverVersion",
754 "when": "inRustProject"
755 },
756 {
757 "command": "rust-analyzer.toggleInlayHints",
758 "when": "inRustProject"
759 }
760 ]
761 }
698 } 762 }
699} 763}
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts
index 31ac81ee8..b7337621c 100644
--- a/editors/code/src/main.ts
+++ b/editors/code/src/main.ts
@@ -12,10 +12,13 @@ import { log, assert, isValidExecutable } from './util';
12import { PersistentState } from './persistent_state'; 12import { PersistentState } from './persistent_state';
13import { fetchRelease, download } from './net'; 13import { fetchRelease, download } from './net';
14import { activateTaskProvider } from './tasks'; 14import { activateTaskProvider } from './tasks';
15import { setContextValue } from './util';
15import { exec } from 'child_process'; 16import { exec } from 'child_process';
16 17
17let ctx: Ctx | undefined; 18let ctx: Ctx | undefined;
18 19
20const RUST_PROJECT_CONTEXT_NAME = "inRustProject";
21
19export async function activate(context: vscode.ExtensionContext) { 22export async function activate(context: vscode.ExtensionContext) {
20 // Register a "dumb" onEnter command for the case where server fails to 23 // Register a "dumb" onEnter command for the case where server fails to
21 // start. 24 // start.
@@ -54,6 +57,8 @@ export async function activate(context: vscode.ExtensionContext) {
54 // This a horribly, horribly wrong way to deal with this problem. 57 // This a horribly, horribly wrong way to deal with this problem.
55 ctx = await Ctx.create(config, context, serverPath, workspaceFolder.uri.fsPath); 58 ctx = await Ctx.create(config, context, serverPath, workspaceFolder.uri.fsPath);
56 59
60 setContextValue(RUST_PROJECT_CONTEXT_NAME, true);
61
57 // Commands which invokes manually via command palette, shortcut, etc. 62 // Commands which invokes manually via command palette, shortcut, etc.
58 63
59 // Reloading is inspired by @DanTup maneuver: https://github.com/microsoft/vscode/issues/45774#issuecomment-373423895 64 // Reloading is inspired by @DanTup maneuver: https://github.com/microsoft/vscode/issues/45774#issuecomment-373423895
@@ -109,6 +114,7 @@ export async function activate(context: vscode.ExtensionContext) {
109} 114}
110 115
111export async function deactivate() { 116export async function deactivate() {
117 setContextValue(RUST_PROJECT_CONTEXT_NAME, undefined);
112 await ctx?.client.stop(); 118 await ctx?.client.stop();
113 ctx = undefined; 119 ctx = undefined;
114} 120}
diff --git a/editors/code/src/util.ts b/editors/code/src/util.ts
index 793c481fb..352ef9162 100644
--- a/editors/code/src/util.ts
+++ b/editors/code/src/util.ts
@@ -94,3 +94,8 @@ export function isValidExecutable(path: string): boolean {
94 94
95 return res.status === 0; 95 return res.status === 0;
96} 96}
97
98/** Sets ['when'](https://code.visualstudio.com/docs/getstarted/keybindings#_when-clause-contexts) clause contexts */
99export function setContextValue(key: string, value: any): Thenable<void> {
100 return vscode.commands.executeCommand('setContext', key, value);
101}