aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart-semver/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/mozart-semver/src')
-rw-r--r--crates/mozart-semver/src/lib.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/crates/mozart-semver/src/lib.rs b/crates/mozart-semver/src/lib.rs
index 5f6b5fe..0ceaf5a 100644
--- a/crates/mozart-semver/src/lib.rs
+++ b/crates/mozart-semver/src/lib.rs
@@ -846,7 +846,12 @@ fn parse_wildcard(s: &str) -> Result<VersionConstraint, String> {
// Strip trailing .*
let base = s.trim_end_matches(".*");
- if base.is_empty() {
+ // `*.*` (and `*.*.*` etc.) collapse to plain `*` after stripping every
+ // trailing `.*` segment — the major slot is itself a wildcard, so the
+ // whole constraint is unconstrained. Composer's `parseConstraint`
+ // reaches the same conclusion via its `xRange` step (any `x` anchor in
+ // a position after a `*` is dropped).
+ if base.is_empty() || base == "*" {
return Ok(VersionConstraint::Single(Constraint::Any));
}