Commit log

094430e Properly normalize completion labels with multi-byte characters (#25150)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/25142

Release Notes:

- Fixed panics on completion with multi-byte characters input

Kirill Bulatov created

d4414ef Fix link to the PHP extension (#25144)

Click to expand commit body
Fix broken links to [PHP
extensions](https://github.com/zed-extensions/php) from [the
documentation](https://zed.dev/docs/languages/php).

Release Notes:

- N/A

USAMI Kenta created

2274e88 Highlight regex in the project search input (#25147)

Click to expand commit body
Follow-up of https://github.com/zed-industries/zed/pull/25005

Project search also has regex search option, highlight it the same way
too.

Release Notes:

- N/A

Kirill Bulatov created

4841786 terminal: Handle shift+click selection (#25143)

Click to expand commit body
Closes #16951

Handle the case where you click on the terminal while pressing Shift. 

Instead of setting a new selection head, we simply update the selection
to that point. This allows you to repeatedly extend the selection to new
points by pressing Shift while preserving the original selection head.

Preview:

Selection works in direct terminal, but doesn't on Vim like program,
which is expected.


https://github.com/user-attachments/assets/e46987d8-a9a3-495d-8dd9-98d461317a8d


Release Notes:

- Added ability to extend selection with Shift + click in the terminal.

smit created

1fa105e docs: Fix selection highlight default value (#25134)

Click to expand commit body
Changed default debounce value in docs to match default settings.

Release Notes:

- N/A

smit created

043c4ed editor: Fix highlight selection panic (#25141)

Click to expand commit body
Use the latest selection state for highlighting instead of the state
before debounce.

Release Notes:

- N/A

smit created

e57b9e5 Ignore selections persistence for multi buffer editors (#25140)

Click to expand commit body
Follow-up of https://github.com/zed-industries/zed/pull/25083

Release Notes:

- N/A

Kirill Bulatov created

13da468 Fix for #25039 (#25138)

Click to expand commit body
Release Notes:

- vim: Fix crash in `ci{`

Conrad Irwin created

1678e3c Fix clicking on file links in editor (#25117)

Click to expand commit body
Closes #18641
Contributes: #13194

Release Notes:

- Open LSP documentation file links in Zed not the system opener
- Render completion documentation markdown consistently with
documentation markdown

Conrad Irwin created

ebbc6a9 Highlight `super` and `this` as keywords in JS/TS/TSX (#25135)

Click to expand commit body
Closes #24951

We were highlighting both as `@variable.special` however, they are
_techinically_ keywords and other editors (VSCode/WebStorm) seem to
highlight them as keywords as well.

Release Notes:

- N/A

Ben Kunkle created

bb600ac Set base highlight for identifiers in go to variable highlight color (#25128)

Click to expand commit body
Closes #24947 

Release Notes:

- N/A

Ben Kunkle created

372aaec language_model_selector: Authenticate all providers up front (#25123)

Click to expand commit body
This PR fixes an issue where configured language model providers would
not show up unless the configuration view was opened.

The problem was that we were filtering unauthenticated language model
providers out of the language model selector, but would only
authenticate the active provider when the selector loaded.
Authenticating the rest of the providers was deferred until the
configuration view was opened for the first time.

Closes https://github.com/zed-industries/zed/issues/21821.

Release Notes:

- Fixed an issue where configured languages models were not showing up
in the language model selector until the configuration view was opened
for the first time.

Marshall Bowers created

7a6b652 language_model: Return `AuthenticateError`s from `LanguageModelProvider::authenticate` (#25126)

Click to expand commit body
This PR updates the `LanguageModelProvider::authenticate` method to
return an `AuthenticateError` instead of an `anyhow::Error`.

This allows us to model the "credentials not found" state explicitly as
`AuthenticateError::CredentialsNotFound`, which enables the caller to
check for this state and act accordingly.

Planning to use this in #25123 to silence errors about missing
credentials when authenticating providers in the background.

Release Notes:

- N/A

Marshall Bowers created

2627a5f assistant: Improve the language model selector (#25125)

Click to expand commit body
This PR includes change such as:

- Ensures the popover width is fixed/not dancing around
- Ensures the popover is not obscuring the trigger in the buffer and
terminal inline assistant scenarios
- Removes ellipsis from the trigger button label
- Ensures the scrollbar doesn't hide the check icon

| Terminal | Prompt Editor | Buffer |
|--------|--------|--------|
| ![Screenshot 2025-02-18 at 8 43
46 PM](https://github.com/user-attachments/assets/9cdfbaf1-f27e-4f48-877e-9cf61767ecee)
| ![Screenshot 2025-02-18 at 8 43
49 PM](https://github.com/user-attachments/assets/7abf9be2-bd2a-43d7-9a5d-d665e7e9fda3)
| ![Screenshot 2025-02-18 at 8 43
52 PM](https://github.com/user-attachments/assets/017bbdb3-185a-4bf6-9005-018ecafef9dd)
|

Release Notes:

- N/A

Danilo Leal created

a6006af language_model_selector: Fix variable name (#25121)

Click to expand commit body
This PR fixes an inaccurate variable name that I noticed in the language
model selector.

Release Notes:

- N/A

Marshall Bowers created

92f128e Do not fail hard on selection persistence if the editor is removed (#25120)

Click to expand commit body
Follow-up of https://github.com/zed-industries/zed/pull/25083

Follows practices from editors' scroll position persisting:
https://github.com/zed-industries/zed/blob/5a05b7461e476d7ddc59418868ebdab6687b8d2f/crates/editor/src/persistence.rs#L200
and do not fail hard if the editor with the ID given does not exist.
Also add the problematic IDs into the error context to see them in the
error logs.

Release Notes:

- N/A

Kirill Bulatov created

98ea659 assistant2: Fix thread history only working in one Zed window (#25119)

Click to expand commit body
This PR fixes an issue where the thread history would only work in one
Zed window at a time.

The backing LMDB database can only be opened once per Zed instance.
However, the `ThreadStore` has one instance per Zed window.

To fix this, we need to create the `heed` environment once and store it
as a global, and then reference the same environment across all of the
`ThreadStore`s.

Release Notes:

- N/A

Marshall Bowers created

d0816ef edit predictions: Fix fold not expanding after jump (#25116)

Click to expand commit body
Closes #24938.

Release Notes:

- Edit predictions: Fix fold not expanding after jump

João Marcos created

6885b28 assistant2: Deploy inline assistant in PromptEditor (#25094)

Click to expand commit body
Release Notes:

- N/A

Co-authored-by: Danilo Leal <daniloleal09@gmail.com>

Agus Zubiaga and Danilo Leal created

48f87a8 Don't open file finder menu on command (#25097)

Click to expand commit body
Closes #24740

Release Notes:

- Don't open the split menu in the file finder when command is pressed

Conrad Irwin created

bff1548 assistant2: Add file icons for mentioned creases (#25111)

Click to expand commit body
This PR makes the mentioned file creases/buttons use `FileIcons`.

<img width="700" alt="Screenshot 2025-01-21 at 11 20 49 AM"
src="https://github.com/user-attachments/assets/876da534-c11a-4d13-af82-a5948863f954"
/>

Release Notes:

- N/A

Co-authored-by: Anthony Eid <hello@anthonyeid.me>

Danilo Leal and Anthony Eid created

60a4435 Terminal mouse improvements (#25104)

Click to expand commit body
Closes #24911
Closes #17983
Closes #7073

Release Notes:

- Terminal: Fix cmd-click on links/files when terminal is not focused
- Terminal: Remove hover treatment after Zed hides/re-opens

---------

Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>

Conrad Irwin and Mikayla Maki created

b1872e3 `cx.background_executor().spawn(...)` -> `cx.background_spawn(...)` (#25103)

Click to expand commit body
Done automatically with

> ast-grep -p '$A.background_executor().spawn($B)' -r
'$A.background_spawn($B)' --update-all --globs "\!crates/gpui"

Followed by:

* `cargo fmt`
* Unexpected need to remove some trailing whitespace.
* Manually adding imports of `gpui::{AppContext as _}` which provides
`background_spawn`
* Added `AppContext as _` to existing use of `AppContext`

Release Notes:

- N/A

Michael Sloan created

f606b06 workspace: Prevent user from undoing persistent session deserialization (#25106)

Click to expand commit body
Closes #21846

Release Notes:

- Fixed a bug that made it possible to undo changes in dirty
deserialized buffer (with `restore_unsaved_buffers: true`)

Piotr Osiewicz created

e5d8bd2 Issue response: pull team members from staff team (#25102)

Click to expand commit body
Release Notes:

- N/A

Joseph T. Lyons created

529c652 Revert gutter stripes as indicator of hunk staged status (#25089)

Click to expand commit body
We've decided to go in a different direction on indicating the staged
status of hunks, so go back for now to a world where we don't display
staged and unstaged hunks differently outside the (still gated) project
diff editor.

cc @iamnbutler 

This reverts commit 8c202b3b09083e0b5430fce3631734de6112bbc0.

Release Notes:

- N/A

Cole Miller created

737b177 Switch to columnar selection by pressing `alt-shift` while mouse is down (#25096)

Click to expand commit body
We begin a columnar selection when we drag the mouse while holding
`alt-shift`. This PR makes it possible to start the selection and then
turn it into columnar by pressing `alt-shift`.

Fixes #5372 

Release Notes:

- Support switching to columnar selection by pressing `alt-shift` while
mouse is down

Agus Zubiaga created

c10ac31 theme: Don't log errors for missing themes until extensions have loaded (#25098)

Click to expand commit body
This PR makes it so we don't log errors for missing themes or icon
themes until after the extensions have been loaded.

Currently, if you are using a theme that is defined in an extension it
is common to see one or more "theme not found" errors in the logs. This
is the result of us having to initialize the theme before the extensions
have actually finished loading.

This means that a theme that _may_ exist once extensions load is
considered non-existent before they have loaded.

To that end, we now wait until the extensions have loaded before we
start logging errors if we can't find the theme or icon theme.

Closes https://github.com/zed-industries/zed/issues/24539.

Release Notes:

- Reduced the number of "theme not found" and "icon theme not found"
errors in the logs for themes provided by extensions.

Marshall Bowers created

1e255e4 assistant2: Show token count in the Prompt Editor view (#25091)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: Agus Zubiaga <hi@aguz.me>

Danilo Leal and Agus Zubiaga created

8a7565e Add small improvement to the theme picker footer (#25088)

Click to expand commit body
- Always start a button's label with an imperative verb
- Use the `ArrowUpRight` icon when the button opens an external link

<img width="700" alt="Screenshot 2025-01-21 at 11 20 49 AM"
src="https://github.com/user-attachments/assets/383d9bad-2756-4e85-acad-4ed956f541cb"
/>

Release Notes:

- N/A

Danilo Leal created

8e7cad7 theme: Return structured errors when a theme is not found (#25090)

Click to expand commit body
This PR updates the `ThemeRegistry` to return structured errors from the
`get` and `get_icon_theme` methods (which are used to retrieve themes
and icon themes, respectively).

We want to be able to carry the name of the theme that was not found as
state on the error, which is why we use a `Result` and not an `Option`.
However, we also want to be able to accurately identify when the error
case is "not found" so we can take appropriate action, based on the
circumstances.

By using a custom error type instead of an `anyhow::Error`, we get both.

There isn't any functional change in this PR. This just sets us up for
future improvements in this error.

Release Notes:

- N/A

Marshall Bowers created

76f501a git: Don't load shallow HEAD text of symlinks (#25058)

Click to expand commit body
For symlinks, return `None` from `load_committed_text` as we do from
`load_index_text` ever since #10037.

Release Notes:

- Fixed diff hunks appearing in unchanged symlinked files

Cole Miller created

9ef0501 file_finder: Remove common segments of long paths in search results (#25049)

Click to expand commit body
This PR makes progress on #7711 by identifying any common prefix of the
paths in the file finder's search results, and replacing the "interior"
of that prefix---every path segment but the first and last---with `...`,
when a heuristic indicates that the longest path would otherwise
overflow the modal.

The elision is not applied to any segment that contains a match for the
search query.

There may be more work to do on #7711 in the case of long result paths
that do not share a significant common prefix.

Release Notes:

- Improved display of long paths in the file finder modal

Co-authored-by: Max <max@zed.dev>

Cole Miller and Max created

80458ff Persist selections for editors (#25083)

Click to expand commit body
Part of https://github.com/zed-industries/zed/issues/7371
Closes https://github.com/zed-industries/zed/issues/12853

Release Notes:

- Started to persist latest selections for editors, to restore those on
restart

Kirill Bulatov created

b340378 terminal: Change context menu item label (#25085)

Click to expand commit body
Super subtle, but when I initially saw just "Close", I got weirded out
asking myself "why there's a menu item to close the context menu?", to
only then realize that it didn't close the menu, but the terminal _tab_.
Might be obvious, because that's how buffer tabs are labled, but I don't
know, it feels like the redundancy here is overall positive.

Release Notes:

- N/A

Danilo Leal created

295e486 edit prediction: Update disabled globs link in the onboarding modal (#25084)

Click to expand commit body
Release Notes:

- N/A

Danilo Leal created

00bb9a4 Fix LSP rename in Go (#25073)

Click to expand commit body
Some language servers report version 0 even if the buffer hasn't been
opened yet. We detect this case and treat it as if the version was
`None`.

Closes #23706

Release Notes:

- Fixed a bug that prevented renames for some languages.

Antonio Scandurra created

b4fc127 editor: Disable "Open in Terminal" when it's not possible (#25059)

Click to expand commit body
When impossible to trigger action, the button should be disabled.

Release Notes:

- N/A

João Marcos created

0e38d2d Add doc on workspace persistence (#25062)

Click to expand commit body
Release Notes:

- N/A

Joseph T. Lyons created

813d870 Bump Tree-sitter for bug fixes affecting YAML parser loaded via WASM (#25054)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/24742
Closes #24632

This PR bumps Tree-sitter to bring in bug fixes:
* https://github.com/tree-sitter/tree-sitter/pull/4218
* https://github.com/tree-sitter/tree-sitter/pull/4213
* https://github.com/tree-sitter/tree-sitter/pull/4210

I've also bumped Wasmtime and wit-bindgen, since the new Tree-sitter
uses a newer wasmtime.

Release Notes:

- Fixed a parsing bug that caused memory leaks and crashes when using
the Ansible extension

---------

Co-authored-by: Anthony <anthony@zed.dev>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>

Max Brunsfeld , Anthony , and Anthony Eid created

8942e65 add more tests to `editor::SelectAllMatches` (#25060)

Click to expand commit body
Release Notes:

- N/A

João Marcos created

06726a2 Revert splitting display diff hunks (#25020)

Click to expand commit body
This PR reverts two recent commits that changed our gutter highlights to
mark separately the deleted and added portions of an expanded
modification hunk. It returns to the previous status quo where the
gutter highlight for an expanded modification hunk has the same color
for the deleted and added portions.

Release Notes:

- N/A

Cole Miller created

93efb57 docs: Fix formatting (#25057)

Click to expand commit body
This PR fixes a formatting issue in the docs that was introduced in
#5669.

Seems that PR was merged without passing CI.

Release Notes:

- N/A

Marshall Bowers created

a8de6af Fix `editor::SplitSelectionIntoLines` adding an extra line at the end (#25053)

Click to expand commit body
Closes #4795

Release Notes:

- Fixed `editor::SplitSelectionIntoLines` adding an extra line at end
of selection

João Marcos created

12aa270 Fix TypeScript block indenting when using allman style (#25051)

Click to expand commit body
Closes #24976 

Release Notes:

- Fixed an issue where writing TypeScript using Allman style would
result in incorrect auto-indent behavior

Ben Kunkle created

888dc0b Document `file_scan_inclusions` and make consistent with default.json (#25046)

Click to expand commit body
Release Notes:

- N/A

Michael Sloan created

bb53ad9 Only allow save_as for pane if can_save_as is true (#25028)

Click to expand commit body
When saving an item, some logic is done to determine whether one can
save it. In the special case where the intent is to `SaveAs`, it was
previously allowed to proceed as long as the buffer was a singleton
(presumably since it only makes sense to provide a save path for a
single file). However, we need to _also_ check that this item can be
"saved as" at all.

For this, we resurrect the `ItemHandle`/`Item` trait method
`can_save_as`. We have given it the default implementation of returning
`false`, and then overridden this in the implementation for
`TerminalView`.

Closes #25023


Release Notes:

- Fixed crash when trying to save terminal buffer

---------

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>

Dylan and Conrad Irwin created

62a11b0 ui: Remove `track_focus` method from Picker render (#25043)

Click to expand commit body
Follow-up to: https://github.com/zed-industries/zed/pull/25025

Removing the `track_focus` method fix the focus hijack that we
introduced in the previous PR. cc @0xtimsb
Also, I don't see any immediate affect in the actual scrollbar behavior
without this! Holler if that's not the case.

Release Notes:

- N/A

Danilo Leal created

e068c7b vim: Update anyquotes and anybrackets to behave like mini.ai plugin (#24167)

Click to expand commit body
### Overview
This PR improves the existing
[mini.ai‐like](https://github.com/echasnovski/mini.ai) text-object logic
for both “AnyQuotes” (quotes) and “AnyBrackets” (brackets) by adding a
multi‐line fallback. The first pass searches only the current line for a
best match (cover or next); if none are found, we do a multi‐line pass.
This preserves mini.ai's usual “line priority” while ensuring we can
detect pairs that start on one line and end on another.

### What Changed
1. Brackets
- Line-based pass uses `gather_line_brackets(map, caret.row()) `to find
bracket pairs `((), [], {}, <>) `on the caret’s line.
- If that fails, we call `gather_brackets_multiline(map)` to single‐pass
scan the entire buffer, collecting bracket pairs that might span
multiple lines.
- Finally, we apply the mini.ai “**cover or next**” logic
(`pick_best_range`) to choose the best.
2.  Quotes
  - Similar line-based pass with `gather_line_quotes(map, caret.row())`.
- If no local quotes found, we do a multi‐line fallback with
`gather_quotes_multiline(map)`, building a big string for the whole
buffer and using naive regex for "...", '...', and `...`.
  - Also preserves “inner vs. outer” logic:
- For inner (e.g. `ciq`), we skip bounding quotes or brackets if the
range is at least 2 characters wide.
    - For outer (`caq`), we return the entire range.
3. Shared “`finalize`” helpers
- `finalize_bracket_range` and `finalize_quote_range` handle the “inner”
skip‐chars vs. “outer” logic.
  - Both rely on the same “line first, then full fallback” approach.

### Why This Matters
- **Old Behavior**: If you had multi‐line brackets { ... } or multi‐line
quotes spanning multiple lines, they weren’t found at all, since we only
scanned line by line. That made text objects like ci{ or ciq fail in
multi-line scenarios.
- **New Behavior**: We still do a quick line pass (for user‐friendly
“line priority”), but now if that fails, we do a single‐pass approach
across the entire buffer. This detects multi‐line pairs and maintains
mini.ai’s “cover‐or‐next” picking logic.

### Example Use Cases
- **Curly braces:** e.g., opening { on line 10, closing } on line 15 →
previously missed; now recognized.
- **Multi‐line quotes**: e.g., "'Line 1\nLine 2', no longer missed. We
do gather_quotes_multiline with a naive regex matching across newlines.

### Tests
- Updated and expanded coverage in:
  - test_anyquotes_object:
    - Includes a multi-line '...' test case.
- E.g. 'first' false\n<caret>string 'second' → ensuring we detect
multi‐line quotes.
  - test_anybrackets_object:
- Verifies line‐based priority but also multi‐line bracket detection.
- E.g., an open bracket ( on line 3, close ) on line 5, which used to
fail.

### Limitations / Future Enhancements
- **Escaping**: The current approach for quotes is naive and doesn’t
handle escape sequences (like \") or advanced parser logic. For deeper
correctness, we’ll need more advanced logic, this is also not supported
in the original mini.ai plugin so it is a known issue that won't be
attended for now.

### Important Notes
- Fix for the bug: https://github.com/zed-industries/zed/issues/23889
this PR addresses that bug specifically for the AnyQuotes text object.
Note that the issue still remains in the built-in motions (ci', ci",
ci`).
- Caret Position Differences: The caret position now slightly deviates
from Vim’s default behavior. This is intentional. I aim to closely mimic
the mini.ai plugin. Because these text objects are optional
(configurable via vim.json), this adjusted behavior is considered
acceptable and in my opinion the new behavior is better and it should be
the default in vim. Please review the new tests for details and context.
- Improved Special Cases: I’ve also refined how “false strings” in the
middle and certain curly-bracket scenarios are handled. The test suite
reflects these improvements, resulting in a more seamless coding
experience overall.

### References:
- Mini.AI plugin in nvim: https://github.com/echasnovski/mini.ai

Thank you for reviewing these changes!

Release Notes:

- Improve logic of aq, iq, ab and ib motions to work more like mini.ai
plugin

Osvaldo created

a99696b pane: Disable the "Close..." controls depending on certain scenarios (#25037)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/12471

- Disables "Close Others" if there's just one tab
- Disables "Close Left"/"Close Right" if the above is true or if there's
no tabs to the left/right side of the active tab

Release Notes:

- N/A

Danilo Leal created