aboutsummaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term')
-rw-r--r--helix-term/src/application.rs4
-rw-r--r--helix-term/src/commands/dap.rs84
2 files changed, 42 insertions, 46 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index 118792ca..87d2fcc9 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -330,7 +330,7 @@ impl Application {
}
pub async fn handle_debugger_message(&mut self, payload: helix_dap::Payload) {
- use crate::commands::dap::{breakpoints_changed, resume_application, select_thread_id};
+ use crate::commands::dap::{breakpoints_changed, select_thread_id};
use dap::requests::RunInTerminal;
use helix_dap::{events, Event};
@@ -392,7 +392,7 @@ impl Application {
.thread_states
.insert(thread_id, "running".to_owned());
if debugger.thread_id == Some(thread_id) {
- resume_application(debugger)
+ debugger.resume_application();
}
}
Event::Thread(_) => {
diff --git a/helix-term/src/commands/dap.rs b/helix-term/src/commands/dap.rs
index bc37bd6c..609c9eef 100644
--- a/helix-term/src/commands/dap.rs
+++ b/helix-term/src/commands/dap.rs
@@ -40,17 +40,6 @@ pub fn dap_pos_to_pos(doc: &helix_core::Rope, line: usize, column: usize) -> Opt
Some(pos)
}
-pub fn resume_application(debugger: &mut Client) {
- if let Some(thread_id) = debugger.thread_id {
- debugger
- .thread_states
- .insert(thread_id, "running".to_string());
- debugger.stack_frames.remove(&thread_id);
- }
- debugger.active_frame = None;
- debugger.thread_id = None;
-}
-
pub async fn select_thread_id(editor: &mut Editor, thread_id: ThreadId, force: bool) {
let debugger = debugger!(editor);
@@ -518,11 +507,14 @@ pub fn dap_continue(cx: &mut Context) {
if let Some(thread_id) = debugger.thread_id {
let request = debugger.continue_thread(thread_id);
- if let Err(e) = block_on(request) {
- cx.editor.set_error(format!("Failed to continue: {}", e));
- return;
- }
- resume_application(debugger);
+
+ dap_callback(
+ cx.jobs,
+ request,
+ |editor, _compositor, _response: dap::requests::ContinueResponse| {
+ debugger!(editor).resume_application();
+ },
+ );
} else {
cx.editor
.set_error("Currently active thread is not stopped. Switch the thread.".into());
@@ -545,11 +537,10 @@ pub fn dap_step_in(cx: &mut Context) {
if let Some(thread_id) = debugger.thread_id {
let request = debugger.step_in(thread_id);
- if let Err(e) = block_on(request) {
- cx.editor.set_error(format!("Failed to continue: {}", e));
- return;
- }
- resume_application(debugger);
+
+ dap_callback(cx.jobs, request, |editor, _compositor, _response: ()| {
+ debugger!(editor).resume_application();
+ });
} else {
cx.editor
.set_error("Currently active thread is not stopped. Switch the thread.".into());
@@ -561,11 +552,9 @@ pub fn dap_step_out(cx: &mut Context) {
if let Some(thread_id) = debugger.thread_id {
let request = debugger.step_out(thread_id);
- if let Err(e) = block_on(request) {
- cx.editor.set_error(format!("Failed to continue: {}", e));
- return;
- }
- resume_application(debugger);
+ dap_callback(cx.jobs, request, |editor, _compositor, _response: ()| {
+ debugger!(editor).resume_application();
+ });
} else {
cx.editor
.set_error("Currently active thread is not stopped. Switch the thread.".into());
@@ -577,11 +566,9 @@ pub fn dap_next(cx: &mut Context) {
if let Some(thread_id) = debugger.thread_id {
let request = debugger.next(thread_id);
- if let Err(e) = block_on(request) {
- cx.editor.set_error(format!("Failed to continue: {}", e));
- return;
- }
- resume_application(debugger);
+ dap_callback(cx.jobs, request, |editor, _compositor, _response: ()| {
+ debugger!(editor).resume_application();
+ });
} else {
cx.editor
.set_error("Currently active thread is not stopped. Switch the thread.".into());
@@ -658,11 +645,10 @@ pub fn dap_terminate(cx: &mut Context) {
let debugger = debugger!(cx.editor);
let request = debugger.disconnect();
- if let Err(e) = block_on(request) {
- cx.editor.set_error(format!("Failed to disconnect: {}", e));
- return;
- }
- cx.editor.debugger = None;
+ dap_callback(cx.jobs, request, |editor, _compositor, _response: ()| {
+ // editor.set_error(format!("Failed to disconnect: {}", e));
+ editor.debugger = None;
+ });
}
pub fn dap_enable_exceptions(cx: &mut Context) {
@@ -673,19 +659,29 @@ pub fn dap_enable_exceptions(cx: &mut Context) {
None => return,
};
- if let Err(e) = block_on(debugger.set_exception_breakpoints(filters)) {
- cx.editor
- .set_error(format!("Failed to set up exception breakpoints: {}", e));
- }
+ let request = debugger.set_exception_breakpoints(filters);
+
+ dap_callback(
+ cx.jobs,
+ request,
+ |_editor, _compositor, _response: dap::requests::SetExceptionBreakpointsResponse| {
+ // editor.set_error(format!("Failed to set up exception breakpoints: {}", e));
+ },
+ )
}
pub fn dap_disable_exceptions(cx: &mut Context) {
let debugger = debugger!(cx.editor);
- if let Err(e) = block_on(debugger.set_exception_breakpoints(Vec::new())) {
- cx.editor
- .set_error(format!("Failed to set up exception breakpoints: {}", e));
- }
+ let request = debugger.set_exception_breakpoints(Vec::new());
+
+ dap_callback(
+ cx.jobs,
+ request,
+ |_editor, _compositor, _response: dap::requests::SetExceptionBreakpointsResponse| {
+ // editor.set_error(format!("Failed to set up exception breakpoints: {}", e));
+ },
+ )
}
// TODO: both edit condition and edit log need to be stable: we might get new breakpoints from the debugger which can change offsets