From 154ceab82325bc792de8e4a7898d16e3a84e31c7 Mon Sep 17 00:00:00 2001 From: Kennedy Tedesco Date: Mon, 23 Jan 2023 19:44:56 -0300 Subject: [PATCH] chore: make `generic_group()` returns an Option --- src/parser/internal/expression/generic.rs | 10 +++++++--- src/parser/internal/expression/mod.rs | 12 ++---------- src/parser/internal/expression/postfix.rs | 18 +++--------------- 3 files changed, 12 insertions(+), 28 deletions(-) diff --git a/src/parser/internal/expression/generic.rs b/src/parser/internal/expression/generic.rs index be98b07..cac4fa4 100644 --- a/src/parser/internal/expression/generic.rs +++ b/src/parser/internal/expression/generic.rs @@ -6,8 +6,12 @@ use crate::parser::state::State; use crate::tree::expression::generic::GenericGroupExpression; use crate::tree::utils::CommaSeparated; -pub fn generic_group(state: &mut State) -> ParseResult { - Ok(GenericGroupExpression { +pub fn generic_group(state: &mut State) -> ParseResult> { + if state.iterator.current().kind != TokenKind::Generic { + return Ok(None); + } + + Ok(Some(GenericGroupExpression { double_colon_less_than: utils::skip(state, TokenKind::Generic)?, types: { let mut inner = vec![]; @@ -45,5 +49,5 @@ pub fn generic_group(state: &mut State) -> ParseResult { utils::skip(state, TokenKind::GreaterThan)? } }, - }) + })) } diff --git a/src/parser/internal/expression/mod.rs b/src/parser/internal/expression/mod.rs index b0efe01..f03d39b 100644 --- a/src/parser/internal/expression/mod.rs +++ b/src/parser/internal/expression/mod.rs @@ -182,11 +182,7 @@ expressions! { Ok(Expression::FunctionalOperation(FunctionalOperationExpression::Expression { comments: state.iterator.comments(), dollar, - generics: if state.iterator.current().kind == TokenKind::Generic { - Some(generic::generic_group(state)?) - } else { - None - }, + generics: generic::generic_group(state)?, left_parenthesis: utils::skip_left_parenthesis(state)?, expression: Box::new(create(state)?), right_parenthesis: utils::skip_right_parenthesis(state)?, @@ -306,11 +302,7 @@ expressions! { identifier::fully_qualified_type_identifier_including_self(state)? ) }, - generics: if state.iterator.current().kind == TokenKind::Generic { - Some(generic::generic_group(state)?) - } else { - None - }, + generics: generic::generic_group(state)?, arguments: argument::argument_list_expression(state)? } )) diff --git a/src/parser/internal/expression/postfix.rs b/src/parser/internal/expression/postfix.rs index 11127d8..061085a 100644 --- a/src/parser/internal/expression/postfix.rs +++ b/src/parser/internal/expression/postfix.rs @@ -35,11 +35,7 @@ pub fn postfix(state: &mut State, left: Expression, kind: &TokenKind) -> ParseRe }) } TokenKind::Generic | TokenKind::LeftParen => { - let generics = if kind == &TokenKind::Generic { - Some(generic::generic_group(state)?) - } else { - None - }; + let generics = generic::generic_group(state)?; let comments = state.iterator.comments(); // `(...)` closure creation @@ -115,11 +111,7 @@ pub fn postfix(state: &mut State, left: Expression, kind: &TokenKind) -> ParseRe let current = state.iterator.current(); if current.kind == TokenKind::LeftParen || current.kind == TokenKind::Generic { - let generics = if current.kind == TokenKind::Generic { - Some(generic::generic_group(state)?) - } else { - None - }; + let generics = generic::generic_group(state)?; if state.iterator.lookahead(1).kind == TokenKind::Ellipsis && state.iterator.lookahead(2).kind == TokenKind::RightParen @@ -191,11 +183,7 @@ pub fn postfix(state: &mut State, left: Expression, kind: &TokenKind) -> ParseRe let current = state.iterator.current(); if current.kind == TokenKind::LeftParen || current.kind == TokenKind::Generic { - let generics = if current.kind == TokenKind::Generic { - Some(generic::generic_group(state)?) - } else { - None - }; + let generics = generic::generic_group(state)?; if kind == &TokenKind::QuestionArrow { let arguments = argument::argument_list_expression(state)?;