Commit log

d1e2c6e python: Add pylsp as the secondary language server (#20358)

Click to expand commit body
Closes #ISSUE

Release Notes:

- Added python-lsp-server as a secondary built-in language server.

Piotr Osiewicz created

181c372 windows: Fix rust-analyzer download (#20408)

Click to expand commit body
After https://github.com/rust-lang/rust-analyzer/pull/18412, there is no
longer a .gz file for windows rust-analyzer targets, and the rust
analyzer LSP fails to download. This fixes it by using the .zip version
on windows.

The .zip also extracts to a _folder_ containing rust-analyzer.exe rather
than just a file. I've handled it in this code, but am not 100% sure if
other parts of the code need too be aware of it.

Release Notes:

- N/A

Arthur Brussee created

aad3ed7 Fix window drawing when switching X11 workspaces by presenting when expose events occur (#20535)

Click to expand commit body
Closes #18184

Release Notes:

- Fix window drawing when switching X11 workspaces, particularly for tiling window managers such as i3wm and XMonad.

Michael Sloan created

ad3171d Expose active key equivalents in the keymap context view (#20530)

Click to expand commit body
Release Notes:

- Added macOS key equivalents to cmd-shift-p `debug: Open Key Context
View`

Conrad Irwin created

e4bf586 SSH Remoting: Improve unsupported error messages (#20529)

Click to expand commit body
Updates #19697

Release Notes:

- SSH Remoting: Improved error message on unsupported OS/Arch.

Conrad Irwin created

ab20681 Use char level diff for Rewrap action for cursor preservation + not reinserting all text (#20368)

Click to expand commit body
Closes #18896

Release Notes:

- Fixed #18896 - `editor::Rewrap` now preserves cursors and only inserts
whitespace by using character-level diff instead of line-level diff.

Michael Sloan created

6819108 Bump rustls and async-tungstenite to remove child dep ring 0.16.20 (#20489)

Click to expand commit body
Closes #18891 

Tests:
- I have cargo checked and built `remote-server` on my riscv64 dev
board.
- I have cargo checked and tested on my M1 Mac
- Almost all test passed. Some (LLM tests, Postgres tests)failed due to,
IMO, irrelevant reasons

Release Notes:

- Improved support of Zed remote server compilation for riscv64

cc @ConradIrwin 

PS: I didn't include the changes of `Cargo.lock`, which may look messy.
Probably I should include these? Or, should a reviewer do this? The
expected Cargo.lock should have only one version of `ring` with version
> 0.17.0

ifsheldon created

2521ef7 Document why join_lines has a special case for single-line selections (#20528)

Click to expand commit body
Release Notes:

- N/A

Michael Sloan created

b08ac2a Heaptrack documentation (#20266)

Click to expand commit body
Release Notes:

- N/A

Michael Sloan created

2ea4ede macOS: Improve deadkeys (#20515)

Click to expand commit body
Closes #19738

This change refactors how we handle input on macOS to avoid simulating
our own IME. This fixes a number of small edge-cases, and also lets us
remove a bunch of code that had been added to work around bugs in the
previous version.

Release Notes:

- On macOS: Keyboard shortcuts are now handled before activating the IME
system, this enables using vim's default mode on keyboards that use IME
menus (like Japanese).
- On macOS: Improvements to handling of dead-keys. For example when
typing `""` on a Brazillian keyboard, you now get a committed " and a
new marked ", as happens in other apps. Also, you can now type cmd-^ on
an AZERTY keyboard for indent; and ^ on a QWERTZ keyboard now goes to
the beginning of line in vim normal mode, or `d i "` no requires no
space to delete within quotes on Brazilian keyboards (though `d f "
space` is still required as `f` relies on the input handler, not a
binding).
- On macOS: In the terminal pane, holding down a key will now repeat
that key (as happens in iTerm2) instead of opening the character
selector.

Conrad Irwin created

38f2a91 Fix default project panel autofold docs (#20517)

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

Release Notes:

- N/A

Kirill Bulatov created

82427e1 Add new `DecoratedIcon` component (#20516)

Click to expand commit body
This PR creates a new, revamped `DecoratedIcon` component that enables
using different SVGs, one for the knockout background and another for
the actual icon. That's different than what we were doing before—copying
the SVG and using slightly different positioning—because we wanted to
unlock an aligned knockout effect, which was particularly hard to do
with non-simple shapes such as an X.

Release Notes:

- N/A

---------

Co-authored-by: Nate Butler <1714999+iamnbutler@users.noreply.github.com>

Danilo Leal and Nate Butler created

149e5fd Don't try to make project search and outline order match project panel (#20513)

Click to expand commit body
A straight alphabetical order is arguably clearer, and avoids a large
initial delay when searching large repos.

Release Notes:

- Fixed a long initial delay when performing a project search in a large
repository.

Max Brunsfeld created

97b542b Discover available python environments with Jupyter kernel support (#20467)

Click to expand commit body
![image](https://github.com/user-attachments/assets/7c042bc9-88be-4d7b-b63d-e5b555d54b18)

Closes #18291
Closes #16757
Closes #15563

Release Notes:

- Added support for kernelspecs based on python environments

Kyle Kelley created

6152230 Fix DynamicSpacing docs (#20509)

Click to expand commit body
In #20504 the CustomSpacing enum variants ended up not having docs. This
PR fixes that, now docs correctly show for variants.


https://github.com/user-attachments/assets/8cc409c9-7b71-4c21-a538-3fd5dded3e00

Release Notes:

- N/A

Nate Butler created

a47759f Add initial FreeBSD support (#20480)

Click to expand commit body
This PR adds initial support for FreeBSD
(https://github.com/zed-industries/zed/issues/15309). While there is
still work left to be done, it seems to be usable. As discussed by
@syobocat (https://github.com/zed-industries/zed/discussions/10247), the
changes were just adding ```target_os = "freebsd"``` to wherever it
checks if the OS is Linux.


![image](https://github.com/user-attachments/assets/80ea5b29-047f-4cbd-8263-42e5fa6c94b7)

Needs to be build with ```RUSTFLAGS="-C link-dead-code"```

Known Issues:
- There's an issue in ```crates/project/src/environment.rs``` where a
command fails because ```/bin/sh``` on FreeBSD doesn't support the
```-l``` option.

![image](https://github.com/user-attachments/assets/c3c38633-160f-4f47-8840-e3da67f6ebc8)
- The file/folder choosers provided by the ```ashpd``` crate don't work
on FreeBSD (at least with KDE). This isn't that bad since a fallback
dialog is used.

![image](https://github.com/user-attachments/assets/29373006-1eb9-4ed0-bd52-2d0047fab418)
 - Moving to trash won't work.
- Numerous tests fail (when running on FreeBSD). While I haven't looked
into this much, it appears that the corresponding features seem to work
fine.

Release Notes:

- Added initial support for FreeBSD

Caleb Heydon created

b5da119 Refactor rewrap test to use a test utility (#20424)

Click to expand commit body
Release Notes:

- N/A

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

Michael Sloan and Max created

ba743a1 Add setting to disable inline completions in language scopes (#20508)

Click to expand commit body
This adds a setting to disable inline completions in language scopes to,
for example, disable them in comments or strings.

This setting can be made per language.

Examples:

```json
{
  "languages": {
    "Go": {
      "inline_completions_disabled_in": ["comment", "string"]
    }
  }
}
```

```json
{
  "inline_completions_disabled_in": ["comment"]
}
```

Closes #9133

Release Notes:

- Added language setting to disable inline comments in certain scopes.
Example: `{"languages": {"Go": {"inline_completions_disabled_in":
["comment", "string"]}}}`

Co-authored-by: Bennet <bennet@zed.dev>

Thorsten Ball and Bennet created

9e7afe8 tailwind: Allow configuring the `rootFontSize` (#20500)

Click to expand commit body
This addresses this comment:
https://github.com/zed-industries/zed/pull/13923#issuecomment-2467213210

With the change in here it's now possible to use the following settings:

```json
{
  "lsp": {
    "tailwindcss-language-server": {
      "settings": {
        "rootFontSize": 50
      }
    }
  }
}
```

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

Release Notes:

- Added ability to configure `rootFontSize` for the
`tailwindcss-language-server`. Example settings: `{"lsp":
{"tailwindcss-language-server": {"settings": { "rootFontSize": 50}}}}`

Co-authored-by: Bennet <bennet@zed.dev>

Thorsten Ball and Bennet created

94d8ead Refactor Spacing into DynamicSpacing using proc macro (#20504)

Click to expand commit body
Density tracking issue: #18078 

This PR refactors our spacing system to use a more flexible and
maintainable approach. We've replaced the static `Spacing` enum with a
dynamically generated `DynamicSpacing` enum using a proc macro.

Enum variants now use a `BaseXX` format, where XX = the pixel value @
default rem size and the default UI density.

For example:

`CustomSpacing::Base16` would return 16px at the default UI scale &
density.

I'd love to find another name other than `Base` that is clear (to avoid
base_10, etc confusion), let me know if you have any ideas!

Changes:

- Introduced a new `derive_dynamic_spacing` proc macro to generate the
`DynamicSpacing` enum
- Updated all usages of `Spacing` to use the new `DynamicSpacing`
- Removed the `custom_spacing` function, mapping previous usages to
appropriate `DynamicSpacing` variants
- Improved documentation and type safety for spacing values

New usage example:

```rust
.child(
    div()
        .flex()
        .flex_none()
        .m(DynamicSpacing::Base04.px(cx))
        .size(DynamicSpacing::Base16.rems(cx))
        .children(icon),
)
```

vs old usage example:

```
.child(
    div()
        .flex()
        .flex_none()
        .m(Spacing::Small.px(cx))
        .size(custom_spacing(px(16.)))
        .children(icon),
)
```

Release Notes:

- N/A

Nate Butler created

93ab6ad logs: Reduce log noise by using more debug logs (#20498)

Click to expand commit body
Release Notes:

- N/A

Thorsten Ball created

45bbfe0 python: Fix toolchains not getting picked up after workspace deserialization (#20488)

Click to expand commit body
Closes #20476

Release Notes:

- Fixed a bug in toolchain selector that caused it to not pick up venvs
for tabs before user interacted with them.
- Fixed a bug in language selector that caused it to pick up Markdown as
the language for a buffer up until the tab was interacted with.

Piotr Osiewicz created

be8cc11 language server logs: Fix missing menu entries when using remoting (#20495)

Click to expand commit body
This fixes the language server log menu only showing a single entry when
using SSH remoting.

Culprit was the `return menu;` statement that should've been a
`continue;`

Rest of the change is just refactoring.

Release Notes:

- Fixed `language server logs` menu only showing a single entry when
using SSH remoting.

Co-authored-by: Bennet <bennet@zed.dev>

Thorsten Ball and Bennet created

a97ab5e language servers: Fix wrong language server name (#20428)

Click to expand commit body
This fixes the issue of multiple language servers showing up as `node`
in the language server logs dropdown.

It does this by changing `language_server.name()` to return the
adapter's name, not the binary name, and changing types to make sure
that we always use this.

Release Notes:

- Fixed language server names showing up only as `"node"`

---------

Co-authored-by: Sam Rose <hello@samwho.dev>
Co-authored-by: Bennet <bennet@zed.dev>

Thorsten Ball , Sam Rose , and Bennet created

f4024cc Fix excerpt jumps using selections, not the match data (#20491)

Click to expand commit body
Fixes
https://github.com/zed-industries/zed/pull/20469#issuecomment-2466805325

Release Notes:

- N/A

---------

Co-authored-by: Bennet <bennet@zed.dev>

Kirill Bulatov and Bennet created

1460249 docs: Update msys2 section (#20478)

Click to expand commit body
now Zed is available in MINGW64 repository as well

Release Notes:

- N/A

Maksim Bondarenkov created

da7670c assistant: Track completions for each CodegenAlternative (#19999)

Click to expand commit body
Release Notes:

- N/A

Co-authored-by: Bennet Bo Fenner <bennet@zed.dev>

Adam Wolff and Bennet Bo Fenner created

ebdc255 Add additional instructions to issue templates (#20473)

Click to expand commit body
Release Notes:

- N/A

Joseph T. Lyons created

4d49a85 image viewer: Ensure images can never be loaded twice (#20472)

Click to expand commit body
Follow up to #20374, this prevents a race condition where we could load
images twice.

Release Notes:

- N/A

Bennet Bo Fenner created

0dbda71 Enable reload of images in image viewer (#20374)

Click to expand commit body
Closes #11529

Release Notes:

- Fixed an issue where the image preview would not update when the
underlying file changed

---------

Co-authored-by: Bennet <bennet@zed.dev>

Will Bradley and Bennet created

f332099 lsp: Track completion triggers for each language separately (#20471)

Click to expand commit body
This PR improves how we handle completions in buffers with multiple
LSPs.

Context: while working on
https://github.com/zed-industries/zed/issues/19777 with @mgsloan we
noticed that completion triggers coming from language servers are not
tracked properly. Namely, each buffer has `completion_triggers` field
which is read from the configuration of a language server. The problem
is, there can be multiple language servers for a single buffer, in which
case we'd just stick to the one that was registered last.

This PR makes the tracking a bit more fine-grained. We now track not
only what the completion triggers are, but also their origin server id.
Whenever completion triggers are updated, we recreate the completion
triggers set.
Release Notes:

- Fixed completions not triggering when multiple language servers are
used for a single file.

Piotr Osiewicz created

2b7ee1e Debounce runnable refreshes in the editor (#20470)

Kirill Bulatov created

767a825 Open all kinds of files from multi buffers' headers (#20469)

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

Release Notes:

- Fixed multi buffer headers not able to jump to untitled files

Kirill Bulatov created

ba8f027 editor: Fix toggle_comment in readonly mode (#20464)

Click to expand commit body
Closes #20459

Release Notes:

- Fixed comments toggle in readonly mode

Antar created

0a28800 Add preview for Checkbox with Label (#20448)

Click to expand commit body
Add previews for Checkbox with Label.

Merge checkbox components.

Release Notes:

- N/A

Nate Butler created

31a6ee0 Add `ui::table` (#20447)

Click to expand commit body
This PR adds the `ui::Table` component.

It has a rather simple API, but cells can contain either strings or
elements, allowing for some complex uses.

Example usage:

```rust
Table::new(vec!["Product", "Price", "Stock"])
    .width(px(600.))
    .striped()
    .row(vec!["Laptop", "$999", "In Stock"])
    .row(vec!["Phone", "$599", "Low Stock"])
    .row(vec!["Tablet", "$399", "Out of Stock"])
```

For more complex use cases, the table supports mixed content:

```rust
Table::new(vec!["Status", "Name", "Priority", "Deadline", "Action"])
    .width(px(840.))
    .row(vec![
        element_cell(Indicator::dot().color(Color::Success).into_any_element()),
        string_cell("Project A"),
        string_cell("High"),
        string_cell("2023-12-31"),
        element_cell(Button::new("view_a", "View").style(ButtonStyle::Filled).full_width().into_any_element()),
    ])
    // ... more rows
```

Preview:

![CleanShot 2024-11-08 at 20 53
04@2x](https://github.com/user-attachments/assets/b39122f0-a29b-423b-8e24-86ab4c42bac2)

This component is pretty basic, improvements are welcome!

Release Notes:

- N/A

Nate Butler created

1f974d0 Set up editor actions after workspace not on stack (#20445)

Click to expand commit body
Release Notes:

- N/A

Co-authored-by: Conrad Irwin <conrad@zed.dev>

Kyle Kelley and Conrad Irwin created

7212594 Add shortcuts for 'open settings' and 'revert selected hunks' to Jetbrains keymap (#20414)

Elias Müller created

d605d19 Use a different keybinding for editor::AcceptPartialInlineCompletion action (Linux) (#20443)

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

Release Notes:

- - (breaking change) Use `ctrl-right` instead of `cmd-right` as a macOS
default for `editor::AcceptPartialInlineCompletion` (Linux)

Kirill Bulatov created

f92e6e9 Add support for context server extensions (#20250)

Click to expand commit body
This PR adds support for context servers provided by extensions.

To provide a context server from an extension, you need to list the
context servers in your `extension.toml`:

```toml
[context_servers.my-context-server]
```

And then implement the `context_server_command` method to return the
command that will be used to start the context server:

```rs
use zed_extension_api::{self as zed, Command, ContextServerId, Result};

struct ExampleContextServerExtension;

impl zed::Extension for ExampleContextServerExtension {
    fn new() -> Self {
        ExampleContextServerExtension
    }

    fn context_server_command(&mut self, _context_server_id: &ContextServerId) -> Result<Command> {
        Ok(Command {
            command: "node".to_string(),
            args: vec!["/path/to/example-context-server/index.js".to_string()],
            env: Vec::new(),
        })
    }
}

zed::register_extension!(ExampleContextServerExtension);
```

Release Notes:

- N/A

Marshall Bowers created

ff4f679 macOS: Add key equivalents for non-Latin layouts (#20401)

Click to expand commit body
Closes  #16343
Closes #10972

Release Notes:

- (breaking change) On macOS when using a keyboard that supports an
extended Latin character set (e.g. French, German, ...) keyboard
shortcuts are automatically updated so that they can be typed without
`option`. This fixes several long-standing problems where some keyboards
could not type some shortcuts.
- This mapping works the same way as
[macOS](https://developer.apple.com/documentation/swiftui/view/keyboardshortcut(_:modifiers:localization:)).
For example on a German keyboard shortcuts like `cmd->` become `cmd-:`,
`cmd-[` and `cmd-]` become `cmd-ö` and `cmd-ä`. This mapping happens at
the time keyboard layout files are read so the keybindings are visible
in the command palette. To opt out of this behavior for your custom
keyboard shortcuts, set `"use_layout_keys": true` in your binding
section. For the mappings used for each layout [see
here](https://github.com/zed-industries/zed/blob/a890df1863ca939ee7f0ada6e629b6f83eb18bc5/crates/settings/src/key_equivalents.rs#L7).

---------

Co-authored-by: Will <will@zed.dev>

Conrad Irwin and Will created

0782108 macOS: Allow non-cmd keyboard shortcuts to work on non-Latin layouts (#20336)

Click to expand commit body
Updates #10972

Release Notes:

- Fixed builtin keybindings that don't require cmd on macOS, non-Latin,
ANSI layouts. For example you can now use ctrl-ա (equivalent to ctrl-a)
on an Armenian keyboard to get to the beginning of the line.

---------

Co-authored-by: Will <will@zed.dev>

Conrad Irwin and Will created

09c5993 Put context servers behind a trait (#20432)

Click to expand commit body
This PR puts context servers behind the `ContextServer` trait to allow
us to provide context servers from an extension.

Release Notes:

- N/A

Marshall Bowers created

0150351 Fix line number whitespace (#20427)

Click to expand commit body
Closes #14025


https://github.com/user-attachments/assets/24b3f321-8246-4203-9510-66a7cf3d22f0

Release Notes:

- Fixed bug where toggling line numbers would incorrectly hide
whitespace indicators.

Richard Feldman created

8bc5bcf assistant: Fix completions for slash commands provided by context servers (#20423)

Click to expand commit body
This PR fixes an issue introduced in #20372 that was causing slash
commands provided by context servers to not show up in the completions
menu.

Release Notes:

- N/A

Marshall Bowers created

983bb5c Use a different keybinding for `editor::AcceptPartialInlineCompletion` action (#20419)

Click to expand commit body
Both `editor::AcceptPartialInlineCompletion` and the keybinding for
`editor::MoveToEndOfLine` had the same keybinding inside the editor, and
with Supermaven's fast proposals, it's been very frequently used
incorrectly.

Closes #ISSUE

Release Notes:

- (breaking change) Use `ctrl-right` instead of `cmd-right` as a macOS
default for `editor::AcceptPartialInlineCompletion`

Kirill Bulatov created

653b2dc project panel: Stop flickering border when preview tabs disabled (#20417)

Click to expand commit body
PR #20154 changed the project panel to focus the editor on click in case
preview tabs are disabled.

That lead to a flickering behavior: on mouse-down the border of the
still-selected entry in the project panel would flash, only to disappear
as soon as the entry was opened and editor focused.

This change fixes it by manually keeping track of the mouse-down state,
because we couldn't find a better solution that allows us to simply not
show the border while a "click" is going on.

Release Notes:

- Fixed project panel entries flickering the border when user clicks on
another entry to open it (when preview tabs are disabled.)

Co-authored-by: Piotr <piotr@zed.dev>

Thorsten Ball and Piotr created

7142d37 Add edit events for assistant panel and inline assist (#20418)

Click to expand commit body
Release Notes:

- N/A

Joseph T. Lyons created

01e12c0 project panel: Mark entries when opening in project panel (#20412)

Click to expand commit body
This addresses #17746 by marking entries when they're opened in the
project panel.

I think that was the original intention behind the code too, because it
explicitly marks entries before opening them. An event that is emitted
by the workspace reset the mark though.

So what I did was try to emulate the logic I saw in VS Code: when
opening the file, mark it, when the active entry changes, unmark it,
except if you explicitly marked a group of files.

Closes #17746

Release Notes:

- Changed project panel to mark files when opening them, which should
make it more intuitive to mark multiple files after opening a single
one.

Thorsten Ball created

706c385 Register repl actions with editor after session started (#20396)

Click to expand commit body
Makes repl actions that are specific to running kernels only come up
after a session has been started at least once for the editor.

Release Notes:

- Only show session oriented `repl::` actions for editors after a
session has been created

Kyle Kelley created