From 45058212df23bff1854cd2f6fc4ec5fe2875b2bd Mon Sep 17 00:00:00 2001 From: motorailgun <28751910+motorailgun@users.noreply.github.com> Date: Fri, 13 Jun 2025 08:07:06 +0000 Subject: [PATCH] feat: always show features available for a dependency on `cargo add` --- src/cargo/ops/cargo_add/mod.rs | 19 +++++++-- .../stderr.term.svg | 20 ++++++---- .../feature_suggestion_none/stderr.term.svg | 16 +++++--- .../feature_suggestion_single/stderr.term.svg | 12 ++++-- .../stderr.term.svg | 20 ++++++---- .../stderr.term.svg | 20 ++++++---- .../features_unknown/stderr.term.svg | 20 +++++++--- .../unknown_inherited_feature/stderr.term.svg | 40 ++++++++++++++----- 8 files changed, 119 insertions(+), 48 deletions(-) diff --git a/src/cargo/ops/cargo_add/mod.rs b/src/cargo/ops/cargo_add/mod.rs index 6871f66f25a..c09416576fa 100644 --- a/src/cargo/ops/cargo_add/mod.rs +++ b/src/cargo/ops/cargo_add/mod.rs @@ -152,6 +152,8 @@ pub fn add(workspace: &Workspace<'_>, options: &AddOptions<'_>) -> CargoResult<( unknown_features.sort(); + print_dep_table_msg(&mut options.gctx.shell(), &dep, &unknown_features)?; + if !unknown_features.is_empty() { let (mut activated, mut deactivated) = dep.features(); // Since the unknown features have been added to the DependencyUI we need to remove @@ -233,8 +235,6 @@ pub fn add(workspace: &Workspace<'_>, options: &AddOptions<'_>) -> CargoResult<( anyhow::bail!(message.trim().to_owned()); } - print_dep_table_msg(&mut options.gctx.shell(), &dep)?; - manifest.insert_into_table( &dep_table, &dep, @@ -1130,7 +1130,11 @@ fn print_action_msg(shell: &mut Shell, dep: &DependencyUI, section: &[String]) - shell.status("Adding", message) } -fn print_dep_table_msg(shell: &mut Shell, dep: &DependencyUI) -> CargoResult<()> { +fn print_dep_table_msg( + shell: &mut Shell, + dep: &DependencyUI, + unknown_features: &Vec<&str>, +) -> CargoResult<()> { if matches!(shell.verbosity(), crate::core::shell::Verbosity::Quiet) { return Ok(()); } @@ -1140,6 +1144,15 @@ fn print_dep_table_msg(shell: &mut Shell, dep: &DependencyUI) -> CargoResult<()> let error = style::ERROR; let (activated, deactivated) = dep.features(); + let activated: Vec<&str> = activated + .into_iter() + .filter(|&feature_name| { + !unknown_features + .iter() + .any(|&unknown_feature| unknown_feature == feature_name) + }) + .collect(); + if !activated.is_empty() || !deactivated.is_empty() { let prefix = format!("{:>13}", " "); let suffix = format_features_version_suffix(&dep); diff --git a/tests/testsuite/cargo_add/feature_suggestion_multiple/stderr.term.svg b/tests/testsuite/cargo_add/feature_suggestion_multiple/stderr.term.svg index 94d4738d61b..7989d140b56 100644 --- a/tests/testsuite/cargo_add/feature_suggestion_multiple/stderr.term.svg +++ b/tests/testsuite/cargo_add/feature_suggestion_multiple/stderr.term.svg @@ -1,4 +1,4 @@ - +