Historically this was done to accommodate bugs in lints, but there hasn't been a bug in a lint since this feature was added which the warnings affected. Let's completely purge warnings from all our stages by denying warnings in all stages. This will also assist in tracking down `stage0` code to be removed whenever we're updating the bootstrap compiler.
81 lines
2.3 KiB
Rust
81 lines
2.3 KiB
Rust
// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
|
|
// file at the top-level directory of this distribution and at
|
|
// http://rust-lang.org/COPYRIGHT.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
// option. This file may not be copied, modified, or distributed
|
|
// except according to those terms.
|
|
|
|
//! 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:
|
|
//!
|
|
//! ```rust,ignore
|
|
//! #![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:
|
|
//!
|
|
//! ```rust
|
|
//! #![feature(plugin)]
|
|
//! #![plugin(myplugin)]
|
|
//! ```
|
|
//!
|
|
//! See the [Plugins Chapter](../../book/compiler-plugins.html) of the book
|
|
//! for more examples.
|
|
|
|
#![crate_name = "rustc_plugin"]
|
|
#![unstable(feature = "rustc_private", issue = "27812")]
|
|
#![crate_type = "dylib"]
|
|
#![crate_type = "rlib"]
|
|
#![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
|
|
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
|
|
html_root_url = "https://doc.rust-lang.org/nightly/")]
|
|
#![deny(warnings)]
|
|
|
|
#![feature(staged_api)]
|
|
#![feature(rustc_diagnostic_macros)]
|
|
#![feature(rustc_private)]
|
|
|
|
#[macro_use] extern crate log;
|
|
#[macro_use] extern crate syntax;
|
|
#[macro_use] #[no_link] extern crate rustc_bitflags;
|
|
|
|
extern crate rustc;
|
|
extern crate rustc_back;
|
|
extern crate rustc_metadata;
|
|
extern crate syntax_pos;
|
|
extern crate rustc_errors as errors;
|
|
|
|
pub use self::registry::Registry;
|
|
|
|
pub mod diagnostics;
|
|
pub mod registry;
|
|
pub mod load;
|
|
pub mod build;
|