1 use clippy_utils::diagnostics::span_lint_and_then;
2 use clippy_utils::sugg::Sugg;
3 use rustc_ast::ast::LitKind;
4 use rustc_errors::Applicability;
5 use rustc_hir::{BinOpKind, Expr, ExprKind};
6 use rustc_lint::LateContext;
8 use super::VERBOSE_BIT_MASK;
10 pub(super) fn check<'tcx>(
11 cx: &LateContext<'tcx>,
15 right: &'tcx Expr<'_>,
18 if BinOpKind::Eq == op
19 && let ExprKind::Binary(op1, left1, right1) = &left.kind
20 && BinOpKind::BitAnd == op1.node
21 && let ExprKind::Lit(lit) = &right1.kind
22 && let LitKind::Int(n, _) = lit.node
23 && let ExprKind::Lit(lit1) = &right.kind
24 && let LitKind::Int(0, _) = lit1.node
25 && n.leading_zeros() == n.count_zeros()
26 && n > u128::from(threshold)
32 "bit mask could be simplified with a call to `trailing_zeros`",
34 let sugg = Sugg::hir(cx, left1, "...").maybe_par();
38 format!("{}.trailing_zeros() >= {}", sugg, n.count_ones()),
39 Applicability::MaybeIncorrect,