42 releases (10 breaking)
Uses old Rust 2015
0.11.8 | Jan 19, 2017 |
---|---|
0.11.6 | Dec 20, 2016 |
0.11.4 | Nov 3, 2016 |
0.8.0 | Jul 29, 2016 |
0.1.1 | Nov 15, 2015 |
#1010 in Development tools
22 downloads per month
Used in crustacean-plugin
25KB
260 lines
easy-plugin
A compiler plugin that makes it easier to write compiler plugins.
Released under the Apache License 2.0.
Supported Configurations
- Nightly Rust channel (Documentation)
- Stable and beta Rust channels (Documentation)
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.
Note: If the syntex
crate is not in sync with the latest nightly, you may not be able to use
the latest version of this crate on the stable or beta Rust channels.
Example
The following usage of easy_plugin!
defines a plugin which accepts key-value pairs.
easy_plugin! {
// A key can either be an identifier or a string literal.
enum Key {
Ident { $key:ident },
Lit { $key:lit_str },
}
// 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))
}
}
#[plugin_registrar]
pub fn plugin_registrar(registry: &mut Registry) {
registry.register_macro("kvp", expand_kvp);
}
Dependencies
~0–1MB
~19K SLoC