Skip to repository content

tenant.openagents/omega

No repository description is available.

OpenAgents Git authority 2026-07-28T03:41:22.850Z Public web read
NIP-34 coordinate30617:7649603503856e5148d571eac2766b288a8ff1e9e35d380337a1d2b0015b4f92:omega
MaintainersHidden in public view
References2 branches · 1 tag
Read-only clonegit clone https://openagents.com/git/tenant.openagents/omega.git
Browse files

language_extension.rs

68 lines · 2.1 KB · rust
1mod extension_lsp_adapter;
2
3use std::path::PathBuf;
4use std::sync::Arc;
5
6use anyhow::Result;
7use extension::{ExtensionGrammarProxy, ExtensionHostProxy, ExtensionLanguageProxy};
8use gpui::{App, Entity, WeakEntity};
9use language::{LanguageMatcher, LanguageName, LanguageRegistry, LoadedLanguage};
10use project::LspStore;
11
12#[derive(Clone)]
13pub enum LspAccess {
14    ViaLspStore(WeakEntity<LspStore>),
15    ViaWorkspaces(Arc<dyn Fn(&mut App) -> Result<Vec<Entity<LspStore>>> + Send + Sync + 'static>),
16    Noop,
17}
18
19pub fn init(
20    lsp_access: LspAccess,
21    extension_host_proxy: Arc<ExtensionHostProxy>,
22    language_registry: Arc<LanguageRegistry>,
23) {
24    let language_server_registry_proxy = LanguageServerRegistryProxy {
25        language_registry,
26        lsp_access,
27    };
28    extension_host_proxy.register_grammar_proxy(language_server_registry_proxy.clone());
29    extension_host_proxy.register_language_proxy(language_server_registry_proxy.clone());
30    extension_host_proxy.register_language_server_proxy(language_server_registry_proxy);
31}
32
33#[derive(Clone)]
34struct LanguageServerRegistryProxy {
35    language_registry: Arc<LanguageRegistry>,
36    lsp_access: LspAccess,
37}
38
39impl ExtensionGrammarProxy for LanguageServerRegistryProxy {
40    #[ztracing::instrument(skip_all)]
41    fn register_grammars(&self, grammars: Vec<(Arc<str>, PathBuf)>) {
42        self.language_registry.register_wasm_grammars(grammars)
43    }
44}
45
46impl ExtensionLanguageProxy for LanguageServerRegistryProxy {
47    fn register_language(
48        &self,
49        language: LanguageName,
50        grammar: Option<Arc<str>>,
51        matcher: Arc<LanguageMatcher>,
52        hidden: bool,
53        load: Arc<dyn Fn() -> Result<LoadedLanguage> + Send + Sync + 'static>,
54    ) {
55        self.language_registry
56            .register_language(language, grammar, matcher, hidden, None, load);
57    }
58
59    fn remove_languages(
60        &self,
61        languages_to_remove: &[LanguageName],
62        grammars_to_remove: &[Arc<str>],
63    ) {
64        self.language_registry
65            .remove_languages(languages_to_remove, grammars_to_remove);
66    }
67}
68
Served at tenant.openagents/omega Member data and write actions are omitted.