feat: Clicking the status bar item stops and starts the server

This commit is contained in:
Lukas Wirth 2022-10-28 23:10:10 +02:00
parent d022e0ec53
commit 274df54885
2 changed files with 11 additions and 6 deletions

View File

@ -204,13 +204,13 @@ export class Ctx {
} }
} }
setServerStatus(status: ServerStatusParams) { setServerStatus(status: ServerStatusParams | { health: "stopped" }) {
let icon = ""; let icon = "";
const statusBar = this.statusBar; const statusBar = this.statusBar;
switch (status.health) { switch (status.health) {
case "ok": case "ok":
statusBar.tooltip = status.message ?? "Ready"; statusBar.tooltip = (status.message ?? "Ready") + "Click to stop.";
statusBar.command = undefined; statusBar.command = "rust-analyzer.stopServer";
statusBar.color = undefined; statusBar.color = undefined;
statusBar.backgroundColor = undefined; statusBar.backgroundColor = undefined;
break; break;
@ -234,6 +234,13 @@ export class Ctx {
statusBar.backgroundColor = new vscode.ThemeColor("statusBarItem.errorBackground"); statusBar.backgroundColor = new vscode.ThemeColor("statusBarItem.errorBackground");
icon = "$(error) "; icon = "$(error) ";
break; break;
case "stopped":
statusBar.tooltip = "Server is stopped. Click to start.";
statusBar.command = "rust-analyzer.startServer";
statusBar.color = undefined;
statusBar.backgroundColor = undefined;
statusBar.text = `$(stop-circle) rust-analyzer`;
return;
} }
if (!status.quiescent) icon = "$(sync~spin) "; if (!status.quiescent) icon = "$(sync~spin) ";
statusBar.text = `${icon}rust-analyzer`; statusBar.text = `${icon}rust-analyzer`;

View File

@ -120,9 +120,7 @@ function createCommands(): Record<string, CommandFactory> {
// FIXME: We should re-use the client, that is ctx.deactivate() if none of the configs have changed // FIXME: We should re-use the client, that is ctx.deactivate() if none of the configs have changed
await ctx.stop(); await ctx.stop();
ctx.setServerStatus({ ctx.setServerStatus({
health: "ok", health: "stopped",
quiescent: true,
message: "server is not running",
}); });
}, },
}, },