Adds the non-entry specific right click menu to the panel, and the
features contained therin:
* Stage all
* Discard Tracked Changes
* Trash Untracked Files
Also changes the naming from "Changes"/"New" to better match Git's
terminology (though not convinced on this, it was awkward to describe
"Discard Changes" without a way to distinguish between the changes and
the files containing them).
Release Notes:
- N/A
* 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>
- [x] Staging hunks
- [x] Unstaging hunks
- [x] Write a randomized test
- [x] Get test passing
- [x] Fix existing bug in diff_base_byte_range computation
- [x] Remote project support
- [ ] ~~Improve performance of
buffer_range_to_unchanged_diff_base_range~~
- [ ] ~~Bug: project diff editor scrolls to top when staging/unstaging
hunk~~ existing issue
- [ ] ~~UI~~ deferred
- [x] Tricky cases
- [x] Correctly handle acting on multiple hunks for a single file
- [x] Remove path from index when unstaging the last staged hunk, if
it's absent from HEAD, or staging the only hunk, if it's deleted in the
working copy
Release Notes:
- Add `ToggleStagedSelectedDiffHunks` action for staging and unstaging
individual diff hunks
* WIP setup active debug sessions request
* Set up active debug sessions request that's send when joining a project
* Fix test debug panel console
* Remove debugger tables from collab db
* Wip request active debug sessions
* 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 is a refactoring PR that does three things:
- First, it introduces a new `diff` crate that holds the previous
contents of the `git::diff` module, plus the `BufferChangeSet` type
formerly of `project::buffer_store`. The new crate is necessary since
simply moving `BufferChangeSet` into `git::diff` results in a dependency
cycle due to the use of `language::Buffer` to represent the diff base in
`BufferChangeSet`.
- Second, it renames the two main types in the new diff crate:
`BufferDiff` becomes `BufferDiffSnapshot`, and `BufferChangeSet` becomes
`BufferDiff`. This reflects that the relationship between these two
types (immutable cheaply-cloneable "value" type + stateful "resource
type" with subscriptions) mirrors existing pairs like
`Buffer`/`BufferSnapshot`. References to "change sets" throughout the
codebase are updated to refer to "diffs" instead.
- Finally, it moves the base_text field of the new BufferDiff type to
BufferDiffSnapshot.
Release Notes:
- N/A
---------
Co-authored-by: maxbrunsfeld <max@zed.dev>
This PR builds on #21258 to make it possible to use HEAD as a diff base.
The buffer store is extended to support holding multiple change sets,
and collab gains support for synchronizing the committed text of files
when any collaborator requires it.
Not implemented in this PR:
- Exposing the diff from HEAD to the user
- Decorating the diff from HEAD with information about which hunks are
staged
`test_random_multibuffer` now fails first at `SEED=13277`, similar to
the previous high-water mark, but with various bugs in the multibuffer
logic now shaken out.
Release Notes:
- N/A
---------
Co-authored-by: Max <max@zed.dev>
Co-authored-by: Ben <ben@zed.dev>
Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Co-authored-by: Conrad <conrad@zed.dev>
https://github.com/user-attachments/assets/200b88b8-249a-4841-97cd-fda8365efd00
Now all users in the collab/ssh session can edit the commit input
collaboratively, observing each others' changes live.
A real `.git/COMMIT_EDITMSG` file is opened, which automatically enables
its syntax highlight, but its original context is never used or saved on
disk — this way we avoid stale commit messages from previous commits
that git places there.
A caveat: previous version put some effort into preserving unfinished
commit messages on repo swtiches, but this version would not do that
— instead, it will be blank on startup, and use whatever
`.git/COMMIT_EDITMSG` contents on repo switch
Release Notes:
- N/A
---------
Co-authored-by: Cole Miller <cole@zed.dev>
Closes#15966
This PR adds `Alt/Opt+Click` to expand or collapse a directory and all
its contents.
Context:
The current `expand_entry` scans immediate child subdirectories if they
aren’t loaded, while `expand_all_for_entry` scans the entire subtree.
The latter takes longer, so we wait for it to complete to ensure
accurate results.
For full directory scan, instead of using
`refresh_entries_for_paths(vec![path])`, which requires specifying all
explicit paths to refresh, we use `add_path_prefix_to_scan`, which
eliminates the need to list every path. Both methods internally call
`reload_entries_for_paths`, which invokes `should_scan_directory`. This
determines whether to scan deeper based on a path prefix match between
the given directory and its subdirectories, returning `true` for
`add_path_prefix_to_scan`.
The existing code handles scanning, removing path prefixes after scans
complete, and managing ignored directories.
How it works (Expand):
1. Alt clicking on non-ignored closed directory, expands it and all its
subdirectories, except ignored subdirectories. This helps while working
on mono repos, where you might not want to expand dirs like
`node_modules`, `dist`, etc or git submodules, when you expand any root
dir.
In example, `draft` and `posts` dir are ignored dir.
[expand-1.webm](https://github.com/user-attachments/assets/07d3f724-0757-408f-b349-5beb4ee8440e)
2. Alt clicking on ignored closed directory, expands it and all its
subdirectories. This is when you explicitly want to do it, on dirs like
`node_modules`, `dist`, etc.
In example, `dist` dir is ignored dir.
[expand-2.webm](https://github.com/user-attachments/assets/99e55883-ab1a-4a9c-a0f0-48026991a922)
3. In case of auto folded subdirectories, expand all action will take
precedence over it. That is, it will unfold all the subdirectories
inside clicked dir. This is intentional, as user explicitly wants to
reveal as much content as possible. (This is my personal opinion on how
it should work).
[expand-3.webm](https://github.com/user-attachments/assets/f20b0311-e92a-4e34-b640-1469b0d6fa16)
How it works (Collapse):
1. Alt clicking any opened directory will collapse it and all its
children, whether ignored or not. This is when you want to start from a
fresh state.
2. When auto fold is enabled in settings, collapse action will also fold
all subdirectories that it can fold. This is to bring it back to its
fresh state as mentioned above.
[collapse-1-2.webm](https://github.com/user-attachments/assets/74db6cee-0afa-406b-a9a2-7421083a2c2a)
Future:
- Using keybinding to expand/collapse all for selected entry
- Handle expand/collapse all for folded entry
Todos:
- [x] Expand entries logic
- [x] Handle remote worktree for expand
- [x] Figure out scan complete status
- [x] Move expansion logic to status update event
- [x] Collapse entries logic
- [x] Handle fold/unfold subdirs interaction
- [x] Do not expand git ignored sub-dirs
- [x] Tests
- [x] Test Remote
Release Notes:
- Added Alt/Opt+Click functionality to expand or collapse a directory
and all its contents.
* 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>
* 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>
Still TODO:
* [x] Factor out `start_language_server` so we can call it on register
(instead of on detect language)
* [x] Only call register in singleton editors (or when
editing/go-to-definition etc. in a multibuffer?)
* [x] Refcount on register so we can unregister when no buffer remain
* [ ] (maybe) Stop language servers that are no longer needed after some
time
Release Notes:
- Fixed language servers starting when doing project search
- Fixed high CPU usage when ignoring warnings in the diagnostics view
---------
Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
Co-authored-by: Cole <cole@zed.dev>
This is a pure refactor of our Git diff state management. Buffers are no
longer are associated with one single diff (the unstaged changes).
Instead, there is an explicit project API for retrieving a buffer's
unstaged changes, and the `Editor` view layer is responsible for
choosing what diff to associate with a buffer.
The reason for this change is that we'll soon want to add multiple "git
diff views" to Zed, one of which will show the *uncommitted* changes for
a buffer. But that view will need to co-exist with other views of the
same buffer, which may want to show the unstaged changes.
### Todo
* [x] Get git gutter and git hunks working with new structure
* [x] Update editor tests to use new APIs
* [x] Update buffer tests
* [x] Restructure remoting/collab protocol
* [x] Update assertions about staged text in
`random_project_collaboration_tests`
* [x] Move buffer tests for git diff management to a new spot, using the
new APIs
Release Notes:
- N/A
---------
Co-authored-by: Richard <richard@zed.dev>
Co-authored-by: Cole <cole@zed.dev>
Co-authored-by: Conrad <conrad@zed.dev>
* Sync breakpoints on toggle to other client
* WIP Seperate local/remote in dap store
* WIP initial breakpoints sync
Co-Authored-By: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
* Get zed to compile
* Don't remove dap data when you unshare
* Add breakpoints table migration
* Update collab db when changing breakpoints
* Store breakpoints inside collab db when you change them
* Clean up
* Fix incorrect clearing of breakpoints during collab sync
* Get breakpoints to sync correctly on project join
We now send SynchronizedBreakpoints within the JoinProjectResponse
and use those breakpoints to initialize a remote DapStore.
* Set breakpoints from proto method
---------
Co-authored-by: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
TODO:
- [x] Double check strange PHP env detection
- [x] Clippy & etc.
Release Notes:
- Added support for extension languages on the remote server
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
TODO:
- [x] check that the app version is well formatted for zed.dev
Release Notes:
- N/A
---------
Co-authored-by: Trace <violet.white.batt@gmail.com>
Turns out that we used client-side `fs` to check whether something is a
directory or not, which obviously doesn't work with SSH projects.
Release Notes:
- N/A
---------
Co-authored-by: Bennet <bennet@zed.dev>
This PR adds support for selecting toolchains for a given language (e.g.
Rust toolchains or Python virtual environments) with support for SSH
projects provided out of the box. For Python we piggy-back off of
[PET](https://github.com/microsoft/python-environment-tools), a library
maintained by Microsoft.
Closes#16421Closes#7646
Release Notes:
- Added toolchain selector to the status bar (with initial support for
Python virtual environments)