From 9d08d4a494e6663721862f6a451d13d4cb8057ee Mon Sep 17 00:00:00 2001 From: shannmu Date: Tue, 13 Aug 2024 20:56:32 +0800 Subject: [PATCH] feat: Add custom completer for completing benchmark names --- src/cargo/util/command_prelude.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/cargo/util/command_prelude.rs b/src/cargo/util/command_prelude.rs index 8d86316a5f5..7538089b06a 100644 --- a/src/cargo/util/command_prelude.rs +++ b/src/cargo/util/command_prelude.rs @@ -163,7 +163,9 @@ pub trait CommandExt: Sized { ) ._arg(flag("benches", benches).help_heading(heading::TARGET_SELECTION)) ._arg( - optional_multi_opt("bench", "NAME", bench).help_heading(heading::TARGET_SELECTION), + optional_multi_opt("bench", "NAME", bench) + .help_heading(heading::TARGET_SELECTION) + .add(clap_complete::ArgValueCandidates::new(get_bench_candidates)), ) ._arg(flag("all-targets", all).help_heading(heading::TARGET_SELECTION)) } @@ -1046,6 +1048,17 @@ pub fn lockfile_path( return Ok(Some(path)); } +fn get_bench_candidates() -> Vec { + get_targets_from_metadata() + .unwrap_or_default() + .into_iter() + .filter_map(|target| match target.kind() { + TargetKind::Bench => Some(clap_complete::CompletionCandidate::new(target.name())), + _ => None, + }) + .collect::>() +} + fn get_test_candidates() -> Vec { get_targets_from_metadata() .unwrap_or_default()