42 个版本 (10 个重大更改)
使用旧 Rust 2015
0.11.8 | 2017年1月19日 |
---|---|
0.11.6 | 2016年12月20日 |
0.11.4 | 2016年11月3日 |
0.8.0 | 2016年7月29日 |
0.1.1 | 2015年11月15日 |
#847 在 开发工具
25KB
260 代码行
easy-plugin
一个使编写编译器插件更加容易的编译器插件。
在 Apache License 2.0 许可协议下发布。
支持配置
默认情况下,easy-plugin
需要使用 nightly Rust 编译器进行编译。 easy-plugin
也支持 Rust 的稳定和 beta 频道,使用 syntex
。要启用此支持,请启用 stable
Cargo 功能。
注意: 如果 syntex
crate 与最新 nightly 版本不一致,您可能无法在稳定或 beta Rust 频道上使用此 crate 的最新版本。
示例
以下使用 easy_plugin!
的示例定义了一个接受键值对的插件。
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);
}
依赖项
~0–1MB
~19K SLoC