1use helix_dap::{events, Client, Event, Payload, Result, SourceBreakpoint};
2use serde::{Deserialize, Serialize};
3use serde_json::to_value;
4use tokio::sync::mpsc::UnboundedReceiver;
6#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
7#[serde(rename_all = "camelCase")]
8struct LaunchArguments {
13async fn dispatch(mut rx: UnboundedReceiver<Payload>) {
15 match rx.recv().await.unwrap() {
16 Payload::Event(Event::Output(events::Output {
21 category.unwrap_or("unknown".to_owned()),
25 Payload::Event(Event::Stopped(_)) => {
34pub async fn main() -> Result<()> {
35 let base_config = fern::Dispatch::new().level(log::LevelFilter::Info);
37 let stderr_config = fern::Dispatch::new()
38 .format(|out, message, record| out.finish(format_args!("[{}] {}", record.level(), message)))
39 .chain(std::io::stderr());
44 .expect("Failed to set up logging");
46 let (mut client, events) =
47 Client::tcp_process("dlv", vec!["dap"], "-l 127.0.0.1:{}", 0).await?;
48 println!("create: {:?}", client);
50 tokio::spawn(dispatch(events));
52 println!("init: {:?}", client.initialize("go".to_owned()).await);
53 println!("caps: {:?}", client.capabilities());
55 let args = LaunchArguments {
56 mode: "exec".to_owned(),
57 program: "/tmp/godebug/main".to_owned(),
60 println!("launch: {:?}", client.launch(to_value(args)?).await);
66 "/tmp/godebug/main.go".into(),
67 vec![SourceBreakpoint {
78 let mut _in = String::new();
81 .expect("Failed to read line");
83 println!("configurationDone: {:?}", client.configuration_done().await);
85 let threads = client.threads().await?;
86 println!("threads: {:#?}", threads);
88 .stack_trace(threads[0].id)
90 .expect("expected stack trace");
91 println!("stack trace: {:#?}", bt);
95 .expect("expected scopes for thread");
96 println!("scopes: {:#?}", scopes);
99 client.variables(scopes[1].variables_reference).await
102 let mut _in = String::new();
105 .expect("Failed to read line");
107 println!("continued: {:?}", client.continue_thread(0).await);
109 let mut _in = String::new();
112 .expect("Failed to read line");
114 println!("disconnect: {:?}", client.disconnect().await);
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list