Commit log

23a81e3 v0.90.x stable

Joseph Lyons created

d238e18 Overhaul assistant panel (#2610)

Click to expand commit body
Closes
https://linear.app/zed-industries/issue/Z-2368/use-a-different-icon-for-the-assistant-panel
Closes
https://linear.app/zed-industries/issue/Z-2363/ship-the-assistant-only-on-preview
Closes
https://linear.app/zed-industries/issue/Z-2331/scrolling-makes-it-hard-to-read
Closes
https://linear.app/zed-industries/issue/Z-2306/allow-undo-and-collaboration-in-assistant

This pull request is a significant overhaul of the assistant panel,
which now uses a simple `Buffer` as opposed to a `MultiBuffer` to show
messages. Specifically, we track the start of each message with an
anchor located right after the newline (or `Anchor::MIN` for the first
message). When the anchor becomes invalid (that is, the newline is
deleted), we merge the message with the preceding ones. Crucially,
messages don't actually get deleted so that, if the newline anchor
becomes valid again (such as when undoing/redoing), we can restore the
messages as well.

As part of this overhaul, we are also improving the scrolling behavior
to maintain the viewport stable only when editing or moving the cursor,
but otherwise leave the scroll position unchanged when manually
scrolling up or down.

Note that with these changes, we are limiting access to the assistant to
users on preview (and dev), as we want to polish the behavior a little
more before shipping to the general public. Users on stable will still
be able to see the default settings/keybindings of the assistant, but I
think that's okay, as they won't be able to do anything with them.

Release Notes:

- Added support for undo/redo in the assistant (preview-only)
- Improved the scrolling behavior of the assistant when it was
generating responses. Now Zed will keep the viewport stable only when
editing or moving the cursor, but otherwise leave the scroll position
unchanged when manually scrolling up or down (preview-only)
- Changed the icon of the assistant panel (preview-only)

**Note for @JosephTLyons: given that we're feature flagging this, let's
make sure things on stable look reasonable and work correctly. Things to
look out for: ensure a stock installation works, changing the settings
on stable works, changing the keybinding on stable works.**

Antonio Scandurra created

40b6c65 Fix comments in settings files (#2604)

Click to expand commit body
I accidentally added the information about folder-specific settings to
the user settings default file - just fixing that.

Release Notes:

- N/A

Joseph T. Lyons created

9d32e93 Bump protocol version

Max Brunsfeld created

ca35610 zed 0.90.1

Max Brunsfeld created

1c820ea Z-2303 editor: fix comment extension on the start of line (#2595)

Click to expand commit body
Release Notes:

- Improved comment extension for cases where cursor was placed before
start of comment marker

Piotr Osiewicz created

0824bc5 Switch to attaching git statuses to their associated entries (#2571)

Click to expand commit body
This rewrites and simplifies the git status system by attaching the git
status to each individual entry. This also improves the git testing
infrastructure to cover more cases and be more accurate to how file
events actually occur. This also fixes several other bugs in the worktree and the buffer, and stops any randomly generated actions from happening inside a `.git` folder. Hopefully, we can undo this change soon once our randomized testing is more robust.

Release Notes:

- Will require a DB migration

TODO:
- [x] Pass randomized tests
- [x] Get ready for merging

Mikayla Maki created

89d9d2d v0.90.x preview

Joseph Lyons created

e941294 Z 1618/extend comments (#2585)

Click to expand commit body
Fixes Z-1618. In the current state, this only works for line comments
such as `//` (and whatever's set in `{language}.toml` as a
line_comment).

Release Notes:

- Comments are now extended on new line.

Piotr Osiewicz created

d5441ba Introduce an Assistant Panel (#2584)

Click to expand commit body
This pull request introduces a new assistant panel to Zed that lets
users interact with OpenAI using their API key:

![CleanShot 2023-06-07 at 09 39
10@2x](https://github.com/zed-industries/zed/assets/482957/ba2a5830-9aeb-4c45-a182-a44d6a72675f)

After setting the key up, it will be saved to the keychain and
automatically loaded the next time the assistant panel is opened. The
key can be reset using `assistant: reset key`.

![CleanShot 2023-06-07 at 09 39
23@2x](https://github.com/zed-industries/zed/assets/482957/a6808bb0-0098-45ae-a2e3-f4d88472e626)

From there, users can type messages in a multi-buffer and hit
`cmd-enter` (`assistant: assist`) to stream assistant responses using
the OpenAI API. Responses can be canceled by hitting `escape`.

![CleanShot 2023-06-07 at 09 40
16@2x](https://github.com/zed-industries/zed/assets/482957/749779da-850e-4ad5-af04-74a3ca39f7ad)

Users can quote a selection from the active editor by hitting `cmd->`
(`assistant: quote selection`), which will embed the selected piece of
text in a Markdown fenced code block. Conversations with the assistant
are ephemeral at the moment, but can be easily copy/pasted:

![CleanShot 2023-06-07 at 09 50
33@2x](https://github.com/zed-industries/zed/assets/482957/b3386c10-4c51-4419-a0e0-517112ef6521)

Release Notes:

- Added a new assistant panel feature that enables interacting with
OpenAI using an API key. This replaces the previous experimental `ai:
assist` command that would work on any buffer. The experience is similar
to the one offered by ChatGPT with the added ability to edit, delete or
enhance previous messages. When hitting `cmd-enter`, the assistant will
start streaming responses from OpenAI. A response stream can be canceled
using `escape`. Moreover, the active editor's selection can be quoted in
the assistant panel using `cmd->`, which will automatically embed the
selected piece of text in a Markdown fenced code block.

Antonio Scandurra created

d3e0d38 Fix assistant panel tests

Antonio Scandurra created

d26cc2c Maintain scroll bottom when streaming assistant responses

Antonio Scandurra created

43500db Fix zed tests

Antonio Scandurra created

0dae8f2 Merge remote-tracking branch 'origin/main' into assistant-2

Antonio Scandurra created

a6feaf1 Allow search assistant editors

Antonio Scandurra created

c93b6cc Tweak comment wording

Joseph Lyons created

0d90c6d Improve syntax highlighting and outline view for Elixir (#2582)

Click to expand commit body
Fixes
https://linear.app/zed-industries/issue/Z-2208/outline-view-doesnt-differentiate-between-overloaded-functions
Fixes
https://linear.app/zed-industries/issue/Z-2205/elixir-syntax-highlighting-not-working-properly-for-doc-attributes-and

This PR improves syntax highlighting and outline view in Elixir. It's
common to overload elixir functions, with many different versions of the
function for different patterns of parameters, so I updated the outline
view to show functions' parameters in Elixir. But if we showed functions
the same way in the *breadcrumbs*, it would take up too much space.

So I added a new capture in languages' `outline` queries called
`@context.extra`, which is included in the outline view, but not in
breadcrumbs.

Release Notes:

- Improved syntax highlighting of doc attributes and special macros in
Elixir
- Updated the outline view in Elixir to display function parameters, to
allow differentiating between function overloads.

Max Brunsfeld created

4b9a3c6 Show function parameters in elixir outline view

Click to expand commit body
Introduce a new capture in the outline query called 'context.extra', which
causes text to appear in the outline, but not in the breadcrumbs.

Max Brunsfeld created

7aeaa84 Fix the order of some patterns in elixir highlight query

Max Brunsfeld created

8dc679e Upgrade tree-sitter-elixir

Max Brunsfeld created

6737ee1 Avoid panic when failing to load a language's queries

Max Brunsfeld created

cc63d3d chore: add targets to rust-toolchain.toml (#2581)

Piotr Osiewicz created

a9f865d Don't apply the 'literal' color to entire markdown code blocks (#2579)

Click to expand commit body
### Before

![Screen Shot 2023-06-06 at 2 32 46
PM](https://github.com/zed-industries/zed/assets/326587/036f1da3-19c6-4979-adc6-c3133f8d63dc)

### After

![Screen Shot 2023-06-06 at 2 32 08
PM](https://github.com/zed-industries/zed/assets/326587/6d4729db-b76a-4052-847e-fd9de346f194)

Release Notes:

* Improved the syntax highlighting of fenced code blocks in markdown.

Max Brunsfeld created

dfd7277 chore: bump MSRV to 1.70, add rust-toolchain (#2580)

Click to expand commit body
This time I've added a `components` section to rust-toolchain.toml file
to explicitly require a rustfmt component. Fingers crossed.

Piotr Osiewicz created

3fc2e07 Don't apply the 'literal' color to entire markdown code blocks

Max Brunsfeld created

bdd3e77 Live-reload tree-sitter queries in development (#2578)

Click to expand commit body
This PR adds live reloading of Tree-sitter queries when running in debug
mode, similar to what we do for the themes. This way, you can change a
highlighting query or an outline query, and immediately see the result
in the app.

Release Notes:

- N/A

Max Brunsfeld created

7bfb51e Live-reload tree-sitter queries in development

Max Brunsfeld created

559a58d Revert "chore: bump MSRV to 1.70" (#2577)

Click to expand commit body
Reverts zed-industries/zed#2573

Piotr Osiewicz created

c1c91dc chore: bump MSRV to 1.70 (#2573)

Click to expand commit body
Add rust-toolchain.toml

Release Notes:

- N/A

Piotr Osiewicz created

572c59e chore: Enable full LTO (#2548)

Click to expand commit body
Per conversation with Antonio, I've suggested enabling full LTO; right
now we use a crate-local ThinLTO, which does not inline function calls
across crates.

| Configuration    | Current main (788f97e) | Thin LTO  | Full LTO  |
|------------------|------------------------|-----------|-----------|
| Size in bytes    | 158806721              | 155868753 | 111115553 |
| % of `main` size | 100%                   | 98.14%    | 69.96%    |
| Size in bytes (no debug info) | 129186657 | 127942929 | 108281345 |

Piotr Osiewicz created

17560cc Eliminate assets crate (#2575)

Click to expand commit body
Previously, all static assets were embedded into Zed using a single
`RustEmbed` struct called `Assets`, which was in a crate of its own,
also called `assets`. Many crates depended on this crate. The problem
with this situation was that changing *any* static asset file caused
almost every crate in the codebase to need recompilation (because of
recursive dependencies on `assets`).

Now, most of the assets are embedded only into the top-level `zed`
crate. A few assets (such as settings JSON files and AI prompts) are
needed in lower-level crates such as `settings` and `ai`. For these,
I've created separate `RustEmbed` structs in those specific crates,
which embed those specific sub-folders of `assets`.

The result is that now, when you change a theme file, the only crate
that needs to recompile is `zed`.

Release Notes:

- N/A

Max Brunsfeld created

dbbd055 Eliminate assets crate

Max Brunsfeld created

2003d3d Update initial_user_settings.json

Joseph Lyons created

7a78e64 Merge remote-tracking branch 'origin/main' into assistant-2

Antonio Scandurra created

16090c3 Insert reply after assistant message when hitting `cmd-enter`

Click to expand commit body
Co-Authored-By: Nathan Sobo <nathan@zed.dev>

Antonio Scandurra and Nathan Sobo created

ef7ec26 Cycle message roles on click

Click to expand commit body
Co-Authored-By: Nathan Sobo <nathan@zed.dev>

Antonio Scandurra and Nathan Sobo created

53906fd Add an application menu item for creating/opening a project-specific settings file (#2572)

Click to expand commit body
Previously, project-specific settings were not discoverable. This PR
adds a `Zed > Preferences > Local Settings` application menu command
that creates a `.zed/settings.json` at the root of your current
worktree. This command works in both local and remote projects.

Limitations:

* Currently, if you have an empty project open, the command just shows a
notification that there are no folders open.
* The JSON-schema-based autocomplete is the same in local settings files
as in your main settings, even though not all settings can be locally
customized.

Release Notes:

- Added an application menu command - `Zed > Preferences > Local
Settings` for creating a folder-specific settings file.

Max Brunsfeld created

ac71780 Include message headers in copied assistant text

Click to expand commit body
Co-Authored-By: Nathan Sobo <nathan@zed.dev>

Antonio Scandurra and Nathan Sobo created

cfcfc3b Show notification when attempting to open local settings in a project w/ no folders

Max Brunsfeld created

093ce8a Simplify prompt

Click to expand commit body
Co-Authored-By: Nathan Sobo <nathan@zed.dev>

Antonio Scandurra and Nathan Sobo created

7b066df Tighten up spacing in the project panel (#2574)

Click to expand commit body
Following https://github.com/zed-industries/zed/pull/2559 the project
panel entries become pretty wide again. This PR tries to mitigate that
and just make some general improvements to visual density in the project
panel.

- Reduces padding around items
- Removes top margin
- Slightly reduces the height of each item
- Fixes an issue where ignored files had the wrong color chevron

Release Notes:

- Improved density of the project panel and tidied up some visual
issues.

Nate Butler created

a0e2e5d project panel/styles: Align child's chevron with parent path (#2559)

Click to expand commit body
Z-1012

Release notes:
- Adjust indent of files in subdirectories.

Piotr Osiewicz created

2b1aeb0 Show error message when requests to OpenAI fail

Click to expand commit body
Co-Authored-By: Julia Risley <julia@zed.dev>

Antonio Scandurra and Julia Risley created

9c59146 Set assistant editor's title based on the first question/answer pair

Click to expand commit body
Co-Authored-By: Julia Risley <julia@zed.dev>

Antonio Scandurra and Julia Risley created

69b8267 Show the current model and allow clicking on it to change it

Antonio Scandurra created

ada2220 Insert a user reply when hitting `cmd-enter` in an assistant message

Antonio Scandurra created

f4f0606 Add assertion to pinpoint how deletion works across excerpts

Antonio Scandurra created

337dda8 Only remove excerpts when an edit touches them

Antonio Scandurra created

8032324 Prevent moving across excerpts on `Editor::delete`

Antonio Scandurra created

e46d154 Retain selection's head (as opposed to its end) on insertion

Click to expand commit body
This makes a difference when an edit spans two excerpts and the selection
start won't necessarily be the same as the selection end after the edit.

Antonio Scandurra created