refactor(cli): Pull out completion context creation

This commit is contained in:
Ed Page 2025-09-12 14:19:49 -05:00
parent 6d221efc4d
commit 09a472e32b

View File

@ -703,7 +703,9 @@ See '<bright-cyan,bold>cargo help</> <cyan><<command>></>' for more information
.into_iter() .into_iter()
.map(|t| clap_complete::CompletionCandidate::new(t)) .map(|t| clap_complete::CompletionCandidate::new(t))
.collect::<Vec<_>>(); .collect::<Vec<_>>();
candidates.extend(get_alias_candidates()); if let Ok(gctx) = new_gctx_for_completions() {
candidates.extend(get_alias_candidates(&gctx));
}
candidates candidates
})) }))
.subcommands(commands::builtin()) .subcommands(commands::builtin())
@ -726,33 +728,30 @@ fn get_toolchains_from_rustup() -> Vec<String> {
stdout.lines().map(|line| format!("+{}", line)).collect() stdout.lines().map(|line| format!("+{}", line)).collect()
} }
fn get_alias_candidates() -> Vec<clap_complete::CompletionCandidate> { fn get_alias_candidates(gctx: &GlobalContext) -> Vec<clap_complete::CompletionCandidate> {
if let Ok(gctx) = new_gctx_for_completions() { let alias_map = user_defined_aliases(gctx);
let alias_map = user_defined_aliases(&gctx); alias_map
return alias_map .iter()
.iter() .map(|(alias, cmd_info)| {
.map(|(alias, cmd_info)| { let help_text = match cmd_info {
let help_text = match cmd_info { CommandInfo::Alias { target } => {
CommandInfo::Alias { target } => { let cmd_str = target
let cmd_str = target .iter()
.iter() .map(String::as_str)
.map(String::as_str) .collect::<Vec<_>>()
.collect::<Vec<_>>() .join(" ");
.join(" "); format!("alias for {}", cmd_str)
format!("alias for {}", cmd_str) }
} CommandInfo::BuiltIn { .. } => {
CommandInfo::BuiltIn { .. } => { unreachable!("BuiltIn command shouldn't appear in alias map")
unreachable!("BuiltIn command shouldn't appear in alias map") }
} CommandInfo::External { .. } => {
CommandInfo::External { .. } => { unreachable!("External command shouldn't appear in alias map")
unreachable!("External command shouldn't appear in alias map") }
} };
}; clap_complete::CompletionCandidate::new(alias.clone()).help(Some(help_text.into()))
clap_complete::CompletionCandidate::new(alias.clone()).help(Some(help_text.into())) })
}) .collect()
.collect();
}
Vec::new()
} }
#[test] #[test]