From 6346ffc7716ad971eb9181ac3c6a0bfb047d630a Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Fri, 15 May 2026 22:06:09 +0200 Subject: [PATCH] Working error recovery --- mist-test/src/main.mist | 2 -- parser/src/lib.rs | 9 +++++++-- parser/src/parser/items/mod.rs | 7 +++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/mist-test/src/main.mist b/mist-test/src/main.mist index e0761f2..ad4d9d1 100644 --- a/mist-test/src/main.mist +++ b/mist-test/src/main.mist @@ -1,6 +1,4 @@ void main() { app_instance.boot(); app_instance.run(); - - hi } \ No newline at end of file diff --git a/parser/src/lib.rs b/parser/src/lib.rs index acc6f36..11ff32f 100644 --- a/parser/src/lib.rs +++ b/parser/src/lib.rs @@ -18,13 +18,18 @@ pub fn parse<'a>(source: &'a str) -> Result, ParseError<'a, Vec Ok(v), + Err(e) => Err(ParseError::Ast(e)), + } } #[macro_export] diff --git a/parser/src/parser/items/mod.rs b/parser/src/parser/items/mod.rs index bc5bf65..e8ea0f9 100644 --- a/parser/src/parser/items/mod.rs +++ b/parser/src/parser/items/mod.rs @@ -18,14 +18,13 @@ impl<'a> TryFrom> for TopLevel { fn try_from(pair: pest::iterators::Pair<'a, Rule>) -> Result { let mut inner = pair.into_inner(); - let attributes = collect_recovered(inner.next().unwrap().into_inner()).get()?; + let attributes = collect_recovered(inner.next().unwrap().into_inner()); - Ok(TopLevel( + ast_expr!(TopLevel( inner .next() .map(TopLevelKind::try_from) - .unwrap_or(Ok(TopLevelKind::ModAttribute)) - .get()?, + .unwrap_or(Ok(TopLevelKind::ModAttribute)), attributes, )) }