Code at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.
Find a file
Max Brunsfeld 571151173c
Fix copilot state corruption when there are multiple buffers with the same remote id in different projects (#2569)
Fixes
https://linear.app/zed-industries/issue/Z-1511/thread-main-panicked-at-assertion-failed-left-==-right-left-local-0-1

Previously, when exchanging messages about buffers with a copilot
language server, we identified buffers using their **remote id**. This
caused problems when there were multiple projects open, where one or
more were remote, because buffers' remote ids are only unique within a
given project.

When you have multiple projects open, and one or more of the projects is
remote, it's pretty easy to have two buffers open with the same remote
id. In my testing, when this happened, copilot would stop working in
both buffers. But I believe that depending on the editing patterns that
occur in the two buffers, it could cause the crash reported in the
Linear issue above.

This PR changes our copilot logic to use buffers' local handle ids for
identifying them. This fixed the problems I was able to reproduce when
using copilot in both remote and local projects.

Release Notes:

- Fixed a crash that would sometimes occur when editing buffers after
having collaborated on a remote project.
2023-06-05 14:33:56 -07:00
.github Remove code sending zed events to mixpanel 2023-06-05 15:33:17 -04:00
.vscode
assets Fix typos 2023-06-02 22:02:19 -04:00
crates Fix copilot state corruption when there are multiple buffers with the same remote id in different projects (#2569) 2023-06-05 14:33:56 -07:00
plugins Use the same serde version across the entire workspace 2023-03-28 09:42:00 -07:00
script Remove code sending zed events to mixpanel 2023-06-05 15:33:17 -04:00
styles Fix typos 2023-06-02 22:02:19 -04:00
.dockerignore Removed old experiments settings and staff mode flag, added new StaffMode global that is set based on the webserver's staff bit 2023-01-27 15:43:12 -08:00
.gitignore Removed old experiments settings and staff mode flag, added new StaffMode global that is set based on the webserver's staff bit 2023-01-27 15:43:12 -08:00
.gitmodules
Cargo.lock Update rust-bindgen dev-dependencies 2023-06-04 23:34:22 -04:00
Cargo.toml Merge remote-tracking branch 'origin/main' into zmd 2023-05-24 11:04:07 -06:00
Dockerfile Abort collaboration process if any thread panics 2023-01-27 09:50:59 +01:00
Procfile
README.md Clarify GH Token scope requirements 2023-05-02 12:12:57 +03:00

Zed

CI

Welcome to Zed, a lightning-fast, collaborative code editor that makes your dreams come true.

Development tips

Dependencies

  • Install Postgres.app and start it.

  • Install the LiveKit server and the foreman process supervisor:

    brew install livekit
    brew install foreman
    
  • Ensure the Zed.dev website is checked out in a sibling directory:

    cd ..
    git clone https://github.com/zed-industries/zed.dev
    
  • Initialize submodules

    git submodule update --init --recursive
    
  • Set up a local zed database and seed it with some initial users:

    Create a personal GitHub token to run script/bootstrap once successfully: the token needs to have an access to private repositories for the script to work (repo OAuth scope). Then delete that token.

    GITHUB_TOKEN=<$token> script/bootstrap
    

Testing against locally-running servers

Start the web and collab servers:

foreman start

If you want to run Zed pointed at the local servers, you can run:

script/zed-with-local-servers
# or...
script/zed-with-local-servers --release

Dump element JSON

If you trigger cmd-alt-i, Zed will copy a JSON representation of the current window contents to the clipboard. You can paste this in a tool like DJSON to navigate the state of on-screen elements in a structured way.

Licensing

We use cargo-about to automatically comply with open source licenses. If CI is failing, check the following:

  • Is it showing a no license specified error for a crate you've created? If so, add publish = false under [package] in your crate's Cargo.toml.
  • Is the error failed to satisfy license requirements for a dependency? If so, first determine what license the project has and whether this system is sufficient to comply with this license's requirements. If you're unsure, ask a lawyer. Once you've verified that this system is acceptable add the license's SPDX identifier to the accepted array in script/licenses/zed-licenses.toml.
  • Is cargo-about unable to find the license for a dependency? If so, add a clarification field at the end of script/licenses/zed-licenses.toml, as specified in the cargo-about book.

Wasm Plugins

Zed has a Wasm-based plugin runtime which it currently uses to embed plugins. To compile Zed, you'll need to have the wasm32-wasi toolchain installed on your system. To install this toolchain, run:

rustup target add wasm32-wasi

Plugins can be found in the plugins folder in the root. For more information about how plugins work, check the Plugin Guide in crates/plugin_runtime/README.md.