[][src]Trait full_moon::visitors::Visitor

pub trait Visitor<'ast> {
    fn visit_ast(&mut self, ast: &Ast<'ast>)
    where
        Self: Sized
, { ... }
fn visit_anonymous_call(&mut self, _node: &FunctionArgs<'ast>) { ... }
fn visit_anonymous_call_end(&mut self, _node: &FunctionArgs<'ast>) { ... }
fn visit_assignment(&mut self, _node: &Assignment<'ast>) { ... }
fn visit_assignment_end(&mut self, _node: &Assignment<'ast>) { ... }
fn visit_bin_op(&mut self, _node: &BinOpRhs<'ast>) { ... }
fn visit_bin_op_end(&mut self, _node: &BinOpRhs<'ast>) { ... }
fn visit_block(&mut self, _node: &Block<'ast>) { ... }
fn visit_block_end(&mut self, _node: &Block<'ast>) { ... }
fn visit_call(&mut self, _node: &Call<'ast>) { ... }
fn visit_call_end(&mut self, _node: &Call<'ast>) { ... }
fn visit_contained_span(&mut self, _node: &ContainedSpan<'ast>) { ... }
fn visit_contained_span_end(&mut self, _node: &ContainedSpan<'ast>) { ... }
fn visit_do(&mut self, _node: &Do<'ast>) { ... }
fn visit_do_end(&mut self, _node: &Do<'ast>) { ... }
fn visit_else_if(&mut self, _node: &ElseIf<'ast>) { ... }
fn visit_else_if_end(&mut self, _node: &ElseIf<'ast>) { ... }
fn visit_eof(&mut self, _node: &TokenReference<'ast>) { ... }
fn visit_eof_end(&mut self, _node: &TokenReference<'ast>) { ... }
fn visit_expression(&mut self, _node: &Expression<'ast>) { ... }
fn visit_expression_end(&mut self, _node: &Expression<'ast>) { ... }
fn visit_field(&mut self, _node: &Field<'ast>) { ... }
fn visit_field_end(&mut self, _node: &Field<'ast>) { ... }
fn visit_function_args(&mut self, _node: &FunctionArgs<'ast>) { ... }
fn visit_function_args_end(&mut self, _node: &FunctionArgs<'ast>) { ... }
fn visit_function_body(&mut self, _node: &FunctionBody<'ast>) { ... }
fn visit_function_body_end(&mut self, _node: &FunctionBody<'ast>) { ... }
fn visit_function_call(&mut self, _node: &FunctionCall<'ast>) { ... }
fn visit_function_call_end(&mut self, _node: &FunctionCall<'ast>) { ... }
fn visit_function_declaration(&mut self, _node: &FunctionDeclaration<'ast>) { ... }
fn visit_function_declaration_end(
        &mut self,
        _node: &FunctionDeclaration<'ast>
    ) { ... }
fn visit_function_name(&mut self, _node: &FunctionName<'ast>) { ... }
fn visit_function_name_end(&mut self, _node: &FunctionName<'ast>) { ... }
fn visit_generic_for(&mut self, _node: &GenericFor<'ast>) { ... }
fn visit_generic_for_end(&mut self, _node: &GenericFor<'ast>) { ... }
fn visit_if(&mut self, _node: &If<'ast>) { ... }
fn visit_if_end(&mut self, _node: &If<'ast>) { ... }
fn visit_index(&mut self, _node: &Index<'ast>) { ... }
fn visit_index_end(&mut self, _node: &Index<'ast>) { ... }
fn visit_local_assignment(&mut self, _node: &LocalAssignment<'ast>) { ... }
fn visit_local_assignment_end(&mut self, _node: &LocalAssignment<'ast>) { ... }
fn visit_local_function(&mut self, _node: &LocalFunction<'ast>) { ... }
fn visit_local_function_end(&mut self, _node: &LocalFunction<'ast>) { ... }
fn visit_last_stmt(&mut self, _node: &LastStmt<'ast>) { ... }
fn visit_last_stmt_end(&mut self, _node: &LastStmt<'ast>) { ... }
fn visit_method_call(&mut self, _node: &MethodCall<'ast>) { ... }
fn visit_method_call_end(&mut self, _node: &MethodCall<'ast>) { ... }
fn visit_numeric_for(&mut self, _node: &NumericFor<'ast>) { ... }
fn visit_numeric_for_end(&mut self, _node: &NumericFor<'ast>) { ... }
fn visit_parameter(&mut self, _node: &Parameter<'ast>) { ... }
fn visit_parameter_end(&mut self, _node: &Parameter<'ast>) { ... }
fn visit_prefix(&mut self, _node: &Prefix<'ast>) { ... }
fn visit_prefix_end(&mut self, _node: &Prefix<'ast>) { ... }
fn visit_return(&mut self, _node: &Return<'ast>) { ... }
fn visit_return_end(&mut self, _node: &Return<'ast>) { ... }
fn visit_repeat(&mut self, _node: &Repeat<'ast>) { ... }
fn visit_repeat_end(&mut self, _node: &Repeat<'ast>) { ... }
fn visit_stmt(&mut self, _node: &Stmt<'ast>) { ... }
fn visit_stmt_end(&mut self, _node: &Stmt<'ast>) { ... }
fn visit_suffix(&mut self, _node: &Suffix<'ast>) { ... }
fn visit_suffix_end(&mut self, _node: &Suffix<'ast>) { ... }
fn visit_table_constructor(&mut self, _node: &TableConstructor<'ast>) { ... }
fn visit_table_constructor_end(&mut self, _node: &TableConstructor<'ast>) { ... }
fn visit_token_reference(&mut self, _node: &TokenReference<'ast>) { ... }
fn visit_token_reference_end(&mut self, _node: &TokenReference<'ast>) { ... }
fn visit_un_op(&mut self, _node: &UnOp<'ast>) { ... }
fn visit_un_op_end(&mut self, _node: &UnOp<'ast>) { ... }
fn visit_value(&mut self, _node: &Value<'ast>) { ... }
fn visit_value_end(&mut self, _node: &Value<'ast>) { ... }
fn visit_var(&mut self, _node: &Var<'ast>) { ... }
fn visit_var_end(&mut self, _node: &Var<'ast>) { ... }
fn visit_var_expression(&mut self, _node: &VarExpression<'ast>) { ... }
fn visit_var_expression_end(&mut self, _node: &VarExpression<'ast>) { ... }
fn visit_while(&mut self, _node: &While<'ast>) { ... }
fn visit_while_end(&mut self, _node: &While<'ast>) { ... }
fn visit_identifier(&mut self, _token: &Token<'ast>) { ... }
fn visit_multi_line_comment(&mut self, _token: &Token<'ast>) { ... }
fn visit_number(&mut self, _token: &Token<'ast>) { ... }
fn visit_single_line_comment(&mut self, _token: &Token<'ast>) { ... }
fn visit_string_literal(&mut self, _token: &Token<'ast>) { ... }
fn visit_symbol(&mut self, _token: &Token<'ast>) { ... }
fn visit_token(&mut self, _token: &Token<'ast>) { ... }
fn visit_whitespace(&mut self, _token: &Token<'ast>) { ... } }

A trait that implements functions to listen for specific nodes/tokens. Unlike VisitorMut, nodes/tokens passed are immutable.

// A visitor that logs every local assignment made
#[derive(Default)]
struct LocalVariableVisitor {
    names: Vec<String>,
}

impl<'ast> Visitor<'ast> for LocalVariableVisitor {
    fn visit_local_assignment(&mut self, local_assignment: &ast::LocalAssignment<'ast>) {
        self.names.extend(&mut local_assignment.name_list().iter().map(|name| name.token().to_string()));
    }
}

let mut visitor = LocalVariableVisitor::default();
visitor.visit_ast(&full_moon::parse("local x = 1; local y, z = 2, 3")?);
assert_eq!(visitor.names, vec!["x", "y", "z"]);

Provided methods

fn visit_ast(&mut self, ast: &Ast<'ast>) where
    Self: Sized

Visit the nodes of an Ast

fn visit_anonymous_call(&mut self, _node: &FunctionArgs<'ast>)

fn visit_anonymous_call_end(&mut self, _node: &FunctionArgs<'ast>)

fn visit_assignment(&mut self, _node: &Assignment<'ast>)

fn visit_assignment_end(&mut self, _node: &Assignment<'ast>)

fn visit_bin_op(&mut self, _node: &BinOpRhs<'ast>)

fn visit_bin_op_end(&mut self, _node: &BinOpRhs<'ast>)

fn visit_block(&mut self, _node: &Block<'ast>)

fn visit_block_end(&mut self, _node: &Block<'ast>)

fn visit_call(&mut self, _node: &Call<'ast>)

fn visit_call_end(&mut self, _node: &Call<'ast>)

fn visit_contained_span(&mut self, _node: &ContainedSpan<'ast>)

fn visit_contained_span_end(&mut self, _node: &ContainedSpan<'ast>)

fn visit_do(&mut self, _node: &Do<'ast>)

fn visit_do_end(&mut self, _node: &Do<'ast>)

fn visit_else_if(&mut self, _node: &ElseIf<'ast>)

fn visit_else_if_end(&mut self, _node: &ElseIf<'ast>)

fn visit_eof(&mut self, _node: &TokenReference<'ast>)

fn visit_eof_end(&mut self, _node: &TokenReference<'ast>)

fn visit_expression(&mut self, _node: &Expression<'ast>)

fn visit_expression_end(&mut self, _node: &Expression<'ast>)

fn visit_field(&mut self, _node: &Field<'ast>)

fn visit_field_end(&mut self, _node: &Field<'ast>)

fn visit_function_args(&mut self, _node: &FunctionArgs<'ast>)

fn visit_function_args_end(&mut self, _node: &FunctionArgs<'ast>)

fn visit_function_body(&mut self, _node: &FunctionBody<'ast>)

fn visit_function_body_end(&mut self, _node: &FunctionBody<'ast>)

fn visit_function_call(&mut self, _node: &FunctionCall<'ast>)

fn visit_function_call_end(&mut self, _node: &FunctionCall<'ast>)

fn visit_function_declaration(&mut self, _node: &FunctionDeclaration<'ast>)

fn visit_function_declaration_end(&mut self, _node: &FunctionDeclaration<'ast>)

fn visit_function_name(&mut self, _node: &FunctionName<'ast>)

fn visit_function_name_end(&mut self, _node: &FunctionName<'ast>)

fn visit_generic_for(&mut self, _node: &GenericFor<'ast>)

fn visit_generic_for_end(&mut self, _node: &GenericFor<'ast>)

fn visit_if(&mut self, _node: &If<'ast>)

fn visit_if_end(&mut self, _node: &If<'ast>)

fn visit_index(&mut self, _node: &Index<'ast>)

fn visit_index_end(&mut self, _node: &Index<'ast>)

fn visit_local_assignment(&mut self, _node: &LocalAssignment<'ast>)

fn visit_local_assignment_end(&mut self, _node: &LocalAssignment<'ast>)

fn visit_local_function(&mut self, _node: &LocalFunction<'ast>)

fn visit_local_function_end(&mut self, _node: &LocalFunction<'ast>)

fn visit_last_stmt(&mut self, _node: &LastStmt<'ast>)

fn visit_last_stmt_end(&mut self, _node: &LastStmt<'ast>)

fn visit_method_call(&mut self, _node: &MethodCall<'ast>)

fn visit_method_call_end(&mut self, _node: &MethodCall<'ast>)

fn visit_numeric_for(&mut self, _node: &NumericFor<'ast>)

fn visit_numeric_for_end(&mut self, _node: &NumericFor<'ast>)

fn visit_parameter(&mut self, _node: &Parameter<'ast>)

fn visit_parameter_end(&mut self, _node: &Parameter<'ast>)

fn visit_prefix(&mut self, _node: &Prefix<'ast>)

fn visit_prefix_end(&mut self, _node: &Prefix<'ast>)

fn visit_return(&mut self, _node: &Return<'ast>)

fn visit_return_end(&mut self, _node: &Return<'ast>)

fn visit_repeat(&mut self, _node: &Repeat<'ast>)

fn visit_repeat_end(&mut self, _node: &Repeat<'ast>)

fn visit_stmt(&mut self, _node: &Stmt<'ast>)

fn visit_stmt_end(&mut self, _node: &Stmt<'ast>)

fn visit_suffix(&mut self, _node: &Suffix<'ast>)

fn visit_suffix_end(&mut self, _node: &Suffix<'ast>)

fn visit_table_constructor(&mut self, _node: &TableConstructor<'ast>)

fn visit_table_constructor_end(&mut self, _node: &TableConstructor<'ast>)

fn visit_token_reference(&mut self, _node: &TokenReference<'ast>)

fn visit_token_reference_end(&mut self, _node: &TokenReference<'ast>)

fn visit_un_op(&mut self, _node: &UnOp<'ast>)

fn visit_un_op_end(&mut self, _node: &UnOp<'ast>)

fn visit_value(&mut self, _node: &Value<'ast>)

fn visit_value_end(&mut self, _node: &Value<'ast>)

fn visit_var(&mut self, _node: &Var<'ast>)

fn visit_var_end(&mut self, _node: &Var<'ast>)

fn visit_var_expression(&mut self, _node: &VarExpression<'ast>)

fn visit_var_expression_end(&mut self, _node: &VarExpression<'ast>)

fn visit_while(&mut self, _node: &While<'ast>)

fn visit_while_end(&mut self, _node: &While<'ast>)

fn visit_identifier(&mut self, _token: &Token<'ast>)

fn visit_multi_line_comment(&mut self, _token: &Token<'ast>)

fn visit_number(&mut self, _token: &Token<'ast>)

fn visit_single_line_comment(&mut self, _token: &Token<'ast>)

fn visit_string_literal(&mut self, _token: &Token<'ast>)

fn visit_symbol(&mut self, _token: &Token<'ast>)

fn visit_token(&mut self, _token: &Token<'ast>)

fn visit_whitespace(&mut self, _token: &Token<'ast>)

Loading content...

Implementors

Loading content...