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