diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ebuild/parsers.rs | 30 |
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() |
