mago_syntax/ast/ast/function_like/
arrow_function.rs1use serde::Serialize;
2
3use mago_span::HasSpan;
4use mago_span::Span;
5
6use crate::ast::ast::attribute::AttributeList;
7use crate::ast::ast::expression::Expression;
8use crate::ast::ast::function_like::parameter::FunctionLikeParameterList;
9use crate::ast::ast::function_like::r#return::FunctionLikeReturnTypeHint;
10use crate::ast::ast::keyword::Keyword;
11use crate::ast::sequence::Sequence;
12
13#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, PartialOrd, Ord)]
23pub struct ArrowFunction<'arena> {
24 pub attribute_lists: Sequence<'arena, AttributeList<'arena>>,
25 pub r#static: Option<Keyword<'arena>>,
26 pub r#fn: Keyword<'arena>,
27 pub ampersand: Option<Span>,
28 pub parameter_list: FunctionLikeParameterList<'arena>,
29 pub return_type_hint: Option<FunctionLikeReturnTypeHint<'arena>>,
30 pub arrow: Span,
31 pub expression: &'arena Expression<'arena>,
32}
33
34impl HasSpan for ArrowFunction<'_> {
35 fn span(&self) -> Span {
36 if let Some(attribute_list) = self.attribute_lists.first() {
37 return attribute_list.span().join(self.expression.span());
38 }
39
40 if let Some(r#static) = &self.r#static {
41 return r#static.span().join(self.expression.span());
42 }
43
44 self.r#fn.span().join(self.expression.span())
45 }
46}