3 #![feature(plugin_registrar, rustc_private)]
4 #![feature(box_syntax)]
6 extern crate rustc_driver;
7 extern crate rustc_hir;
9 extern crate rustc_lint;
11 extern crate rustc_session;
12 extern crate rustc_span;
13 extern crate rustc_ast;
15 use rustc_driver::plugin::Registry;
16 use rustc_lint::{LateContext, LateLintPass, LintArray, LintContext, LintPass};
17 use rustc_span::symbol::Symbol;
23 "crate not marked with #![crate_okay]"
26 declare_lint_pass!(Pass => [CRATE_NOT_OKAY]);
28 impl<'tcx> LateLintPass<'tcx> for Pass {
29 fn check_crate(&mut self, cx: &LateContext, krate: &rustc_hir::Crate) {
30 if !cx.sess().contains_name(&krate.item.attrs, Symbol::intern("crate_okay")) {
31 cx.lint(CRATE_NOT_OKAY, |lint| {
32 lint.build("crate is not marked with #![crate_okay]")
33 .set_span(krate.item.span)
41 pub fn plugin_registrar(reg: &mut Registry) {
42 reg.lint_store.register_lints(&[&CRATE_NOT_OKAY]);
43 reg.lint_store.register_late_pass(|| box Pass);