cl_ast/ast_visitor/
visit.rs

1//! A [visitor](Visit) (implementer of the [Visit] trait) walks the immutable AST, mutating itself.
2
3use crate::ast::*;
4use cl_structures::span::Span;
5
6use super::walk::Walk;
7
8/// Immutably walks the entire AST
9///
10/// Each method acts as a customization point.
11pub trait Visit<'a>: Sized {
12    /// Visits a [Walker](Walk)
13    #[inline]
14    fn visit<W: Walk>(&mut self, walker: &'a W) -> &mut Self {
15        walker.visit_in(self);
16        self
17    }
18    /// Visits the children of a [Walker](Walk)
19    fn visit_children<W: Walk>(&mut self, walker: &'a W) {
20        walker.children(self)
21    }
22
23    fn visit_span(&mut self, value: &'a Span) {
24        value.children(self)
25    }
26    fn visit_mutability(&mut self, value: &'a Mutability) {
27        value.children(self)
28    }
29    fn visit_visibility(&mut self, value: &'a Visibility) {
30        value.children(self)
31    }
32    fn visit_sym(&mut self, value: &'a Sym) {
33        value.children(self)
34    }
35    fn visit_literal(&mut self, value: &'a Literal) {
36        value.children(self)
37    }
38    fn visit_bool(&mut self, value: &'a bool) {
39        value.children(self)
40    }
41    fn visit_char(&mut self, value: &'a char) {
42        value.children(self)
43    }
44    fn visit_int(&mut self, value: &'a u128) {
45        value.children(self)
46    }
47    fn visit_smuggled_float(&mut self, value: &'a u64) {
48        value.children(self)
49    }
50    fn visit_string(&mut self, value: &'a str) {
51        value.children(self)
52    }
53    fn visit_file(&mut self, value: &'a File) {
54        value.children(self)
55    }
56    fn visit_attrs(&mut self, value: &'a Attrs) {
57        value.children(self)
58    }
59    fn visit_meta(&mut self, value: &'a Meta) {
60        value.children(self)
61    }
62    fn visit_meta_kind(&mut self, value: &'a MetaKind) {
63        value.children(self)
64    }
65    fn visit_item(&mut self, value: &'a Item) {
66        value.children(self)
67    }
68    fn visit_item_kind(&mut self, value: &'a ItemKind) {
69        value.children(self)
70    }
71    fn visit_generics(&mut self, value: &'a Generics) {
72        value.children(self)
73    }
74    fn visit_alias(&mut self, value: &'a Alias) {
75        value.children(self)
76    }
77    fn visit_const(&mut self, value: &'a Const) {
78        value.children(self)
79    }
80    fn visit_static(&mut self, value: &'a Static) {
81        value.children(self)
82    }
83    fn visit_module(&mut self, value: &'a Module) {
84        value.children(self)
85    }
86    fn visit_function(&mut self, value: &'a Function) {
87        value.children(self)
88    }
89    fn visit_struct(&mut self, value: &'a Struct) {
90        value.children(self)
91    }
92    fn visit_struct_kind(&mut self, value: &'a StructKind) {
93        value.children(self)
94    }
95    fn visit_struct_member(&mut self, value: &'a StructMember) {
96        value.children(self)
97    }
98    fn visit_enum(&mut self, value: &'a Enum) {
99        value.children(self)
100    }
101    fn visit_variant(&mut self, value: &'a Variant) {
102        value.children(self)
103    }
104    fn visit_impl(&mut self, value: &'a Impl) {
105        value.children(self)
106    }
107    fn visit_impl_kind(&mut self, value: &'a ImplKind) {
108        value.children(self)
109    }
110    fn visit_use(&mut self, value: &'a Use) {
111        value.children(self)
112    }
113    fn visit_use_tree(&mut self, value: &'a UseTree) {
114        value.children(self)
115    }
116    fn visit_ty(&mut self, value: &'a Ty) {
117        value.children(self)
118    }
119    fn visit_ty_kind(&mut self, value: &'a TyKind) {
120        value.children(self)
121    }
122    fn visit_ty_array(&mut self, value: &'a TyArray) {
123        value.children(self)
124    }
125    fn visit_ty_slice(&mut self, value: &'a TySlice) {
126        value.children(self)
127    }
128    fn visit_ty_tuple(&mut self, value: &'a TyTuple) {
129        value.children(self)
130    }
131    fn visit_ty_ref(&mut self, value: &'a TyRef) {
132        value.children(self)
133    }
134    fn visit_ty_fn(&mut self, value: &'a TyFn) {
135        value.children(self)
136    }
137    fn visit_path(&mut self, value: &'a Path) {
138        value.children(self)
139    }
140    fn visit_path_part(&mut self, value: &'a PathPart) {
141        value.children(self)
142    }
143    fn visit_stmt(&mut self, value: &'a Stmt) {
144        value.children(self)
145    }
146    fn visit_stmt_kind(&mut self, value: &'a StmtKind) {
147        value.children(self)
148    }
149    fn visit_semi(&mut self, value: &'a Semi) {
150        value.children(self)
151    }
152    fn visit_expr(&mut self, value: &'a Expr) {
153        value.children(self)
154    }
155    fn visit_expr_kind(&mut self, value: &'a ExprKind) {
156        value.children(self)
157    }
158    fn visit_closure(&mut self, value: &'a Closure) {
159        value.children(self)
160    }
161    fn visit_quote(&mut self, value: &'a Quote) {
162        value.children(self)
163    }
164    fn visit_let(&mut self, value: &'a Let) {
165        value.children(self)
166    }
167
168    fn visit_pattern(&mut self, value: &'a Pattern) {
169        value.children(self)
170    }
171
172    fn visit_match(&mut self, value: &'a Match) {
173        value.children(self)
174    }
175
176    fn visit_match_arm(&mut self, value: &'a MatchArm) {
177        value.children(self)
178    }
179
180    fn visit_assign(&mut self, value: &'a Assign) {
181        value.children(self)
182    }
183    fn visit_modify(&mut self, value: &'a Modify) {
184        value.children(self)
185    }
186    fn visit_modify_kind(&mut self, value: &'a ModifyKind) {
187        value.children(self)
188    }
189    fn visit_binary(&mut self, value: &'a Binary) {
190        value.children(self)
191    }
192    fn visit_binary_kind(&mut self, value: &'a BinaryKind) {
193        value.children(self)
194    }
195    fn visit_unary(&mut self, value: &'a Unary) {
196        value.children(self)
197    }
198    fn visit_unary_kind(&mut self, value: &'a UnaryKind) {
199        value.children(self)
200    }
201
202    fn visit_cast(&mut self, value: &'a Cast) {
203        value.children(self)
204    }
205    fn visit_member(&mut self, value: &'a Member) {
206        value.children(self)
207    }
208    fn visit_member_kind(&mut self, value: &'a MemberKind) {
209        value.children(self)
210    }
211    fn visit_index(&mut self, value: &'a Index) {
212        value.children(self)
213    }
214    fn visit_structor(&mut self, value: &'a Structor) {
215        value.children(self)
216    }
217    fn visit_fielder(&mut self, value: &'a Fielder) {
218        value.children(self)
219    }
220    fn visit_array(&mut self, value: &'a Array) {
221        value.children(self)
222    }
223    fn visit_array_rep(&mut self, value: &'a ArrayRep) {
224        value.children(self)
225    }
226    fn visit_addrof(&mut self, value: &'a AddrOf) {
227        value.children(self)
228    }
229    fn visit_block(&mut self, value: &'a Block) {
230        value.children(self)
231    }
232    fn visit_group(&mut self, value: &'a Group) {
233        value.children(self)
234    }
235    fn visit_tuple(&mut self, value: &'a Tuple) {
236        value.children(self)
237    }
238    fn visit_while(&mut self, value: &'a While) {
239        value.children(self)
240    }
241    fn visit_if(&mut self, value: &'a If) {
242        value.children(self)
243    }
244    fn visit_for(&mut self, value: &'a For) {
245        value.children(self)
246    }
247    fn visit_else(&mut self, value: &'a Else) {
248        value.children(self)
249    }
250    fn visit_break(&mut self, value: &'a Break) {
251        value.children(self)
252    }
253    fn visit_return(&mut self, value: &'a Return) {
254        value.children(self)
255    }
256    fn visit_continue(&mut self) {}
257}