is_from_for_desugar: add match for for _ in x
This will avoid `let_unit_value` in the examples in the ui-test. It might match too widely.
This commit is contained in:
parent
7cdaeae1b8
commit
cf8e95eb22
2 changed files with 38 additions and 0 deletions
|
@ -121,6 +121,22 @@ pub fn is_from_for_desugar(decl: &hir::Decl) -> bool {
|
||||||
], {
|
], {
|
||||||
return true;
|
return true;
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
// This detects a variable binding in for loop to avoid `let_unit_value`
|
||||||
|
// lint (see issue #1964).
|
||||||
|
//
|
||||||
|
// ```
|
||||||
|
// for _ in vec![()] {
|
||||||
|
// // anything
|
||||||
|
// }
|
||||||
|
// ```
|
||||||
|
if_let_chain! {[
|
||||||
|
let hir::DeclLocal(ref loc) = decl.node,
|
||||||
|
let hir::LocalSource::ForLoopDesugar = loc.source,
|
||||||
|
], {
|
||||||
|
return true;
|
||||||
|
}}
|
||||||
|
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,30 @@ fn main() {
|
||||||
let _a = ();
|
let _a = ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
consume_units_with_for_loop(); // should be fine as well
|
||||||
|
|
||||||
let_and_return!(()) // should be fine
|
let_and_return!(()) // should be fine
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Related to issue #1964
|
||||||
|
fn consume_units_with_for_loop() {
|
||||||
|
// `for_let_unit` lint should not be triggered by consuming them using for loop.
|
||||||
|
let v = vec![(), (), ()];
|
||||||
|
let mut count = 0;
|
||||||
|
for _ in v {
|
||||||
|
count += 1;
|
||||||
|
}
|
||||||
|
assert_eq!(count, 3);
|
||||||
|
|
||||||
|
// Same for consuming from some other Iterator<()>.
|
||||||
|
let (tx, rx) = ::std::sync::mpsc::channel();
|
||||||
|
tx.send(()).unwrap();
|
||||||
|
count = 0;
|
||||||
|
for _ in rx.iter() {
|
||||||
|
count += 1;
|
||||||
|
}
|
||||||
|
assert_eq!(count, 1);
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
pub struct ContainsUnit(()); // should be fine
|
pub struct ContainsUnit(()); // should be fine
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue