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 let attrs
= cx
.tcx
.hir().attrs(rustc_hir
::CRATE_HIR_ID
);
31 if !cx
.sess().contains_name(attrs
, Symbol
::intern("crate_okay")) {
32 cx
.lint(CRATE_NOT_OKAY
, |lint
| {
33 lint
.build("crate is not marked with #![crate_okay]")
34 .set_span(krate
.item
.span
)
42 pub fn plugin_registrar(reg
: &mut Registry
) {
43 reg
.lint_store
.register_lints(&[&CRATE_NOT_OKAY
]);
44 reg
.lint_store
.register_late_pass(|| box Pass
);