allow slot to be only :* := :slot/sub= or :slot
This commit is contained in:
@@ -186,21 +186,17 @@ impl<'a> Parseable<'a, &'a str> for Slot {
|
||||
type Parser = impl Parser<&'a str, Output = Self>;
|
||||
|
||||
fn parser() -> Self::Parser {
|
||||
SlotName::parser()
|
||||
let wildcard = tag("*").map(|_| Slot::Wildcard);
|
||||
let equals = SlotName::parser()
|
||||
.opt()
|
||||
.and(SlotName::parser().preceded_by(tag("/")).opt())
|
||||
.and(SlotOperator::parser().opt())
|
||||
.map(|((primary, sub), operator)| Slot {
|
||||
primary,
|
||||
sub,
|
||||
operator,
|
||||
})
|
||||
.verify_output(|slot| {
|
||||
matches!(
|
||||
(&slot.primary(), &slot.operator()),
|
||||
(Some(_) | None, Some(_)) | (Some(_), None)
|
||||
)
|
||||
})
|
||||
.followed_by(tag("="))
|
||||
.map(|(primary, sub)| Slot::Equal { primary, sub });
|
||||
let name = SlotName::parser()
|
||||
.and(SlotName::parser().preceded_by(tag("/")).opt())
|
||||
.map(|(primary, sub)| Slot::Name { primary, sub });
|
||||
|
||||
wildcard.or(equals).or(name)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -556,6 +552,7 @@ mod test {
|
||||
"=dev-ml/stdio-0.17*t:=[ocamlopt?]",
|
||||
">=dev-libs/libgee-0-8.5:0..8=",
|
||||
"<dev-haskell/wai-3.3:=[]",
|
||||
">=kde-frameworks/kcrash-2.16.0:6*",
|
||||
];
|
||||
|
||||
for atom in atoms {
|
||||
|
||||
Reference in New Issue
Block a user