From 5d3e393d5a7db4c46a8db8b23065ffa0bca0c0ef Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sat, 13 Jun 2026 18:43:42 +0200 Subject: [PATCH] Parse module function --- crates/parser/src/grammar.pest | 4 ++++ crates/parser/src/lib.rs | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/crates/parser/src/grammar.pest b/crates/parser/src/grammar.pest index a486537..b7ead11 100644 --- a/crates/parser/src/grammar.pest +++ b/crates/parser/src/grammar.pest @@ -72,6 +72,10 @@ program = { SOI ~ top_level* ~ EOI } +module_program = { + SOI ~ declare_module? +} + // ====================================================== // MODIFIERS // ====================================================== diff --git a/crates/parser/src/lib.rs b/crates/parser/src/lib.rs index 77e6bde..b7aaad7 100644 --- a/crates/parser/src/lib.rs +++ b/crates/parser/src/lib.rs @@ -56,6 +56,30 @@ pub fn parse<'a>( } } +pub fn parse_module<'a>( + source: &'a str, +) -> Result, ParseError<'a, Option<(Visibility, Identifier)>>> { + let mut pairs = MistParser::parse(Rule::module_program, source)?; + + if let Some(v) = pairs + .next() + .unwrap() + .into_inner() + .next() + .map(TopLevel::try_from) + .transpose() + .get()? + { + if let TopLevelKind::DeclareModule(vis, name) = &v.0.item { + Ok(Some((vis.clone(), name.clone()))) + } else { + Ok(None) + } + } else { + Ok(None) + } +} + #[macro_export] macro_rules! ast_ensure { ($pair:expr, $rule:expr $(, $rules:expr)* => $body:block) => {