mago_syntax/parser/internal/function_like/
arrow_function.rs1use 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}