[rust] ESTree cleanup
Joe Savona committed
Aug 1, 2023 at 13:55 UTC
203d5ad43bd9268a52c99aa0abd2b71f155b9695
2 files changed
+58
-18
compiler/forget/crates/forget_estree/src/visit.rs
+55
-15
@@ -1,10 +1,11 @@
1
use crate::{
2
- AssignmentPropertyOrRestElement, AssignmentTarget, Class, ClassItem, Declaration,
3
- DeclarationOrExpression, ExportAllDeclaration, ExportDefaultDeclaration,
4
- ExportNamedDeclaration, Expression, ExpressionOrPrivateIdentifier, ExpressionOrSpread,
5
- ExpressionOrSuper, ForInInit, ForInit, Function, FunctionBody, Identifier, ImportDeclaration,
6
- ImportDeclarationSpecifier, ImportOrExportDeclaration, Literal, MethodDefinition, ModuleItem,
7
- Pattern, Program, Statement, SwitchCase, VariableDeclarator, _Literal,
2
+ AssignmentPropertyOrRestElement, AssignmentTarget, Class, ClassItem, ClassPrivateProperty,
3
+ ClassProperty, Declaration, DeclarationOrExpression, ExportAllDeclaration,
4
+ ExportDefaultDeclaration, ExportNamedDeclaration, Expression, ExpressionOrPrivateIdentifier,
5
+ ExpressionOrSpread, ExpressionOrSuper, ForInInit, ForInit, Function, FunctionBody, Identifier,
6
+ ImportDeclaration, ImportDeclarationSpecifier, ImportOrExportDeclaration, Literal,
7
+ MethodDefinition, ModuleItem, Pattern, PrivateIdentifier, PrivateName, Program, Statement,
8
+ StaticBlock, Super, SwitchCase, VariableDeclarator, _Literal,
9
};
10
11
/// Trait for visiting an estree
@@ -271,18 +272,48 @@ pub trait Visitor<'ast> {
272
match item {
273
ClassItem::MethodDefinition(item) => self.visit_method_definition(class, item),
274
ClassItem::ClassProperty(item) => {
274
- todo!("visit ClassProperty")
275
+ self.visit_class_property(class, item);
276
}
277
ClassItem::ClassPrivateProperty(item) => {
277
- todo!("visit ClassPrivateProperty")
278
+ self.visit_class_private_property(class, item);
279
}
280
ClassItem::StaticBlock(item) => {
280
- todo!("visit StaticBlock")
281
+ self.visit_static_block(class, item);
282
}
283
}
284
}
285
}
286
287
+ fn visit_class_property(&mut self, _class: &'ast Class, property: &'ast ClassProperty) {
288
+ self.visit_expression(&property.key);
289
+ if let Some(value) = &property.value {
290
+ self.visit_expression(value)
291
+ }
292
+ }
293
+
294
+ fn visit_class_private_property(
295
+ &mut self,
296
+ _class: &'ast Class,
297
+ property: &'ast ClassPrivateProperty,
298
+ ) {
299
+ match &property.key {
300
+ ExpressionOrPrivateIdentifier::Expression(key) => self.visit_expression(key),
301
+ ExpressionOrPrivateIdentifier::PrivateIdentifier(key) => {
302
+ self.visit_private_identifier(key)
303
+ }
304
+ ExpressionOrPrivateIdentifier::PrivateName(key) => self.visit_private_name(key),
305
+ }
306
+ if let Some(value) = &property.value {
307
+ self.visit_expression(value)
308
+ }
309
+ }
310
+
311
+ fn visit_static_block(&mut self, _class: &'ast Class, property: &'ast StaticBlock) {
312
+ for stmt in &property.body {
313
+ self.visit_statement(stmt)
314
+ }
315
+ }
316
+
317
fn visit_method_definition(&mut self, class: &'ast Class, method: &'ast MethodDefinition) {
318
self.default_visit_method_definition(class, method);
319
}
@@ -412,9 +443,7 @@ pub trait Visitor<'ast> {
443
Expression::ArrowFunctionExpression(expr) => self.visit_function(&expr.function),
444
Expression::MemberExpression(expr) => {
445
match &expr.object {
415
- ExpressionOrSuper::Super(_object) => {
416
- // todo
417
- }
446
+ ExpressionOrSuper::Super(object) => self.visit_super(object),
447
ExpressionOrSuper::Expression(object) => self.visit_expression(object),
448
};
449
if !expr.is_computed {
@@ -423,10 +452,10 @@ pub trait Visitor<'ast> {
452
self.visit_expression(property)
453
}
454
ExpressionOrPrivateIdentifier::PrivateIdentifier(property) => {
426
- todo!("visit PrivateIdentifier property")
455
+ self.visit_private_identifier(property);
456
}
457
ExpressionOrPrivateIdentifier::PrivateName(property) => {
429
- todo!("visit PrivateName property")
458
+ self.visit_private_name(property);
459
}
460
}
461
}
@@ -437,8 +466,19 @@ pub trait Visitor<'ast> {
466
}
467
}
468
469
+ fn visit_super(&mut self, _super: &'ast Super) {
470
+ todo!("Implement visit_super")
471
+ }
472
+
473
+ fn visit_private_identifier(&mut self, _identifier: &'ast PrivateIdentifier) {
474
+ todo!("Implement visit_private_identifier()")
475
+ }
476
+
477
+ fn visit_private_name(&mut self, _identifier: &'ast PrivateName) {
478
+ todo!("Implement visit_private_name()")
479
+ }
480
+
481
fn visit_identifier(&mut self, _identifier: &'ast Identifier) {
441
- // nothing to do unless overridden
482
todo!("Implement visit_identifier()")
483
}
484
compiler/forget/crates/forget_hermes_parser/src/generated_extension.rs
+3
-3
@@ -2,9 +2,9 @@ use std::num::NonZeroU32;
2
3
use forget_estree::{
4
ArrowFunctionExpression, AssignmentProperty, Class, ClassBody, ClassDeclaration,
5
- ClassExpression, ClassPrivateProperty, Expression, ExpressionOrSpread, Function, FunctionBody,
6
- FunctionDeclaration, FunctionExpression, Identifier, Number, Pattern, SourceRange,
7
- TemplateElement, TemplateElementValue,
5
+ ClassExpression, Expression, ExpressionOrSpread, Function, FunctionBody, FunctionDeclaration,
6
+ FunctionExpression, Identifier, Number, Pattern, SourceRange, TemplateElement,
7
+ TemplateElementValue,
8
};
9
use hermes::parser::{
10
hermes_get_ArrowFunctionExpression_async, hermes_get_ArrowFunctionExpression_body,