Commit Graph
39151 Commits
Author SHA1 Message Date
Oleksiy Syvokon b874a40549 ep: Add V0131GitMergeMarkersPrefix prompt format (#48145)
Release Notes:

- N/A
2026-02-01 16:11:20 +02:00
Lukas Wirth fb428b5a50 gpui: Rewrite Windows PlatformTextSystem for better performance (#48087)
The current setup is quite a mess, allocates a ton of unnecessary heap
data when rendering text or querying font info and not really caching
things well, this PR changes that.

Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-02-01 13:32:22 +01:00
Cole Miller 2570382f88 git: Disable vertical scrollbar for side-by-side diff LHS (#48129)
Also the minimap, although this is currently symbolic since the minimap
doesn't support multibuffers.

Release Notes:

- N/A
2026-02-01 05:49:18 +00:00
littleKitchen f7fe6181cd Implement extract_pull_request for GitLab provider (#47973)
Fixes #38709

## Summary
This implements the `extract_pull_request` method for GitLab's
`GitHostingProvider` trait, enabling merge request links to be shown in
the git blame hover popover.

## Implementation
The implementation parses GitLab MR references from commit messages
using a regex that matches two common patterns:

1. **Squash merge pattern**: `message (!123)` - When GitLab
squash-merges, it appends the MR number in parentheses
2. **Standard merge commit**: `See merge request group/project!123` -
The default merge commit message

## Tests Added
- `test_extract_merge_request_from_squash_commit` - Validates the
`(!123)` pattern
- `test_extract_merge_request_from_merge_commit` - Validates the `See
merge request` pattern
- `test_extract_merge_request_self_hosted` - Ensures it works with
self-hosted GitLab instances
- `test_extract_merge_request_no_match` - Confirms None is returned for
non-matching messages

## Related
This follows the same pattern as the GitHub provider implementation.

## Release Notes

- Added support for GitLab merge request links in git blame hover
popover
2026-01-31 21:56:34 +00:00
Marco Mihai Condrache 839b4f1e60 git: Fix stage/unstage failure with a large number of files (#47800)
Git commands can fail when staging or unstaging a very large number of
files because each file path is passed as a separate CLI argument. Once
the argument list grows beyond the OS limit, git errors with Argument
list too long (os error 7).

Since git 2.26, pathspecs can be read from stdin, which lets us avoid
passing thousands of paths as arguments and bypass this limitation.

I looked for existing issues related to this but couldn’t find any.

Repro:

- Clone rust-lang repo
- Delete root tests folder
- Try to stage or unstage (40,000+ files)
- Git fails with Argument list too long (os error 7)

Release Notes:

- Fixed an issue where stage/unstage could fail when operating on a very
large number of files
2026-01-31 21:55:31 +00:00
Cole Miller c2959a7f7e git: Disable folding in side-by-side diff (#48108)
At least for now this isn't supported by the alignment system.

Release Notes:

- N/A
2026-01-31 20:52:51 +00:00
feeiyu 48f712b49b Fix git panel not updating after commit (#47222)
Fixed git panel not update after commit or switch branch on Linux.

On macOS and Windows, the watcher implementation recursively watches
subdirectories.
On Linux, the watcher is non-recursive.

In Git worktree scenarios, only `<project>/.git` is watched, but the
actual worktree Git directory
`<project>/.git/worktrees/<worktree>`  is not.
Therefore, Git operations such as commits or branch switches inside a
worktree do not emit watcher events on Linux, causing the Git panel to
stay out of sync.

Release Notes:
- Fixed git panel not update after commit or switch branch on Linux with
git worktrees.
2026-01-31 19:15:59 +00:00
Marco Mihai Condrache d6eda52b32 Add Azure as a git provider (#47598)
Release Notes:

- Azure is now a supported Git provider
2026-01-31 19:15:28 +00:00
Xiaobo Liu a2dbf0439f git_ui: Open file on double-click in status list (#47989)
Release Notes:

- Improved open file on double-click in status list

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
2026-01-31 14:13:14 -05:00
prayansh_chhablani 2867ec4bc2 git: Fix force-added files always showing as ignored (#47057)
Closes #15231
changes the priority in the way files are color-labelled..making sure
forcely added files are highlighted appropriately.
Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-01-31 14:07:29 -05:00
Remco Smits 9101f0ffc9 git_ui: Fix visual optimistic staging bug for tree view (#48078)
Before this PR we would not show the placeholder for the parent folders
of a file entry inside the git tree view. This PR fixes that so it's
visually correct.

**Before**


https://github.com/user-attachments/assets/3d0988de-f43b-4b2d-8f90-c531316ab290

**After**


https://github.com/user-attachments/assets/e28f9eba-e301-4f9a-8647-7f1f2f12f87d

Release Notes:

- Git UI: Fix optimistic placeholder for folders in the three view
2026-01-31 18:54:18 +00:00
Cole Miller 608cc9953f git: Remove panes from SplittableEditor (#48102)
Vestigial from the old UI

Release Notes:

- N/A
2026-01-31 18:50:50 +00:00
Augustus Otu 36e35f7df1 git: Use CDN endpoint for GitHub avatars to avoid rate limiting (#47894)
GitHub's commit API endpoint is rate limited to 60 requests/hour for
unauthenticated users. This causes avatar loading to fail after toggling
blame a few times.

This PR uses GitHub's CDN avatar endpoint
`https://avatars.githubusercontent.com/u/e?email={email}&s=128` instead,
which doesn't count against API rate limits. The author email is already
available from local git data (blame output), so
  no API calls are needed.

- When author email is available, constructs the CDN URL directly (zero
API calls)
  - Falls back to existing API-based behavior when email is unavailable
  - Adds unit tests for URL construction

  Closes #47590

  ## Test plan
  - [x] `./script/clippy` passes
- [x] `cargo test -p git_hosting_providers` passes (89 tests including 3
new ones i added)
- [ ] Manual test: Open a file, toggle git blame, verify avatars load
without hitting rate limits

  Release Notes:

- Fixed GitHub avatar rate limiting in git blame by using CDN endpoint
instead of API calls (#47590)
2026-01-31 13:49:42 -05:00
8d18b7b927 git: Fix desynced scrolling between LHS and RHS of side-by-side diff (#47913)
- Remove old attempt to sync scrolling
- Share a `ScrollAnchor` between the two sides, and be sure to resolve
it against the correct snapshot
- Allow either side to initiate an autoscroll request, and make sure
that request is processed in the same frame by the other side

Release Notes:

- N/A

---------

Co-authored-by: cameron <cameron.studdstreet@gmail.com>
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Co-authored-by: Jakub <jakub@zed.dev>
2026-01-31 18:33:22 +00:00
Max Brunsfeld b642565526 Allow zeta2 to predict next cursor position along with edits (#47916)
* [x] capture and store teacher model's predicted cursor position
* [x] provide cursor position to student during distillation
* [x] eval cursor positions
* [x] parse and apply cursor position predictions at runtime

Release Notes:

- N/A
2026-01-31 16:16:32 +00:00
Austin Cummings 795eb34098 Fix open path prompt not showing hidden files (#46965)
Closes #39036 

The open path prompt will now show hidden files when "." is entered.
Also fixes an issue with "open this directory" showing twice when used
by the "toolchain: add toolchain" prompt.

With a tree of 
```
zed-industries
├── .hidden
├── .hidden-file
├── zed
├── zed-working
├── zeta
└── zeta-dataset
```
**Before:**
<img width="656" height="174" alt="image"
src="https://github.com/user-attachments/assets/abf30ce3-b1c2-4a14-a45d-c17b6c3aef6f"
/>

**After (current directory view without inputting "."):**
<img width="648" height="261" alt="image"
src="https://github.com/user-attachments/assets/00c65546-32c1-4c85-a05c-53152ab2f942"
/>

**After (when inputting "." to see hidden entries):**
<img width="618" height="156" alt="image"
src="https://github.com/user-attachments/assets/8453ae89-b1a7-44d4-9f7d-ed89e55a7020"
/>


Release Notes:
- Made Zed's built in file picker to show all hidden files by default
2026-01-31 09:57:31 +02:00
Michael Yang 03663b966d rust: Highlight enum variants as variant (#47918)
Improve #45546, by changing the capture to be variant instead of type.

Release Notes:

- Improved Rust enum variant highlighting as variant instead of type.

Before (note variants have the same style as `Foo`):
<img width="276" height="162" alt="image"
src="https://github.com/user-attachments/assets/fa0d8f48-a286-4a8d-b89d-269cb1657e55"
/>

After:
<img width="276" height="162" alt="image"
src="https://github.com/user-attachments/assets/c442494a-7550-481a-a8b9-f2d944a67868"
/>
2026-01-31 09:52:05 +02:00
ozacodandozacod 4dde88cfe5 languages: Support double quoted keys in YAML highlights (#48063)
Before:
<img width="520" height="74" alt="before"
src="https://github.com/user-attachments/assets/5c010819-a20e-438e-b7f6-218b9f241070"
/>

After:
<img width="532" height="81" alt="after"
src="https://github.com/user-attachments/assets/51528d3b-439f-4fcf-9a7c-b06dec6a7e81"
/>

Release Notes:

- Improved YAML highlights to support quoted keys

Co-authored-by: ozacod <ozacod@users.noreply.github.com>
2026-01-30 19:57:04 -07:00
Conrad Irwin a6ab1f1eb7 Fail windows bundle when cargo about fails (#48056)
Release Notes:

- N/A
2026-01-30 19:55:29 -07:00
Anthony Eid fe653a77ae settings_ui: Fix editable project settings not being updated when a new workspace is created (#47992)
The bug occurred because `cx.observe_new::<Workspace>` would pass a
mutable `Window` that was also the new workspace's window. Later,
`fetch_files` would fail to read the newly created workspace from
`WorkspaceStore` because its window already had a mutable reference to
it.

The fix always passes the Settings UI's window handle to the
`fetch_files` function, and uses a `settings_window_handle.defer`
callback to call `fetch_files` after the newly created workspace's
window no longer has any mutable references to it.

Release Notes:

- settings_ui: Fixed editable project settings not being updated when a
new workspace is created
2026-01-30 17:21:15 -05:00
lex00andClaude Opus 4.5 609e915b10 vim: Restore cursor position when dismissing buffer search (#47732)
Fixes #8048

## Summary

In vim mode, pressing Escape to dismiss the buffer search now correctly
restores the cursor to its original position, rather than leaving it at
the first match.

## Problem

When using vim's `/` command to search:
1. User positions cursor at line X
2. User presses `/` to open search, types a query
3. Matches are highlighted, cursor may visually jump to first match
4. User presses Escape to dismiss without navigating
5. **Bug:** Cursor ends up at first match instead of line X

This breaks vim parity where Escape should cancel the search and restore
cursor position.

## Solution

The fix leverages the `focused()` callback in `vim.rs`, which is called
when the editor regains focus after the search bar is dismissed.

**Key insight:** When search starts via `/`, the cursor position is
saved in `SearchState.prior_selections`. When search is *submitted* with
Enter, `search_submit()` drains these selections. But when search is
*dismissed* with Escape, they remain.

So in `focused()`, if:
- `prior_selections` is non-empty, AND
- The search bar's `is_dismissed()` returns true

...then we know the user dismissed the search (Escape) rather than
submitted it (Enter), and we restore the cursor.

## Why not handle `buffer_search::Dismiss` directly?

The initial approach tried to register a vim handler for the `Dismiss`
action. This didn't work because when Escape is pressed, the search bar
(which has focus) handles the `Cancel` action internally and calls its
`dismiss()` method directly—it doesn't dispatch `Dismiss` through the
action system. The vim handler registered on the editor was never
invoked.

## Test Plan

- Added `test_search_dismiss_restores_cursor` — verifies cursor
restoration when search is dismissed
- Added `test_search_dismiss_restores_cursor_no_matches` — verifies
behavior when query has no matches
- All 455 vim tests pass
- Manual testing confirms fix works with both `/` and `cmd-f`

## Release Notes

- Fixed vim mode: cursor now returns to original position when
dismissing buffer search with Escape (#8048)

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:59:38 -07:00
Joseph T. Lyons 72b151e3aa Revert "Allow always_allow patterns for Nushell, Elvish, and Rc shells" (#48050)
Reverts zed-industries/zed#47908

This PR inadvertently caused a regression:

- https://github.com/zed-industries/zed/issues/48047
2026-01-30 21:26:13 +00:00
Ben Kunkle cfd6144af8 ep_cli: Only check cursor excerpt for reversals (#48044)
Closes #ISSUE

Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-01-30 16:01:16 -05:00
Ben Kunkle 3a2a43ab84 ep_cli: Allow dynamically loading prompts (#48046)
Closes #ISSUE

Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-01-30 14:55:24 -05:00
Dino b029238af2 settings: Extract project settings JSON schema (#47939)
Introduces a separate JSON schema for project settings that excludes
user-only settings like `auto_update`, `telemetry`, `vim_mode`, etc.
This provides more accurate autocomplete and validation when editing
`.zed/settings.json`.

- Add `SettingsStore::project_json_schema`
- Map `.zed/settings.json` to `zed://schemas/project_settings` schema URL

Release Notes:

- Improved autocomplete for the project settings file
(`.zed/settings.json`) to only include settings that are valid at the
project level, excluding user-only settings.
2026-01-30 18:55:09 +00:00
Lena 325afbddff API-based version of duplicates bot (#48041)
This is still only a debugging/evaluation version (which is why it has
e.g. hardcoded stuff). It successfully ran a few times triggered
manually, so we're replacing the broken version on `main` with this to
see how it fares on incoming issues.

Release Notes:

- N/A
2026-01-30 18:33:50 +00:00
Cole Miller a7596c468e Bump wax to 0.7 (#48042)
Closes #47756
Closes ZED-3WQ

Release Notes:

- N/A
2026-01-30 18:24:23 +00:00
Lukas Wirth 3d7fe6e1f8 agent_ui: Add debug command to copy and paste agent threads (#48039)
Temporary feature meant to aid with internal performance debugging

Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-01-30 19:07:08 +01:00
Kyle Kelley 3723a2560a repl: Render application/json media types from Jupyter kernels (#47905)
Closes #47757

Component of https://github.com/zed-industries/zed/issues/9778

<img width="799" height="913" alt="image"
src="https://github.com/user-attachments/assets/ac496987-bf03-4ea4-99f0-d327e57e7b20"
/>

Release Notes:

- Added JSON output support to REPL
2026-01-30 11:09:45 -06:00
Oleksiy Syvokon 7aa8c742d8 Add ep split --no-stratify option (#48036)
Release Notes:

- N/A
2026-01-30 16:59:46 +00:00
Ben Kunkle fa68aa7704 ep_cli: Further improve reversal ratio (#48028)
Closes #ISSUE

Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-01-30 10:44:15 -05:00
Oleksiy Syvokon c3ce20b72b ep: Update teacher prompt to reduce edit reversals (#48022)
Release Notes:

- N/A
2026-01-30 17:04:11 +02:00
Lukas Wirth e80221ddc3 multi_buffer: Reduce region clones (#48025)
Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-01-30 15:01:49 +00:00
Lukas Wirth 9b3777a14e multi_buffer: Speed up Anchor::to_offset resolution (#48021)
We used to just use the anchor resolution function that allows resolving
multiple anchors in one loop before. That has a lot of overhead though
when we only have a single anchor to resolve, so instead we just
specialize that case now as resolving a single anchor to an offset is a
super common operation.

Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-01-30 15:01:18 +00:00
Mayank VermaandSmit Barmase 316a9702d4 workspace: Fix closed pane items not reopening due to stale preview state (#45286)
Closes #45198

Release Notes:

- Fixed an issue where "Reopen Closed Item" would fail to reopen tabs
that had been converted from preview to non-preview before being closed.

---------

Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
2026-01-30 20:22:39 +05:30
Lukas Wirth 024345f999 editor: Deduplicate multibuffer blame error messages (#48013)
Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-01-30 12:21:11 +00:00
Oleksiy Syvokon 80b9c3a908 ep: Add --cache-only option to avoid sending requests (#48011)
Release Notes:

- N/A
2026-01-30 13:48:27 +02:00
Cameron McloughlinandBen Brandt 5eeff4942c agent_ui: Subagent permissions (#48005)
Release Notes:

- N/A *or* Added/Fixed/Improved ...

---------

Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
2026-01-30 10:40:53 +00:00
Oleksiy Syvokon bf829a6da5 ep: Handle input data errors (#48004)
Release Notes:

- N/A
2026-01-30 10:33:25 +00:00
Lukas Wirth 3e5d1ee8b9 terminal: Update title changed info on the background (#48000)
This can take several milliseconds on windows blocking the main thread
noticably

Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-01-30 09:29:19 +00:00
David BarskyandLukas Wirth 185a80a21b cli: Teach --diff to recurse into directories and add a MultiDiffView (#45131)
This branch:
1. teaches `--diff `command line option to to recurse into folders if
provided.
2. Adds a `MultiDiffView` that shows _all_ changed files in a single,
scrollable view.

This is necessary to provide a smooth user experience for `jj` and Zed
users who wish to use Zed as their jj difftool.

I'm not fully sure how this change interacts with
https://github.com/zed-industries/zed/pull/44936, or what plans y'all
have in mind.

Here's a screenshot of the resulting behavior:

<img width="1090" height="950" alt="Screenshot 2025-12-17 at 9 10 52 AM"
src="https://github.com/user-attachments/assets/8efd09b4-974f-4059-9f94-539c484c6d4a"
/>

I setup zed to handle jj diffs by adding the following to my jj config:

```toml
[aliases]
zdiff = ["diff", "--tool", "zed"]

[merge-tools.zed]
program = "/Users/dbarsky/Developer/zed/target/debug/cli"
# omit diff-invocation-mode to keep the default (JJ passes two dirs)
diff-args = [
  "--zed", "/Users/dbarsky/Developer/zed/target/debug/zed",
  "--wait",
  "--new",
  "--diff",
  "$left",
  "$right",
]
```

Release Notes:

- `--diff`, if provided with folders instead of files, will recurse into
those directories.
- Added a `MultiDiffView`, which will show all changed files within a
single, scrollable view.

**AI Disclosure**: Pretty much all of this code was written using Codex
with GPT-5.1-Codex. I edited by hand and tested this.

---------

Co-authored-by: Lukas Wirth <lukas@zed.dev>
2026-01-30 10:14:36 +01:00
Fernando Pérez 7053561b63 docs: Document default for include_warnings (#47838)
## Summary
Add documentation for the default value of `include_warnings` in
diagnostics settings. This makes it consistent with other settings that
document their default values.

## Test plan
- Documentation-only change, no functional changes

Release Notes:

- N/A
2026-01-30 09:01:54 +00:00
Lukas Wirth b9c0f756c4 fs: Cache filesystem case sensitivity (#47995)
We query this on the main thread on every file system access otherwise

Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-01-30 09:42:28 +01:00
Lukas Wirth 19765cd0b4 gpui(windows): Move jumplist creation to background thread (#47956)
This can block the main thread too much otherwise

Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-01-30 08:10:19 +00:00
Lukas Wirth 28f0461e94 workspace: Do not attempt to unnecessarily update jump list on invisible worktree updates (#47990)
Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-01-30 07:37:35 +00:00
Joseph T. Lyons 9aa71ddbce Python: Improved the Add Virtual Environment path browser to start at the workspace root (#47988)
Previously, the 'Add Virtual Environment' path browser started at the
filesystem root (`/`). Since virtual environments are almost always
located within the project directory, starting at the worktree root
provides feels a bit nicer to me.

Release Notes:

- Python: Improved the `Add Virtual Environment` path browser to start
at the workspace root.
2026-01-30 07:19:07 +00:00
Joseph T. Lyons 0ede074c05 Fix missing directories in path prompt when show_hidden is enabled (#47983)
The `Select Toolchain Path` picker would skip directories that exist on
my system and display `open this directory` multiple times. `Personal`
is missing:

<img width="569" height="225" alt="SCR-20260129-tvcc"
src="https://github.com/user-attachments/assets/a78db373-fdfb-439d-a688-a4c81763c745"
/>

```
~/Projects> ls
╭───┬──────────┬──────┬────────┬─────────────╮
│ # │   name   │ type │  size  │  modified   │
├───┼──────────┼──────┼────────┼─────────────┤
│ 0 │ Personal │ dir  │ 1.5 kB │ 2 weeks ago │
│ 1 │ Work     │ dir  │ 1.0 kB │ 2 hours ago │
╰───┴──────────┴──────┴────────┴─────────────╯
~/Projects> 
```

Release Notes:

- Fixed a bug where directories could be missing from the `Select
Toolchain Path` path picker
2026-01-30 04:28:19 +00:00
Finn Evers 0c8a753a3c ci: Fix release failure notification (#47977)
Release Notes:

- N/A
2026-01-30 01:14:19 +00:00
Anthony Eid fed8b93aa6 Revert "gpui: Take advantage of unified memory on Apple silicon" (#47974)
Reverts zed-industries/zed#45577

This still causes gpui to be unusable for Intel Macs and by extension
Zed.

Release Notes:

- N/A
2026-01-29 23:03:01 +00:00
Joseph T. Lyons f1554f83ed Remove label field from Feature Request template (#47970)
Release Notes:

- N/A
2026-01-29 22:30:57 +00:00