From 93e010b345bca54974124ab248250d1824019935 Mon Sep 17 00:00:00 2001 From: KtorZ Date: Wed, 5 Jul 2023 13:57:34 +0200 Subject: [PATCH] Replace 'public' utils with a more generic 'optional_flag' The 'public' util was arguably not really adding much except a layer of indirection. In the end, one useful parsing behavior to abstract is the idea of 'optional flag' that we use for both 'pub' and 'opaque' keywords. --- .../src/parser/definition/constant.rs | 5 +- .../src/parser/definition/data_type.rs | 49 +++++++++---------- .../src/parser/definition/function.rs | 7 ++- .../src/parser/definition/type_alias.rs | 7 ++- crates/aiken-lang/src/parser/utils.rs | 4 +- 5 files changed, 34 insertions(+), 38 deletions(-) diff --git a/crates/aiken-lang/src/parser/definition/constant.rs b/crates/aiken-lang/src/parser/definition/constant.rs index 137111ae..093c9d69 100644 --- a/crates/aiken-lang/src/parser/definition/constant.rs +++ b/crates/aiken-lang/src/parser/definition/constant.rs @@ -6,8 +6,7 @@ use crate::{ }; pub fn parser() -> impl Parser { - utils::public() - .or_not() + utils::optional_flag(Token::Pub) .then_ignore(just(Token::Const)) .then(select! {Token::Name{name} => name}) .then( @@ -21,7 +20,7 @@ pub fn parser() -> impl Parser impl Parser impl Parser { - utils::public() - .or_not() + utils::optional_flag(Token::Pub) .then_ignore(just(Token::Fn)) .then(select! {Token::Name {name} => name}) .then( @@ -25,7 +24,7 @@ pub fn parser() -> impl Parser impl Parser impl Parser { - utils::public() - .or_not() + utils::optional_flag(Token::Pub) .then(utils::type_name_with_args()) .then_ignore(just(Token::Equal)) .then(annotation()) - .map_with_span(|((opt_pub, (alias, parameters)), annotation), span| { + .map_with_span(|((public, (alias, parameters)), annotation), span| { ast::UntypedDefinition::TypeAlias(ast::TypeAlias { alias, annotation, doc: None, location: span, parameters: parameters.unwrap_or_default(), - public: opt_pub.is_some(), + public, tipo: (), }) }) diff --git a/crates/aiken-lang/src/parser/utils.rs b/crates/aiken-lang/src/parser/utils.rs index 0ce3e404..60099769 100644 --- a/crates/aiken-lang/src/parser/utils.rs +++ b/crates/aiken-lang/src/parser/utils.rs @@ -7,8 +7,8 @@ use super::{ token::{Base, Token}, }; -pub fn public() -> impl Parser { - just(Token::Pub).ignored() +pub fn optional_flag(token: Token) -> impl Parser { + just(token).ignored().or_not().map(|v| v.is_some()) } pub fn bytearray(