Add support for using a language server with multiple languages (#10293)

This PR updates the `extension.toml` to allow specifying multiple
languages for a language server to work with.

The `languages` field takes precedence over `language`. In the future
the `language` field will be removed.

As part of this, the Emmet extension has been extended with support for
PHP and ERB.

Release Notes:

- N/A

---------

Co-authored-by: Max <max@zed.dev>
This commit is contained in:
Marshall Bowers 2024-04-08 14:24:56 -04:00 committed by GitHub
parent 5e44748677
commit d009d84ead
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 43 additions and 15 deletions

View file

@ -962,8 +962,10 @@ impl ExtensionStore {
};
grammars_to_remove.extend(extension.manifest.grammars.keys().cloned());
for (language_server_name, config) in extension.manifest.language_servers.iter() {
self.language_registry
.remove_lsp_adapter(config.language.as_ref(), language_server_name);
for language in config.languages() {
self.language_registry
.remove_lsp_adapter(&language, language_server_name);
}
}
}
@ -1103,18 +1105,20 @@ impl ExtensionStore {
for (manifest, wasm_extension) in &wasm_extensions {
for (language_server_id, language_server_config) in &manifest.language_servers {
this.language_registry.register_lsp_adapter(
language_server_config.language.clone(),
Arc::new(ExtensionLspAdapter {
extension: wasm_extension.clone(),
host: this.wasm_host.clone(),
language_server_id: language_server_id.clone(),
config: wit::LanguageServerConfig {
name: language_server_id.0.to_string(),
language_name: language_server_config.language.to_string(),
},
}),
);
for language in language_server_config.languages() {
this.language_registry.register_lsp_adapter(
language.clone(),
Arc::new(ExtensionLspAdapter {
extension: wasm_extension.clone(),
host: this.wasm_host.clone(),
language_server_id: language_server_id.clone(),
config: wit::LanguageServerConfig {
name: language_server_id.0.to_string(),
language_name: language.to_string(),
},
}),
);
}
}
}
this.wasm_extensions.extend(wasm_extensions);