Available on crate feature
visit-mut only.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§
- Visit
Mut - Syntax tree traversal to mutate an exclusive borrow of a syntax tree in place.
Functions§
- visit_
abi_ mut deriveorfull - visit_
angle_ bracketed_ generic_ arguments_ mut deriveorfull - visit_
arm_ mut full - visit_
assoc_ const_ mut deriveorfull - visit_
assoc_ type_ mut deriveorfull - visit_
attr_ style_ mut deriveorfull - visit_
attribute_ mut deriveorfull - visit_
bare_ fn_ arg_ mut deriveorfull - visit_
bare_ variadic_ mut deriveorfull - visit_
bin_ op_ mut deriveorfull - visit_
block_ mut full - visit_
bound_ lifetimes_ mut deriveorfull - visit_
captured_ param_ mut full - visit_
const_ param_ mut deriveorfull - visit_
constraint_ mut deriveorfull - visit_
data_ enum_ mut derive - visit_
data_ mut derive - visit_
data_ struct_ mut derive - visit_
data_ union_ mut derive - visit_
derive_ input_ mut derive - visit_
expr_ array_ mut full - visit_
expr_ assign_ mut full - visit_
expr_ async_ mut full - visit_
expr_ await_ mut full - visit_
expr_ binary_ mut deriveorfull - visit_
expr_ block_ mut full - visit_
expr_ break_ mut full - visit_
expr_ call_ mut deriveorfull - visit_
expr_ cast_ mut deriveorfull - visit_
expr_ closure_ mut full - visit_
expr_ const_ mut full - visit_
expr_ continue_ mut full - visit_
expr_ field_ mut deriveorfull - visit_
expr_ for_ loop_ mut full - visit_
expr_ group_ mut deriveorfull - visit_
expr_ if_ mut full - visit_
expr_ index_ mut deriveorfull - visit_
expr_ infer_ mut full - visit_
expr_ let_ mut full - visit_
expr_ lit_ mut deriveorfull - visit_
expr_ loop_ mut full - visit_
expr_ macro_ mut deriveorfull - visit_
expr_ match_ mut full - visit_
expr_ method_ call_ mut deriveorfull - visit_
expr_ mut deriveorfull - visit_
expr_ paren_ mut deriveorfull - visit_
expr_ path_ mut deriveorfull - visit_
expr_ range_ mut full - visit_
expr_ raw_ addr_ mut full - visit_
expr_ reference_ mut deriveorfull - visit_
expr_ repeat_ mut full - visit_
expr_ return_ mut full - visit_
expr_ struct_ mut deriveorfull - visit_
expr_ try_ block_ mut full - visit_
expr_ try_ mut full - visit_
expr_ tuple_ mut deriveorfull - visit_
expr_ unary_ mut deriveorfull - visit_
expr_ unsafe_ mut full - visit_
expr_ while_ mut full - visit_
expr_ yield_ mut full - visit_
field_ mut deriveorfull - visit_
field_ mutability_ mut deriveorfull - visit_
field_ pat_ mut full - visit_
field_ value_ mut deriveorfull - visit_
fields_ mut deriveorfull - visit_
fields_ named_ mut deriveorfull - visit_
fields_ unnamed_ mut deriveorfull - visit_
file_ mut full - visit_
fn_ arg_ mut full - visit_
foreign_ item_ fn_ mut full - visit_
foreign_ item_ macro_ mut full - visit_
foreign_ item_ mut full - visit_
foreign_ item_ static_ mut full - visit_
foreign_ item_ type_ mut full - visit_
generic_ argument_ mut deriveorfull - visit_
generic_ param_ mut deriveorfull - visit_
generics_ mut deriveorfull - visit_
ident_ mut - visit_
impl_ item_ const_ mut full - visit_
impl_ item_ fn_ mut full - visit_
impl_ item_ macro_ mut full - visit_
impl_ item_ mut full - visit_
impl_ item_ type_ mut full - visit_
impl_ restriction_ mut full - visit_
index_ mut deriveorfull - visit_
item_ const_ mut full - visit_
item_ enum_ mut full - visit_
item_ extern_ crate_ mut full - visit_
item_ fn_ mut full - visit_
item_ foreign_ mod_ mut full - visit_
item_ impl_ mut full - visit_
item_ macro_ mut full - visit_
item_ mod_ mut full - visit_
item_ mut full - visit_
item_ static_ mut full - visit_
item_ struct_ mut full - visit_
item_ trait_ alias_ mut full - visit_
item_ trait_ mut full - visit_
item_ type_ mut full - visit_
item_ union_ mut full - visit_
item_ use_ mut full - visit_
label_ mut full - visit_
lifetime_ mut - visit_
lifetime_ param_ mut deriveorfull - 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 full - visit_
local_ mut full - visit_
macro_ delimiter_ mut deriveorfull - visit_
macro_ mut deriveorfull - visit_
member_ mut deriveorfull - visit_
meta_ list_ mut deriveorfull - visit_
meta_ mut deriveorfull - visit_
meta_ name_ value_ mut deriveorfull - visit_
parenthesized_ generic_ arguments_ mut deriveorfull - visit_
pat_ ident_ mut full - visit_
pat_ mut full - visit_
pat_ or_ mut full - visit_
pat_ paren_ mut full - visit_
pat_ reference_ mut full - visit_
pat_ rest_ mut full - visit_
pat_ slice_ mut full - visit_
pat_ struct_ mut full - visit_
pat_ tuple_ mut full - visit_
pat_ tuple_ struct_ mut full - visit_
pat_ type_ mut full - visit_
pat_ wild_ mut full - visit_
path_ arguments_ mut deriveorfull - visit_
path_ mut deriveorfull - visit_
path_ segment_ mut deriveorfull - visit_
pointer_ mutability_ mut full - visit_
precise_ capture_ mut full - visit_
predicate_ lifetime_ mut deriveorfull - visit_
predicate_ type_ mut deriveorfull - visit_
qself_ mut deriveorfull - visit_
range_ limits_ mut full - visit_
receiver_ mut full - visit_
return_ type_ mut deriveorfull - visit_
signature_ mut full - visit_
span_ mut - visit_
static_ mutability_ mut full - visit_
stmt_ macro_ mut full - visit_
stmt_ mut full - visit_
trait_ bound_ modifier_ mut deriveorfull - visit_
trait_ bound_ mut deriveorfull - visit_
trait_ item_ const_ mut full - visit_
trait_ item_ fn_ mut full - visit_
trait_ item_ macro_ mut full - visit_
trait_ item_ mut full - visit_
trait_ item_ type_ mut full - visit_
type_ array_ mut deriveorfull - visit_
type_ bare_ fn_ mut deriveorfull - visit_
type_ group_ mut deriveorfull - visit_
type_ impl_ trait_ mut deriveorfull - visit_
type_ infer_ mut deriveorfull - visit_
type_ macro_ mut deriveorfull - visit_
type_ mut deriveorfull - visit_
type_ never_ mut deriveorfull - visit_
type_ param_ bound_ mut deriveorfull - visit_
type_ param_ mut deriveorfull - visit_
type_ paren_ mut deriveorfull - visit_
type_ path_ mut deriveorfull - visit_
type_ ptr_ mut deriveorfull - visit_
type_ reference_ mut deriveorfull - visit_
type_ slice_ mut deriveorfull - visit_
type_ trait_ object_ mut deriveorfull - visit_
type_ tuple_ mut deriveorfull - visit_
un_ op_ mut deriveorfull - visit_
use_ glob_ mut full - visit_
use_ group_ mut full - visit_
use_ name_ mut full - visit_
use_ path_ mut full - visit_
use_ rename_ mut full - visit_
use_ tree_ mut full - visit_
variadic_ mut full - visit_
variant_ mut deriveorfull - visit_
vis_ restricted_ mut deriveorfull - visit_
visibility_ mut deriveorfull - visit_
where_ clause_ mut deriveorfull - visit_
where_ predicate_ mut deriveorfull