Skip to content

Commit

Permalink
editor: support setExceptionBreakpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
dsseng committed Sep 26, 2021
1 parent bf53aff commit 0e51e5f
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 0 deletions.
13 changes: 13 additions & 0 deletions helix-dap/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -399,4 +399,17 @@ impl Client {

self.request::<requests::Evaluate>(args).await
}

pub async fn set_exception_breakpoints(
&mut self,
filters: Vec<String>,
) -> Result<Option<Vec<Breakpoint>>> {
let args = requests::SetExceptionBreakpointsArguments { filters };

let response = self
.request::<requests::SetExceptionBreakpoints>(args)
.await;

Ok(response.ok().map(|r| r.breakpoints).unwrap_or_default())
}
}
23 changes: 23 additions & 0 deletions helix-dap/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -515,6 +515,29 @@ pub mod requests {
type Result = EvaluateResponse;
const COMMAND: &'static str = "evaluate";
}

#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetExceptionBreakpointsArguments {
pub filters: Vec<String>,
// pub filterOptions: Option<Vec<ExceptionFilterOptions>>, // needs capability
// pub exceptionOptions: Option<Vec<ExceptionOptions>>, // needs capability
}

#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetExceptionBreakpointsResponse {
pub breakpoints: Option<Vec<Breakpoint>>,
}

#[derive(Debug)]
pub enum SetExceptionBreakpoints {}

impl Request for SetExceptionBreakpoints {
type Arguments = SetExceptionBreakpointsArguments;
type Result = SetExceptionBreakpointsResponse;
const COMMAND: &'static str = "setExceptionBreakpoints";
}
}

// Events
Expand Down
2 changes: 2 additions & 0 deletions helix-term/src/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,8 @@ impl Command {
dap_edit_log, "Edit log message of the breakpoint on the current line",
dap_switch_thread, "Switch current thread",
dap_switch_stack_frame, "Switch stack frame",
dap_enable_exceptions, "Enable exception breakpoints",
dap_disable_exceptions, "Disable exception breakpoints",
shell_pipe, "Pipe selections through shell command",
shell_pipe_to, "Pipe selections into shell command, ignoring command output",
shell_insert_output, "Insert output of shell command before each selection",
Expand Down
33 changes: 33 additions & 0 deletions helix-term/src/commands/dap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -513,6 +513,39 @@ pub fn dap_terminate(cx: &mut Context) {
cx.editor.debugger = None;
}

pub fn dap_enable_exceptions(cx: &mut Context) {
let debugger = match &mut cx.editor.debugger {
Some(debugger) => debugger,
None => return,
};

let filters = match &debugger.capabilities().exception_breakpoint_filters {
Some(filters) => filters.clone(),
None => return,
};

if let Err(e) = block_on(
debugger.set_exception_breakpoints(filters.iter().map(|f| f.filter.clone()).collect()),
) {
cx.editor
.set_error(format!("Failed to set up exception breakpoints: {:?}", e));
return;
}
}

pub fn dap_disable_exceptions(cx: &mut Context) {
let debugger = match &mut cx.editor.debugger {
Some(debugger) => debugger,
None => return,
};

if let Err(e) = block_on(debugger.set_exception_breakpoints(vec![])) {
cx.editor
.set_error(format!("Failed to set up exception breakpoints: {:?}", e));
return;
}
}

pub fn dap_edit_condition(cx: &mut Context) {
if let Some((pos, mut bp)) = commands::cmd::get_breakpoint_at_current_line(cx.editor) {
let callback = Box::pin(async move {
Expand Down
2 changes: 2 additions & 0 deletions helix-term/src/keymap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -557,6 +557,8 @@ impl Default for Keymaps {
"f" => dap_switch_stack_frame,
// sl, sb
},
"e" => dap_enable_exceptions,
"E" => dap_disable_exceptions,
},
"w" => { "Window"
"C-w" | "w" => rotate_view,
Expand Down

0 comments on commit 0e51e5f

Please sign in to comment.