aboutsummaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
authorDmitry Sharshakov2021-08-25 18:01:15 +0000
committerDmitry Sharshakov2021-08-25 18:01:15 +0000
commit3b87fce0cedc1cd2b4d5d41ddd76daa0dc3f7f2e (patch)
treeceee9a4a271ae7bbb1533b99bba65de14e996cb9 /helix-term
parent2ad2838a27289acdfee364a0f6b222fd4dc34142 (diff)
Print errors occurred in debug commands
Diffstat (limited to 'helix-term')
-rw-r--r--helix-term/src/commands.rs195
1 files changed, 120 insertions, 75 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 6ba244ee..9cf8bb5c 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -1910,6 +1910,40 @@ mod cmd {
Ok(())
}
+ fn vsplit(
+ cx: &mut compositor::Context,
+ args: &[&str],
+ _event: PromptEvent,
+ ) -> anyhow::Result<()> {
+ let (_, doc) = current!(cx.editor);
+ let id = doc.id();
+
+ if let Some(path) = args.get(0) {
+ cx.editor.open(path.into(), Action::VerticalSplit)?;
+ } else {
+ cx.editor.switch(id, Action::VerticalSplit);
+ }
+
+ Ok(())
+ }
+
+ fn hsplit(
+ cx: &mut compositor::Context,
+ args: &[&str],
+ _event: PromptEvent,
+ ) -> anyhow::Result<()> {
+ let (_, doc) = current!(cx.editor);
+ let id = doc.id();
+
+ if let Some(path) = args.get(0) {
+ cx.editor.open(path.into(), Action::HorizontalSplit)?;
+ } else {
+ cx.editor.switch(id, Action::HorizontalSplit);
+ }
+
+ Ok(())
+ }
+
fn debug_eval(
cx: &mut compositor::Context,
args: &[&str],
@@ -1985,60 +2019,14 @@ mod cmd {
let breakpoints = breakpoints.clone();
let request = debugger.set_breakpoints(path, breakpoints);
- let _ = block_on(request).unwrap();
+ if let Err(e) = block_on(request) {
+ cx.editor
+ .set_error(format!("Failed to set breakpoints: {:?}", e));
+ }
}
}
}
- fn debug_breakpoint_condition(
- cx: &mut compositor::Context,
- args: &[&str],
- _event: PromptEvent,
- ) -> anyhow::Result<()> {
- let condition = args.join(" ");
- let condition = if condition.is_empty() {
- None
- } else {
- Some(condition)
- };
-
- edit_breakpoint_impl(cx, condition, None);
- Ok(())
- }
-
- fn vsplit(
- cx: &mut compositor::Context,
- args: &[&str],
- _event: PromptEvent,
- ) -> anyhow::Result<()> {
- let (_, doc) = current!(cx.editor);
- let id = doc.id();
-
- if let Some(path) = args.get(0) {
- cx.editor.open(path.into(), Action::VerticalSplit)?;
- } else {
- cx.editor.switch(id, Action::VerticalSplit);
- }
-
- Ok(())
- }
-
- fn hsplit(
- cx: &mut compositor::Context,
- args: &[&str],
- _event: PromptEvent,
- ) -> anyhow::Result<()> {
- let log_message = args.join(" ");
- let log_message = if log_message.is_empty() {
- None
- } else {
- Some(log_message)
- };
-
- edit_breakpoint_impl(cx, None, log_message);
- Ok(())
- }
-
fn debug_start(
cx: &mut compositor::Context,
args: &[&str],
@@ -2061,7 +2049,7 @@ mod cmd {
let mut args = args.to_owned();
let address = match args.len() {
0 => None,
- _ => Some(args.remove(0).parse().unwrap()),
+ _ => Some(args.remove(0).parse()?),
};
let name = match args.len() {
0 => None,
@@ -2072,20 +2060,35 @@ mod cmd {
Ok(())
}
- fn debug_set_logpoint(
+ fn debug_breakpoint_condition(
cx: &mut compositor::Context,
args: &[&str],
_event: PromptEvent,
) -> anyhow::Result<()> {
- let (_, doc) = current!(cx.editor);
- let id = doc.id();
+ let condition = args.join(" ");
+ let condition = if condition.is_empty() {
+ None
+ } else {
+ Some(condition)
+ };
- if let Some(path) = args.get(0) {
- cx.editor.open(path.into(), Action::HorizontalSplit)?;
+ edit_breakpoint_impl(cx, condition, None);
+ Ok(())
+ }
+
+ fn debug_set_logpoint(
+ cx: &mut compositor::Context,
+ args: &[&str],
+ _event: PromptEvent,
+ ) -> anyhow::Result<()> {
+ let log_message = args.join(" ");
+ let log_message = if log_message.is_empty() {
+ None
} else {
- cx.editor.switch(id, Action::HorizontalSplit);
- }
+ Some(log_message)
+ };
+ edit_breakpoint_impl(cx, None, log_message);
Ok(())
}
@@ -4522,13 +4525,24 @@ fn dap_start_impl(
}
};
- let (mut debugger, events) = match socket {
- Some(socket) => block_on(Client::tcp(socket, 0)).unwrap(),
- None => block_on(Client::process(config.clone(), 0)).unwrap(),
+ let result = match socket {
+ Some(socket) => block_on(Client::tcp(socket, 0)),
+ None => block_on(Client::process(config.clone(), 0)),
+ };
+
+ let (mut debugger, events) = match result {
+ Ok(r) => r,
+ Err(e) => {
+ editor.set_error(format!("Failed to start debug session: {:?}", e));
+ return;
+ }
};
let request = debugger.initialize(config.name.clone());
- let _ = block_on(request).unwrap();
+ if let Err(e) = block_on(request) {
+ editor.set_error(format!("Failed to initialize debug adapter: {:?}", e));
+ return;
+ }
let start_config = match name {
Some(name) => config.templates.iter().find(|t| t.name == name),
@@ -4563,15 +4577,18 @@ fn dap_start_impl(
let args = to_value(args).unwrap();
- // TODO gracefully handle errors from debugger
- match &start_config.request[..] {
- "launch" => block_on(debugger.launch(args)).unwrap(),
- "attach" => block_on(debugger.attach(args)).unwrap(),
+ let result = match &start_config.request[..] {
+ "launch" => block_on(debugger.launch(args)),
+ "attach" => block_on(debugger.attach(args)),
_ => {
editor.set_error("Unsupported request".to_string());
return;
}
};
+ if let Err(e) = result {
+ editor.set_error(format!("Failed {} target: {:?}", start_config.request, e));
+ return;
+ }
// TODO: either await "initialized" or buffer commands until event is received
editor.debugger = Some(debugger);
@@ -4614,7 +4631,10 @@ fn dap_toggle_breakpoint(cx: &mut Context) {
let breakpoints = breakpoints.clone();
let request = debugger.set_breakpoints(path, breakpoints);
- let _ = block_on(request).unwrap();
+ if let Err(e) = block_on(request) {
+ cx.editor
+ .set_error(format!("Failed to set breakpoints: {:?}", e));
+ }
}
}
@@ -4628,7 +4648,10 @@ fn dap_run(cx: &mut Context) {
return;
}
let request = debugger.configuration_done();
- let _ = block_on(request).unwrap();
+ if let Err(e) = block_on(request) {
+ cx.editor.set_error(format!("Failed to run: {:?}", e));
+ return;
+ }
debugger.is_running = true;
}
}
@@ -4644,7 +4667,10 @@ fn dap_continue(cx: &mut Context) {
}
let request = debugger.continue_thread(debugger.stopped_thread.unwrap());
- let _ = block_on(request).unwrap();
+ if let Err(e) = block_on(request) {
+ cx.editor.set_error(format!("Failed to continue: {:?}", e));
+ return;
+ }
debugger.is_running = true;
debugger.stack_pointer = None;
}
@@ -4661,7 +4687,9 @@ fn dap_pause(cx: &mut Context) {
// FIXME: correct number here
let request = debugger.pause(0);
- let _ = block_on(request).unwrap();
+ if let Err(e) = block_on(request) {
+ cx.editor.set_error(format!("Failed to pause: {:?}", e));
+ }
}
}
@@ -4676,7 +4704,9 @@ fn dap_in(cx: &mut Context) {
}
let request = debugger.step_in(debugger.stopped_thread.unwrap());
- let _ = block_on(request).unwrap();
+ if let Err(e) = block_on(request) {
+ cx.editor.set_error(format!("Failed to step: {:?}", e));
+ }
}
}
@@ -4691,7 +4721,9 @@ fn dap_out(cx: &mut Context) {
}
let request = debugger.step_out(debugger.stopped_thread.unwrap());
- let _ = block_on(request).unwrap();
+ if let Err(e) = block_on(request) {
+ cx.editor.set_error(format!("Failed to step: {:?}", e));
+ }
}
}
@@ -4706,7 +4738,9 @@ fn dap_next(cx: &mut Context) {
}
let request = debugger.next(debugger.stopped_thread.unwrap());
- let _ = block_on(request).unwrap();
+ if let Err(e) = block_on(request) {
+ cx.editor.set_error(format!("Failed to step: {:?}", e));
+ }
}
}
@@ -4726,7 +4760,14 @@ fn dap_variables(cx: &mut Context) {
}
let frame_id = debugger.stack_pointer.clone().unwrap().id;
- let scopes = block_on(debugger.scopes(frame_id)).unwrap();
+ let scopes = match block_on(debugger.scopes(frame_id)) {
+ Ok(s) => s,
+ Err(e) => {
+ cx.editor
+ .set_error(format!("Failed to get scopes: {:?}", e));
+ return;
+ }
+ };
let mut s = String::new();
for scope in scopes.iter() {
@@ -4752,7 +4793,11 @@ fn dap_terminate(cx: &mut Context) {
if let Some(debugger) = &mut cx.editor.debugger {
let request = debugger.disconnect();
- let _ = block_on(request).unwrap();
+ if let Err(e) = block_on(request) {
+ cx.editor
+ .set_error(format!("Failed to disconnect: {:?}", e));
+ return;
+ }
cx.editor.debugger = None;
}
}