Macro syn::parse_quote [] [src]

macro_rules! parse_quote {
    ($($tt:tt)*) => { ... };
}

Quasi-quotation macro that accepts input like the quote! macro but uses type inference to figure out a return type for those tokens.

The return type can be any syntax tree node that implements the Synom trait.

#[macro_use]
extern crate syn;

#[macro_use]
extern crate quote;

use syn::Stmt;

fn main() {
    let name = quote!(v);
    let ty = quote!(u8);

    let stmt: Stmt = parse_quote! {
        let #name: #ty = Default::default();
    };

    println!("{:#?}", stmt);
}

This macro is available if Syn is built with both the "parsing" and "printing" features.

Example

The following helper function adds a bound T: HeapSize to every type parameter T in the input generics.

// Add a bound `T: HeapSize` to every type parameter T.
fn add_trait_bounds(mut generics: Generics) -> Generics {
    for param in &mut generics.params {
        if let GenericParam::Type(ref mut type_param) = *param {
            type_param.bounds.push(parse_quote!(HeapSize));
        }
    }
    generics
}

Panics

Panics if the tokens fail to parse as the expected syntax tree type. The caller is responsible for ensuring that the input tokens are syntactically valid.