From 6f918ed99bfa107d496f7e6a7101a956494f3153 Mon Sep 17 00:00:00 2001 From: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com> Date: Sat, 24 May 2025 09:52:36 +0300 Subject: [PATCH] debugger beta: Fix regression where we sent launch args twice to any dap (#31325) This regression happens because our tests weren't properly catching this edge case anymore. I updated the tests to only send the raw config to the Fake Adapter Client. Release Notes: - debugger beta: Fix bug where launch args were sent twice --- crates/dap/src/adapters.rs | 33 +++---------------- .../debugger_ui/src/tests/debugger_panel.rs | 8 +---- crates/project/src/debugger/dap_store.rs | 6 ++-- 3 files changed, 8 insertions(+), 39 deletions(-) diff --git a/crates/dap/src/adapters.rs b/crates/dap/src/adapters.rs index 32862ad2745e2040a4eb6328342f5e60bfb3d677..38da0931f2abb5669f1dab00510fc981d403f3ec 100644 --- a/crates/dap/src/adapters.rs +++ b/crates/dap/src/adapters.rs @@ -400,32 +400,6 @@ impl FakeAdapter { pub fn new() -> Self { Self {} } - - fn request_args( - &self, - task_definition: &DebugTaskDefinition, - ) -> StartDebuggingRequestArguments { - use serde_json::json; - - let obj = task_definition.config.as_object().unwrap(); - - let request_variant = obj["request"].as_str().unwrap(); - - let value = json!({ - "request": request_variant, - "process_id": obj.get("process_id"), - "raw_request": serde_json::to_value(task_definition).unwrap() - }); - - StartDebuggingRequestArguments { - configuration: value, - request: match request_variant { - "launch" => dap_types::StartDebuggingRequestArgumentsRequest::Launch, - "attach" => dap_types::StartDebuggingRequestArgumentsRequest::Attach, - _ => unreachable!("Wrong fake adapter input for request field"), - }, - } - } } #[cfg(any(test, feature = "test-support"))] @@ -473,7 +447,7 @@ impl DebugAdapter for FakeAdapter { async fn get_binary( &self, _: &Arc, - config: &DebugTaskDefinition, + task_definition: &DebugTaskDefinition, _: Option, _: &mut AsyncApp, ) -> Result { @@ -483,7 +457,10 @@ impl DebugAdapter for FakeAdapter { connection: None, envs: HashMap::default(), cwd: None, - request_args: self.request_args(&config), + request_args: StartDebuggingRequestArguments { + request: self.validate_config(&task_definition.config)?, + configuration: task_definition.config.clone(), + }, }) } } diff --git a/crates/debugger_ui/src/tests/debugger_panel.rs b/crates/debugger_ui/src/tests/debugger_panel.rs index f802d804cd1639b90142d86a0a4aa089ece79103..f2165a05abd6ac591a462d90cb1584cc17fde393 100644 --- a/crates/debugger_ui/src/tests/debugger_panel.rs +++ b/crates/debugger_ui/src/tests/debugger_panel.rs @@ -1439,13 +1439,7 @@ async fn test_we_send_arguments_from_user_config( client.on_request::(move |_, args| { launch_handler_called.store(true, Ordering::SeqCst); - let obj = args.raw.as_object().unwrap(); - let sent_definition = serde_json::from_value::( - obj.get(&"raw_request".to_owned()).unwrap().clone(), - ) - .unwrap(); - - assert_eq!(sent_definition, debug_definition); + assert_eq!(args.raw, debug_definition.config); Ok(()) }); diff --git a/crates/project/src/debugger/dap_store.rs b/crates/project/src/debugger/dap_store.rs index 86dd1838266ee4411b37a63f0867b581d1dbfe28..320df922c8e5953a3a423bf34f92431d7a04ec58 100644 --- a/crates/project/src/debugger/dap_store.rs +++ b/crates/project/src/debugger/dap_store.rs @@ -50,7 +50,7 @@ use std::{ sync::{Arc, Once}, }; use task::{DebugScenario, SpawnInTerminal, TaskTemplate}; -use util::{ResultExt as _, merge_json_value_into}; +use util::ResultExt as _; use worktree::Worktree; #[derive(Debug)] @@ -407,14 +407,12 @@ impl DapStore { cx.spawn({ let session = session.clone(); async move |this, cx| { - let mut binary = this + let binary = this .update(cx, |this, cx| { this.get_debug_adapter_binary(definition.clone(), session_id, console, cx) })? .await?; - merge_json_value_into(definition.config, &mut binary.request_args.configuration); - session .update(cx, |session, cx| { session.boot(binary, worktree, dap_store, cx)