mod extension_lsp_adapter; use std::path::PathBuf; use std::sync::Arc; use anyhow::Result; use extension::{ExtensionGrammarProxy, ExtensionHostProxy, ExtensionLanguageProxy}; use language::{LanguageMatcher, LanguageName, LanguageRegistry, LoadedLanguage}; pub fn init( extension_host_proxy: Arc, language_registry: Arc, ) { 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, } impl ExtensionGrammarProxy for LanguageServerRegistryProxy { fn register_grammars(&self, grammars: Vec<(Arc, PathBuf)>) { self.language_registry.register_wasm_grammars(grammars) } } impl ExtensionLanguageProxy for LanguageServerRegistryProxy { fn register_language( &self, language: LanguageName, grammar: Option>, matcher: LanguageMatcher, hidden: bool, load: Arc Result + Send + Sync + 'static>, ) { self.language_registry .register_language(language, grammar, matcher, hidden, load); } fn remove_languages( &self, languages_to_remove: &[LanguageName], grammars_to_remove: &[Arc], ) { self.language_registry .remove_languages(&languages_to_remove, &grammars_to_remove); } }