@@ -30,6 +30,32 @@ pub trait Visitor<'ast>: Sized {
30
30
walk_statement ( self , & statement)
31
31
}
32
32
33
+ fn visit_variable_declaration ( & mut self , decl : & ' ast VariableDeclaration ) {
34
+ walk_variable_declaration ( self , & decl)
35
+ }
36
+
37
+ fn visit_function_declaration ( & mut self , decl : & ' ast Function ) {
38
+ walk_function ( self , & decl)
39
+ }
40
+
41
+ fn visit_enum_declaration ( & mut self , decl : & ' ast EnumDeclaration ) {
42
+ walk_enum_declaration ( self , & decl)
43
+ }
44
+
45
+ fn visit_enum_variant ( & mut self , var : & ' ast EnumVariant ) {
46
+ walk_enum_variant ( self , & var)
47
+ }
48
+
49
+ fn visit_struct_declaration ( & mut self , decl : & ' ast StructDeclaration ) {
50
+ walk_struct_declaration ( self , & decl)
51
+ }
52
+
53
+ fn visit_struct_field ( & mut self , field : & ' ast StructField ) {
54
+ walk_struct_field ( self , & field)
55
+ }
56
+
57
+ fn visit_visibility_modifier ( & mut self , _: & ' ast VisibilityModifier ) { }
58
+
33
59
fn visit_expression ( & mut self , expression : & ' ast Expression ) {
34
60
walk_expression ( self , & expression)
35
61
}
@@ -87,7 +113,7 @@ pub trait Visitor<'ast>: Sized {
87
113
}
88
114
89
115
fn visit_table_construction_expression ( & mut self , expr : & ' ast ConstructionExpression ) {
90
- walk_table_construction_expression ( self , expr)
116
+ walk_construction_expression ( self , expr)
91
117
}
92
118
93
119
fn visit_struct_construction_expression ( & mut self , expr : & ' ast StructConstructionExpression ) {
@@ -141,14 +167,24 @@ pub fn walk_block<'ast, V: Visitor<'ast>>(visitor: &mut V, block: &'ast Block) {
141
167
142
168
pub fn walk_statement < ' ast , V : Visitor < ' ast > > ( visitor : & mut V , statement : & ' ast Statement ) {
143
169
match statement {
144
- Statement :: Empty ( _) => { } ,
145
- Statement :: Expression ( expr) => visit ! ( visitor. visit_expression( expr) ) ,
146
- _ => todo ! ( )
147
- // Statement::VariableDeclaration(Box<VariableDeclaration>),
148
- // Statement::FunctionDeclaration(Box<Function>),
149
- // Statement::EnumDeclaration(Box<EnumDeclaration>),
150
- // Statement::StructDeclaration(Box<StructDeclaration>),
151
- // Statement::ImplStatement(Box<ImplStatement>),
170
+ Statement :: Empty ( _) => { }
171
+ Statement :: Expression ( expr) => visit ! ( visitor. visit_expression( expr) ) ,
172
+ Statement :: VariableDeclaration ( decl) => visit ! ( visitor. visit_variable_declaration( decl) ) ,
173
+ Statement :: FunctionDeclaration ( func) => visit ! ( visitor. visit_function_declaration( func) ) ,
174
+ Statement :: EnumDeclaration ( decl) => visit ! ( visitor. visit_enum_declaration( decl) ) ,
175
+ // Statement::StructDeclaration(Box<StructDeclaration>),
176
+ // Statement::ImplStatement(Box<ImplStatement>),
177
+ _ => todo ! ( ) ,
178
+ }
179
+ }
180
+
181
+ pub fn walk_variable_declaration < ' ast , V : Visitor < ' ast > > (
182
+ visitor : & mut V ,
183
+ decl : & ' ast VariableDeclaration ,
184
+ ) {
185
+ visit ! ( visitor. visit_binding_pattern( & decl. binding) ) ;
186
+ if let Some ( decl) = & decl. expression {
187
+ visit ! ( visitor. visit_expression( decl) ) ;
152
188
}
153
189
}
154
190
@@ -221,6 +257,32 @@ pub fn walk_function_body<'ast, V: Visitor<'ast>>(visitor: &mut V, body: &'ast F
221
257
}
222
258
}
223
259
260
+ pub fn walk_enum_declaration < ' ast , V : Visitor < ' ast > > ( visitor : & mut V , decl : & ' ast EnumDeclaration ) {
261
+ visit ! ( visitor. visit_identifier( & decl. identifier) ) ;
262
+ visit_list ! ( visitor. visit_enum_variant( & decl. variants) ) ;
263
+ }
264
+
265
+ pub fn walk_enum_variant < ' ast , V : Visitor < ' ast > > ( visitor : & mut V , var : & ' ast EnumVariant ) {
266
+ visit ! ( visitor. visit_identifier( & var. identifier) ) ;
267
+ if let Some ( value) = & var. value {
268
+ visit ! ( visitor. visit_expression( value) ) ;
269
+ }
270
+ }
271
+
272
+ pub fn walk_struct_declaration < ' ast , V : Visitor < ' ast > > (
273
+ visitor : & mut V ,
274
+ decl : & ' ast StructDeclaration ,
275
+ ) {
276
+ visit ! ( visitor. visit_identifier( & decl. identifier) ) ;
277
+ visit_list ! ( visitor. visit_struct_field( & decl. fields) ) ;
278
+ }
279
+
280
+ pub fn walk_struct_field < ' ast , V : Visitor < ' ast > > ( visitor : & mut V , decl : & ' ast StructField ) {
281
+ visit ! ( visitor. visit_visibility_modifier( & decl. modifier) ) ;
282
+ visit ! ( visitor. visit_identifier( & decl. identifier) ) ;
283
+ visit ! ( visitor. visit_type_annotation( & decl. type_annotation) ) ;
284
+ }
285
+
224
286
pub fn walk_if < ' ast , V : Visitor < ' ast > > ( visitor : & mut V , r#if : & ' ast If ) {
225
287
visit ! ( visitor. visit_expression( & r#if. cond) ) ;
226
288
visit ! ( visitor. visit_block( & r#if. body) ) ;
@@ -259,13 +321,6 @@ pub fn walk_parenthesized_expression<'ast, V: Visitor<'ast>>(
259
321
visit ! ( visitor. visit_expression( & expr. expression) )
260
322
}
261
323
262
- pub fn walk_table_construction_expression < ' ast , V : Visitor < ' ast > > (
263
- visitor : & mut V ,
264
- expr : & ' ast ConstructionExpression ,
265
- ) {
266
- visit ! ( visitor. visit_construction_expression( & expr) ) ;
267
- }
268
-
269
324
pub fn walk_struct_construction_expression < ' ast , V : Visitor < ' ast > > (
270
325
visitor : & mut V ,
271
326
expr : & ' ast StructConstructionExpression ,
0 commit comments