pub trait Visitor<T> {
Show 21 methods
// Required methods
fn visit_expr(&mut self, expr: &Expr) -> T;
fn visit_literal(&mut self, lit: &Literal) -> T;
fn visit_null(&mut self) -> T;
fn visit_identifier(&mut self, name: &str) -> T;
fn visit_field_access(&mut self, receiver: &Expr, field: &str) -> T;
fn visit_binary_op(
&mut self,
op: BinaryOperator,
left: &Expr,
right: &Expr,
) -> T;
fn visit_unary_op(&mut self, op: UnaryOperator, operand: &Expr) -> T;
fn visit_function_call(&mut self, name: &str, args: &[Expr]) -> T;
fn visit_lambda(&mut self, param: &str, body: &Expr) -> T;
fn visit_let(&mut self, name: &str, value: &Expr, body: &Expr) -> T;
fn visit_if(
&mut self,
condition: &Expr,
then_branch: &Expr,
else_branch: &Expr,
) -> T;
fn visit_array(&mut self, elements: &[Expr]) -> T;
fn visit_object(&mut self, fields: &[(String, Expr)]) -> T;
fn visit_pipe(&mut self, value: &Expr, functions: &[Expr]) -> T;
fn visit_alternative(&mut self, primary: &Expr, alternative: &Expr) -> T;
fn visit_guard(&mut self, condition: &Expr, body: &Expr) -> T;
fn visit_date(&mut self, date: &str) -> T;
fn visit_datetime(&mut self, datetime: &str) -> T;
fn visit_duration(&mut self, duration: &str) -> T;
fn visit_temporal_keyword(&mut self, keyword: TemporalKeyword) -> T;
fn visit_string(&mut self, value: &str) -> T;
}Expand description
Visitor trait for AST traversal and transformation
Implement this trait to traverse and/or transform ELO AST nodes.
The generic type parameter T specifies the return type of visitor methods.
§Example
ⓘ
use elo_rust::ast::{Expr, Visitor};
use proc_macro2::TokenStream;
struct CodegenVisitor {
// ... fields
}
impl Visitor<TokenStream> for CodegenVisitor {
fn visit_expr(&mut self, expr: &Expr) -> TokenStream {
match expr {
Expr::Literal(lit) => self.visit_literal(lit),
// ... handle other cases
}
}
}Required Methods§
Sourcefn visit_expr(&mut self, expr: &Expr) -> T
fn visit_expr(&mut self, expr: &Expr) -> T
Visit a generic expression, dispatching to specific methods
Sourcefn visit_literal(&mut self, lit: &Literal) -> T
fn visit_literal(&mut self, lit: &Literal) -> T
Visit a literal value (number or boolean)
Sourcefn visit_null(&mut self) -> T
fn visit_null(&mut self) -> T
Visit a null literal
Sourcefn visit_identifier(&mut self, name: &str) -> T
fn visit_identifier(&mut self, name: &str) -> T
Visit an identifier (variable reference)
Sourcefn visit_field_access(&mut self, receiver: &Expr, field: &str) -> T
fn visit_field_access(&mut self, receiver: &Expr, field: &str) -> T
Visit a field access expression
Sourcefn visit_binary_op(
&mut self,
op: BinaryOperator,
left: &Expr,
right: &Expr,
) -> T
fn visit_binary_op( &mut self, op: BinaryOperator, left: &Expr, right: &Expr, ) -> T
Visit a binary operation
Sourcefn visit_unary_op(&mut self, op: UnaryOperator, operand: &Expr) -> T
fn visit_unary_op(&mut self, op: UnaryOperator, operand: &Expr) -> T
Visit a unary operation
Sourcefn visit_function_call(&mut self, name: &str, args: &[Expr]) -> T
fn visit_function_call(&mut self, name: &str, args: &[Expr]) -> T
Visit a function call
Sourcefn visit_lambda(&mut self, param: &str, body: &Expr) -> T
fn visit_lambda(&mut self, param: &str, body: &Expr) -> T
Visit a lambda expression
Sourcefn visit_if(
&mut self,
condition: &Expr,
then_branch: &Expr,
else_branch: &Expr,
) -> T
fn visit_if( &mut self, condition: &Expr, then_branch: &Expr, else_branch: &Expr, ) -> T
Visit an if conditional
Sourcefn visit_array(&mut self, elements: &[Expr]) -> T
fn visit_array(&mut self, elements: &[Expr]) -> T
Visit an array literal
Sourcefn visit_object(&mut self, fields: &[(String, Expr)]) -> T
fn visit_object(&mut self, fields: &[(String, Expr)]) -> T
Visit an object literal
Sourcefn visit_pipe(&mut self, value: &Expr, functions: &[Expr]) -> T
fn visit_pipe(&mut self, value: &Expr, functions: &[Expr]) -> T
Visit a pipe operator
Sourcefn visit_alternative(&mut self, primary: &Expr, alternative: &Expr) -> T
fn visit_alternative(&mut self, primary: &Expr, alternative: &Expr) -> T
Visit an alternative operator (?|)
Sourcefn visit_guard(&mut self, condition: &Expr, body: &Expr) -> T
fn visit_guard(&mut self, condition: &Expr, body: &Expr) -> T
Visit a guard expression
Sourcefn visit_date(&mut self, date: &str) -> T
fn visit_date(&mut self, date: &str) -> T
Visit a date literal
Sourcefn visit_datetime(&mut self, datetime: &str) -> T
fn visit_datetime(&mut self, datetime: &str) -> T
Visit a datetime literal
Sourcefn visit_duration(&mut self, duration: &str) -> T
fn visit_duration(&mut self, duration: &str) -> T
Visit a duration literal
Sourcefn visit_temporal_keyword(&mut self, keyword: TemporalKeyword) -> T
fn visit_temporal_keyword(&mut self, keyword: TemporalKeyword) -> T
Visit a temporal keyword
Sourcefn visit_string(&mut self, value: &str) -> T
fn visit_string(&mut self, value: &str) -> T
Visit a string literal