diff --git a/src/bin/cargo/cli.rs b/src/bin/cargo/cli.rs index aba77bd96..7a16b5d48 100644 --- a/src/bin/cargo/cli.rs +++ b/src/bin/cargo/cli.rs @@ -11,6 +11,7 @@ use std::fmt::Write; use super::commands; use super::list_commands; +use super::third_party_subcommands; use super::user_defined_aliases; use crate::command_prelude::*; use crate::util::is_rustup; @@ -703,7 +704,9 @@ See 'cargo help <>' for more information .into_iter() .map(|t| clap_complete::CompletionCandidate::new(t)) .collect::>(); - candidates.extend(get_alias_candidates()); + if let Ok(gctx) = new_gctx_for_completions() { + candidates.extend(get_command_candidates(&gctx)); + } candidates })) .subcommands(commands::builtin()) @@ -726,33 +729,31 @@ fn get_toolchains_from_rustup() -> Vec { stdout.lines().map(|line| format!("+{}", line)).collect() } -fn get_alias_candidates() -> Vec { - if let Ok(gctx) = new_gctx_for_completions() { - let alias_map = user_defined_aliases(&gctx); - return alias_map - .iter() - .map(|(alias, cmd_info)| { - let help_text = match cmd_info { - CommandInfo::Alias { target } => { - let cmd_str = target - .iter() - .map(String::as_str) - .collect::>() - .join(" "); - format!("alias for {}", cmd_str) - } - CommandInfo::BuiltIn { .. } => { - unreachable!("BuiltIn command shouldn't appear in alias map") - } - CommandInfo::External { .. } => { - unreachable!("External command shouldn't appear in alias map") - } - }; - clap_complete::CompletionCandidate::new(alias.clone()).help(Some(help_text.into())) - }) - .collect(); - } - Vec::new() +fn get_command_candidates(gctx: &GlobalContext) -> Vec { + let mut commands = user_defined_aliases(gctx); + commands.extend(third_party_subcommands(gctx)); + commands + .iter() + .map(|(name, cmd_info)| { + let help_text = match cmd_info { + CommandInfo::Alias { target } => { + let cmd_str = target + .iter() + .map(String::as_str) + .collect::>() + .join(" "); + format!("alias for {}", cmd_str) + } + CommandInfo::BuiltIn { .. } => { + unreachable!("BuiltIn command shouldn't appear in alias map") + } + CommandInfo::External { path } => { + format!("from {}", path.display()) + } + }; + clap_complete::CompletionCandidate::new(name.clone()).help(Some(help_text.into())) + }) + .collect() } #[test]