@samitouri / QOS-React-2 / commits / 203d5ad43b

[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,