Crate rustc_plugin [−] [src]
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Infrastructure for compiler plugins.
Plugins are Rust libraries which extend the behavior of rustc
in various ways.
Plugin authors will use the Registry
type re-exported by
this module, along with its methods. The rest of the module
is for use by rustc
itself.
To define a plugin, build a dylib crate with a
#[plugin_registrar]
function:
#![crate_name = "myplugin"] #![crate_type = "dylib"] #![feature(plugin_registrar)] #![feature(rustc_private)] extern crate rustc_plugin; extern crate syntax; extern crate syntax_pos; use rustc_plugin::Registry; use syntax::ext::base::{ExtCtxt, MacResult}; use syntax_pos::Span; use syntax::tokenstream::TokenTree; #[plugin_registrar] pub fn plugin_registrar(reg: &mut Registry) { reg.register_macro("mymacro", expand_mymacro); } fn expand_mymacro(cx: &mut ExtCtxt, span: Span, tt: &[TokenTree]) -> Box<MacResult> { unimplemented!() }
WARNING: We currently don't check that the registrar function has the appropriate type!
To use a plugin while compiling another crate:
#![feature(plugin)] #![plugin(myplugin)]
See the plugin
feature of
the Unstable Book for more examples.
Re-exports
pub use self::registry::Registry; |
Modules
build |
[ Experimental ] Used by |
load |
[ Experimental ] Used by |
registry |
[ Experimental ] Used by plugin crates to tell |
Constants
DIAGNOSTICS |
[ Experimental ]
|