summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ebuild/parsers.rs30
1 files changed, 11 insertions, 19 deletions
diff --git a/src/ebuild/parsers.rs b/src/ebuild/parsers.rs
index 8ab2978..77eb494 100644
--- a/src/ebuild/parsers.rs
+++ b/src/ebuild/parsers.rs
@@ -114,34 +114,26 @@ where
fn parser() -> Self::Parser {
|it| {
- let all_of_group = Depend::parser()
- .separated_by(whitespace1())
- .at_least(1)
- .delimited_by(tag("(").followed_by(whitespace1()), tag(")"))
- .map(|exprs| Depend::AllOf(exprs));
+ let exprs = || {
+ Depend::parser()
+ .separated_by_with_trailing(whitespace1())
+ .at_least(1)
+ .delimited_by(tag("(").followed_by(whitespace1()), tag(")"))
+ };
- let any_of_group = Depend::parser()
- .separated_by(whitespace1())
- .at_least(1)
- .delimited_by(tag("(").followed_by(whitespace1()), tag(")"))
+ let all_of_group = exprs().map(|exprs| Depend::AllOf(exprs));
+
+ let any_of_group = exprs()
.preceded_by(tag("||").followed_by(whitespace1()))
.map(|exprs| Depend::AnyOf(exprs));
- let one_of_group = Depend::parser()
- .separated_by(whitespace1())
- .at_least(1)
- .delimited_by(tag("(").followed_by(whitespace1()), tag(")"))
+ let one_of_group = exprs()
.preceded_by(tag("^^").followed_by(whitespace1()))
.map(|exprs| Depend::OneOf(exprs));
let conditional_group = Conditional::parser()
.followed_by(whitespace1())
- .and(
- Depend::parser()
- .separated_by(whitespace1())
- .at_least(1)
- .delimited_by(tag("(").followed_by(whitespace1()), tag(")")),
- )
+ .and(exprs())
.map(|(conditional, exprs)| Depend::ConditionalGroup(conditional, exprs));
T::parser()