use std::error::Error; use crate::ast::*; pub trait ASTVisitor { fn visit(&mut self, ast: &mut AST) { self.block(&ast.statements); } fn block(&mut self, statements: &Vec) { for statement in statements { self.statement(statement); } } fn statement(&mut self, statement: &Statement) { use StatementKind::*; match statement.kind { Expression(ref expr) => self.expression(expr), Declaration(ref decl) => self.declaration(decl), Import(ref import_spec) => self.import(import_spec), } } fn expression(&mut self, expression: &Expression) { } fn declaration(&mut self, declaration: &Declaration) { } fn import(&mut self, import: &ImportSpecifier) { } }