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) = Client::tcp_process("lldb-vscode", vec![], "-p {}", 0).await?;
47 println!("create: {:?}", client);
49 tokio::spawn(dispatch(events));
51 println!("init: {:?}", client.initialize("lldb".to_owned()).await);
52 println!("caps: {:?}", client.capabilities());
54 let args = LaunchArguments {
55 program: "/tmp/cdebug/main".to_owned(),
56 console: "internalConsole".to_owned(),
59 println!("launch: {:?}", client.launch(to_value(args)?).await);
65 "/tmp/cdebug/main.c".into(),
66 vec![SourceBreakpoint {
77 let mut _in = String::new();
80 .expect("Failed to read line");
82 println!("configurationDone: {:?}", client.configuration_done().await);
84 let threads = client.threads().await?;
85 println!("threads: {:#?}", threads);
87 .stack_trace(threads[0].id)
89 .expect("expected stack trace");
90 println!("stack trace: {:#?}", bt);
94 .expect("expected scopes for thread");
95 println!("scopes: {:#?}", scopes);
98 client.variables(scopes[0].variables_reference).await
101 let mut _in = String::new();
104 .expect("Failed to read line");
106 println!("continued: {:?}", client.continue_thread(0).await);
108 let mut _in = String::new();
111 .expect("Failed to read line");
113 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