"rustc_interface",
"rustc_metadata",
"rustc_mir",
+ "rustc_plugin_impl",
"rustc_save_analysis",
"rustc_target",
"serialize",
"rustc_metadata",
"rustc_mir",
"rustc_passes",
- "rustc_plugin",
+ "rustc_plugin_impl",
"rustc_privacy",
"rustc_resolve",
"rustc_traits",
]
[[package]]
-name = "rustc_plugin"
+name = "rustc_plugin_impl"
version = "0.0.0"
dependencies = [
"rustc",
[librustc_privacy](https://github.com/rust-lang/rust/blob/master/src/librustc_privacy/error_codes.rs),
[librustc_resolve](https://github.com/rust-lang/rust/blob/master/src/librustc_resolve/error_codes.rs),
[librustc_codegen_llvm](https://github.com/rust-lang/rust/blob/master/src/librustc_codegen_llvm/error_codes.rs),
- [librustc_plugin](https://github.com/rust-lang/rust/blob/master/src/librustc_plugin/error_codes.rs),
+ [librustc_plugin_impl](https://github.com/rust-lang/rust/blob/master/src/librustc_plugin/error_codes.rs),
[librustc_typeck](https://github.com/rust-lang/rust/blob/master/src/librustc_typeck/error_codes.rs).
* Explanations have full markdown support. Use it, especially to highlight
code with backticks.
A plugin is a dynamic library crate with a designated *registrar* function that
registers extensions with `rustc`. Other crates can load these extensions using
the crate attribute `#![plugin(...)]`. See the
-`rustc_plugin` documentation for more about the
+`rustc_driver::plugin` documentation for more about the
mechanics of defining and loading a plugin.
If present, arguments passed as `#![plugin(foo(... args ...))]` are not
extern crate syntax;
extern crate syntax_pos;
extern crate rustc;
-extern crate rustc_plugin;
+extern crate rustc_driver;
use syntax::parse::token::{self, Token};
use syntax::tokenstream::TokenTree;
use syntax::ext::base::{ExtCtxt, MacResult, DummyResult, MacEager};
use syntax_pos::Span;
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
fn expand_rn(cx: &mut ExtCtxt, sp: Span, args: &[TokenTree])
-> Box<dyn MacResult + 'static> {
// Load rustc as a plugin to get macros
#[macro_use]
extern crate rustc;
-extern crate rustc_plugin;
+extern crate rustc_driver;
use rustc::lint::{EarlyContext, LintContext, LintPass, EarlyLintPass,
EarlyLintPassObject, LintArray};
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
use syntax::ast;
declare_lint!(TEST_LINT, Warn, "Warn about items named 'lintme'");
errors = { path = "../librustc_errors", package = "rustc_errors" }
rustc_metadata = { path = "../librustc_metadata" }
rustc_mir = { path = "../librustc_mir" }
+rustc_plugin_impl = { path = "../librustc_plugin" }
rustc_save_analysis = { path = "../librustc_save_analysis" }
rustc_codegen_utils = { path = "../librustc_codegen_utils" }
rustc_interface = { path = "../librustc_interface" }
#[macro_use]
extern crate log;
+pub extern crate rustc_plugin_impl as plugin;
+
use pretty::{PpMode, UserIdentifiedItem};
//use rustc_resolve as resolve;
rustc_typeck = { path = "../librustc_typeck" }
rustc_lint = { path = "../librustc_lint" }
rustc_errors = { path = "../librustc_errors" }
-rustc_plugin = { path = "../librustc_plugin" }
+rustc_plugin = { path = "../librustc_plugin", package = "rustc_plugin_impl" }
rustc_privacy = { path = "../librustc_privacy" }
rustc_resolve = { path = "../librustc_resolve" }
tempfile = "3.0.5"
//! This currently only contains the definitions and implementations
//! of most of the lints that `rustc` supports directly, it does not
//! contain the infrastructure for defining/registering lints. That is
-//! available in `rustc::lint` and `rustc_plugin` respectively.
+//! available in `rustc::lint` and `rustc_driver::plugin` respectively.
//!
//! ## Note
//!
[package]
authors = ["The Rust Project Developers"]
-name = "rustc_plugin"
+name = "rustc_plugin_impl"
version = "0.0.0"
build = false
edition = "2018"
[lib]
-name = "rustc_plugin"
+name = "rustc_plugin_impl"
path = "lib.rs"
doctest = false
--- /dev/null
+[package]
+authors = ["The Rust Project Developers"]
+name = "rustc_plugin"
+version = "0.0.0"
+build = false
+edition = "2018"
+
+[lib]
+name = "rustc_plugin"
+path = "lib.rs"
+doctest = false
+
+[dependencies]
+rustc_plugin_impl = { path = ".." }
--- /dev/null
+#![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
+#![feature(staged_api)]
+#![unstable(feature = "rustc_plugin", issue = "29597")]
+#![rustc_deprecated(since = "1.38.0", reason = "\
+ import this through `rustc_driver::plugin` instead to make TLS work correctly. \
+ See https://github.com/rust-lang/rust/issues/62717")]
+
+pub use rustc_plugin_impl::*;
//! #![feature(plugin_registrar)]
//! #![feature(rustc_private)]
//!
-//! extern crate rustc_plugin;
//! extern crate rustc_driver;
//! extern crate syntax;
//! extern crate syntax_pos;
//!
-//! use rustc_plugin::Registry;
+//! use rustc_driver::plugin::Registry;
//! use syntax::ext::base::{ExtCtxt, MacResult};
//! use syntax_pos::Span;
//! use syntax::tokenstream::TokenTree;
#![feature(rustc_private)]
extern crate rustc_driver;
-extern crate rustc_plugin;
extern crate syntax;
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
use syntax::ext::base::SyntaxExtension;
use syntax::feature_gate::AttributeType;
use syntax::symbol::Symbol;
#[macro_use]
extern crate rustc;
-extern crate rustc_plugin;
extern crate rustc_driver;
extern crate syntax;
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
use syntax::attr;
use syntax::ext::base::*;
use syntax::feature_gate::AttributeType::Whitelisted;
#![feature(box_syntax)]
#[macro_use] extern crate rustc;
-extern crate rustc_plugin;
extern crate rustc_driver;
extern crate syntax;
use rustc::lint::{LateContext, LintContext, LintPass, LateLintPass, LateLintPassObject, LintArray};
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
use rustc::hir;
use syntax::attr;
use syntax::symbol::Symbol;
#![feature(box_syntax)]
#[macro_use] extern crate rustc;
-extern crate rustc_plugin;
extern crate rustc_driver;
extern crate syntax;
use rustc::lint::{LateContext, LintContext, LintPass, LateLintPass, LateLintPassObject, LintArray};
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
use rustc::hir;
use syntax::attr;
use syntax::symbol::Symbol;
// Load rustc as a plugin to get macros.
#[macro_use]
extern crate rustc;
-extern crate rustc_plugin;
extern crate rustc_driver;
use rustc::hir;
use rustc::lint::{LateContext, LintContext, LintPass, LateLintPass, LateLintPassObject, LintArray};
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
declare_lint!(TEST_LINT, Warn, "Warn about items named 'lintme'");
// Load rustc as a plugin to get macros
#[macro_use]
extern crate rustc;
-extern crate rustc_plugin;
extern crate rustc_driver;
use rustc::lint::{EarlyContext, LintContext, LintPass, EarlyLintPass,
EarlyLintPassObject, LintArray};
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
use syntax::ast;
declare_lint!(TEST_LINT, Warn, "Warn about items named 'lintme'");
// Load rustc as a plugin to get macros
#[macro_use]
extern crate rustc;
-extern crate rustc_plugin;
extern crate rustc_driver;
use rustc::lint::{EarlyContext, EarlyLintPass, LintArray, LintContext, LintPass};
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
use syntax::ast;
declare_tool_lint!(pub clippy::TEST_LINT, Warn, "Warn about stuff");
declare_tool_lint!(
#![feature(rustc_private)]
extern crate rustc;
-extern crate rustc_plugin;
extern crate rustc_driver;
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
#[plugin_registrar]
pub fn plugin_registrar(reg: &mut Registry) {
#![feature(rustc_private)]
extern crate rustc;
-extern crate rustc_plugin;
extern crate rustc_driver;
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
#[plugin_registrar]
pub fn plugin_registrar(_reg: &mut Registry) {}
extern crate syntax;
extern crate rustc;
-extern crate rustc_plugin;
extern crate rustc_driver;
extern crate syntax_pos;
extern crate proc_macro;
#![feature(box_syntax, rustc_private)]
extern crate rustc;
-extern crate rustc_plugin;
extern crate rustc_driver;
use std::any::Any;
use std::cell::RefCell;
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
struct Foo {
foo: isize
extern crate syntax;
extern crate syntax_pos;
extern crate rustc;
-extern crate rustc_plugin;
extern crate rustc_driver;
use std::borrow::ToOwned;
use syntax::symbol::Symbol;
use syntax_pos::Span;
use syntax::tokenstream::TokenStream;
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
struct Expander {
args: Vec<ast::NestedMetaItem>,
#![feature(plugin_registrar, rustc_private)]
extern crate rustc;
-extern crate rustc_plugin;
extern crate rustc_driver;
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
#[plugin_registrar]
pub fn plugin_registrar(_: &mut Registry) {}
extern crate syntax;
extern crate syntax_pos;
extern crate rustc;
-extern crate rustc_plugin;
extern crate rustc_driver;
use syntax::parse::token::{self, Token};
use syntax::tokenstream::TokenTree;
use syntax::ext::base::{ExtCtxt, MacResult, DummyResult, MacEager};
use syntax_pos::Span;
-use rustc_plugin::Registry;
+use rustc_driver::plugin::Registry;
fn expand_rn(cx: &mut ExtCtxt, sp: Span, args: &[TokenTree])
-> Box<dyn MacResult + 'static> {