[unused_enumerate_index
]: Use if-let chain
This commit is contained in:
parent
93f0a9a91f
commit
43f4ec3b13
@ -1,62 +1,39 @@
|
|||||||
use super::UNUSED_ENUMERATE_INDEX;
|
use super::UNUSED_ENUMERATE_INDEX;
|
||||||
use clippy_utils::diagnostics::{multispan_sugg, span_lint_and_then};
|
use clippy_utils::diagnostics::{multispan_sugg, span_lint_and_then};
|
||||||
use clippy_utils::source::snippet;
|
use clippy_utils::source::snippet;
|
||||||
use clippy_utils::{pat_is_wild, sugg};
|
use clippy_utils::{match_def_path, pat_is_wild, sugg};
|
||||||
use rustc_hir::def::DefKind;
|
use rustc_hir::def::DefKind;
|
||||||
use rustc_hir::{Expr, ExprKind, Pat, PatKind};
|
use rustc_hir::{Expr, ExprKind, Pat, PatKind};
|
||||||
use rustc_lint::LateContext;
|
use rustc_lint::LateContext;
|
||||||
use rustc_middle::ty;
|
use rustc_middle::ty;
|
||||||
|
|
||||||
/// Checks for the `UNUSED_ENUMERATE_INDEX` lint.
|
/// Checks for the `UNUSED_ENUMERATE_INDEX` lint.
|
||||||
pub(super) fn check<'tcx>(cx: &LateContext<'tcx>, pat: &'tcx Pat<'_>, arg: &'tcx Expr<'_>, body: &'tcx Expr<'_>) {
|
pub(super) fn check<'tcx>(cx: &LateContext<'tcx>, pat: &Pat<'tcx>, arg: &Expr<'_>, body: &'tcx Expr<'tcx>) {
|
||||||
let PatKind::Tuple([index, elem], _) = pat.kind else {
|
if let PatKind::Tuple([index, elem], _) = pat.kind
|
||||||
return;
|
&& let ExprKind::MethodCall(_method, self_arg, [], _) = arg.kind
|
||||||
};
|
&& let ty = cx.typeck_results().expr_ty(arg)
|
||||||
|
&& pat_is_wild(cx, &index.kind, body)
|
||||||
let ExprKind::MethodCall(_method, self_arg, [], _) = arg.kind else {
|
&& let ty::Adt(base, _) = *ty.kind()
|
||||||
return;
|
&& match_def_path(cx, base.did(), &clippy_utils::paths::CORE_ITER_ENUMERATE_STRUCT)
|
||||||
};
|
&& let Some((DefKind::AssocFn, call_id)) = cx.typeck_results().type_dependent_def(arg.hir_id)
|
||||||
|
&& match_def_path(cx, call_id, &clippy_utils::paths::CORE_ITER_ENUMERATE_METHOD)
|
||||||
let ty = cx.typeck_results().expr_ty(arg);
|
{
|
||||||
|
span_lint_and_then(
|
||||||
if !pat_is_wild(cx, &index.kind, body) {
|
cx,
|
||||||
return;
|
UNUSED_ENUMERATE_INDEX,
|
||||||
|
arg.span,
|
||||||
|
"you seem to use `.enumerate()` and immediately discard the index",
|
||||||
|
|diag| {
|
||||||
|
let base_iter = sugg::Sugg::hir(cx, self_arg, "base iter");
|
||||||
|
multispan_sugg(
|
||||||
|
diag,
|
||||||
|
"remove the `.enumerate()` call",
|
||||||
|
vec![
|
||||||
|
(pat.span, snippet(cx, elem.span, "..").into_owned()),
|
||||||
|
(arg.span, base_iter.to_string()),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let name = match *ty.kind() {
|
|
||||||
ty::Adt(base, _substs) => cx.tcx.def_path_str(base.did()),
|
|
||||||
_ => return,
|
|
||||||
};
|
|
||||||
|
|
||||||
if name != "std::iter::Enumerate" && name != "core::iter::Enumerate" {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let Some((DefKind::AssocFn, call_id)) = cx.typeck_results().type_dependent_def(arg.hir_id) else {
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
|
|
||||||
let call_name = cx.tcx.def_path_str(call_id);
|
|
||||||
|
|
||||||
if call_name != "std::iter::Iterator::enumerate" && call_name != "core::iter::Iterator::enumerate" {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
span_lint_and_then(
|
|
||||||
cx,
|
|
||||||
UNUSED_ENUMERATE_INDEX,
|
|
||||||
arg.span,
|
|
||||||
"you seem to use `.enumerate()` and immediately discard the index",
|
|
||||||
|diag| {
|
|
||||||
let base_iter = sugg::Sugg::hir(cx, self_arg, "base iter");
|
|
||||||
multispan_sugg(
|
|
||||||
diag,
|
|
||||||
"remove the `.enumerate()` call",
|
|
||||||
vec![
|
|
||||||
(pat.span, snippet(cx, elem.span, "..").into_owned()),
|
|
||||||
(arg.span, base_iter.to_string()),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user