A compiler plugin that makes it easier to write compiler plugins.
Released under the Apache License 2.0.
By default, easy-plugin expects to be compiled by a nightly Rust compiler. easy-plugin is also
supported on the stable and beta channels of Rust with
syntex. To enable this support, enable the stable Cargo
feature.
The following usage of easy_plugin! defines a plugin which accepts key-value pairs.
```rust easyplugin! { // A key can either be an identifier or a string literal. enum Key { Ident { $key:ident }, Lit { $key:litstr }, }
// A key-value pair is a key followed by `=>` and any expression.
struct KeyValuePair {
    $key:$Key => $value:expr
}
// This plugin accepts one or more comma-separated key-value pairs.
struct Arguments {
    $($kvp:$KeyValuePair), + $(,)?
}
pub fn expand_kvp(
    _: &mut ExtCtxt, span: Span, arguments: Arguments
) -> PluginResult<Box<MacResult>> {
    for KeyValuePair { key, value } in arguments.kvp {
        match key {
            Key::Ident { key } => println!("Key:   {}", key.node),
            Key::Lit { key } => println!("Key:   {:?}", key.0),
        }
        println!("Value: {}", pprust::expr_to_string(&value));
    }
    Ok(DummyResult::any(span))
}
}
pub fn pluginregistrar(registry: &mut Registry) { registry.registermacro("kvp", expand_kvp); } ```