Skip to content

Commit 233fe11

Browse files
committed
Set turbofish for every sugg and add more test cases
1 parent 7825bf3 commit 233fe11

File tree

4 files changed

+86
-17
lines changed

4 files changed

+86
-17
lines changed

clippy_lints/src/methods/mod.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4095,11 +4095,7 @@ fn lint_from_iter(cx: &LateContext<'_>, expr: &hir::Expr<'_>, args: &[hir::Expr<
40954095
then {
40964096
// `expr` implements `FromIterator` trait
40974097
let iter_expr = sugg::Sugg::hir(cx, &args[0], "..").maybe_par();
4098-
let sugg = if higher::range(&args[0]).is_some() {
4099-
format!("{}.collect::<{}>()", iter_expr, ty)
4100-
} else {
4101-
format!("{}.collect()", iter_expr)
4102-
};
4098+
let sugg = format!("{}.collect::<{}>()", iter_expr, ty);
41034099
span_lint_and_sugg(
41044100
cx,
41054101
FROM_ITER_INSTEAD_OF_COLLECT,
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// run-rustfix
2+
3+
#![warn(clippy::from_iter_instead_of_collect)]
4+
#![allow(unused_imports)]
5+
6+
use std::collections::{BTreeMap, BTreeSet, HashMap, VecDeque};
7+
use std::iter::FromIterator;
8+
9+
fn main() {
10+
let iter_expr = std::iter::repeat(5).take(5);
11+
let _ = iter_expr.collect::<std::vec::Vec<i32>>();
12+
13+
let _ = vec![5, 5, 5, 5].iter().enumerate().collect::<std::collections::HashMap<usize, &i8>>();
14+
15+
Vec::from_iter(vec![42u32]);
16+
17+
let a = vec![0, 1, 2];
18+
assert_eq!(a, (0..3).collect::<std::vec::Vec<i32>>());
19+
20+
let mut b = (0..3).collect::<std::collections::VecDeque<i32>>();
21+
b.push_back(4);
22+
23+
let values = [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')];
24+
let bm = values.iter().cloned().collect::<std::collections::BTreeMap<i32, char>>();
25+
let mut bar = bm.range(0..2).collect::<std::collections::BTreeMap<&i32, &char>>();
26+
bar.insert(&4, &'e');
27+
28+
let mut bts = (0..3).collect::<std::collections::BTreeSet<i32>>();
29+
bts.insert(2);
30+
{
31+
use std::collections;
32+
let _ = (0..3).collect::<std::collections::BTreeSet<i32>>();
33+
}
34+
}
Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1+
// run-rustfix
2+
13
#![warn(clippy::from_iter_instead_of_collect)]
4+
#![allow(unused_imports)]
25

3-
use std::collections::{HashMap, VecDeque};
6+
use std::collections::{BTreeMap, BTreeSet, HashMap, VecDeque};
47
use std::iter::FromIterator;
58

69
fn main() {
710
let iter_expr = std::iter::repeat(5).take(5);
8-
Vec::from_iter(iter_expr);
11+
let _ = Vec::from_iter(iter_expr);
912

10-
HashMap::<usize, &i8>::from_iter(vec![5, 5, 5, 5].iter().enumerate());
13+
let _ = HashMap::<usize, &i8>::from_iter(vec![5, 5, 5, 5].iter().enumerate());
1114

1215
Vec::from_iter(vec![42u32]);
1316

@@ -16,4 +19,16 @@ fn main() {
1619

1720
let mut b = VecDeque::from_iter(0..3);
1821
b.push_back(4);
22+
23+
let values = [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')];
24+
let bm = BTreeMap::from_iter(values.iter().cloned());
25+
let mut bar = BTreeMap::from_iter(bm.range(0..2));
26+
bar.insert(&4, &'e');
27+
28+
let mut bts = BTreeSet::from_iter(0..3);
29+
bts.insert(2);
30+
{
31+
use std::collections;
32+
let _ = collections::BTreeSet::from_iter(0..3);
33+
}
1934
}
Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,52 @@
11
error: usage of `FromIterator::from_iter`
2-
--> $DIR/from_iter_instead_of_collect.rs:8:5
2+
--> $DIR/from_iter_instead_of_collect.rs:11:13
33
|
4-
LL | Vec::from_iter(iter_expr);
5-
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `iter_expr.collect()`
4+
LL | let _ = Vec::from_iter(iter_expr);
5+
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `iter_expr.collect::<std::vec::Vec<i32>>()`
66
|
77
= note: `-D clippy::from-iter-instead-of-collect` implied by `-D warnings`
88

99
error: usage of `FromIterator::from_iter`
10-
--> $DIR/from_iter_instead_of_collect.rs:10:5
10+
--> $DIR/from_iter_instead_of_collect.rs:13:13
1111
|
12-
LL | HashMap::<usize, &i8>::from_iter(vec![5, 5, 5, 5].iter().enumerate());
13-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `vec![5, 5, 5, 5].iter().enumerate().collect()`
12+
LL | let _ = HashMap::<usize, &i8>::from_iter(vec![5, 5, 5, 5].iter().enumerate());
13+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `vec![5, 5, 5, 5].iter().enumerate().collect::<std::collections::HashMap<usize, &i8>>()`
1414

1515
error: usage of `FromIterator::from_iter`
16-
--> $DIR/from_iter_instead_of_collect.rs:15:19
16+
--> $DIR/from_iter_instead_of_collect.rs:18:19
1717
|
1818
LL | assert_eq!(a, Vec::from_iter(0..3));
1919
| ^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<std::vec::Vec<i32>>()`
2020

2121
error: usage of `FromIterator::from_iter`
22-
--> $DIR/from_iter_instead_of_collect.rs:17:17
22+
--> $DIR/from_iter_instead_of_collect.rs:20:17
2323
|
2424
LL | let mut b = VecDeque::from_iter(0..3);
2525
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<std::collections::VecDeque<i32>>()`
2626

27-
error: aborting due to 4 previous errors
27+
error: usage of `FromIterator::from_iter`
28+
--> $DIR/from_iter_instead_of_collect.rs:24:14
29+
|
30+
LL | let bm = BTreeMap::from_iter(values.iter().cloned());
31+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `values.iter().cloned().collect::<std::collections::BTreeMap<i32, char>>()`
32+
33+
error: usage of `FromIterator::from_iter`
34+
--> $DIR/from_iter_instead_of_collect.rs:25:19
35+
|
36+
LL | let mut bar = BTreeMap::from_iter(bm.range(0..2));
37+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `bm.range(0..2).collect::<std::collections::BTreeMap<&i32, &char>>()`
38+
39+
error: usage of `FromIterator::from_iter`
40+
--> $DIR/from_iter_instead_of_collect.rs:28:19
41+
|
42+
LL | let mut bts = BTreeSet::from_iter(0..3);
43+
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<std::collections::BTreeSet<i32>>()`
44+
45+
error: usage of `FromIterator::from_iter`
46+
--> $DIR/from_iter_instead_of_collect.rs:32:17
47+
|
48+
LL | let _ = collections::BTreeSet::from_iter(0..3);
49+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<std::collections::BTreeSet<i32>>()`
50+
51+
error: aborting due to 8 previous errors
2852

0 commit comments

Comments
 (0)