syn_query 0.1.0

implement Trait Syn::Visit
Documentation

implement Trait Syn::Visit

Example

extern crate proc_macro2;
extern crate syn;
extern crate syn_query;
use syn::{Ident,ExprStruct,FieldValue};
use proc_macro2::Span;
fn main() {
    let s="Point { x: 1, y: 1 }";
    let st:ExprStruct=syn::parse_str(s).unwrap();
    let qr = syn_query::query::<Ident,_>(st.clone());
    assert_eq!(qr[0].data, Ident::new("Point",Span::call_site()));
    assert_eq!(qr[0].path, vec![0i64,0i64,0i64]);
    assert_eq!(qr[1].data, Ident::new("x",Span::call_site()));
    assert_eq!(qr[1].path, vec![2i64,0i64,0i64]);
    assert_eq!(qr[2].data, Ident::new("y",Span::call_site()));
    assert_eq!(qr[2].path, vec![3i64,0i64,0i64]);
    let qr = syn_query::query::<FieldValue,_>(st.clone()).filter(|x| x.path[0] == 3).query::<Ident>();
    assert_eq!(qr[0].data, Ident::new("y",Span::call_site()));
    assert_eq!(qr[0].path, vec![3i64,0i64,0i64]);
}