Expand description
Syntax tree traversal to mutate an exclusive borrow of a syntax tree in place.
Each method of the VisitMut trait is a hook that can be overridden
to customize the behavior when mutating the corresponding type of node.
By default, every method recursively visits the substructure of the
input by invoking the right visitor method of each of its fields.
pub trait VisitMut {
    /* ... */
    fn visit_expr_binary_mut(&mut self, node: &mut ExprBinary) {
        visit_expr_binary_mut(self, node);
    }
    /* ... */
}
pub fn visit_expr_binary_mut<V>(v: &mut V, node: &mut ExprBinary)
where
    V: VisitMut + ?Sized,
{
    for attr in &mut node.attrs {
        v.visit_attribute_mut(attr);
    }
    v.visit_expr_mut(&mut *node.left);
    v.visit_bin_op_mut(&mut node.op);
    v.visit_expr_mut(&mut *node.right);
}
/* ... */§Example
This mut visitor replace occurrences of u256 suffixed integer literals
like 999u256 with a macro invocation bigint::u256!(999).
// [dependencies]
// quote = "1.0"
// syn = { version = "2.0", features = ["full", "visit-mut"] }
use quote::quote;
use syn::visit_mut::{self, VisitMut};
use syn::{parse_quote, Expr, File, Lit, LitInt};
struct BigintReplace;
impl VisitMut for BigintReplace {
    fn visit_expr_mut(&mut self, node: &mut Expr) {
        if let Expr::Lit(expr) = &node {
            if let Lit::Int(int) = &expr.lit {
                if int.suffix() == "u256" {
                    let digits = int.base10_digits();
                    let unsuffixed: LitInt = syn::parse_str(digits).unwrap();
                    *node = parse_quote!(bigint::u256!(#unsuffixed));
                    return;
                }
            }
        }
        // Delegate to the default impl to visit nested expressions.
        visit_mut::visit_expr_mut(self, node);
    }
}
fn main() {
    let code = quote! {
        fn main() {
            let _ = 999u256;
        }
    };
    let mut syntax_tree: File = syn::parse2(code).unwrap();
    BigintReplace.visit_file_mut(&mut syntax_tree);
    println!("{}", quote!(#syntax_tree));
}Traits§
- VisitMut 
- Syntax tree traversal to mutate an exclusive borrow of a syntax tree in place.
Functions§
- visit_abi_ mut 
- visit_angle_ bracketed_ generic_ arguments_ mut 
- visit_arm_ mut 
- visit_assoc_ const_ mut 
- visit_assoc_ type_ mut 
- visit_attr_ style_ mut 
- visit_attribute_ mut 
- visit_bare_ fn_ arg_ mut 
- visit_bare_ variadic_ mut 
- visit_bin_ op_ mut 
- visit_block_ mut 
- visit_bound_ lifetimes_ mut 
- visit_captured_ param_ mut 
- visit_const_ param_ mut 
- visit_constraint_ mut 
- visit_data_ enum_ mut 
- visit_data_ mut 
- visit_data_ struct_ mut 
- visit_data_ union_ mut 
- visit_derive_ input_ mut 
- visit_expr_ array_ mut 
- visit_expr_ assign_ mut 
- visit_expr_ async_ mut 
- visit_expr_ await_ mut 
- visit_expr_ binary_ mut 
- visit_expr_ block_ mut 
- visit_expr_ break_ mut 
- visit_expr_ call_ mut 
- visit_expr_ cast_ mut 
- visit_expr_ closure_ mut 
- visit_expr_ const_ mut 
- visit_expr_ continue_ mut 
- visit_expr_ field_ mut 
- visit_expr_ for_ loop_ mut 
- visit_expr_ group_ mut 
- visit_expr_ if_ mut 
- visit_expr_ index_ mut 
- visit_expr_ infer_ mut 
- visit_expr_ let_ mut 
- visit_expr_ lit_ mut 
- visit_expr_ loop_ mut 
- visit_expr_ macro_ mut 
- visit_expr_ match_ mut 
- visit_expr_ method_ call_ mut 
- visit_expr_ mut 
- visit_expr_ paren_ mut 
- visit_expr_ path_ mut 
- visit_expr_ range_ mut 
- visit_expr_ raw_ addr_ mut 
- visit_expr_ reference_ mut 
- visit_expr_ repeat_ mut 
- visit_expr_ return_ mut 
- visit_expr_ struct_ mut 
- visit_expr_ try_ block_ mut 
- visit_expr_ try_ mut 
- visit_expr_ tuple_ mut 
- visit_expr_ unary_ mut 
- visit_expr_ unsafe_ mut 
- visit_expr_ while_ mut 
- visit_expr_ yield_ mut 
- visit_field_ mut 
- visit_field_ mutability_ mut 
- visit_field_ pat_ mut 
- visit_field_ value_ mut 
- visit_fields_ mut 
- visit_fields_ named_ mut 
- visit_fields_ unnamed_ mut 
- visit_file_ mut 
- visit_fn_ arg_ mut 
- visit_foreign_ item_ fn_ mut 
- visit_foreign_ item_ macro_ mut 
- visit_foreign_ item_ mut 
- visit_foreign_ item_ static_ mut 
- visit_foreign_ item_ type_ mut 
- visit_generic_ argument_ mut 
- visit_generic_ param_ mut 
- visit_generics_ mut 
- visit_ident_ mut 
- visit_impl_ item_ const_ mut 
- visit_impl_ item_ fn_ mut 
- visit_impl_ item_ macro_ mut 
- visit_impl_ item_ mut 
- visit_impl_ item_ type_ mut 
- visit_impl_ restriction_ mut 
- visit_index_ mut 
- visit_item_ const_ mut 
- visit_item_ enum_ mut 
- visit_item_ extern_ crate_ mut 
- visit_item_ fn_ mut 
- visit_item_ foreign_ mod_ mut 
- visit_item_ impl_ mut 
- visit_item_ macro_ mut 
- visit_item_ mod_ mut 
- visit_item_ mut 
- visit_item_ static_ mut 
- visit_item_ struct_ mut 
- visit_item_ trait_ alias_ mut 
- visit_item_ trait_ mut 
- visit_item_ type_ mut 
- visit_item_ union_ mut 
- visit_item_ use_ mut 
- visit_label_ mut 
- visit_lifetime_ mut 
- visit_lifetime_ param_ mut 
- visit_lit_ bool_ mut 
- visit_lit_ byte_ mut 
- visit_lit_ byte_ str_ mut 
- visit_lit_ char_ mut 
- visit_lit_ cstr_ mut 
- visit_lit_ float_ mut 
- visit_lit_ int_ mut 
- visit_lit_ mut 
- visit_lit_ str_ mut 
- visit_local_ init_ mut 
- visit_local_ mut 
- visit_macro_ delimiter_ mut 
- visit_macro_ mut 
- visit_member_ mut 
- visit_meta_ list_ mut 
- visit_meta_ mut 
- visit_meta_ name_ value_ mut 
- visit_parenthesized_ generic_ arguments_ mut 
- visit_pat_ ident_ mut 
- visit_pat_ mut 
- visit_pat_ or_ mut 
- visit_pat_ paren_ mut 
- visit_pat_ reference_ mut 
- visit_pat_ rest_ mut 
- visit_pat_ slice_ mut 
- visit_pat_ struct_ mut 
- visit_pat_ tuple_ mut 
- visit_pat_ tuple_ struct_ mut 
- visit_pat_ type_ mut 
- visit_pat_ wild_ mut 
- visit_path_ arguments_ mut 
- visit_path_ mut 
- visit_path_ segment_ mut 
- visit_pointer_ mutability_ mut 
- visit_precise_ capture_ mut 
- visit_predicate_ lifetime_ mut 
- visit_predicate_ type_ mut 
- visit_qself_ mut 
- visit_range_ limits_ mut 
- visit_receiver_ mut 
- visit_return_ type_ mut 
- visit_signature_ mut 
- visit_span_ mut 
- visit_static_ mutability_ mut 
- visit_stmt_ macro_ mut 
- visit_stmt_ mut 
- visit_trait_ bound_ modifier_ mut 
- visit_trait_ bound_ mut 
- visit_trait_ item_ const_ mut 
- visit_trait_ item_ fn_ mut 
- visit_trait_ item_ macro_ mut 
- visit_trait_ item_ mut 
- visit_trait_ item_ type_ mut 
- visit_type_ array_ mut 
- visit_type_ bare_ fn_ mut 
- visit_type_ group_ mut 
- visit_type_ impl_ trait_ mut 
- visit_type_ infer_ mut 
- visit_type_ macro_ mut 
- visit_type_ mut 
- visit_type_ never_ mut 
- visit_type_ param_ bound_ mut 
- visit_type_ param_ mut 
- visit_type_ paren_ mut 
- visit_type_ path_ mut 
- visit_type_ ptr_ mut 
- visit_type_ reference_ mut 
- visit_type_ slice_ mut 
- visit_type_ trait_ object_ mut 
- visit_type_ tuple_ mut 
- visit_un_ op_ mut 
- visit_use_ glob_ mut 
- visit_use_ group_ mut 
- visit_use_ name_ mut 
- visit_use_ path_ mut 
- visit_use_ rename_ mut 
- visit_use_ tree_ mut 
- visit_variadic_ mut 
- visit_variant_ mut 
- visit_vis_ restricted_ mut 
- visit_visibility_ mut 
- visit_where_ clause_ mut 
- visit_where_ predicate_ mut