Set turbofish for every sugg and add more test cases
This commit is contained in:
parent
7825bf36d8
commit
233fe11ce9
4 changed files with 87 additions and 18 deletions
|
|
@ -4095,11 +4095,7 @@ fn lint_from_iter(cx: &LateContext<'_>, expr: &hir::Expr<'_>, args: &[hir::Expr<
|
|||
then {
|
||||
// `expr` implements `FromIterator` trait
|
||||
let iter_expr = sugg::Sugg::hir(cx, &args[0], "..").maybe_par();
|
||||
let sugg = if higher::range(&args[0]).is_some() {
|
||||
format!("{}.collect::<{}>()", iter_expr, ty)
|
||||
} else {
|
||||
format!("{}.collect()", iter_expr)
|
||||
};
|
||||
let sugg = format!("{}.collect::<{}>()", iter_expr, ty);
|
||||
span_lint_and_sugg(
|
||||
cx,
|
||||
FROM_ITER_INSTEAD_OF_COLLECT,
|
||||
|
|
|
|||
34
tests/ui/from_iter_instead_of_collect.fixed
Normal file
34
tests/ui/from_iter_instead_of_collect.fixed
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
// 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::<std::vec::Vec<i32>>();
|
||||
|
||||
let _ = vec![5, 5, 5, 5].iter().enumerate().collect::<std::collections::HashMap<usize, &i8>>();
|
||||
|
||||
Vec::from_iter(vec![42u32]);
|
||||
|
||||
let a = vec![0, 1, 2];
|
||||
assert_eq!(a, (0..3).collect::<std::vec::Vec<i32>>());
|
||||
|
||||
let mut b = (0..3).collect::<std::collections::VecDeque<i32>>();
|
||||
b.push_back(4);
|
||||
|
||||
let values = [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')];
|
||||
let bm = values.iter().cloned().collect::<std::collections::BTreeMap<i32, char>>();
|
||||
let mut bar = bm.range(0..2).collect::<std::collections::BTreeMap<&i32, &char>>();
|
||||
bar.insert(&4, &'e');
|
||||
|
||||
let mut bts = (0..3).collect::<std::collections::BTreeSet<i32>>();
|
||||
bts.insert(2);
|
||||
{
|
||||
use std::collections;
|
||||
let _ = (0..3).collect::<std::collections::BTreeSet<i32>>();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,13 +1,16 @@
|
|||
#![warn(clippy::from_iter_instead_of_collect)]
|
||||
// run-rustfix
|
||||
|
||||
use std::collections::{HashMap, VecDeque};
|
||||
#![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);
|
||||
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]);
|
||||
|
||||
|
|
@ -16,4 +19,16 @@ fn main() {
|
|||
|
||||
let mut b = VecDeque::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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,28 +1,52 @@
|
|||
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::<std::vec::Vec<i32>>()`
|
||||
|
|
||||
= 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::<std::collections::HashMap<usize, &i8>>()`
|
||||
|
||||
error: usage of `FromIterator::from_iter`
|
||||
--> $DIR/from_iter_instead_of_collect.rs:15:19
|
||||
--> $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::<std::vec::Vec<i32>>()`
|
||||
|
||||
error: usage of `FromIterator::from_iter`
|
||||
--> $DIR/from_iter_instead_of_collect.rs:17:17
|
||||
--> $DIR/from_iter_instead_of_collect.rs:20:17
|
||||
|
|
||||
LL | let mut b = VecDeque::from_iter(0..3);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<std::collections::VecDeque<i32>>()`
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
error: usage of `FromIterator::from_iter`
|
||||
--> $DIR/from_iter_instead_of_collect.rs:24:14
|
||||
|
|
||||
LL | let bm = BTreeMap::from_iter(values.iter().cloned());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `values.iter().cloned().collect::<std::collections::BTreeMap<i32, char>>()`
|
||||
|
||||
error: usage of `FromIterator::from_iter`
|
||||
--> $DIR/from_iter_instead_of_collect.rs:25:19
|
||||
|
|
||||
LL | let mut bar = BTreeMap::from_iter(bm.range(0..2));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `bm.range(0..2).collect::<std::collections::BTreeMap<&i32, &char>>()`
|
||||
|
||||
error: usage of `FromIterator::from_iter`
|
||||
--> $DIR/from_iter_instead_of_collect.rs:28:19
|
||||
|
|
||||
LL | let mut bts = BTreeSet::from_iter(0..3);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<std::collections::BTreeSet<i32>>()`
|
||||
|
||||
error: usage of `FromIterator::from_iter`
|
||||
--> $DIR/from_iter_instead_of_collect.rs:32:17
|
||||
|
|
||||
LL | let _ = collections::BTreeSet::from_iter(0..3);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<std::collections::BTreeSet<i32>>()`
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue