b3697a6
Fix branch_name Option check in fake create_worktree after merge
Richard Feldman created
b3697a6
Fix branch_name Option check in fake create_worktree after merge
Richard Feldman created
a553595
Merge remote-tracking branch 'origin/main' into AI-112/git-worktree-operations
Richard Feldman created
d430cc5
sidebar: Add some design tweaks (#53026)
- Make notification icons show up even for threads of the currently active workspace - When with a notification/any other status, replace thread item's agent icon a status icon for higher visbility - Remove hover state from currently active project/workspace's header - Make project/workspace label brighter if I'm inside of it - Adjust colors all around a bit (sidebar background and border, and icons within the project header) Release Notes: - N/A
Danilo Leal created
9537861
Refine split diff icons (#53022)
Follow-up to https://github.com/zed-industries/zed/pull/52781, adding some different icons to better express the state in which the split diff _is selected_ but _isn't active_, which happens when the editor is smaller than a given amount of defined columns. https://github.com/user-attachments/assets/2e7aaf6c-077f-4be5-9439-ce6c2050e63d Release Notes: - N/A
Danilo Leal created
29609d3
language_model: Decouple from Zed-specific implementation details (#52913)
This PR decouples `language_model`'s dependence on Zed-specific implementation details. In particular * `credentials_provider` is split into a generic `credentials_provider` crate that provides a trait, and `zed_credentials_provider` that implements the said trait for Zed-specific providers and has functions that can populate a global state with them * `zed_env_vars` is split into a generic `env_var` crate that provides generic tooling for managing env vars, and `zed_env_vars` that contains Zed-specific statics * `client` is now dependent on `language_model` and not vice versa Release Notes: - N/A
Jakub Konka created
34c77a0
collab_panel: Add small design adjustments (#52994)
Some tiny tweaks so that things look just a bit tidier in the collab panel. | Before | After | |--------|--------| | <img width="594" height="276" alt="Screenshot 2026-04-02 at 11 39@2x" src="https://github.com/user-attachments/assets/f542d131-dbc5-41eb-bc13-0ebce3cf19a6" /> | <img width="592" height="260" alt="Screenshot 2026-04-02 at 11 34@2x" src="https://github.com/user-attachments/assets/1198bc49-f780-433e-bb5d-6304f13703d6" /> | Release Notes: - N/A
Danilo Leal created
cb99ab4
Add PageUp/PageDown scrolling in agent view (#52657)
Fixes #52656 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 #52656 Release Notes: - Added keybindings for scrolling in agent view --------- Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com>
Aleksei Gusev and Oleksiy Syvokon created
34f51c1
agent_ui: Remeasure changed entries in the thread view list (#53017)
This PR fixes an issue where, sometimes, you couldn't scroll all the way to the bottom of the thread's content. The scrollbar would show up at the bottom of the scrollable container but the content was visibly cut off. Turns out that's a consequence of the top-down thread generation introduced in https://github.com/zed-industries/zed/pull/52440, where changing the list alignment to `Top` made it visible that sometimes, the maximum scroll area would get underestimated because the items in the thread view's list would have a stale height measurement. So, the way this PR fixes the issue is by calling `splice_focusable` in the `EntryUpdated` event, too, so that the height of the items in the overdraw area get marked as unmeasured, triggering a list re-render and re-measuring. We started by writing a test at the list level that would reproduce the regression but then later figured out that this is not an inherent list problem; it was rather a problem with its use within the thread view layer. Then, we explored writing a test that documented the regression, but it turned out to be very hard to simulate this sort of set up in which certain elements would have its height changed during streaming, which would be how you'd get to a mismatched height situation. Therefore, given `AcpThreadEvent::NewEntry` already called `splice_focusable` and don't have a test for it, we figure it'd be safe to move forward without one, too. We then introduced a helper that's now shared between `AcpThreadEvent::NewEntry` and `AcpThreadEvent::EntryUpdated`. Release Notes: - Agent: Fixed an issue where sometimes you couldn't scroll all the way to the bottom of the thread even though there's visibly more content below the fold. Co-authored-by: Eric Holk <eric@zed.dev>
Danilo Leal and Eric Holk created
05c749c
settings_ui: Make all number fields editable (#52986)
Taking advantage that we do have this capability now within the number field component. I initially thought that some wouldn't make sense to be editable but upon further reflection, why not? The buttons continue to work, but if you want to type a more precise value, it should be possible, too! Release Notes: - N/A
Danilo Leal created
dc3f5b9
cli: Add --dev-container flag to open project in dev container (#51175)
## 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 - [x] Aligned any UI changes with the [UI checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) ## Summary Adds a `--dev-container` CLI flag that automatically triggers "Reopen in Dev Container" when a `.devcontainer/` configuration is found in the project directory. ```sh zed --dev-container /path/to/project ``` ## Motivation This enables fully scripted dev container workflows — for example, creating a git worktree and immediately opening it in a dev container without any manual UI interaction: ```sh git worktree add ../feature-branch zed --dev-container ../feature-branch ``` The dev container modal fires automatically once the workspace finishes initializing, so the environment is ready by the time you look at the window. This is useful for automation scripts that prepare environments and kick off agent runs for tasks like bug report triage. Here's an [example script](https://github.com/antont/todo-rs-ts/blob/main/scripts/devcontainer-new.sh) that creates a worktree and opens it as a dev container in one step. Related: #48682 requests a `devcontainer://` protocol for connecting to already-running dev containers — a complementary but different use case. This PR covers the "open project and trigger dev container setup" path. ## How it works - The `--dev-container` flag flows through the CLI IPC protocol to the workspace as an `open_in_dev_container` option. - On the first worktree scan completion, if devcontainer configs are detected, the dev container modal opens automatically. - If no `.devcontainer/` config is found, the flag is cleared and a warning is logged. ## Notable changes - **`Workspace::worktree_scans_complete`** promoted from `#[cfg(test)]` to production. It was only test-gated because it had no production callers — it's a pure read-only future with no side effects. - **`suggest_on_worktree_updated`** now takes `&mut Workspace` to read and clear the CLI flag. - Extracted **`open_dev_container_modal`** helper shared between the CLI code path and the suggest notification. ## Test plan - [x] `cargo test -p zed open_listener` — includes `test_dev_container_flag_opens_modal` and `test_dev_container_flag_cleared_without_config` - [x] `cargo test -p recent_projects` — existing suggest tests still pass - [x] Manual: `cargo run -- --dev-container /path/to/project-with-devcontainer` opens the modal Release Notes: - Added `--dev-container` CLI flag to automatically open a project in a dev container when `.devcontainer/` configuration is present. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Toni Alatalo and Claude Opus 4.6 created
fbdeb93
devcontainer: Implement remote support for git checkpoint operations (#48896)
Closes #47907 Implements the four git checkpoint operations (`create`, `restore`, `compare`, `diff`) that had been stubbed out for remote repositories, and related test infrastructure. Testing steps: 1. Open a project with a `.devcontainer` configuration and connect to the Dev Container 2. Open an Agent thread and ask the agent to make a code change 3. After the agent completes, verify the "Restore from checkpoint" button appears (previously missing in Dev Container sessions) 4. Click "Restore from checkpoint" and confirm the file reverts to its prior state Release Notes: - Added support for git checkpoint operations in remote/Dev Container sessions, restoring the "Restore from checkpoint" button in Agent threads. --------- Co-authored-by: KyleBarton <kjb@initialcapacity.io>
Oliver Azevedo Barnes and KyleBarton created
bd6dada
languages: Change syntax highlighting for JSX elements (#49881)
Syntax highlighting and its customization are very important to many
developers, including me. I've looked through a number of issues and
discussions on this topic and haven't found any active PRs. Currently,
there's no way to customize highlighting for custom JSX tags, as they
use `@type`. Since TSX has a particularly complex syntax and can often
contain types/aliases/generics/tags in a dense sequence, they all blends
into a single color and makes it difficult to "parse" by eyes.
To avoid proposing something arbitrary, I looked into how this is done
elsewhere.
- VS Code `support.class.component.tsx`
[TypeScriptReact.tmLanguage.json](https://github.com/microsoft/vscode/blob/724656efa2c26ab6e7eb2023426dcf2658dc3203/extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json#L5802)
But it relies on both legacy [tmLanguage naming
conventions](https://macromates.com/manual/en/language_grammars#:~:text=rarely%20be%20used\).-,support,-%E2%80%94%20things%20provided%20by)
and the outdated assumption that React components are always classes.
- ReScript `@tag`
[rescript-zed](https://github.com/rescript-lang/rescript-zed/blob/b3930c1754ab2762938244546ea2c7fb97d01cb3/languages/rescript/highlights.scm#L277)
It's not entirely correct to just use a `@tag` - it's better to
distinguish JSX Intrinsic Elements from custom ones.
- Vue `@tag @tag.component.type.constructor`
[zed-extensions/vue](https://github.com/zed-extensions/vue/blob/2697588c5cde11375d47f53f9449af8e32600d81/languages/vue/highlights.scm#L9C21-L9C52)
- Svelte `@tag @tag.component.type.constructor`
[zed-extensions/svelte](https://github.com/zed-extensions/svelte/blob/ae381a1217d14c26cbedfaf84b0a2f5ae508f40c/languages/svelte/highlights.scm#L46C21-L46C52)
The similarity between Vue and Svelte implementations (perhaps one
borrowed from the other) didn't seem coincidental and the approach felt
appropriate.
**I decided to adopt the same one to maintain consistency for theme
creators.**
So, how it looks:
**Release (0.224.9) version**
<img width="440" height="220" alt="zed-one-release"
src="https://github.com/user-attachments/assets/6f8726c5-a17e-4387-941c-69e5c1569049"
/>
**Local version with changes** - no breaking changes for builtin themes
- uses `type` color as before and can be changed in themes separately if
needed
<img width="440" height="220" alt="zed-one-local"
src="https://github.com/user-attachments/assets/a11cc5ed-20fc-45d2-8ebd-a908503999c3"
/>
**Local version with changes and theme overrides**
<img width="440" height="220" alt="zed-one-with-overrides"
src="https://github.com/user-attachments/assets/1997bd5b-7fa4-4346-8338-b5d61e9e832b"
/>
With these changes in the config:
```jsonc
"theme_overrides": {
"One Light": {
"syntax": {
// "tag.component" also matches
"type.component": {
"color": "#d3604fff",
},
},
},
},
```
I'm pretty sure this will help many developers enjoy Zed even more.
Release Notes:
- Improved syntax highlighting for custom jsx elements in TSX and
JavaScript languages. Theme authors and users can now highlight these in
their theme/theme overrides using `tag.component.jsx`
finico created
efc53c2
docs: Center and re-flow perf images (#53004)
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: - N/A or Added/Fixed/Improved ... Co-authored-by: Joseph T. Lyons <JosephTLyons@gmail.com>
Miguel Raz Guzmán Macedo and Joseph T. Lyons created
7892b93
git_graph: Remove feature flag (#52972)
After #52953 gets merged the git graph will be ready for it's preview release, so we can finally remove the feature flag! AKA this PR releases the git graph 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: - Add Git Graph. Can be accessed through the button on the bottom of the git panel or the `git graph: Open` action
Anthony Eid created
06f939d
Expose flexible panel settings in settings UI (#52946)
Release Notes: - Added controls to the settings UI for whether the terminal and agent panels use flexible width.
Max Brunsfeld created
c02ea54
docs: Update typefaces and some other styles (#52992)
Update the heading typeface to use IBM Plex Serif, the code typeface to use Lilex (IBM Plex Mono), and pull them from the zed.dev CDN. Also added some stray design adjustments here and there. Release Notes: - N/A
Danilo Leal created
73cd7ec
git_graph: Make the graph canvas resizable (#52953)
### Summary This PR integrates the git graph canvas with the `Table` component’s `RedistributableColumnsState`, making the graph column resizable while preserving the table’s existing resize behavior. In particular, column resizing continues to use the same cascading redistribution behavior as the table. This is also the last PR needed to remove the feature flag on the git graph! ### Table API changes I pulled the redistributable column logic out of `Table` into reusable UI helpers so layouts outside of `Table` can participate in the same column resizing behavior. This adds a shared `RedistributableColumnsState` API, along with helpers for binding drag/drop behavior, rendering resize handles, and constructing header resize metadata. I also added `ColumnWidthConfig::explicit` and `TableRenderContext::for_column_widths` so callers can render table like headers and content with externally managed column widths. The reason for this change is that the git graph now renders a custom split layout: a graph canvas on the left and table content on the right. By reusing the same column state and resize machinery, the graph column can resize together with the table columns while preserving the existing table behavior, including cascading column redistribution and double click reset to default sizing. I also adjusted the resize handle interaction styling so the divider stays in its hovered/highlighted state while a drag is active, which makes the drag target feel more stable and visually consistent during resizing. ### Preview https://github.com/user-attachments/assets/347eed71-0cc1-4db4-9dee-a86ee5ab6f91 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 Release Notes: - N/A or Added/Fixed/Improved ...
Anthony Eid created
555b603
Allow amend commits in FakeGitRepository even when index matches HEAD
Real git allows amend commits to rewrite the commit message even when the tree is unchanged. The fake implementation was rejecting these with 'nothing to commit', breaking git_panel::tests::test_amend.
Richard Feldman created
54cd577
Pass allow_empty: false at existing CommitOptions callsites
Richard Feldman created
a5cc6af
Expose new git operations through git_store::Repository
- Add create_worktree_detached (detached HEAD worktree creation) - Add head_sha, update_ref, delete_ref, stage_all_including_untracked - Wire allow_empty through to the commit proto and local paths
Richard Feldman created
ef6ba9d
Implement new git operations in FakeGitRepository
- Implement reset() with commit_history tracking (was unimplemented!) - Implement commit() to track history and validate allow_empty - Add FakeCommitSnapshot for commit history management - Implement update_ref, delete_ref, stage_all_including_untracked - Support Option<String> branch name in create_worktree (detached mode)
Richard Feldman created
cfb09c2
Add allow_empty to CommitOptions, detached worktree support, and new git operations
- Add allow_empty field to CommitOptions and proto CommitOptions - Change create_worktree trait method to accept Option<String> branch name (None means detached HEAD via --detach) - Add update_ref, delete_ref, and stage_all_including_untracked to the GitRepository trait with implementations for RealGitRepository
Richard Feldman created
d3435b1
Update links to troubleshooting images (#52851)
Now that I've started migrating blog content into the `zeddotdev-images` bucket, I've added a bit of structure. `/blog` `/docs` This PR just updates the links so we can stay organized going forward. Shouldn't be seeing much thrash like this after this PR. Release Notes: - N/A
Joseph T. Lyons created
66ea4b8
ep: Move pure diffing functions to zeta_prompt:udiff (#52959)
This PR mostly moves some code around. It also adds a high-level `format_expected_output` function that routes patch formatting to specific prompt formats. This was `zeta_prompt` can format `expected_output` for training. Keeping everything prompt-related in a "pure" module (with no heavy dependencies) makes it easier to write bindings. Release Notes: - N/A
Oleksiy Syvokon created
f8d6467
Fixup and test edit prediction mocks (#52991)
Follow-up of https://github.com/zed-industries/zed/pull/40185 Release Notes: - N/A
Kirill Bulatov created
c4d7004
languages: Fix C/C++ preprocessor directive highlight regression (#49031)
## Summary - PR #48109 changed the capture name for C/C++ preprocessor directives from `@keyword.directive` to `@preproc`. While semantically correct, the builtin themes had `preproc` defined with colors nearly indistinguishable from plain text (e.g. One Dark `#dce0e5ff`, Ayu Dark `#bfbdb6ff`), making `#include`, `#define`, etc. appear unhighlighted. - This PR updates the `preproc` color in all builtin themes (and the fallback theme) to match their respective `keyword` color, restoring visible highlighting for preprocessor directives. Fixes #49024 ## Side effects - Go uses `@preproc` for `//go:` and `// +build` compiler directives. These will also change from the previous muted gray to the keyword color. This is arguably an improvement — compiler directives are special constructs that benefit from visible highlighting, consistent with how other editors (CLion, VS Code) handle them. ## Test plan - [x] `cargo test -p language highlight_map` passes - [x] Open a C/C++ file and verify `#include`, `#define`, `#ifdef`, etc. are highlighted with the keyword color - [x] Verify across multiple builtin themes (One Dark, Ayu Dark, Gruvbox Dark, etc.) - [x] Open a Go file and verify `//go:` directives are highlighted reasonably 🤖 Generated with [Claude Code](https://claude.com/claude-code) Release Notes: - Fixed C/C++ preprocessor directives (`#include`, `#define`, etc.) appearing unhighlighted in builtin themes. --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: MrSubidubi <finn@zed.dev>
Wuji Chen , Claude , and MrSubidubi created
e0b9c3a
Add support for `diff.plus` and `diff.minus` highlight captures (#45459)
- Update diff in highlights.scm to use semantic @diff.plus and @diff.minus tokens - Add diff.plus, diff.minus tokens to fallback theme - Add diff syntax tokens to all official themes (One, Gruvbox, Ayu) This fixes the issue where diff files showed inverted colors (additions in purple/blue, deletions in green) by using proper semantic tokens instead of @string and @keyword. Related discussion in https://github.com/zed-industries/zed/issues/34057 (thought there might be second issue in that issue) Release Notes: - Added support for diff.plus, diff.minus and diff.deleta theme selectors in the diff syntax grammar. Previously diff.plus was mapped to @string and diff.minus was mapped to @keyword. *Before:* <img width="689" height="566" alt="Screenshot 2025-12-20 at 10 58 34 AM" src="https://github.com/user-attachments/assets/b7ae4428-2011-4ec2-a803-7e30599e1715" /> *After:* <img width="659" height="548" alt="Screenshot 2025-12-20 at 10 58 30 AM" src="https://github.com/user-attachments/assets/02df31b5-1f1a-40af-adf0-1ac34457cdd4" /> *Before:* <img width="650" height="545" alt="Screenshot 2025-12-20 at 10 58 16 AM" src="https://github.com/user-attachments/assets/78b348bd-1b91-478b-a850-8e526adcfb3c" /> *After:* <img width="627" height="563" alt="Screenshot 2025-12-20 at 10 58 21 AM" src="https://github.com/user-attachments/assets/1176d626-563f-455a-9902-137f646eb8f2" /> *Before:* <img width="628" height="550" alt="Screenshot 2025-12-20 at 10 58 06 AM" src="https://github.com/user-attachments/assets/d819f478-bb2d-4afd-8013-c4e1a2f64dfe" /> *After:* <img width="643" height="642" alt="Screenshot 2025-12-20 at 10 56 00 AM" src="https://github.com/user-attachments/assets/e0f03549-77ed-4a47-b1da-239b519b90f4" /> --------- Co-authored-by: Finn Evers <finn.evers@outlook.de> Co-authored-by: MrSubidubi <finn@zed.dev>
Bret Comnes , Finn Evers , and MrSubidubi created
a7248e8
Don't save buffers by default when running tasks (#52976)
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 Closes #52926 Follow-up to #48861 cc @SomeoneToIgnore Release Notes: - Edited buffers are no longer saved by default before running a task, but you can still configure this using the "save" field in `tasks.json`. --------- Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
Justin Su and Kirill Bulatov created
4deb400
language_core: Introduce fallback highlights (#52575)
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: - Added the option for highlights from languages to specify fallbacks. That means that if you have a pattern with the captures `@second.capture @first.capture`, Zed will first try resolving a highlight from your theme for the code fragment using the first capture, then look for the second capture if no match for the first capture could be found. --------- Co-authored-by: Kirill Bulatov <kirill@zed.dev>
Finn Evers and Kirill Bulatov created
f92b498
docs: Remove incomplete section in extension publishing steps (#52980)
Release Notes: - N/A
Finn Evers created
63b0791
agent_ui: Skip restoring external threads without metadata (#52978)
Make sure we don't try and load a thread we don't have metadata for and therefore is unlikely to exist 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
Ben Brandt created
29955a0
sidebar: Fix draft threads showing up in the sidebar in some cases (#52974)
We were inserting threads with no entries into the sidebar, when you clicked on New Thread, typed a message and then added a new project to the current workspace. We now skip persisting threads when they are empty. 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 --------- Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
Bennet Bo Fenner and Ben Brandt created
5a74733
ci: Add pull request write permissions for cherry-pick workflow (#52927)
This was missing from the previous permissions changes. 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 - [X] Performance impact has been considered and is acceptable Release Notes: - N/A
Finn Evers created
de28867
editor: Support disabling semantic token highlighting via empty rules (#52963)
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 #52882, should help #52723 According to the [Zed documentation](https://zed.dev/docs/semantic-tokens#example-disabling-a-token-type), users should be able to disable semantic highlighting for a specific token type by adding an empty rule in `settings.json`. However, the current implementation fails to respect this because its merging logic allows lower-priority default styles to "leak through" even when a matching high-priority rule is empty. This makes it impossible to selectively disable semantic tokens to reveal the underlying Tree-sitter highlighting when using "semantic_tokens": "combined". This is particularly problematic for extensions that provide specialized Tree-sitter queries which are currently being obscured by less desirable semantic tokens(#52723). This PR fixes the logic to ensure that a completely empty high-priority rule acts as an opaque override, correctly disabling semantic styling for that token type and allowing Tree-sitter highlighting to show through as intended. Release Notes: - Fixed a bug where semantic token highlighting could not be disabled via empty rules in `settings.json`.
Xin Zhao created
65e7550
helix: Fix crash while moving through selections (#52922)
Closes #51573 Closes #52852 * I believe, looking for verification of that. A very similar issue was belived to be fixed with #51642 , however it seems like there is still some edge cases that were causing crashes. These issues appeared to me to be caused by the dedup method failing to catch sub-ranges (created by entering SelectMode after the search) as duplicates. two new tests that isolate the case in 51573 and 52852 respectively. fixed vid: https://github.com/user-attachments/assets/f62d5210-6cb3-4bdf-a061-efc265eb2804 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: - helix: Fix search selection range deduplication logic
Finn Eitreim created
4eb7ae8
util: Fix `failed to load env variables` on Windows when users have custom terminal shell args (#51787)
Closes #46933 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 - [x] NO UI CHANGES Release Notes: - Fixed `Failed to load shell environment` errors on Windows when users have custom terminal shell arguments configured (e.g., cmd.exe with `/k echo Hello` or similar startup commands)
Amaan created
ffbfff3
Add visual tests to macOS CI (#52847)
This fixes three pre-existing issues in the visual test runner that were never caught because visual tests aren't run in CI. ## Fixes **1. Re-entrant read panic in sidebar creation (3 places)** `Sidebar::new` reads the `MultiWorkspace` entity, so creating it inside a `multi_workspace.update()` closure causes a `cannot read while being updated` panic. Fixed by using `update_window` with `root_view.downcast()` to get the handle without holding a mutable borrow. **2. Tooltip entity leak in breakpoint_hover test** The tooltip system has an Rc cycle (`ActiveTooltip::Visible` holds a `check_visible_and_update` closure that captures the `Rc<RefCell<Option<ActiveTooltip>>>`). This cycle is normally broken when the tooltip is dismissed, but the test closed the window while the tooltip was still visible, causing a panic from the leak detector. Fixed by simulating a click before cleanup to dismiss the tooltip. **3. Visual tests not in CI** Added a `cargo_run_visual_tests` step to the macOS test job via xtask so these tests run on every PR and regressions are caught early. Release Notes: - N/A
Richard Feldman created
3bc55a4
agent_ui: Improve auto-scroll when editing previous messages (#52876)
This PR improves the unreliability of the new top-down flow when editing previous user messages. Previously, sometimes the thread wouldn't auto-scroll as you're editing older messages and re-submitting them. It turns out, the culprit seems to be a bit of a race condition where the Stopped event (which sets the follow_tail method to false) could still be emitted a while after a generation has been stopped. So depending on time, one given possibility could happen. But now, this is what we do: - If it is still generating, that means the stop/error event is stale relative to a newer turn, so we do not run the cleanup that disables follow-tail. - If it is not generating, then it’s a real completion for the active turn, and we do the normal cleanup. --- Release Notes: - N/A
Danilo Leal created
20368ba
Collect main worktree paths on threads, and query them in the sidebar (#52945)
This PR has us collecting the main worktree path metadata for the sidebar, allows us to query by that path, and in the interim adds in logic for querying the main worktree paths. This means that, as this change percolates, there shouldn't be much difference between opening a workspace to a linked worktree, and opening a workspace to the main worktree. 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
Mikayla Maki created
3941f44
Settings profile base option (#52456)
## Context
This PR introduces a `base` field for settings profiles to allow
profiles to either overlay `user` settings or to overlay `default`,
which is simply zed's defaults (user settings are skipped). I'm not
entirely sure I love `default` because it's a bit confusing (there's a
setting called `default` but the default is `user`). Another idea I had
was `factory` (`user` (default) or `factory`) - curious to hear from the
reviewers. This will be useful for those of us who need to quickly flip
to a default state, or a default state with some customizations on top.
Additionally, from what I can tell, VS Code's profile system is more in
line with what this PR is offering in Zed - profiles overlay the default
settings, not the user's customization layer. So this will be familiar
for those users.
I've had no issue with the migrator, code is pretty simple there, but
would love for @smitbarmase to review the migration to make sure I'm not
missing something.
## Self-Review Checklist
<!-- Check before requesting review: -->
- [X] I've reviewed my own diff for quality, security, and reliability
- [x] 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)
- [X] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable
Release Notes:
- Improved the flexibility of settings profiles by offering a way for
profiles to lay atop of zed defaults, skipping user settings all
together. Settings Profiles now take the following form.
```json5
"Your Profile": {
"base": "user" // or "default"
"settings": {
// ...
},
},
```
Joseph T. Lyons created
5a7a528
Fix worktree picker confirm behavior (#52939)
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: - N/A
Mikayla Maki created
5ca0c59
Clean up worktree setup in tests (#52934)
Release Notes: - N/A --------- Co-authored-by: Eric Holk <eric@zed.dev> Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
Max Brunsfeld , Eric Holk , and Mikayla Maki created
b05a240
ep: Add the predicted kept characters metric [WIP] (#50566)
Release Notes: - N/A --------- Co-authored-by: Ben Kunkle <ben@zed.dev>
Oleksiy Syvokon and Ben Kunkle created
bbde01a
Fix a bug where the draft thread was being spuriously dropped from the sidebar (#52936)
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
Mikayla Maki created
94ea487
Fix stale buffer snapshot used in diagnostics multibuffer (#52937)
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 Release Notes: - N/A Co-authored-by: Conrad <conrad@zed.dev>
Cole Miller and Conrad created
34b8d58
sidebar: Add button to open the remote projects modal in projects picker (#52932)
This PR adds a button in the sidebar's recent projects picker to open the remote projects modal, matching how the recent project modal itself is. Here's the result: <img width="400" height="428" alt="Screenshot 2026-04-01 at 7 12@2x" src="https://github.com/user-attachments/assets/b23ff896-6d42-4ea7-92ba-9d3d092c5f03" /> Release Notes: - N/A
Danilo Leal created
d6fe14b
Fix an ordering problem that led to invalid edits in display map sync (#52930)
Co-authored-by: Cole Miller <cole@zed.dev> 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 Fixes ZED-67X Fixes ZED-50E Release Notes: - N/A Co-authored-by: Cole Miller <cole@zed.dev>
Conrad Irwin and Cole Miller created
60d6e13
Fix a bug causing incorrect remote selections in buffers (#52929)
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 Release Notes: - N/A Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Cole Miller and Conrad Irwin created
9a8de58
zed: Open About window as standalone window (#52523)
## Context Replaces the native system prompt used for "About Zed" with a custom standalone GPUI window which can open without the need for opening a Zed editor window of none are currently open. Closes #49157 ## How to Review Single file change in `crates/zed/src/zed.rs` — the `about` function is replaced by `open_about_window`. The new window deduplicates itself, matches the old layout (title, version info, Ok + Copy buttons), and closes on either button or Escape. ## Screenshots ### Old Behavior Opening the about window when no other Zed window is open will open a new empty zed window and display the about window on top: <img width="1710" height="1072" alt="image" src="https://github.com/user-attachments/assets/10a22027-4aa8-4cc9-9d91-368d76bb6a91" /> ### New Behavior If there is no open Zed window we just open an instance of the new About window: <img width="1710" height="1076" alt="image" src="https://github.com/user-attachments/assets/e55c92dc-18db-4556-83bd-1a78db754eff" /> If there is at least one open Zed window, we display the About window on top of it: <img width="1710" height="1075" alt="image" src="https://github.com/user-attachments/assets/a653e402-a107-4b50-8d09-7d50f537b36c" /> In bright mode: <img width="1710" height="1071" alt="image" src="https://github.com/user-attachments/assets/c72f8856-7152-47a6-a630-0875372a270f" /> Additionally, the ESC button will now act like clicking the Ok button and close the about window without copying its content. ## 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 - no new tests have been implemented - [x] Performance impact has been considered and is acceptable Release Notes: - Improved the About Zed dialog to open as a standalone window instead of a native system prompt --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Dario and Danilo Leal created
43ea97a
Fix license check triggering on worktree root entry changes (#52902)
Had been seeing this for some time <img width="1683" height="167" alt="bad" src="https://github.com/user-attachments/assets/bd7370c9-617a-45c2-8785-ef268444f00a" /> and the culprit turned out to be the fact that the regex matched empty strings. The fix changes the regex to ensure it stops matching empty strings, and patches the `log_err` callsite logic to avoid reading directories. Release Notes: - N/A
Kirill Bulatov created