Unnamed repository; edit this file 'description' to name the repository.
feat(dap): surface breakpoint messages
| -rw-r--r-- | helix-term/src/commands/dap.rs | 8 | ||||
| -rw-r--r-- | helix-view/src/handlers/dap.rs | 33 |
2 files changed, 22 insertions, 19 deletions
diff --git a/helix-term/src/commands/dap.rs b/helix-term/src/commands/dap.rs index 32f4ab87..922d0ade 100644 --- a/helix-term/src/commands/dap.rs +++ b/helix-term/src/commands/dap.rs @@ -764,10 +764,10 @@ pub fn dap_switch_stack_frame(cx: &mut Context) { frames, thread_state, move |cx, (index, frame), _action| { - let debugger = debugger!(cx.editor); - debugger.active_frame = Some(*index); - jump_to_stack_frame(cx.editor, frame); - }, + let debugger = debugger!(cx.editor); + debugger.active_frame = Some(*index); + jump_to_stack_frame(cx.editor, frame); + }, ) .with_preview(move |_editor, (_index, frame)| { frame.source.as_ref().and_then(|source| { diff --git a/helix-view/src/handlers/dap.rs b/helix-view/src/handlers/dap.rs index e224f1c3..b913ce8e 100644 --- a/helix-view/src/handlers/dap.rs +++ b/helix-view/src/handlers/dap.rs @@ -1,5 +1,6 @@ use crate::editor::{Action, Breakpoint}; use crate::{align_view, Align, Editor}; +use anyhow::bail; use dap::requests::DisconnectArguments; use dap::requests::ThreadsArguments; use helix_core::Selection; @@ -8,7 +9,6 @@ use helix_dap::{ }; use helix_lsp::block_on; use log::{error, warn}; -use anyhow::bail; use serde_json::{json, Value}; use std::fmt::Write; use std::path::PathBuf; @@ -96,16 +96,14 @@ pub fn breakpoints_changed( if breakpoints.iter().any(|b| b.condition.is_some()) && !caps.supports_conditional_breakpoints.unwrap_or_default() { - bail!( - "Can't edit breakpoint: debugger does not support conditional breakpoints" - ) + bail!("Can't edit breakpoint: debugger does not support conditional breakpoints") } if breakpoints.iter().any(|b| b.hit_condition.is_some()) - && !caps.supports_hit_conditional_breakpoints.unwrap_or_default() + && !caps + .supports_hit_conditional_breakpoints + .unwrap_or_default() { - bail!( - "Can't edit breakpoint: debugger does not support hit conditional breakpoints" - ) + bail!("Can't edit breakpoint: debugger does not support hit conditional breakpoints") } if breakpoints.iter().any(|b| b.log_message.is_some()) && !caps.supports_log_points.unwrap_or_default() @@ -256,11 +254,14 @@ impl Editor { self.breakpoints.entry(path).or_default().push(Breakpoint { id: breakpoint.id, verified: breakpoint.verified, - message: breakpoint.message, + message: breakpoint.message.clone(), line: line.saturating_sub(1), column: breakpoint.column, ..Default::default() }); + if let Some(message) = &breakpoint.message { + self.set_status(format!("Breakpoint: {}", message)); + } } } "changed" => { @@ -277,7 +278,8 @@ impl Editor { warn!("DAP breakpoint event missing line"); } for breakpoints in self.breakpoints.values_mut() { - if let Some(i) = breakpoints.iter().position(|b| b.id == Some(id)) + if let Some(i) = + breakpoints.iter().position(|b| b.id == Some(id)) { breakpoints[i].verified = breakpoint.verified; breakpoints[i].message = breakpoint @@ -292,6 +294,9 @@ impl Editor { breakpoint.column.or(breakpoints[i].column); } } + if let Some(message) = &breakpoint.message { + self.set_status(format!("Breakpoint: {}", message)); + } } "removed" => { let Some(id) = breakpoint.id else { @@ -299,7 +304,8 @@ impl Editor { return false; }; for breakpoints in self.breakpoints.values_mut() { - if let Some(i) = breakpoints.iter().position(|b| b.id == Some(id)) + if let Some(i) = + breakpoints.iter().position(|b| b.id == Some(id)) { breakpoints.remove(i); } @@ -341,10 +347,7 @@ impl Editor { // TODO: fetch breakpoints (in case we're attaching) if let Err(err) = debugger.configuration_done().await { - self.set_error(format!( - "Debugger configuration failed: {}", - err - )); + self.set_error(format!("Debugger configuration failed: {}", err)); } else { self.set_status("Debugged application started"); } |