Skip to content

Commit 52d1ea3

Browse files
pitiK3Uflip1995
authored andcommitted
Fix: Don't show lint for types that doesn't implement Iterator
1 parent f359fb8 commit 52d1ea3

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

clippy_lints/src/methods/mod.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3874,9 +3874,12 @@ fn lint_filetype_is_file(cx: &LateContext<'_>, expr: &hir::Expr<'_>, args: &[hir
38743874

38753875
fn lint_from_iter(cx: &LateContext<'_>, expr: &hir::Expr<'_>, args: &[hir::Expr<'_>]) {
38763876
let ty = cx.typeck_results().expr_ty(expr);
3877-
let id = get_trait_def_id(cx, &paths::FROM_ITERATOR).unwrap();
3877+
let arg_ty = cx.typeck_results().expr_ty(&args[0]);
38783878

3879-
if implements_trait(cx, ty, id, &[]) {
3879+
let from_iter_id = get_trait_def_id(cx, &paths::FROM_ITERATOR).unwrap();
3880+
let iter_id = get_trait_def_id(cx, &paths::ITERATOR).unwrap();
3881+
3882+
if implements_trait(cx, ty, from_iter_id, &[]) && implements_trait(cx, arg_ty, iter_id, &[]) {
38803883
// `expr` implements `FromIterator` trait
38813884
let iter_expr = snippet(cx, args[0].span, "..");
38823885
span_lint_and_sugg(

tests/ui/from_iter_instead_of_collect.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ fn main() {
88
Vec::from_iter(iter_expr);
99

1010
HashMap::<usize, &i8>::from_iter(vec![5, 5, 5, 5].iter().enumerate());
11+
12+
Vec::from_iter(vec![42u32]);
1113
}

0 commit comments

Comments
 (0)