X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=clippy_lints%2Fsrc%2Fneg_multiply.rs;h=7b00879251f768c4d41b2cab35b4af212812587d;hb=b094bb1bd7f1cc702823c91ca509f338fedee24a;hp=d3b72372c2f7d6991afffe2e1d695ee914752e42;hpb=a16edf84ce17095ebeebccb5662441ef1c824905;p=rust.git diff --git a/clippy_lints/src/neg_multiply.rs b/clippy_lints/src/neg_multiply.rs index d3b72372c2f..7b00879251f 100644 --- a/clippy_lints/src/neg_multiply.rs +++ b/clippy_lints/src/neg_multiply.rs @@ -1,72 +1,53 @@ -// Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - - -use crate::rustc::hir::*; -use crate::rustc::lint::{LateContext, LateLintPass, LintArray, LintPass}; -use crate::rustc::{declare_tool_lint, lint_array}; +use clippy_utils::diagnostics::span_lint; use if_chain::if_chain; -use crate::syntax::source_map::{Span, Spanned}; +use rustc_hir::{BinOpKind, Expr, ExprKind, UnOp}; +use rustc_lint::{LateContext, LateLintPass}; +use rustc_session::{declare_lint_pass, declare_tool_lint}; +use rustc_span::source_map::Span; use crate::consts::{self, Constant}; -use crate::utils::span_lint; -/// **What it does:** Checks for multiplication by -1 as a form of negation. -/// -/// **Why is this bad?** It's more readable to just negate. -/// -/// **Known problems:** This only catches integers (for now). -/// -/// **Example:** -/// ```rust -/// x * -1 -/// ``` declare_clippy_lint! { + /// **What it does:** Checks for multiplication by -1 as a form of negation. + /// + /// **Why is this bad?** It's more readable to just negate. + /// + /// **Known problems:** This only catches integers (for now). + /// + /// **Example:** + /// ```ignore + /// x * -1 + /// ``` pub NEG_MULTIPLY, style, - "multiplying integers with -1" + "multiplying integers with `-1`" } -#[derive(Copy, Clone)] -pub struct NegMultiply; - -impl LintPass for NegMultiply { - fn get_lints(&self) -> LintArray { - lint_array!(NEG_MULTIPLY) - } -} +declare_lint_pass!(NegMultiply => [NEG_MULTIPLY]); #[allow(clippy::match_same_arms)] -impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NegMultiply { - fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, e: &'tcx Expr) { - if let ExprKind::Binary(Spanned { node: BinOpKind::Mul, .. }, ref l, ref r) = e.node { - match (&l.node, &r.node) { - (&ExprKind::Unary(..), &ExprKind::Unary(..)) => (), - (&ExprKind::Unary(UnNeg, ref lit), _) => check_mul(cx, e.span, lit, r), - (_, &ExprKind::Unary(UnNeg, ref lit)) => check_mul(cx, e.span, lit, l), - _ => (), +impl<'tcx> LateLintPass<'tcx> for NegMultiply { + fn check_expr(&mut self, cx: &LateContext<'tcx>, e: &'tcx Expr<'_>) { + if let ExprKind::Binary(ref op, ref left, ref right) = e.kind { + if BinOpKind::Mul == op.node { + match (&left.kind, &right.kind) { + (&ExprKind::Unary(..), &ExprKind::Unary(..)) => {}, + (&ExprKind::Unary(UnOp::Neg, ref lit), _) => check_mul(cx, e.span, lit, right), + (_, &ExprKind::Unary(UnOp::Neg, ref lit)) => check_mul(cx, e.span, lit, left), + _ => {}, + } } } } } -fn check_mul(cx: &LateContext<'_, '_>, span: Span, lit: &Expr, exp: &Expr) { +fn check_mul(cx: &LateContext<'_>, span: Span, lit: &Expr<'_>, exp: &Expr<'_>) { if_chain! { - if let ExprKind::Lit(ref l) = lit.node; - if let Constant::Int(val) = consts::lit_to_constant(&l.node, cx.tables.expr_ty(lit)); - if val == 1; - if cx.tables.expr_ty(exp).is_integral(); + if let ExprKind::Lit(ref l) = lit.kind; + if let Constant::Int(1) = consts::lit_to_constant(&l.node, cx.typeck_results().expr_ty_opt(lit)); + if cx.typeck_results().expr_ty(exp).is_integral(); then { - span_lint(cx, - NEG_MULTIPLY, - span, - "Negation by multiplying with -1"); + span_lint(cx, NEG_MULTIPLY, span, "negation by multiplying with `-1`"); } } }