Skip to content

Commit fcaf35d

Browse files
feat(completions): complete cargo clean -p with package names
1 parent 1c15404 commit fcaf35d

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

src/bin/cargo/commands/clean.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub fn cli() -> Command {
1616
.arg_silent_suggestion()
1717
.arg_package_spec_simple(
1818
"Package to clean artifacts for",
19-
ArgValueCandidates::new(Vec::new), // TODO(completions): implement dynamic completion for `cargo clean -p`
19+
ArgValueCandidates::new(get_pkg_name_candidates),
2020
)
2121
.arg_release("Whether or not to clean release artifacts")
2222
.arg_profile("Clean artifacts of the specified profile")

src/cargo/util/command_prelude.rs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use home::cargo_home_with_cwd;
2828
use indexmap::IndexSet;
2929
use itertools::Itertools;
3030
use semver::Version;
31-
use std::collections::{HashMap, HashSet};
31+
use std::collections::{BTreeMap, HashMap, HashSet};
3232
use std::ffi::{OsStr, OsString};
3333
use std::path::Path;
3434
use std::path::PathBuf;
@@ -1445,6 +1445,26 @@ pub fn get_pkg_id_spec_candidates() -> Vec<clap_complete::CompletionCandidate> {
14451445
candidates
14461446
}
14471447

1448+
pub fn get_pkg_name_candidates() -> Vec<clap_complete::CompletionCandidate> {
1449+
let packages: BTreeMap<_, _> = get_packages()
1450+
.unwrap_or_default()
1451+
.into_iter()
1452+
.map(|package| {
1453+
(
1454+
package.name(),
1455+
package.manifest().metadata().description.clone(),
1456+
)
1457+
})
1458+
.collect();
1459+
1460+
packages
1461+
.into_iter()
1462+
.map(|(name, description)| {
1463+
clap_complete::CompletionCandidate::new(name.as_str()).help(description.map(From::from))
1464+
})
1465+
.collect()
1466+
}
1467+
14481468
fn get_packages() -> CargoResult<Vec<Package>> {
14491469
let gctx = new_gctx_for_completions()?;
14501470

0 commit comments

Comments
 (0)