* Move most of the requests into the client state itself.
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
* WIP
* Fix some errors and create new errors
* More teardown
* Fix detach requests
* Move set variable value to dap command
* Fix dap command error and add evaluate command
* FIx more compiler errors
* Fix more compiler errors
* Clipppyyyy
* FIx more
* One more
* Fix one more
* Use threadId from project instead u64
* Mostly fix stack frame list
* More compile errors
* More
* WIP transfer completions to dap command
Co-Authored-By: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
Co-Authored-By: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
* Finish console completions DapCommand impl
* Get Zed to build !!
* Fix test compile errors: The debugger tests will still fail
* Add threads reqeust to debug session
Co-authored-by: Piotr Osiewicz <piotr@zed.dev>
---------
Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Co-authored-by: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
Co-authored-by: Piotr Osiewicz <piotr@zed.dev>
* WIP
Co-Authored-By: Piotr Osiewicz <piotr@zed.dev>
Co-Authored-By: Anthony Eid <hello@anthonyeid.me>
* Tear stuff out and make the world burn
Co-authored-by: Remco Smits <djsmits12@gmail.com>
Co-authored-by: Piotr <piotr@zed.dev>
* Fix compile errors
* Remove dap_store from module list and fix some warnings
Module list now uses Entity<DebugSession> to get active modules and handle remote/local state
so dap_store is no longer needed
* Add Cacheable Command trait
This gets rid of ClientRequest or whatever the name was; we don't need to enumerate every possible request and repeat ourselves, instead letting you mark any request as cached with no extra boilerplate.
* Add Eq requirement for RequestSlot
* Implement DapCommand for Arc<DapCommand>
That way we can use a single allocated block for each dap command to store it as both the cache key and the command itself.
* Clone Arc on demand
* Add request helper
* Start work on setting up a new dap_command_handler
* Make clippy pass
* Add loaded sources dap command
* Set up module list test to see if Modules request is called
* Fix compile warnings
* Add basic local module_list test
* Add module list event testing to test_module_list
* Bring back as_any_arc
* Only reset module list's list state when modules_len changes
---------
Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
Co-authored-by: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Co-authored-by: Piotr <piotr@zed.dev>
This PR shows console output & removes the query bar for remote clients.
We don't show the query bar because it's currently impossible for remote clients to send evaluations requests from their console. We didn't implement that feature yet because of security consoles and will do so in the future with permissions.
Co-authored-by: Remco Smits \<djsmits12@gmail.com\>
* Add basic collab debug console test
Co-authored-by: Remco Smits <djsmits12@gmail.com>
* Show output events on remote client debug consoles
Co-authored-by: Remco Smits <djsmits12@gmail.com>
* Don't show debug console query bar on remote clients
Co-authored-by: Remco Smits <djsmits12@gmail.com>
---------
Co-authored-by: Remco Smits <djsmits12@gmail.com>
* WIP add toolchain for python
Co-Authored-By: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
* Integrate toolchain store with dap_store & use it for debugpy
* Wip require worktree to start debug session
* Move start debug session to project for determing the worktree
* Make all tests pass again
* Make collab tests pass
* Use notify instead of manual notification
* Use reference instead of clone
* Revert "Use reference instead of clone"
This reverts commit 61469bb1679bc35d5d3bf0b93e5b7cfc94357c80.
* Revert "Use notify instead of manual notification"
This reverts commit a0b9bf52a1d948dfb244c4b7040576a34ec6f465.
* Revert debugger branch merge
* Revert "Revert debugger branch merge"
This reverts commit 56c883d4dba4877826ea2185a8177fddefa0d054.
* Clean up
* Make node runtime required
* Pass worktree id into get_environment
* Fix use the resolved debug adapter config
* Add fallback if toolchain could not be found to common binary names
---------
Co-authored-by: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
* Create collab ignore breakpoint integration test
* Add collab ignore breakpoints message handlers
Still need to enable remote dap_stores the ability to store/manage ignore breakpoint state
* Refactor session to have remote and local modes
This was done to allow remote clients access to some session details they need such as ignore breakpoints.
Co-authored-by: Remco Smits <djsmits12@gmail.com>
* DapStore so both local & remote modes have access to DebugSessions
* Add remote sessions when creating new debug panel items
* Finish implementing collab breakpoints ignore
* Clippy & clean up
* Clean up session information when sessions end on remote clients
* Rename proto message
* Add ignore breakpoints state to collab db
---------
Co-authored-by: Remco Smits <djsmits12@gmail.com>
* Impl VariablesCommand for dap requests
* Have remote variable list generate entries & other fields locally
* Finish first version of collab variable list test (It fails)
* Get variable list collab test to pass
* Update variable test again (it failing)
* Improve tests more WIP
* Remove a test to make merge easier
* Finalize collab test
* Only send variables one time to collab server instead of each rebuild
* Finish variable list fetch!
* WIP Start work to send all dap client requests with request_dap
* Continue work on converting dap client requests
* WIP setup dap command for proto dap requests
* WIP dap command
Co-authored-by: Remco Smits <djsmits12@gmail.com>
* revert "WIP dap command"
This reverts commit fd2a6832b667aa23caf588c3ab55243319bc1654.
Co-authored-by: Remco Smits <djsmits12@gmail.com>
* More WIP with Dap Command trait
Co-authored-by: Remco Smits <djsmits12@gmail.com>
* Get step over command to work with remote dap clients
Co-authored-by: Remco Smits <djsmits12@gmail.com>
* Fix thread status not being set to stop on remote debug panel items
* Create a inner wrapper type to use for dap remote step requests
* Implement step in,back,out for remote debugger sessions
* Add Continue Command
* Add more dap command impls
TerminateThreads, Pause, and Disconnect. As well as a shutdown session request downstream clients can send to host
* Add Disconnect & Terminate dap command impls
* Add basic dap proxy test over collab
* Fix clippy error
* Start work on syncing breakpoint thread status
Co-authored-by: Remco Smits <djsmits12@gmail.com>
Co-authored-by: Carter Canedy <cartercanedy42@gmail.com>
* WIP Fix thread status not syncing
* Add thread state model's to remote debug panels when setting panel items
* Sync thread state on step out command
---------
Co-authored-by: Remco Smits <djsmits12@gmail.com>
Co-authored-by: Carter Canedy <cartercanedy42@gmail.com>
After fn on_response() was created we added a test feature that allowed us to
return error responses. We serialized responses wrapped around
a Result type, causing serde_json::from_value(R::Response) to fail when
attempting to get a response and returning a default response instead.
* WIP introduce debug session model
* Wip more refactor towards session model
* Fix some compile errors
* Move sub menu item into own struct
* Don't show client id inside selected value
* Remove unused session_id from shutdown event
* Remove clients from dap store use from sessions instead
* Fix clippy
* Add client id to received event log
* Move reconnect client work again
* Move sessions to local dap store
* Move ingore breakpoints to session model
* Move next session/client id to local store
* Remove duplicated test support only method
* Show client id first in dap log menu entry
* Show sub menu better
* Sort clients by their id
* Sort sessions by their id
* Fix configuration done race condition with sending breakpoints
@Anthony-Eid I think this fixed the race condition you noticed with the configuration done request.
So the issue is when the task is created it directly start the execution of the task itself.
So the `configuration_done` request is most of the times finished before the breakpoints are send
if you don't have a lot of breakpoints.
So instead of creating both tasks before the task is created we now create the 2 tasks right after eachother,
so we can be sure that the `configuration_done` request is send after the breakpoints are send.
```
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received event `Initialized`
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 3
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 4
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `configurationDone` request with sequence_id: 8
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 9
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 7
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 5
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 3
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 4
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 6
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `configurationDone` sequence_id: 8
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 9
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 7
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 5
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 6
```
```
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received event `Initialized`
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 4
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 5
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 6
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 7
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 8
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 3
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 4
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 5
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 6
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 7
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 8
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 3
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `configurationDone` request with sequence_id: 9
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `configurationDone` sequence_id: 9
```
* Move capabilities back to dapstore itself
* Fix failing remote debug panel test
* Remove capabilities on remote when client shutdown
* Move client_by_session to local store and impl multi client shutdown
* Remove unused code
* Fix clippyyy
* Rename merge capabilities method
As we don't only merge we also insert if there is no capabilities for the client yet.
* Use resolved label for debug session name
* Notify errors when start client to user
* Notify reconnect error to user
* Always shutdown all clients
We should always shutdown all clients from a single debug session when one is shutdown/terminated.
* Start work on getting dap clients to sync capabilities
* Add notify when syncing capabilities
* Remove client capabilities in handle shutdown debug client
* Initial WIP for impl FollowableItem for DebugPanelItem
* Implment DebuggerThreadState proto functions
* Add Debug panel item variable list definition to zed.proto
* Add more debug panel item messages to zed.proto
* WIP
* Fix compile errors
Co-authored-by: Remco Smits <djsmits12@gmail.com>
* More WIP
Co-authored-by: Remco Smits <djsmits12@gmail.com>
* Further WIP lol
* Start working on fake adapter WIP
Co-authored-by: Remco Smits <djsmits12@gmail.com>
Co-authored-by: Mikayla Maki <mikayla@zed.dev>
* Merge with Remco's mock debug adapter client branch
* Fix false positive clippy error
This error was a match variant not being covered when the variant wasn't possible dued
to a feature flag. I'm pretty sure this is a bug in clippy/rust-analyzer and will
open an issue on their repos
* Add todo to change in dap adapter downloads
* WIP Get variable to send during variable list
* Get variable list from/to_proto working
Note: For some reason variable entries aren't rendering even though
everything is being sent
* Fix warning messages
* Fix typo
* Impl stack from list from/to_proto for debug panel item
* Change order of set_from_proto for debug panel item
* Impl Variable list variables to/from proto funcs
* Start work on Set Debugger Panel Item event
* WIP with remco
Co-authored-by: Remco Smits <djsmits12@gmail.com>
* Get SetDebugPanelItem proto message sending and handled
Co-authored-by: Remco Smits <djsmits12@gmail.com>
* Setup UpdateDebugAdapter collab message & send live stack frame list updates
* Use proto enums instead of hardcoded integers
* Use read instead of update
* Send variable list update message each time we build the entries
* Send stack frame message when we selected the active stackframe
* Add more mappings
* Remove debug and rename method to be more inline with others
* Use the correct entries to reset
* Add tests to validate we can go and from proto ScopeVariableIndex
* Rename test
* Create UpdateAdapter ModuleList variant WIP
* Change proto conversion trait to have some types return Result enums
* Get clippy to pass
I removed some proto message we used in DebugPanelItem FollowableItem implmentation
because they were causing clippy errors and will need to be change in the near
future anyway
---------
Co-authored-by: Remco Smits <djsmits12@gmail.com>
Co-authored-by: Mikayla Maki <mikayla@zed.dev>
* Add debug panel flow tests
* Wip debug
* Wip fix test
Co-Authored-By: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
* WIP Get test_show_debug_panel to run
while the test now runs without panicing dued to parked with nothing left to run
the debug panel item is not being spawned
* Get test_show_debug_panel to pass & clean up
* Make clippy pass
* Assert debug panel item is removed when client shutdown
* Move send event back to dapstore
---------
Co-authored-by: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
The past version always returned an error when attempting to deserialize custom DAP
events. Causing Zed to stop recving messages from the debug adapter
Before this change, we always started a new adapter but this was causing some issues:
- Infinite client starts
- Cannot start client port already in use
- Not able to start a debug session
Co-Authored-By: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
The GDB adapter was failing because an stderr stream failed to
connect to Zed from the adapter. We now log the error and continue
the debugging sequence if std input and output streams connect.