]>
git.proxmox.com Git - rustc.git/blob - src/librustc/plugin/mod.rs
1 // Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 //! Infrastructure for compiler plugins.
13 //! Plugins are Rust libraries which extend the behavior of `rustc`
16 //! Plugin authors will use the `Registry` type re-exported by
17 //! this module, along with its methods. The rest of the module
18 //! is for use by `rustc` itself.
20 //! To define a plugin, build a dylib crate with a
21 //! `#[plugin_registrar]` function:
24 //! #![crate_name = "myplugin"]
25 //! #![crate_type = "dylib"]
26 //! #![feature(plugin_registrar)]
28 //! extern crate rustc;
30 //! use rustc::plugin::Registry;
32 //! #[plugin_registrar]
33 //! pub fn plugin_registrar(reg: &mut Registry) {
34 //! reg.register_macro("mymacro", expand_mymacro);
37 //! fn expand_mymacro(...) { // details elided
40 //! WARNING: We currently don't check that the registrar function
41 //! has the appropriate type!
43 //! To use a plugin while compiling another crate:
46 //! #![feature(plugin)]
47 //! #![plugin(myplugin)]
50 //! See the [Plugins Chapter](../../book/compiler-plugins.html) of the book
51 //! for more examples.
53 pub use self::registry
::Registry
;