debug_adapter_extension.rs

 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}