Module rustc::pluginExperimental [-]  [+] [src]

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)]

extern crate rustc;

use rustc::plugin::Registry;

#[plugin_registrar]
pub fn plugin_registrar(reg: &mut Registry) {
    reg.register_macro("mymacro", expand_mymacro);
}

fn expand_mymacro(...) {  // details elided

WARNING: We currently don't check that the registrar function has the appropriate type!

To use a plugin while compiling another crate:

#![feature(phase)]

#[phase(plugin)]
extern crate myplugin;

If you also need the plugin crate available at runtime, use phase(plugin, link).

See the compiler plugin guide for more examples.

Reexports

pub use self::registry::Registry;

Modules

build

Used by rustc when compiling a plugin crate.

load

Used by rustc when loading a plugin.

registry

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