Commit Graph
37291 Commits
Author SHA1 Message Date
Max Brunsfeld 4e741bb4df Don't show parallel agent announcement if AI is disabled (#54571)
Fixes https://github.com/zed-industries/zed/issues/54568

Release Notes:

- N/A
2026-04-23 15:57:22 +00:00
Eric Holk 86d625784b Request summarized thinking for Claude Opus 4.7 (#54217)
Starting with Claude Opus 4.7, Anthropic omits thinking content from
responses by default; callers must pass `display: "summarized"` to keep
seeing thinking summaries. Without opting in, the agent UI shows a long
pause with no visible thinking, and users get no progress indication
during extended reasoning.

This extends the adaptive-thinking wire type with an optional `display`
field and requests `Summarized` from every call site that builds an
adaptive thinking request (direct Anthropic, Copilot Chat proxy, Zed
Cloud, and Bedrock).

## Notes

- Applied at the adaptive-thinking layer rather than special-casing Opus
4.7. The `display` parameter is accepted by every
adaptive-thinking-capable model, and the previous behavior (visible
summaries) is what users already see on Opus 4.6 / Sonnet 4.6, so there
is no behavior change for those models.

Release Notes:

- Restored thinking summaries for Claude Opus 4.7.
2026-04-23 15:43:02 +00:00
Danilo Leal 646ab339a3 Don't show branch and worktree title bar buttons if Git is disabled (#54667)
Closes https://github.com/zed-industries/zed/issues/54628

Release Notes:

- Fixed a bug where the worktree and branch buttons in the title bar
were still being displayed despite `disable_git` being turned on.
2026-04-23 15:33:34 +00:00
María Craig 1371f7ed5a Clarify import thread support (#54675)
Adds a note to the Parallel Agents docs clarifying that thread import is
subject to agent support, and that some agents like Cursor and Gemini
CLI are not currently supported.

Release Notes:

- N/A
2026-04-23 15:25:45 +00:00
Lukas Wirth d93337bc4d agent_ui: Enable split diff view in agent diff (#54638)
Release Notes:

- Enable split diff view in agent diff
2026-04-23 15:23:54 +00:00
Danilo Leal 2bec223c4a git_panel: Add some UI improvements (#54630)
Nothing major, just some small quality of life improvements here:

- Makes the header's checkmark always visible and the entire row surface
area a clickable target
- Only displays the project picker when there is more than one repo;
this avoids having to show a disabled button

Release Notes:

- N/A
2026-04-23 15:12:45 +00:00
Danilo Leal 32772b985d recent_projects: Add some UI improvements (#54629)
- Adds a "Current Folders" header for the multi-root group
- Improves the project/branch truncation and active checkmark
positioning for project list item
- Add folder-type icons for the list items within the "This Window"
group
- Refine lanaguage in buttons and tooltips so they're more consistent

<img width="400" alt="Screenshot 2026-04-23 at 6  23@2x"
src="https://github.com/user-attachments/assets/02131a6c-0956-46bb-8def-af57df5b0b9e"
/>

Release Notes:

- N/A
2026-04-23 15:12:32 +00:00
Kirill Bulatov 11ee186cb9 Handle lens navigation targets similar to code actions (#54664)
Follow-up to https://github.com/zed-industries/zed/pull/54100

Release Notes:

- N/A
2026-04-23 15:05:29 +00:00
Dino 18e7010051 Add Project Panel Documentation (#54054)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A
2026-04-23 14:39:09 +00:00
Gaauwe RomboutsandBen Kunkle 38a04b7011 edit_prediction: Skip type definition lookup for intrinsic TSX/JSX tags (#54666)
Skip intrinsic TSX/JSX tag names when gathering identifiers for edit
prediction context.

I bisected a TypeScript regression to
https://github.com/zed-industries/zed/pull/49748. That change caused
edit prediction context to query `definition` / `typeDefinition` for
lowercase JSX tags like `p`, which could trigger incorrect unversioned
TypeScript diagnostics, such as `Cannot find name 'p'`.

This change filters those intrinsic tag names out while still keeping
user-defined component tags like `Component`.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #51316

Release Notes:

- Fixed a TypeScript issue that could show incorrect diagnostics caused
by edit prediction context lookups.

Co-authored-by: Ben Kunkle <ben@zed.dev>
2026-04-23 14:38:00 +00:00
Oliver Azevedo BarnesandBen Kunkle 5811c20dd2 edit_prediction: Expose allow_data_collection in settings (#51389)
Closes #48394

Moves the data collection preference for Zed's Edit Predictions out of
the internal KV store and into `settings.json` as a proper
`allow_data_collection` setting under `edit_predictions`.

**Migration:** Existing users' choices are preserved. When
`allow_data_collection` is absent from `settings.json`, the resolved
value falls back to the legacy KV entry
(`zed_predict_data_collection_choice`). Once the user toggles the
setting or sets it explicitly, the new setting takes precedence and the
KV entry is ignored.

**Bug fixed:** The original implementation of `toggle_data_collection`
read the raw (unresolved) settings content to determine the current
state. When `allow_data_collection` was absent from `settings.json` but
the KV store held `"true"`, the raw read returned `None → false`,
causing the first toggle click to write `Some(true)` (re-enabling)
instead of `Some(false)` (disabling). The fix reads the resolved
`is_data_collection_enabled()` value before entering the
`update_settings_file` closure.

## Manual testing

**Setting takes effect:**
1. Open settings (`cmd+,`) and add `"allow_data_collection": true` under
`edit_predictions`. Save.
2. Open a file — the data collection indicator in the editor should
reflect the enabled state.
3. Flip to `false` and confirm it updates.

**Toggle correctly disables from KV-enabled state (migration bug fix):**
1. Remove `allow_data_collection` from `settings.json`.
2. Write the legacy KV entry directly:
   ```
   sqlite3 ~/Library/Application\ Support/Zed/db/0-dev/db.sqlite \
"INSERT OR REPLACE INTO kv_store(key,value)
VALUES('zed_predict_data_collection_choice','true');"
   ```
3. Restart Zed. The data collection toggle should show as **enabled**
(reading from KV store).
4. Click the toggle once to disable. `allow_data_collection` should
appear as `false` in `settings.json` — not `true`, which was the pre-fix
behaviour.

**Upsell modal still appears for new users:**
1. Clear both KV keys and restart:
   ```
   sqlite3 ~/Library/Application\ Support/Zed/db/0-dev/db.sqlite \
"DELETE FROM kv_store WHERE key IN
('zed_predict_data_collection_choice','dismissed-edit-predict-upsell');"
   ```
2. Open any file so the status bar is visible.
3. Click the edit prediction button (bottom-right status bar) — it
should have a muted dot indicator.
4. The upsell modal should appear. Dismissing it should prevent it from
reappearing.

## Release Notes:

- `allow_data_collection` for Zed's Edit Predictions can now be set
explicitly in `settings.json` under `edit_predictions`. Existing
preferences stored in the internal database are preserved as a fallback.

---------

Co-authored-by: Ben Kunkle <ben.kunkle@gmail.com>
2026-04-23 14:19:01 +00:00
DinoandYara b34513a720 search: Fixed highlighting item beyond cursor (#54514)
Search is highly generic, editor is the only implementation that has a
concept of a cursor. When the cursor moves eventually
`Editor::selections_did_change` runs which among a bunch of things
triggers the `SearchEvent::ActiveMatchChanged`. This was handled by the
`BufferSearchBar` by moving the currently highlighted item.

When going to the next search result (from the cursor position) we call
`BufferSearchBar::match_index_for_direction`. It relied on the
current_index being updated during the handling of `ActiveMatchChanged`
which we removed. It now instead figures out the next/prev search result
from the users cursor in the buffer directly.

The `SearchEvent::ActiveMatchChanged` was being used for different
responsibilities in different places in the codebase where it was
emmited, namely:

* On the `editor::Editor::selections_did_change` it was being emmited in
  case a single selection (single cursor) existed, and this was the
  thing reponsible for indirectly updating the active match as soon as
  the cursor moved out of match.
* On the `terminal` side, it's being emitted when the user clicks on the
  terminal, to "simulate" what the cursor position would be and update
  the active match to the next closes match compared to the click
  position.
* On the `markdown_preview` side it was being emmited whenever the
  active match was updated but, from testing, it does actually seem to
  not drive anything and is unnecessary?

Given that we no longer want to update the active match in the buffer
everytime the user moves the cursor, we removed the event emission from
`editor::Editor::selections_did_change` as well as removing the one from
`markdown_preview`, as it seems it doesn't have any noticeable impact.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #44367

Release Notes:

- Fixed search highlighting changing anytime the cursor moves.

---------

Co-authored-by: Yara <git@yara.blue>
2026-04-23 14:18:46 +00:00
Kirill Bulatov e9d727015b Stop showing backtraces in default logging (#54660)
When using `.log_err()` or `.detach_and_log_err(cx)` or similar.

See also https://github.com/zed-industries/zed/pull/36404,
https://github.com/zed-industries/zed/pull/46383,
https://github.com/zed-industries/zed/pull/44896,
https://github.com/zed-industries/zed/pull/43917 and many more.

Before, a
https://github.com/zed-industries/zed/blob/77c74db82e35b2e3aeebea9629b644cf43137f16/crates/languages/src/go.rs#L568
line would show a backtrace even for `.context("no cached binary")?;`
case, same as many other usages around the code:

<img width="2032" height="1162" alt="before"
src="https://github.com/user-attachments/assets/ef2188b3-74c9-4c86-82b8-9fdaed3c26ae"
/>

After:

<img width="1896" height="157" alt="after"
src="https://github.com/user-attachments/assets/a1067d9f-61f4-4833-aeab-9f1042d2514a"
/>



To show a backtrace as before, use `log_err_with_backtrace`.

Release Notes:

- Improved Zed's log output on errors
2026-04-23 14:14:11 +00:00
Eric Huber 2a52236f9a workspace: Fix edge case when saving workspace with no paths (#52810)
Closes #48468
Supersedes #52713

Avoid issues with restoring workspaces by making sure to save `paths`
and `paths_order` as `NULL` in the `workspaces` table when there are no
paths. This also helps to avoid losing unsaved buffers in the workspace.

Details:

There was an issue where sporadically, a workspace with no project paths
(and especially with unsaved buffers that could be lost) would not be
restored after restarting Zed. (Refer to #48468 and #15098)

A consistent symptom seemed to be that in the `workspaces` table, the
`paths` and `paths_order` columns might have an empty string instead of
`NULL`. Explicitly saving the workspace with `NULL`s in that case seems
to solve the problem.

Special thanks to @dhnm as his suggested bash script here
https://github.com/zed-industries/zed/issues/48468#issuecomment-3973941351
helped me to realize that the discrepancy with `paths` being an empty
string when it should have been `NULL` was the least common denominator.

Self-Review Checklist:

- [X] I've reviewed my own diff for quality, security, and reliability
- [X] Unsafe blocks (if any) have justifying comments
- [X] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [X] Tests cover the new/changed behavior
- [X] Performance impact has been considered and is acceptable

Release Notes:

- Fix edge case when saving workspace with no paths

No additional tests were added but perhaps someone can suggest one. (The
existing tests seem to be passing for me locally now, unlike the
superseded PR.) The issue seems sporadic based on GitHub issue
discussion, which might make it harder to unit test, although it was
reproducible with a clean install of Zed 0.228.0 on macOS (including a
fresh db).
2026-04-23 14:06:43 +00:00
Oleksiy Syvokon b8cc3feeff Wait for worktree scan to complete before starting search (#54534)
When starting a search on a project that is in the middle of a scan, we
used to miss results in files that had not yet been scanned.

This change makes the search wait for the scan to complete.


Closes #9858

Release Notes:

- Fixed incomplete search results when the project scan is incomplete
2026-04-23 13:35:13 +00:00
Oleksiy SyvokonandDanilo Leal 00e184fb5f Show progress indicator in file finder (#54515)
When opening the file finder in a large project, it was impossible to
tell whether the scan was complete and if the results were final. Now we
show an animated arrow circle while the scan is active.

<img width="425" height="380" alt="Screenshot 2026-04-22 at 18 42 01"
src="https://github.com/user-attachments/assets/6d772483-a6c8-406b-bbf8-db810df7ab68"
/>


Closes #48009



Release Notes:

- N/A

---------

Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
2026-04-23 13:00:32 +00:00
Phillip Davis 9975c75cd3 languages: Fix broken whitespace for C++ (#53709)
Uses tree-sitter indent queries to create a pseudo-scope, since access
modifiers are single-node in thetree-sitter grammar.

The @outdent capture truncates the parent { } indent range at the access
specifier, keeping it at the same level as the class keyword and the
pseudo-scopes from stacking.

The @outdent range selects siblings so we don't outdent the access
specifiers themselves, since screenshots from the reference issue seem
to show that at least one interested party does not prefer outdented
access modifiers, and also it seemed like less of a departure from
existing design.

Also, there are probably more tests than needed because this is my first
time writing treesitter queries and I wanted to triple-guess myself.
Quite open too feedback on which ones are more valuable.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #53175

Release Notes:

- Improves handling of indentation after C++ access modifiers
2026-04-23 12:50:09 +00:00
Tom Houlé d524e0dd25 docs: Document Tombi configuration with edit predictions (#54631)
See the docs edit for a description of the issues and solutions.

Maybe the styling is a bit too aggressive?

<img width="2222" height="2196" alt="image"
src="https://github.com/user-attachments/assets/127bb4c0-c548-45d7-9a29-ab5863096929"
/>


closes https://github.com/zed-industries/zed/issues/50917

Release Notes:

- N/A
2026-04-23 12:48:03 +00:00
a5ce6f8dfb Fix freeze when binary content written to open empty file (#53074)
Opening an empty file then writing binary content to it on disk causes a
permanent freeze (not a crash — requires force kill).

`reload_impl` loads raw bytes via `load_bytes` and decodes with
`encoding_rs` but never checks if the content is binary. The existing
binary check in `decode_file_text` only runs on fresh opens, not
reloads. So binary content enters the buffer as lossy UTF-8.

Binary data has almost no newlines, producing a single enormous row. The
wrap map's sync fast path in `flush_edits` checks row count (< 100 rows)
but not line length, so it runs `wrap_line` on a multi-MB single line
synchronously on the main thread via `smol::block_on`. Font shaping
millions of non-ASCII replacement characters blocks the UI thread
indefinitely.

Two fixes, both one-condition guards:
- Null-byte check in `reload_impl` before decoding, same heuristic
(first 8000 bytes) used by `decode_file_text` on fresh opens. Binary
content never enters the buffer.
- Column-length guard (`MAX_SYNC_WRAP_COLUMNS = 10_000`) on the wrap map
sync fast path so absurdly long lines fall through to the async
background path. Defense in depth for any single-line content that's too
long to shape synchronously.

## Test plan
- [ ] Open an empty file in Zed, write binary content to it externally
(e.g. `cp /bin/ls /path/to/open-file`) — should show "Binary files are
not supported" instead of freezing
- [ ] Open a compressed file (zip, gz) that starts empty and gets filled
— same behavior
- [ ] Normal text file reload still works (no regression)
- [ ] Very long single-line text files (>10k columns) don't freeze the
editor

---------

Co-authored-by: deadcode-walker <268043493+deadcode-walker@users.noreply.github.com>
Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
2026-04-23 12:42:10 +00:00
Joseph T. Lyons 77c74db82e Update docs for creating multi-root projects (#54655)
Self-Review Checklist:

- [X] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [ ] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [ ] Performance impact has been considered and is acceptable

Release Notes:

- N/A
2026-04-23 12:29:51 +00:00
Bennet Bo Fenner 7e23abec76 agent: Fix issue where new from summary was not working (#54648)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #ISSUE

Release Notes:

- agent: Fixed an issue where clicking on "New from summary" would not
do anything
2026-04-23 12:25:46 +00:00
João SoaresandLukas Wirth 062037746c terminal_view: Show "Add to Agent Thread" on first right-click (#50860)
Closes #50844

## Summary

- When right-clicking a word in the terminal with no prior selection,
`select_word_at_event_position` queues the selection as an
`InternalEvent` that only syncs to `last_content` on the next update
cycle.
- The context menu was reading `last_content.selection_text` before the
sync, so "Add to Agent Thread" was missing until the second right-click.
- Pass `has_selection` into `deploy_context_menu` from the call site,
where we already know whether a word was just selected.

## Test plan

- [x] Open a terminal in Zed
- [x] Run a command that produces output (e.g. `echo foo bar baz`)
- [x] Ensure there is no existing selection
- [x] Right-click on a word — "Add to Agent Thread" appears on the first
right-click
- [x] Right-click with an existing selection — "Add to Agent Thread"
still appears
- [x] Right-click with no text under cursor — context menu still works
correctly

## Videos:
### Before

[agent_test_before.webm](https://github.com/user-attachments/assets/d913a05b-6189-40a4-8eee-3660be8c3647)


### After

[agent_test_after.webm](https://github.com/user-attachments/assets/ceacc617-71b2-442f-a150-305867f9dd5f)



Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Fixed "Add to Agent Thread" missing from terminal context menu on
first right-click when no prior selection existed.

---------

Co-authored-by: Lukas Wirth <lukas@zed.dev>
2026-04-23 12:18:36 +00:00
galuis116andLukas Wirth 2811e01e88 Fix:Bug: “Static” **color** theme from Dynamic + System mode always used the **dark** slot (#54609)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #54607

Release Notes:

- Settings UI theme conversion now respects system appearance.
When switching Theme Mode from Dynamic (System) to Static, Zed now picks
the static theme that matches the current OS app appearance (light or
dark) instead of always defaulting to the dark variant.

---------

Co-authored-by: Lukas Wirth <lukas@zed.dev>
2026-04-23 12:06:38 +00:00
Joseph T. Lyons 79e9d34ddb Fix docs preprocessor preferring parameterized keybindings over exact matches (#54593)
This PR fixes a bug with the docs pre-processor where it could match on
parameterized versions of key binds before exact matches.

I noticed this bug in the latest [parallel agent
docs:](https://zed.dev/docs/ai/parallel-agents#switching-threads)

<img width="717" height="110" alt="SCR-20260423-bhtn"
src="https://github.com/user-attachments/assets/ea20b592-55c3-4e92-9c2e-ff821efacdd8"
/>

Here, the preprocessor is matching on the parameterized version first:

```json
"ctrl-tab": "agents_sidebar::ToggleThreadSwitcher",
"ctrl-shift-tab": ["agents_sidebar::ToggleThreadSwitcher", { "select_last": true }],
```

This bug surfaced in some other places in the docs as well:

- https://zed.dev/docs/ai/agent-panel#multiple-threads
- https://zed.dev/docs/finding-navigating#project-search
- https://zed.dev/docs/finding-navigating#quick-reference
- https://zed.dev/docs/migrate/webstorm#no-indexing
- https://zed.dev/docs/migrate/webstorm#differences-in-user-interfaces

Self-Review Checklist:

- [X] I've reviewed my own diff for quality, security, and reliability
- [N/A] Unsafe blocks (if any) have justifying comments
- [N/A] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [X] Tests cover the new/changed behavior
- [X] Performance impact has been considered and is acceptable

Release Notes:

- N/A
2026-04-23 12:04:17 +00:00
Kunall Banerjee 85b74762c7 lsp: Fix vtsls completeFunctionCalls setting being ignored (#53285)
Some language servers (notably `vtsls` with `completeFunctionCalls`)
update `insertText/textEdit` during `completionItem/resolve` to add
snippet content like function call parentheses. Previously,
`Completion.new_text` was only set from the initial completion response
and never re-derived after resolve, so the snippet text was silently
discarded.

Re-derive `new_text` from the resolved `lsp_completion`. Only the text
content is updated -- replace/insert ranges are left as anchors from the
original response since the LSP ranges in the resolved text_edit are
stale when completions are cached across keystrokes (re: #34094).

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #53275.

Release Notes:

- Fixed the `vtsls` `completeFunctionCalls` setting being ignored
2026-04-23 12:02:11 +00:00
Finn Evers 161ef2e4bf compliance: Add temporary allowlist (#54644)
To not have another week of failing checks on Preview and until we find
a better way of handling these errors.

Release Notes:

- N/A
2026-04-23 11:54:16 +00:00
68f1d088c1 fs: Polling backend support (#54481)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #51340
Release Notes:

- Linux/WSL: Added polling filesystem watching support in order to
support file watching on file systems that do emit events through
`inotify`, for example `/mnt/c` in WSL, network filesystems, and FUSE
mounts. Polling should be automatically chosen over `inotify` when
necessary, however it can be manually chosen by setting the
`ZED_FILE_WATCHER_MODE=poll` env var

---------

Co-authored-by: Lilith River <lilith@imazen.io>
Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
2026-04-23 11:40:49 +00:00
João Soares a17a2883bd theme_selector: Revert theme when modal is dismissed by clicking outside (#52773)
Context

Related to #52118

Found this while looking into the theme selector filtering bug: clicking
outside the theme selector (or icon theme selector) keeps the previewed
theme applied instead of reverting. `hide_modal()` doesn't go through
the Picker's `dismissed()` callback, so the in-memory theme override
sticks around without being written to `settings.json`.

This PR only fixes the click-outside behavior. The filtering issue from
#52118 is separate.

## Demo

**Before (bug):**


https://github.com/user-attachments/assets/f8be49c4-7e1d-483c-bf23-346022ac83aa



**After (fix):**



https://github.com/user-attachments/assets/29cc1740-c869-42d1-8aee-fe46a091a949



## How to review

Two files, symmetrical changes. Look at:
- `on_before_dismiss` in `theme_selector.rs` and
`icon_theme_selector.rs`
- The extracted `revert_theme()` method on both delegates, now shared
between `dismissed()` and `on_before_dismiss`

## Self-Review Checklist

- [x] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable


Release Notes:

- Fixed theme selector keeping the previewed theme when clicking outside
instead of reverting to the original.
2026-04-23 11:36:03 +00:00
Anthony Eid 5a7e11a24b git: Fix create worktree hook tasks running when switching worktrees (#54612)
This PR fixes a regression that was likely caused by:
https://github.com/zed-industries/zed/pull/54183 and wasn't caught
because I didn't add a regression test when I originally created the
feature.

The fix was only running the hooks when the worktree was just created,
and I added an integration test to prevent regressions from occurring
again in the future.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #54598

Release Notes:

- git: Fix create worktree hook tasks running when switching worktrees
2026-04-23 11:05:54 +00:00
Finn Evers e7348cc427 ci: Perform compliance checks in parallel (#54564)
Not to be merged before https://github.com/zed-industries/zed/pull/54550

This makes it so that we perform not all checks sequentially but in
parallel which should overall make this a lot faster.

Ultimately, we can save some more requests if we were to search for all
co-author looking PRs with one GraphQL query, but for now, this here
should make things a lot faster already whilst working fine with rate
limits.


Release Notes:

- N/A
2026-04-23 10:50:51 +00:00
Valery Borovskyanddino c725fc10f9 editor: Fix sticky scroll showing decorator line instead of declaration (#53288)
Fixes #49466

It looks like this wasn't actually a bug in the PHP outline query, but a
general sticky scroll bug. In PHP, the attribute ends up inside the
`function_declaration` as a child node, so sticky headers were
previously taking their start from `item.range.start` and getting stuck
on the `#[Deprecated]` line instead of `function foo()`. Switching to
`source_range_for_text.start` fixes exactly that, and also covers other
languages that put decorators or attributes before the declaration. I
added the test in TypeScript because it has the same tree shape and
covers the same class of bug as #49466


---

Before:

<img width="967" height="772" alt="Screenshot from 2026-04-07 08-46-10"
src="https://github.com/user-attachments/assets/a6b2aa2b-03f7-4abf-a4c4-c87d41df83ae"
/>


After:

<img width="1245" height="993" alt="Screenshot from 2026-04-07 08-23-32"
src="https://github.com/user-attachments/assets/27ef2487-d7fd-4a73-93e5-97fc719f9245"
/>

<img width="1245" height="993" alt="Screenshot from 2026-04-07 08-23-40"
src="https://github.com/user-attachments/assets/1b1daf80-544d-4128-bc92-b7d44b8d6564"
/>

<img width="963" height="636" alt="Screenshot from 2026-04-07 08-23-53"
src="https://github.com/user-attachments/assets/bb244ce9-797e-4a5f-b48f-eb0e4b982f7d"
/>

---

Tests:

Nextest run ID f0de6791-1a3c-406b-9589-54df870b832b with nextest
profile: default
Starting 3 tests across 1 binary (655 tests skipped)
PASS [ 0.986s] (1/3) editor editor_tests::test_sticky_scroll
PASS [ 0.436s] (2/3) editor
editor_tests::test_sticky_scroll_with_decoration_prefix_in_item
PASS [ 0.822s] (3/3) editor
editor_tests::test_sticky_scroll_with_expanded_deleted_diff_hunks
────────────
Summary [ 2.298s] 3 tests run: 3 passed, 655 skipped

Release Notes:

- Fixed sticky scroll headers showing attribute/decorator lines instead
of the declaration line in PHP and other languages where annotations are
child nodes of the declaration.

Co-authored-by: dino <dinojoaocosta@gmail.com>
2026-04-23 10:46:52 +00:00
Bennet Bo Fenner b869a5a4d7 sidebar: Drop conversation view when archiving thread (#54516)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #ISSUE

Release Notes:

- agent: Fixed an issue where sessions would not immediately be cleaned
up when archiving
2026-04-23 10:40:01 +00:00
Finn Evers 7de5efe32b compliance: Allow Zippy release channel changes (#54572)
This adds support for tracking Zed Zippy channel changes with the
compliance automation.

Release Notes:

- N/A
2026-04-23 10:37:53 +00:00
Xiaobo Liu 433d30e4c2 gpui: Avoid redundant SharedString allocations in ShapedLine::split_at (#54583)
Build split text directly from Arc<str> slices instead of allocating
intermediate Strings. Reuse the original SharedString for full-line
splits, return a static empty string for empty sides, and add a
regression test covering boundary splits.

Release Notes:

- N/A

---------

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
2026-04-23 10:25:24 +00:00
Finn Evers 5896b767bf ci: Bump script check runner size (#54615)
Since we build the workflows xtask on this runner, increasing the size
here to make that job faster.

Release Notes:

- N/A
2026-04-23 10:22:05 +00:00
Cameron Mcloughlin ef11c159ca Normalize picker padding (#54573)
Looks like this now:
<img width="608" height="152" alt="image"
src="https://github.com/user-attachments/assets/275c9574-e4fe-4855-b269-051b68b87bbe"
/>

Closes #53188

Release Notes:

- N/A or Added/Fixed/Improved ...
2026-04-23 10:15:33 +00:00
NaritaHARUKIandLukas Wirth d87d817aa4 Add side-by-side split diff view to FileDiffView (#50046)
## Summary
- Enable VSCode-like side-by-side file comparison in FileDiffView using
SplittableEditor
- Leverages existing SplittableEditor infrastructure that ProjectDiff
already uses
- Controlled by the user's `diff_view_style` setting (split/unified)

## Changes
- `crates/git_ui/src/file_diff_view.rs`: Refactored to use
SplittableEditor instead of plain Editor (+66/-30 lines)

## Test plan
- [ ] Open a file with git changes and verify the diff view renders
correctly
- [ ] Toggle between split and unified diff view styles via settings
- [ ] Verify side-by-side comparison shows old/new content correctly

Release Notes:

- Enabled side by side diffs in the file diff view

Co-authored-by: Lukas Wirth <me@lukaswirth.dev>
2026-04-23 10:08:01 +00:00
Kunall Banerjee f0b7108056 Fix Agent Panel font size incrementing by 2px instead of 1px (#53685)
Split the shared `AgentFontSize` in-memory global into separate
`AgentBufferFontSize` and `AgentUiFontSize` globals. Previously, both
`adjust_agent_ui_font_size` and `adjust_agent_buffer_font_size` read
from and wrote to the same global, so calling them back-to-back in
`handle_font_size_action` applied the delta twice.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #53368.

Release Notes:

- Fixed Agent Panel font size incrementing by 2px instead of 1px
2026-04-23 10:03:53 +00:00
Paul Di PietroandBen Kunkle de102a85b6 Fix a Wayland-related graphic bug for the status bar (#46466)
Release Notes:

- Address a scenario where scaling in Wayland can cause a 1px gap above
the status bar

Closes #46008

---------

Co-authored-by: Ben Kunkle <ben.kunkle@gmail.com>
2026-04-23 09:08:08 +00:00
Philip Arndt a4b2cc633f Add credentials_url setting for keychain storage (#50047)
Added support for `credentials_url`, falling back to `server_url`, to be
used as the key for storing information inside Keychain Access. This
allows two copies of Zed to be used side by side if the other is
launched with a custom `--user-data-dir`.

- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects

Release Notes:

- Added support for `credentials_url`, falling back to `server_url`, to
be used as the key for storing information inside Keychain Access.
2026-04-23 08:58:14 +00:00
Kunall Banerjee 177b1d87d3 terminal_view: Prevent local path resolution for remote terminals (#50268)
When opening a terminal in a remote project, skip local-only path
operations (home dir fallback, shell expansion, is_dir checks) so the
remote shell opens in the remote user’s home directory by default.

Closes #49613.

Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Prevent local path resolution for remote terminals
2026-04-23 08:41:05 +00:00
Tim VermeulenandBen Kunkle 9a9a62a10a workspace: Add basic pane property tests and fix navigation bug (#52871)
Adds very basic property tests for navigation within a single pane, with
these operations:

```rust
enum Operation {
    Open { path: Arc<RelPath>, allow_preview: bool },
    GoBack,
    GoForward,
}
```

It primarily tests that a single backward or forward navigation step
results in the correct item being active. It doesn't currently test that
going back multiple times in a row results in the correct items because
the deduplication logic that Zed uses for this turned out to be hard to
model in an "obviously correct" way, and I aimed to keep it really
simple.

These tests surfaced a navigation bug that this PR also fixes, where
replacing an inactive preview tab would sometimes corrupt the navigation
history.

Before:


https://github.com/user-attachments/assets/52e21002-1319-4b16-93d7-8f84fb8858c0

After:


https://github.com/user-attachments/assets/790b6e3b-4c2b-4f2e-a705-70b1bc034872

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- Fixed a bug where replacing a preview tab would sometimes break
navigation.

---------

Co-authored-by: Ben Kunkle <ben@zed.dev>
2026-04-23 08:36:00 +00:00
d6814da83b Add integrated terminal bell + settings (#53752)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] ~Unsafe blocks (if any) have justifying comments~
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Followup to #47531 to use the gpui feature in Zed. This just plumbs the
"system bell" feature into the terminal, behind a new setting (enabled
by default, like most other terminal applications).

Closes #5303
Relates to
https://github.com/zed-industries/zed/issues/40826#issuecomment-3684556858

Release Notes:

- Added audible BEL to Terminal; can be enabled by setting
`terminal.bell` to `"system"`.

---------

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Ben Kunkle <Ben.kunkle@gmail.com>
2026-04-23 07:55:50 +00:00
KyleBarton 399af53b23 Trim nonalphanumeric chars before prefixing image tag name (#54578)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #54452

Release Notes:

- Fixed bug where the sixth character of a devcontainer name is
nonalpanumeric
2026-04-23 07:36:36 +00:00
Finn Evers 2bcfd4f974 compliance: Use author_association where possible (#54550)
This changes some of the checks to use the existing `author_association`
where possible, which will result in no change of effect - this is also
what GitHub uses internally.

The advatage is that it saves us a few requests, especially in the
context of the GitHub worker, and allows us to share code more
efficiently here. It also removes some ugly duplication I wanted to get
rid of for some time and makes the code overall more readable IMO.

Release Notes:

- N/A
2026-04-23 07:34:22 +00:00
Cole Miller b01d9e5506 Remove a debug_panic from the LSP store (#54549)
This is reachable when you pass a path to the Zed binary that doesn't
exist, so it feels a bit too aggressive.

Self-Review Checklist:

- [ ] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [ ] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [ ] Performance impact has been considered and is acceptable

Closes #ISSUE

Release Notes:

- N/A or Added/Fixed/Improved ...
2026-04-23 07:25:55 +00:00
Cole Miller 875f01dc9e git: Correctly filter ignored paths inside gitdirs on all platforms (#54548)
Previously the worktree's handling of events inside gitdirs looked like
this:

- First, deduplicate paths for which we received events by dropping any
path that is a suffix of another one
- Then, filter out events for deliberately ignored paths like
`.git/index.lock`
- Finally, collect a set of affected gitdirs based on the paths that
remain

This doesn't work on Windows, because when events occur for paths inside
`.git` we also get an event for `.git` itself. The deduplication steps
drops `.git/index.lock` before we get the chance to filter it out in the
second step. This causes us to rescan git state unnecessarily on
Windows.

This PR fixes the issue by moving the filtering of ignored paths, and
also the handling of `.git/info/exclude`, to just before the
deduplication step. We also filter out events for the `.git` directory
itself, so that if the batch of events looks like `[".git",
".git/index.lock"]`, we don't trigger `WorktreeUpdatedGitRepositories`.

Self-Review Checklist:

- [ ] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [ ] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [ ] Performance impact has been considered and is acceptable

Closes #ISSUE

Release Notes:

- N/A or Added/Fixed/Improved ...
2026-04-23 07:23:19 +00:00
Finn Evers d5df038235 ci: Fix merge queue trigger (#54611)
This one was supposed to run, but was accidentally skipped.

Release Notes:

- N/A
2026-04-23 07:16:02 +00:00
Anthony Eid 7482806b4a git_ui: Use switch wording in branch picker (#54606)
Closes #54467

This PR changes the branch picker’s confirm label from "Select" to
"Switch" to better match the rest of the codebase and the action
performed when confirming in the picker.

I originally considered using "checkout", but since most places in our
codebase use "switch" as the branch command name, I stuck with that.

Release Notes:

- N/A
2026-04-23 07:15:03 +00:00
Finn Evers cdcb533026 client: Fix capitalization of comment (#54610)
This is less of an actual fix than more a test for the merge queue.

Release Notes:

- N/A
2026-04-23 06:55:23 +00:00