diff --git a/crates/rust-analyzer/src/handlers/request.rs b/crates/rust-analyzer/src/handlers/request.rs index 7e0db8edd8..0cc70ab86a 100644 --- a/crates/rust-analyzer/src/handlers/request.rs +++ b/crates/rust-analyzer/src/handlers/request.rs @@ -874,6 +874,7 @@ pub(crate) fn handle_runnables( if all_targets { cargo_args.push("--all-targets".to_owned()); } + cargo_args.extend(config.cargo_extra_args.iter().cloned()); res.push(lsp_ext::Runnable { label: format!( "cargo {cmd} -p {}{all_targets}", @@ -887,7 +888,6 @@ pub(crate) fn handle_runnables( cwd: cwd.into(), override_cargo: config.override_cargo.clone(), cargo_args, - cargo_extra_args: config.cargo_extra_args.clone(), executable_args: Vec::new(), environment: Default::default(), }), @@ -897,6 +897,8 @@ pub(crate) fn handle_runnables( Some(TargetSpec::ProjectJson(_)) => {} None => { if !snap.config.linked_or_discovered_projects().is_empty() { + let mut cargo_args = vec!["check".to_owned(), "--workspace".to_owned()]; + cargo_args.extend(config.cargo_extra_args.iter().cloned()); res.push(lsp_ext::Runnable { label: "cargo check --workspace".to_owned(), location: None, @@ -905,8 +907,7 @@ pub(crate) fn handle_runnables( workspace_root: None, cwd: ".".into(), override_cargo: config.override_cargo, - cargo_args: vec!["check".to_owned(), "--workspace".to_owned()], - cargo_extra_args: config.cargo_extra_args, + cargo_args, executable_args: Vec::new(), environment: Default::default(), }), diff --git a/crates/rust-analyzer/src/lsp/ext.rs b/crates/rust-analyzer/src/lsp/ext.rs index 3766e3f46a..f1d08c25d8 100644 --- a/crates/rust-analyzer/src/lsp/ext.rs +++ b/crates/rust-analyzer/src/lsp/ext.rs @@ -460,6 +460,7 @@ pub enum RunnableKind { #[derive(Deserialize, Serialize, Debug)] #[serde(rename_all = "camelCase")] pub struct CargoRunnableArgs { + #[serde(skip_serializing_if = "FxHashMap::is_empty")] pub environment: FxHashMap, pub cwd: Utf8PathBuf, /// Command to be executed instead of cargo @@ -468,8 +469,6 @@ pub struct CargoRunnableArgs { pub workspace_root: Option, // command, --package and --lib stuff pub cargo_args: Vec, - // user-specified additional cargo args, like `--release`. - pub cargo_extra_args: Vec, // stuff after -- pub executable_args: Vec, } @@ -477,6 +476,7 @@ pub struct CargoRunnableArgs { #[derive(Deserialize, Serialize, Debug)] #[serde(rename_all = "camelCase")] pub struct ShellRunnableArgs { + #[serde(skip_serializing_if = "FxHashMap::is_empty")] pub environment: FxHashMap, pub cwd: Utf8PathBuf, pub program: String, diff --git a/crates/rust-analyzer/src/lsp/to_proto.rs b/crates/rust-analyzer/src/lsp/to_proto.rs index fe65d1fc4f..2222a75628 100644 --- a/crates/rust-analyzer/src/lsp/to_proto.rs +++ b/crates/rust-analyzer/src/lsp/to_proto.rs @@ -1391,7 +1391,6 @@ pub(crate) fn runnable( override_cargo: config.override_cargo, cargo_args, cwd: cwd.into(), - cargo_extra_args: config.cargo_extra_args, executable_args, environment: Default::default(), }), @@ -1435,7 +1434,6 @@ pub(crate) fn runnable( override_cargo: config.override_cargo, cargo_args, cwd: Utf8PathBuf::from("."), - cargo_extra_args: config.cargo_extra_args, executable_args, environment: Default::default(), }), diff --git a/crates/rust-analyzer/src/target_spec.rs b/crates/rust-analyzer/src/target_spec.rs index 6145f7e05f..863ff06439 100644 --- a/crates/rust-analyzer/src/target_spec.rs +++ b/crates/rust-analyzer/src/target_spec.rs @@ -110,7 +110,8 @@ impl CargoTargetSpec { kind: &RunnableKind, cfg: &Option, ) -> (Vec, Vec) { - let extra_test_binary_args = snap.config.runnables().extra_test_binary_args; + let config = snap.config.runnables(); + let extra_test_binary_args = config.extra_test_binary_args; let mut cargo_args = Vec::new(); let mut executable_args = Vec::new(); @@ -196,6 +197,7 @@ impl CargoTargetSpec { } } } + cargo_args.extend(config.cargo_extra_args.iter().cloned()); (cargo_args, executable_args) } diff --git a/crates/rust-analyzer/tests/slow-tests/main.rs b/crates/rust-analyzer/tests/slow-tests/main.rs index 51b3076b46..c6236d8b4f 100644 --- a/crates/rust-analyzer/tests/slow-tests/main.rs +++ b/crates/rust-analyzer/tests/slow-tests/main.rs @@ -258,7 +258,6 @@ fn main() {} "args": { "cargoArgs": ["test", "--package", "foo", "--test", "spam"], "executableArgs": ["test_eggs", "--exact", "--show-output"], - "cargoExtraArgs": [], "overrideCargo": null, "cwd": server.path().join("foo"), "workspaceRoot": server.path().join("foo") @@ -289,7 +288,6 @@ fn main() {} "--test", "spam" ], - "cargoExtraArgs": [], "executableArgs": [ "", "--show-output" @@ -325,7 +323,6 @@ fn main() {} "args": { "cargoArgs": ["check", "--package", "foo", "--all-targets"], "executableArgs": [], - "cargoExtraArgs": [], "overrideCargo": null, "cwd": server.path().join("foo"), "workspaceRoot": server.path().join("foo") @@ -337,7 +334,6 @@ fn main() {} "args": { "cargoArgs": ["test", "--package", "foo", "--all-targets"], "executableArgs": [], - "cargoExtraArgs": [], "overrideCargo": null, "cwd": server.path().join("foo"), "workspaceRoot": server.path().join("foo") @@ -426,7 +422,6 @@ mod tests { runnable, "--all-targets" ], - "cargoExtraArgs": [], "executableArgs": [] }, }, @@ -489,7 +484,6 @@ fn otherpkg() {} "mainpkg", "--all-targets" ], - "cargoExtraArgs": [], "executableArgs": [] }, }, @@ -515,7 +509,6 @@ fn otherpkg() {} "otherpkg", "--all-targets" ], - "cargoExtraArgs": [], "executableArgs": [] }, }, diff --git a/docs/dev/lsp-extensions.md b/docs/dev/lsp-extensions.md index 1cafcae7bb..a1470fc567 100644 --- a/docs/dev/lsp-extensions.md +++ b/docs/dev/lsp-extensions.md @@ -1,5 +1,5 @@