ara_parser/tree/expression/
class.rs1use 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}