easy-plugin 0.6.2

A compiler plugin that makes it easier to write compiler plugins.
use easy_plugin::{PluginResult};
use easy_plugin::convert::*;

use syntax::codemap::{Span};
use syntax::ext::base::{DummyResult, ExtCtxt, MacResult};

easy_plugin! {
    struct Arguments {
        $attr_list:attr
        $expr_addr_of:expr
        $item_const:item
        $lit_bool:lit
        $meta_list:meta
        $pat_ident:pat
        $stmt_decl:stmt;
        $ty_bare_fn:ty
        $tok_bin_op:tok
        $tt_delimited:tt
    }

    pub fn expand_convert(
        _: &mut ExtCtxt, span: Span, arguments: Arguments
    ) -> PluginResult<Box<MacResult>> {
        attr_to_list(&arguments.attr_list).unwrap();
        expr_to_addr_of(&arguments.expr_addr_of).unwrap();
        item_to_const(&arguments.item_const).unwrap();
        lit_to_bool(&arguments.lit_bool).unwrap();
        meta_to_list(&arguments.meta_list).unwrap();
        pat_to_ident(&arguments.pat_ident).unwrap();
        stmt_to_decl(&arguments.stmt_decl).unwrap();
        ty_to_bare_fn(&arguments.ty_bare_fn).unwrap();
        tok_to_bin_op(&arguments.tok_bin_op).unwrap();
        tt_to_delimited(&arguments.tt_delimited).unwrap();
        Ok(DummyResult::any(span))
    }
}

#[test]
fn test_convert() {
    let arguments = r#"
        #[cfg(target_os="windows")]
        &foo
        const BAR: i32 = 322;
        true
        cfg(target_os="windows")
        baz
        let b = 322;
        fn(i32, i32) -> i32
        +
        (1, 2, 3)
    "#;

    super::with_tts(arguments, |c, s, a| {
        expand_convert(c, s, a);
    });
}