a5a07e503f
This commit changes the behavior of `single_match` lint. After that, we won't lint non-exhaustive matches like this: ```rust match Some(v) { Some(a) => println!("${:?}", a), None => {}, } ``` The rationale is that, because the type of `a` could be changed, so the user can get non-exhaustive match after applying the suggested lint (see https://github.com/rust-lang/rust-clippy/issues/8282#issuecomment-1013566068 for context). We also will lint `match` constructions with tuples. When we see the tuples on the both arms, we will check them both at the same time, and if they form exhaustive match, we could display the warning. Closes #8282
151 lines
4.8 KiB
Plaintext
151 lines
4.8 KiB
Plaintext
error: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let`
|
|
--> $DIR/single_match.rs:8:5
|
|
|
|
|
LL | / match x {
|
|
LL | | Some(y) => {
|
|
LL | | println!("{:?}", y);
|
|
LL | | },
|
|
LL | | _ => (),
|
|
LL | | };
|
|
| |_____^
|
|
|
|
|
= note: `-D clippy::single-match` implied by `-D warnings`
|
|
help: try this
|
|
|
|
|
LL ~ if let Some(y) = x {
|
|
LL + println!("{:?}", y);
|
|
LL ~ };
|
|
|
|
|
|
|
error: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let`
|
|
--> $DIR/single_match.rs:16:5
|
|
|
|
|
LL | / match x {
|
|
LL | | // Note the missing block braces.
|
|
LL | | // We suggest `if let Some(y) = x { .. }` because the macro
|
|
LL | | // is expanded before we can do anything.
|
|
LL | | Some(y) => println!("{:?}", y),
|
|
LL | | _ => (),
|
|
LL | | }
|
|
| |_____^ help: try this: `if let Some(y) = x { println!("{:?}", y) }`
|
|
|
|
error: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let`
|
|
--> $DIR/single_match.rs:25:5
|
|
|
|
|
LL | / match z {
|
|
LL | | (2..=3, 7..=9) => dummy(),
|
|
LL | | _ => {},
|
|
LL | | };
|
|
| |_____^ help: try this: `if let (2..=3, 7..=9) = z { dummy() }`
|
|
|
|
error: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let`
|
|
--> $DIR/single_match.rs:59:5
|
|
|
|
|
LL | / match y {
|
|
LL | | Ok(y) => dummy(),
|
|
LL | | Err(..) => (),
|
|
LL | | };
|
|
| |_____^ help: try this: `if let Ok(y) = y { dummy() }`
|
|
|
|
error: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let`
|
|
--> $DIR/single_match.rs:66:5
|
|
|
|
|
LL | / match c {
|
|
LL | | Cow::Borrowed(..) => dummy(),
|
|
LL | | Cow::Owned(..) => (),
|
|
LL | | };
|
|
| |_____^ help: try this: `if let Cow::Borrowed(..) = c { dummy() }`
|
|
|
|
error: you seem to be trying to use `match` for an equality check. Consider using `if`
|
|
--> $DIR/single_match.rs:87:5
|
|
|
|
|
LL | / match x {
|
|
LL | | "test" => println!(),
|
|
LL | | _ => (),
|
|
LL | | }
|
|
| |_____^ help: try this: `if x == "test" { println!() }`
|
|
|
|
error: you seem to be trying to use `match` for an equality check. Consider using `if`
|
|
--> $DIR/single_match.rs:100:5
|
|
|
|
|
LL | / match x {
|
|
LL | | Foo::A => println!(),
|
|
LL | | _ => (),
|
|
LL | | }
|
|
| |_____^ help: try this: `if x == Foo::A { println!() }`
|
|
|
|
error: you seem to be trying to use `match` for an equality check. Consider using `if`
|
|
--> $DIR/single_match.rs:106:5
|
|
|
|
|
LL | / match x {
|
|
LL | | FOO_C => println!(),
|
|
LL | | _ => (),
|
|
LL | | }
|
|
| |_____^ help: try this: `if x == FOO_C { println!() }`
|
|
|
|
error: you seem to be trying to use `match` for an equality check. Consider using `if`
|
|
--> $DIR/single_match.rs:111:5
|
|
|
|
|
LL | / match &&x {
|
|
LL | | Foo::A => println!(),
|
|
LL | | _ => (),
|
|
LL | | }
|
|
| |_____^ help: try this: `if x == Foo::A { println!() }`
|
|
|
|
error: you seem to be trying to use `match` for an equality check. Consider using `if`
|
|
--> $DIR/single_match.rs:117:5
|
|
|
|
|
LL | / match &x {
|
|
LL | | Foo::A => println!(),
|
|
LL | | _ => (),
|
|
LL | | }
|
|
| |_____^ help: try this: `if x == &Foo::A { println!() }`
|
|
|
|
error: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let`
|
|
--> $DIR/single_match.rs:134:5
|
|
|
|
|
LL | / match x {
|
|
LL | | Bar::A => println!(),
|
|
LL | | _ => (),
|
|
LL | | }
|
|
| |_____^ help: try this: `if let Bar::A = x { println!() }`
|
|
|
|
error: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let`
|
|
--> $DIR/single_match.rs:142:5
|
|
|
|
|
LL | / match x {
|
|
LL | | None => println!(),
|
|
LL | | _ => (),
|
|
LL | | };
|
|
| |_____^ help: try this: `if let None = x { println!() }`
|
|
|
|
error: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let`
|
|
--> $DIR/single_match.rs:162:5
|
|
|
|
|
LL | / match x {
|
|
LL | | (Some(_), _) => {},
|
|
LL | | (None, _) => {},
|
|
LL | | }
|
|
| |_____^ help: try this: `if let (Some(_), _) = x {}`
|
|
|
|
error: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let`
|
|
--> $DIR/single_match.rs:168:5
|
|
|
|
|
LL | / match x {
|
|
LL | | (Some(E::V), _) => todo!(),
|
|
LL | | (_, _) => {},
|
|
LL | | }
|
|
| |_____^ help: try this: `if let (Some(E::V), _) = x { todo!() }`
|
|
|
|
error: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let`
|
|
--> $DIR/single_match.rs:174:5
|
|
|
|
|
LL | / match (Some(42), Some(E::V), Some(42)) {
|
|
LL | | (.., Some(E::V), _) => {},
|
|
LL | | (..) => {},
|
|
LL | | }
|
|
| |_____^ help: try this: `if let (.., Some(E::V), _) = (Some(42), Some(E::V), Some(42)) {}`
|
|
|
|
error: aborting due to 15 previous errors
|
|
|