]> git.lizzy.rs Git - rust.git/blob - src/test/ui-fulldeps/auxiliary/issue-40001-plugin.rs
Deprecate using rustc_plugin without the rustc_driver dylib.
[rust.git] / src / test / ui-fulldeps / auxiliary / issue-40001-plugin.rs
1 #![feature(box_syntax, plugin, plugin_registrar, rustc_private)]
2 #![crate_type = "dylib"]
3
4 #[macro_use]
5 extern crate rustc;
6 extern crate rustc_driver;
7 extern crate syntax;
8
9 use rustc_driver::plugin::Registry;
10 use syntax::attr;
11 use syntax::ext::base::*;
12 use syntax::feature_gate::AttributeType::Whitelisted;
13 use syntax::symbol::Symbol;
14
15 use rustc::hir;
16 use rustc::hir::intravisit;
17 use rustc::hir::map as hir_map;
18 use hir::Node;
19 use rustc::lint::{LateContext, LintPass, LintArray, LateLintPass, LintContext};
20 use rustc::ty;
21 use syntax::{ast, source_map};
22
23 #[plugin_registrar]
24 pub fn plugin_registrar(reg: &mut Registry) {
25     reg.register_late_lint_pass(box MissingWhitelistedAttrPass);
26     reg.register_attribute(Symbol::intern("whitelisted_attr"), Whitelisted);
27 }
28
29 declare_lint! {
30     MISSING_WHITELISTED_ATTR,
31     Deny,
32     "Checks for missing `whitelisted_attr` attribute"
33 }
34
35 declare_lint_pass!(MissingWhitelistedAttrPass => [MISSING_WHITELISTED_ATTR]);
36
37 impl<'a, 'tcx> LateLintPass<'a, 'tcx> for MissingWhitelistedAttrPass {
38     fn check_fn(&mut self,
39                 cx: &LateContext<'a, 'tcx>,
40                 _: intravisit::FnKind<'tcx>,
41                 _: &'tcx hir::FnDecl,
42                 _: &'tcx hir::Body,
43                 span: source_map::Span,
44                 id: hir::HirId) {
45
46         let item = match cx.tcx.hir().get(id) {
47             Node::Item(item) => item,
48             _ => cx.tcx.hir().expect_item(cx.tcx.hir().get_parent_item(id)),
49         };
50
51         if !attr::contains_name(&item.attrs, Symbol::intern("whitelisted_attr")) {
52             cx.span_lint(MISSING_WHITELISTED_ATTR, span,
53                          "Missing 'whitelisted_attr' attribute");
54         }
55     }
56 }