diff --git a/demos/js/src/demo_stack-frames.js b/demos/js/src/demo_stack-frames.js new file mode 100644 index 0000000..23b0813 --- /dev/null +++ b/demos/js/src/demo_stack-frames.js @@ -0,0 +1,8 @@ + +function test() { + let i = 1; + debugger; +} + +let i = 0; +test(); \ No newline at end of file diff --git a/extension/CHANGELOG.md b/extension/CHANGELOG.md index b9cb90f..317be9d 100644 --- a/extension/CHANGELOG.md +++ b/extension/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## 2.6.0 + +- Improved JS data extractors +- Uses the active stack frame (instead of the top-most) for evaluating expressions + ## 2.4.0 - [Ruby support](https://github.com/hediet/vscode-debug-visualizer/pull/159) diff --git a/extension/package.json b/extension/package.json index 79c998b..54d0950 100644 --- a/extension/package.json +++ b/extension/package.json @@ -7,7 +7,7 @@ "version": "2.6.0", "license": "GPL-3.0", "engines": { - "vscode": "^1.79.1" + "vscode": "^1.84.0" }, "publisher": "hediet", "keywords": [ @@ -136,7 +136,7 @@ "@types/express": "^4.17.2", "@types/serve-static": "^1.13.3", "@types/node": "^13.7.4", - "@types/vscode": "^1.79.1", + "@types/vscode": "^1.84.0", "tslint": "^6.1.3", "typescript": "^5.1.6", "webpack": "^5.88.1", diff --git a/extension/src/proxies/DebuggerViewProxy.ts b/extension/src/proxies/DebuggerViewProxy.ts index 6087374..d5bbb00 100644 --- a/extension/src/proxies/DebuggerViewProxy.ts +++ b/extension/src/proxies/DebuggerViewProxy.ts @@ -1,5 +1,5 @@ import { Disposable } from "@hediet/std/disposable"; -import { debug, DebugSession } from "vscode"; +import { CancellationToken, debug, DebugSession, InlineValue, InlineValueContext, InlineValuesProvider, languages, ProviderResult, Range, TextDocument } from "vscode"; import { observable, action } from "mobx"; import { DebuggerProxy } from "./DebuggerProxy"; import { DebugSessionProxy } from "./DebugSessionProxy"; @@ -30,6 +30,8 @@ export class DebuggerViewProxy { }) ); this.updateActiveDebugSession(debug.activeDebugSession); + + this.dispose.track(languages.registerInlineValuesProvider('*', new FrameIdGetter(this))); } @action @@ -39,3 +41,18 @@ export class DebuggerViewProxy { : undefined; } } + +export class FrameIdGetter implements InlineValuesProvider { + constructor( + private readonly debuggerViewProxy: DebuggerViewProxy, + ) { + } + + provideInlineValues(document: TextDocument, viewPort: Range, context: InlineValueContext, token: CancellationToken): ProviderResult { + const a = this.debuggerViewProxy.activeDebugSession; + if (a) { + a['_activeStackFrameId'] = context.frameId; + } + return [] + } +} diff --git a/yarn.lock b/yarn.lock index 5a26170..5768a0c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1200,10 +1200,10 @@ dependencies: source-map "^0.6.1" -"@types/vscode@^1.79.1": - version "1.81.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.81.0.tgz#c27228dd063002e0e00611be70b0497beaa24d39" - integrity sha512-YIaCwpT+O2E7WOMq0eCgBEABE++SX3Yl/O02GoMIF2DO3qAtvw7m6BXFYsxnc6XyzwZgh6/s/UG78LSSombl2w== +"@types/vscode@^1.84.0": + version "1.84.1" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.84.1.tgz#2e89dc074743737209f1769f7e7762499edaca71" + integrity sha512-DB10vBRLEPA/us7p3gQilU2Tq5HDu6JWTyCpD9qtb7MKWIvJS5In9HU3YgVGCXf/miwHJiY62aXwjtUSMpT8HA== "@types/webpack-sources@*": version "3.2.0"