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};
20use gdb::GdbDebugAdapter;
21use go::GoDebugAdapter;
22use gpui::{App, BorrowAppContext};
23use javascript::JsDebugAdapter;
24use php::PhpDebugAdapter;
25use python::PythonDebugAdapter;
26use serde_json::{Value, json};
27use task::TcpArgumentsTemplate;
28
29pub fn init(cx: &mut App) {
30 cx.update_default_global(|registry: &mut DapRegistry, _cx| {
31 registry.add_adapter(Arc::from(CodeLldbDebugAdapter::default()));
32 registry.add_adapter(Arc::from(PythonDebugAdapter));
33 registry.add_adapter(Arc::from(PhpDebugAdapter));
34 registry.add_adapter(Arc::from(JsDebugAdapter));
35 registry.add_adapter(Arc::from(GoDebugAdapter));
36 registry.add_adapter(Arc::from(GdbDebugAdapter));
37 })
38}
39
40pub(crate) async fn configure_tcp_connection(
41 tcp_connection: TcpArgumentsTemplate,
42) -> Result<(Ipv4Addr, u16, Option<u64>)> {
43 let host = tcp_connection.host();
44 let timeout = tcp_connection.timeout;
45
46 let port = if let Some(port) = tcp_connection.port {
47 port
48 } else {
49 dap::transport::TcpTransport::port(&tcp_connection).await?
50 };
51
52 Ok((host, port, timeout))
53}
54
55trait ToDap {
56 fn to_dap(&self) -> dap::StartDebuggingRequestArgumentsRequest;
57}
58
59impl ToDap for DebugRequest {
60 fn to_dap(&self) -> dap::StartDebuggingRequestArgumentsRequest {
61 match self {
62 Self::Launch(_) => dap::StartDebuggingRequestArgumentsRequest::Launch,
63 Self::Attach(_) => dap::StartDebuggingRequestArgumentsRequest::Attach,
64 }
65 }
66}