diff --git a/crates/languages/src/rust.rs b/crates/languages/src/rust.rs index f9d793105e380b495f0454070f7af7b18530d7d1..34ee43fb44546f6b273885e6af4db0086ab2db99 100644 --- a/crates/languages/src/rust.rs +++ b/crates/languages/src/rust.rs @@ -526,17 +526,25 @@ impl ContextProvider for RustContextProvider { cx: &App, ) -> Option { const DEFAULT_RUN_NAME_STR: &str = "RUST_DEFAULT_PACKAGE_RUN"; - let package_to_run = language_settings(Some("Rust".into()), file.as_ref(), cx) + const CUSTOM_TARGET_DIR: &str = "RUST_TARGET_DIR"; + + let language_sets = language_settings(Some("Rust".into()), file.as_ref(), cx); + let package_to_run = language_sets .tasks .variables .get(DEFAULT_RUN_NAME_STR) .cloned(); + let custom_target_dir = language_sets + .tasks + .variables + .get(CUSTOM_TARGET_DIR) + .cloned(); let run_task_args = if let Some(package_to_run) = package_to_run { vec!["run".into(), "-p".into(), package_to_run] } else { vec!["run".into()] }; - Some(TaskTemplates(vec![ + let mut task_templates = vec![ TaskTemplate { label: format!( "Check (package: {})", @@ -661,7 +669,25 @@ impl ContextProvider for RustContextProvider { cwd: Some("$ZED_DIRNAME".to_owned()), ..TaskTemplate::default() }, - ])) + ]; + + if let Some(custom_target_dir) = custom_target_dir { + task_templates = task_templates + .into_iter() + .map(|mut task_template| { + let mut args = task_template.args.split_off(1); + task_template.args.append(&mut vec![ + "--target-dir".to_string(), + custom_target_dir.clone(), + ]); + task_template.args.append(&mut args); + + task_template + }) + .collect(); + } + + Some(TaskTemplates(task_templates)) } }