X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=clippy_lints%2Fsrc%2Funused_label.rs;h=60acbc1469f900e78459ffc70821b712c9a69983;hb=e5a5b0a0774625eebbe7b29c67b49dc6431544d1;hp=29d76a051186017a70714f97043a089571af6b11;hpb=13421e3945a28dad49226c4d08986eaacd1033d9;p=rust.git diff --git a/clippy_lints/src/unused_label.rs b/clippy_lints/src/unused_label.rs index 29d76a05118..60acbc1469f 100644 --- a/clippy_lints/src/unused_label.rs +++ b/clippy_lints/src/unused_label.rs @@ -1,49 +1,39 @@ -use crate::utils::{in_macro, span_lint}; +use crate::utils::span_lint; +use rustc::declare_lint_pass; use rustc::hir; use rustc::hir::intravisit::{walk_expr, walk_fn, FnKind, NestedVisitorMap, Visitor}; use rustc::lint::{LateContext, LateLintPass, LintArray, LintPass}; -use rustc::{declare_tool_lint, lint_array}; use rustc_data_structures::fx::FxHashMap; -use syntax::ast; +use rustc_session::declare_tool_lint; use syntax::source_map::Span; -use syntax::symbol::LocalInternedString; +use syntax::symbol::Symbol; -/// **What it does:** Checks for unused labels. -/// -/// **Why is this bad?** Maybe the label should be used in which case there is -/// an error in the code or it should be removed. -/// -/// **Known problems:** Hopefully none. -/// -/// **Example:** -/// ```rust,ignore -/// fn unused_label() { -/// 'label: for i in 1..2 { -/// if i > 4 { continue } -/// } -/// ``` declare_clippy_lint! { + /// **What it does:** Checks for unused labels. + /// + /// **Why is this bad?** Maybe the label should be used in which case there is + /// an error in the code or it should be removed. + /// + /// **Known problems:** Hopefully none. + /// + /// **Example:** + /// ```rust,ignore + /// fn unused_label() { + /// 'label: for i in 1..2 { + /// if i > 4 { continue } + /// } + /// ``` pub UNUSED_LABEL, complexity, "unused labels" } -pub struct UnusedLabel; - -struct UnusedLabelVisitor<'a, 'tcx: 'a> { - labels: FxHashMap, +struct UnusedLabelVisitor<'a, 'tcx> { + labels: FxHashMap, cx: &'a LateContext<'a, 'tcx>, } -impl LintPass for UnusedLabel { - fn get_lints(&self) -> LintArray { - lint_array!(UNUSED_LABEL) - } - - fn name(&self) -> &'static str { - "UnusedLable" - } -} +declare_lint_pass!(UnusedLabel => [UNUSED_LABEL]); impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnusedLabel { fn check_fn( @@ -53,9 +43,9 @@ fn check_fn( decl: &'tcx hir::FnDecl, body: &'tcx hir::Body, span: Span, - fn_id: ast::NodeId, + fn_id: hir::HirId, ) { - if in_macro(span) { + if span.from_expansion() { return; } @@ -71,16 +61,16 @@ fn check_fn( } } -impl<'a, 'tcx: 'a> Visitor<'tcx> for UnusedLabelVisitor<'a, 'tcx> { +impl<'a, 'tcx> Visitor<'tcx> for UnusedLabelVisitor<'a, 'tcx> { fn visit_expr(&mut self, expr: &'tcx hir::Expr) { - match expr.node { + match expr.kind { hir::ExprKind::Break(destination, _) | hir::ExprKind::Continue(destination) => { if let Some(label) = destination.label { - self.labels.remove(&label.ident.as_str()); + self.labels.remove(&label.ident.name); } }, - hir::ExprKind::Loop(_, Some(label), _) | hir::ExprKind::While(_, _, Some(label)) => { - self.labels.insert(label.ident.as_str(), expr.span); + hir::ExprKind::Loop(_, Some(label), _) => { + self.labels.insert(label.ident.name, expr.span); }, _ => (), }