X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=clippy_lints%2Fsrc%2Fmut_mut.rs;h=610152a217f1e3dac93028b9b41a945f37b92468;hb=b1786f62edf8bc20de33a36973ffb307a13962f5;hp=858ad50e10439c9799b8a7855c2449716df71209;hpb=4fa498a3eb63071a1492b319b1673d585db66a28;p=rust.git diff --git a/clippy_lints/src/mut_mut.rs b/clippy_lints/src/mut_mut.rs index 858ad50e104..610152a217f 100644 --- a/clippy_lints/src/mut_mut.rs +++ b/clippy_lints/src/mut_mut.rs @@ -1,21 +1,25 @@ -use crate::utils::{higher, span_lint}; -use rustc::hir; -use rustc::hir::intravisit; -use rustc::lint::{in_external_macro, LateContext, LateLintPass, LintArray, LintContext, LintPass}; -use rustc::ty; -use rustc::{declare_lint_pass, declare_tool_lint}; +use clippy_utils::diagnostics::span_lint; +use clippy_utils::higher; +use rustc_hir as hir; +use rustc_hir::intravisit; +use rustc_lint::{LateContext, LateLintPass, LintContext}; +use rustc_middle::hir::map::Map; +use rustc_middle::lint::in_external_macro; +use rustc_middle::ty; +use rustc_session::{declare_lint_pass, declare_tool_lint}; declare_clippy_lint! { - /// **What it does:** Checks for instances of `mut mut` references. + /// ### What it does + /// Checks for instances of `mut mut` references. /// - /// **Why is this bad?** Multiple `mut`s don't add anything meaningful to the + /// ### Why is this bad? + /// Multiple `mut`s don't add anything meaningful to the /// source. This is either a copy'n'paste error, or it shows a fundamental /// misunderstanding of references. /// - /// **Known problems:** None. - /// - /// **Example:** + /// ### Example /// ```rust + /// # let mut y = 1; /// let x = &mut &mut y; /// ``` pub MUT_MUT, @@ -25,29 +29,31 @@ declare_lint_pass!(MutMut => [MUT_MUT]); -impl<'a, 'tcx> LateLintPass<'a, 'tcx> for MutMut { - fn check_block(&mut self, cx: &LateContext<'a, 'tcx>, block: &'tcx hir::Block) { +impl<'tcx> LateLintPass<'tcx> for MutMut { + fn check_block(&mut self, cx: &LateContext<'tcx>, block: &'tcx hir::Block<'_>) { intravisit::walk_block(&mut MutVisitor { cx }, block); } - fn check_ty(&mut self, cx: &LateContext<'a, 'tcx>, ty: &'tcx hir::Ty) { - use rustc::hir::intravisit::Visitor; + fn check_ty(&mut self, cx: &LateContext<'tcx>, ty: &'tcx hir::Ty<'_>) { + use rustc_hir::intravisit::Visitor; MutVisitor { cx }.visit_ty(ty); } } pub struct MutVisitor<'a, 'tcx> { - cx: &'a LateContext<'a, 'tcx>, + cx: &'a LateContext<'tcx>, } impl<'a, 'tcx> intravisit::Visitor<'tcx> for MutVisitor<'a, 'tcx> { - fn visit_expr(&mut self, expr: &'tcx hir::Expr) { + type Map = Map<'tcx>; + + fn visit_expr(&mut self, expr: &'tcx hir::Expr<'_>) { if in_external_macro(self.cx.sess(), expr.span) { return; } - if let Some((_, arg, body)) = higher::for_loop(expr) { + if let Some(higher::ForLoop { arg, body, .. }) = higher::ForLoop::hir(expr) { // A `for` loop lowers to: // ```rust // match ::std::iter::Iterator::next(&mut iter) { @@ -56,15 +62,15 @@ fn visit_expr(&mut self, expr: &'tcx hir::Expr) { // Let's ignore the generated code. intravisit::walk_expr(self, arg); intravisit::walk_expr(self, body); - } else if let hir::ExprKind::AddrOf(hir::MutMutable, ref e) = expr.node { - if let hir::ExprKind::AddrOf(hir::MutMutable, _) = e.node { + } else if let hir::ExprKind::AddrOf(hir::BorrowKind::Ref, hir::Mutability::Mut, e) = expr.kind { + if let hir::ExprKind::AddrOf(hir::BorrowKind::Ref, hir::Mutability::Mut, _) = e.kind { span_lint( self.cx, MUT_MUT, expr.span, "generally you want to avoid `&mut &mut _` if possible", ); - } else if let ty::Ref(_, _, hir::MutMutable) = self.cx.tables.expr_ty(e).sty { + } else if let ty::Ref(_, _, hir::Mutability::Mut) = self.cx.typeck_results().expr_ty(e).kind() { span_lint( self.cx, MUT_MUT, @@ -75,21 +81,22 @@ fn visit_expr(&mut self, expr: &'tcx hir::Expr) { } } - fn visit_ty(&mut self, ty: &'tcx hir::Ty) { + fn visit_ty(&mut self, ty: &'tcx hir::Ty<'_>) { if let hir::TyKind::Rptr( _, hir::MutTy { - ty: ref pty, - mutbl: hir::MutMutable, + ty: pty, + mutbl: hir::Mutability::Mut, }, - ) = ty.node + ) = ty.kind { if let hir::TyKind::Rptr( _, hir::MutTy { - mutbl: hir::MutMutable, .. + mutbl: hir::Mutability::Mut, + .. }, - ) = pty.node + ) = pty.kind { span_lint( self.cx, @@ -102,7 +109,7 @@ fn visit_ty(&mut self, ty: &'tcx hir::Ty) { intravisit::walk_ty(self, ty); } - fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, 'tcx> { + fn nested_visit_map(&mut self) -> intravisit::NestedVisitorMap { intravisit::NestedVisitorMap::None } }