fix: iter_cloned_collect FP with custom From/IntoIterator impl
This commit is contained in:
parent
f74d7ce813
commit
ee36124011
4 changed files with 69 additions and 3 deletions
|
|
@ -1,16 +1,22 @@
|
|||
use crate::methods::utils::derefs_to_slice;
|
||||
use clippy_utils::diagnostics::span_lint_and_sugg;
|
||||
use clippy_utils::ty::is_type_diagnostic_item;
|
||||
use clippy_utils::ty::{get_iterator_item_ty, is_type_diagnostic_item};
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir as hir;
|
||||
use rustc_lint::LateContext;
|
||||
use rustc_middle::ty;
|
||||
use rustc_span::sym;
|
||||
|
||||
use super::ITER_CLONED_COLLECT;
|
||||
|
||||
pub(super) fn check<'tcx>(cx: &LateContext<'tcx>, method_name: &str, expr: &hir::Expr<'_>, recv: &'tcx hir::Expr<'_>) {
|
||||
if is_type_diagnostic_item(cx, cx.typeck_results().expr_ty(expr), sym::Vec)
|
||||
let expr_ty = cx.typeck_results().expr_ty(expr);
|
||||
if is_type_diagnostic_item(cx, expr_ty, sym::Vec)
|
||||
&& let Some(slice) = derefs_to_slice(cx, recv, cx.typeck_results().expr_ty(recv))
|
||||
&& let ty::Adt(_, args) = expr_ty.kind()
|
||||
&& let Some(iter_item_ty) = get_iterator_item_ty(cx, cx.typeck_results().expr_ty(recv))
|
||||
&& let ty::Ref(_, iter_item_ty, _) = iter_item_ty.kind()
|
||||
&& *iter_item_ty == args.type_at(0)
|
||||
&& let Some(to_replace) = expr.span.trim_start(slice.span.source_callsite())
|
||||
{
|
||||
span_lint_and_sugg(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue