ara_parser/tree/expression/
class.rs

1use bincode::Decode;
2use bincode::Encode;
3use schemars::JsonSchema;
4use serde::Deserialize;
5use serde::Serialize;
6
7use crate::tree::comment::CommentGroup;
8use crate::tree::definition::attribute::AttributeGroupDefinition;
9use crate::tree::definition::class::ClassDefinitionBody;
10use crate::tree::definition::class::ClassDefinitionExtends;
11use crate::tree::definition::class::ClassDefinitionImplements;
12use crate::tree::expression::argument::ArgumentListExpression;
13use crate::tree::token::Keyword;
14use crate::tree::Node;
15
16#[derive(Debug, PartialEq, Eq, Clone, Hash, Deserialize, Serialize, Encode, Decode, JsonSchema)]
17#[serde(rename_all = "snake_case")]
18pub struct AnonymousClassExpression {
19    pub comments: CommentGroup,
20    pub attributes: Vec<AttributeGroupDefinition>,
21    pub class: Keyword,
22    pub arguments: ArgumentListExpression,
23    pub extends: Option<ClassDefinitionExtends>,
24    pub implements: Option<ClassDefinitionImplements>,
25    pub body: ClassDefinitionBody,
26}
27
28impl Node for AnonymousClassExpression {
29    fn comments(&self) -> Option<&CommentGroup> {
30        Some(&self.comments)
31    }
32
33    fn initial_position(&self) -> usize {
34        self.class.initial_position()
35    }
36
37    fn final_position(&self) -> usize {
38        self.body.final_position()
39    }
40
41    fn children(&self) -> Vec<&dyn Node> {
42        let mut children: Vec<&dyn Node> = vec![&self.class];
43
44        for attribute in &self.attributes {
45            children.push(attribute);
46        }
47
48        children.push(&self.arguments);
49
50        if let Some(extends) = &self.extends {
51            children.push(extends);
52        }
53
54        if let Some(implements) = &self.implements {
55            children.push(implements);
56        }
57
58        children.push(&self.body);
59
60        children
61    }
62
63    fn get_description(&self) -> String {
64        "anonymous class expression".to_string()
65    }
66}