From 2cb60343ed3774d4645d7d14dff8a1119d3c6785 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Fri, 10 Mar 2023 10:13:30 +0100 Subject: [PATCH] Add fancy buttons to the vscode status message --- editors/code/src/commands.ts | 8 ++++++++ editors/code/src/ctx.ts | 34 ++++++++++++++++++++++------------ editors/code/src/main.ts | 1 + 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts index 70b91fe7dc8..f4a4579a92c 100644 --- a/editors/code/src/commands.ts +++ b/editors/code/src/commands.ts @@ -93,6 +93,14 @@ export function triggerParameterHints(_: CtxInit): Cmd { }; } +export function openLogs(ctx: CtxInit): Cmd { + return async () => { + if (ctx.client.outputChannel) { + ctx.client.outputChannel.show(); + } + }; +} + export function matchingBrace(ctx: CtxInit): Cmd { return async () => { const editor = ctx.activeRustEditor; diff --git a/editors/code/src/ctx.ts b/editors/code/src/ctx.ts index e2a30e0cc45..1708d47cee7 100644 --- a/editors/code/src/ctx.ts +++ b/editors/code/src/ctx.ts @@ -282,18 +282,18 @@ export class Ctx { setServerStatus(status: ServerStatusParams | { health: "stopped" }) { let icon = ""; const statusBar = this.statusBar; + statusBar.tooltip = new vscode.MarkdownString("", true); + statusBar.tooltip.isTrusted = true; switch (status.health) { case "ok": - statusBar.tooltip = (status.message ?? "Ready") + "\nClick to stop server."; - statusBar.command = "rust-analyzer.stopServer"; + statusBar.tooltip.appendText(status.message ?? "Ready"); statusBar.color = undefined; statusBar.backgroundColor = undefined; break; case "warning": - statusBar.tooltip = - (status.message ? status.message + "\n" : "") + "Click to reload."; - - statusBar.command = "rust-analyzer.reloadWorkspace"; + if (status.message) { + statusBar.tooltip.appendText(status.message); + } statusBar.color = new vscode.ThemeColor("statusBarItem.warningForeground"); statusBar.backgroundColor = new vscode.ThemeColor( "statusBarItem.warningBackground" @@ -301,22 +301,32 @@ export class Ctx { icon = "$(warning) "; break; case "error": - statusBar.tooltip = - (status.message ? status.message + "\n" : "") + "Click to reload."; - - statusBar.command = "rust-analyzer.reloadWorkspace"; + if (status.message) { + statusBar.tooltip.appendText(status.message); + } statusBar.color = new vscode.ThemeColor("statusBarItem.errorForeground"); statusBar.backgroundColor = new vscode.ThemeColor("statusBarItem.errorBackground"); icon = "$(error) "; break; case "stopped": - statusBar.tooltip = "Server is stopped.\nClick to start."; - statusBar.command = "rust-analyzer.startServer"; + statusBar.tooltip.appendText("Server is stopped"); + statusBar.tooltip.appendMarkdown( + "\n\n[Start server](command:rust-analyzer.startServer)" + ); statusBar.color = undefined; statusBar.backgroundColor = undefined; statusBar.text = `$(stop-circle) rust-analyzer`; return; } + if (statusBar.tooltip.value) { + statusBar.tooltip.appendText("\n\n"); + } + statusBar.tooltip.appendMarkdown("[Stop server](command:rust-analyzer.stopServer)"); + statusBar.tooltip.appendMarkdown( + "\n\n[Reload Workspace](command:rust-analyzer.reloadWorkspace)" + ); + statusBar.tooltip.appendMarkdown("\n\n[Restart server](command:rust-analyzer.startServer)"); + statusBar.tooltip.appendMarkdown("\n\n[Open logs](command:rust-analyzer.openLogs)"); if (!status.quiescent) icon = "$(sync~spin) "; statusBar.text = `${icon}rust-analyzer`; } diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts index 1eb01f30c1e..8a2412af849 100644 --- a/editors/code/src/main.ts +++ b/editors/code/src/main.ts @@ -188,5 +188,6 @@ function createCommands(): Record { runSingle: { enabled: commands.runSingle }, showReferences: { enabled: commands.showReferences }, triggerParameterHints: { enabled: commands.triggerParameterHints }, + openLogs: { enabled: commands.openLogs }, }; }