diff --git a/crates/dap_adapters/src/gdb.rs b/crates/dap_adapters/src/gdb.rs index 5bc2223f75..809e2ba96a 100644 --- a/crates/dap_adapters/src/gdb.rs +++ b/crates/dap_adapters/src/gdb.rs @@ -79,7 +79,7 @@ impl DebugAdapter for GdbDebugAdapter { json!({"pid": attach_config.process_id}) } dap::DebugRequestType::Launch(launch_config) => { - json!({"program": launch_config.program, "cwd": launch_config.cwd, "stopOnEntry": config.stop_on_entry}) + json!({"program": launch_config.program, "cwd": launch_config.cwd, "stopOnEntry": config.stop_on_entry, "args": launch_config.args.clone()}) } } } diff --git a/crates/dap_adapters/src/go.rs b/crates/dap_adapters/src/go.rs index 3db344cdd2..e4f6bb097c 100644 --- a/crates/dap_adapters/src/go.rs +++ b/crates/dap_adapters/src/go.rs @@ -94,6 +94,7 @@ impl DebugAdapter for GoDebugAdapter { "program": launch_config.program, "cwd": launch_config.cwd, "stopOnEntry": config.stop_on_entry, + "args": launch_config.args }), } } diff --git a/crates/dap_adapters/src/javascript.rs b/crates/dap_adapters/src/javascript.rs index b5b282435e..485014749f 100644 --- a/crates/dap_adapters/src/javascript.rs +++ b/crates/dap_adapters/src/javascript.rs @@ -135,6 +135,7 @@ impl DebugAdapter for JsDebugAdapter { } DebugRequestType::Launch(launch) => { map.insert("program".into(), launch.program.clone().into()); + map.insert("args".into(), launch.args.clone().into()); map.insert( "cwd".into(), launch diff --git a/crates/dap_adapters/src/lldb.rs b/crates/dap_adapters/src/lldb.rs index 62b1e59dd9..e6d659eb71 100644 --- a/crates/dap_adapters/src/lldb.rs +++ b/crates/dap_adapters/src/lldb.rs @@ -82,6 +82,7 @@ impl DebugAdapter for LldbDebugAdapter { } DebugRequestType::Launch(launch) => { map.insert("program".into(), launch.program.clone().into()); + map.insert("args".into(), launch.args.clone().into()); map.insert( "cwd".into(), launch diff --git a/crates/dap_adapters/src/php.rs b/crates/dap_adapters/src/php.rs index 1390906401..9dbdf5bee4 100644 --- a/crates/dap_adapters/src/php.rs +++ b/crates/dap_adapters/src/php.rs @@ -118,6 +118,7 @@ impl DebugAdapter for PhpDebugAdapter { json!({ "program": launch_config.program, "cwd": launch_config.cwd, + "args": launch_config.args, "stopOnEntry": config.stop_on_entry, }) } diff --git a/crates/dap_adapters/src/python.rs b/crates/dap_adapters/src/python.rs index f691486921..c7e6daed06 100644 --- a/crates/dap_adapters/src/python.rs +++ b/crates/dap_adapters/src/python.rs @@ -130,6 +130,7 @@ impl DebugAdapter for PythonDebugAdapter { DebugRequestType::Launch(launch_config) => { json!({ "program": launch_config.program, + "args": launch_config.args, "subProcess": true, "cwd": launch_config.cwd, "redirectOutput": true, diff --git a/crates/debugger_ui/src/session/inert.rs b/crates/debugger_ui/src/session/inert.rs index 3f51ed75a8..03d308fe4f 100644 --- a/crates/debugger_ui/src/session/inert.rs +++ b/crates/debugger_ui/src/session/inert.rs @@ -156,10 +156,10 @@ impl Render for InertState { request: DebugRequestType::Launch(LaunchConfig { program, cwd: Some(cwd), + args: Default::default(), }), tcp_connection: Some(TCPHost::default()), initialize_args: None, - args: Default::default(), locator: None, stop_on_entry: None, }, @@ -322,7 +322,6 @@ impl InertState { adapter: kind, request: DebugRequestType::Attach(task::AttachConfig { process_id: None }), initialize_args: None, - args: Default::default(), locator: None, tcp_connection: Some(TCPHost::default()), stop_on_entry: None, diff --git a/crates/debugger_ui/src/tests/attach_modal.rs b/crates/debugger_ui/src/tests/attach_modal.rs index 723fe8352a..75b3e78b77 100644 --- a/crates/debugger_ui/src/tests/attach_modal.rs +++ b/crates/debugger_ui/src/tests/attach_modal.rs @@ -91,7 +91,6 @@ async fn test_show_attach_modal_and_select_process( tcp_connection: Some(TCPHost::default()), locator: None, stop_on_entry: None, - args: Default::default(), }, vec![ Candidate { diff --git a/crates/languages/src/rust.rs b/crates/languages/src/rust.rs index 2209f4d72d..d326be6eaa 100644 --- a/crates/languages/src/rust.rs +++ b/crates/languages/src/rust.rs @@ -729,7 +729,12 @@ impl ContextProvider for RustContextProvider { ..TaskTemplate::default() }, TaskTemplate { - label: "Debug".into(), + label: format!( + "Debug {} {} (package: {})", + RUST_BIN_KIND_TASK_VARIABLE.template_value(), + RUST_BIN_NAME_TASK_VARIABLE.template_value(), + RUST_PACKAGE_TASK_VARIABLE.template_value(), + ), cwd: Some("$ZED_DIRNAME".to_owned()), command: "cargo".into(), task_type: TaskType::Debug(task::DebugArgs { diff --git a/crates/project/src/debugger/dap_store.rs b/crates/project/src/debugger/dap_store.rs index 36e0cd18f2..a046324f6e 100644 --- a/crates/project/src/debugger/dap_store.rs +++ b/crates/project/src/debugger/dap_store.rs @@ -471,7 +471,6 @@ impl DapStore { initialize_args: config.initialize_args.clone(), tcp_connection: config.tcp_connection.clone(), locator: None, - args: Default::default(), stop_on_entry: config.stop_on_entry, }; diff --git a/crates/project/src/debugger/locator_store/cargo.rs b/crates/project/src/debugger/locator_store/cargo.rs index d2b9d31be1..8aac3e33ba 100644 --- a/crates/project/src/debugger/locator_store/cargo.rs +++ b/crates/project/src/debugger/locator_store/cargo.rs @@ -29,7 +29,7 @@ impl DapLocator for CargoLocator { }; let mut child = Command::new("cargo") - .args(&debug_config.args) + .args(&launch_config.args) .arg("--message-format=json") .current_dir(cwd) .stdout(Stdio::piped()) @@ -59,7 +59,30 @@ impl DapLocator for CargoLocator { }; launch_config.program = executable; - debug_config.args.clear(); + let mut test_name = None; + + if launch_config + .args + .first() + .map_or(false, |arg| arg == "test") + { + if let Some(package_index) = launch_config + .args + .iter() + .position(|arg| arg == "-p" || arg == "--package") + { + test_name = launch_config + .args + .get(package_index + 2) + .filter(|name| !name.starts_with("--")) + .cloned(); + } + } + + launch_config.args.clear(); + if let Some(test_name) = test_name { + launch_config.args.push(test_name); + } Ok(()) } } diff --git a/crates/project/src/debugger/session.rs b/crates/project/src/debugger/session.rs index 75926e5824..ac10fecbfb 100644 --- a/crates/project/src/debugger/session.rs +++ b/crates/project/src/debugger/session.rs @@ -225,6 +225,7 @@ impl LocalMode { DebugRequestType::Launch(task::LaunchConfig { program: "".to_owned(), cwd: None, + args: Default::default(), }) } dap::StartDebuggingRequestArgumentsRequest::Attach => { diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index 2801c3cd93..58d0ce2b6b 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -1489,7 +1489,6 @@ impl Project { initialize_args: None, tcp_connection: None, locator: None, - args: Default::default(), stop_on_entry: None, }; let caps = caps.unwrap_or(Capabilities { diff --git a/crates/task/src/debug_format.rs b/crates/task/src/debug_format.rs index 52c067bdad..3a62e10ebc 100644 --- a/crates/task/src/debug_format.rs +++ b/crates/task/src/debug_format.rs @@ -52,6 +52,8 @@ pub struct LaunchConfig { pub program: String, /// The current working directory of your project pub cwd: Option, + /// Args to pass to a debuggee + pub args: Vec, } /// Represents the type that will determine which request to call on the debug adapter @@ -104,8 +106,6 @@ pub struct DebugAdapterConfig { pub tcp_connection: Option, /// What Locator to use to configure the debug task pub locator: Option, - /// Args to pass to a debug adapter (only used in locator right now) - pub args: Vec, /// Whether to tell the debug adapter to stop on entry pub stop_on_entry: Option, } @@ -119,7 +119,6 @@ impl From for DebugAdapterConfig { initialize_args: def.initialize_args, tcp_connection: def.tcp_connection, locator: def.locator, - args: def.args, stop_on_entry: def.stop_on_entry, } } @@ -140,7 +139,6 @@ impl TryFrom for DebugTaskDefinition { initialize_args: def.initialize_args, tcp_connection: def.tcp_connection, locator: def.locator, - args: def.args, stop_on_entry: def.stop_on_entry, }) } @@ -217,9 +215,6 @@ pub struct DebugTaskDefinition { /// Locator to use /// -- cargo pub locator: Option, - /// Args to pass to a debug adapter (only used in locator right now) - #[serde(skip)] - pub args: Vec, /// Whether to tell the debug adapter to stop on entry pub stop_on_entry: Option, } diff --git a/crates/task/src/lib.rs b/crates/task/src/lib.rs index e5ddcd2ee2..57b64bf108 100644 --- a/crates/task/src/lib.rs +++ b/crates/task/src/lib.rs @@ -134,6 +134,7 @@ impl ResolvedTask { DebugRequestType::Launch(LaunchConfig { program: resolved.command.clone(), cwd: resolved.cwd.clone(), + args, }) } crate::task_template::DebugArgsRequest::Attach(attach_config) => { @@ -142,7 +143,6 @@ impl ResolvedTask { }), initialize_args: debug_args.initialize_args, tcp_connection: debug_args.tcp_connection, - args, locator: debug_args.locator.clone(), stop_on_entry: debug_args.stop_on_entry, })