forked from rust-lang/rust
-
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of rust-lang#6657 - ThibsG:FromIterParens, r=llogiq
Fix suggestions that need parens in `from_iter_instead_of_collect` lint Fixes broken suggestions that need parens (i.e.: range) Fixes: rust-lang#6648 changelog: none
- Loading branch information
Showing
4 changed files
with
201 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
// run-rustfix | ||
|
||
#![warn(clippy::from_iter_instead_of_collect)] | ||
#![allow(unused_imports)] | ||
|
||
use std::collections::{BTreeMap, BTreeSet, HashMap, VecDeque}; | ||
use std::iter::FromIterator; | ||
|
||
fn main() { | ||
let iter_expr = std::iter::repeat(5).take(5); | ||
let _ = iter_expr.collect::<Vec<_>>(); | ||
|
||
let _ = vec![5, 5, 5, 5].iter().enumerate().collect::<HashMap<usize, &i8>>(); | ||
|
||
Vec::from_iter(vec![42u32]); | ||
|
||
let a = vec![0, 1, 2]; | ||
assert_eq!(a, (0..3).collect::<Vec<_>>()); | ||
assert_eq!(a, (0..3).collect::<Vec<i32>>()); | ||
|
||
let mut b = (0..3).collect::<VecDeque<_>>(); | ||
b.push_back(4); | ||
|
||
let mut b = (0..3).collect::<VecDeque<i32>>(); | ||
b.push_back(4); | ||
|
||
{ | ||
use std::collections; | ||
let mut b = (0..3).collect::<collections::VecDeque<i32>>(); | ||
b.push_back(4); | ||
} | ||
|
||
let values = [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]; | ||
let bm = values.iter().cloned().collect::<BTreeMap<_, _>>(); | ||
let mut bar = bm.range(0..2).collect::<BTreeMap<_, _>>(); | ||
bar.insert(&4, &'e'); | ||
|
||
let mut bts = (0..3).collect::<BTreeSet<_>>(); | ||
bts.insert(2); | ||
{ | ||
use std::collections; | ||
let _ = (0..3).collect::<collections::BTreeSet<_>>(); | ||
let _ = (0..3).collect::<collections::BTreeSet<u32>>(); | ||
} | ||
|
||
for _i in [1, 2, 3].iter().collect::<Vec<_>>() {} | ||
for _i in [1, 2, 3].iter().collect::<Vec<&i32>>() {} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,48 @@ | ||
// run-rustfix | ||
|
||
#![warn(clippy::from_iter_instead_of_collect)] | ||
#![allow(unused_imports)] | ||
|
||
use std::collections::HashMap; | ||
use std::collections::{BTreeMap, BTreeSet, HashMap, VecDeque}; | ||
use std::iter::FromIterator; | ||
|
||
fn main() { | ||
let iter_expr = std::iter::repeat(5).take(5); | ||
Vec::from_iter(iter_expr); | ||
let _ = Vec::from_iter(iter_expr); | ||
|
||
HashMap::<usize, &i8>::from_iter(vec![5, 5, 5, 5].iter().enumerate()); | ||
let _ = HashMap::<usize, &i8>::from_iter(vec![5, 5, 5, 5].iter().enumerate()); | ||
|
||
Vec::from_iter(vec![42u32]); | ||
|
||
let a = vec![0, 1, 2]; | ||
assert_eq!(a, Vec::from_iter(0..3)); | ||
assert_eq!(a, Vec::<i32>::from_iter(0..3)); | ||
|
||
let mut b = VecDeque::from_iter(0..3); | ||
b.push_back(4); | ||
|
||
let mut b = VecDeque::<i32>::from_iter(0..3); | ||
b.push_back(4); | ||
|
||
{ | ||
use std::collections; | ||
let mut b = collections::VecDeque::<i32>::from_iter(0..3); | ||
b.push_back(4); | ||
} | ||
|
||
let values = [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]; | ||
let bm = BTreeMap::from_iter(values.iter().cloned()); | ||
let mut bar = BTreeMap::from_iter(bm.range(0..2)); | ||
bar.insert(&4, &'e'); | ||
|
||
let mut bts = BTreeSet::from_iter(0..3); | ||
bts.insert(2); | ||
{ | ||
use std::collections; | ||
let _ = collections::BTreeSet::from_iter(0..3); | ||
let _ = collections::BTreeSet::<u32>::from_iter(0..3); | ||
} | ||
|
||
for _i in Vec::from_iter([1, 2, 3].iter()) {} | ||
for _i in Vec::<&i32>::from_iter([1, 2, 3].iter()) {} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,88 @@ | ||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:8:5 | ||
--> $DIR/from_iter_instead_of_collect.rs:11:13 | ||
| | ||
LL | Vec::from_iter(iter_expr); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `iter_expr.collect()` | ||
LL | let _ = Vec::from_iter(iter_expr); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `iter_expr.collect::<Vec<_>>()` | ||
| | ||
= note: `-D clippy::from-iter-instead-of-collect` implied by `-D warnings` | ||
|
||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:10:5 | ||
--> $DIR/from_iter_instead_of_collect.rs:13:13 | ||
| | ||
LL | HashMap::<usize, &i8>::from_iter(vec![5, 5, 5, 5].iter().enumerate()); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `vec![5, 5, 5, 5].iter().enumerate().collect()` | ||
LL | let _ = HashMap::<usize, &i8>::from_iter(vec![5, 5, 5, 5].iter().enumerate()); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `vec![5, 5, 5, 5].iter().enumerate().collect::<HashMap<usize, &i8>>()` | ||
|
||
error: aborting due to 2 previous errors | ||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:18:19 | ||
| | ||
LL | assert_eq!(a, Vec::from_iter(0..3)); | ||
| ^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<Vec<_>>()` | ||
|
||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:19:19 | ||
| | ||
LL | assert_eq!(a, Vec::<i32>::from_iter(0..3)); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<Vec<i32>>()` | ||
|
||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:21:17 | ||
| | ||
LL | let mut b = VecDeque::from_iter(0..3); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<VecDeque<_>>()` | ||
|
||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:24:17 | ||
| | ||
LL | let mut b = VecDeque::<i32>::from_iter(0..3); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<VecDeque<i32>>()` | ||
|
||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:29:21 | ||
| | ||
LL | let mut b = collections::VecDeque::<i32>::from_iter(0..3); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<collections::VecDeque<i32>>()` | ||
|
||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:34:14 | ||
| | ||
LL | let bm = BTreeMap::from_iter(values.iter().cloned()); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `values.iter().cloned().collect::<BTreeMap<_, _>>()` | ||
|
||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:35:19 | ||
| | ||
LL | let mut bar = BTreeMap::from_iter(bm.range(0..2)); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `bm.range(0..2).collect::<BTreeMap<_, _>>()` | ||
|
||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:38:19 | ||
| | ||
LL | let mut bts = BTreeSet::from_iter(0..3); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<BTreeSet<_>>()` | ||
|
||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:42:17 | ||
| | ||
LL | let _ = collections::BTreeSet::from_iter(0..3); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<collections::BTreeSet<_>>()` | ||
|
||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:43:17 | ||
| | ||
LL | let _ = collections::BTreeSet::<u32>::from_iter(0..3); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<collections::BTreeSet<u32>>()` | ||
|
||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:46:15 | ||
| | ||
LL | for _i in Vec::from_iter([1, 2, 3].iter()) {} | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `[1, 2, 3].iter().collect::<Vec<_>>()` | ||
|
||
error: usage of `FromIterator::from_iter` | ||
--> $DIR/from_iter_instead_of_collect.rs:47:15 | ||
| | ||
LL | for _i in Vec::<&i32>::from_iter([1, 2, 3].iter()) {} | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `[1, 2, 3].iter().collect::<Vec<&i32>>()` | ||
|
||
error: aborting due to 14 previous errors | ||
|