- Languages now define their preferred debuggers in `config.toml`. - `LanguageRegistry` now exposes language config even for languages that are not yet loaded. This necessitated extension registry changes (we now deserialize config.toml of all language entries when loading new extension index), but it should be backwards compatible with the old format. /cc @maxdeviant Release Notes: - N/A --------- Co-authored-by: Anthony Eid <hello@anthonyeid.me> Co-authored-by: Remco Smits <djsmits12@gmail.com> Co-authored-by: Anthony <anthony@zed.dev>
49 lines
1.5 KiB
Rust
49 lines
1.5 KiB
Rust
mod extension_lsp_adapter;
|
|
|
|
use std::path::PathBuf;
|
|
use std::sync::Arc;
|
|
|
|
use anyhow::Result;
|
|
use extension::{ExtensionGrammarProxy, ExtensionHostProxy, ExtensionLanguageProxy};
|
|
use language::{LanguageConfig, LanguageName, LanguageRegistry, LoadedLanguage};
|
|
|
|
pub fn init(
|
|
extension_host_proxy: Arc<ExtensionHostProxy>,
|
|
language_registry: Arc<LanguageRegistry>,
|
|
) {
|
|
let language_server_registry_proxy = LanguageServerRegistryProxy { language_registry };
|
|
extension_host_proxy.register_grammar_proxy(language_server_registry_proxy.clone());
|
|
extension_host_proxy.register_language_proxy(language_server_registry_proxy.clone());
|
|
extension_host_proxy.register_language_server_proxy(language_server_registry_proxy);
|
|
}
|
|
|
|
#[derive(Clone)]
|
|
struct LanguageServerRegistryProxy {
|
|
language_registry: Arc<LanguageRegistry>,
|
|
}
|
|
|
|
impl ExtensionGrammarProxy for LanguageServerRegistryProxy {
|
|
fn register_grammars(&self, grammars: Vec<(Arc<str>, PathBuf)>) {
|
|
self.language_registry.register_wasm_grammars(grammars)
|
|
}
|
|
}
|
|
|
|
impl ExtensionLanguageProxy for LanguageServerRegistryProxy {
|
|
fn register_language(
|
|
&self,
|
|
language: LanguageConfig,
|
|
load: Arc<dyn Fn() -> Result<LoadedLanguage> + Send + Sync + 'static>,
|
|
) {
|
|
self.language_registry.register_language(language, load);
|
|
}
|
|
|
|
fn remove_languages(
|
|
&self,
|
|
languages_to_remove: &[LanguageName],
|
|
grammars_to_remove: &[Arc<str>],
|
|
) {
|
|
self.language_registry
|
|
.remove_languages(&languages_to_remove, &grammars_to_remove);
|
|
}
|
|
}
|