From 45a1b403e05817f5c4f753b34dee405e685f508a Mon Sep 17 00:00:00 2001 From: Joscha Date: Sun, 19 Dec 2021 00:57:19 +0100 Subject: [PATCH] Fix range grammar not being anchored --- src/files/arguments.rs | 8 +++++--- src/files/grammar.pest | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/files/arguments.rs b/src/files/arguments.rs index 0878692..13cbf29 100644 --- a/src/files/arguments.rs +++ b/src/files/arguments.rs @@ -69,9 +69,11 @@ fn parse_range(p: Pair<'_, Rule>) -> Result { let mut p = p.into_inner(); let (start, start_delta) = parse_range_start(p.next().unwrap())?; - let (end, end_delta) = parse_range_end(p.next().unwrap())?; - - assert_eq!(p.next(), None); + let (end, end_delta) = match p.next() { + // For some reason, the EOI gets captured but the SOI doesn't. + Some(p) if p.as_rule() != Rule::EOI => parse_range_end(p)?, + _ => (None, None), + }; Ok(Range { start, diff --git a/src/files/grammar.pest b/src/files/grammar.pest index 227e32b..385ddb4 100644 --- a/src/files/grammar.pest +++ b/src/files/grammar.pest @@ -146,4 +146,4 @@ file = ${ SOI ~ (empty_line* ~ command)* ~ empty_line* ~ WHITESPACE* ~ EOI } today = { "today" } range_start = { (datum | today) ~ delta? } range_end = { (datum | today) ~ delta? | delta } -range = { range_start ~ ("--" ~ range_end)? } +range = { SOI ~ range_start ~ ("--" ~ range_end)? ~ EOI}