-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add tests for auto fixable let_unit suggestion
- Loading branch information
Showing
3 changed files
with
108 additions
and
7 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
// run-rustfix | ||
|
||
#![warn(clippy::let_unit_value)] | ||
#![allow(clippy::no_effect)] | ||
#![allow(unused_variables)] | ||
|
||
macro_rules! let_and_return { | ||
($n:expr) => {{ | ||
let ret = $n; | ||
}}; | ||
} | ||
|
||
fn main() { | ||
println!("x"); | ||
let _y = 1; // this is fine | ||
let _z = ((), 1); // this as well | ||
if true { | ||
(); | ||
} | ||
|
||
consume_units_with_for_loop(); // should be fine as well | ||
|
||
multiline_sugg(); | ||
|
||
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<Item = ()>. | ||
let (tx, rx) = ::std::sync::mpsc::channel(); | ||
tx.send(()).unwrap(); | ||
drop(tx); | ||
|
||
count = 0; | ||
for _ in rx.iter() { | ||
count += 1; | ||
} | ||
assert_eq!(count, 1); | ||
} | ||
|
||
fn multiline_sugg() { | ||
let v: Vec<u8> = vec![2]; | ||
|
||
v | ||
.into_iter() | ||
.map(|i| i * 2) | ||
.filter(|i| i % 2 == 0) | ||
.map(|_| ()) | ||
.next() | ||
.unwrap(); | ||
} | ||
|
||
#[derive(Copy, Clone)] | ||
pub struct ContainsUnit(()); // should be fine |
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 |
---|---|---|
@@ -1,16 +1,37 @@ | ||
error: this let-binding has unit value. Consider omitting `let _x =` | ||
--> $DIR/let_unit.rs:11:5 | ||
error: this let-binding has unit value | ||
--> $DIR/let_unit.rs:14:5 | ||
| | ||
LL | let _x = println!("x"); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^ | ||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: omit the `let` binding: `println!("x");` | ||
| | ||
= note: `-D clippy::let-unit-value` implied by `-D warnings` | ||
|
||
error: this let-binding has unit value. Consider omitting `let _a =` | ||
--> $DIR/let_unit.rs:15:9 | ||
error: this let-binding has unit value | ||
--> $DIR/let_unit.rs:18:9 | ||
| | ||
LL | let _a = (); | ||
| ^^^^^^^^^^^^ | ||
| ^^^^^^^^^^^^ help: omit the `let` binding: `();` | ||
|
||
error: aborting due to 2 previous errors | ||
error: this let-binding has unit value | ||
--> $DIR/let_unit.rs:53:5 | ||
| | ||
LL | / let _ = v | ||
LL | | .into_iter() | ||
LL | | .map(|i| i * 2) | ||
LL | | .filter(|i| i % 2 == 0) | ||
LL | | .map(|_| ()) | ||
LL | | .next() | ||
LL | | .unwrap(); | ||
| |__________________^ | ||
help: omit the `let` binding | ||
| | ||
LL | v | ||
LL | .into_iter() | ||
LL | .map(|i| i * 2) | ||
LL | .filter(|i| i % 2 == 0) | ||
LL | .map(|_| ()) | ||
LL | .next() | ||
... | ||
|
||
error: aborting due to 3 previous errors | ||
|