@@ -1,4 +1,4 @@
1−mod dap;
1+pub(crate) mod dap;
3pub use dap::*;
3pub use dap::*;
@@ -1955,8 +1955,17 @@ mod cmd {
1955 ) -> anyhow::Result<()> {
1955 ) -> anyhow::Result<()> {
1956 use helix_lsp::block_on;
1956 use helix_lsp::block_on;
1957 if let Some(debugger) = cx.editor.debugger.as_mut() {
1957 if let Some(debugger) = cx.editor.debugger.as_mut() {
1958− let id = debugger.stack_pointer.clone().map(|x| x.id);
1958+ let (frame, thread_id) = match (debugger.active_frame, debugger.thread_id) {
1959+ (Some(frame), Some(thread_id)) => (frame, thread_id),
1961+ bail!("Cannot find current stack frame to access variables")
1965+ // TODO: support no frame_id
1967+ let frame_id = debugger.stack_frames[&thread_id][frame].id;
1959− let response = block_on(debugger.eval(args.join(" "), id))?;
1968+ let response = block_on(debugger.eval(args.join(" "), Some(frame_id)))?;
1960 cx.editor.set_status(response.result);
1969 cx.editor.set_status(response.result);
@@ -1966,7 +1975,7 @@ mod cmd {
1966 cx: &mut compositor::Context,
1975 cx: &mut compositor::Context,
1967 condition: Option<String>,
1976 condition: Option<String>,
1968 log_message: Option<String>,
1977 log_message: Option<String>,
1969− ) {
1978+ ) -> anyhow::Result<()> {
1970 use helix_lsp::block_on;
1979 use helix_lsp::block_on;
1972 let (view, doc) = current!(cx.editor);
1981 let (view, doc) = current!(cx.editor);
@@ -1981,38 +1990,29 @@ mod cmd {
1981 let path = match doc.path() {
1990 let path = match doc.path() {
1982 Some(path) => path.to_path_buf(),
1991 Some(path) => path.to_path_buf(),
1983 None => {
1992 None => {
1985− .set_error("Can't edit breakpoint: document has no path".to_string());
1993+ bail!("Can't edit breakpoint: document has no path")
1989 if let Some(debugger) = &mut cx.editor.debugger {
1996 if let Some(debugger) = &mut cx.editor.debugger {
1990 if breakpoint.condition.is_some()
1997 if breakpoint.condition.is_some()
1991 && !debugger
1998 && !debugger
1993− .clone()
2000+ .as_ref()
1994 .unwrap()
2001 .unwrap()
1995 .supports_conditional_breakpoints
2002 .supports_conditional_breakpoints
1996 .unwrap_or_default()
2003 .unwrap_or_default()
1998− cx.editor.set_error(
1999− "Can't edit breakpoint: debugger does not support conditional breakpoints"
2005+ bail!("Can't edit breakpoint: debugger does not support conditional breakpoints")
2004 if breakpoint.log_message.is_some()
2007 if breakpoint.log_message.is_some()
2005 && !debugger
2008 && !debugger
2007− .clone()
2010+ .as_ref()
2008 .unwrap()
2011 .unwrap()
2009 .supports_log_points
2012 .supports_log_points
2010 .unwrap_or_default()
2013 .unwrap_or_default()
2012− cx.editor.set_error(
2013− "Can't edit breakpoint: debugger does not support logpoints".to_string(),
2015+ bail!("Can't edit breakpoint: debugger does not support logpoints")
2018 let breakpoints = debugger.breakpoints.entry(path.clone()).or_default();
2018 let breakpoints = debugger.breakpoints.entry(path.clone()).or_default();
@@ -2024,11 +2024,11 @@ mod cmd {
2025 let request = debugger.set_breakpoints(path, breakpoints);
2025 let request = debugger.set_breakpoints(path, breakpoints);
2026 if let Err(e) = block_on(request) {
2026 if let Err(e) = block_on(request) {
2028− .set_error(format!("Failed to set breakpoints: {:?}", e));
2027+ bail!("Failed to set breakpoints: {:?}", e)
2034 fn debug_start(
2034 fn debug_start(
@@ -2076,8 +2076,7 @@ mod cmd {
2076 Some(condition)
2076 Some(condition)
2079− edit_breakpoint_impl(cx, condition, None);
2079+ edit_breakpoint_impl(cx, condition, None)
2083 fn debug_set_logpoint(
2082 fn debug_set_logpoint(
@@ -2092,8 +2091,7 @@ mod cmd {
2092 Some(log_message)
2091 Some(log_message)
2095− edit_breakpoint_impl(cx, None, log_message);
2094+ edit_breakpoint_impl(cx, None, log_message)
2099 pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
2097 pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[