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
Julia 14ff411907
Detect and fix broken lsp installations (#2646)
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Closes
https://linear.app/zed-industries/issue/Z-665/add-a-mechanism-for-detecting-and-fixing-broken-language-server
Fixes https://github.com/zed-industries/community/issues/1671
Fixes https://github.com/zed-industries/community/issues/1691
Fixes https://github.com/zed-industries/community/issues/1524
Fixes https://github.com/zed-industries/community/issues/1352
Fixes https://github.com/zed-industries/community/issues/1109
Fixes https://github.com/zed-industries/community/issues/996
Fixes https://github.com/zed-industries/community/issues/782

Things this PR does:
 - Updates our elixir-ls fetching to use new release name format
 - Detect when a server fails to launch
   - If the adapter claims to be reinstallable, get a test binary
   - If the test binary fails to launch or returns a failure error code
   - Clear container dir and reinstall
 - Detect/fix broken Node
 
Things it does not do:
- Restart server on failure, I have most of the stuff for this already
so it should be a fast follow up
 - Detect/fix broken Copilot

Node and Copilot shouldn't be too bad, they are handled via different
mechanisms. Originally I put effort into detecting failure of the server
during normal operation post launch, but that's not really needed. If
the server gets borked while running then we'll catch that on next
startup. Realizing that allowed for pruning a bunch of the work I did
and made the overall system a lot nicer

Copilot is nominally a language server but does not have an adapter and
does not run through the same mechanism in the project.

We're going to have an issue with multiple language server instances in
different projects once we add a "Reinstall Language Server" action,
which is why it's not in this PR. Each project has its own list of
server instances and is currently vaguely responsible for managing the
installations which means they can step on each others toes. This should
change, probably

Release Notes:
- Added a mechanism to detect and reinstall broken language servers
([#1691](https://github.com/zed-industries/community/issues/1691))
([#1524](https://github.com/zed-industries/community/issues/1524))
([#1352](https://github.com/zed-industries/community/issues/1352))
([#1109](https://github.com/zed-industries/community/issues/1109))
([#996](https://github.com/zed-industries/community/issues/996))
([#782](https://github.com/zed-industries/community/issues/782)).
2023-06-28 21:26:35 -04:00
.cargo Use xtask for theme generation 2023-06-21 18:48:09 +02:00
.config tests: Test 'db' package sequentially (#2654) 2023-06-28 15:00:43 +02:00
.github Use nextest instead of test (#2639) 2023-06-22 16:50:26 +02:00
.vscode
assets Collab UI v2 (#2618) 2023-06-28 09:14:39 -07:00
crates Stub out for language plugin 2023-06-28 17:06:50 -04:00
docs Update local-collaboration.md 2023-06-27 10:52:38 -04:00
plugins Use the same serde version across the entire workspace 2023-03-28 09:42:00 -07:00
script Added muted and currently speaking tracking 2023-06-27 19:23:13 -07:00
styles prettier format 2023-06-28 10:35:28 -07: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 Merge branch 'main' into sergey/z-2308-create-a-proof-of-concept-of-exporting-a-type-from-rust-and 2023-06-22 17:58:56 +02:00
.gitmodules WIP: start on live_kit_server 2022-10-17 09:59:16 +02:00
Cargo.lock Merge branch 'main' into fix-broken-lsp-installations 2023-06-28 16:46:06 -04:00
Cargo.toml Merge branch 'main' into collab-titlebar-2 2023-06-27 15:40:43 +02:00
Dockerfile chore: bump MSRV to 1.70, add rust-toolchain (#2580) 2023-06-06 23:49:34 +02:00
Procfile Add livekit to the Procfile, update the README 2022-10-27 13:24:35 -07:00
README.md Clarify GH Token scope requirements 2023-05-02 12:12:57 +03:00
rust-toolchain.toml chore: add targets to rust-toolchain.toml (#2581) 2023-06-07 00:12:47 +02: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.