b2f2f8d2970a4a95faaa7acc1bc21e560da2daa3
39206
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
b2f2f8d297 |
Fix first LSP server item flickering and staying highlighted when hovering between multiple language server entries in the status bar menu (#61400)
# Objective - When a submenu is open in a ContextMenu (e.g., an LSP server entry in the status bar menu), focus moves from the main menu to the submenu entity. Hovering over a different submenu trigger calls `on_hover(true)` which runs `window.focus()` to return focus to the main menu. This fires `on_focus_in`, which runs `select_toggled_or_first` → `select_first`, re-selecting the first item. The same issue occurs in `on_hover(false)` when the mouse leaves a trigger with an open submenu. ## Solution - Add a `suppress_focus_selection` flag to `ContextMenu`. Before each `window.focus()` call in `on_hover` handlers, set the flag to `true`. The `on_focus_in` callback checks this flag and skips auto-selection when focus is returning from submenu interaction. The flag is reset to `false` after each `on_focus_in` invocation. ## Testing - Tested manually by opening the LSP status bar menu with multiple running language servers and hovering between server entries. The first item no longer flickers or stays highlighted after hovering over other items. ## Showcase ### before fixed https://github.com/user-attachments/assets/26efb133-fb7e-4dbe-88b7-88d510dfd3a4 ### after fixed https://github.com/user-attachments/assets/7081c07d-d7f6-4a35-abe3-486bfba8591f ## Release Notes: - Fixed a bug where the first LSP server item would flicker and stay highlighted when hovering between multiple language server entries in the status bar menu. |
||
|
|
4ed45d1b9f |
Bump Zed to v1.14.0 (#61488)
Release Notes: - N/A Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com> |
||
|
|
98e71d9f25 |
agent: Temporarily remove sandbox feature (#61484)
see title --- Release Notes: - N/A or Added/Fixed/Improved ... --------- Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com> |
||
|
|
7dc8071ac8 |
Add wrapper type for language servers in settings (#61398)
This is in preparation for making configuration of language servers more comfortable for users/extensions. Release Notes: - N/A |
||
|
|
cb68afbd2b |
Respect disabled trailing whitespace removal (#58776)
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 #58686 Release Notes: - Fixed `.editorconfig` re-enabling trailing whitespace removal when Zed settings disable it. --------- Co-authored-by: Martin Ye <martin@zed.dev> |
||
|
|
aa2a4211a3 |
editor: Treat single punctuation as a word boundary (#58882)
## Context `next_word_end` and `previous_word_start` have a special case that skips a punctuation character so that word movement treats the punctuation as a part of the word (`|.foo` -> `.foo|`). But the check only looked at whether the next char was punctuation, not whitespace, so it skipped single punctuation marks. foo |. bar -> foo . bar| (should be `foo .| bar`) Fix: only skip the punctuation when it's next to a word char. Closes #55601 ## How to Review In any buffer, type `foo . bar`: - Cursor before `.`, alt-right -> stops after the `.` (`foo .| bar`), not at the end of `bar`. - Cursor after `.`, alt-left -> stops before the `.` (`foo |. bar`). ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed word movement skipping single punctuation characters surrounded by whitespace. --------- Co-authored-by: Martin Ye <martin@zed.dev> Co-authored-by: MartinYe1234 <52641447+MartinYe1234@users.noreply.github.com> |
||
|
|
e540e8e488 |
project: Restart context servers when their working directory changes (#61365)
# Objective Fixes #60879 Open Zed from Finder/Dock and the agent's MCP servers run from `/` instead of your project. They get spawned before any worktree exists, so there's no root to give them and they grab Zed's own cwd. The worktree shows up right after, but `maintain_servers` only restarts on a config change and the working dir isn't part of the config, so nothing kicks it. ## Solution Track each server's working dir and restart when it changes. Direction 1 from @SomeoneToIgnore's triage. Could also defer startup until the first worktree lands, happy to switch if you'd rather. ## Testing Added a test: file-only worktree (root is `None`) → start server → add a real worktree → server restarts. Fails without the fix. - Fixed agent MCP servers running from the wrong directory when started before a worktree was available |
||
|
|
24058c8659 |
editor: Fix right-click context menus failing to appear at pixel-snapped scroll positions (#61348)
# Objective Fixes #56136. The issue was initially reported while an agent was generating code. Later reports reproduced it during manual editing and with AI disabled, ruling out the agent as the cause. At fractional display scales, the editor's right-click context menu could fail to appear at specific discrete scroll positions. Scrolling one line at a time could make the menu alternate between hidden and visible, even when its anchor remained within the viewport. ## Solution The editor-specific changes in #54728 started pixel-snapping the vertical scroll position used by `EditorElement` to derive and render visible rows. However, `Editor::display_to_pixel_point` continued using the raw scroll position for its visibility check and vertical projection. When a downward pixel snap crossed an integer display-row boundary, `EditorElement` treated the preceding row as the visible range start. `display_to_pixel_point` then rejected that row as being above the raw viewport. Mouse context menu layout returned early before inspecting the actual clicked anchor, leaving the menu state present without rendering its element. This change applies the same line-height and display-scale pixel snapping in `display_to_pixel_point`. Its visibility check and coordinate projection now use the coordinate space actually rendered by the editor. A test-support-only scale-factor setter was also added so GPUI tests can exercise fractional display scaling without depending on the host display. ## Testing Added a GPUI regression test using 100 plain-text lines so the editor can scroll. The test uses a `1.25` scale factor and a `14px` font with `1.3` relative line height. The resulting `18.2px` line height is rounded to `18px`, producing exactly `22.5` device pixels per row. At a raw scroll position of one row, midpoint-toward-zero snapping maps `22.5` device pixels to `22`, or approximately `0.978` rows. This reproduces the old boundary mismatch where the snapped visible range starts at row zero while the raw visibility check starts at row one. The test pins these values with precondition assertions. Row five and an in-bounds click keep the actual source visible, while checking the rendered bounds of the `Copy` item ensures the test does not pass merely because menu state was created. Manually verified that scrolling from the start of a document no longer makes the context menu alternate between hidden and visible. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase Before: https://github.com/user-attachments/assets/e14c030f-1587-4172-aed2-fecfbfcb65ed After: https://github.com/user-attachments/assets/3080db1e-46eb-4e20-a619-b1608f233668 --- Release Notes: - Fixed editor right-click context menus intermittently failing to appear at certain scroll positions. |
||
|
|
8265635b6f |
project: Explicitly scan on git reset and fetch (#60590)
This PR fixes a bug where uncomitting would not reflect changes in the git panel, and fetching would not update the upstream ahead/behind counts in the git panel. This was especially evident on Linux which has non-recursive watches. --- Release Notes: - Fixed changes not appearing in the git panel after uncommitting - Fixed the git panel not updating ahead/behind counts after a fetch |
||
|
|
208be9b1f6 |
collab_panel: Adjust list item height across the panel (#61466)
Yet another quick follow up to https://github.com/zed-industries/zed/pull/61397, making sure the height of each item is consistent. This is particularly important so that the tree-connecting-lines that show up when you share a project or screen don't get disconnected. Release Notes: - N/A |
||
|
|
396cdc37c1 |
gpui: Defer element arena clears while an enclosing draw is in progress (#60295)
GPUI allocates every element for a draw in a single per-App bump arena, and `Arena::clear()` assumed no draw was in progress. But draws can nest: on Windows, the window procedure re-enters whenever the main thread pumps messages mid-draw (cross-thread `SendMessage` dispatch, modal message loops entered by COM/OLE calls such as clipboard reads), and on any platform a draw can be triggered from within another draw (e.g. `open_window`). When a nested draw finished, its arena clear freed and rewound memory the outer draw was still using. The `ArenaBox` validity flag only guards new derefs, so `&mut` references already held by the outer draw silently pointed into reused memory. That use-after-free corrupted element-state keys (`GlobalElementId`/`SharedString` Arcs) and heap metadata, crashing later in innocent-looking frames — seen in the wild as `EXCEPTION_ACCESS_VIOLATION_READ / 0xffffffffffffffff` in `Frame::finish` and element allocation ([ZED-9QN](https://zed-dev.sentry.io/issues/7577818040/), [ZED-7JC](https://sentry.io/organizations/zed-dev/issues/7465778926/), [ZED-7C6](https://zed-dev.sentry.io/issues/7460258444/)), plus occasional "attempted to dereference an ArenaRef after its Arena was cleared" panics (ZED-96P, ZED-8XN), Windows-dominant and spanning versions 1.1.7–1.8.2. The fix makes the arena sound under nesting: `ElementArenaScope` tracks a scope depth on the arena, and `Arena::clear()` is deferred while any scope is active — the outermost draw's clear drops both draws' allocations. Since arena chunks are stable heap blocks and allocation only appends, nested allocation was already safe; the mid-draw clear was the only destructive operation. Scopes are ended via a consuming `exit(arena)` call that asserts arena identity (by pointer comparison, never dereferencing), and `ArenaClearNeeded::clear(cx)` reaches the arena through the App, so this bookkeeping contains no unsafe code beyond what existed before. A panic that unwinds a draw balances the scope depth in the guard's `Drop`, so later clears still run; only the unwound draw's own clear token is never produced, leaving the arena populated until the next draw's clear — a one-frame leak at worst, never a use-after-free. Additionally, draws are no longer run re-entrantly: GPUI's `on_request_frame` callback skips requests that arrive while a draw is already on the thread's stack (remembering `force_render` for the next frame), and on Windows a `DrawCoordinator` owned by the platform and shared with every window additionally guards the wider `draw_window` span (presentation, IME updates). Deferred windows validate their update region (so nested message pumps don't busy-loop on WM_PAINT) and are repainted at most one vsync later by the vsync thread's existing per-tick invalidation. An integration test opens a window from within an element's paint; without the deferred clear it reproduces the exact "ArenaRef after its Arena was cleared" panic seen in the wild. Deferrals are logged so the diagnosis can be confirmed from user logs. Closes FR-110 Closes FR-114 Release Notes: - Fixed a crash on Windows caused by re-entrant window drawing corrupting UI element memory. |
||
|
|
9cbae806f2 |
editor: Do not reserve inline blame scroll width when blame is in the status bar (#61422)
## Problem When `git.inline_blame.location` is `status_bar` (anything other than `inline`), nothing is painted inline at the end of the line — yet the horizontal scroll range still reserves the longest row's inline blame width (introduced in #23374), letting the editor scroll into blank space when a line is long enough to scroll. Reported in #24752 (e.g. @Nemesis19's comment: still reproduces with `location: status_bar`). ## Fix Skip the blame width reservation in the scroll range when the blame location isn't `Inline` — one guard in the `longest_line_blame_width` closure in `element.rs`. This is independent of the soft-wrap fix for #24752 (#61319) and can land on its own. ## Test `test_status_bar_blame_location_reserves_no_scroll_width` asserts that, with a long line and no soft wrap, moving blame from inline to the status bar shrinks the horizontal scroll range (the reservation is dropped). It uses a fixed-width test `BlameRenderer`, since the default test renderer returns `None` and never exercised the reservation. Release Notes: - Fixed inline git blame reserving horizontal scroll space even when blame is displayed in the status bar |
||
|
|
f555af0236 |
docs: Add PHPantom language server configuration (#61387)
Adds documentation for **PHPantom**—a fast, Rust-based PHP language server—as a selectable language server alongside `PhpTools`, `Intelephense`, and `Phpactor`. Release Notes: - N/A --------- Co-authored-by: Kirill Bulatov <kirill@zed.dev> |
||
|
|
df5d437085 |
Disable LSP for files with very long lines (#61447)
Release Notes: - Fixed ui stutters when opening large single line files like minified javascript due to running LSP requests against them |
||
|
|
45669409fb |
gpui_web: Support configurable fetch credentials (#61460)
Adds configurable browser Fetch credential handling to `gpui_web`. `FetchHttpClient` can now use `omit`, `same-origin`, or `include`, allowing cross-origin WASM requests to send session cookies while preserving `same-origin` as the default. Release Notes: - N/A or Added/Fixed/Improved ... |
||
|
|
d5a4de9392 |
gpui_linux: Fix Wayland serial token tracking (#61454)
Closes #58651 Closes FR-123 https://github.com/zed-industries/zed/pull/50406/ while fixing one issue regressed serial tracking in Wayland. What happens is we conflated unrelated serials into a common value which is wrong. For example, `InputMethod` serial does not come from the same source as `MousePress` or `KeyPress`, and if Zed is running for a while and the user performs lots of IME commits (`zwp_text_input_v3.commit`), `InputMethod` will overtake other serial values and will be incorrectly used for clipboard authorisation/selection by the compositor such as Mutter or kWin. This will effectively poison the clipboard making Zed the indefinite owner until we kill Zed. More concretely, we use `get_latest()` on the serial tracker to extract *the largest serial REGARDLESS of kind* which is wrong since not every serial kind comes from the same pool. Release Notes: - Fixed copy-paste behaviour in Wayland. |
||
|
|
52944fa0dd |
Support loading Git commit templates when remote (#55490)
## Summary Fixes the git commit template not loading in remote (SSH) projects. The `load_commit_template_text` method in `git_store.rs` was a no-op for `RepositoryState::Remote`, always returning `Ok(None)`. This patch adds a `LoadCommitTemplate` RPC so the client can ask the remote host to read its `commit.template` git config and return the file contents — mirroring the existing `GetBlobContent` pattern. ## Changes - **`crates/proto/proto/git.proto`** — new `LoadCommitTemplate` / `LoadCommitTemplateResponse` messages. - **`crates/proto/proto/zed.proto`** — registered envelope IDs 449/450. - **`crates/proto/src/proto.rs`** — wired up message priority, request pairing, and entity-message routing. - **`crates/project/src/git_store.rs`** — added `handle_load_commit_template` on the host side; replaced the `Ok(None)` no-op on the remote side with the RPC call. ## Self-Review Checklist - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments — *no unsafe code added* - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) — *no UI changes* - [ ] Tests cover the new/changed behavior — *see "Testing notes" below* - [x] Performance impact has been considered and is acceptable — *one extra RPC on commit panel open for remote projects only; payload is a single optional string* ## Testing notes — why no automated test I did write an integration test (`test_remote_git_commit_template` in `collab/tests/integration/git_tests.rs`, modeled after `test_remote_git_head_sha`) along with the supporting changes to `FakeGitRepositoryState` (adding a `commit_template` field + `set_commit_template_for_repo` setter on `FakeFs`, since the fake hardcoded `load_commit_template` to `None`). The test compiled and the smaller crates (`fs`, `proto`, `project`) checked clean, but `cargo test -p collab --test collab_tests` cold-compile takes a very long time on my machine and I wasn't able to confirm the test actually passed locally. Rather than push a test I hadn't seen pass, I removed it. Happy to add it back in a follow-up PR (or in this one if reviewers prefer) once I can run the collab suite end-to-end — the diff is small and I can share it on request. Verification was done end-to-end manually using a Docker dev container as the SSH remote: #### Closes #55265 Video : [Screencast from 2026-05-02 18-09-03.webm](https://github.com/user-attachments/assets/9cb7f375-57fa-4af3-bde4-871c28f61efc) Release Notes: - Added support for loading git commit template messages in both remote and collab projects. --------- Co-authored-by: dino <dinojoaocosta@gmail.com> |
||
|
|
1f63fef270 |
git_panel: Adjust commit items in the history tab (#61456)
This PR is super small mostly adjusting a few things in the commit item within the history tab: author label truncation, tooltip label/description, and unpushed arrow icon design. Release Notes: - N/A |
||
|
|
0cfa50afdc |
vim: Set [ and ] marks to paste destination (#56593)
Previously, the `[` and `]` marks always pointed to the yank source location. After a paste operation, they now correctly point to the start and end of the pasted text in the destination buffer. This enables workflows like `v]` to select just-pasted text, and fixes the `gp` keymap pattern shown in the issue. Closes https://github.com/zed-industries/zed/issues/56404 Release Notes: - vim: Made `[` and `]` marks point to the start and end of pasted text after a paste operation. --------- Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com> Co-authored-by: Tom Houlé <tom@tomhoule.com> |
||
|
|
4a039eac0c |
collab_panel: Adjust pressed state of the channel item (#61453)
Yet another follow up to https://github.com/zed-industries/zed/pull/61423 simplifying the design even further. Release Notes: - N/A |
||
|
|
859a63ef2d |
Set the default value of tsserver to 8 GiB instead of 7.9 GiB (#61406)
Correct memory values: 8 GiB limit (8192) and tsserver max memory set to 16384 for TypeScript and JavaScript examples. # Objective - Standardized memory values. ## Testing - This commit not be tested. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [X] Tests cover the new/changed behavior - [X] Performance impact has been considered and is acceptable Release Notes: - N/A |
||
|
|
a56f9e6eae |
Remove stale musl linker error workaround from Linux dev docs (#61444)
# Objective - The Linux dev docs document a workaround for a musl/aws-lc-rs linker error (`undefined reference to __isoc23_sscanf` / `__isoc23_strtol`) that no longer applies now that the root cause is fixed. ## Solution - #61203 fixed the underlying issue directly in `script/bundle-linux` by setting `CC_<target>=musl-gcc` when building the musl `remote_server` target, so the documented workaround (`REMOTE_SERVER_TARGET=x86_64-unknown-linux-gnu`) is stale and misleading. This PR removes it. ## Testing - Did you test these changes? If so, how? — Confirmed the removed note referenced the exact linker error fixed by #61203, and that no other docs reference the removed workaround. - Are there any parts that need more testing? — No, this is a docs-only removal. - How can other people (reviewers) test your changes? Is there anything specific they need to know? — Review the diff; confirm `script/install-linux` no longer hits this error after #61203. - If relevant, what platforms did you test these changes on, and are there any important ones you can't test? — N/A, docs-only change. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - N/A Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
a705ed4eff |
Fix musl linking failure in bundle-linux by setting CC for musl target (#61203)
Fixes https://github.com/zed-industries/zed/issues/24880
# Objective
"Assisted/analysed by AI"
> The remote_server musl build failed with undefined references to
__isoc23_sscanf and __isoc23_strtol from aws-lc-sys because the default
C compiler used glibc headers while linking against musl libc. Setting
CC_<target>=musl-gcc ensures C dependencies compile with musl headers.
I have tested the fix, and it seems to have fixed the compilation issue
I faced on Fedora 44, without resorting to the [hack noted in
docs](https://zed.dev/docs/development/linux#installing-a-development-build).
Initially reported in this
[issue](https://github.com/zed-industries/zed/issues/24880).
I'd want someone with expertise in the domain to take a look at this
fix, as from what I understand, the process in the doc is a hacky
workaround.
## Solution
Setting CC_<target>=musl-gcc ensures C dependencies compile with musl
headers.
## Testing
- Did you test these changes? If so, how?
<details><summary>Here's my steps to repro:</summary>
1. install [toolbox](https://github.com/containers/toolbox) (or
podman-toolbox)
(I used toolbox as it's easy to reuse the cloned repo, as the whole home
dir is mounted in the devcontainer)
Used the main branch - commit
|
||
|
|
1cd105ee93 |
markdown_preview: Fix relative links in remote Markdown subfolders (#61438)
Closes #58270 In remote projects, Markdown previews resolved relative links from the project root instead of the Markdown file's folder. Links worked for files in the root but could fail or open the wrong file for files in subfolders. Zed now resolves these links from the Markdown file's folder. The fix updates base path handling in `open_url_or_file`. Only Markdown Preview passes a base path to this function. I tested it on macOS with a Linux SSH host and on Windows with WSL. Release Notes: - Fixed relative links in Markdown previews for files in subfolders when using SSH or WSL. |
||
|
|
185c6986da |
Add gutter action to clear run status (#61375)
# Objective Add a way to manually clear completed run statuses from the gutter. Folow-up to #61095 This follows up on feedback from the previous gutter run status PR. Currently, editing a file clears run statuses automatically, but there was no direct way to clear a completed status without changing the file. ## Solution - Added a `Clear Run Status` entry to the gutter context menu. - Show the entry only when the row has a completed run status. - Clear the stored run status for that runnable when selected. - Keep running statuses unchanged, so this does not behave like task cancellation. ## Testing - Ran `cargo check -p editor`. - Manually ran a test from the gutter and waited for a completed status. - Verified right-clicking the gutter icon shows `Clear Run Status`. - Verified selecting `Clear Run Status` clears the status icon. - Verified the action is not shown for rows without a completed run status. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable [after.webm](https://github.com/user-attachments/assets/1ae284e1-03b1-4842-a63e-9d66c290b325) --- Release Notes: - Improved gutter run statuses by allowing completed statuses to be cleared from the gutter context menu. |
||
|
|
870ffffcd8 |
Fix git file context menu focus issue (#61339)
## Objective #61331 Ensure the Git panel receives focus when a file context menu is opened. Previously, focusing the menu immediately could prevent the Git panel from becoming focused. ## Solution Defer focusing the context menu’s focus handle until the next window update cycle. This allows the menu to be established before focus is applied, preserving expected focus behavior in the Git panel. ## Testing - Automated tests were not run. - The change should be manually tested by opening a file context menu from the Git panel and confirming the Git panel remains focused and keyboard interaction with the menu works as expected. - This is a UI focus change and should be verified on supported desktop platforms. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase ### Previously https://github.com/user-attachments/assets/28fb7f9b-3e1f-4939-a8ae-13b33ac0d805 ### Now https://github.com/user-attachments/assets/d85e7459-d260-41bc-955c-37a269be23c1 Release Notes: - Fixed Git panel focus when opening a file context menu |
||
|
|
9930a1da04 |
terminal: Keep alternate screen bottom-aligned (#61325)
# Objective Fixes #61236 ## Solution This regression was introduced by #56715, which switches the alignment based on whether the last row contains any content. However, this logic can cause issues in the alternate screen. This PR fixes the problem by excluding the alternate screen from the detection logic. ## Testing Open Zed’s integrated terminal and run a program that uses the alternate screen, such as Vim or Helix. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase https://github.com/user-attachments/assets/ffc1ca56-596a-439a-8672-12868f9dc112 --- Release Notes: - Fixed flickering in the integrated terminal when using the alternate screen. |
||
|
|
e78adfd9ab |
Picker: Support child and parent navigation ( menu::SelectChild and menu::SelectParent in PickerDelegate ) fixes (#61053) (#61314)
# Objective - Provides directory navigation (forward and backward) inside the built-in system file finder / path prompt using keyboard shortcuts. - Fixes #61053 ## Solution 1. Extended `PickerDelegate` trait with `select_child` and `select_parent` methods following conventions from other methods such as `confirm_completion` (defaulting to `None`) 2. Implemented the new delegate methods inside `OpenPathDelegate`: - `select_child`: Finds the selected directory candidate, appends it to the current path query, and appends the path separator. - `select_parent`: Moves upwards by trimming the current directory and getting the parent directory path. 3. Added listeners for `Self::select_child` and `Self::select_parent` in the `/crates/picker/src/render.rs` ## Testing - Did you test these changes? If so, how? I actually went ahead and changed the keybindings in `/assets/keymaps/default-macos.json` as shown : ```json { "context": "Picker > Editor", "use_key_equivalents": true, "bindings": { "escape": "menu::Cancel", "up": "menu::SelectPrevious", "down": "menu::SelectNext", // I binded to shift arrow because I wanted to keep the cursor movement still relevant "shift-left": "menu::SelectParent",// shift left "shift-right": "menu::SelectChild",// shift right "tab": "picker::ConfirmCompletion", "alt-enter": ["picker::ConfirmInput", { "secondary": false }], "cmd-alt-enter": ["picker::ConfirmInput", { "secondary": true }] // Picker bindings (TogglePreview, SetPreviewRight/Below/Hidden, // ToggleActionsMenu) live in keymaps/specific-overrides-macos.json, which // is loaded after the base keymap so they win over conflicting base-keymap // Editor bindings. } }, ``` Then I did manual testing as shown in the Showcase Section. I did not push this change as I was not sure if this was required as the bug was about adding support for child and parent navigation. - Are there any parts that need more testing? - How can other people (reviewers) test your changes? Is there anything specific they need to know? This is my first Pull Request in a large Open Source Repository, so any feedback on testing conventions or additional edge cases would be especially helpful. - If relevant, what platforms did you test these changes on, and are there any important ones you can't test? ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [ ] Performance impact has been considered and is acceptable ## Showcase <img width="2404" height="1136" alt="Screen Recording 2026-07-20 at 12 52 06 AM" src="https://github.com/user-attachments/assets/462e382d-5396-4a01-b75f-0199612cd062" /> --- Release Notes: - Fixed child and parent directory navigation in the built-in folder finder using the left and right arrow keys. --------- Co-authored-by: Christopher Biscardi <chris@christopherbiscardi.com> |
||
|
|
b7e1f5026b |
editor: Disable gutter breakpoint and bookmark actions in unsaved buf… (#61310)
## Context Closes #58818 Breakpoints and bookmarks are keyed by a buffer's absolute file path. In an unsaved (untitled) buffer there is no worktree file, so both `BreakpointStore::toggle_breakpoint` and `BookmarkStore::toggle_bookmark` early-return and do nothing. The gutter still offered the affordances, so clicking (or cmd-clicking) the gutter hover button, or picking an entry from the gutter right-click menu, silently did nothing. Rather than support these actions on unsaved buffers, this hides them: the gutter hover button and the gutter context menu are both suppressed for buffers without a worktree file, matching the store-level eligibility check (`project::File::from_dyn(...).is_some()`). The buffer is resolved per row via `anchor_to_buffer_anchor`, so multibuffers with a mix of saved and unsaved excerpts behave correctly. Manual test after the changes : [Screencast from 2026-07-19 18-46-26.webm](https://github.com/user-attachments/assets/d1fe6704-3843-49bb-bcd6-d84ecdd4f19d) ## How to Review **`crates/editor/src/element/mouse.rs`** In the gutter hover-button computation in `mouse_moved`, the existing `anchor_to_buffer_anchor(...).is_some()` guard is tightened to also require the resolved buffer to have a worktree file. When the row belongs to an unsaved buffer the button state stays `None` and the debounce task is never armed, so the add-breakpoint/add-bookmark button no longer appears. This is the single writer of `gutter_hover_button`, and it recomputes on every mouse move, so a buffer that later gets saved picks up the button again immediately. **`crates/editor/src/editor.rs`** `set_gutter_context_menu` now binds the multibuffer snapshot once, computes the effective anchor, and returns early when that anchor's buffer is not file-backed, so no menu is opened. This is the shared choke point for all three ways the menu can open (gutter background right-click, breakpoint-marker right-click, bookmark-marker right-click), so every store-backed entry (Set/Unset Breakpoint, log/condition/hit-condition, Enable/Disable, Add/Remove Bookmark, Edit Bookmark, Run to Cursor) and the file-meaningless Git Blame entry are all suppressed together. `gutter_context_menu` itself is unchanged. **`crates/editor/src/editor_tests.rs`** Adds a shared `build_gutter_hover_test_editor(saved)` helper that builds either a saved-file editor or an untitled-buffer editor (via `Project::create_buffer`), plus small helpers that draw the window and simulate a mouse move / right-click over row 0 of the gutter hitbox. Four tests cover both surfaces on both buffer kinds: `test_gutter_hover_button_shown_for_saved_buffer` / `test_gutter_hover_button_hidden_for_unsaved_buffer` (asserting the hover button state and its activation debounce), and `test_gutter_context_menu_shown_for_saved_buffer` / `test_gutter_context_menu_hidden_for_unsaved_buffer` (asserting `mouse_context_menu` opens only for the saved buffer). The saved-buffer tests act as positive controls so the negative tests cannot pass vacuously. ## 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 - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed the gutter offering breakpoint and bookmark actions in unsaved buffers, where they could not take effect |
||
|
|
24237d2df5 |
recent_projects: Fix open folder keybinding (#61305)
# Objective Closes #58986 This PR fixes `Ctrl-K Ctrl-O` opening a file picker while the Recent Projects picker is focused. The keymaps globally bind `Ctrl-O` to `workspace::OpenFiles` and `Ctrl-K Ctrl-O` to `workspace::Open` The Recent Projects context also binds `Ctrl-K` to toggle its actions menu. The more specific binding ate `Ctrl-K` stopping the global `Ctrl-K Ctrl-O` bind occuring. ## Solution Add a `RecentProjects`-specific `Ctrl-K Ctrl-O` binding to `workspace::Open` after the existing contextual `Ctrl-K` binding. This matches the action associated with “Open Local Folders,” including its multiple-selection and open-mode behavior. macOS is unchanged because its primary `Cmd-O` shortcut already maps to `workspace::Open`. ## Testing Try #58986, then this. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed `Ctrl-K Ctrl-O` opening a file picker instead of the local folder picker from Recent Projects. |
||
|
|
750848adb9 |
Fix workspace::ReopenLastPicker action when which_key helper is enabled (#61002)
# Objective Fixes #60612 `workspace::ReopenLastPicker` should open the stashed picker _after_ the active model is dismissed ## Solution Queue reopen requests when another modal is active, then reveal the stashed modal after `hide_modal` clears the layer. Reset queued reveals when explicitly opening a new modal. ## Testing Confirmed `ReopenLastPicker` keybind working even when which_key is enabled with delay=`0ms`. Tested with file_finder and text_finder. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Fixed `workspace::ReopenLastPicker` when `which_key` helper menu is enabled Co-authored-by: Yara 🏳️⚧️ <git@yara.blue> |
||
|
|
fbda4f862a |
collab_panel: Fix pressed state of the channel item (#61423)
Quick follow up to https://github.com/zed-industries/zed/pull/61397, where there was a bug in background color for the extra controls on each item flashing as a click on any item's disclosure occurred. Release Notes: - N/A |
||
|
|
502cfeb9c3 |
collab_panel: Add indentation guides and some other design adjustements (#61397)
This PR converts the collab panel list from a GPUI list into a uniform list, which was a requirement for the indent guides to be displayed. I have been wanting to add that to the channels list for a while, and finally carved out some time. Ended up adding some more tweaks here and there as overall improvements (e.g., using a lock icon for private icons) and to make the indent guide fully work design-wise given we have the chevron buttons rendering on top of them. Here's how it looks: <img width="600" alt="Screenshot 2026-07-21 at 10 08@2x" src="https://github.com/user-attachments/assets/351b7e0f-aeb4-4c79-8177-7f1cdf635fbe" /> Release Notes: - N/A --------- Co-authored-by: MrSubidubi <finn@zed.dev> |
||
|
|
3375c7b6c0 |
Revert "gpui_web: Only cancel the native context menu when the app claims the right-click" (#61403)
Reverts zed-industries/zed#60892 Realised this is probably not the desired behavior. Context menu is not really useful when the app is full canvas. I think it's better to not have the browser context menu on web at all. My bad and sorry for the hassle! |
||
|
|
8c1364c8ca |
Fix toggling diagnostics off not allowing to toggle them back (#60963)
# Objective This change fixes an issue where once a single file has had it diagnostics disabled, it will permenently make re-enabling diagnostics in that specific file, no longer possible by either command or keybind. This fixes issue #60958. ## Solution This solution is quite simple. The logic used for registering the action in the editor used a one way flip. The editor read the `cx` and then checked its `diagnostics_enabled()` and `inline_diagnostics_enabled()` and if they were disabled they would not register the corrosponding `Editor::toggle_diagnostics` and `Editor::toggle_inline_diagnostics` respectively. This meant once toggled off, the editor was no longer able to register the action as it was already disabled, and thus made the "toggle" part impossible. The fix simply removes the state checks for the current editor and will leave the actions registered. ## Testing This has been both manualy tested as well as had an `editor_tests.rs` test added. Simply taking in the the `EditorTestContext`, then checks the starting state, then toggles the diagnostics off and checks that it correctly shows the state change, and then proceeds to re-enable the diagnostics state, and check its again to make sure the appropriate state has been set. I manually tested this on windows_11_x64/x86(Desktop), archlinux_7.0.10_x64/x86(Laptop), and it has **not** been tested on my mac mini **yet**. However, the change 'should' be platform agnostic. If someone wants to review this, they can simply open their settings file with the JSONC lsp `on` and then disable their diagnostics and then, the option to re-enable them, toggle, will now show up and also be able to be executed by the keybinds too. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase <details> <summary>Click to view showcase</summary> Original Behaviour: [Zed Diagnostic Toggle (Original Behaviour).webm](https://github.com/user-attachments/assets/bca860cd-f7e9-42b9-9456-56b9b1d2604f) New Behaviour: [Zed Diagnostic Toggle (New Behaviour).webm](https://github.com/user-attachments/assets/e3629491-abb5-4e29-95ab-e8f0464db726) </details> --- Release Notes: - Fixed `editor::ToggleDiagnostics` & `editor: toggle diagnostics` permanently turning off diagnostics for the current file/editor, addressing issue #60958. --------- Signed-off-by: Counterfit IQ <logicye@proton.me> Co-authored-by: Kirill Bulatov <kirill@zed.dev> |
||
|
|
8b2baadb09 |
lsp: Show request durations in RPC messages (#61018)
Language server performance issues can be difficult to diagnose because request timings are not shown alongside the corresponding JSON-RPC traffic. Annotate responses in the "LSP Logs / RPC Messages" view with their end-to-end duration, making it easier to identify slow methods, latency outliers, and cancellation behavior in the language server process launched by Zed. Capture timestamps at the transport boundary, correlate decoded request IDs separately by direction, preserve timing across cancellation, bound stale request tracking, and forward host-measured durations to remote clients. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and relxability - [x] Unsafe blocks (if any) have justifying comments - [x] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase <details> <summary>Example trace</summary> ``` // Send: {"jsonrpc":"2.0","id":61,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"position":{"line":378,"character":3}}} // Receive (took 7.698042ms): {"jsonrpc":"2.0","id":61,"result":[]} // Send: {"jsonrpc":"2.0","id":62,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"range":{"start":{"line":378,"character":3},"end":{"line":378,"character":3}},"context":{"diagnostics":[]}}} // Receive (took 5.632167ms): {"jsonrpc":"2.0","id":62,"result":[{"title":"Show macro expansion for `@static`","command":{"title":"Show macro expansion for `@static`","command":"jetls.openMacroExpansion","arguments":["jetls-macro-expansion:/macro-expanded.jl?source=file%253A%252F%252F%252FUsers%252Faviatesk%252Fjulia%252Fpackages%252Fworktrees%252FJETLS%252Fplacid-wren%252FJETLS%252Fsrc%252Fanalysis%252FAnalyzer.jl&start=14278&stop=15609"]}},{"title":"Expand all macros in this top-level form","command":{"title":"Expand all macros in this top-level form","command":"jetls.openMacroExpansion","arguments":["jetls-macro-expansion:/macro-expanded.jl?source=file%253A%252F%252F%252FUsers%252Faviatesk%252Fjulia%252Fpackages%252Fworktrees%252FJETLS%252Fplacid-wren%252FJETLS%252Fsrc%252Fanalysis%252FAnalyzer.jl&start=14278&stop=15609&mode=toplevel"]}},{"title":"Show inferred type annotations","command":{"title":"Show inferred type annotations","command":"jetls.openTypeAnnotation","arguments":["jetls-type-annotation:/type-annotated.jl?source=file%253A%252F%252F%252FUsers%252Faviatesk%252Fjulia%252Fpackages%252Fworktrees%252FJETLS%252Fplacid-wren%252FJETLS%252Fsrc%252Fanalysis%252FAnalyzer.jl&start=14278&stop=15609"]}}]} // Send: {"jsonrpc":"2.0","id":63,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"position":{"line":379,"character":3}}} // Receive (took 3.473792ms): {"jsonrpc":"2.0","id":63,"result":[]} // Send: {"jsonrpc":"2.0","id":64,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"range":{"start":{"line":379,"character":3},"end":{"line":379,"character":3}},"context":{"diagnostics":[]}}} // Receive (took 4.472375ms): {"jsonrpc":"2.0","id":64,"result":[{"title":"Show macro expansion for `@static`","command":{"title":"Show macro expansion for `@static`","command":"jetls.openMacroExpansion","arguments":["jetls-macro-expansion:/macro-expanded.jl?source=file%253A%252F%252F%252FUsers%252Faviatesk%252Fjulia%252Fpackages%252Fworktrees%252FJETLS%252Fplacid-wren%252FJETLS%252Fsrc%252Fanalysis%252FAnalyzer.jl&start=14278&stop=15609"]}},{"title":"Expand all macros in this top-level form","command":{"title":"Expand all macros in this top-level form","command":"jetls.openMacroExpansion","arguments":["jetls-macro-expansion:/macro-expanded.jl?source=file%253A%252F%252F%252FUsers%252Faviatesk%252Fjulia%252Fpackages%252Fworktrees%252FJETLS%252Fplacid-wren%252FJETLS%252Fsrc%252Fanalysis%252FAnalyzer.jl&start=14278&stop=15609&mode=toplevel"]}},{"title":"Show inferred type annotations","command":{"title":"Show inferred type annotations","command":"jetls.openTypeAnnotation","arguments":["jetls-type-annotation:/type-annotated.jl?source=file%253A%252F%252F%252FUsers%252Faviatesk%252Fjulia%252Fpackages%252Fworktrees%252FJETLS%252Fplacid-wren%252FJETLS%252Fsrc%252Fanalysis%252FAnalyzer.jl&start=14278&stop=15609"]}}]} // Send: {"jsonrpc":"2.0","id":65,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"position":{"line":380,"character":0}}} // Receive (took 1.186541ms): {"jsonrpc":"2.0","id":65,"result":[]} // Send: {"jsonrpc":"2.0","id":66,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"range":{"start":{"line":380,"character":0},"end":{"line":380,"character":0}},"context":{"diagnostics":[]}}} // Receive (took 2.552708ms): {"jsonrpc":"2.0","id":66,"result":[]} // Send: {"jsonrpc":"2.0","id":67,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"position":{"line":401,"character":0}}} // Receive (took 1.490084ms): {"jsonrpc":"2.0","id":67,"result":[]} // Send: {"jsonrpc":"2.0","id":68,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"range":{"start":{"line":401,"character":0},"end":{"line":401,"character":0}},"context":{"diagnostics":[]}}} // Receive (took 2.819125ms): {"jsonrpc":"2.0","id":68,"result":[]} // Send: {"jsonrpc":"2.0","id":69,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"position":{"line":400,"character":0}}} // Receive (took 3.501375ms): {"jsonrpc":"2.0","id":69,"result":[]} // Send: {"jsonrpc":"2.0","id":70,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"position":{"line":399,"character":0}}} // Receive (took 2.903333ms): {"jsonrpc":"2.0","id":70,"result":[]} // Send: {"jsonrpc":"2.0","id":71,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"position":{"line":399,"character":14}}} // Receive (took 3.166ms): {"jsonrpc":"2.0","id":71,"result":[{"range":{"start":{"line":389,"character":19},"end":{"line":389,"character":22}},"kind":3},{"range":{"start":{"line":399,"character":11},"end":{"line":399,"character":14}},"kind":2}]} // Send: {"jsonrpc":"2.0","id":72,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"range":{"start":{"line":399,"character":14},"end":{"line":399,"character":14}},"context":{"diagnostics":[]}}} // Receive (took 3.169625ms): {"jsonrpc":"2.0","id":72,"result":[{"title":"Show inferred type annotations","command":{"title":"Show inferred type annotations","command":"jetls.openTypeAnnotation","arguments":["jetls-type-annotation:/type-annotated.jl?source=file%253A%252F%252F%252FUsers%252Faviatesk%252Fjulia%252Fpackages%252Fworktrees%252FJETLS%252Fplacid-wren%252FJETLS%252Fsrc%252Fanalysis%252FAnalyzer.jl&start=15676&stop=16556"]}}]} // Send: {"jsonrpc":"2.0","id":73,"method":"textDocument/hover","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"position":{"line":399,"character":14}}} // Receive (took 1.234396208s): {"jsonrpc":"2.0","id":73,"result":{"contents":{"kind":"markdown","value":"```julia\n(local) ret :: Compiler.RTEffects # Core.PartialStruct(Compiler.RTEffects, Any[Any, Any, Compiler.Effects, Core.Const(nothing)])\n```\n"},"range":{"start":{"line":399,"character":11},"end":{"line":399,"character":14}}}} // Send: {"jsonrpc":"2.0","id":74,"method":"textDocument/hover","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"position":{"line":399,"character":14}}} // Receive (took 11.429875ms): {"jsonrpc":"2.0","id":74,"result":{"contents":{"kind":"markdown","value":"```julia\n(local) ret :: Compiler.RTEffects # Core.PartialStruct(Compiler.RTEffects, Any[Any, Any, Compiler.Effects, Core.Const(nothing)])\n```\n"},"range":{"start":{"line":399,"character":11},"end":{"line":399,"character":14}}}} // Send: {"jsonrpc":"2.0","id":75,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"position":{"line":401,"character":0}}} // Receive (took 1.098667ms): {"jsonrpc":"2.0","id":75,"result":[]} // Send: {"jsonrpc":"2.0","id":76,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///Users/aviatesk/julia/packages/worktrees/JETLS/placid-wren/JETLS/src/analysis/Analyzer.jl"},"range":{"start":{"line":401,"character":0},"end":{"line":401,"character":0}},"context":{"diagnostics":[]}}} // Receive (took 4.117459ms): {"jsonrpc":"2.0","id":76,"result":[]} ``` </details> --- Release Notes: - Improved LSP Logs by showing request durations alongside RPC responses, making slow language server behavior easier to diagnose. --------- Co-authored-by: Kirill Bulatov <kirill@zed.dev> |
||
|
|
4ee16d3650 |
Fix the macOS tests that hang locally (#61407)
See also https://github.com/zed-industries/notify/pull/9 <img width="2088" height="266" alt="image" src="https://github.com/user-attachments/assets/f4bc0b5c-76a9-424a-9abc-abde6e56b9db" /> Release Notes: - N/A |
||
|
|
86ffaa94fd |
acp: Update agent-client-protocol to 1.3.0 (#61404)
Brings in some bug fixes from upstream. Release Notes: - N/A |
||
|
|
29352df500 |
Update first responders notifier for repo label rename (#61402)
`priority:*` labels in the github repository are becoming `severity:*`, and `frequency:*` — `reach:*`. This commit will update the slack notifications for the first responders accordingly. Also, delete the github-label-issues-to-triage.py one-off script, which worked with the old label names and is by now too distant in the past to be useful as reference or anything. Release Notes: - N/A |
||
|
|
298b3e8d7b |
Open relative file links at line numbers (#61006)
## Summary - Open relative file links with GitHub-style line fragments at the referenced line - Support line navigation from agent responses and Markdown previews - Preserve decoded-first path resolution with literal percent-escape fallback ## Testing - cargo test -q -p util test_source_line_from_fragment -- --nocapture - cargo test -q -p acp_thread test_hyperlink_percent_escapes_are_decoded -- --nocapture - cargo test -q -p agent_ui test_open_link -- --nocapture - cargo test -q -p markdown_preview -- --nocapture - cargo fmt --all -- --check Release Notes: - Improved relative file links with line numbers to open at the referenced line. |
||
|
|
50b773f78e |
Add reasoning effort support for Mistral models (#61393)
# Objective Follow-up to #60898 (as suggested by @tomhoule ). That PR marked `mistral-medium-latest` as supporting thinking, but the flag is currently a no-op: unlike Magistral, whose reasoning was native, Mistral Medium 3.5 and Small 4 only emit thinking chunks when the request sets `reasoning_effort: "high"` (see [Mistral's reasoning docs](https://docs.mistral.ai/studio-api/conversations/reasoning)), and the `Request` struct had no such field. Related: #57581 ## Solution - Add a `ReasoningEffort` enum and an optional `reasoning_effort` field to the Mistral `Request`. The field is skipped during serialization when `None`, so requests for non-reasoning models (Codestral, Large, Ministrals) are byte-identical to before. - Set `reasoning_effort: "high"` in `into_mistral()` when the model supports thinking and the request allows it. The rest of the pipeline already works: `MistralEventMapper` handles `MessagePart::Thinking` deltas, and `into_mistral` replays thinking parts into history, matching Mistral's requirement to replay the reasoning trace across turns. - Add `mistral-small-latest` to `supports_thinking()`: it now points to Mistral Small 4, a hybrid reasoning model like Medium 3.5. - Cover the Ministral variants in `Model::from_id()`, which previously rejected `ministral-3b-latest` / `ministral-8b-latest` / `ministral-14b-latest` as invalid ids even though the enum defines them. ## Testing - Added `test_into_mistral_reasoning_effort` covering the three cases: thinking model with thinking allowed (sends `high`), thinking model with thinking disallowed (omits the field), and non-thinking model (omits the field). - Existing Mistral provider tests pass (`cargo test -p language_models mistral`); both touched crates are clippy-clean. - Reviewers can test by configuring a Mistral API key, selecting `mistral-medium-latest` or `mistral-small-latest` in the agent panel, and confirming thinking blocks stream in; with a non-reasoning model like Codestral, requests are unchanged. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [ ] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Fixed thinking not being triggered for Mistral Medium 3.5 and Mistral Small 4, and fixed custom Mistral configurations rejecting Ministral model ids |
||
|
|
9be89faf6a |
thread_view: Make thinking icon color consistent (#61399)
Tiny tiny tweak just adjusting the thinking icon color so its consistent with the fast mode icon. Icons that are _toggled_ on and off should be displayed in a colorful way so its obvious in which state they're in. --- Release Notes: - N/A |
||
|
|
b4ae33f7fd |
Fix Devcontainer bugs/spec mismatches (#59020)
When testing Zed on our team's Devcontainer I found some missing features/bugs/spec mismatches. Commit messages were written by hand, code reviewed and tested manually, but everything was written by Claude/Codex based on: - https://github.com/devcontainers/cli - https://github.com/devcontainers/spec The main use case of the metadata is that you can `devcontainer exec` and `devcontainer up` into a container Zed started (and vice versa). The same with VSCode, it will reuse Zed's created devcontainer correctly now. This is useful when using LLMs so they can run commands in the same devcontainer you have open. 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed Dev Container compatibility and lifecycle behavior. |
||
|
|
44df53c15d |
thread_view: Fix overflow of placeholder text and message editor controls (#61395)
# Objective Fixes #61391 Fixes #60876 Fix Agent Panel prompt text and controls being clipped when the panel is narrow. ## Solution - Allow the message editor and ACP configuration controls to shrink and wrap. - Use a dynamic minimum panel width based on the active Agent's prompt text. - Cap that dynamic width so long prompts, such as Zed Agent's, do not prevent the panel from being resized narrower. ## Testing - `cargo fmt --all -- --check` - `cargo check -p agent_ui` - `cargo test -p agent_ui --lib conversation_view::tests::test_restored_threads_keep_available_commands` - `cargo test -p agent_ui --lib config_options::tests` Manual UI testing is still recommended for Zed Agent and third-party Agent Panels at narrow widths. ## 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 adheres to Zed's UI standards - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase https://github.com/user-attachments/assets/71825d64-6e5d-40fe-98a4-dcb13903e06b --- Release Notes: - Agent: Fixed agent panel placeholder and controls overflowing when the panel width was narrow. --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com> |
||
|
|
dc0c66cfeb |
cloud_api_client: Implement Wasm support (#61328)
Release Notes: - N/A or Added/Fixed/Improved ... --------- Co-authored-by: Gaauwe Rombouts <mail@grombouts.nl> |
||
|
|
abfced8e47 |
image_viewer: Allow setting a custom zoom level (#57215)
Allows you to click on the zoom percent to edit it. Right clicking the percentage resets to 100%. 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: - Added support for editing image viewer zoom levels directly from the toolbar. --------- Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com> |
||
|
|
a835731451 |
file_finder: Debounce file finder refreshes on worktree updates (#60451)
# Objective Delay picker refreshes for entry updates so bursty filesystem events trigger only one search refresh, while still refreshing immediately when worktrees are added or removed. Update tests to advance both the watch latency and refresh debounce, and add coverage for coalesced worktree updates. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - N/A --------- Co-authored-by: Kirill Bulatov <mail4score@gmail.com> |
||
|
|
8b8c03e3fb |
Improve bogus brackets filtering (#60364)
Closes https://github.com/zed-industries/zed/issues/59298 Left — before, right — after: <img width="1604" height="1001" alt="Screenshot 2026-07-03 at 19 45 45" src="https://github.com/user-attachments/assets/cc43b639-8fbe-4951-9da8-4b1e9482ca39" /> Release Notes: - Fixed incorrect rainbow brackets highlights in certain cases |
||
|
|
32adc59cb7 |
Surround selection with backticks in Rust, C, and C++ comments (#58674)
Typing a backtick over selected text in Rust, C, and C++ comments replaced the selection instead of wrapping it. Markdown already supports this via its backtick bracket pair. Add a backtick bracket pair for these languages: - `surround = true` wraps selections in backticks - `close = false` avoids auto-closing lone backticks - `not_in = ["string"]` enables it in comments but not strings 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) - [X] Tests cover the new/changed behavior - [X] Performance impact has been considered and is acceptable Closes #58538 Release Notes: - Added support for surrounding selected text with backticks in Rust, C, and C++ --------- Co-authored-by: dino <dinojoaocosta@gmail.com> |
||
|
|
1806aee21f |
Autocomplete language names in file_types setting (#58595)
## Context Closes #58571 When editing `settings.json`, typing a new key under `languages` triggers language-name autocomplete. The same did not work for `file_types`, even though both keys map language names to configuration. The root cause: the JSON schema generator uses `replace_subschema` to inject installed language names as the allowed properties of a named type. The `languages` field backed by `LanguageToSettingsMap` (a named newtype) got this treatment; `file_types` was backed by a raw `HashMap<Arc<str>, ExtendingVec<String>>` with no named type to target. The fix introduces a `FileTypeMap` newtype parallel to `LanguageToSettingsMap` and wires it into the same schema-injection path. Video of manual test below : [Screencast from 2026-06-05 00-04-16.webm](https://github.com/user-attachments/assets/5d8afb60-d566-4c99-ad2a-66ebbb47ed2e) ## How to Review - `crates/settings_content/src/language.rs` : Adds `FileTypeMap(HashMap<Arc<str>, ExtendingVec<String>>)` with the full set of derives (`Debug`, `Clone`, `Default`, `PartialEq`, `Serialize`, `Deserialize`, `JsonSchema`, `MergeFrom`) and an `IntoIterator for &FileTypeMap` impl so existing call sites (`all_languages.file_types.iter().flatten()`) continue to work without changes. Changes the `file_types` field in `AllLanguageSettingsContent` from the raw HashMap to `Option<FileTypeMap>`. - `crates/settings/src/settings_store.rs` : In `configure_schema_generator`, adds a `replace_subschema::<FileTypeMap>` call mirroring the existing `LanguageToSettingsMap` one: injects installed language names as the allowed properties, with `ExtendingVec<String>` (array of glob patterns) as the value schema. Adds `test_file_types_schema_generation` to verify the injected properties. - `crates/settings/src/vscode_import.rs` : Updates `file_types()` to return `Option<FileTypeMap>` and wraps the constructed map accordingly. - `crates/language/src/buffer_tests.rs` : Updates the existing custom `file_types` test setup to extend the inner map of the new `FileTypeMap` wrapper explicitly, keeping the language crate test build passing after the type change. ## 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 - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable **Release Notes :** - Fixed language name autocomplete not working in the `file_types` setting --------- Co-authored-by: Kirill Bulatov <kirill@zed.dev> |