From 38817263e484337e842e4ba4259a7ab4617931ab Mon Sep 17 00:00:00 2001 From: Young-Flash Date: Fri, 26 Jul 2024 23:10:20 +0800 Subject: [PATCH] fix: tweak hover/tooltip links --- editors/code/src/client.ts | 10 +++++++--- editors/code/src/commands.ts | 7 ++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/editors/code/src/client.ts b/editors/code/src/client.ts index 357f131b93f6..bf58112916b6 100644 --- a/editors/code/src/client.ts +++ b/editors/code/src/client.ts @@ -392,14 +392,18 @@ function isCodeActionWithoutEditsAndCommands(value: any): boolean { // to proxy around that. We store the last hover's reference command link // here, as only one hover can be active at a time, and we don't need to // keep a history of these. -export let HOVER_REFERENCE_COMMAND: ra.CommandLink | undefined = undefined; +export let HOVER_REFERENCE_COMMAND: ra.CommandLink[] = []; function renderCommand(cmd: ra.CommandLink): string { - HOVER_REFERENCE_COMMAND = cmd; - return `[${cmd.title}](command:rust-analyzer.hoverRefCommandProxy '${cmd.tooltip}')`; + HOVER_REFERENCE_COMMAND.push(cmd); + return `[${cmd.title}](command:rust-analyzer.hoverRefCommandProxy?${ + HOVER_REFERENCE_COMMAND.length - 1 + } '${cmd.tooltip}')`; } function renderHoverActions(actions: ra.CommandLinkGroup[]): vscode.MarkdownString { + // clean up the previous hover ref command + HOVER_REFERENCE_COMMAND = []; const text = actions .map( (group) => diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts index 621b9695786a..773a4606014c 100644 --- a/editors/code/src/commands.ts +++ b/editors/code/src/commands.ts @@ -1203,9 +1203,10 @@ export function newDebugConfig(ctx: CtxInit): Cmd { } export function hoverRefCommandProxy(_: Ctx): Cmd { - return async () => { - if (HOVER_REFERENCE_COMMAND) { - const { command, arguments: args = [] } = HOVER_REFERENCE_COMMAND; + return async (index: number) => { + const link = HOVER_REFERENCE_COMMAND[index]; + if (link) { + const { command, arguments: args = [] } = link; await vscode.commands.executeCommand(command, ...args); } };