feat: add debugger support#739
Merged
sbarzowski merged 1 commit intogoogle:masterfrom Jun 9, 2024
Merged
Conversation
Contributor
Author
|
We have released an implementation of the example client as a standalone package at grafana/jsonnet-debugger. It is also integrated into the latest version of our vscode-jsonnet extension. The debugger uses the grafana/go-jsonnet-debugger fork to implement the functionality until the PR is merged |
sbarzowski
approved these changes
Jun 9, 2024
| } | ||
|
|
||
| func (i *interpreter) evaluate(a ast.Node, tc tailCallStatus) (value, error) { | ||
| i.evalHook.pre(i, a) |
Contributor
There was a problem hiding this comment.
I would probably make evalHook a pointer and avoid a virtual call here if it's null (so that the performance overhead when not debugging is smaller). Not sure how significant that is, given other overhead.
| @@ -0,0 +1,401 @@ | |||
| package jsonnet | |||
Contributor
There was a problem hiding this comment.
There's quite a bit of complexity here - some tests would be nice.
Contributor
|
Really cool stuff. Added some comments for potential follow-up, but merging as it is. |
theSuess
added a commit
to theSuess/go-jsonnet
that referenced
this pull request
Jun 11, 2024
The `valueToString` operation introduced by google#742 is incompatible with the way the implementation from google#739 as it tries to manifest an object from stack while the implementation needed by the debugger returns the value as-is without further evaluation.
vhata
pushed a commit
to discord/go-jsonnet
that referenced
this pull request
Aug 30, 2024
vhata
pushed a commit
to discord/go-jsonnet
that referenced
this pull request
Aug 30, 2024
The `valueToString` operation introduced by google#742 is incompatible with the way the implementation from google#739 as it tries to manifest an object from stack while the implementation needed by the debugger returns the value as-is without further evaluation.
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds an extension point for future debugger implementations.
We first investigated having the entire debugger codebase only use go-jsonnet as a dependency, but many of the fields and types needed to implement this are not exposed to external packages.
To solve this, we added a new
Debuggertype, which allows debugging frontends to control the evaluation of a specific file.The API type is heavily inspired by the Debug Adapter Protocol and can be used to implement basic debugging functionality like:
Example implementations of clients using this interface can be found in the example-clients branch of our fork.
The following recording shows the basic capabilities in action by using the DAP example client with VSCode:
dap.mp4