-
Notifications
You must be signed in to change notification settings - Fork 27
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add debug Visualizer * Add proposal * add hex view * fux lint * fix lint * Add localization, move tree creation to own file * fix compile errors
- Loading branch information
1 parent
ef9e981
commit 0f507f3
Showing
5 changed files
with
248 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT License. | ||
|
||
import { DebugVisualizationContext } from 'vscode'; | ||
|
||
export function registerHexDebugVisualizationTreeProvider() { | ||
return { | ||
getTreeItem(context: DebugVisualizationContext) { | ||
const decoded = `0x${Number(context.variable.value).toString(16)}`; | ||
return { | ||
label: context.variable.name.toString(), | ||
description: decoded.toString(), | ||
buffer: decoded, | ||
canEdit: true, | ||
context, | ||
}; | ||
}, | ||
getChildren(_element: any) { | ||
return undefined; | ||
}, | ||
editItem(item: any, value: string) { | ||
item.buffer = `0x${Number(value).toString(16)}`; | ||
item.description = item.buffer.toString(); | ||
|
||
item.context.session.customRequest('setExpression', { | ||
expression: item.context.variable.evaluateName, | ||
frameId: item.context.frameId, | ||
value: JSON.stringify(item.buffer.toString()), | ||
}); | ||
|
||
return item; | ||
}, | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,170 @@ | ||
/*--------------------------------------------------------------------------------------------- | ||
* Copyright (c) Microsoft Corporation. All rights reserved. | ||
* Licensed under the MIT License. See License.txt in the project root for license information. | ||
*--------------------------------------------------------------------------------------------*/ | ||
|
||
|
||
declare module 'vscode' { | ||
export namespace debug { | ||
/** | ||
* Registers a custom data visualization for variables when debugging. | ||
* | ||
* @param id The corresponding ID in the package.json `debugVisualizers` contribution point. | ||
* @param provider The {@link DebugVisualizationProvider} to register | ||
*/ | ||
export function registerDebugVisualizationProvider<T extends DebugVisualization>( | ||
id: string, | ||
provider: DebugVisualizationProvider<T> | ||
): Disposable; | ||
|
||
/** | ||
* Registers a tree that can be referenced by {@link DebugVisualization.visualization}. | ||
* @param id | ||
* @param provider | ||
*/ | ||
export function registerDebugVisualizationTreeProvider<T extends DebugTreeItem>( | ||
id: string, | ||
provider: DebugVisualizationTree<T> | ||
): Disposable; | ||
} | ||
|
||
/** | ||
* An item from the {@link DebugVisualizationTree} | ||
*/ | ||
export interface DebugTreeItem { | ||
/** | ||
* A human-readable string describing this item. | ||
*/ | ||
label: string; | ||
|
||
/** | ||
* A human-readable string which is rendered less prominent. | ||
*/ | ||
description?: string; | ||
|
||
/** | ||
* {@link TreeItemCollapsibleState} of the tree item. | ||
*/ | ||
collapsibleState?: TreeItemCollapsibleState; | ||
|
||
/** | ||
* Context value of the tree item. This can be used to contribute item specific actions in the tree. | ||
* For example, a tree item is given a context value as `folder`. When contributing actions to `view/item/context` | ||
* using `menus` extension point, you can specify context value for key `viewItem` in `when` expression like `viewItem == folder`. | ||
* ```json | ||
* "contributes": { | ||
* "menus": { | ||
* "view/item/context": [ | ||
* { | ||
* "command": "extension.deleteFolder", | ||
* "when": "viewItem == folder" | ||
* } | ||
* ] | ||
* } | ||
* } | ||
* ``` | ||
* This will show action `extension.deleteFolder` only for items with `contextValue` is `folder`. | ||
*/ | ||
contextValue?: string; | ||
|
||
/** | ||
* Whether this item can be edited by the user. | ||
*/ | ||
canEdit?: boolean; | ||
} | ||
|
||
/** | ||
* Provides a tree that can be referenced in debug visualizations. | ||
*/ | ||
export interface DebugVisualizationTree<T extends DebugTreeItem = DebugTreeItem> { | ||
/** | ||
* Gets the tree item for an element or the base context item. | ||
*/ | ||
getTreeItem(context: DebugVisualizationContext): ProviderResult<T>; | ||
/** | ||
* Gets children for the tree item or the best context item. | ||
*/ | ||
getChildren(element: T): ProviderResult<T[]>; | ||
/** | ||
* Handles the user editing an item. | ||
*/ | ||
editItem?(item: T, value: string): ProviderResult<T>; | ||
} | ||
|
||
export class DebugVisualization { | ||
/** | ||
* The name of the visualization to show to the user. | ||
*/ | ||
name: string; | ||
|
||
/** | ||
* An icon for the view when it's show in inline actions. | ||
*/ | ||
iconPath?: Uri | { light: Uri; dark: Uri } | ThemeIcon; | ||
|
||
/** | ||
* Visualization to use for the variable. This may be either: | ||
* - A command to run when the visualization is selected for a variable. | ||
* - A reference to a previously-registered {@link DebugVisualizationTree} | ||
*/ | ||
visualization?: Command | { treeId: string }; | ||
|
||
/** | ||
* Creates a new debug visualization object. | ||
* @param name Name of the visualization to show to the user. | ||
*/ | ||
constructor(name: string); | ||
} | ||
|
||
export interface DebugVisualizationProvider<T extends DebugVisualization = DebugVisualization> { | ||
/** | ||
* Called for each variable when the debug session stops. It should return | ||
* any visualizations the extension wishes to show to the user. | ||
* | ||
* Note that this is only called when its `when` clause defined under the | ||
* `debugVisualizers` contribution point in the `package.json` evaluates | ||
* to true. | ||
*/ | ||
provideDebugVisualization(context: DebugVisualizationContext, token: CancellationToken): ProviderResult<T[]>; | ||
|
||
/** | ||
* Invoked for a variable when a user picks the visualizer. | ||
* | ||
* It may return a {@link TreeView} that's shown in the Debug Console or | ||
* inline in a hover. A visualizer may choose to return `undefined` from | ||
* this function and instead trigger other actions in the UI, such as opening | ||
* a custom {@link WebviewView}. | ||
*/ | ||
resolveDebugVisualization?(visualization: T, token: CancellationToken): ProviderResult<T>; | ||
} | ||
|
||
export interface DebugVisualizationContext { | ||
/** | ||
* The Debug Adapter Protocol Variable to be visualized. | ||
* @see https://microsoft.github.io/debug-adapter-protocol/specification#Types_Variable | ||
*/ | ||
variable: any; | ||
/** | ||
* The Debug Adapter Protocol variable reference the type (such as a scope | ||
* or another variable) that contained this one. Empty for variables | ||
* that came from user evaluations in the Debug Console. | ||
* @see https://microsoft.github.io/debug-adapter-protocol/specification#Types_Variable | ||
*/ | ||
containerId?: number; | ||
/** | ||
* The ID of the Debug Adapter Protocol StackFrame in which the variable was found, | ||
* for variables that came from scopes in a stack frame. | ||
* @see https://microsoft.github.io/debug-adapter-protocol/specification#Types_StackFrame | ||
*/ | ||
frameId?: number; | ||
/** | ||
* The ID of the Debug Adapter Protocol Thread in which the variable was found. | ||
* @see https://microsoft.github.io/debug-adapter-protocol/specification#Types_StackFrame | ||
*/ | ||
threadId: number; | ||
/** | ||
* The debug session the variable belongs to. | ||
*/ | ||
session: DebugSession; | ||
} | ||
} |