]> git.lizzy.rs Git - rust.git/blobdiff - clippy_lints/src/unused_label.rs
rustup https://github.com/rust-lang/rust/pull/67455
[rust.git] / clippy_lints / src / unused_label.rs
index a67164becfbfd7bad077c9e9d16ea61be511b15a..60acbc1469f900e78459ffc70821b712c9a69983 100644 (file)
@@ -1,45 +1,39 @@
-use crate::rustc::lint::{LateContext, LateLintPass, LintArray, LintPass};
-use crate::rustc::{declare_tool_lint, lint_array};
-use crate::rustc::hir;
-use crate::rustc::hir::intravisit::{walk_expr, walk_fn, FnKind, NestedVisitorMap, Visitor};
-use crate::rustc_data_structures::fx::FxHashMap;
-use crate::syntax::ast;
-use crate::syntax::source_map::Span;
-use crate::syntax::symbol::LocalInternedString;
-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_data_structures::fx::FxHashMap;
+use rustc_session::declare_tool_lint;
+use syntax::source_map::Span;
+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<LocalInternedString, Span>,
+struct UnusedLabelVisitor<'a, 'tcx> {
+    labels: FxHashMap<Symbol, Span>,
     cx: &'a LateContext<'a, 'tcx>,
 }
 
-impl LintPass for UnusedLabel {
-    fn get_lints(&self) -> LintArray {
-        lint_array!(UNUSED_LABEL)
-    }
-}
+declare_lint_pass!(UnusedLabel => [UNUSED_LABEL]);
 
 impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnusedLabel {
     fn check_fn(
@@ -49,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;
         }
 
@@ -67,14 +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 {
-            hir::ExprKind::Break(destination, _) | hir::ExprKind::Continue(destination) => if let Some(label) = destination.label {
-                self.labels.remove(&label.ident.as_str());
+        match expr.kind {
+            hir::ExprKind::Break(destination, _) | hir::ExprKind::Continue(destination) => {
+                if let Some(label) = destination.label {
+                    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);
             },
             _ => (),
         }
@@ -82,6 +78,6 @@ fn visit_expr(&mut self, expr: &'tcx hir::Expr) {
         walk_expr(self, expr);
     }
     fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> {
-        NestedVisitorMap::All(&self.cx.tcx.hir)
+        NestedVisitorMap::All(&self.cx.tcx.hir())
     }
 }