]> git.lizzy.rs Git - rust.git/blob - src/test/ui-fulldeps/auxiliary/issue-40001-plugin.rs
Add test for issue 63116
[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 extern crate syntax_expand;
9
10 use rustc_driver::plugin::Registry;
11 use syntax::attr;
12 use syntax_expand::base::*;
13 use syntax::feature_gate::AttributeType::Whitelisted;
14 use syntax::symbol::Symbol;
15
16 use rustc::hir;
17 use rustc::hir::intravisit;
18 use hir::Node;
19 use rustc::lint::{LateContext, LintPass, LintArray, LateLintPass, LintContext};
20 use syntax::source_map;
21
22 #[plugin_registrar]
23 pub fn plugin_registrar(reg: &mut Registry) {
24     reg.lint_store.register_lints(&[&MISSING_WHITELISTED_ATTR]);
25     reg.lint_store.register_late_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 }