Skip to main content

mago_syntax/parser/internal/function_like/
arrow_function.rs

1use crate::T;
2use crate::ast::ast::ArrowFunction;
3use crate::ast::ast::AttributeList;
4use crate::ast::sequence::Sequence;
5use crate::error::ParseError;
6use crate::parser::Parser;
7
8impl<'input, 'arena> Parser<'input, 'arena> {
9    pub(crate) fn parse_arrow_function_with_attributes(
10        &mut self,
11        attributes: Sequence<'arena, AttributeList<'arena>>,
12    ) -> Result<ArrowFunction<'arena>, ParseError> {
13        Ok(ArrowFunction {
14            attribute_lists: attributes,
15            r#static: self.maybe_expect_keyword(T!["static"])?,
16            r#fn: self.expect_keyword(T!["fn"])?,
17            ampersand: if self.stream.is_at(T!["&"])? { Some(self.stream.eat_span(T!["&"])?) } else { None },
18            parameter_list: self.parse_function_like_parameter_list()?,
19            return_type_hint: self.parse_optional_function_like_return_type_hint()?,
20            arrow: self.stream.eat_span(T!["=>"])?,
21            expression: self.arena.alloc(self.parse_expression()?),
22        })
23    }
24}