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) {
35 $(
36 self.$field.clear_comments();
37 )*
38 $($(
39 for token in self.$iter_field.iter_mut() {
40 token.clear_comments();
41 }
42 )*)?
43 $($(
44 for token in self.$iter_flatten_field.iter_mut().flatten() {
45 token.clear_comments();
46 }
47 )*)?
48 }
49
50 pub fn clear_whitespaces(&mut self) {
52 $(
53 self.$field.clear_whitespaces();
54 )*
55 $($(
56 for token in self.$iter_field.iter_mut() {
57 token.clear_whitespaces();
58 }
59 )*)?
60 $($(
61 for token in self.$iter_flatten_field.iter_mut().flatten() {
62 token.clear_whitespaces();
63 }
64 )*)?
65 }
66
67 pub(crate) fn replace_referenced_tokens(&mut self, code: &str) {
68 $(
69 self.$field.replace_referenced_tokens(code);
70 )*
71 $($(
72 for token in self.$iter_field.iter_mut() {
73 token.replace_referenced_tokens(code);
74 }
75 )*)?
76 $($(
77 for token in self.$iter_flatten_field.iter_mut().flatten() {
78 token.replace_referenced_tokens(code);
79 }
80 )*)?
81 }
82
83 pub(crate) fn shift_token_line(&mut self, amount: isize) {
84 $(
85 self.$field.shift_token_line(amount);
86 )*
87 $($(
88 for token in self.$iter_field.iter_mut() {
89 token.shift_token_line(amount);
90 }
91 )*)?
92 $($(
93 for token in self.$iter_flatten_field.iter_mut().flatten() {
94 token.shift_token_line(amount);
95 }
96 )*)?
97 }
98
99 pub(crate) fn filter_comments(&mut self, filter: impl Fn(&crate::nodes::Trivia) -> bool) {
100 $(
101 self.$field.filter_comments(&filter);
102 )*
103 $($(
104 for token in self.$iter_field.iter_mut() {
105 token.filter_comments(&filter);
106 }
107 )*)?
108 $($(
109 for token in self.$iter_flatten_field.iter_mut().flatten() {
110 token.filter_comments(&filter);
111 }
112 )*)?
113 }
114 };
115
116 (
117 iter = [$($field:ident),*]
118 iter_flatten = [$($flatten_field:ident),*]
119 ) => {
120 $crate::nodes::impl_token_fns!(
121 target = []
122 iter = [ $($field,)* ]
123 iter_flatten = [ $($flatten_field,)* ]
124 );
125 };
126
127 (
128 iter = [$($field:ident),*]
129 ) => {
130 $crate::nodes::impl_token_fns!(
131 target = []
132 iter = [ $($field,)* ]
133 iter_flatten = []
134 );
135 };
136
137 (
138 iter_flatten = [$($field:ident),*]
139 ) => {
140 $crate::nodes::impl_token_fns!(
141 target = []
142 iter = []
143 iter_flatten = [ $($field,)* ]
144 );
145 };
146}
147
148pub(crate) use impl_token_fns;