pub trait Visitor: Sized {
Show 65 methods
// Provided methods
fn visit_expr(&mut self, _expr: &Expr) -> bool { ... }
fn leave_expr(&mut self, _expr: &Expr) { ... }
fn visit_stmt(&mut self, _stmt: &Statement) -> bool { ... }
fn leave_stmt(&mut self, _stmt: &Statement) { ... }
fn visit_item(&mut self, _item: &Item) -> bool { ... }
fn leave_item(&mut self, _item: &Item) { ... }
fn visit_function(&mut self, _func: &FunctionDef) -> bool { ... }
fn leave_function(&mut self, _func: &FunctionDef) { ... }
fn visit_literal(&mut self, _lit: &Literal) -> bool { ... }
fn leave_literal(&mut self, _lit: &Literal) { ... }
fn visit_block(&mut self, _block: &BlockExpr) -> bool { ... }
fn leave_block(&mut self, _block: &BlockExpr) { ... }
fn visit_expr_literal(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_identifier(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_data_ref(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_data_datetime_ref(
&mut self,
_expr: &Expr,
_span: Span,
) -> bool { ... }
fn visit_expr_data_relative_access(
&mut self,
_expr: &Expr,
_span: Span,
) -> bool { ... }
fn visit_expr_property_access(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_index_access(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_binary_op(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_fuzzy_comparison(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_unary_op(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_function_call(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_enum_constructor(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_time_ref(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_datetime(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_pattern_ref(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_conditional(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_object(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_array(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_list_comprehension(
&mut self,
_expr: &Expr,
_span: Span,
) -> bool { ... }
fn visit_expr_block(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_type_assertion(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_instance_of(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_function_expr(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_duration(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_spread(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_if(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_while(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_for(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_loop(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_let(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_assign(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_break(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_continue(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_return(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_method_call(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_match(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_unit(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_range(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_timeframe_context(
&mut self,
_expr: &Expr,
_span: Span,
) -> bool { ... }
fn visit_expr_try_operator(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_using_impl(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_simulation_call(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_window_expr(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_from_query(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_struct_literal(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_await(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_join(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_annotated(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_async_let(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_async_scope(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_comptime(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_comptime_for(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
fn visit_expr_reference(&mut self, _expr: &Expr, _span: Span) -> bool { ... }
}Expand description
A visitor trait for traversing Shape AST nodes.
All visit_* methods return bool:
true: continue visiting childrenfalse: skip children
The leave_* methods are called after visiting all children.
§Per-Variant Expression Methods
For finer granularity, override the per-variant expression methods
(e.g., visit_identifier, visit_binary_op, visit_method_call).
These are called from walk_expr after the coarse visit_expr hook.
Each receives the full &Expr node and its Span.
Provided Methods§
Sourcefn visit_expr(&mut self, _expr: &Expr) -> bool
fn visit_expr(&mut self, _expr: &Expr) -> bool
Called before visiting any expression. Return false to skip entirely
(neither per-variant method nor children will be visited).
Sourcefn leave_expr(&mut self, _expr: &Expr)
fn leave_expr(&mut self, _expr: &Expr)
Called after visiting an expression and all its children.
fn visit_stmt(&mut self, _stmt: &Statement) -> bool
fn leave_stmt(&mut self, _stmt: &Statement)
fn visit_item(&mut self, _item: &Item) -> bool
fn leave_item(&mut self, _item: &Item)
fn visit_function(&mut self, _func: &FunctionDef) -> bool
fn leave_function(&mut self, _func: &FunctionDef)
fn visit_literal(&mut self, _lit: &Literal) -> bool
fn leave_literal(&mut self, _lit: &Literal)
fn visit_block(&mut self, _block: &BlockExpr) -> bool
fn leave_block(&mut self, _block: &BlockExpr)
fn visit_expr_literal(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_identifier(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_data_ref(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_data_datetime_ref(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_data_relative_access(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_property_access(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_index_access(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_binary_op(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_fuzzy_comparison(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_unary_op(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_function_call(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_enum_constructor(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_time_ref(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_datetime(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_pattern_ref(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_conditional(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_object(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_array(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_list_comprehension(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_block(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_type_assertion(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_instance_of(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_function_expr(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_duration(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_spread(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_if(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_while(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_for(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_loop(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_let(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_assign(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_break(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_continue(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_return(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_method_call(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_match(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_unit(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_range(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_timeframe_context(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_try_operator(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_using_impl(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_simulation_call(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_window_expr(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_from_query(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_struct_literal(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_await(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_join(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_annotated(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_async_let(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_async_scope(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_comptime(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_comptime_for(&mut self, _expr: &Expr, _span: Span) -> bool
fn visit_expr_reference(&mut self, _expr: &Expr, _span: Span) -> bool
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.