teo_parser/ast/
argument_list_declaration.rs1use crate::{declare_container_node, impl_container_node_defaults, node_children_iter, node_children_iter_fn};
2use crate::ast::argument_declaration::ArgumentDeclaration;
3use crate::ast::partial_argument_declaration::PartialArgumentDeclaration;
4use crate::format::Writer;
5use crate::traits::resolved::Resolve;
6use crate::traits::write::Write;
7
8declare_container_node!(ArgumentListDeclaration,
9 pub(crate) argument_declarations: Vec<usize>,
10 pub(crate) partial_argument_declarations: Vec<usize>,
11);
12
13impl_container_node_defaults!(ArgumentListDeclaration);
14
15node_children_iter!(
16 ArgumentListDeclaration,
17 ArgumentDeclaration,
18 ArgumentDeclarationsIter,
19 argument_declarations
20);
21
22node_children_iter!(
23 ArgumentListDeclaration,
24 PartialArgumentDeclaration,
25 PartialArgumentDeclarationsIter,
26 partial_argument_declarations
27);
28
29impl ArgumentListDeclaration {
30
31 node_children_iter_fn!(argument_declarations, ArgumentDeclarationsIter);
32
33 node_children_iter_fn!(partial_argument_declarations, PartialArgumentDeclarationsIter);
34
35 pub fn every_argument_is_optional(&self) -> bool {
36 for argument_declaration in self.argument_declarations() {
37 if !argument_declaration.type_expr().resolved().is_optional() {
38 return false
39 }
40 }
41 true
42 }
43
44 pub fn get(&self, name: &str) -> Option<&ArgumentDeclaration> {
45 self.argument_declarations().find(|d| d.name().name() == name)
46 }
47}
48
49impl Write for ArgumentListDeclaration {
50 fn write<'a>(&'a self, writer: &mut Writer<'a>) {
51 writer.write_children(self, self.children.values());
52 }
53}