diff --git a/crates/project-model/src/project_json.rs b/crates/project-model/src/project_json.rs index 397e77e851a8..c3e9ac5ccd9d 100644 --- a/crates/project-model/src/project_json.rs +++ b/crates/project-model/src/project_json.rs @@ -273,6 +273,7 @@ pub struct ShellRunnableArgs { pub enum ShellRunnableKind { Check, Run, + TestOne, } #[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Deserialize)] diff --git a/crates/rust-analyzer/src/target_spec.rs b/crates/rust-analyzer/src/target_spec.rs index 5565562f93f3..3dafd75bc19b 100644 --- a/crates/rust-analyzer/src/target_spec.rs +++ b/crates/rust-analyzer/src/target_spec.rs @@ -78,7 +78,24 @@ impl ProjectJsonTargetSpec { None } - RunnableKind::Test { .. } => None, + RunnableKind::Test { test_id, .. } => { + for runnable in &self.shell_runnables { + if matches!(runnable.kind, ShellRunnableKind::TestOne) { + let mut runnable = runnable.clone(); + + let replaced_args: Vec<_> = runnable + .args + .iter() + .map(|arg| arg.replace("$$TEST_NAME$$", &test_id.to_string())) + .collect(); + runnable.args = replaced_args; + + return Some(runnable); + } + } + + None + } RunnableKind::TestMod { .. } => None, RunnableKind::Bench { .. } => None, RunnableKind::DocTest { .. } => None,