darklua_core/nodes/
mod.rs1mod arguments;
4mod block;
5mod expressions;
6mod function_body;
7mod function_call;
8mod identifier;
9mod statements;
10mod token;
11mod typed_identifier;
12mod types;
13mod variable;
14
15pub use arguments::*;
16pub use block::*;
17pub use expressions::*;
18pub use function_body::*;
19pub use function_call::*;
20pub use identifier::*;
21pub use statements::*;
22pub use token::*;
23pub use typed_identifier::*;
24pub use types::*;
25pub use variable::*;
26
27macro_rules! impl_token_fns {
28 (
29 target = [ $( $field:ident ),* $(,)? ]
30 $(iter = [ $( $iter_field:ident),* $(,)? ])?
31 $(iter_flatten = [ $( $iter_flatten_field:ident),* $(,)? ])?
32 ) => {
33 pub fn clear_comments(&mut self) {
34 $(
35 self.$field.clear_comments();
36 )*
37 $($(
38 for token in self.$iter_field.iter_mut() {
39 token.clear_comments();
40 }
41 )*)?
42 $($(
43 for token in self.$iter_flatten_field.iter_mut().flatten() {
44 token.clear_comments();
45 }
46 )*)?
47 }
48
49 pub fn clear_whitespaces(&mut self) {
50 $(
51 self.$field.clear_whitespaces();
52 )*
53 $($(
54 for token in self.$iter_field.iter_mut() {
55 token.clear_whitespaces();
56 }
57 )*)?
58 $($(
59 for token in self.$iter_flatten_field.iter_mut().flatten() {
60 token.clear_whitespaces();
61 }
62 )*)?
63 }
64
65 pub(crate) fn replace_referenced_tokens(&mut self, code: &str) {
66 $(
67 self.$field.replace_referenced_tokens(code);
68 )*
69 $($(
70 for token in self.$iter_field.iter_mut() {
71 token.replace_referenced_tokens(code);
72 }
73 )*)?
74 $($(
75 for token in self.$iter_flatten_field.iter_mut().flatten() {
76 token.replace_referenced_tokens(code);
77 }
78 )*)?
79 }
80
81 pub(crate) fn shift_token_line(&mut self, amount: usize) {
82 $(
83 self.$field.shift_token_line(amount);
84 )*
85 $($(
86 for token in self.$iter_field.iter_mut() {
87 token.shift_token_line(amount);
88 }
89 )*)?
90 $($(
91 for token in self.$iter_flatten_field.iter_mut().flatten() {
92 token.shift_token_line(amount);
93 }
94 )*)?
95 }
96
97 pub(crate) fn filter_comments(&mut self, filter: impl Fn(&crate::nodes::Trivia) -> bool) {
98 $(
99 self.$field.filter_comments(&filter);
100 )*
101 $($(
102 for token in self.$iter_field.iter_mut() {
103 token.filter_comments(&filter);
104 }
105 )*)?
106 $($(
107 for token in self.$iter_flatten_field.iter_mut().flatten() {
108 token.filter_comments(&filter);
109 }
110 )*)?
111 }
112 };
113
114 (
115 iter = [$($field:ident),*]
116 iter_flatten = [$($flatten_field:ident),*]
117 ) => {
118 $crate::nodes::impl_token_fns!(
119 target = []
120 iter = [ $($field,)* ]
121 iter_flatten = [ $($flatten_field,)* ]
122 );
123 };
124
125 (
126 iter = [$($field:ident),*]
127 ) => {
128 $crate::nodes::impl_token_fns!(
129 target = []
130 iter = [ $($field,)* ]
131 iter_flatten = []
132 );
133 };
134
135 (
136 iter_flatten = [$($field:ident),*]
137 ) => {
138 $crate::nodes::impl_token_fns!(
139 target = []
140 iter = []
141 iter_flatten = [ $($field,)* ]
142 );
143 };
144}
145
146pub(crate) use impl_token_fns;