use crate::nodes::*;
use crate::traverse::visitor::{Item, Visit, Visitor};
use crate::Node;
pub trait Observer {
#[allow(unused_variables)]
fn on_alias(&mut self, node: &Alias) {}
#[allow(unused_variables)]
fn on_and(&mut self, node: &And) {}
#[allow(unused_variables)]
fn on_and_asgn(&mut self, node: &AndAsgn) {}
#[allow(unused_variables)]
fn on_arg(&mut self, node: &Arg) {}
#[allow(unused_variables)]
fn on_args(&mut self, node: &Args) {}
#[allow(unused_variables)]
fn on_array(&mut self, node: &Array) {}
#[allow(unused_variables)]
fn on_array_pattern(&mut self, node: &ArrayPattern) {}
#[allow(unused_variables)]
fn on_array_pattern_with_tail(&mut self, node: &ArrayPatternWithTail) {}
#[allow(unused_variables)]
fn on_back_ref(&mut self, node: &BackRef) {}
#[allow(unused_variables)]
fn on_begin(&mut self, node: &Begin) {}
#[allow(unused_variables)]
fn on_block(&mut self, node: &Block) {}
#[allow(unused_variables)]
fn on_blockarg(&mut self, node: &Blockarg) {}
#[allow(unused_variables)]
fn on_block_pass(&mut self, node: &BlockPass) {}
#[allow(unused_variables)]
fn on_break(&mut self, node: &Break) {}
#[allow(unused_variables)]
fn on_case(&mut self, node: &Case) {}
#[allow(unused_variables)]
fn on_case_match(&mut self, node: &CaseMatch) {}
#[allow(unused_variables)]
fn on_casgn(&mut self, node: &Casgn) {}
#[allow(unused_variables)]
fn on_cbase(&mut self, node: &Cbase) {}
#[allow(unused_variables)]
fn on_class(&mut self, node: &Class) {}
#[allow(unused_variables)]
fn on_complex(&mut self, node: &Complex) {}
#[allow(unused_variables)]
fn on_const(&mut self, node: &Const) {}
#[allow(unused_variables)]
fn on_const_pattern(&mut self, node: &ConstPattern) {}
#[allow(unused_variables)]
fn on_c_send(&mut self, node: &CSend) {}
#[allow(unused_variables)]
fn on_cvar(&mut self, node: &Cvar) {}
#[allow(unused_variables)]
fn on_cvasgn(&mut self, node: &Cvasgn) {}
#[allow(unused_variables)]
fn on_def(&mut self, node: &Def) {}
#[allow(unused_variables)]
fn on_defined(&mut self, node: &Defined) {}
#[allow(unused_variables)]
fn on_defs(&mut self, node: &Defs) {}
#[allow(unused_variables)]
fn on_dstr(&mut self, node: &Dstr) {}
#[allow(unused_variables)]
fn on_dsym(&mut self, node: &Dsym) {}
#[allow(unused_variables)]
fn on_e_flip_flop(&mut self, node: &EFlipFlop) {}
#[allow(unused_variables)]
fn on_empty_else(&mut self, node: &EmptyElse) {}
#[allow(unused_variables)]
fn on_encoding(&mut self, node: &Encoding) {}
#[allow(unused_variables)]
fn on_ensure(&mut self, node: &Ensure) {}
#[allow(unused_variables)]
fn on_erange(&mut self, node: &Erange) {}
#[allow(unused_variables)]
fn on_false(&mut self, node: &False) {}
#[allow(unused_variables)]
fn on_file(&mut self, node: &File) {}
#[allow(unused_variables)]
fn on_find_pattern(&mut self, node: &FindPattern) {}
#[allow(unused_variables)]
fn on_float(&mut self, node: &Float) {}
#[allow(unused_variables)]
fn on_for(&mut self, node: &For) {}
#[allow(unused_variables)]
fn on_forward_arg(&mut self, node: &ForwardArg) {}
#[allow(unused_variables)]
fn on_forwarded_args(&mut self, node: &ForwardedArgs) {}
#[allow(unused_variables)]
fn on_gvar(&mut self, node: &Gvar) {}
#[allow(unused_variables)]
fn on_gvasgn(&mut self, node: &Gvasgn) {}
#[allow(unused_variables)]
fn on_hash(&mut self, node: &Hash) {}
#[allow(unused_variables)]
fn on_hash_pattern(&mut self, node: &HashPattern) {}
#[allow(unused_variables)]
fn on_heredoc(&mut self, node: &Heredoc) {}
#[allow(unused_variables)]
fn on_if(&mut self, node: &If) {}
#[allow(unused_variables)]
fn on_if_guard(&mut self, node: &IfGuard) {}
#[allow(unused_variables)]
fn on_i_flip_flop(&mut self, node: &IFlipFlop) {}
#[allow(unused_variables)]
fn on_if_mod(&mut self, node: &IfMod) {}
#[allow(unused_variables)]
fn on_if_ternary(&mut self, node: &IfTernary) {}
#[allow(unused_variables)]
fn on_index(&mut self, node: &Index) {}
#[allow(unused_variables)]
fn on_index_asgn(&mut self, node: &IndexAsgn) {}
#[allow(unused_variables)]
fn on_in_pattern(&mut self, node: &InPattern) {}
#[allow(unused_variables)]
fn on_int(&mut self, node: &Int) {}
#[allow(unused_variables)]
fn on_irange(&mut self, node: &Irange) {}
#[allow(unused_variables)]
fn on_ivar(&mut self, node: &Ivar) {}
#[allow(unused_variables)]
fn on_ivasgn(&mut self, node: &Ivasgn) {}
#[allow(unused_variables)]
fn on_kwarg(&mut self, node: &Kwarg) {}
#[allow(unused_variables)]
fn on_kwargs(&mut self, node: &Kwargs) {}
#[allow(unused_variables)]
fn on_kw_begin(&mut self, node: &KwBegin) {}
#[allow(unused_variables)]
fn on_kwnilarg(&mut self, node: &Kwnilarg) {}
#[allow(unused_variables)]
fn on_kwoptarg(&mut self, node: &Kwoptarg) {}
#[allow(unused_variables)]
fn on_kwrestarg(&mut self, node: &Kwrestarg) {}
#[allow(unused_variables)]
fn on_kwsplat(&mut self, node: &Kwsplat) {}
#[allow(unused_variables)]
fn on_lambda(&mut self, node: &Lambda) {}
#[allow(unused_variables)]
fn on_line(&mut self, node: &Line) {}
#[allow(unused_variables)]
fn on_lvar(&mut self, node: &Lvar) {}
#[allow(unused_variables)]
fn on_lvasgn(&mut self, node: &Lvasgn) {}
#[allow(unused_variables)]
fn on_masgn(&mut self, node: &Masgn) {}
#[allow(unused_variables)]
fn on_match_alt(&mut self, node: &MatchAlt) {}
#[allow(unused_variables)]
fn on_match_as(&mut self, node: &MatchAs) {}
#[allow(unused_variables)]
fn on_match_current_line(&mut self, node: &MatchCurrentLine) {}
#[allow(unused_variables)]
fn on_match_nil_pattern(&mut self, node: &MatchNilPattern) {}
#[allow(unused_variables)]
fn on_match_pattern(&mut self, node: &MatchPattern) {}
#[allow(unused_variables)]
fn on_match_pattern_p(&mut self, node: &MatchPatternP) {}
#[allow(unused_variables)]
fn on_match_rest(&mut self, node: &MatchRest) {}
#[allow(unused_variables)]
fn on_match_var(&mut self, node: &MatchVar) {}
#[allow(unused_variables)]
fn on_match_with_lvasgn(&mut self, node: &MatchWithLvasgn) {}
#[allow(unused_variables)]
fn on_mlhs(&mut self, node: &Mlhs) {}
#[allow(unused_variables)]
fn on_module(&mut self, node: &Module) {}
#[allow(unused_variables)]
fn on_next(&mut self, node: &Next) {}
#[allow(unused_variables)]
fn on_nil(&mut self, node: &Nil) {}
#[allow(unused_variables)]
fn on_nth_ref(&mut self, node: &NthRef) {}
#[allow(unused_variables)]
fn on_numblock(&mut self, node: &Numblock) {}
#[allow(unused_variables)]
fn on_op_asgn(&mut self, node: &OpAsgn) {}
#[allow(unused_variables)]
fn on_optarg(&mut self, node: &Optarg) {}
#[allow(unused_variables)]
fn on_or(&mut self, node: &Or) {}
#[allow(unused_variables)]
fn on_or_asgn(&mut self, node: &OrAsgn) {}
#[allow(unused_variables)]
fn on_pair(&mut self, node: &Pair) {}
#[allow(unused_variables)]
fn on_pin(&mut self, node: &Pin) {}
#[allow(unused_variables)]
fn on_postexe(&mut self, node: &Postexe) {}
#[allow(unused_variables)]
fn on_preexe(&mut self, node: &Preexe) {}
#[allow(unused_variables)]
fn on_procarg0(&mut self, node: &Procarg0) {}
#[allow(unused_variables)]
fn on_rational(&mut self, node: &Rational) {}
#[allow(unused_variables)]
fn on_redo(&mut self, node: &Redo) {}
#[allow(unused_variables)]
fn on_regexp(&mut self, node: &Regexp) {}
#[allow(unused_variables)]
fn on_reg_opt(&mut self, node: &RegOpt) {}
#[allow(unused_variables)]
fn on_rescue(&mut self, node: &Rescue) {}
#[allow(unused_variables)]
fn on_rescue_body(&mut self, node: &RescueBody) {}
#[allow(unused_variables)]
fn on_restarg(&mut self, node: &Restarg) {}
#[allow(unused_variables)]
fn on_retry(&mut self, node: &Retry) {}
#[allow(unused_variables)]
fn on_return(&mut self, node: &Return) {}
#[allow(unused_variables)]
fn on_s_class(&mut self, node: &SClass) {}
#[allow(unused_variables)]
fn on_self_(&mut self, node: &Self_) {}
#[allow(unused_variables)]
fn on_send(&mut self, node: &Send) {}
#[allow(unused_variables)]
fn on_shadowarg(&mut self, node: &Shadowarg) {}
#[allow(unused_variables)]
fn on_splat(&mut self, node: &Splat) {}
#[allow(unused_variables)]
fn on_str(&mut self, node: &Str) {}
#[allow(unused_variables)]
fn on_super(&mut self, node: &Super) {}
#[allow(unused_variables)]
fn on_sym(&mut self, node: &Sym) {}
#[allow(unused_variables)]
fn on_true(&mut self, node: &True) {}
#[allow(unused_variables)]
fn on_undef(&mut self, node: &Undef) {}
#[allow(unused_variables)]
fn on_unless_guard(&mut self, node: &UnlessGuard) {}
#[allow(unused_variables)]
fn on_until(&mut self, node: &Until) {}
#[allow(unused_variables)]
fn on_until_post(&mut self, node: &UntilPost) {}
#[allow(unused_variables)]
fn on_when(&mut self, node: &When) {}
#[allow(unused_variables)]
fn on_while(&mut self, node: &While) {}
#[allow(unused_variables)]
fn on_while_post(&mut self, node: &WhilePost) {}
#[allow(unused_variables)]
fn on_x_heredoc(&mut self, node: &XHeredoc) {}
#[allow(unused_variables)]
fn on_xstr(&mut self, node: &Xstr) {}
#[allow(unused_variables)]
fn on_yield(&mut self, node: &Yield) {}
#[allow(unused_variables)]
fn on_z_super(&mut self, node: &ZSuper) {}
#[allow(unused_variables)]
fn on_node(&mut self, node: &Node) {}
#[allow(unused_variables)]
fn on_node_moving_up(&mut self, node: &Node) {}
#[allow(unused_variables)]
fn on_option_node(&mut self, node: &Option<Box<Node>>) {}
#[allow(unused_variables)]
fn on_node_list(&mut self, nodes: &[Node]) {}
#[allow(unused_variables)]
fn on_subitem(&mut self, subitem: Item) {}
#[allow(unused_variables)]
fn on_subitem_moving_up(&mut self, subitem: Item) {}
}
impl<TObserver: Observer> Visit<&Node> for Visitor<TObserver> {
fn visit(&mut self, node: &Node, visit_as: Item) {
self.observer.on_subitem(visit_as);
self.observer.on_node(node);
if let Some(inner) = node.as_alias() {
self.visit_alias(inner)
}
if let Some(inner) = node.as_and() {
self.visit_and(inner)
}
if let Some(inner) = node.as_and_asgn() {
self.visit_and_asgn(inner)
}
if let Some(inner) = node.as_arg() {
self.visit_arg(inner)
}
if let Some(inner) = node.as_args() {
self.visit_args(inner)
}
if let Some(inner) = node.as_array() {
self.visit_array(inner)
}
if let Some(inner) = node.as_array_pattern() {
self.visit_array_pattern(inner)
}
if let Some(inner) = node.as_array_pattern_with_tail() {
self.visit_array_pattern_with_tail(inner)
}
if let Some(inner) = node.as_back_ref() {
self.visit_back_ref(inner)
}
if let Some(inner) = node.as_begin() {
self.visit_begin(inner)
}
if let Some(inner) = node.as_block() {
self.visit_block(inner)
}
if let Some(inner) = node.as_blockarg() {
self.visit_blockarg(inner)
}
if let Some(inner) = node.as_block_pass() {
self.visit_block_pass(inner)
}
if let Some(inner) = node.as_break() {
self.visit_break(inner)
}
if let Some(inner) = node.as_case() {
self.visit_case(inner)
}
if let Some(inner) = node.as_case_match() {
self.visit_case_match(inner)
}
if let Some(inner) = node.as_casgn() {
self.visit_casgn(inner)
}
if let Some(inner) = node.as_cbase() {
self.visit_cbase(inner)
}
if let Some(inner) = node.as_class() {
self.visit_class(inner)
}
if let Some(inner) = node.as_complex() {
self.visit_complex(inner)
}
if let Some(inner) = node.as_const() {
self.visit_const(inner)
}
if let Some(inner) = node.as_const_pattern() {
self.visit_const_pattern(inner)
}
if let Some(inner) = node.as_c_send() {
self.visit_c_send(inner)
}
if let Some(inner) = node.as_cvar() {
self.visit_cvar(inner)
}
if let Some(inner) = node.as_cvasgn() {
self.visit_cvasgn(inner)
}
if let Some(inner) = node.as_def() {
self.visit_def(inner)
}
if let Some(inner) = node.as_defined() {
self.visit_defined(inner)
}
if let Some(inner) = node.as_defs() {
self.visit_defs(inner)
}
if let Some(inner) = node.as_dstr() {
self.visit_dstr(inner)
}
if let Some(inner) = node.as_dsym() {
self.visit_dsym(inner)
}
if let Some(inner) = node.as_e_flip_flop() {
self.visit_e_flip_flop(inner)
}
if let Some(inner) = node.as_empty_else() {
self.visit_empty_else(inner)
}
if let Some(inner) = node.as_encoding() {
self.visit_encoding(inner)
}
if let Some(inner) = node.as_ensure() {
self.visit_ensure(inner)
}
if let Some(inner) = node.as_erange() {
self.visit_erange(inner)
}
if let Some(inner) = node.as_false() {
self.visit_false(inner)
}
if let Some(inner) = node.as_file() {
self.visit_file(inner)
}
if let Some(inner) = node.as_find_pattern() {
self.visit_find_pattern(inner)
}
if let Some(inner) = node.as_float() {
self.visit_float(inner)
}
if let Some(inner) = node.as_for() {
self.visit_for(inner)
}
if let Some(inner) = node.as_forward_arg() {
self.visit_forward_arg(inner)
}
if let Some(inner) = node.as_forwarded_args() {
self.visit_forwarded_args(inner)
}
if let Some(inner) = node.as_gvar() {
self.visit_gvar(inner)
}
if let Some(inner) = node.as_gvasgn() {
self.visit_gvasgn(inner)
}
if let Some(inner) = node.as_hash() {
self.visit_hash(inner)
}
if let Some(inner) = node.as_hash_pattern() {
self.visit_hash_pattern(inner)
}
if let Some(inner) = node.as_heredoc() {
self.visit_heredoc(inner)
}
if let Some(inner) = node.as_if() {
self.visit_if(inner)
}
if let Some(inner) = node.as_if_guard() {
self.visit_if_guard(inner)
}
if let Some(inner) = node.as_i_flip_flop() {
self.visit_i_flip_flop(inner)
}
if let Some(inner) = node.as_if_mod() {
self.visit_if_mod(inner)
}
if let Some(inner) = node.as_if_ternary() {
self.visit_if_ternary(inner)
}
if let Some(inner) = node.as_index() {
self.visit_index(inner)
}
if let Some(inner) = node.as_index_asgn() {
self.visit_index_asgn(inner)
}
if let Some(inner) = node.as_in_pattern() {
self.visit_in_pattern(inner)
}
if let Some(inner) = node.as_int() {
self.visit_int(inner)
}
if let Some(inner) = node.as_irange() {
self.visit_irange(inner)
}
if let Some(inner) = node.as_ivar() {
self.visit_ivar(inner)
}
if let Some(inner) = node.as_ivasgn() {
self.visit_ivasgn(inner)
}
if let Some(inner) = node.as_kwarg() {
self.visit_kwarg(inner)
}
if let Some(inner) = node.as_kwargs() {
self.visit_kwargs(inner)
}
if let Some(inner) = node.as_kw_begin() {
self.visit_kw_begin(inner)
}
if let Some(inner) = node.as_kwnilarg() {
self.visit_kwnilarg(inner)
}
if let Some(inner) = node.as_kwoptarg() {
self.visit_kwoptarg(inner)
}
if let Some(inner) = node.as_kwrestarg() {
self.visit_kwrestarg(inner)
}
if let Some(inner) = node.as_kwsplat() {
self.visit_kwsplat(inner)
}
if let Some(inner) = node.as_lambda() {
self.visit_lambda(inner)
}
if let Some(inner) = node.as_line() {
self.visit_line(inner)
}
if let Some(inner) = node.as_lvar() {
self.visit_lvar(inner)
}
if let Some(inner) = node.as_lvasgn() {
self.visit_lvasgn(inner)
}
if let Some(inner) = node.as_masgn() {
self.visit_masgn(inner)
}
if let Some(inner) = node.as_match_alt() {
self.visit_match_alt(inner)
}
if let Some(inner) = node.as_match_as() {
self.visit_match_as(inner)
}
if let Some(inner) = node.as_match_current_line() {
self.visit_match_current_line(inner)
}
if let Some(inner) = node.as_match_nil_pattern() {
self.visit_match_nil_pattern(inner)
}
if let Some(inner) = node.as_match_pattern() {
self.visit_match_pattern(inner)
}
if let Some(inner) = node.as_match_pattern_p() {
self.visit_match_pattern_p(inner)
}
if let Some(inner) = node.as_match_rest() {
self.visit_match_rest(inner)
}
if let Some(inner) = node.as_match_var() {
self.visit_match_var(inner)
}
if let Some(inner) = node.as_match_with_lvasgn() {
self.visit_match_with_lvasgn(inner)
}
if let Some(inner) = node.as_mlhs() {
self.visit_mlhs(inner)
}
if let Some(inner) = node.as_module() {
self.visit_module(inner)
}
if let Some(inner) = node.as_next() {
self.visit_next(inner)
}
if let Some(inner) = node.as_nil() {
self.visit_nil(inner)
}
if let Some(inner) = node.as_nth_ref() {
self.visit_nth_ref(inner)
}
if let Some(inner) = node.as_numblock() {
self.visit_numblock(inner)
}
if let Some(inner) = node.as_op_asgn() {
self.visit_op_asgn(inner)
}
if let Some(inner) = node.as_optarg() {
self.visit_optarg(inner)
}
if let Some(inner) = node.as_or() {
self.visit_or(inner)
}
if let Some(inner) = node.as_or_asgn() {
self.visit_or_asgn(inner)
}
if let Some(inner) = node.as_pair() {
self.visit_pair(inner)
}
if let Some(inner) = node.as_pin() {
self.visit_pin(inner)
}
if let Some(inner) = node.as_postexe() {
self.visit_postexe(inner)
}
if let Some(inner) = node.as_preexe() {
self.visit_preexe(inner)
}
if let Some(inner) = node.as_procarg0() {
self.visit_procarg0(inner)
}
if let Some(inner) = node.as_rational() {
self.visit_rational(inner)
}
if let Some(inner) = node.as_redo() {
self.visit_redo(inner)
}
if let Some(inner) = node.as_regexp() {
self.visit_regexp(inner)
}
if let Some(inner) = node.as_reg_opt() {
self.visit_reg_opt(inner)
}
if let Some(inner) = node.as_rescue() {
self.visit_rescue(inner)
}
if let Some(inner) = node.as_rescue_body() {
self.visit_rescue_body(inner)
}
if let Some(inner) = node.as_restarg() {
self.visit_restarg(inner)
}
if let Some(inner) = node.as_retry() {
self.visit_retry(inner)
}
if let Some(inner) = node.as_return() {
self.visit_return(inner)
}
if let Some(inner) = node.as_s_class() {
self.visit_s_class(inner)
}
if let Some(inner) = node.as_self_() {
self.visit_self_(inner)
}
if let Some(inner) = node.as_send() {
self.visit_send(inner)
}
if let Some(inner) = node.as_shadowarg() {
self.visit_shadowarg(inner)
}
if let Some(inner) = node.as_splat() {
self.visit_splat(inner)
}
if let Some(inner) = node.as_str() {
self.visit_str(inner)
}
if let Some(inner) = node.as_super() {
self.visit_super(inner)
}
if let Some(inner) = node.as_sym() {
self.visit_sym(inner)
}
if let Some(inner) = node.as_true() {
self.visit_true(inner)
}
if let Some(inner) = node.as_undef() {
self.visit_undef(inner)
}
if let Some(inner) = node.as_unless_guard() {
self.visit_unless_guard(inner)
}
if let Some(inner) = node.as_until() {
self.visit_until(inner)
}
if let Some(inner) = node.as_until_post() {
self.visit_until_post(inner)
}
if let Some(inner) = node.as_when() {
self.visit_when(inner)
}
if let Some(inner) = node.as_while() {
self.visit_while(inner)
}
if let Some(inner) = node.as_while_post() {
self.visit_while_post(inner)
}
if let Some(inner) = node.as_x_heredoc() {
self.visit_x_heredoc(inner)
}
if let Some(inner) = node.as_xstr() {
self.visit_xstr(inner)
}
if let Some(inner) = node.as_yield() {
self.visit_yield(inner)
}
if let Some(inner) = node.as_z_super() {
self.visit_z_super(inner)
}
self.observer.on_node_moving_up(node);
self.observer.on_subitem_moving_up(visit_as);
}
}
impl<T> Visitor<T>
where
T: Observer,
{
fn visit_alias(&mut self, node: &Alias) {
self.observer.on_alias(node);
self.visit(node.get_to(), Item::To);
self.visit(node.get_from(), Item::From);
}
fn visit_and(&mut self, node: &And) {
self.observer.on_and(node);
self.visit(node.get_lhs(), Item::Lhs);
self.visit(node.get_rhs(), Item::Rhs);
}
fn visit_and_asgn(&mut self, node: &AndAsgn) {
self.observer.on_and_asgn(node);
self.visit(node.get_recv(), Item::Recv);
self.visit(node.get_value(), Item::Value);
}
fn visit_arg(&mut self, node: &Arg) {
self.observer.on_arg(node);
}
fn visit_args(&mut self, node: &Args) {
self.observer.on_args(node);
self.visit(node.get_args(), Item::Arglist);
}
fn visit_array(&mut self, node: &Array) {
self.observer.on_array(node);
self.visit(node.get_elements(), Item::Elements);
}
fn visit_array_pattern(&mut self, node: &ArrayPattern) {
self.observer.on_array_pattern(node);
self.visit(node.get_elements(), Item::Elements);
}
fn visit_array_pattern_with_tail(&mut self, node: &ArrayPatternWithTail) {
self.observer.on_array_pattern_with_tail(node);
self.visit(node.get_elements(), Item::Elements);
}
fn visit_back_ref(&mut self, node: &BackRef) {
self.observer.on_back_ref(node);
}
fn visit_begin(&mut self, node: &Begin) {
self.observer.on_begin(node);
self.visit(node.get_statements(), Item::Stmts);
}
fn visit_block(&mut self, node: &Block) {
self.observer.on_block(node);
self.visit(node.get_call(), Item::MethodCall);
self.visit(node.get_args(), Item::Args);
self.visit(node.get_body(), Item::Body);
}
fn visit_blockarg(&mut self, node: &Blockarg) {
self.observer.on_blockarg(node);
}
fn visit_block_pass(&mut self, node: &BlockPass) {
self.observer.on_block_pass(node);
self.visit(node.get_value(), Item::Value);
}
fn visit_break(&mut self, node: &Break) {
self.observer.on_break(node);
self.visit(node.get_args(), Item::Args);
}
fn visit_case(&mut self, node: &Case) {
self.observer.on_case(node);
self.visit(node.get_expr(), Item::Expr);
self.visit(node.get_when_bodies(), Item::WhenBodies);
self.visit(node.get_else_body(), Item::ElseBody);
}
fn visit_case_match(&mut self, node: &CaseMatch) {
self.observer.on_case_match(node);
self.visit(node.get_expr(), Item::Expr);
self.visit(node.get_in_bodies(), Item::InBodies);
self.visit(node.get_else_body(), Item::ElseBody);
}
fn visit_casgn(&mut self, node: &Casgn) {
self.observer.on_casgn(node);
self.visit(node.get_scope(), Item::Scope);
self.visit(node.get_value(), Item::Value);
}
fn visit_cbase(&mut self, node: &Cbase) {
self.observer.on_cbase(node);
}
fn visit_class(&mut self, node: &Class) {
self.observer.on_class(node);
self.visit(node.get_name(), Item::Name);
self.visit(node.get_superclass(), Item::Superclass);
self.visit(node.get_body(), Item::Body);
}
fn visit_complex(&mut self, node: &Complex) {
self.observer.on_complex(node);
}
fn visit_const(&mut self, node: &Const) {
self.observer.on_const(node);
self.visit(node.get_scope(), Item::Scope);
}
fn visit_const_pattern(&mut self, node: &ConstPattern) {
self.observer.on_const_pattern(node);
self.visit(node.get_const(), Item::Const);
self.visit(node.get_pattern(), Item::Pattern);
}
fn visit_c_send(&mut self, node: &CSend) {
self.observer.on_c_send(node);
self.visit(node.get_recv(), Item::Recv);
self.visit(node.get_args(), Item::Args);
}
fn visit_cvar(&mut self, node: &Cvar) {
self.observer.on_cvar(node);
}
fn visit_cvasgn(&mut self, node: &Cvasgn) {
self.observer.on_cvasgn(node);
self.visit(node.get_value(), Item::Value);
}
fn visit_def(&mut self, node: &Def) {
self.observer.on_def(node);
self.visit(node.get_args(), Item::Args);
self.visit(node.get_body(), Item::Body);
}
fn visit_defined(&mut self, node: &Defined) {
self.observer.on_defined(node);
self.visit(node.get_value(), Item::Value);
}
fn visit_defs(&mut self, node: &Defs) {
self.observer.on_defs(node);
self.visit(node.get_definee(), Item::Definee);
self.visit(node.get_args(), Item::Args);
self.visit(node.get_body(), Item::Body);
}
fn visit_dstr(&mut self, node: &Dstr) {
self.observer.on_dstr(node);
self.visit(node.get_parts(), Item::Parts);
}
fn visit_dsym(&mut self, node: &Dsym) {
self.observer.on_dsym(node);
self.visit(node.get_parts(), Item::Parts);
}
fn visit_e_flip_flop(&mut self, node: &EFlipFlop) {
self.observer.on_e_flip_flop(node);
self.visit(node.get_left(), Item::Left);
self.visit(node.get_right(), Item::Right);
}
fn visit_empty_else(&mut self, node: &EmptyElse) {
self.observer.on_empty_else(node);
}
fn visit_encoding(&mut self, node: &Encoding) {
self.observer.on_encoding(node);
}
fn visit_ensure(&mut self, node: &Ensure) {
self.observer.on_ensure(node);
self.visit(node.get_body(), Item::Body);
self.visit(node.get_ensure(), Item::Ensure);
}
fn visit_erange(&mut self, node: &Erange) {
self.observer.on_erange(node);
self.visit(node.get_left(), Item::Left);
self.visit(node.get_right(), Item::Right);
}
fn visit_false(&mut self, node: &False) {
self.observer.on_false(node);
}
fn visit_file(&mut self, node: &File) {
self.observer.on_file(node);
}
fn visit_find_pattern(&mut self, node: &FindPattern) {
self.observer.on_find_pattern(node);
self.visit(node.get_elements(), Item::Elements);
}
fn visit_float(&mut self, node: &Float) {
self.observer.on_float(node);
}
fn visit_for(&mut self, node: &For) {
self.observer.on_for(node);
self.visit(node.get_iterator(), Item::Iterator);
self.visit(node.get_iteratee(), Item::Iteratee);
self.visit(node.get_body(), Item::Body);
}
fn visit_forward_arg(&mut self, node: &ForwardArg) {
self.observer.on_forward_arg(node);
}
fn visit_forwarded_args(&mut self, node: &ForwardedArgs) {
self.observer.on_forwarded_args(node);
}
fn visit_gvar(&mut self, node: &Gvar) {
self.observer.on_gvar(node);
}
fn visit_gvasgn(&mut self, node: &Gvasgn) {
self.observer.on_gvasgn(node);
self.visit(node.get_value(), Item::Value);
}
fn visit_hash(&mut self, node: &Hash) {
self.observer.on_hash(node);
self.visit(node.get_pairs(), Item::Pairs);
}
fn visit_hash_pattern(&mut self, node: &HashPattern) {
self.observer.on_hash_pattern(node);
self.visit(node.get_elements(), Item::Elements);
}
fn visit_heredoc(&mut self, node: &Heredoc) {
self.observer.on_heredoc(node);
self.visit(node.get_parts(), Item::Parts);
}
fn visit_if(&mut self, node: &If) {
self.observer.on_if(node);
self.visit(node.get_cond(), Item::Cond);
self.visit(node.get_if_true(), Item::IfTrue);
self.visit(node.get_if_false(), Item::IfFalse);
}
fn visit_if_guard(&mut self, node: &IfGuard) {
self.observer.on_if_guard(node);
self.visit(node.get_cond(), Item::Cond);
}
fn visit_i_flip_flop(&mut self, node: &IFlipFlop) {
self.observer.on_i_flip_flop(node);
self.visit(node.get_left(), Item::Left);
self.visit(node.get_right(), Item::Right);
}
fn visit_if_mod(&mut self, node: &IfMod) {
self.observer.on_if_mod(node);
self.visit(node.get_cond(), Item::Cond);
self.visit(node.get_if_true(), Item::IfTrue);
self.visit(node.get_if_false(), Item::IfFalse);
}
fn visit_if_ternary(&mut self, node: &IfTernary) {
self.observer.on_if_ternary(node);
self.visit(node.get_cond(), Item::Cond);
self.visit(node.get_if_true(), Item::IfTrue);
self.visit(node.get_if_false(), Item::IfFalse);
}
fn visit_index(&mut self, node: &Index) {
self.observer.on_index(node);
self.visit(node.get_recv(), Item::Recv);
self.visit(node.get_indexes(), Item::Indexes);
}
fn visit_index_asgn(&mut self, node: &IndexAsgn) {
self.observer.on_index_asgn(node);
self.visit(node.get_recv(), Item::Recv);
self.visit(node.get_indexes(), Item::Indexes);
self.visit(node.get_value(), Item::Value);
}
fn visit_in_pattern(&mut self, node: &InPattern) {
self.observer.on_in_pattern(node);
self.visit(node.get_pattern(), Item::Pattern);
self.visit(node.get_guard(), Item::Guard);
self.visit(node.get_body(), Item::Body);
}
fn visit_int(&mut self, node: &Int) {
self.observer.on_int(node);
}
fn visit_irange(&mut self, node: &Irange) {
self.observer.on_irange(node);
self.visit(node.get_left(), Item::Left);
self.visit(node.get_right(), Item::Right);
}
fn visit_ivar(&mut self, node: &Ivar) {
self.observer.on_ivar(node);
}
fn visit_ivasgn(&mut self, node: &Ivasgn) {
self.observer.on_ivasgn(node);
self.visit(node.get_value(), Item::Value);
}
fn visit_kwarg(&mut self, node: &Kwarg) {
self.observer.on_kwarg(node);
}
fn visit_kwargs(&mut self, node: &Kwargs) {
self.observer.on_kwargs(node);
self.visit(node.get_pairs(), Item::Pairs);
}
fn visit_kw_begin(&mut self, node: &KwBegin) {
self.observer.on_kw_begin(node);
self.visit(node.get_statements(), Item::Stmts);
}
fn visit_kwnilarg(&mut self, node: &Kwnilarg) {
self.observer.on_kwnilarg(node);
}
fn visit_kwoptarg(&mut self, node: &Kwoptarg) {
self.observer.on_kwoptarg(node);
self.visit(node.get_default(), Item::DefaultValue);
}
fn visit_kwrestarg(&mut self, node: &Kwrestarg) {
self.observer.on_kwrestarg(node);
}
fn visit_kwsplat(&mut self, node: &Kwsplat) {
self.observer.on_kwsplat(node);
self.visit(node.get_value(), Item::Value);
}
fn visit_lambda(&mut self, node: &Lambda) {
self.observer.on_lambda(node);
}
fn visit_line(&mut self, node: &Line) {
self.observer.on_line(node);
}
fn visit_lvar(&mut self, node: &Lvar) {
self.observer.on_lvar(node);
}
fn visit_lvasgn(&mut self, node: &Lvasgn) {
self.observer.on_lvasgn(node);
self.visit(node.get_value(), Item::Value);
}
fn visit_masgn(&mut self, node: &Masgn) {
self.observer.on_masgn(node);
self.visit(node.get_lhs(), Item::Lhs);
self.visit(node.get_rhs(), Item::Rhs);
}
fn visit_match_alt(&mut self, node: &MatchAlt) {
self.observer.on_match_alt(node);
self.visit(node.get_lhs(), Item::Lhs);
self.visit(node.get_rhs(), Item::Rhs);
}
fn visit_match_as(&mut self, node: &MatchAs) {
self.observer.on_match_as(node);
self.visit(node.get_value(), Item::Value);
self.visit(node.get_as(), Item::As);
}
fn visit_match_current_line(&mut self, node: &MatchCurrentLine) {
self.observer.on_match_current_line(node);
self.visit(node.get_re(), Item::Re);
}
fn visit_match_nil_pattern(&mut self, node: &MatchNilPattern) {
self.observer.on_match_nil_pattern(node);
}
fn visit_match_pattern(&mut self, node: &MatchPattern) {
self.observer.on_match_pattern(node);
self.visit(node.get_value(), Item::Value);
self.visit(node.get_pattern(), Item::Pattern);
}
fn visit_match_pattern_p(&mut self, node: &MatchPatternP) {
self.observer.on_match_pattern_p(node);
self.visit(node.get_value(), Item::Value);
self.visit(node.get_pattern(), Item::Pattern);
}
fn visit_match_rest(&mut self, node: &MatchRest) {
self.observer.on_match_rest(node);
self.visit(node.get_name(), Item::Name);
}
fn visit_match_var(&mut self, node: &MatchVar) {
self.observer.on_match_var(node);
}
fn visit_match_with_lvasgn(&mut self, node: &MatchWithLvasgn) {
self.observer.on_match_with_lvasgn(node);
self.visit(node.get_re(), Item::Re);
self.visit(node.get_value(), Item::Value);
}
fn visit_mlhs(&mut self, node: &Mlhs) {
self.observer.on_mlhs(node);
self.visit(node.get_items(), Item::MlhsItems);
}
fn visit_module(&mut self, node: &Module) {
self.observer.on_module(node);
self.visit(node.get_name(), Item::Name);
self.visit(node.get_body(), Item::Body);
}
fn visit_next(&mut self, node: &Next) {
self.observer.on_next(node);
self.visit(node.get_args(), Item::Args);
}
fn visit_nil(&mut self, node: &Nil) {
self.observer.on_nil(node);
}
fn visit_nth_ref(&mut self, node: &NthRef) {
self.observer.on_nth_ref(node);
}
fn visit_numblock(&mut self, node: &Numblock) {
self.observer.on_numblock(node);
self.visit(node.get_call(), Item::MethodCall);
self.visit(node.get_body(), Item::Body);
}
fn visit_op_asgn(&mut self, node: &OpAsgn) {
self.observer.on_op_asgn(node);
self.visit(node.get_recv(), Item::Recv);
self.visit(node.get_value(), Item::Value);
}
fn visit_optarg(&mut self, node: &Optarg) {
self.observer.on_optarg(node);
self.visit(node.get_default(), Item::DefaultValue);
}
fn visit_or(&mut self, node: &Or) {
self.observer.on_or(node);
self.visit(node.get_lhs(), Item::Lhs);
self.visit(node.get_rhs(), Item::Rhs);
}
fn visit_or_asgn(&mut self, node: &OrAsgn) {
self.observer.on_or_asgn(node);
self.visit(node.get_recv(), Item::Recv);
self.visit(node.get_value(), Item::Value);
}
fn visit_pair(&mut self, node: &Pair) {
self.observer.on_pair(node);
self.visit(node.get_key(), Item::Key);
self.visit(node.get_value(), Item::Value);
}
fn visit_pin(&mut self, node: &Pin) {
self.observer.on_pin(node);
self.visit(node.get_var(), Item::Var);
}
fn visit_postexe(&mut self, node: &Postexe) {
self.observer.on_postexe(node);
self.visit(node.get_body(), Item::Body);
}
fn visit_preexe(&mut self, node: &Preexe) {
self.observer.on_preexe(node);
self.visit(node.get_body(), Item::Body);
}
fn visit_procarg0(&mut self, node: &Procarg0) {
self.observer.on_procarg0(node);
self.visit(node.get_args(), Item::Arglist);
}
fn visit_rational(&mut self, node: &Rational) {
self.observer.on_rational(node);
}
fn visit_redo(&mut self, node: &Redo) {
self.observer.on_redo(node);
}
fn visit_regexp(&mut self, node: &Regexp) {
self.observer.on_regexp(node);
self.visit(node.get_parts(), Item::Parts);
self.visit(node.get_options(), Item::Options);
}
fn visit_reg_opt(&mut self, node: &RegOpt) {
self.observer.on_reg_opt(node);
}
fn visit_rescue(&mut self, node: &Rescue) {
self.observer.on_rescue(node);
self.visit(node.get_body(), Item::Body);
self.visit(node.get_rescue_bodies(), Item::RescueBodies);
self.visit(node.get_else(), Item::ElseBody);
}
fn visit_rescue_body(&mut self, node: &RescueBody) {
self.observer.on_rescue_body(node);
self.visit(node.get_exc_list(), Item::ExcList);
self.visit(node.get_exc_var(), Item::ExcVar);
self.visit(node.get_body(), Item::Body);
}
fn visit_restarg(&mut self, node: &Restarg) {
self.observer.on_restarg(node);
}
fn visit_retry(&mut self, node: &Retry) {
self.observer.on_retry(node);
}
fn visit_return(&mut self, node: &Return) {
self.observer.on_return(node);
self.visit(node.get_args(), Item::Args);
}
fn visit_s_class(&mut self, node: &SClass) {
self.observer.on_s_class(node);
self.visit(node.get_expr(), Item::Expr);
self.visit(node.get_body(), Item::Body);
}
fn visit_self_(&mut self, node: &Self_) {
self.observer.on_self_(node);
}
fn visit_send(&mut self, node: &Send) {
self.observer.on_send(node);
self.visit(node.get_recv(), Item::Recv);
self.visit(node.get_args(), Item::Args);
}
fn visit_shadowarg(&mut self, node: &Shadowarg) {
self.observer.on_shadowarg(node);
}
fn visit_splat(&mut self, node: &Splat) {
self.observer.on_splat(node);
self.visit(node.get_value(), Item::Value);
}
fn visit_str(&mut self, node: &Str) {
self.observer.on_str(node);
}
fn visit_super(&mut self, node: &Super) {
self.observer.on_super(node);
self.visit(node.get_args(), Item::Args);
}
fn visit_sym(&mut self, node: &Sym) {
self.observer.on_sym(node);
}
fn visit_true(&mut self, node: &True) {
self.observer.on_true(node);
}
fn visit_undef(&mut self, node: &Undef) {
self.observer.on_undef(node);
self.visit(node.get_names(), Item::Args);
}
fn visit_unless_guard(&mut self, node: &UnlessGuard) {
self.observer.on_unless_guard(node);
self.visit(node.get_cond(), Item::Cond);
}
fn visit_until(&mut self, node: &Until) {
self.observer.on_until(node);
self.visit(node.get_cond(), Item::Cond);
self.visit(node.get_body(), Item::Body);
}
fn visit_until_post(&mut self, node: &UntilPost) {
self.observer.on_until_post(node);
self.visit(node.get_cond(), Item::Cond);
self.visit(node.get_body(), Item::Body);
}
fn visit_when(&mut self, node: &When) {
self.observer.on_when(node);
self.visit(node.get_patterns(), Item::Args);
self.visit(node.get_body(), Item::Body);
}
fn visit_while(&mut self, node: &While) {
self.observer.on_while(node);
self.visit(node.get_cond(), Item::Cond);
self.visit(node.get_body(), Item::Body);
}
fn visit_while_post(&mut self, node: &WhilePost) {
self.observer.on_while_post(node);
self.visit(node.get_cond(), Item::Cond);
self.visit(node.get_body(), Item::Body);
}
fn visit_x_heredoc(&mut self, node: &XHeredoc) {
self.observer.on_x_heredoc(node);
self.visit(node.get_parts(), Item::Parts);
}
fn visit_xstr(&mut self, node: &Xstr) {
self.observer.on_xstr(node);
self.visit(node.get_parts(), Item::Parts);
}
fn visit_yield(&mut self, node: &Yield) {
self.observer.on_yield(node);
self.visit(node.get_args(), Item::Args);
}
fn visit_z_super(&mut self, node: &ZSuper) {
self.observer.on_z_super(node);
}
}