a94afbc
Switch from Arc/RwLock to Rc/RefCell for CodeContextMenu (#22035)
Click to expand commit body
`CodeContextMenu` is always accessed on one thread, so only `Rc`s and
`Rc<RefCell<_>>` are needed. There should be tiny performance benefits
from this. The main benefit of this is that when seeing code accessing a
`RwLock` it would be reasonable to wonder whether it will block. The
only potential downside is the potential for panics due to overlapping
borrows of the RefCells. I think this is an acceptable risk because most
errors of this nature will be local or will be caught by clippy via the
check for holding a RefCell reference over an `await`.
Release Notes:
- N/A
Michael Sloan
created
7b721ef
Stop mutating completion match state + reject fuzzy match text change (#22061)
Click to expand commit body
This fixes #21837, where CompletionsMenu fuzzy match positions were
desynchronized from completion label text. The solution is to not mutate
`match_candidates` and instead offset the highlight positions in the
rendering code.
This solution requires that the fuzzy match text not change on
completion resolution. This is a property we want anyway, since fuzzy
match text changing means items unexpectedly changing position in the
menu.
What happened:
* #21521 updated completion resolution to modify labels on resolution.
- This interacted poorly with the code
[here](https://github.com/zed-industries/zed/blob/341e65e12289c355cbea6e91daee5493bbac921f/crates/editor/src/code_context_menus.rs#L604),
where the fuzzy match results are updated to include the full label, and
the fuzzy match result positions are offset to be in the correct place.
The fuzzy mach positions were now invalid because they were based on the
old text.
* #21705 caused completion resolution to occur more frequently. Before
this only the selected item was being resolved. This caused the panic
due to invalid positions to happen much more frequently.
Closes #21837
Release Notes:
- N/A
Michael Sloan
created
18b6d14
docs: Suggest installing PHP to use PHP (#22058)
Peter Tripp
created
53c9af3
Add and use CodeLabel::filter_text() (#22054)
Click to expand commit body
Release Notes:
- N/A
Michael Sloan
created
af50261
Allow folding buffers inside multi buffers (#22046)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/4925
https://github.com/user-attachments/assets/e7b87375-893f-41ae-a2d9-d501499e40d1
Allows to fold any buffer inside multi buffers, either by clicking the
chevron icon on the header, or by using
`editor::Fold`/`editor::UnfoldLines`/`editor::ToggleFold`/`editor::FoldAll`
and `editor::UnfoldAll` actions inside the multi buffer (those were noop
there before).
Every fold has a fake line inside it, so it's possible to navigate into
that via the keyboard and unfold it with the corresponding editor
action.
The state is synchronized with the outline panel state: any fold inside
multi buffer folds the corresponding file entry; any file entry fold
inside the outline panel folds the corresponding buffer inside the multi
buffer, any directory fold inside the outline panel folds the
corresponding buffers inside the multi buffer for each nested file entry
in the panel.
Release Notes:
- Added a possibility to fold buffers inside multi buffers
---------
Co-authored-by: Antonio Scandurra <antonio@zed.dev>
Co-authored-by: Max Brunsfeld <max@zed.dev>
Co-authored-by: Cole Miller <cole@zed.dev>
Kirill Bulatov
,
Antonio Scandurra
,
Max Brunsfeld
, and
Cole Miller
created
f64fced
Fix fuzzy string match invariant check (#22032)
Click to expand commit body
Version in #21983 only handled out of range issues rather than utf-8
boundary issues (thanks to @s3bba for pointing this out)
Release Notes:
- N/A
Michael Sloan
created
7e6233d
Remove an unnecessary clone in `get_permalink_to_line` (#22027)
Click to expand commit body
Release Notes:
- N/A
Michael Sloan
created
d459f01
Rename `GitRepository.path()` to `GitRepository.dot_git_dir()` (#22026)
9daa426
Fix terminal pane tabs arrangement and closing (#22013)
Click to expand commit body
* Fixes the inability to drag and drop terminal tabs to reorder them;
fixed incorrect terminal tab move on drag and drop into existing pane
(follow-up of https://github.com/zed-industries/zed/pull/21238)
* Fixes save dialogue appearing when on closing terminal tabs with
running tasks (follow-up of
https://github.com/zed-industries/zed/pull/21374)
Release Notes:
- Fixed terminal pane tabs arrangement and closing
Kirill Bulatov
created
6e1cc5d
Remove `Task::get_ready` method I added, which is unusable in practice (#22012)
Click to expand commit body
Does seem like such a mechanism should be possible, but not yet sure how
to define it.
Release Notes:
- N/A
Michael Sloan
created
c5fe6ef
Hide the implementation of `Task` (#22009)
Click to expand commit body
The `Option<T>` within `Ready` is confusing and using `None` for it can
cause crashes. There was actually one instance of this!
Release Notes:
- N/A
https://github.com/zed-industries/zed/pull/21706 was merged after
https://github.com/zed-industries/zed/pull/22004 and the CI missed that.
Release Notes:
- N/A
Kirill Bulatov
created
cbc2265
Prefer project (worktree) tasks to language/global tasks in task::Spawn (#21706)
Click to expand commit body
`Inventory::list_tasks()` in `project` crate now is ordered by task
types. Worktree tasks comes first, language tasks second and global
tasks last.
That leads to `spawn_task_with_name()` from `task_ui` crate will find
worktree task first, so it's possible to override global tasks at
project level.
* `Inventory::templates_from_settings()` splitted to
`Inventory::global_templates_from_settings()` and
`Inventory::worktree_templates_from_settings()`.
* In tests function `list_tasks()` renamed to
`list_tasks_sorted_by_last_used()`, because it call's
`Inventory::used_and_current_resolved_tasks()`. Also added
`list_tasks()` which calls `Inventory::list_tasks()`.
Closes #20987
Release Notes:
- Fix task::Spawn to search for task name in project tasks first.
This PR adds a new `hover_popover_delay` setting that allows the user to
specify how long to wait before showing informational hover boxes. It
defaults to the existing delay.
Release Notes:
- Added a setting to control the delay for informational hover boxes
Add a `max_tabs` option to the settings that ensure no more than this
amount of tabs are open in a pane. If set to `null`, there is no limit.
Closes #4784
Release Notes:
- Added a `max_tabs` option to cap the maximum number of open tabs.
Ulysse Buonomo
created
0be7cf8
Show `restart` transformation button after successful inline assist (#20439)
Click to expand commit body
When using inline assist, after successfully generating a transformation
it's not possible to generate a new transformation. Currently, you have
to modify the prompt (i.e. add a `<SPACE>` and hit `<ENTER>`) to
regenerate.
So, I changed the restart button to be visible after a successful
transformation. And in that case I map it to a different keyboard
shortcut because `menu::Confirm` is mapped to accept the current
suggestion.
Now, I can invoke a series of transforms back to back until I get what I
want!
It might also be desired to keep the accept button visible after
modifying the prompt (before submitting it). In that case we'll need to
remap accept to an alternate key (perhaps the same alt-shift-enter I am
using for restart. That wouldn't be too insane to remember. But maybe
someone has a better idea.
I don't care what the shortcut is, I just want the ability to regenerate
without adding/deleting spaces.
## Before
**Two choices** after a suggestions is presented. Also, a great example
of why I would want to regenerate the suggestion, it left some tokens
`<rewrite_this>`!

## After
**Three choices** after a suggestion is presented, the circular icon is
for regenerate, just like you see if you modify the prompt text.

## Release Notes:
- Added Restart Button to Inline Assistant When Prompt Is Unchanged
---------
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Wes Higbee
and
Danilo Leal
created
4f96706
Add the ability for tasks to target the center pane (#22004)
Click to expand commit body
Closes #20060
Closes #20720
Closes #19873
Closes #9445
Release Notes:
- Fixed a bug where tasks would be spawned with their working directory
set to a file in some cases
- Added the ability to spawn tasks in the center pane, when spawning
from a keybinding:
```json5
[
{
// Assuming you have a task labeled "echo hello"
"ctrl--": [
"task::Spawn",
{ "task_name": "echo hello", "target": "center" }
]
}
]
```
Mikayla Maki
created
85c3aec
vim: Maintain block cursor for navigating/non-modifying operators (#21502)
Click to expand commit body
The cursor shape now only changes to underline for operators that modify
text (like: delete, change, yank) while maintaining block shape for
navigation operators (like: find, till).
This better matches Vim/Nvim's behavior where the cursor only changes
shape when an operator that will modify text is pending.
Release Notes:
- vim: Improved cursor shape behavior to better match Vim
Improves the new `Editor::DuplicateSelection` @CharlesChen0823 added in
https://github.com/zed-industries/zed/pull/21154.
- Merge `duplicate_selection` and `duplicate_line` into single function.
- Add keyboard shortcuts to JetBrains and SublimeText keymaps.
- If the selection is empty (e.g. just a cursor) make
`Editor::DuplicateSelection` fallback to being the same as
`Editor::DuplicateLineDown`.
- Tested with multiple cursors and for multiple selections.
| Editor | Action | macOS | Linux |
| ----------- | ------------------- | ----------- | ------------ |
| VSCode | Duplicate Selection | | |
| JetBrains | Duplicate Selection | cmd-d | ctrl-d |
| XCode | Duplicate | cmd-d | N/A |
| SublimeText | duplicate_line | cmd-shift-d | ctrl-shift-d |
This matches behavior of the `duplicate` functionality in all other
major editors, with one exception: other editors change the selection so
that the newly duplicated object, current Zed behavior leaves the
original selection unchanged (TODO?)
Peter Tripp
created
06edcd1
Fix running Python commands that include paths with spaces (#21981)
Click to expand commit body
This PR fixes running Python commands that include paths with spaces by
wrapping python commands and their arguments in quotation marks.
I fixed this only in Python as I noticed this while trying to run
`pytest` in Zed.
Probably this is not the best approach as it doesn't fix other languages
too, though I don't know enough about the codebase to fix it like that.
I'm not even sure if it's actually feasible right now.
I didn't add tests for this either as I couldn't really understand how
to easily to that, I tried to look at other languages but couldn't find
one that tests their `ContextProvider` directly.
Release Notes:
- Fix running Python commands that include paths with spaces
---------
Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
- Only run top issues on zed-industries/zed
- Move Nightly ARM build to BuildJet
Peter Tripp
created
421974f
Use consistent casing for provider name in telemetry (#21991)
Click to expand commit body
Release Notes:
- N/A
Joseph T. Lyons
created
c57cc35
assistant2: Add ability to fetch URLs as context (#21988)
Click to expand commit body
This PR adds the ability to fetch URLs as context in Assistant2.
In the picker we use the search area as an input for the user to enter
the URL they wish to fetch:
<img width="1159" alt="Screenshot 2024-12-13 at 2 45 41 PM"
src="https://github.com/user-attachments/assets/b3b20648-2c22-4509-b592-d0291d25b202"
/>
<img width="1159" alt="Screenshot 2024-12-13 at 2 45 47 PM"
src="https://github.com/user-attachments/assets/7e6bab2d-2731-467f-9781-130c6e4ea5cf"
/>
Release Notes:
- N/A

- Adds the Switch component
- Updates `Selected`, `Selectable` -> `ToggleState`, `Toggleable`
- Adds `checkbox` and `switch` functions to align better with other
elements in our layout system.
We decided not to merge Switch and Checkbox. However, in a followup I'll
introduce a Toggle or AnyToggle enum so we can update
`CheckboxWithLabel` -> `ToggleWithLabel` as this component will work
exactly the same with either a Checkbox or a Switch.
Release Notes:
- N/A
Nate Butler
created
2f2e7f0
Revert "Resolve documentation for visible completions (#21705)" (#21985)
Click to expand commit body
This reverts commit ab595b0d5575285f2351ff085c4a8862f2ddc1f2.
Release Notes:
- (preview only) Fixed a panic in completions
Conrad Irwin
created
2b69905
Log invariant violations in fuzzy string match iterator (#21983)
Click to expand commit body
Seeing frequent inscrutable panics here
Release Notes:
- N/A
Michael Sloan
created
01e5ac0
Maintain inline completion order, simplifying how we track pending completions (#21977)
Click to expand commit body
Release Notes:
- N/A
Antonio Scandurra
created
306f1c6
zeta: Increase context lines to 32 (#21968)
Click to expand commit body
Release Notes:
- N/A
Co-authored-by: Antonio <antonio@zed.dev>
Thorsten Ball
and
Antonio
created
2f722e6
Highlight whitespace-only inline completions with background (#21954)
Click to expand commit body
Noticed that whitespace-only insertions are really hard to make out, so
this changes it to make them visible by giving them a green background.

Release Notes:
- N/A
---------
Co-authored-by: Antonio <antonio@zed.dev>
Fixes:
* Types in binary unions as per [PEP
604](https://peps.python.org/pep-0604/) not highlighted;
* `except*` keyword not highlighted;
* Classes beginning with `_` not recognized as such, however `_` is a
valid first character for private classes; additionally the regex for
parsing constant/class names appeared inconsistent and incomplete so was
adjusted;
* Builtin types such as `float`, `dict`, etc not recognized as types;
* **Update:** decorators with arguments not recognized as decorators;
* **Update:** docstrings after type alias assignments not recognized as
docstrings;
* **Update:** `and/in/is/not/or/is not/not in` not capturable as
keywords;
* **Update:** decorators with "nesting" (@x.y.z) not recognized as
decorators;
Before:

After:

Release Notes:
- N/A
---------
Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
Jaagup Averin
and
Piotr Osiewicz
created
5318f52
Improve editor open URL command to open the selected portion of URL (#21825)
Click to expand commit body
Closes #21718
Just like in Vim, if a URL is selected, it opens exactly that portion of
the URL. Otherwise, if only the cursor is on a URL, it opens the entire
URL.
Zed currently does the latter. This PR also adds support for the former.
https://github.com/user-attachments/assets/8bdd2952-ceec-487c-b27a-5cea4258eb03
Release Notes:
- Updated the `editor: open url` to also handle the selected portion of
a URL.
Most notably, adding a title bar-ish in the left column as so to add the
"from most recent to oldest" info, which is supposed to make scanning
the list of completions easier to do (at least it would've helped me
figure out that was sorted that way when I was wondering about it!).
<img width="800" alt="Screenshot 2024-12-12 at 16 24 36"
src="https://github.com/user-attachments/assets/1acc9951-3df0-4cd2-96ff-94ed555ecae5"
/>
Release Notes:
- N/A
Danilo Leal
created
0b4495a
zeta: Adjust the "Jump To Edit" button visuals (#21933)
Click to expand commit body
| One Dark | One Light |
|--------|--------|
| <img width="1495" alt="Screenshot 2024-12-12 at 16 27 12"
src="https://github.com/user-attachments/assets/897ee786-a6f7-4d4e-8722-301ac13e6d8c"
/> | <img width="1495" alt="Screenshot 2024-12-12 at 16 27 18"
src="https://github.com/user-attachments/assets/a78aa5e4-f327-41da-bc9c-6e102bc67fe2"
/> |
| One Dark | One Light |
|--------|--------|
| <img width="1495" alt="Screenshot 2024-12-12 at 16 26 54"
src="https://github.com/user-attachments/assets/0357468e-7b5f-4f92-bcdb-5f94e353d8b2"
/> | <img width="1495" alt="Screenshot 2024-12-12 at 16 26 59"
src="https://github.com/user-attachments/assets/20e0f47e-e20f-46a7-b053-8e528b0975d7"
/> |
Release Notes:
- N/A
Danilo Leal
created
636c28b
project panel: Reintroduce project panel knockout color (#21926)
Click to expand commit body
Reintroduces #20760 after it was reverted in #21807
Closes #20572
/cc @danilo-leal
Release Notes:
- N/A
---------
Co-authored-by: Cole <cole@zed.dev>
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Bennet Bo Fenner
,
Cole
, and
Danilo Leal
created
6ceec5d
Fix project and buffer search input width (#21949)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/21922
Now, both the project and buffer search inputs have a min-width set so
that text inside it, as well as the additional controls, are always
visible even at the window's smallest possible size, which looks like
this:
<img width="407" alt="Screenshot 2024-12-13 at 00 35 46"
src="https://github.com/user-attachments/assets/e6e2c4c6-4f75-4663-8c65-590e02141a5d"
/>
Release Notes:
- N/A
Closes #21848
Release Notes:
- Fixed Hover Popover Font Callbacks
0x2CA
created
e0cbbf8
Fix opening repos when `.git` is a soft link (#21153)
Click to expand commit body
Closes #ISSUE
## background
If a project is big, some times it will be splited into many small git
repos.
[google repo](https://gerrit.googlesource.com/git-repo/) is a tool to
manage a group of git repos.
But, any small git repo manged by this tool, have a difference with
normal git repo.
That is , the path `.git` in the root of the git repo, is not a normal
directory, but a soft link to real git bare dir.
### zed can not recognize the `git-repo` managed git repos
you can use the procedure to genreate this problem
```bash
# tested on linux
mkdir -p bad_git_repo_project
cd bad_git_repo_project
git init
echo "hello" > hi.txt
git add .
git commit -m "init commit"
echo "hello world" >> hi.txt
# modify the repo
mv .git ../.real_git_repo
ln -sf ../.real_git_repo .git
```
with vscode, after opening this project, git works well.
but for Zed, git not work(not git status, no git blame)
## how to fix
libgit2 can recognize git repo from the root of the project(dir that
have `.git`).
so, we can recognize the git project by opening from the project root
dir, but not the `.git` dir
This fix also works with normal git project.
### before fix

### after fix

Release Notes:
- Fix opening repos when .git is a soft link
Wang Can
created
4eaa1c2
Only debounce the cursor position in multibuffer excerpts (#21946)
Click to expand commit body
Follow up to: https://github.com/zed-industries/zed/pull/20211
Release Notes:
- Improved the performance of the cursor position indicator in single
buffers
This change allows defining keybindings that are active when there is a
text selection.
This is especially useful, as an example, for Emacs-like keybindings
where movement keybindings expand the selection.
Here is a snippet from my keymap.json that implements Emacs movements
when selection is active:
```json
{
"context": "Editor && selection",
"bindings": {
"ctrl-f": "editor::SelectRight",
"ctrl-b": "editor::SelectLeft",
"ctrl-n": "editor::SelectDown",
"ctrl-p": "editor::SelectUp",
"ctrl-a": "editor::SelectToBeginningOfLine",
"ctrl-e": "editor::SelectToEndOfLine",
"alt-f": "editor::SelectToNextWordEnd",
"alt-b": "editor::SelectToPreviousWordStart",
"alt-<": "editor::SelectToBeginning",
"alt->": "editor::SelectToEnd"
}
}
```
What do you think about inclusion of this feature? Should I add more granular `selection=single` `selection=multi`?
Release Notes:
- Added "selection" context for keybindings that are active when there is a text selection.
Ozan
created
3f6ac53
Update GitHub bug issue template to refer to bugs instead of features (#21727)
Click to expand commit body
Release Notes:
- N/A
Dan Dascalescu
created
74d7ce2
elixir: Improve ElixirLS LSP autocomplete to show labelDetails information (#21666)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/19688
Release Notes:
- Improved ElixirLS LSP autocomplete to show module, function and struct
field details



Closes #11115
**Context**:
Consider a monorepo setup like this: the root has Prettier installed,
but the individual monorepos do not. In this case, only one Prettier
instance is used, with its installation located at the root. The
monorepos also use this same instance for formatting.
However, monorepo can have its own `.prettierignore` file, which will
take precedence over the `.prettierignore` file at the root level (if
one exists) for files in that monorepo.
<img
src="https://github.com/user-attachments/assets/742f16ac-11ad-4d2f-a5a2-696e47a617b9"
alt="prettier" width="200px" />
**Implementation**:
From the context above, we should keep ignore dir decoupled from the
Prettier instance. This means that even if the project has only one
Prettier installation (and thus a single Prettier instance), there can
still be multiple `.prettierignore` in play.
This approach also allows us to respect `.prettierignore` even when the
project does not have Prettier installed locally and instead relies on
the editor’s Prettier instance.
**Tests**:
1. No Prettier in project, using editor Prettier: Ensures
`.prettierignore` is respected even without a local Prettier
installation.
2. Monorepo with root Prettier and child `.prettierignore`: Confirms
that the child project’s ignore file is correctly used.
3. Monorepo with root and child `.prettierignore` files: Verifies the
child ignore file takes precedence over the root’s.
Release Notes:
- Added `.prettierignore` support to the Prettier integration.
tims
created
8dd1c23
editor: Add debounce setting for triggering DocumentHighlight (#21702)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/6843
I don't see where is the logic to remove old document highlight when new
one applies,
ideally, old highlight should be cleared as soon as possible when cursor
moves if the new position does not
sits in old highlight ranges to avoid linger highlights described in
https://github.com/zed-industries/zed/issues/13682#issuecomment-2498368680.
So current solution is still not ideal, because only when lsp responses
highlight ranges (even is a empty set) can we clear the old one.
Release Notes:
- Added a setting `lsp_highlight_debounce` to configure delay for
querying highlights from language server.
---------
Co-authored-by: mgsloan@gmail.com <michael@zed.dev>