use rustc::session::{early_error, early_warn};
use rustc::lint::Lint;
use rustc::lint;
+use rustc::middle::cstore::MetadataLoader;
use rustc::hir::def_id::LOCAL_CRATE;
use rustc::ty::TyCtxt;
use rustc::util::common::{set_time_depth, time, print_time_passes_entry, ErrorReported};
use rustc_metadata::locator;
-use rustc_metadata::cstore::CStore;
use rustc_codegen_utils::codegen_backend::CodegenBackend;
use rustc_interface::interface;
use rustc_interface::util::get_codegen_sysroot;
stderr: None,
crate_name: None,
lint_caps: Default::default(),
+ register_lints: None,
};
callbacks.config(&mut config);
config
interface::run_compiler(config, |compiler| {
let sopts = &compiler.session().opts;
if sopts.describe_lints {
+ let lint_store = rustc_lint::new_lint_store(
+ sopts.debugging_opts.no_interleave_lints,
+ compiler.session().unstable_options(),
+ );
describe_lints(
compiler.session(),
- &*compiler.session().lint_store.borrow(),
+ &lint_store,
false
);
return;
stderr: None,
crate_name: None,
lint_caps: Default::default(),
+ register_lints: None,
};
callbacks.config(&mut config);
compiler.output_file(),
).and_then(|| RustcDefaultCalls::list_metadata(
sess,
- compiler.cstore(),
+ &*compiler.codegen_backend().metadata_loader(),
&matches,
compiler.input()
));
return sess.compile_status();
}
- compiler.register_plugins()?;
+ {
+ let (_, _, lint_store) = &*compiler.register_plugins()?.peek();
- // Lint plugins are registered; now we can process command line flags.
- if sess.opts.describe_lints {
- describe_lints(&sess, &sess.lint_store.borrow(), true);
- return sess.compile_status();
+ // Lint plugins are registered; now we can process command line flags.
+ if sess.opts.describe_lints {
+ describe_lints(&sess, &lint_store, true);
+ return sess.compile_status();
+ }
}
compiler.expansion()?;
impl RustcDefaultCalls {
pub fn list_metadata(sess: &Session,
- cstore: &CStore,
+ metadata_loader: &dyn MetadataLoader,
matches: &getopts::Matches,
input: &Input)
-> Compilation {
let mut v = Vec::new();
locator::list_file_metadata(&sess.target.target,
path,
- cstore,
+ metadata_loader,
&mut v)
.unwrap();
println!("{}", String::from_utf8(v).unwrap());
");
- fn sort_lints(sess: &Session, lints: Vec<(&'static Lint, bool)>) -> Vec<&'static Lint> {
- let mut lints: Vec<_> = lints.into_iter().map(|(x, _)| x).collect();
+ fn sort_lints(sess: &Session, mut lints: Vec<&'static Lint>) -> Vec<&'static Lint> {
// The sort doesn't case-fold but it's doubtful we care.
lints.sort_by_cached_key(|x: &&Lint| (x.default_level(sess), x.name));
lints
let (plugin, builtin): (Vec<_>, _) = lint_store.get_lints()
.iter()
.cloned()
- .partition(|&(_, p)| p);
+ .partition(|&lint| lint.is_plugin);
let plugin = sort_lints(sess, plugin);
let builtin = sort_lints(sess, builtin);