@@ -307,6 +307,10 @@ impl Command {
307 dap_start, "Start debug session",
307 dap_start, "Start debug session",
308 dap_run, "Begin program execution",
308 dap_run, "Begin program execution",
309 dap_continue, "Continue program execution",
309 dap_continue, "Continue program execution",
310+ dap_pause, "Pause program execution",
312+ dap_out, "Step out",
313+ dap_next, "Step to next",
310 dap_variable_scopes, "List variable scopes",
314 dap_variable_scopes, "List variable scopes",
311 dap_terminate, "End debug session",
315 dap_terminate, "End debug session",
312 suspend, "Suspend"
316 suspend, "Suspend"
@@ -4394,15 +4398,73 @@ fn dap_continue(cx: &mut Context) {
4394 .set_status("Debuggee is already running".to_owned());
4398 .set_status("Debuggee is already running".to_owned());
4397− // assume 0 to continue all threads for now
4401+
4398− // FIXME: spec conformant behavior here
4399− let request = debugger.continue_thread(0);
4402+ let request = debugger.continue_thread(debugger.stopped_thread.unwrap());
4400 let _ = block_on(request).unwrap();
4403 let _ = block_on(request).unwrap();
4401 debugger.is_running = true;
4404 debugger.is_running = true;
4402 debugger.stack_pointer = None;
4405 debugger.stack_pointer = None;
4409+fn dap_pause(cx: &mut Context) {
4410+ use helix_lsp::block_on;
4412+ if let Some(debugger) = &mut cx.editor.debugger {
4413+ if !debugger.is_running {
4414+ cx.editor.set_status("Debuggee is not running".to_owned());
4418+ let request = debugger.pause(debugger.stopped_thread.unwrap());
4419+ let _ = block_on(request).unwrap();
4423+fn dap_in(cx: &mut Context) {
4424+ use helix_lsp::block_on;
4426+ if let Some(debugger) = &mut cx.editor.debugger {
4427+ if debugger.is_running {
4429+ .set_status("Debuggee is already running".to_owned());
4433+ let request = debugger.step_in(debugger.stopped_thread.unwrap());
4434+ let _ = block_on(request).unwrap();
4438+fn dap_out(cx: &mut Context) {
4439+ use helix_lsp::block_on;
4441+ if let Some(debugger) = &mut cx.editor.debugger {
4442+ if debugger.is_running {
4444+ .set_status("Debuggee is already running".to_owned());
4448+ let request = debugger.step_out(debugger.stopped_thread.unwrap());
4449+ let _ = block_on(request).unwrap();
4453+fn dap_next(cx: &mut Context) {
4454+ use helix_lsp::block_on;
4456+ if let Some(debugger) = &mut cx.editor.debugger {
4457+ if debugger.is_running {
4459+ .set_status("Debuggee is already running".to_owned());
4463+ let request = debugger.next(debugger.stopped_thread.unwrap());
4464+ let _ = block_on(request).unwrap();
4406fn dap_variable_scopes(cx: &mut Context) {
4468fn dap_variable_scopes(cx: &mut Context) {
4407 use helix_lsp::block_on;
4469 use helix_lsp::block_on;