]> git.lizzy.rs Git - rust.git/blob - src/tools/clippy/clippy_lints/src/methods/iter_nth_zero.rs
Rollup merge of #104614 - Nilstrieb:type-ascribe!, r=TaKO8Ki
[rust.git] / src / tools / clippy / clippy_lints / src / methods / iter_nth_zero.rs
1 use clippy_utils::consts::{constant, Constant};
2 use clippy_utils::diagnostics::span_lint_and_sugg;
3 use clippy_utils::is_trait_method;
4 use clippy_utils::source::snippet_with_applicability;
5 use if_chain::if_chain;
6 use rustc_errors::Applicability;
7 use rustc_hir as hir;
8 use rustc_lint::LateContext;
9 use rustc_span::sym;
10
11 use super::ITER_NTH_ZERO;
12
13 pub(super) fn check(cx: &LateContext<'_>, expr: &hir::Expr<'_>, recv: &hir::Expr<'_>, arg: &hir::Expr<'_>) {
14     if_chain! {
15         if is_trait_method(cx, expr, sym::Iterator);
16         if let Some((Constant::Int(0), _)) = constant(cx, cx.typeck_results(), arg);
17         then {
18             let mut applicability = Applicability::MachineApplicable;
19             span_lint_and_sugg(
20                 cx,
21                 ITER_NTH_ZERO,
22                 expr.span,
23                 "called `.nth(0)` on a `std::iter::Iterator`, when `.next()` is equivalent",
24                 "try calling `.next()` instead of `.nth(0)`",
25                 format!("{}.next()", snippet_with_applicability(cx, recv.span, "..", &mut applicability)),
26                 applicability,
27             );
28         }
29     }
30 }