]> git.lizzy.rs Git - rust.git/blob - src/librustc_plugin/lib.rs
introduce Guard enum
[rust.git] / src / librustc_plugin / lib.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.
4 //
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.
10
11 //! Infrastructure for compiler plugins.
12 //!
13 //! Plugins are Rust libraries which extend the behavior of `rustc`
14 //! in various ways.
15 //!
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.
19 //!
20 //! To define a plugin, build a dylib crate with a
21 //! `#[plugin_registrar]` function:
22 //!
23 //! ```no_run
24 //! #![crate_name = "myplugin"]
25 //! #![crate_type = "dylib"]
26 //! #![feature(plugin_registrar)]
27 //! #![feature(rustc_private)]
28 //!
29 //! extern crate rustc_plugin;
30 //! extern crate syntax;
31 //! extern crate syntax_pos;
32 //!
33 //! use rustc_plugin::Registry;
34 //! use syntax::ext::base::{ExtCtxt, MacResult};
35 //! use syntax_pos::Span;
36 //! use syntax::tokenstream::TokenTree;
37 //!
38 //! #[plugin_registrar]
39 //! pub fn plugin_registrar(reg: &mut Registry) {
40 //!     reg.register_macro("mymacro", expand_mymacro);
41 //! }
42 //!
43 //! fn expand_mymacro(cx: &mut ExtCtxt, span: Span, tt: &[TokenTree]) -> Box<MacResult> {
44 //!     unimplemented!()
45 //! }
46 //!
47 //! # fn main() {}
48 //! ```
49 //!
50 //! WARNING: We currently don't check that the registrar function
51 //! has the appropriate type!
52 //!
53 //! To use a plugin while compiling another crate:
54 //!
55 //! ```rust
56 //! #![feature(plugin)]
57 //! #![plugin(myplugin)]
58 //! ```
59 //!
60 //! See the [`plugin` feature](../unstable-book/language-features/plugin.html) of
61 //! the Unstable Book for more examples.
62
63 #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
64        html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
65        html_root_url = "https://doc.rust-lang.org/nightly/")]
66
67 #![cfg_attr(not(stage0), feature(nll))]
68 #![feature(rustc_diagnostic_macros)]
69
70 #[macro_use] extern crate syntax;
71
72 extern crate rustc;
73 extern crate rustc_metadata;
74 extern crate syntax_pos;
75 extern crate rustc_errors as errors;
76
77 pub use self::registry::Registry;
78
79 mod diagnostics;
80 pub mod registry;
81 pub mod load;
82 pub mod build;
83
84 __build_diagnostic_array! { librustc_plugin, DIAGNOSTICS }