version wildcard comes after the version expression

This commit is contained in:
2025-11-18 01:26:17 +00:00
parent d4fd6cd211
commit db02762ee1
2 changed files with 24 additions and 24 deletions

View File

@@ -7,7 +7,7 @@ use crate::{
atom::{
Atom, Blocker, Category, Cp, Cpv, Name, Slot, SlotName, SlotOperator, UseDep,
UseDepCondition, UseDepNegate, UseDepSign, Version, VersionNumber, VersionNumbers,
VersionOperator, VersionSuffix, VersionSuffixKind, VersionSuffixes,
VersionOperator, VersionSuffix, VersionSuffixKind, VersionSuffixes, Wildcard,
},
useflag::UseFlag,
};
@@ -72,9 +72,6 @@ impl<'a> Parseable<'a, &'a str> for VersionNumbers {
fn parser() -> Self::Parser {
VersionNumber::parser()
.followed_by(tag("*").opt())
.recognize()
.map(|output: &str| VersionNumber(output.to_string()))
.separated_by(tag("."))
.at_least(1)
.map(VersionNumbers)
@@ -307,33 +304,30 @@ impl<'a> Parseable<'a, &'a str> for Atom {
.and(Category::parser())
.and(Name::parser().preceded_by(tag("/")))
.and(Version::parser().preceded_by(tag("-")))
.and(tag("*").map(|_| Wildcard).opt())
.and(Slot::parser().preceded_by(tag(":")).opt())
.and(usedeps())
.verify_output(|(((((((_, version_operator), _), _), _), star), _), _)| {
matches!(
(version_operator, star),
(VersionOperator::Eq, Some(_) | None) | (_, None)
)
})
.map(
|((((((blocker, version_operator), category), name), version), slot), usedeps)| {
|(
((((((blocker, version_operator), category), name), version), star), slot),
usedeps,
)| {
Atom {
blocker,
category,
name,
version: Some((version_operator, version)),
version: Some((version_operator, version, star)),
slot,
usedeps: usedeps.unwrap_or(Vec::new()),
}
},
)
.verify_output(|atom| match &atom.version {
Some((VersionOperator::Eq, _)) => true,
Some((_, version))
if !version
.numbers()
.get()
.iter()
.any(|number| number.get().contains('*')) =>
{
true
}
_ => false,
});
);
with_version.or(without_version)
}
@@ -513,6 +507,7 @@ mod test {
let atoms = [
"media-libs/libsdl2[haptitick(+),sound(+)vd,eio(+)]",
"=kde-frameworks/kcodecs-6.19*86",
"=dev-ml/stdio-0.17*t:=[ocamlopt?]",
];
for atom in atoms {