Skip to main content

Visitor

Trait Visitor 

Source
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§

Source

fn visit_expr(&mut self, expr: &Expr) -> T

Visit a generic expression, dispatching to specific methods

Source

fn visit_literal(&mut self, lit: &Literal) -> T

Visit a literal value (number or boolean)

Source

fn visit_null(&mut self) -> T

Visit a null literal

Source

fn visit_identifier(&mut self, name: &str) -> T

Visit an identifier (variable reference)

Source

fn visit_field_access(&mut self, receiver: &Expr, field: &str) -> T

Visit a field access expression

Source

fn visit_binary_op( &mut self, op: BinaryOperator, left: &Expr, right: &Expr, ) -> T

Visit a binary operation

Source

fn visit_unary_op(&mut self, op: UnaryOperator, operand: &Expr) -> T

Visit a unary operation

Source

fn visit_function_call(&mut self, name: &str, args: &[Expr]) -> T

Visit a function call

Source

fn visit_lambda(&mut self, param: &str, body: &Expr) -> T

Visit a lambda expression

Source

fn visit_let(&mut self, name: &str, value: &Expr, body: &Expr) -> T

Visit a let binding

Source

fn visit_if( &mut self, condition: &Expr, then_branch: &Expr, else_branch: &Expr, ) -> T

Visit an if conditional

Source

fn visit_array(&mut self, elements: &[Expr]) -> T

Visit an array literal

Source

fn visit_object(&mut self, fields: &[(String, Expr)]) -> T

Visit an object literal

Source

fn visit_pipe(&mut self, value: &Expr, functions: &[Expr]) -> T

Visit a pipe operator

Source

fn visit_alternative(&mut self, primary: &Expr, alternative: &Expr) -> T

Visit an alternative operator (?|)

Source

fn visit_guard(&mut self, condition: &Expr, body: &Expr) -> T

Visit a guard expression

Source

fn visit_date(&mut self, date: &str) -> T

Visit a date literal

Source

fn visit_datetime(&mut self, datetime: &str) -> T

Visit a datetime literal

Source

fn visit_duration(&mut self, duration: &str) -> T

Visit a duration literal

Source

fn visit_temporal_keyword(&mut self, keyword: TemporalKeyword) -> T

Visit a temporal keyword

Source

fn visit_string(&mut self, value: &str) -> T

Visit a string literal

Implementors§