Skip to content

Commit f3e04fb

Browse files
committed
Add inRustProject when-clause for commands.
1 parent 94889b6 commit f3e04fb

File tree

3 files changed

+76
-1
lines changed

3 files changed

+76
-1
lines changed

editors/code/package.json

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,70 @@
694694
]
695695
}
696696
}
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+
}
698762
}
699763
}

editors/code/src/main.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@ import { log, assert, isValidExecutable } from './util';
1212
import { PersistentState } from './persistent_state';
1313
import { fetchRelease, download } from './net';
1414
import { activateTaskProvider } from './tasks';
15+
import { setContextValue } from './util';
1516
import { exec } from 'child_process';
1617

1718
let ctx: Ctx | undefined;
1819

20+
const RUST_PROJECT_CONTEXT_NAME = "inRustProject";
21+
1922
export async function activate(context: vscode.ExtensionContext) {
2023
// Register a "dumb" onEnter command for the case where server fails to
2124
// start.
@@ -54,6 +57,8 @@ export async function activate(context: vscode.ExtensionContext) {
5457
// This a horribly, horribly wrong way to deal with this problem.
5558
ctx = await Ctx.create(config, context, serverPath, workspaceFolder.uri.fsPath);
5659

60+
setContextValue(RUST_PROJECT_CONTEXT_NAME, true);
61+
5762
// Commands which invokes manually via command palette, shortcut, etc.
5863

5964
// 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) {
109114
}
110115

111116
export async function deactivate() {
117+
setContextValue(RUST_PROJECT_CONTEXT_NAME, undefined);
112118
await ctx?.client.stop();
113119
ctx = undefined;
114120
}

editors/code/src/util.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,8 @@ export function isValidExecutable(path: string): boolean {
9494

9595
return res.status === 0;
9696
}
97+
98+
/** Sets ['when'](https://code.visualstudio.com/docs/getstarted/keybindings#_when-clause-contexts) clause contexts */
99+
export function setContextValue(key: string, value: any): Thenable<void> {
100+
return vscode.commands.executeCommand('setContext', key, value);
101+
}

0 commit comments

Comments
 (0)