1mod codelldb;
2mod gdb;
3mod go;
4mod javascript;
5mod php;
6mod python;
7
8use std::{net::Ipv4Addr, sync::Arc};
9
10use anyhow::{Result, anyhow};
11use async_trait::async_trait;
12use codelldb::CodeLldbDebugAdapter;
13use dap::{
14 DapRegistry, DebugRequest,
15 adapters::{
16 self, AdapterVersion, DapDelegate, DebugAdapter, DebugAdapterBinary, DebugAdapterName,
17 GithubRepo,
18 },
19 inline_value::{PythonInlineValueProvider, RustInlineValueProvider},
20};
21use gdb::GdbDebugAdapter;
22use go::GoDebugAdapter;
23use gpui::{App, BorrowAppContext};
24use javascript::JsDebugAdapter;
25use php::PhpDebugAdapter;
26use python::PythonDebugAdapter;
27use serde_json::{Value, json};
28use task::TcpArgumentsTemplate;
29
30pub fn init(cx: &mut App) {
31 cx.update_default_global(|registry: &mut DapRegistry, _cx| {
32 registry.add_adapter(Arc::from(CodeLldbDebugAdapter::default()));
33 registry.add_adapter(Arc::from(PythonDebugAdapter::default()));
34 registry.add_adapter(Arc::from(PhpDebugAdapter::default()));
35 registry.add_adapter(Arc::from(JsDebugAdapter::default()));
36 registry.add_adapter(Arc::from(GoDebugAdapter));
37 registry.add_adapter(Arc::from(GdbDebugAdapter));
38
39 registry.add_inline_value_provider("Rust".to_string(), Arc::from(RustInlineValueProvider));
40 registry
41 .add_inline_value_provider("Python".to_string(), Arc::from(PythonInlineValueProvider));
42 })
43}
44
45pub(crate) async fn configure_tcp_connection(
46 tcp_connection: TcpArgumentsTemplate,
47) -> Result<(Ipv4Addr, u16, Option<u64>)> {
48 let host = tcp_connection.host();
49 let timeout = tcp_connection.timeout;
50
51 let port = if let Some(port) = tcp_connection.port {
52 port
53 } else {
54 dap::transport::TcpTransport::port(&tcp_connection).await?
55 };
56
57 Ok((host, port, timeout))
58}
59
60trait ToDap {
61 fn to_dap(&self) -> dap::StartDebuggingRequestArgumentsRequest;
62}
63
64impl ToDap for DebugRequest {
65 fn to_dap(&self) -> dap::StartDebuggingRequestArgumentsRequest {
66 match self {
67 Self::Launch(_) => dap::StartDebuggingRequestArgumentsRequest::Launch,
68 Self::Attach(_) => dap::StartDebuggingRequestArgumentsRequest::Attach,
69 }
70 }
71}