14ff411907
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)). |
||
---|---|---|
.cargo | ||
.config | ||
.github | ||
.vscode | ||
assets | ||
crates | ||
docs | ||
plugins | ||
script | ||
styles | ||
.dockerignore | ||
.gitignore | ||
.gitmodules | ||
Cargo.lock | ||
Cargo.toml | ||
Dockerfile | ||
Procfile | ||
README.md | ||
rust-toolchain.toml |
Zed
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 theforeman
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, addpublish = 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 theaccepted
array inscript/licenses/zed-licenses.toml
. - Is
cargo-about
unable to find the license for a dependency? If so, add a clarification field at the end ofscript/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
.