diff --git a/Cargo.lock b/Cargo.lock index ecd00c6b1de7ec39906d5059f1369fd4cfe33342..67418944ec35ef1bbb412f0092f80a32c448cea7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4049,7 +4049,7 @@ dependencies = [ [[package]] name = "dap-types" version = "0.0.1" -source = "git+https://github.com/zed-industries/dap-types?rev=68516de327fa1be15214133a0a2e52a12982ce75#68516de327fa1be15214133a0a2e52a12982ce75" +source = "git+https://github.com/zed-industries/dap-types?rev=cef124a5109d6fd44a3f986882d78ce40b8d4fb5#cef124a5109d6fd44a3f986882d78ce40b8d4fb5" dependencies = [ "schemars", "serde", diff --git a/Cargo.toml b/Cargo.toml index c6fa514241e13bd578e202a07e69567f7fb9ea89..4789e5278f915aa7d719bd3049568c0af419aa3f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -435,7 +435,7 @@ core-foundation-sys = "0.8.6" core-video = { version = "0.4.3", features = ["metal"] } criterion = { version = "0.5", features = ["html_reports"] } ctor = "0.4.0" -dap-types = { git = "https://github.com/zed-industries/dap-types", rev = "68516de327fa1be15214133a0a2e52a12982ce75" } +dap-types = { git = "https://github.com/zed-industries/dap-types", rev = "cef124a5109d6fd44a3f986882d78ce40b8d4fb5" } dashmap = "6.0" derive_more = "0.99.17" dirs = "4.0" diff --git a/crates/project/src/debugger/session.rs b/crates/project/src/debugger/session.rs index 86ef00e4ba00ba8834a7723c385cc074a14e50e6..8feb26b0de2f003f8731f843ee92169e7370d691 100644 --- a/crates/project/src/debugger/session.rs +++ b/crates/project/src/debugger/session.rs @@ -990,10 +990,41 @@ impl Session { request: dap::messages::Request, cx: &mut Context, ) -> Task> { - let request_args = serde_json::from_value::( + let request_args = match serde_json::from_value::( request.arguments.unwrap_or_default(), - ) - .expect("To parse StartDebuggingRequestArguments"); + ) { + Ok(args) => args, + Err(error) => { + return cx.spawn(async move |session, cx| { + let error = serde_json::to_value(dap::ErrorResponse { + error: Some(dap::Message { + id: request.seq, + format: error.to_string(), + variables: None, + send_telemetry: None, + show_user: None, + url: None, + url_label: None, + }), + }) + .ok(); + + session + .update(cx, |this, cx| { + this.respond_to_client( + request.seq, + false, + StartDebugging::COMMAND.to_string(), + error, + cx, + ) + })? + .await?; + + Err(anyhow!("Failed to parse RunInTerminalRequestArguments")) + }); + } + }; let seq = request.seq;