Skip to content

Commit ba494bc

Browse files
committed
feat: suggest similarly named features
1 parent e29810c commit ba494bc

File tree

6 files changed

+34
-26
lines changed

6 files changed

+34
-26
lines changed

src/cargo/ops/cargo_add/mod.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ use crate::core::Summary;
2929
use crate::core::Workspace;
3030
use crate::sources::source::QueryKind;
3131
use crate::util::cache_lock::CacheLockMode;
32+
use crate::util::edit_distance;
3233
use crate::util::style;
3334
use crate::util::toml::lookup_path_base;
3435
use crate::util::toml_mut::dependency::Dependency;
@@ -167,7 +168,20 @@ pub fn add(workspace: &Workspace<'_>, options: &AddOptions<'_>) -> CargoResult<(
167168
if activated.is_empty() && deactivated.is_empty() {
168169
write!(message, "\n\nno features available for crate {}", dep.name)?;
169170
} else {
170-
if !deactivated.is_empty() {
171+
let mut suggested = false;
172+
for unknown_feature in &unknown_features {
173+
let suggestion = edit_distance::closest_msg(
174+
unknown_feature,
175+
deactivated.iter().chain(activated.iter()),
176+
|dep| *dep,
177+
"feature",
178+
);
179+
if !suggestion.is_empty() {
180+
write!(message, "{suggestion}")?;
181+
suggested = true;
182+
}
183+
}
184+
if !deactivated.is_empty() && !suggested {
171185
if deactivated.len() <= MAX_FEATURE_PRINTS {
172186
write!(
173187
message,
@@ -191,7 +205,7 @@ pub fn add(workspace: &Workspace<'_>, options: &AddOptions<'_>) -> CargoResult<(
191205
)?;
192206
}
193207
}
194-
if !activated.is_empty() {
208+
if !activated.is_empty() && !suggested {
195209
if deactivated.len() + activated.len() <= MAX_FEATURE_PRINTS {
196210
writeln!(
197211
message,

tests/testsuite/cargo_add/feature_suggestion_multiple/stderr.term.svg

Lines changed: 6 additions & 4 deletions
Loading

tests/testsuite/cargo_add/feature_suggestion_single/stderr.term.svg

Lines changed: 3 additions & 5 deletions
Loading

tests/testsuite/cargo_add/features_error_activated_over_limit/stderr.term.svg

Lines changed: 4 additions & 8 deletions
Loading

tests/testsuite/cargo_add/features_error_deactivated_over_limit/stderr.term.svg

Lines changed: 2 additions & 2 deletions
Loading

tests/testsuite/cargo_add/features_unknown/stderr.term.svg

Lines changed: 3 additions & 5 deletions
Loading

0 commit comments

Comments
 (0)