php_parser_rs/parser/ast/
arguments.rs1use std::slice::Iter;
2
3use schemars::JsonSchema;
4use serde::Deserialize;
5use serde::Serialize;
6
7use crate::lexer::token::Span;
8use crate::node::Node;
9use crate::parser::ast::comments::CommentGroup;
10use crate::parser::ast::identifiers::SimpleIdentifier;
11use crate::parser::ast::Expression;
12
13#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
14pub struct PositionalArgument {
15 pub comments: CommentGroup,
16 pub ellipsis: Option<Span>, pub value: Expression, }
19
20impl Node for PositionalArgument {
21 fn children(&mut self) -> Vec<&mut dyn Node> {
22 vec![&mut self.value]
23 }
24}
25
26#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
27pub struct NamedArgument {
28 pub comments: CommentGroup,
29 pub name: SimpleIdentifier, pub colon: Span, pub ellipsis: Option<Span>, pub value: Expression, }
34
35impl Node for NamedArgument {
36 fn children(&mut self) -> Vec<&mut dyn Node> {
37 vec![&mut self.name, &mut self.value]
38 }
39}
40
41#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
42#[serde(tag = "type", content = "value")]
43pub enum Argument {
44 Positional(PositionalArgument),
45 Named(NamedArgument),
46}
47
48impl Node for Argument {
49 fn children(&mut self) -> Vec<&mut dyn Node> {
50 match self {
51 Argument::Positional(argument) => vec![argument],
52 Argument::Named(argument) => vec![argument],
53 }
54 }
55}
56
57#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
58
59pub struct ArgumentList {
60 pub comments: CommentGroup,
61 pub left_parenthesis: Span, pub arguments: Vec<Argument>, pub right_parenthesis: Span, }
65
66impl ArgumentList {
67 pub fn iter(&self) -> Iter<'_, Argument> {
68 self.arguments.iter()
69 }
70}
71
72impl IntoIterator for ArgumentList {
73 type Item = Argument;
74 type IntoIter = std::vec::IntoIter<Self::Item>;
75
76 fn into_iter(self) -> Self::IntoIter {
77 self.arguments.into_iter()
78 }
79}
80
81impl Node for ArgumentList {
82 fn children(&mut self) -> Vec<&mut dyn Node> {
83 self.arguments
84 .iter_mut()
85 .map(|a| a as &mut dyn Node)
86 .collect()
87 }
88}
89
90#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
91
92pub struct SingleArgument {
93 pub comments: CommentGroup,
94 pub left_parenthesis: Span, pub argument: Argument, pub right_parenthesis: Span, }
98
99impl Node for SingleArgument {
100 fn children(&mut self) -> Vec<&mut dyn Node> {
101 vec![&mut self.argument]
102 }
103}
104
105#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, JsonSchema)]
106
107pub struct ArgumentPlaceholder {
108 pub comments: CommentGroup,
109 pub left_parenthesis: Span, pub ellipsis: Span, pub right_parenthesis: Span, }