Commit Graph

116 Commits

Author SHA1 Message Date
Piotr Osiewicz
45db28a5ce Project compiles, yay 2025-02-17 12:50:55 +01:00
Remco Smits
dfe978b06a Add toolchain support for python debug adapter (#90)
* 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>
2025-01-29 20:55:57 +01:00
Anthony Eid
78865820d8 Transition to gpui3 (#103)
Update debugger's branch gpui version to 3

Co-authored-by: Remco Smits djsmits12@gmail.com
2025-01-29 03:46:37 -05:00
Remco Smits
272721ae30 Merge branch 'main' into debugger 2025-01-19 13:59:07 +01:00
Piotr Osiewicz
c9534e8025 chore: Use workspace fields for edition and publish (#23291)
This prepares us for an upcoming bump to Rust 2024 edition.

Release Notes:

- N/A
2025-01-17 17:39:22 +01:00
Conrad Irwin
f50a118e78 Refactor shell wrapping (#23108)
I want to use this to implement ! in vim, so move it from terminal_view
to task, and split windows/non-windows more cleanly.

Release Notes:

- N/A
2025-01-15 08:45:48 -07:00
Remco Smits
501073393c Merge branch 'main' into debugger 2025-01-07 19:35:45 +01:00
Mikayla Maki
9613084f59 Move git status out of Entry (#22224)
- [x] Rewrite worktree git handling
- [x] Fix tests
- [x] Fix `test_propagate_statuses_for_repos_under_project`
- [x] Replace `WorkDirectoryEntry` with `WorkDirectory` in
`RepositoryEntry`
- [x] Add a worktree event for capturing git status changes
- [x] Confirm that the local repositories are correctly updating the new
WorkDirectory field
- [x] Implement the git statuses query as a join when pulling entries
out of worktree
- [x] Use this new join to implement the project panel and outline
panel.
- [x] Synchronize git statuses over the wire for collab and remote dev
(use the existing `worktree_repository_statuses` table, adjust as
needed)
- [x] Only send changed statuses to collab

Release Notes:

- N/A

---------

Co-authored-by: Cole Miller <cole@zed.dev>
Co-authored-by: Mikayla <mikayla@zed.com>
Co-authored-by: Nathan <nathan@zed.dev>
2025-01-04 01:00:16 +00:00
Remco Smits
78d342d582 Fix CWD is not correctly respected when appending child paths
Right now when you add `"cwd": "$ZED_WORKTREE_ROOT/some/path"` to your config,
it won't work as expected. Because we only added the `cwd` to the task template when the cwd was a valid path.
But when you add `"cwd": "$ZED_WORKTREE_ROOT` to your config, it will never be a valid path, so the `cwd` will never be added to the task template and fallback to the `$ZED_WORKTREE_ROOT` already.

So by just always adding it to the task template, we will try to resolve it and otherwise fallback to the `$ZED_WORKTREE_ROOT`.
2025-01-03 22:10:01 +01:00
Anthony Eid
e551923477 Merge branch 'main' into debugger
I made the debugger's panel activation priority 9
2025-01-02 18:54:47 -05:00
Michael Sloan
2d431e9b51 Improve truncate efficiency and fix OBOE in truncate_and_remove_front (#22591)
* Skip walking string for truncate when byte len is <= char limit

* Fix `truncate_and_remove_front` returning string that is `max_chars +
1` in length. Now more consistent with `truncate_and_trailoff` behavior.

* Fix `truncate_and_remove_front` adding ellipsis when max_chars == char
length

Release Notes:

- N/A
2025-01-02 22:35:36 +00:00
Remco Smits
b911fb1c9a Fix failing debug task test 2024-12-26 17:08:30 +01:00
Remco Smits
ccacce9ccb introduce debug session model (#80)
* 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.
2024-12-26 16:09:54 +01:00
Remco Smits
1929dec4a0 Use task label for debug panel item tab content 2024-12-22 22:28:22 +01:00
Remco Smits
0b97ffad13 Merge branch 'main' into debugger 2024-12-18 14:08:48 +01:00
Kirill Bulatov
bc113e4b51 Move task centering code closer to user input (#22082)
Follow-up of https://github.com/zed-industries/zed/pull/22004 

* Reuse center terminals for tasks, when requested
* Extend task templates with `RevealTarget`, moving it from
`TaskSpawnTarget` into the core library
* Use `reveal_target` instead of `target` to avoid misinterpretations in
the task template context
* Do not expose `SpawnInTerminal` to user interface, avoid it
implementing `Serialize` and `Deserialize`
* Remove `NewCenterTask` action, extending `task::Spawn` interface
instead
* Do not require any extra unrelated parameters during task resolution,
instead, use task overrides on the resolved tasks on the modal side
* Add keybindings for opening the task modal in the
`RevealTarget::Center` mode

Release Notes:

- N/A
2024-12-16 16:15:58 +02:00
Mikayla Maki
4f96706161 Add the ability for tasks to target the center pane (#22004)
Closes #20060
Closes #20720
Closes #19873
Closes #9445

Release Notes:

- Fixed a bug where tasks would be spawned with their working directory
set to a file in some cases
- Added the ability to spawn tasks in the center pane, when spawning
from a keybinding:

```json5
[
  {
    // Assuming you have a task labeled "echo hello"
    "ctrl--": [
      "task::Spawn",
      { "task_name": "echo hello", "target": "center" }
    ]
  }
]
```
2024-12-13 19:39:46 -08:00
Silvano Cerza
06edcd18be Fix running Python commands that include paths with spaces (#21981)
This PR fixes running Python commands that include paths with spaces by
wrapping python commands and their arguments in quotation marks.

I fixed this only in Python as I noticed this while trying to run
`pytest` in Zed.

Probably this is not the best approach as it doesn't fix other languages
too, though I don't know enough about the codebase to fix it like that.
I'm not even sure if it's actually feasible right now.

I didn't add tests for this either as I couldn't really understand how
to easily to that, I tried to look at other languages but couldn't find
one that tests their `ContextProvider` directly.

Release Notes:

- Fix running Python commands that include paths with spaces

---------

Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
2024-12-13 22:31:08 +01:00
Remco Smits
1a0ecf0c16 Add FakeAdapter and FakeTransport for testing purposes (#73)
* Move process to transport struct itself

* Add test to make sure we can send request and receive a response

* Align other handle methods

* Fix issues inside cargo.toml require test features inside the correct *-dependencies

* Remove comments that are not needed

* Add as_fake instead of downcasting

* Clean up

* Override get_binary method so we don't fail on install

* 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

* Remove not needed clone

* Panic when we receive an event/reverse request inside the test

* reuse the type of the closure

* Add a way to fake receiving events

* Oops remove fake event from different test

* Clipppyyyy

---------

Co-authored-by: Anthony Eid <hello@anthonyeid.me>
2024-12-09 20:16:06 +01:00
Anthony Eid
b8b65f7a8f Disable gdb dap on non x86 platforms
Gdb doesn't run on Arm platforms so I'm disabling it to avoid users
running into bugs. It will still work on intel macs and x86 devices
2024-11-28 15:32:07 -05:00
jansol
4068960686 Add gdb debug adapter implementation (#70)
* dap_adapters: add gdb

* debug: Add debug zed with gdb task
2024-11-28 21:14:27 +01:00
Remco Smits
046ff02062 Merge branch 'main' into debugger 2024-11-25 18:36:27 +01:00
Hugo Cardante
659b1c9dcf Add the option to hide both the task and command lines in the task output (#20920)
The goal is to be able to hide these lines from a task output:

```sh
⏵ Task `...` finished successfully
⏵ Command: ...
```

---------

Co-authored-by: Peter Tripp <peter@zed.dev>
2024-11-22 13:45:42 -05:00
Anthony Eid
9e37b4708f Go Adapter Implementation (#64)
* Go DAP WIP

* Start work on getting go adapter working

* Get beta version of go adapter working & fix breakpoint line msgs

This adapter only works if a user has Go & delve in their PATH. It doesn't automatically download & updates itself because the official download process from the Delve docs would add delve to a user's PATH. I want to discuss with the Zed dev team & Remco if that is behavior we're ok with because typical downloads don't affect a user's PATH.

This PR also fixes a bug where some breakpoint line numbers were incorrect when sending to active DAP servers.
2024-11-08 02:15:07 -05:00
Anthony Eid
bae6edba88 Fix failing unit test 2024-11-06 23:55:14 -05:00
Anthony Eid
9772573816 Fix adapter completion not showing in debug.json
schemars seems to have a bug when generating schema for a struct with more than
one flatten field. Only the first flatten field works correctly and the second
one doesn't show up in the schema.
2024-11-06 19:06:29 -05:00
Anthony Eid
56f77c3192 Disable the ability to create debug tasks from tasks.json (#61)
This was done to simplify the process of setting up a debug task and improve task organization.
This commit also improves parsing of debug.json so it's able to ignore misconfiguration debug tasks
instead of failing and returning no configured tasks
2024-11-06 16:55:51 -05:00
Remco Smits
1b2871aac2 Fix failing test 2024-11-02 22:44:03 +01:00
Remco Smits
65cd774baa Implement Attach debugger + picker (#58)
* Rename StopDebugAdapters to ShutdownDebugAdapters

* Remove debug config from install methods

* Move requests methods to background executor

* Wip attach with picker

* Move find client to the first line of the method

The client should always be there at this point.

* Fix correctly determine when to restart

While debugging an reverse request issue, the top level client did send terminated event with `restart: false` but we tried to restart the client resulting in the client never being cleaned up by us.

Because before this change we always assumed if we got a json value we are going to restart the client, which is wrong.

We no try to restart the client if:
- restart arg is a boolean and its true
- restart arg is a json value but no boolean

* Clean up response to adapter

* Fix clippy errors

* WIP tasks

* Simplified debug task schema

This changes debug.json to look for adapter: adapter_name instead of
and object when a user selects a debug adatper and fixes the default
behavior of request (to launch)

Co-authored-by: Remco Smits <djsmits12@gmail.com>

* Make default and flatten work for request

* Rename enum case

* Remove dbg

* Dismiss when candidate is not found

* Add docs for why we update the process id on the config

* Show error when `attach` request is selected but not supported

---------

Co-authored-by: Anthony Eid <hello@anthonyeid.me>
2024-11-02 22:23:15 +01:00
Anthony Eid
bb89c1d913 Check if debug task cwd field is a valid path
If the path isn't valid the default cwd value is used (users worktree directory)
2024-11-01 23:29:49 +01:00
Remco Smits
d1ddbfc586 Merge branch 'main' into debugger 2024-11-01 23:27:59 +01:00
Remco Smits
d226de3230 Add current working directory to adapter (#59)
* Add current working directory to adapter

* Prio use resolve cwd
2024-11-01 22:47:43 +01:00
Thorsten Ball
293e080f03 tasks: Add editor: Spawn Nearest Task action (#19901)
This spawns the runnable task that that's closest to the cursor.

One thing missing right now is that it doesn't find tasks that are
attached to non-outline symbols, such as subtests in Go.

Release Notes:

- Added a new reveal option for tasks: `"no_focus"`. If used, the tasks
terminal panel will be opened and shown, but not focused.
- Added a new `editor: spawn nearest task` action that spawns the task
with a run indicator icon nearest to the cursor. It can be configured to
also use a `reveal` strategy. Example:
```json
{
  "context": "EmptyPane || SharedScreen || vim_mode == normal",
  "bindings": {
    ", r t": ["editor::SpawnNearestTask", { "reveal": "no_focus" }],
  }
}
```


Demo:



https://github.com/user-attachments/assets/0d1818f0-7ae4-4200-8c3e-0ed47550c298

---------

Co-authored-by: Bennet <bennet@zed.dev>
2024-10-31 14:25:57 +01:00
Anthony Eid
0c647ae071 Switch debugpy to use TCP instead of STDIO
Co-authored-by: Remco Smits <djsmits12@gmail.com>
2024-10-27 07:41:52 -04:00
Anthony Eid
f6556c5bb6 Show users error notices when dap fails to start
Co-authored-by: Remco Smits <djsmits12@gmail.com>
2024-10-27 07:29:21 -04:00
Remco Smits
f7eb5213a5 Allow users to configure host, port and timeout for build in TCP adapters (#56)
* Remove space in cargo.toml

* Add TCPHost for Javascript and PHP adapter

* Allow falling back to first open port

* Add some more docs to TCPHost

* Fix cached binaries prevent from having multiple debug sessions for one adapters

This was an issue, because we stored the port arg inside the DebugAdapterBinary which was cached so could not change anymore.

Co-authored-by: Anthony Eid <hello@anthonyeid.me>

* Add default setting for tcp timeout

Co-Authored-By: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>

---------

Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Co-authored-by: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
2024-10-27 12:16:09 +01:00
Anthony Eid
115f2eb2e2 Merge branch 'main' into debugger 2024-10-24 13:23:55 -04:00
Mikayla Maki
d0bc84eb33 Fix remoting things (#19587)
- Fixes modal closing when using the remote modal folder 
- Fixes a bug with local terminals where they could open in / instead of
~
- Fixes a bug where SSH connections would continue running after their
window is closed
- Hides SSH Terminal process details from Zed UI
- Implement `cmd-o` for remote projects
- Implement LanguageServerPromptRequest for remote LSPs

Release Notes:

- N/A
2024-10-23 00:14:43 -07:00
Remco Smits
fc78c40385 Move how we connect to an debug adpater to the transport layer (#52)
* Move how we connect to an debug adpater to the transport layer

This PR cleans up how we connect to a debug adapter.
Previously, this was done inside the debug adapter implementation.

While reviewing the debugger RPC log view PR,
I noticed that we could simplify the transport/client code,
making it easier to attach handlers for logging RPC messages.

* Remove not needed async block

* Change hardcoded delay before connecting to tcp adapter to timeout approach

Co-Authored-By: Anthony Eid <hello@anthonyeid.me>

---------

Co-authored-by: Anthony Eid <hello@anthonyeid.me>
2024-10-20 19:29:34 +02:00
Remco Smits
afe228fd77 Fix debug kind in debug panel item tab content 2024-10-17 20:14:12 +02:00
Remco Smits
1c1e34b3d2 Debug terminal (#50)
* Make program optional in debug task format

* Remove default config for skipFile JavaScript debugger

* Add Debug case to TerminalKind

* Don't allow serializing debug terminals

* Add respond method so we can send response back for reverse requests

* Implement run in terminal reverse request

* Move client calls to dap store

This commit also fixes an issue with not sending a response for the `StartDebugging` reverse request.

* Make clippy happy
2024-10-17 13:46:11 +02:00
Remco Smits
f5dc1175b8 Merge branch 'main' into debugger 2024-10-14 16:56:12 +02:00
Remco Smits
b46b8aa76a Fix clippy 2024-10-14 15:38:26 +02:00
Remco Smits
b1d24a0524 Flatten custom adapter connection config 2024-10-11 17:56:18 +02:00
Remco Smits
177ae28ab2 Add support for custom adapters
Also simplify the DebugAdapterBInary struct
2024-10-10 21:07:17 +02:00
Kirill Bulatov
49c75eb062 Rework remote task synchronization (#18746)
Reworks the way tasks are stored, accessed and synchronized in the
`project`.
Now both collab and ssh remote projects use the same TaskStorage kind to
get the task context from the remote host, and worktree task templates
are synchronized along with other worktree settings.

Release Notes:

- Adds ssh support to tasks, improves collab-remote projects' tasks sync
2024-10-09 22:28:42 +03:00
Remco Smits
7e2c1386fc Cleanup adapters code and add javascript adapter (#48)
* Clean up how adapters install and fetch their binary

Before this was in one method, which was hard to read and doing to many things.

* Add javascript debug adapter

* Get node binary from node_runtime

* Undo remove request args for lldb

* Remove initialize value for now

* Remove default values

* Fix did not compile javascript

* Fix php did not build
2024-10-09 15:47:07 +02:00
Remco Smits
171c74223c Make start debugging request work again
This also fixes an issue that you could not add your own initialize_args for non custom adapters
2024-10-09 11:30:59 +02:00
Remco Smits
ac0ba07c61 Merge main 2024-10-07 20:11:42 +02:00
Piotr Osiewicz
03c84466c2 chore: Fix some violations of 'needless_pass_by_ref_mut' lint (#18795)
While this lint is allow-by-default, it seems pretty useful to get rid
of mutable borrows when they're not needed.

Closes #ISSUE

Release Notes:

- N/A
2024-10-07 01:29:58 +02:00