1mod extension_dap_adapter;
2mod extension_locator_adapter;
3
4use std::sync::Arc;
5
6use dap::DapRegistry;
7use extension::{ExtensionDebugAdapterProviderProxy, ExtensionHostProxy};
8use extension_dap_adapter::ExtensionDapAdapter;
9use gpui::App;
10use util::ResultExt;
11
12use crate::extension_locator_adapter::ExtensionLocatorAdapter;
13
14pub fn init(extension_host_proxy: Arc<ExtensionHostProxy>, cx: &mut App) {
15 let language_server_registry_proxy = DebugAdapterRegistryProxy::new(cx);
16 extension_host_proxy.register_debug_adapter_proxy(language_server_registry_proxy);
17}
18
19#[derive(Clone)]
20struct DebugAdapterRegistryProxy {
21 debug_adapter_registry: DapRegistry,
22}
23
24impl DebugAdapterRegistryProxy {
25 fn new(cx: &mut App) -> Self {
26 Self {
27 debug_adapter_registry: DapRegistry::global(cx).clone(),
28 }
29 }
30}
31
32impl ExtensionDebugAdapterProviderProxy for DebugAdapterRegistryProxy {
33 fn register_debug_adapter(
34 &self,
35 extension: Arc<dyn extension::Extension>,
36 debug_adapter_name: Arc<str>,
37 ) {
38 if let Some(adapter) = ExtensionDapAdapter::new(extension, debug_adapter_name).log_err() {
39 self.debug_adapter_registry.add_adapter(Arc::new(adapter));
40 }
41 }
42
43 fn register_debug_locator(
44 &self,
45 extension: Arc<dyn extension::Extension>,
46 locator_name: Arc<str>,
47 ) {
48 self.debug_adapter_registry
49 .add_locator(Arc::new(ExtensionLocatorAdapter::new(
50 extension,
51 locator_name,
52 )));
53 }
54}