From 2ead8578e4ebd44c02b9f8c579349276676bc89f Mon Sep 17 00:00:00 2001 From: Autumn Date: Fri, 5 Jun 2026 13:52:46 +1000 Subject: [PATCH 1/3] allow reselection of tree nodes --- vscode-extension/src/commands/decompileNodeCommand.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/vscode-extension/src/commands/decompileNodeCommand.ts b/vscode-extension/src/commands/decompileNodeCommand.ts index 664ed6e2..e29582b1 100644 --- a/vscode-extension/src/commands/decompileNodeCommand.ts +++ b/vscode-extension/src/commands/decompileNodeCommand.ts @@ -20,13 +20,13 @@ export function registerDecompileNodeCommand( return registerILSpyCommand( "ilspy.decompileNode", async (node: Node, revealInTree = false) => { + const uri = nodeDataToUri(node); if ( hasNodeCommand(node, AvailableNodeCommands.Decompile) && lastSelectedNode !== node ) { lastSelectedNode = node; - const uri = nodeDataToUri(node); const language = getDefaultOutputLanguage(); contentProvider.setDocumentOutputLanguage(uri, language); @@ -37,6 +37,13 @@ export function registerDecompileNodeCommand( languageInfos[language].vsLanguageMode, ); await vscode.window.showTextDocument(doc, { preview: true }); + } else if (lastSelectedNode === node) { + let doc = vscode.workspace.textDocuments.find( + (d) => d.uri.toString() === uri.toString(), + ); + if (doc) { + await vscode.window.showTextDocument(doc, { preview: true }); + } } if (revealInTree) { From fd2d1e5356a999993d1d4518c8c24e57fabac9e8 Mon Sep 17 00:00:00 2001 From: Autumn Date: Fri, 5 Jun 2026 18:57:03 +1000 Subject: [PATCH 2/3] Actually we could do it without `lastSelectedNode` --- .../src/commands/decompileNodeCommand.ts | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/vscode-extension/src/commands/decompileNodeCommand.ts b/vscode-extension/src/commands/decompileNodeCommand.ts index e29582b1..2b2f0358 100644 --- a/vscode-extension/src/commands/decompileNodeCommand.ts +++ b/vscode-extension/src/commands/decompileNodeCommand.ts @@ -12,8 +12,6 @@ import { hasNodeCommand } from "../decompiler/utils"; import { executeILSpyCommand, registerILSpyCommand } from "./commandUtils"; import { AvailableNodeCommands, Node } from "../extension-types"; -let lastSelectedNode: Node | undefined = undefined; - export function registerDecompileNodeCommand( contentProvider: DecompilerTextDocumentContentProvider, ) { @@ -21,29 +19,21 @@ export function registerDecompileNodeCommand( "ilspy.decompileNode", async (node: Node, revealInTree = false) => { const uri = nodeDataToUri(node); - if ( - hasNodeCommand(node, AvailableNodeCommands.Decompile) && - lastSelectedNode !== node - ) { - lastSelectedNode = node; - + if (hasNodeCommand(node, AvailableNodeCommands.Decompile)) { const language = getDefaultOutputLanguage(); contentProvider.setDocumentOutputLanguage(uri, language); - let doc = await vscode.workspace.openTextDocument(uri); + let doc = + vscode.workspace.textDocuments.find( + (d) => d.uri.toString() === uri.toString(), + ) ?? (await vscode.workspace.openTextDocument(uri)); + vscode.languages.setTextDocumentLanguage( doc, languageInfos[language].vsLanguageMode, ); await vscode.window.showTextDocument(doc, { preview: true }); - } else if (lastSelectedNode === node) { - let doc = vscode.workspace.textDocuments.find( - (d) => d.uri.toString() === uri.toString(), - ); - if (doc) { - await vscode.window.showTextDocument(doc, { preview: true }); - } } if (revealInTree) { From 2d4ee771407a84aa4deb108f1d65f042f679da64 Mon Sep 17 00:00:00 2001 From: Autumn Date: Sat, 6 Jun 2026 12:02:58 +1000 Subject: [PATCH 3/3] let openTextDocument find the doc if open --- vscode-extension/src/commands/decompileNodeCommand.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/vscode-extension/src/commands/decompileNodeCommand.ts b/vscode-extension/src/commands/decompileNodeCommand.ts index 2b2f0358..d71e9164 100644 --- a/vscode-extension/src/commands/decompileNodeCommand.ts +++ b/vscode-extension/src/commands/decompileNodeCommand.ts @@ -24,10 +24,7 @@ export function registerDecompileNodeCommand( contentProvider.setDocumentOutputLanguage(uri, language); - let doc = - vscode.workspace.textDocuments.find( - (d) => d.uri.toString() === uri.toString(), - ) ?? (await vscode.workspace.openTextDocument(uri)); + let doc = await vscode.workspace.openTextDocument(uri); vscode.languages.setTextDocumentLanguage( doc,