quasi_macros 0.7.0

A quasi-quoting macro system
#![feature(plugin, rustc_private)]
#![plugin(quasi_macros)]

extern crate quasi;
extern crate syntax;

use syntax::codemap;
use syntax::ext::base::ExtCtxt;
use syntax::ext::expand;
use syntax::parse;
use syntax::print::pprust;

fn make_ext_ctxt(sess: &parse::ParseSess) -> ExtCtxt {
    let info = codemap::ExpnInfo {
        call_site: codemap::DUMMY_SP,
        callee: codemap::NameAndSpan {
            name: "test".to_string(),
            format: codemap::MacroAttribute,
            allow_internal_unstable: false,
            span: None
        }
    };

    let cfg = Vec::new();
    let ecfg = expand::ExpansionConfig::default(String::new());

    let mut cx = ExtCtxt::new(&sess, cfg, ecfg);
    cx.bt_push(info);

    cx
}

fn main() {
    let sess = parse::ParseSess::new();
    let cx = make_ext_ctxt(&sess);
    let x = 1;
    let e = quote_expr!(&cx, 1 + $x);
    println!("{}", pprust::expr_to_string(&e));
}