Parse module function

This commit is contained in:
2026-06-13 18:43:42 +02:00
parent 3196b2b652
commit 5d3e393d5a
2 changed files with 28 additions and 0 deletions
+24
View File
@@ -56,6 +56,30 @@ pub fn parse<'a>(
}
}
pub fn parse_module<'a>(
source: &'a str,
) -> Result<Option<(Visibility, Identifier)>, 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) => {