From b0495707f3beb408af4eaf3de8bbb622acf52a72 Mon Sep 17 00:00:00 2001 From: LuuuX Date: Thu, 11 Jan 2024 17:23:14 +0800 Subject: [PATCH] Added QueryKind::Normalized, and used it in cargo-add --- crates/resolver-tests/src/lib.rs | 1 + src/cargo/ops/cargo_add/mod.rs | 4 ++-- src/cargo/sources/directory.rs | 1 + src/cargo/sources/path.rs | 1 + src/cargo/sources/registry/mod.rs | 1 + src/cargo/sources/source.rs | 3 +++ 6 files changed, 9 insertions(+), 2 deletions(-) diff --git a/crates/resolver-tests/src/lib.rs b/crates/resolver-tests/src/lib.rs index 00d64894ef56..155e652264aa 100644 --- a/crates/resolver-tests/src/lib.rs +++ b/crates/resolver-tests/src/lib.rs @@ -112,6 +112,7 @@ pub fn resolve_with_config_raw( let matched = match kind { QueryKind::Exact => dep.matches(summary), QueryKind::Fuzzy => true, + QueryKind::Normalized => true, }; if matched { self.used.insert(summary.package_id()); diff --git a/src/cargo/ops/cargo_add/mod.rs b/src/cargo/ops/cargo_add/mod.rs index 51ad938f3719..7500c17661ef 100644 --- a/src/cargo/ops/cargo_add/mod.rs +++ b/src/cargo/ops/cargo_add/mod.rs @@ -707,7 +707,7 @@ fn select_package( MaybeWorkspace::Other(query) => { let possibilities = loop { // Exact to avoid returning all for path/git - match registry.query_vec(&query, QueryKind::Exact) { + match registry.query_vec(&query, QueryKind::Normalized) { std::task::Poll::Ready(res) => { break res?; } @@ -934,7 +934,7 @@ fn populate_available_features( } let possibilities = loop { - match registry.query_vec(&query, QueryKind::Exact) { + match registry.query_vec(&query, QueryKind::Normalized) { std::task::Poll::Ready(res) => { break res?; } diff --git a/src/cargo/sources/directory.rs b/src/cargo/sources/directory.rs index 01c3c43302e9..12f1301003d3 100644 --- a/src/cargo/sources/directory.rs +++ b/src/cargo/sources/directory.rs @@ -109,6 +109,7 @@ impl<'cfg> Source for DirectorySource<'cfg> { let matches = packages.filter(|pkg| match kind { QueryKind::Exact => dep.matches(pkg.summary()), QueryKind::Fuzzy => true, + QueryKind::Normalized => dep.matches(pkg.summary()), }); for summary in matches.map(|pkg| pkg.summary().clone()) { f(IndexSummary::Candidate(summary)); diff --git a/src/cargo/sources/path.rs b/src/cargo/sources/path.rs index bbf6f056b16e..91f232cdc6f7 100644 --- a/src/cargo/sources/path.rs +++ b/src/cargo/sources/path.rs @@ -555,6 +555,7 @@ impl<'cfg> Source for PathSource<'cfg> { let matched = match kind { QueryKind::Exact => dep.matches(s), QueryKind::Fuzzy => true, + QueryKind::Normalized => dep.matches(s), }; if matched { f(IndexSummary::Candidate(s.clone())) diff --git a/src/cargo/sources/registry/mod.rs b/src/cargo/sources/registry/mod.rs index 487ca6333063..f18690ffa9ba 100644 --- a/src/cargo/sources/registry/mod.rs +++ b/src/cargo/sources/registry/mod.rs @@ -782,6 +782,7 @@ impl<'cfg> Source for RegistrySource<'cfg> { let matched = match kind { QueryKind::Exact => dep.matches(s.as_summary()), QueryKind::Fuzzy => true, + QueryKind::Normalized => true, }; // Next filter out all yanked packages. Some yanked packages may // leak through if they're in a whitelist (aka if they were diff --git a/src/cargo/sources/source.rs b/src/cargo/sources/source.rs index dd6619e59a75..016be1423e5b 100644 --- a/src/cargo/sources/source.rs +++ b/src/cargo/sources/source.rs @@ -180,6 +180,9 @@ pub enum QueryKind { /// whereas an `Registry` source may return dependencies that have the same /// canonicalization. Fuzzy, + /// Match a denpendency in all ways and will normalize the package name. + /// Each source defines what normalizing means. + Normalized, } /// A download status that represents if a [`Package`] has already been