support atoms with empty slot

This commit is contained in:
John Turner
2025-10-24 21:32:41 -04:00
parent 5967d69453
commit d75266f967
2 changed files with 9 additions and 2 deletions

View File

@@ -63,7 +63,7 @@ pub struct SlotName(#[get(method = "name")] String);
#[derive(Clone, Debug, PartialEq, Eq, Get)] #[derive(Clone, Debug, PartialEq, Eq, Get)]
pub struct Slot { pub struct Slot {
slot: SlotName, slot: Option<SlotName>,
sub: Option<SlotName>, sub: Option<SlotName>,
operator: Option<SlotOperator>, operator: Option<SlotOperator>,
} }

View File

@@ -112,7 +112,7 @@ pub fn slotname<'a>() -> impl Parser<&'a str, Output = SlotName> {
} }
pub fn slot<'a>() -> impl Parser<&'a str, Output = Slot> { pub fn slot<'a>() -> impl Parser<&'a str, Output = Slot> {
slotname() opt(slotname())
.and(opt(slotname().preceded_by(tag("/")))) .and(opt(slotname().preceded_by(tag("/"))))
.and(opt(slot_operator())) .and(opt(slot_operator()))
.map(|((slot, sub), operator)| Slot { .map(|((slot, sub), operator)| Slot {
@@ -273,4 +273,11 @@ mod test {
assert!(atom().check_finished(it).is_err()) assert!(atom().check_finished(it).is_err())
} }
#[test]
fn test_empty_slot() {
let it = InputIter::new("foo/bar-1.0.0:=");
atom().check_finished(it).unwrap();
}
} }