summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Turner <jturner.usa@gmail.com>2025-10-24 21:36:06 -0400
committerJohn Turner <jturner.usa@gmail.com>2025-10-24 21:36:06 -0400
commitaa0d4edc57a9ac74a79f6f567e17ce583abb84de (patch)
tree11a7cc83baf6ae48fd2c33e2fd1a13662e3516db
parentd75266f9677121d2d92065204aaae400fecd3e2b (diff)
downloadgentoo-utils-aa0d4edc57a9ac74a79f6f567e17ce583abb84de.tar.gz
fix useflag parser
-rw-r--r--src/atom/parsers.rs7
-rw-r--r--src/useflag/parsers.rs11
2 files changed, 15 insertions, 3 deletions
diff --git a/src/atom/parsers.rs b/src/atom/parsers.rs
index 65cce04..f4686f2 100644
--- a/src/atom/parsers.rs
+++ b/src/atom/parsers.rs
@@ -280,4 +280,11 @@ mod test {
atom().check_finished(it).unwrap();
}
+
+ #[test]
+ fn test_usedep_with_underscore() {
+ let it = InputIter::new("foo/bar-1.0.0[use_dep]");
+
+ atom().check_finished(it).unwrap();
+ }
}
diff --git a/src/useflag/parsers.rs b/src/useflag/parsers.rs
index e6e228b..a430b3d 100644
--- a/src/useflag/parsers.rs
+++ b/src/useflag/parsers.rs
@@ -1,10 +1,15 @@
-use mon::{Parser, alpha1, alphanumeric, one_of, take_while};
+use mon::{Parser, r#if, take_while};
use crate::useflag::UseFlag;
pub fn useflag<'a>() -> impl Parser<&'a str, Output = UseFlag> {
- alpha1()
- .and(alphanumeric().or(take_while(one_of("+_@-".chars()))))
+ let start = r#if(|c: &char| c.is_ascii_alphanumeric());
+ let rest = take_while(r#if(|c: &char| {
+ c.is_ascii_alphanumeric() || "+_@-".contains(*c)
+ }));
+
+ start
+ .and(rest)
.recognize()
.map(|output: &str| UseFlag(output.to_string()))
}