1mod extension_dap_adapter;
2
3use std::sync::Arc;
4
5use dap::DapRegistry;
6use extension::{ExtensionDebugAdapterProviderProxy, ExtensionHostProxy};
7use extension_dap_adapter::ExtensionDapAdapter;
8use gpui::App;
9
10pub fn init(extension_host_proxy: Arc<ExtensionHostProxy>, cx: &mut App) {
11 let language_server_registry_proxy = DebugAdapterRegistryProxy::new(cx);
12 extension_host_proxy.register_debug_adapter_proxy(language_server_registry_proxy);
13}
14
15#[derive(Clone)]
16struct DebugAdapterRegistryProxy {
17 debug_adapter_registry: DapRegistry,
18}
19
20impl DebugAdapterRegistryProxy {
21 fn new(cx: &mut App) -> Self {
22 Self {
23 debug_adapter_registry: DapRegistry::global(cx).clone(),
24 }
25 }
26}
27
28impl ExtensionDebugAdapterProviderProxy for DebugAdapterRegistryProxy {
29 fn register_debug_adapter(
30 &self,
31 extension: Arc<dyn extension::Extension>,
32 debug_adapter_name: Arc<str>,
33 ) {
34 self.debug_adapter_registry
35 .add_adapter(Arc::new(ExtensionDapAdapter::new(
36 extension,
37 debug_adapter_name,
38 )));
39 }
40}