## Objective Fixes an issue where language servers provided by extensions are not included in the settings schemas served by remote servers. When connecting to a remote server via the `open_remote_project_with_existing_connection` flow (dev servers, multi-workspace reopen, git worktree picker), setup-N servers never received any extension sync, so their schemas omitted extension-provided language servers, breaking language support for remote development. ## Solution Three changes ensure that language servers provided by extensions are included in the settings schemas served by remote servers: 1. **Register connections opened via `open_remote_project_with_existing_connection` with the extension store**: dev servers, multi-workspace reopen, and the git worktree picker now register their connections with the extension store so that extensions are synced to those servers. Previously only the `open_remote_project` flow did this, so setup-N servers never received any extension sync and their schemas omitted extension language servers. 2. **Emit `ExtensionsInstalledChanged` from `HeadlessExtensionStore` after sync and install complete**: this allows the remote process to invalidate its cached settings schemas. The local `ExtensionStore` already emitted this event; without it, the remote schema cache stayed stale for the lifetime of the server process. 3. **Include available LSP adapters in the project settings schema**: this matches the user settings schema (this was fixed for `settings` in #46766 but never applied to `project_settings`). ## Testing - Manually verified that after connecting to a remote server via the `open_remote_project_with_existing_connection` flow (including dev servers and the git worktree picker), extension language servers appear in the schema served by the remote server. - Verified that `ExtensionsInstalledChanged` is emitted after sync and install complete, and that the remote schema cache is correctly invalidated and rebuilt. - Verified that the `project_settings` schema includes the available LSP adapters, matching the behavior of the user settings schema. - Reviewers should focus on the multi-workspace reopen and git worktree picker flows (the two previously unregistered flows) to confirm that extension language servers are correctly synced and appear in the schema. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [ ] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase **Server / Project** — before the fix <img width="1061" height="749" alt="image" src="https://github.com/user-attachments/assets/d6c5459f-58fb-4769-a701-f6fb317adc37" /> **Local** <img width="1119" height="449" alt="image" src="https://github.com/user-attachments/assets/fb30a1e2-74f0-4439-a25f-1022ed164074" /> --- Release Notes: - Fixed an issue where language servers provided by extensions were missing from settings schemas served by remote servers. --------- Co-authored-by: vancez <vancez@users.noreply.github.com> Co-authored-by: Kirill Bulatov <kirill@zed.dev>
81 lines
1.9 KiB
TOML
81 lines
1.9 KiB
TOML
[package]
|
|
name = "extension_host"
|
|
version = "0.1.0"
|
|
edition.workspace = true
|
|
publish.workspace = true
|
|
license = "GPL-3.0-or-later"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[lib]
|
|
path = "src/extension_host.rs"
|
|
doctest = false
|
|
|
|
[features]
|
|
test-support = []
|
|
|
|
[dependencies]
|
|
anyhow.workspace = true
|
|
async-compression.workspace = true
|
|
async-tar.workspace = true
|
|
async-trait.workspace = true
|
|
client.workspace = true
|
|
cloud_api_types.workspace = true
|
|
collections.workspace = true
|
|
dap.workspace = true
|
|
extension.workspace = true
|
|
fs.workspace = true
|
|
futures.workspace = true
|
|
gpui.workspace = true
|
|
gpui_tokio.workspace = true
|
|
http_client.workspace = true
|
|
language.workspace = true
|
|
log.workspace = true
|
|
lsp.workspace = true
|
|
moka.workspace = true
|
|
node_runtime.workspace = true
|
|
paths.workspace = true
|
|
project.workspace = true
|
|
remote.workspace = true
|
|
release_channel.workspace = true
|
|
semver.workspace = true
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
serde_json_lenient.workspace = true
|
|
settings.workspace = true
|
|
task.workspace = true
|
|
telemetry.workspace = true
|
|
tempfile.workspace = true
|
|
toml.workspace = true
|
|
tracing.workspace = true
|
|
url.workspace = true
|
|
util.workspace = true
|
|
wasmparser.workspace = true
|
|
wasmtime-wasi.workspace = true
|
|
wasmtime.workspace = true
|
|
ztracing.workspace = true
|
|
|
|
[dev-dependencies]
|
|
criterion.workspace = true
|
|
ctor.workspace = true
|
|
fs = { workspace = true, features = ["test-support"] }
|
|
gpui = { workspace = true, features = ["test-support"] }
|
|
language = { workspace = true, features = ["test-support"] }
|
|
language_extension.workspace = true
|
|
parking_lot.workspace = true
|
|
project = { workspace = true, features = ["test-support"] }
|
|
remote = { workspace = true, features = ["test-support"] }
|
|
reqwest_client.workspace = true
|
|
theme = { workspace = true, features = ["test-support"] }
|
|
theme_settings.workspace = true
|
|
theme_extension.workspace = true
|
|
zlog.workspace = true
|
|
|
|
[[bench]]
|
|
name = "extension_compilation_benchmark"
|
|
harness = false
|
|
|
|
[package.metadata.cargo-shear]
|
|
ignored = ["tracing"]
|