Skip to content

Commit 7825bf3

Browse files
committed
Fix suggestions that need parens
1 parent 5db215b commit 7825bf3

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

clippy_lints/src/methods/mod.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4094,14 +4094,19 @@ fn lint_from_iter(cx: &LateContext<'_>, expr: &hir::Expr<'_>, args: &[hir::Expr<
40944094
if implements_trait(cx, ty, from_iter_id, &[]) && implements_trait(cx, arg_ty, iter_id, &[]);
40954095
then {
40964096
// `expr` implements `FromIterator` trait
4097-
let iter_expr = snippet(cx, args[0].span, "..");
4097+
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+
};
40984103
span_lint_and_sugg(
40994104
cx,
41004105
FROM_ITER_INSTEAD_OF_COLLECT,
41014106
expr.span,
41024107
"usage of `FromIterator::from_iter`",
41034108
"use `.collect()` instead of `::from_iter()`",
4104-
format!("{}.collect()", iter_expr),
4109+
sugg,
41054110
Applicability::MaybeIncorrect,
41064111
);
41074112
}

tests/ui/from_iter_instead_of_collect.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#![warn(clippy::from_iter_instead_of_collect)]
22

3-
use std::collections::HashMap;
3+
use std::collections::{HashMap, VecDeque};
44
use std::iter::FromIterator;
55

66
fn main() {
@@ -10,4 +10,10 @@ fn main() {
1010
HashMap::<usize, &i8>::from_iter(vec![5, 5, 5, 5].iter().enumerate());
1111

1212
Vec::from_iter(vec![42u32]);
13+
14+
let a = vec![0, 1, 2];
15+
assert_eq!(a, Vec::from_iter(0..3));
16+
17+
let mut b = VecDeque::from_iter(0..3);
18+
b.push_back(4);
1319
}

tests/ui/from_iter_instead_of_collect.stderr

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,17 @@ error: usage of `FromIterator::from_iter`
1212
LL | HashMap::<usize, &i8>::from_iter(vec![5, 5, 5, 5].iter().enumerate());
1313
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `vec![5, 5, 5, 5].iter().enumerate().collect()`
1414

15-
error: aborting due to 2 previous errors
15+
error: usage of `FromIterator::from_iter`
16+
--> $DIR/from_iter_instead_of_collect.rs:15:19
17+
|
18+
LL | assert_eq!(a, Vec::from_iter(0..3));
19+
| ^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<std::vec::Vec<i32>>()`
20+
21+
error: usage of `FromIterator::from_iter`
22+
--> $DIR/from_iter_instead_of_collect.rs:17:17
23+
|
24+
LL | let mut b = VecDeque::from_iter(0..3);
25+
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `.collect()` instead of `::from_iter()`: `(0..3).collect::<std::collections::VecDeque<i32>>()`
26+
27+
error: aborting due to 4 previous errors
1628

0 commit comments

Comments
 (0)