Add run-rustfix to infallible_destructuring_match

This commit is contained in:
Wilco Kusee 2019-01-13 12:49:54 +01:00
parent 87407c5e5f
commit 787f5a2c12
3 changed files with 84 additions and 3 deletions

View file

@ -0,0 +1,79 @@
// run-rustfix
#![feature(exhaustive_patterns, never_type)]
#![allow(dead_code, unreachable_code, unused_variables)]
#![allow(clippy::let_and_return)]
enum SingleVariantEnum {
Variant(i32),
}
struct TupleStruct(i32);
enum EmptyEnum {}
fn infallible_destructuring_match_enum() {
let wrapper = SingleVariantEnum::Variant(0);
// This should lint!
let SingleVariantEnum::Variant(data) = wrapper;
// This shouldn't!
let data = match wrapper {
SingleVariantEnum::Variant(_) => -1,
};
// Neither should this!
let data = match wrapper {
SingleVariantEnum::Variant(i) => -1,
};
let SingleVariantEnum::Variant(data) = wrapper;
}
fn infallible_destructuring_match_struct() {
let wrapper = TupleStruct(0);
// This should lint!
let TupleStruct(data) = wrapper;
// This shouldn't!
let data = match wrapper {
TupleStruct(_) => -1,
};
// Neither should this!
let data = match wrapper {
TupleStruct(i) => -1,
};
let TupleStruct(data) = wrapper;
}
fn never_enum() {
let wrapper: Result<i32, !> = Ok(23);
// This should lint!
let Ok(data) = wrapper;
// This shouldn't!
let data = match wrapper {
Ok(_) => -1,
};
// Neither should this!
let data = match wrapper {
Ok(i) => -1,
};
let Ok(data) = wrapper;
}
impl EmptyEnum {
fn match_on(&self) -> ! {
// The lint shouldn't pick this up, as `let` won't work here!
let data = match *self {};
data
}
}
fn main() {}

View file

@ -1,4 +1,6 @@
// run-rustfix
#![feature(exhaustive_patterns, never_type)] #![feature(exhaustive_patterns, never_type)]
#![allow(dead_code, unreachable_code, unused_variables)]
#![allow(clippy::let_and_return)] #![allow(clippy::let_and_return)]
enum SingleVariantEnum { enum SingleVariantEnum {

View file

@ -1,5 +1,5 @@
error: you seem to be trying to use match to destructure a single infallible pattern. Consider using `let` error: you seem to be trying to use match to destructure a single infallible pattern. Consider using `let`
--> $DIR/infallible_destructuring_match.rs:16:5 --> $DIR/infallible_destructuring_match.rs:18:5
| |
LL | / let data = match wrapper { LL | / let data = match wrapper {
LL | | SingleVariantEnum::Variant(i) => i, LL | | SingleVariantEnum::Variant(i) => i,
@ -9,7 +9,7 @@ LL | | };
= note: `-D clippy::infallible-destructuring-match` implied by `-D warnings` = note: `-D clippy::infallible-destructuring-match` implied by `-D warnings`
error: you seem to be trying to use match to destructure a single infallible pattern. Consider using `let` error: you seem to be trying to use match to destructure a single infallible pattern. Consider using `let`
--> $DIR/infallible_destructuring_match.rs:37:5 --> $DIR/infallible_destructuring_match.rs:39:5
| |
LL | / let data = match wrapper { LL | / let data = match wrapper {
LL | | TupleStruct(i) => i, LL | | TupleStruct(i) => i,
@ -17,7 +17,7 @@ LL | | };
| |______^ help: try this: `let TupleStruct(data) = wrapper;` | |______^ help: try this: `let TupleStruct(data) = wrapper;`
error: you seem to be trying to use match to destructure a single infallible pattern. Consider using `let` error: you seem to be trying to use match to destructure a single infallible pattern. Consider using `let`
--> $DIR/infallible_destructuring_match.rs:58:5 --> $DIR/infallible_destructuring_match.rs:60:5
| |
LL | / let data = match wrapper { LL | / let data = match wrapper {
LL | | Ok(i) => i, LL | | Ok(i) => i,