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 rustc when compiling a plugin crate.

load [
Experimental
]

Used by rustc when loading a plugin.

registry [
Experimental
]

Used by plugin crates to tell rustc about the plugins they provide.

Constants

DIAGNOSTICS [
Experimental
]