Skip to content

Commit 09361a4

Browse files
committed
useless_conversion: also fire inside compiler desugarings
1 parent e63814d commit 09361a4

File tree

4 files changed

+73
-3
lines changed

4 files changed

+73
-3
lines changed

clippy_lints/src/useless_conversion.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,9 @@ fn into_iter_deep_call<'hir>(cx: &LateContext<'_>, mut expr: &'hir Expr<'hir>) -
157157
impl<'tcx> LateLintPass<'tcx> for UselessConversion {
158158
fn check_expr(&mut self, cx: &LateContext<'tcx>, e: &'tcx Expr<'_>) {
159159
if e.span.from_expansion() {
160-
self.expn_depth += 1;
160+
if e.span.desugaring_kind().is_none() {
161+
self.expn_depth += 1;
162+
}
161163
return;
162164
}
163165

@@ -437,7 +439,7 @@ impl<'tcx> LateLintPass<'tcx> for UselessConversion {
437439
if Some(&e.hir_id) == self.try_desugar_arm.last() {
438440
self.try_desugar_arm.pop();
439441
}
440-
if e.span.from_expansion() {
442+
if e.span.from_expansion() && e.span.desugaring_kind().is_none() {
441443
self.expn_depth -= 1;
442444
}
443445
}

tests/ui/useless_conversion.fixed

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,3 +463,23 @@ fn issue16165() {
463463
for _ in mac!(iter [1, 2]) {}
464464
//~^ useless_conversion
465465
}
466+
467+
fn takes_into_iter_usize(_: impl IntoIterator<Item = usize>) {}
468+
469+
async fn issue16590() {
470+
let a: Vec<usize> = vec![];
471+
let b: Vec<usize> = vec![];
472+
473+
takes_into_iter_usize(b);
474+
//~^ useless_conversion
475+
}
476+
477+
fn useless_conversion_in_for_loop() {
478+
let a: Vec<usize> = vec![1, 2, 3];
479+
let b: Vec<usize> = vec![4, 5, 6];
480+
481+
for _ in &a {
482+
takes_into_iter_usize(b.clone());
483+
//~^ useless_conversion
484+
}
485+
}

tests/ui/useless_conversion.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,3 +463,23 @@ fn issue16165() {
463463
for _ in mac!(iter [1, 2]).into_iter() {}
464464
//~^ useless_conversion
465465
}
466+
467+
fn takes_into_iter_usize(_: impl IntoIterator<Item = usize>) {}
468+
469+
async fn issue16590() {
470+
let a: Vec<usize> = vec![];
471+
let b: Vec<usize> = vec![];
472+
473+
takes_into_iter_usize(b.into_iter());
474+
//~^ useless_conversion
475+
}
476+
477+
fn useless_conversion_in_for_loop() {
478+
let a: Vec<usize> = vec![1, 2, 3];
479+
let b: Vec<usize> = vec![4, 5, 6];
480+
481+
for _ in &a {
482+
takes_into_iter_usize(b.clone().into_iter());
483+
//~^ useless_conversion
484+
}
485+
}

tests/ui/useless_conversion.stderr

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,5 +412,33 @@ error: useless conversion to the same type: `std::slice::Iter<'_, i32>`
412412
LL | for _ in mac!(iter [1, 2]).into_iter() {}
413413
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `mac!(iter [1, 2])`
414414

415-
error: aborting due to 45 previous errors
415+
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
416+
--> tests/ui/useless_conversion.rs:473:27
417+
|
418+
LL | takes_into_iter_usize(b.into_iter());
419+
| ^------------
420+
| |
421+
| help: consider removing the `.into_iter()`
422+
|
423+
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
424+
--> tests/ui/useless_conversion.rs:467:34
425+
|
426+
LL | fn takes_into_iter_usize(_: impl IntoIterator<Item = usize>) {}
427+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
428+
429+
error: explicit call to `.into_iter()` in function argument accepting `IntoIterator`
430+
--> tests/ui/useless_conversion.rs:482:31
431+
|
432+
LL | takes_into_iter_usize(b.clone().into_iter());
433+
| ^^^^^^^^^------------
434+
| |
435+
| help: consider removing the `.into_iter()`
436+
|
437+
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
438+
--> tests/ui/useless_conversion.rs:467:34
439+
|
440+
LL | fn takes_into_iter_usize(_: impl IntoIterator<Item = usize>) {}
441+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
442+
443+
error: aborting due to 47 previous errors
416444

0 commit comments

Comments
 (0)