mago_syntax/ast/ast/
attribute.rs1use serde::Serialize;
2
3use mago_span::HasSpan;
4use mago_span::Span;
5
6use crate::ast::ast::argument::ArgumentList;
7use crate::ast::ast::identifier::Identifier;
8use crate::ast::sequence::TokenSeparatedSequence;
9
10#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, PartialOrd, Ord)]
14pub struct AttributeList<'arena> {
15 pub hash_left_bracket: Span,
16 pub attributes: TokenSeparatedSequence<'arena, Attribute<'arena>>,
17 pub right_bracket: Span,
18}
19
20#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, PartialOrd, Ord)]
24pub struct Attribute<'arena> {
25 pub name: Identifier<'arena>,
26 pub argument_list: Option<ArgumentList<'arena>>,
27}
28
29impl HasSpan for AttributeList<'_> {
30 fn span(&self) -> Span {
31 Span::between(self.hash_left_bracket, self.right_bracket)
32 }
33}
34
35impl HasSpan for Attribute<'_> {
36 fn span(&self) -> Span {
37 if let Some(arguments) = &self.argument_list {
38 Span::between(self.name.span(), arguments.span())
39 } else {
40 self.name.span()
41 }
42 }
43}