Skip to content

Commit 08ed8de

Browse files
committed
fix(resolver): Suggest similar looking features
1 parent f616aaf commit 08ed8de

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

src/cargo/core/resolver/errors.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::task::Poll;
55
use crate::core::{Dependency, PackageId, Registry, Summary};
66
use crate::sources::source::QueryKind;
77
use crate::sources::IndexSummary;
8-
use crate::util::edit_distance::edit_distance;
8+
use crate::util::edit_distance::{closest, edit_distance};
99
use crate::util::errors::CargoResult;
1010
use crate::util::{GlobalContext, OptVersionReq, VersionExt};
1111
use anyhow::Error;
@@ -160,6 +160,14 @@ pub(super) fn activation_error(
160160
msg.push_str("` but `");
161161
msg.push_str(&*dep.package_name());
162162
msg.push_str("` does not have that feature.\n");
163+
let latest = candidates.last().expect("in the non-empty branch");
164+
if let Some(closest) = closest(feature, latest.features().keys(), |k| k) {
165+
msg.push_str(" package `");
166+
msg.push_str(&*dep.package_name());
167+
msg.push_str("` does have feature `");
168+
msg.push_str(closest);
169+
msg.push_str("`\n");
170+
}
163171
// p == parent so the full path is redundant.
164172
}
165173
ConflictReason::RequiredDependencyAsFeature(feature) => {

tests/testsuite/features.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ fn dependency_activates_typoed_feature() {
280280
versions that meet the requirements `*` are: 0.0.1
281281
282282
package `foo` depends on `bar` with feature `bar` but `bar` does not have that feature.
283+
package `bar` does have feature `baz`
283284
284285
285286
failed to select a version for `bar` which could resolve this conflict

0 commit comments

Comments
 (0)