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