Files
pioarduino-vscode-debug/src/frontend/disassembly_tree_provider.ts
T
2026-03-11 19:33:19 +01:00

58 lines
1.8 KiB
TypeScript

import * as vscode from 'vscode';
/** TreeDataProvider for platformio-debug.disassembly. */
export class DisassemblyTreeProvider implements vscode.TreeDataProvider<vscode.TreeItem> {
private _onDidChangeTreeData = new vscode.EventEmitter<void>();
public onDidChangeTreeData = this._onDidChangeTreeData.event;
private forced: boolean = false;
/** Refreshes the tree view. */
refresh(): void {
this._onDidChangeTreeData.fire();
}
/** Returns disassemble/toggle items when session is active. */
getChildren(element?: vscode.TreeItem): vscode.TreeItem[] {
if (!vscode.debug.activeDebugSession) {
return [];
}
const disassembleItem = new vscode.TreeItem('Disassemble function');
disassembleItem.command = {
title: 'Disassemble function',
command: 'platformio-debug.viewDisassembly',
};
const switchLabel = 'Switch to ' + (this.forced ? 'code' : 'assembly');
const switchItem = new vscode.TreeItem(switchLabel);
switchItem.command = {
title: switchLabel,
command: 'platformio-debug.setForceDisassembly',
arguments: [this.forced ? 'Auto' : 'Forced'],
};
return [disassembleItem, switchItem];
}
/** Returns the tree item unchanged. */
getTreeItem(element: vscode.TreeItem): vscode.TreeItem {
return element;
}
/** Updates forced-disassembly state and refreshes. */
updateForcedState(forced: boolean): void {
this.forced = forced;
this.refresh();
}
/** Refreshes on debug session start. */
debugSessionStarted(): void {
this.refresh();
}
/** Resets forced state and refreshes. */
debugSessionTerminated(): void {
this.updateForcedState(false);
}
}