Visitor

Trait Visitor 

Source
pub trait Visitor<'ast>
where Self: Sized,
{
Show 16 methods // Provided methods fn visit_expr(&mut self, expr: &'ast Expr) { ... } fn visit_literal(&mut self, _literal: &'ast Literal) { ... } fn visit_identifier(&mut self, _ident: &'ast str) { ... } fn visit_type(&mut self, _cel_type: &'ast CelType) { ... } fn visit_unary_op(&mut self, op: UnaryOperator, operand: &'ast Expr) { ... } fn visit_binary_op( &mut self, op: BinaryOperator, left: &'ast Expr, right: &'ast Expr, ) { ... } fn visit_conditional( &mut self, cond: &'ast Expr, true_branch: &'ast Expr, false_branch: &'ast Expr, ) { ... } fn visit_list(&mut self, elements: &'ast [Expr]) { ... } fn visit_field_access(&mut self, base: &'ast Expr, field: &'ast str) { ... } fn visit_call(&mut self, target: &'ast Expr, args: &'ast [Expr]) { ... } fn visit_index(&mut self, base: &'ast Expr, index: &'ast Expr) { ... } fn visit_map_literal(&mut self, entries: &'ast [(Expr, Expr)]) { ... } fn visit_message_literal( &mut self, type_name: &'ast str, fields: &'ast [(String, Expr)], ) { ... } fn visit_has(&mut self, target: &'ast Expr) { ... } fn visit_comprehension( &mut self, op: ComprehensionOp, target: &'ast Expr, iter_var: &'ast str, predicate: &'ast Expr, ) { ... } fn visit_map( &mut self, target: &'ast Expr, iter_var: &'ast str, filter: Option<&'ast Expr>, transform: &'ast Expr, ) { ... }
}
Expand description

A trait for visiting nodes in the AST in an immutable fashion.

The methods in this trait are called during a depth-first traversal of the AST. The default implementation of each visit_* method recursively visits the children of the node. To customize the behavior, implement this trait and override the methods for the nodes you are interested in.

Provided Methods§

Source

fn visit_expr(&mut self, expr: &'ast Expr)

Visits any Expr node. This is the main dispatch method.

Source

fn visit_literal(&mut self, _literal: &'ast Literal)

Visits a Literal node (e.g., 123, "hello").

Source

fn visit_identifier(&mut self, _ident: &'ast str)

Visits an Identifier node (e.g., request).

Source

fn visit_type(&mut self, _cel_type: &'ast CelType)

Visits a Type node (e.g., int, string).

Source

fn visit_unary_op(&mut self, op: UnaryOperator, operand: &'ast Expr)

Visits a UnaryOp node (e.g., !true).

Source

fn visit_binary_op( &mut self, op: BinaryOperator, left: &'ast Expr, right: &'ast Expr, )

Visits a BinaryOp node (e.g., a + b).

Source

fn visit_conditional( &mut self, cond: &'ast Expr, true_branch: &'ast Expr, false_branch: &'ast Expr, )

Visits a Conditional node (e.g., cond ? true_br : false_br).

Source

fn visit_list(&mut self, elements: &'ast [Expr])

Visits a List literal (e.g., [1, 2, 3]).

Source

fn visit_field_access(&mut self, base: &'ast Expr, field: &'ast str)

Visits a FieldAccess node (e.g., a.b).

Source

fn visit_call(&mut self, target: &'ast Expr, args: &'ast [Expr])

Visits a Call node (e.g., func(arg1, arg2)).

Source

fn visit_index(&mut self, base: &'ast Expr, index: &'ast Expr)

Visits an Index node (e.g., list[0]).

Source

fn visit_map_literal(&mut self, entries: &'ast [(Expr, Expr)])

Visits a MapLiteral node (e.g., {'key': 'value'}).

Source

fn visit_message_literal( &mut self, type_name: &'ast str, fields: &'ast [(String, Expr)], )

Visits a MessageLiteral node (e.g., Point{x: 1, y: 2}).

Source

fn visit_has(&mut self, target: &'ast Expr)

Visits a Has macro (e.g., has(msg.field)).

Source

fn visit_comprehension( &mut self, op: ComprehensionOp, target: &'ast Expr, iter_var: &'ast str, predicate: &'ast Expr, )

Visits a Comprehension macro (e.g., list.all(i, i > 0)).

Source

fn visit_map( &mut self, target: &'ast Expr, iter_var: &'ast str, filter: Option<&'ast Expr>, transform: &'ast Expr, )

Visits a Map macro (e.g., items.map(i, i.price)).

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§