Commit log

09c497f editor: Ensure allocation reuse (#14577)

Click to expand commit body
In #14567 I claimed that the underlying allocation is reused. And it
was. At the time I've submitted a PR I was using `.filter_map(|x| x)`,
which got flagged by clippy as something that could be simplified to
`.flatten()` - that however broke the allocation reuse promise.

Thus, this PR goes back to using `filter_map` and additionally in debug
builds it performs checks for allocation reuse. With .flatten in place,
a bunch of unit test fail on that branch, so the checks do work.



Release Notes:

- N/A

Piotr Osiewicz created

1b85438 docs: Fix casing of "REPL" in sidebar (#14579)

Click to expand commit body
This PR fixes the casing of the REPL link in the sidebar.

Release Notes:

- N/A

Marshall Bowers created

b3d0ac3 Show how to switch out kernels and discover them (#14531)

Click to expand commit body
A few new doc changes for the repl feature.

Release Notes:

- N/A

Kyle Kelley created

a51a9b0 docs: Add AOSC OS Installation (#14575)

Click to expand commit body
Added AOSC OS Installation docs

Release Notes:

- N/A

Mag Mell created

6cf6614 Fix xkbcommon overflow more (#14571)

Click to expand commit body
Release Notes:

- linux: Fixed overflow in xkbcommon-rs

Conrad Irwin created

0bf0152 Fix GoForward shortcut on non-US keyboard layouts (#14570)

Click to expand commit body
- Fixes #14418. Originally broken by #13946

Peter Tripp created

d338e4a editor: Improve performance of edit coalescing (#14567)

Click to expand commit body
# Background
In https://github.com/zed-industries/zed/issues/14408 we received a
repro for "Replace all" being slow, even after the work I did
https://github.com/zed-industries/zed/pull/13654. Admittedly #13654 was
a pretty straightforward change.
Under the profiler it turned out that we're spending *10 seconds* in
`memmove` on main thread. Ugh. Not great. The direct ancestor of the
memmove call was
https://github.com/zed-industries/zed/blob/66f0c390a88f5aa16d21047a8982a5888fa0f816/crates/editor/src/display_map/tab_map.rs#L108-L119

What?

# Accidental O(n^2)
We have a bunch of `consolidate_*_edits` functions which take a list of
Fold/Tab/Inlay/Wrap edits and merge consecutive edits if their ranges
overlap/are next to one another. The loop usually goes as follows:
```
while ix < edits.len() {
    let (prev_edits, next_edits) = edits.split_at_mut(ix);
    let prev_edit = prev_edits.last_mut().unwrap();
    let edit = &next_edits[0];
    if PREV_EDIT_CAN_BE_MERGED_WITH_CURRENT_ONE {
        MERGE_EDITS(prev_edit, edit);
        edits.remove(ix); // !!
    } else {
        ix += 1;
    }
}
```
The problem is the call to `.remove` - it has to shift all of the
consecutive elements in the `edits` vector! Thus, when processing the
edits from the original repro (where consolidation shrinks the edit list
from 210k entries to 30k), we mostly spend time moving entries in memory
around.

Thus, the original repro isn't really an issue with replace_all; it's
just that replace_all is one of the few tools available to the end user
that can apply large # of edits in a single transaction.

# Solution
In this PR I address the issue by rewriting the loop in a way that does
not throw items away via `.remove`. Instead, `Iterator::scan` is used,
which lets us achieve the same logic without having the pitfalls of
`.remove`s.
Crucially, **this code does not allocate a new backing buffer for
edits** (see [this article for
rationale](https://blog.polybdenum.com/2024/01/17/identifying-the-collect-vec-memory-leak-footgun.html));
with `vec.into_iter().scan().filter_map().collect()` we still use the
same underlying buffer as the one that's passed into `consolidate_*`
functions. In development I verified that by checking whether the
pointers to backing storage of a Vec are the same before and after the
consolidation.

# Results

### Before
Nightly 0.145.0
[66f0c390a88f5aa16d21047a8982a5888fa0f816](https://github.com/zed-industries/zed/commit/66f0c390a88f5aa16d21047a8982a5888fa0f816)


https://github.com/user-attachments/assets/8b0ad3bc-86d6-4f8a-850c-ebb86e8b3bfc

(~13s end-to-end)
### After


https://github.com/user-attachments/assets/366835db-1d84-4f95-8c74-b1506a9fabec

(~2s end-to-end)

The remaining lag is (I think) lies in `TextSummary` calculation and not
the consolidation itself. Thus, for the purposes of scoping this PR,
I'll tackle it separately.

Release Notes:

- Significantly improved performance of applying large quantities of
concurrent edits (e.g. when running "Replace all").

Piotr Osiewicz created

751508b linux: Install dependencies when bundling nightly (#14566)

Click to expand commit body
Release Notes:

- N/A

Thorsten Ball created

f54f5df linux: Build Nightly for ARM too (#14562)

Click to expand commit body
Release Notes:

- N/A

Thorsten Ball created

66f0c39 linux: Fix missing licenses in binary causing panics (#14561)

Click to expand commit body
Turns out that the existing CI step for Nightly did create the licenses
and they have been baked into X86 builds ever since, because our
builders are stateful.

On ARM machines, the licenses wouldn't exist in the binary because we
called `script/generate-licenses` too late in `scripts/bundle-linux`,
after the binary had been created.

This removes the duplication and generates the licenses once, before the
binary is created.

Fixes #14302.

Release Notes:

- Fixed "View Dependency Licenses" (or `zed: open licenses`) crashing on
Linux ARM machines.
([#14302](https://github.com/zed-industries/zed/issues/14302)

Thorsten Ball created

fdd233e Change the context menu and Copilot settings icon (#14501)

Click to expand commit body
Felt the link we were using for menu items that open a browser page was
not the best. That one is most typically used for attachments within
scope, as opposed to opening external links. Noticed that via the
"Copilot Settings" menu, which also felt like it could have a bit more
descriptive label. Also reduced the size of the rendered icon in this
component.

---

Release Notes:

- N/A

Danilo Leal created

bf7e474 Properly fix the tab icons

Kirill Bulatov created

2a8cee5 Keep initial tab config without the icons (#14553)

Click to expand commit body
Based on
https://zed-industries.slack.com/archives/C04S5TU0RSN/p1721125498461089

Release Notes:
- N/A

Kirill Bulatov created

ef20afa project_panel: Fixed open in split not working in project panel (#14535)

Click to expand commit body
Release Notes:

- Fixed `cmd-double click` in project panel not opening a split view ([14465](https://github.com/zed-industries/zed/issues/14465))

CharlesChen0823 created

e413823 Headless extensions (#14538)

Click to expand commit body
Release Notes:

- remoting (alpha only): Fix extension installation

Conrad Irwin created

e68d9f4 Switch to muted color for kernel output labels (#14529)

Click to expand commit body
Sets the text for "Executing...", "Queued", etc. to be `Color::Muted`

<img width="442" alt="image"
src="https://github.com/user-attachments/assets/10c27ce2-b804-41a3-a50e-0778b7e6cd09">


Release Notes:

- N/A

Kyle Kelley created

3407256 linux: Tweak file chooser dialogs (#14526)

Click to expand commit body
Mostly some small tweaks to the file chooser dialogs.

Fixes https://github.com/zed-industries/zed/issues/14127 (along with the
`ashpd` update in https://github.com/zed-industries/zed/pull/14401)

Also included a fix
(https://github.com/zed-industries/zed/commit/971d67c994dd595454cc4bc92bdf33d9da30a31a)
for an issue that made multiple file chooser dialogs pop up on Wayland
when doing CTRL + O and quickly pressing the escape key.

Release Notes:

- N/A

apricotbucket28 created

abc5abc open picker (#14524)

Click to expand commit body
Release Notes:

- linux: Added a fallback Open picker for when XDG is not working
- Added a new setting `use_system_path_prompts` (default true) that can
be disabled to use Zed's builtin keyboard-driven prompts.

---------

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

Conrad Irwin and Max created

da33aac extensions_ui: Remove commented-out code (#14525)

Click to expand commit body
This PR removes some commented-out code from the `extensions_ui`.

Release Notes:

- N/A

Marshall Bowers created

1818fef Display file icons in tabs (#14523)

Click to expand commit body
This PR adds support for displaying file icons in tabs.

The `tabs.file_icons` setting controls whether the icons are displayed:

```json
{
  "tabs": {
    "file_icons": false
  }
}
```

This setting defaults to `true`.

<img width="1566" alt="Screenshot 2024-07-15 at 6 17 26 PM"
src="https://github.com/user-attachments/assets/86dfc8c9-764c-453d-95e4-2ec95d6fe715">

<img width="1566" alt="Screenshot 2024-07-15 at 6 24 26 PM"
src="https://github.com/user-attachments/assets/4b4e8489-49d3-41bf-b4cb-59365bdd3e9d">

Release Notes:

- Added file icons to buffer tabs
([#12138](https://github.com/zed-industries/zed/issues/12138)).
- If desired, these icons can be removed using `"tabs": { "file_icons":
false }`.

Marshall Bowers created

2ae1a47 Upsell built-in features on the extensions page (#14516)

Click to expand commit body
This PR extends the extensions page with support for upselling built-in
Zed features when certain keywords are searched for.

This should help inform users about features that Zed has out-of-the-box
when they go looking for them as extensions.

For example, when someone searches "vim":

<img width="1341" alt="Screenshot 2024-07-15 at 4 58 44 PM"
src="https://github.com/user-attachments/assets/b256d07a-559a-43c2-b491-3eca5bff436e">

Here are more examples of what the upsells can look like:

<img width="1341" alt="Screenshot 2024-07-15 at 4 54 39 PM"
src="https://github.com/user-attachments/assets/1f453132-ac14-4884-afc4-7c12db47ad1d">

Release Notes:

- Added banners for built-in Zed features when corresponding keywords
are used in the extension search.

Marshall Bowers created

d7a25c1 Add an experimental, WIP diagnostics grouping panel (#14515)

Click to expand commit body
Provide a current, broken state as an experimental way to browse
diagnostics.
The diagnostics are grouped by lines and reduced into a block that, in
case of multiple diagnostics per line, could be toggled back and forth
to show more diagnostics on the line.
Use `grouped_diagnostics::Deploy` to show the panel.

Issues remaining:
* panic on warnings toggle due to incorrect excerpt manipulation
* badly styled blocks
* no key bindings to navigate between blocks and toggle them
* overall odd usability gains for certain groups of people

Due to all above, the thing is feature-gated and not exposed to regular
people.


Release Notes:

- N/A

Kirill Bulatov created

2c6cb4e Fix Cmd+\ for workspace::ToggleLeftDock for Atom base keymap (#14098)

Click to expand commit body
Release Notes:

- Fixed Left Dock in Atom keymap on Mac/Linux (`cmd-\`, `ctrl-\`) 
 ([#14098](https://github.com/zed-industries/zed/pull/14098), thanks [@audionerd](https://github.com/audionerd)).

---------

Co-authored-by: Peter Tripp <peter@zed.dev>

Eric Skogen and Peter Tripp created

143035b gpui_macros: Extract `border_style_methods` macro (#14514)

Click to expand commit body
This PR extracts a separate `border_style_methods` macro so that it can
be used independently from `style_helpers!`.

Release Notes:

- N/A

Marshall Bowers created

fa3d290 Add REPL dropdown menu to toolbar (#14493)

Click to expand commit body
TODO: 


- [x] Actions run from menu not firing
- [x] Menu differentiates idle and busy for running kernel

Menu States:
- [x] No session && no support known

No session && no kernel installed for languages of known support
- (TODO after) Intro to REPL
- [x] Link to docs

No session but can start one
- [x] Start REPL
- (TODO after) More info -> Docs?

Yes Session

- [x] Info: Kernel name, language
  example: chatlab-3.7-adsf87fsa (Python)
  example: condapy-3.7 (Python)
- [x] Change Kernel -> https://zed.dev/docs/repl#change-kernel
- ---
- [x] Run
- [x] Interrupt
- [x] Clear Outputs
- ---
- [x] Shutdown


(Release notes left empty as the change will be documented in the REPL
release!)

Reserved for a follow on PR:

```
- [ ] Status should update when the menu is open (missing `cx.notify`?)
- [ ] Shutdown all kernels action
- [ ] Restart action
- [ ] [Default kernel changed - restart (this kernel) to apply] // todo!(kyle): need some kind of state thing that says if this has happened
```


Release Notes:

- N/A

---------

Co-authored-by: Marshall Bowers <elliott.codes@gmail.com>
Co-authored-by: Kyle Kelley <rgbkrk@gmail.com>
Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>

Nate Butler , Marshall Bowers , Kyle Kelley , and Piotr Osiewicz created

1856320 Add mouse handling to gpui input example (#14350)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: Jason Lee <huacnlee@gmail.com>

Conrad Irwin and Jason Lee created

b58abb1 linux: Hide Install CLI from welcome (#14506)

Click to expand commit body
Release Notes:

- linux: Remove "Install CLI" from welcome, it is not necessary

Conrad Irwin created

868455f linux: Fix IME on fcitx5 (#14508)

Click to expand commit body
Release Notes:

- linux: Fix IME under fcitx5 (#14192)

Conrad Irwin created

c27c412 linux: re-add open fallback (#14359)

Click to expand commit body
Release Notes:

- linux: Fixed opening urls/directories on systems where the xdg desktop
portal doesn't handle those requests.

Conrad Irwin created

0b0de8c Display hint to add PATH for Fish shell too (#14504)

Click to expand commit body
tested on `fish 3.7.1 (released March 19, 2024)`
___

Release Notes:

- N/A

makeProjectGreatAgain created

f3ddd18 linux: Show warning if file picker portal is missing (#14401)

Click to expand commit body
This PR adds a warning when the file chooser couldn't be opened on Linux

It's quite confusing when trying to open a file and apparently nothing
happens:

fixes https://github.com/zed-industries/zed/issues/11089,
https://github.com/zed-industries/zed/issues/14328,
https://github.com/zed-industries/zed/issues/13753#issuecomment-2225812703,
https://github.com/zed-industries/zed/issues/13766,
https://github.com/zed-industries/zed/issues/14384,
https://github.com/zed-industries/zed/issues/14353,
https://github.com/zed-industries/zed/issues/9209


![image](https://github.com/user-attachments/assets/5acabdaa-7a9d-4225-9480-e371d20387c3)


Release Notes:

- N/A

apricotbucket28 created

5d860e2 Fix selectable popover dismissing on key press (#14368)

Click to expand commit body
Release Notes:

- Fixed dismissal bug included in #12918

Ephram created

e26dbe2 Add linux Zed log location to crash report github issue template (#14373)

Click to expand commit body
Release Notes:

- N/A

Peter Tripp created

3c38be5 Add keyboard shortcuts to center scrolling around current line (#14385)

Click to expand commit body
- MacOS: Center the cursor in the visible area. `ctrl-l` (matches MacOS)
- Linux JetBrains: Scroll so cursor is at the Middle `ctrl-m`
- `editor::NextScreen` is not longer bound in any keymap by default (was
`ctrl-l` on MacOS)

Fixes #5247

Peter Tripp created

e50811c Adjust list item & pickers spacing (#14250)

Danilo Leal created

c1aa4d9 rust: Expose import names in completions for modules and functions (#14490)

Click to expand commit body
Release Notes:

- Improved accuracy of completion lists for Rust functions and modules.

Piotr Osiewicz created

e8d674d Show cursors for shared contexts (#14484)

Click to expand commit body
Release Notes:

- N/A

Co-authored-by: Nathan <nathan@zed.dev>

Antonio Scandurra and Nathan created

f0279e6 Add Gemini models to cloud enum (#14482)

Click to expand commit body
Release Notes:

- N/A

Nathan Sobo created

98b95d9 Introduce `/symbols` command in assistant panel (#14360)

Click to expand commit body
Release Notes:

- Added `/symbols` command in assistant panel.

---------

Co-authored-by: Antonio <antonio@zed.dev>
Co-authored-by: Antonio Scandurra <me@as-cii.com>
Co-authored-by: Nathan <nathan@zed.dev>

Max Brunsfeld , Antonio , Antonio Scandurra , and Nathan created

decdd3b Introduce following for assistant panel (#14479)

Click to expand commit body
Release Notes:

- Added support for following into the assistant panel.

---------

Co-authored-by: Max <max@zed.dev>
Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
Co-authored-by: Nathan <nathan@zed.dev>

Antonio Scandurra , Max , Max Brunsfeld , and Nathan created

977a1b7 Support dynamic formatting capabilities [un]registration (#14478)

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

Release Notes:

- Added dynamic [un]registration for LSP formatting capabilities
([#12661](https://github.com/zed-industries/zed/issues/12661))

Kirill Bulatov created

684d9dd zig: Wire up LSP `settings` and `binary.{path/arguments}` for `zls` (#14379)

Click to expand commit body
Enables the  LSP `settings` and `binary.{path/arguments}` functionality

Example:
```
"lsp": {
    "zls": {
      "settings": {
        "semantic_tokens": "none"
      },
      "binary": {
        "path": "/home/user/zls/zig-out/bin/zls",
        "arguments": ["--enable-debug-log"]
      }
    }
  },
```

Release Notes:

- N/A

llogick created

315692d windows: Refactor clipboard implementation (#14347)

Click to expand commit body
This PR provides a similar implementation to the macOS clipboard
implementation, adds support for metadata and includes tests.

Release Notes:

- N/A

张小白 created

ba09eab windows: Make window creation failable (#14395)

Click to expand commit body
Release Notes:

- N/A

张小白 created

70d983a Include stable package in docs, mention UM, and link to sources for the Fedora package (#14432)

Click to expand commit body
Hello, I'm one of the maintainers of the Zed package on Terra. I made
the following changes:

- Mention the Terra stable package, instead of only preview and nightly.
- Link to sources for Terra packages instead of pkgs.org.
- Mention Ultramarine in addition to Fedora (one of Terra's targets).

Release Notes:

- N/A

lea created

4a3097d x11: Fix capitalization with neo 2 (#14466)

Click to expand commit body
Fixed #14282

Release Notes:

- N/A

Fernando Tagawa created

59ce353 Turn off `use_on_type_format` too, for languages that have `format_on_save` disabled (#14413)

Click to expand commit body
Based on the discussion in
https://github.com/zed-industries/zed/issues/14400


Release Notes:

- N/A

Kirill Bulatov created

f8b5e42 Do not send `textDocument/didSave` message if server does not declare its support (#14412)

Click to expand commit body
Release Notes:

- Improved Zed logic for sending `textDocument/didSave` request
([14286](https://github.com/zed-industries/zed/issues/14286))

Kirill Bulatov created

88c5eb5 Lookup prettier more leniently (#14403)

Click to expand commit body
Do not require the `prettier` dependency name to be in package.json's
[dev]Dependencies, instead just checking the `node_modules` contents.

Release Notes:

- Improved `prettier` detection to pick up its installation from
transitive dependencies
([12731](https://github.com/zed-industries/zed/issues/12731)

Kirill Bulatov created

e5dc6be deno: wire up LSP settings (#14410)

Click to expand commit body
Currently deno lsp only works because deno have a workaround when it
detects deno.json it gets activated, but without a deno.json it won't
work
With this change now it works correctly regardless of a deno.json
presence, it only require enable:true:


```json
{
  "lsp": {
    "deno": {
      "settings": {
        "deno": {
          "enable": true
        }
      }
    }
  }
}
```


Release Notes:

- Improved initial Deno set-up to enable it without explicit deno.json present in the file system

Bedis Nbiba created