From 524d123332aea97440ff7b472baf47058ccc1eba Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 18 Feb 2025 12:44:13 -0600 Subject: [PATCH] fix(add): Focus on error, rather than large feature lists Inspired by #11100 and previous work to collapse feature lists down. --- src/cargo/ops/cargo_add/mod.rs | 64 +++++++++++-------- .../stderr.term.svg | 16 +---- .../stderr.term.svg | 56 ++-------------- 3 files changed, 43 insertions(+), 93 deletions(-) diff --git a/src/cargo/ops/cargo_add/mod.rs b/src/cargo/ops/cargo_add/mod.rs index a89788e5c..a88354a36 100644 --- a/src/cargo/ops/cargo_add/mod.rs +++ b/src/cargo/ops/cargo_add/mod.rs @@ -168,36 +168,44 @@ pub fn add(workspace: &Workspace<'_>, options: &AddOptions<'_>) -> CargoResult<( write!(message, "no features available for crate {}", dep.name)?; } else { if !deactivated.is_empty() { - writeln!( - message, - "disabled features:\n {}", - deactivated - .iter() - .map(|s| s.to_string()) - .coalesce(|x, y| if x.len() + y.len() < 78 { - Ok(format!("{x}, {y}")) - } else { - Err((x, y)) - }) - .into_iter() - .format("\n ") - )? + if deactivated.len() <= MAX_FEATURE_PRINTS { + writeln!( + message, + "disabled features:\n {}", + deactivated + .iter() + .map(|s| s.to_string()) + .coalesce(|x, y| if x.len() + y.len() < 78 { + Ok(format!("{x}, {y}")) + } else { + Err((x, y)) + }) + .into_iter() + .format("\n ") + )?; + } else { + writeln!(message, "{} disabled features available", deactivated.len())?; + } } if !activated.is_empty() { - writeln!( - message, - "enabled features:\n {}", - activated - .iter() - .map(|s| s.to_string()) - .coalesce(|x, y| if x.len() + y.len() < 78 { - Ok(format!("{x}, {y}")) - } else { - Err((x, y)) - }) - .into_iter() - .format("\n ") - )? + if deactivated.len() + activated.len() <= MAX_FEATURE_PRINTS { + writeln!( + message, + "enabled features:\n {}", + activated + .iter() + .map(|s| s.to_string()) + .coalesce(|x, y| if x.len() + y.len() < 78 { + Ok(format!("{x}, {y}")) + } else { + Err((x, y)) + }) + .into_iter() + .format("\n ") + )?; + } else { + writeln!(message, "{} enabled features available", activated.len())?; + } } } anyhow::bail!(message.trim().to_owned()); diff --git a/tests/testsuite/cargo_add/features_error_activated_over_limit/stderr.term.svg b/tests/testsuite/cargo_add/features_error_activated_over_limit/stderr.term.svg index 6042124bc..21b4d42f5 100644 --- a/tests/testsuite/cargo_add/features_error_activated_over_limit/stderr.term.svg +++ b/tests/testsuite/cargo_add/features_error_activated_over_limit/stderr.term.svg @@ -1,4 +1,4 @@ - +