diff options
| author | John Turner <jturner.usa@gmail.com> | 2025-11-14 22:25:20 +0000 |
|---|---|---|
| committer | John Turner <jturner.usa@gmail.com> | 2025-11-14 22:25:20 +0000 |
| commit | 61292f664608def91a03417893556ebd95424849 (patch) | |
| tree | 4898000f12c266f07861b5a061936c87fc28833d | |
| parent | 85853ada1e3c8ecfdffa72fad4fcf34860661f35 (diff) | |
| download | gentoo-utils-61292f664608def91a03417893556ebd95424849.tar.gz | |
bump mon and use SeparatedByWithTrailing combinator where needed
The new version of mon fixed the SeparatedBy combinator to not allow
trailing delimiters. This broke the Depend expr parser, because the
exprs are padded with whitespace. Using the new
SeparatedByWithTrailing combinator fixes this issue.
| -rw-r--r-- | Cargo.lock | 2 | ||||
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/ebuild/parsers.rs | 30 |
3 files changed, 13 insertions, 21 deletions
@@ -40,7 +40,7 @@ dependencies = [ [[package]] name = "mon" version = "0.1.0" -source = "git+https://jturnerusa.dev/cgit/mon/?rev=5b7d7eec545864727d33bb59503f0349cf02b337#5b7d7eec545864727d33bb59503f0349cf02b337" +source = "git+https://jturnerusa.dev/cgit/mon/?rev=34d8eeb989012b0f20041b11a60ced24ca702527#34d8eeb989012b0f20041b11a60ced24ca702527" [[package]] name = "proc-macro2" @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2024" [dependencies] -mon = { git = "https://jturnerusa.dev/cgit/mon/", rev = "5b7d7eec545864727d33bb59503f0349cf02b337" } +mon = { git = "https://jturnerusa.dev/cgit/mon/", rev = "34d8eeb989012b0f20041b11a60ced24ca702527" } get = { git = "https://jturnerusa.dev/cgit/get/", rev = "cd5f75b65777a855ab010c3137304ac05f2e56b8" } itertools = "0.14.0" thiserror = "2.0.17" 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() |
