Commit log

373a4e7 Properly display deleted diff hunks (#9182)

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

Release Notes:

- Fixed removal diff hunks not being displayed properly in the editor

Kirill Bulatov created

f9f9f06 editor: Rearrange float operations in layout (#9176)

Click to expand commit body
We were seeing weird layouts with large files, where - starting with
some verylargelineindex - lines were rendered at weird y offsets. It
turned out that in some cases we're doing operations on Pixel values of
different magnitude, which then led to wrong results in calculations.
This commit addresses some of these problems, visible at glance when
working with large plaintext files. I *did not* dig into things like
inlay hints or diagnostics to see if they are subject to the same
potential precision loss.

Fixes #5371 

Release Notes:

- Fixed editor layout for large files, where the lines might have been
laid out with incorrect Y offset from the top.

Piotr Osiewicz created

20d5f5e linux: wayland cursor fixes (#9047)

Click to expand commit body
Release Notes:

- Fixed wayland cursor style handling


In upcoming Gnome 46, cursor icon names are considerably changing. For
example: this commit
https://gitlab.gnome.org/GNOME/adwaita-icon-theme/-/commit/74e9b79471236320d2af4925d6c5bb7df22380ce
removed/modified a lot of cursor names. Then some of the names were
reintroduced in this commit
https://gitlab.gnome.org/GNOME/adwaita-icon-theme/-/commit/6f64dc55dcaae24a14564494e24564a120cb4f33.
I also tried upcoming KDE Plasma 6. Some of the cursor names are not
used commonly between Gnome and KDE. From my analysis, these set of
cursor names should be more widely available in both previous and
upcoming release of Gnome and KDE.

Also, If a cursor style is not available, let's fallback to default
cursor style. This avoids scenarios where we get stuck with special
cursor styles like IBeam/Resize* because the current cursor style is not
available. This will lead to an unpleasant/broken experience. Falling
back to default cursor seems to be more acceptable.

Joel Selvaraj created

f066dd2 Fix race when language server registers for `workspace/didChangeWatchedFiles` (#9177)

Click to expand commit body
This fixes #8896 by storing the `watched_paths` in a separate HashMap,
allowing us to handle the request even before we mark the language
server as running.

Downside is that we have yet another data structure for language
servers, but it also makes the `Running` enum case a bit smaller.

And it fixes the race condition.

Release Notes:

- Fixed language servers not being notified of file changes if language
server registers for file-notification right after starting up.
([#8896](https://github.com/zed-industries/zed/issues/8896)).

Co-authored-by: Bennet <bennetbo@gmx.de>
Co-authored-by: Remco <djsmits12@gmail.com>

Thorsten Ball , Bennet , and Remco created

0be20d0 fix: vulkan dependencies in `script/linux` (#9116)

Click to expand commit body
Just a quick pull request and a small fix, someone reported a dependency
was erroring for him, so I decided to open a small pull request. On top
of that, any `devel` header is not needed because Vulkan is only a
runtime dependency.

Release Notes:

- Fixed names of Vulkan dependencies that didn't exist

Mart Zielman created

a04932c Windows: fix crash with unhandled window (#9164)

Click to expand commit body
On Windows, some windows may be created that are not managed by the
application.
For example, the Japanese IME creates pop-ups like this one.

<img width="325" alt="image"
src="https://github.com/zed-industries/zed/assets/6465609/503aaa0a-7568-485a-a138-e689ae67001c">

The internal data associated with such a window is different from
`WindowsWindowInner` and will crash if referenced.
Therefore, before calling `try_get_window_inner`, it checks if it is an
owned window.


Release Notes:

- N/A

白山風露 created

ceadb39 Prevent text from wrapping in code actions menu (#9178)

Click to expand commit body
Right now we're basing the width of the menu on the longest code action
title. That is only an approximation and doesn't always coincide
perfectly with the true, longest code action.

Given that it's pretty close, however, this commit simply disables text
wrapping on the code action menu.

Release Notes:

- Fixed a rendering glitch that could cause code actions to not display
correctly ([#8341](https://github.com/zed-industries/zed/issues/8341))

Antonio Scandurra created

2244419 Add missed pad (#9175)

Click to expand commit body
Sorry I missed explicitly `Quad::pad` insertion at #9172.

The struct layout is unchanged and does not affect the behavior.

Release Notes:

- N/A

白山風露 created

a8fa1f7 chat: fix emoji completions when word consists of emojis (#9107)

Click to expand commit body
https://github.com/zed-industries/zed/assets/53836821/f4b31c47-d306-43f5-b971-0969f64a48f9

Fix for #9096 @JosephTLyons 

Release Notes:
- Fixed emoji completion not showing up when word contains only emojis
(#9096)

Bennet Bo Fenner created

eb5e18c Fix blade validation failure (#9172)

Click to expand commit body
Fix: #9167

Release Notes:

- N/A

白山風露 created

830e107 Hide hover popover when mouse hovers over negative space (#9173)

Click to expand commit body
Fixes https://github.com/zed-industries/zed/issues/8340

Release Notes:

- Fixed a bug that would cause hover information to not be dismissed
when hovering over negative space.

Antonio Scandurra created

45c4d35 rope: Preallocate chunks buffer

Click to expand commit body
This commit also specializes 'fn push' for large text quantities. That specialized version uses a Vec instead of SmallVec.
This commit shaves off about ~100ms out of 800ms when loading a 600Mb text buffer.

Piotr Osiewicz created

298314d Fix regressions introduced by flicker fix (#9162)

Click to expand commit body
This pull request fixes a couple of easy regressions we discovered right
after using #9012 on nightly:

- Popover buttons for a chat message were being occluded by the message
itself.
- Scrolling was not working on the `List` element.

Release Notes:

- N/A

Antonio Scandurra created

2f6c78b Fix incorrect outline selections after submit (#9160)

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

Release Notes:

- N/A

Kirill Bulatov created

4700d33 Fix flickering (#9012)

Click to expand commit body
See https://zed.dev/channel/gpui-536

Fixes https://github.com/zed-industries/zed/issues/9010
Fixes https://github.com/zed-industries/zed/issues/8883
Fixes https://github.com/zed-industries/zed/issues/8640
Fixes https://github.com/zed-industries/zed/issues/8598
Fixes https://github.com/zed-industries/zed/issues/8579
Fixes https://github.com/zed-industries/zed/issues/8363
Fixes https://github.com/zed-industries/zed/issues/8207


### Problem

After transitioning Zed to GPUI 2, we started noticing that interacting
with the mouse on many UI elements would lead to a pretty annoying
flicker. The main issue with the old approach was that hover state was
calculated based on the previous frame. That is, when computing whether
a given element was hovered in the current frame, we would use
information about the same element in the previous frame.

However, inspecting the previous frame tells us very little about what
should be hovered in the current frame, as elements in the current frame
may have changed significantly.

### Solution

This pull request's main contribution is the introduction of a new
`after_layout` phase when redrawing the window. The key idea is that
we'll give every element a chance to register a hitbox (see
`ElementContext::insert_hitbox`) before painting anything. Then, during
the `paint` phase, elements can determine whether they're the topmost
and draw their hover state accordingly.

We are also removing the ability to give an arbitrary z-index to
elements. Instead, we will follow the much simpler painter's algorithm.
That is, an element that gets painted after will be drawn on top of an
element that got painted earlier. Elements can still escape their
current "stacking context" by using the new `ElementContext::defer_draw`
method (see `Overlay` for an example). Elements drawn using this method
will still be logically considered as being children of their original
parent (for keybinding, focus and cache invalidation purposes) but their
layout and paint passes will be deferred until the currently-drawn
element is done.

With these changes we also reworked geometry batching within the
`Scene`. The new approach uses an AABB tree to determine geometry
occlusion, which allows the GPU to render non-overlapping geometry in
parallel.

### Performance

Performance is slightly better than on `main` even though this new
approach is more correct and we're maintaining an extra data structure
(the AABB tree).


![before_after](https://github.com/zed-industries/zed/assets/482957/c8120b07-1dbd-4776-834a-d040e569a71e)

Release Notes:

- Fixed a bug that was causing popovers to flicker.

---------

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

Antonio Scandurra , Nathan Sobo , and Thorsten created

9afd78b Add ESLint information to JavaScript docs (#9158)

Click to expand commit body
Release Notes:

- N/A

Thorsten Ball created

9ff3cff Respect `eslint.nodePath` setting (#9073)

Click to expand commit body
I'm using Yarn Plug'n'Play.
In this case, by default, eslint cannot find the path, so configuration
like `"eslint.nodePath": ".yarn/sdks"` is required.
So, I want to add this!

Release Notes:

- Added eslint config nodePath

Yanguk created

d66f8f9 docs: Move Linux tracking issue (#9130)

Click to expand commit body
Release Notes:

- N/A

Kainoa Kanter created

2698487 Fix Vim code formating (#9098)

Click to expand commit body
- N/A

Hans created

39bd12a gpui: add set menus example (#9131)

Click to expand commit body
Add an example showing how to add a menu item, register an action with
the `AppContext`, and successfully call the action.

Release Notes:

- N/A

Andrew created

e1f8a1e Fix `<!DOCTYPE html>` syntax highlighting (#9108)

Click to expand commit body
Release Notes:

- Added `<!DOCTYPE html>` syntax highlighting ([4318](https://github.com/zed-industries/zed/issues/4318))

Max created

41dc5fc Allow highlighting editor rows from multiple sources concurrently (#9153)

Kirill Bulatov created

f4a86e6 Always single-quote directory when cd'ing to get shell env (#9145)

Click to expand commit body
This avoids us potentially executing code (if someone were to name their
directory `$(echo you-are-pwned > /secure-files)`, for example).

Works with zsh, bash, fish, nushell. Tested locally with all of them.

Release Notes:

- N/A

Thorsten Ball created

597465b Slightly simplify editor highlights code (#9123)

Click to expand commit body
Prepare for git diff hunk highlights by grouping all inlay highlight
properties into one struct, and removing the dead background highlight
code.


Release Notes:

- N/A

Kirill Bulatov created

ccc9391 Remove obsolete separator (#9117)

Max created

a03feca Remove feedback button from status bar (#9100)

Click to expand commit body
This PR removes the feedback button from the status bar, as Nathan and I
discussed. We discussed the fact that we likely no longer need to take
up valuable screen real estate for this, with where Zed as at now.

This PR also moves the `Share Feedback...` collab menu item to the
`Help` menu, as that's where VS Code puts their action to send in-app
feedback (which might help with future discoverability) and renames it
to `Give Feedback...`, to make it consistent with the name of the
command palette action.

Release Notes:

- Removed the feedback button from the status bar.

Joseph T. Lyons created

ca696fd Add rs-notify implementation of `fs::watch` (#9040)

Click to expand commit body
This PR simplifies the Zed file system abstraction and implements
`Fs::watch` for linux and windows.

TODO:
- [x] Figure out why this fails to initialize the file watchers when we
have to initialize the config directory paths, but succeeds on
subsequent runs.
- [x] Fix macOS dependencies on old fsevents::Event crate

Release Notes:

- N/A

Mikayla Maki created

456efb5 windows: Add file dialog using IFileOpenDialog (#8919)

Click to expand commit body
Release Notes:

- Added a file dialog for Windows

Jason Wen created

d4ec78f Add strikethrough to deprecated methods in CompletionsMenu (#9086)

Click to expand commit body
Release Notes:

- Added ([#8390](https://github.com/zed-industries/zed/issues/8390)).
- Also Grays out deprecated methods

Before

<img width="730" alt="image"
src="https://github.com/zed-industries/zed/assets/71665039/8b5e8009-22c2-43f7-b85b-79e571a5d282">

After

<img width="773" alt="image"
src="https://github.com/zed-industries/zed/assets/71665039/0aff572b-6d3f-4ed9-b08b-d925ee650817">

Adam created

efe5203 GPUI: Wayland: Add fullscreen, minimize and avoid unnecessary resizes (#9060)

Click to expand commit body
Release Notes:
- N/A

bbb651 created

146971f Splice remove suggesion hints when those are cleared in the editor. (#9088)

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

Release Notes:

- Fixed copilot suggestions not disappearing after disabling the tool
([6793](https://github.com/zed-industries/zed/issues/6793))

Kirill Bulatov created

3471780 Add `editor::RevertSelectedHunks` to revert git diff hunks in the editor (#9068)

Click to expand commit body
https://github.com/zed-industries/zed/assets/2690773/653b5658-e3f3-4aee-9a9d-0f2153b4141b

Release Notes:

- Added `editor::RevertSelectedHunks` (`cmd-alt-z` by default) for
reverting git hunks from the editor

Kirill Bulatov created

6a7a3b2 Add missing docstrings to settings.rs (#9054)

Click to expand commit body
![image](https://github.com/zed-industries/zed/assets/1290639/46c13110-8506-4b03-91d4-b1cfcafe824a)

Add documentation for theme-related settings.

Release Notes:

- Add documentation for theme-related settings ([8383](https://github.com/zed-industries/zed/issues/8383))

Jadi created

8a6264d Provide wasm extensions with APIs needed for using pre-installed LSP binaries (#9085)

Click to expand commit body
In this PR, we've added two new methods that LSP extensions can call:
* `shell_env()`, for retrieving the environment variables set in the
user's default shell in the worktree
* `which(command)`, for looking up paths to an executable (accounting
for the user's shell env in the worktree)

To test this out, we moved the `uiua` language support into an
extension. We went ahead and removed the built-in support, since this
language is extremely obscure. Sorry @mikayla-maki. To continue coding
in Uiua in Zed, for now you can `Add Dev Extension` from the extensions
pane, and select the `extensions/uiua` directory in the Zed repo. Very
soon, we'll support publishing these extensions so that you'll be able
to just install it normally.

Release Notes:

- N/A

---------

Co-authored-by: Marshall <marshall@zed.dev>

Max Brunsfeld and Marshall created

5abcc1c Let LineColumn on StatusBar as clickable to open GoToLineColumn (#9002)

Click to expand commit body
Release Notes:

- Added to let LineColumn on StatusBar as clickable to open
GoToLineColumn.
- Added placeholder to GoToLineColumn input, and show help message on
input changed.

## Screenshot


![go-to-line-column](https://github.com/zed-industries/zed/assets/5518/90a4f644-07d4-4208-8caa-5510e1537f37)

Jason Lee created

977af37 open zed urls (#9081)

Click to expand commit body
Release Notes:

- Added support for opening files on the zed protocol `open
zed:///Users/example/Desktop/a.txt`
([#8482](https://github.com/zed-industries/zed/issues/8482)).

Conrad Irwin created

1756c1f Improve UI of popover buttons when hovering over chat messages (#9041)

Click to expand commit body
### Before


https://github.com/zed-industries/zed/assets/146845123/4a16c1ce-a671-4e39-abc9-3a0cb25bc0cd

### After


https://github.com/zed-industries/zed/assets/146845123/cfab3d00-246e-427d-9c40-8ee520a0a186




Release Notes:
- Improved the UI of popover buttons when hovering over chat messages.

Evren Sen created

be953b7 Add script for setting up WASI dependencies (#9078)

Click to expand commit body
This PR adds a script for setting up the WASI dependencies needed for
extensions.

These already get downloaded when needed when using Zed, but in the
tests the HTTP client is faked out, so if you don't already have them
installed the `test_extension_store_with_gleam_extension` test will
fail.

Release Notes:

- N/A

Marshall Bowers created

51ebe0e Allow wasm extensions to do arbitrary file I/O in their own directory to install language servers (#9043)

Click to expand commit body
This PR provides WASM extensions with write access to their own specific
working directory under the Zed `extensions` dir. This directory is set
as the extensions `current_dir` when they run. Extensions can return
relative paths from the `Extension::language_server_command` method, and
those relative paths will be interpreted relative to this working dir.

With this functionality, most language servers that we currently build
into zed can be installed using extensions.

Release Notes:

- N/A

Max Brunsfeld created

a550b9c Impl `prompts` and `savefile dialog` on Windows (#9009)

Click to expand commit body
### Description
This is a part of #8809 , and this PR dose not include `open file
dialog`, as I already saw two PRs impl this.



https://github.com/zed-industries/zed/assets/14981363/3223490a-de77-4892-986f-97cf85aec3ae




Release Notes:

- N/A

张小白 created

bf295ea Task::spawn now takes an optional task name as an argument.

Click to expand commit body
If it is not set, we fall back to opening a modal. This allows user to spawn tasks via keybind.

Piotr Osiewicz created

fa5dfe1 Fix default tasks.json definition

Piotr Osiewicz created

7b73e28 fs: allocate backing storage once in Fs::load (#9020)

Click to expand commit body
`futures_lite::AsyncReadExt::read_to_string` (that we use in
`RealFs::load`) explicitly does not allocate memory for String contents
up front, which leads to excessive reallocations. That reallocation time
is a significant contributor to the time we spend loading files (esp
large ones). For example, out of ~1s that it takes to open up a 650Mb
ASCII buffer on my machine (after changes related to fingerprinting from
#9007), 350ms is spent in `RealFs::load`.
This change slashes that figure to ~110ms, which is still *a lot*. About
60ms out of 110ms remaining is spent zeroing memory. Sadly,
`AsyncReadExt` API forces us to zero a buffer we're reading into
(whether it's via read_to_string or read_exact), but at the very least
this commit alleviates unnecessary reallocations.

We could probably use something like
[simdutf8](https://docs.rs/simdutf8/latest/simdutf8/) to speed up UTF8
validation in this method as well, though that takes only about ~18ms
out of 110ms, so while it is significant, I've left that out for now.
Memory zeroing is a bigger problem at this point.

Before:

![image](https://github.com/zed-industries/zed/assets/24362066/5e53c004-8a02-47db-bc75-04cb4113a6bc)

After:

![image](https://github.com/zed-industries/zed/assets/24362066/00099032-d647-4683-b290-eaeb969cac4a)

/cc @as-cii 

Release Notes:

- Improved performance when loading large files.

Piotr Osiewicz created

1081ba7 Adjust to newer logic from zed-industries/cargo-bundle (#9058)

Click to expand commit body
Zed uses a fork of cargo-bundle, that got upstream changes and
https://github.com/zed-industries/cargo-bundle/commit/9e185bd44d968d8039192220603494555afdbb4f
into the deploy branch.

Remove a TODO and adjust the script to the new packaging logic.


Release Notes:

- N/A

Kirill Bulatov created

ed8aa6d Fix panic in layout_line when Y coordinate is too high (#9052)

Click to expand commit body
Release Notes:

- N/A

Conrad Irwin created

af56424 Make comment above `util::fs::remove_matching` a doc comment (#9051)

Click to expand commit body
Just this one little thing, noticed it while working on an unrelated
pull request.

Release Notes:

- N/A

Valentine Briese created

aa7be4b Add clipboard support for Windows (#8978)

Click to expand commit body
Release Notes:

- Added Read / Write clipboard support to Windows via copypasta

---------

Co-authored-by: Mikayla Maki <mikayla@zed.dev>

EricApostal and Mikayla Maki created

866d791 Fix joining hosted projects (#9038)

Click to expand commit body
Release Notes:

- N/A

Conrad Irwin created

f67abd2 vim: smartcase find option (#9033)

Click to expand commit body
Release Notes:

- Added option `use_smartcase_find` to the vim-mode

Rom Grk created

d247086 vim: subword motions (#8725)

Click to expand commit body
Add subword motions to vim, inspired by
[nvim-spider](https://github.com/chrisgrieser/nvim-spider),
[CamelCaseMotion](https://github.com/bkad/CamelCaseMotion).


Release Notes:

- Added subword motions to vim

Rom Grk created