summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Turner <jturner.usa@gmail.com>2025-11-17 19:01:39 +0000
committerJohn Turner <jturner.usa@gmail.com>2025-11-17 19:01:39 +0000
commit0cc3ac8e8478ecbf829cf8dbfe7dcd5d2c40da42 (patch)
treeda32d6aa44386939b92f82fdebf3dd2387b7646e
parent803f727082979544e6401fb52f528879490e517b (diff)
downloadgentoo-utils-0cc3ac8e8478ecbf829cf8dbfe7dcd5d2c40da42.tar.gz
verify that slot exprs have either a primary slot name or operator
-rw-r--r--src/atom/parsers.rs17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/atom/parsers.rs b/src/atom/parsers.rs
index 8da8203..c609a1c 100644
--- a/src/atom/parsers.rs
+++ b/src/atom/parsers.rs
@@ -185,6 +185,12 @@ impl<'a> Parseable<'a, &'a str> for Slot {
sub,
operator,
})
+ .verify_output(|slot| {
+ matches!(
+ (&slot.primary(), &slot.operator()),
+ (Some(_) | None, Some(_)) | (Some(_), None)
+ )
+ })
}
}
@@ -420,9 +426,9 @@ mod test {
#[test]
fn test_empty_slot() {
- let it = InputIter::new("foo/bar:=");
+ let it = InputIter::new("=dev-ml/uucp-17*:");
- Atom::parser().check_finished(it).unwrap();
+ assert!(Atom::parser().check_finished(it).is_err());
}
#[test]
@@ -494,4 +500,11 @@ mod test {
assert!(Cpv::parser().parse_finished(it).is_err());
}
+
+ #[test]
+ fn test_empty_slot_with_operator() {
+ let it = InputIter::new("foo/bar:=");
+
+ Atom::parser().check_finished(it).unwrap();
+ }
}