diff --git a/tests/ui/match_same_arms.rs b/tests/ui/match_same_arms.rs index b53ca79ad..0b9342c9c 100644 --- a/tests/ui/match_same_arms.rs +++ b/tests/ui/match_same_arms.rs @@ -1,20 +1,4 @@ #![warn(clippy::match_same_arms)] -#![allow( - clippy::blacklisted_name, - clippy::collapsible_if, - clippy::cognitive_complexity, - clippy::eq_op, - clippy::needless_continue, - clippy::needless_return, - clippy::no_effect, - clippy::zero_divided_by_zero, - clippy::unused_unit -)] - -fn bar(_: T) {} -fn foo() -> bool { - unimplemented!() -} pub enum Abc { A, @@ -22,93 +6,19 @@ pub enum Abc { C, } -#[allow(clippy::unused_unit)] fn match_same_arms() { - let _ = match 42 { - 42 => { - foo(); - let mut a = 42 + [23].len() as i32; - if true { - a += 7; - } - a = -31 - a; - a - }, - _ => { - //~ ERROR match arms have same body - foo(); - let mut a = 42 + [23].len() as i32; - if true { - a += 7; - } - a = -31 - a; - a - }, - }; - let _ = match Abc::A { Abc::A => 0, Abc::B => 1, _ => 0, //~ ERROR match arms have same body }; - let _ = match 42 { - 42 => foo(), - 51 => foo(), //~ ERROR match arms have same body - _ => true, - }; - - let _ = match Some(42) { - Some(_) => 24, - None => 24, //~ ERROR match arms have same body - }; - - let _ = match Some(42) { - Some(foo) => 24, - None => 24, - }; - - let _ = match Some(42) { - Some(42) => 24, - Some(a) => 24, // bindings are different - None => 0, - }; - - let _ = match Some(42) { - Some(a) if a > 0 => 24, - Some(a) => 24, // one arm has a guard - None => 0, - }; - - match (Some(42), Some(42)) { - (Some(a), None) => bar(a), - (None, Some(a)) => bar(a), //~ ERROR match arms have same body - _ => (), - } - - match (Some(42), Some(42)) { - (Some(a), ..) => bar(a), - (.., Some(a)) => bar(a), //~ ERROR match arms have same body - _ => (), - } - match (1, 2, 3) { (1, .., 3) => 42, (.., 3) => 42, //~ ERROR match arms have same body _ => 0, }; - let _ = match Some(()) { - Some(()) => 0.0, - None => -0.0, - }; - - match (Some(42), Some("")) { - (Some(a), None) => bar(a), - (None, Some(a)) => bar(a), // bindings have different types - _ => (), - } - let _ = match 42 { 42 => 1, 51 => 1, //~ ERROR match arms have same body diff --git a/tests/ui/match_same_arms.stderr b/tests/ui/match_same_arms.stderr index f2153cfb3..0549886a1 100644 --- a/tests/ui/match_same_arms.stderr +++ b/tests/ui/match_same_arms.stderr @@ -1,245 +1,139 @@ error: this `match` has identical arm bodies - --> $DIR/match_same_arms.rs:37:14 - | -LL | _ => { - | ______________^ -LL | | //~ ERROR match arms have same body -LL | | foo(); -LL | | let mut a = 42 + [23].len() as i32; -... | -LL | | a -LL | | }, - | |_________^ - | - = note: `-D clippy::match-same-arms` implied by `-D warnings` -note: same as this - --> $DIR/match_same_arms.rs:28:15 - | -LL | 42 => { - | _______________^ -LL | | foo(); -LL | | let mut a = 42 + [23].len() as i32; -LL | | if true { -... | -LL | | a -LL | | }, - | |_________^ -note: `42` has the same arm body as the `_` wildcard, consider removing it - --> $DIR/match_same_arms.rs:28:15 - | -LL | 42 => { - | _______________^ -LL | | foo(); -LL | | let mut a = 42 + [23].len() as i32; -LL | | if true { -... | -LL | | a -LL | | }, - | |_________^ - -error: this `match` has identical arm bodies - --> $DIR/match_same_arms.rs:52:14 + --> $DIR/match_same_arms.rs:13:14 | LL | _ => 0, //~ ERROR match arms have same body | ^ | + = note: `-D clippy::match-same-arms` implied by `-D warnings` note: same as this - --> $DIR/match_same_arms.rs:50:19 + --> $DIR/match_same_arms.rs:11:19 | LL | Abc::A => 0, | ^ note: `Abc::A` has the same arm body as the `_` wildcard, consider removing it - --> $DIR/match_same_arms.rs:50:19 + --> $DIR/match_same_arms.rs:11:19 | LL | Abc::A => 0, | ^ error: this `match` has identical arm bodies - --> $DIR/match_same_arms.rs:57:15 - | -LL | 51 => foo(), //~ ERROR match arms have same body - | ^^^^^ - | -note: same as this - --> $DIR/match_same_arms.rs:56:15 - | -LL | 42 => foo(), - | ^^^^^ -help: consider refactoring into `42 | 51` - --> $DIR/match_same_arms.rs:56:9 - | -LL | 42 => foo(), - | ^^ - -error: this `match` has identical arm bodies - --> $DIR/match_same_arms.rs:63:17 - | -LL | None => 24, //~ ERROR match arms have same body - | ^^ - | -note: same as this - --> $DIR/match_same_arms.rs:62:20 - | -LL | Some(_) => 24, - | ^^ -help: consider refactoring into `Some(_) | None` - --> $DIR/match_same_arms.rs:62:9 - | -LL | Some(_) => 24, - | ^^^^^^^ - -error: this `match` has identical arm bodies - --> $DIR/match_same_arms.rs:85:28 - | -LL | (None, Some(a)) => bar(a), //~ ERROR match arms have same body - | ^^^^^^ - | -note: same as this - --> $DIR/match_same_arms.rs:84:28 - | -LL | (Some(a), None) => bar(a), - | ^^^^^^ -help: consider refactoring into `(Some(a), None) | (None, Some(a))` - --> $DIR/match_same_arms.rs:84:9 - | -LL | (Some(a), None) => bar(a), - | ^^^^^^^^^^^^^^^ - -error: this `match` has identical arm bodies - --> $DIR/match_same_arms.rs:91:26 - | -LL | (.., Some(a)) => bar(a), //~ ERROR match arms have same body - | ^^^^^^ - | -note: same as this - --> $DIR/match_same_arms.rs:90:26 - | -LL | (Some(a), ..) => bar(a), - | ^^^^^^ -help: consider refactoring into `(Some(a), ..) | (.., Some(a))` - --> $DIR/match_same_arms.rs:90:9 - | -LL | (Some(a), ..) => bar(a), - | ^^^^^^^^^^^^^ - -error: this `match` has identical arm bodies - --> $DIR/match_same_arms.rs:97:20 + --> $DIR/match_same_arms.rs:18:20 | LL | (.., 3) => 42, //~ ERROR match arms have same body | ^^ | note: same as this - --> $DIR/match_same_arms.rs:96:23 + --> $DIR/match_same_arms.rs:17:23 | LL | (1, .., 3) => 42, | ^^ help: consider refactoring into `(1, .., 3) | (.., 3)` - --> $DIR/match_same_arms.rs:96:9 + --> $DIR/match_same_arms.rs:17:9 | LL | (1, .., 3) => 42, | ^^^^^^^^^^ error: this `match` has identical arm bodies - --> $DIR/match_same_arms.rs:114:15 + --> $DIR/match_same_arms.rs:24:15 | LL | 51 => 1, //~ ERROR match arms have same body | ^ | note: same as this - --> $DIR/match_same_arms.rs:113:15 + --> $DIR/match_same_arms.rs:23:15 | LL | 42 => 1, | ^ help: consider refactoring into `42 | 51` - --> $DIR/match_same_arms.rs:113:9 + --> $DIR/match_same_arms.rs:23:9 | LL | 42 => 1, | ^^ error: this `match` has identical arm bodies - --> $DIR/match_same_arms.rs:116:15 + --> $DIR/match_same_arms.rs:26:15 | LL | 52 => 2, //~ ERROR match arms have same body | ^ | note: same as this - --> $DIR/match_same_arms.rs:115:15 + --> $DIR/match_same_arms.rs:25:15 | LL | 41 => 2, | ^ help: consider refactoring into `41 | 52` - --> $DIR/match_same_arms.rs:115:9 + --> $DIR/match_same_arms.rs:25:9 | LL | 41 => 2, | ^^ error: this `match` has identical arm bodies - --> $DIR/match_same_arms.rs:122:14 + --> $DIR/match_same_arms.rs:32:14 | LL | 2 => 2, //~ ERROR 2nd matched arms have same body | ^ | note: same as this - --> $DIR/match_same_arms.rs:121:14 + --> $DIR/match_same_arms.rs:31:14 | LL | 1 => 2, | ^ help: consider refactoring into `1 | 2` - --> $DIR/match_same_arms.rs:121:9 + --> $DIR/match_same_arms.rs:31:9 | LL | 1 => 2, | ^ error: this `match` has identical arm bodies - --> $DIR/match_same_arms.rs:123:14 + --> $DIR/match_same_arms.rs:33:14 | LL | 3 => 2, //~ ERROR 3rd matched arms have same body | ^ | note: same as this - --> $DIR/match_same_arms.rs:121:14 + --> $DIR/match_same_arms.rs:31:14 | LL | 1 => 2, | ^ help: consider refactoring into `1 | 3` - --> $DIR/match_same_arms.rs:121:9 + --> $DIR/match_same_arms.rs:31:9 | LL | 1 => 2, | ^ error: this `match` has identical arm bodies - --> $DIR/match_same_arms.rs:123:14 + --> $DIR/match_same_arms.rs:33:14 | LL | 3 => 2, //~ ERROR 3rd matched arms have same body | ^ | note: same as this - --> $DIR/match_same_arms.rs:122:14 + --> $DIR/match_same_arms.rs:32:14 | LL | 2 => 2, //~ ERROR 2nd matched arms have same body | ^ help: consider refactoring into `2 | 3` - --> $DIR/match_same_arms.rs:122:9 + --> $DIR/match_same_arms.rs:32:9 | LL | 2 => 2, //~ ERROR 2nd matched arms have same body | ^ error: this `match` has identical arm bodies - --> $DIR/match_same_arms.rs:140:55 + --> $DIR/match_same_arms.rs:50:55 | LL | CommandInfo::External { name, .. } => name.to_string(), | ^^^^^^^^^^^^^^^^ | note: same as this - --> $DIR/match_same_arms.rs:139:54 + --> $DIR/match_same_arms.rs:49:54 | LL | CommandInfo::BuiltIn { name, .. } => name.to_string(), | ^^^^^^^^^^^^^^^^ help: consider refactoring into `CommandInfo::BuiltIn { name, .. } | CommandInfo::External { name, .. }` - --> $DIR/match_same_arms.rs:139:17 + --> $DIR/match_same_arms.rs:49:17 | LL | CommandInfo::BuiltIn { name, .. } => name.to_string(), | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error: aborting due to 13 previous errors +error: aborting due to 8 previous errors diff --git a/tests/ui/match_same_arms2.rs b/tests/ui/match_same_arms2.rs new file mode 100644 index 000000000..21b1c439e --- /dev/null +++ b/tests/ui/match_same_arms2.rs @@ -0,0 +1,84 @@ +#![warn(clippy::match_same_arms)] +#![allow(clippy::blacklisted_name)] + +fn bar(_: T) {} +fn foo() -> bool { + unimplemented!() +} + +fn match_same_arms() { + let _ = match 42 { + 42 => { + foo(); + let mut a = 42 + [23].len() as i32; + if true { + a += 7; + } + a = -31 - a; + a + }, + _ => { + //~ ERROR match arms have same body + foo(); + let mut a = 42 + [23].len() as i32; + if true { + a += 7; + } + a = -31 - a; + a + }, + }; + + let _ = match 42 { + 42 => foo(), + 51 => foo(), //~ ERROR match arms have same body + _ => true, + }; + + let _ = match Some(42) { + Some(_) => 24, + None => 24, //~ ERROR match arms have same body + }; + + let _ = match Some(42) { + Some(foo) => 24, + None => 24, + }; + + let _ = match Some(42) { + Some(42) => 24, + Some(a) => 24, // bindings are different + None => 0, + }; + + let _ = match Some(42) { + Some(a) if a > 0 => 24, + Some(a) => 24, // one arm has a guard + None => 0, + }; + + match (Some(42), Some(42)) { + (Some(a), None) => bar(a), + (None, Some(a)) => bar(a), //~ ERROR match arms have same body + _ => (), + } + + match (Some(42), Some(42)) { + (Some(a), ..) => bar(a), + (.., Some(a)) => bar(a), //~ ERROR match arms have same body + _ => (), + } + + let _ = match Some(()) { + Some(()) => 0.0, + None => -0.0, + }; + + match (Some(42), Some("")) { + (Some(a), None) => bar(a), + (None, Some(a)) => bar(a), // bindings have different types + _ => (), + } +} + +fn main() {} diff --git a/tests/ui/match_same_arms2.stderr b/tests/ui/match_same_arms2.stderr new file mode 100644 index 000000000..e34c2c30a --- /dev/null +++ b/tests/ui/match_same_arms2.stderr @@ -0,0 +1,109 @@ +error: this `match` has identical arm bodies + --> $DIR/match_same_arms2.rs:20:14 + | +LL | _ => { + | ______________^ +LL | | //~ ERROR match arms have same body +LL | | foo(); +LL | | let mut a = 42 + [23].len() as i32; +... | +LL | | a +LL | | }, + | |_________^ + | + = note: `-D clippy::match-same-arms` implied by `-D warnings` +note: same as this + --> $DIR/match_same_arms2.rs:11:15 + | +LL | 42 => { + | _______________^ +LL | | foo(); +LL | | let mut a = 42 + [23].len() as i32; +LL | | if true { +... | +LL | | a +LL | | }, + | |_________^ +note: `42` has the same arm body as the `_` wildcard, consider removing it + --> $DIR/match_same_arms2.rs:11:15 + | +LL | 42 => { + | _______________^ +LL | | foo(); +LL | | let mut a = 42 + [23].len() as i32; +LL | | if true { +... | +LL | | a +LL | | }, + | |_________^ + +error: this `match` has identical arm bodies + --> $DIR/match_same_arms2.rs:34:15 + | +LL | 51 => foo(), //~ ERROR match arms have same body + | ^^^^^ + | +note: same as this + --> $DIR/match_same_arms2.rs:33:15 + | +LL | 42 => foo(), + | ^^^^^ +help: consider refactoring into `42 | 51` + --> $DIR/match_same_arms2.rs:33:9 + | +LL | 42 => foo(), + | ^^ + +error: this `match` has identical arm bodies + --> $DIR/match_same_arms2.rs:40:17 + | +LL | None => 24, //~ ERROR match arms have same body + | ^^ + | +note: same as this + --> $DIR/match_same_arms2.rs:39:20 + | +LL | Some(_) => 24, + | ^^ +help: consider refactoring into `Some(_) | None` + --> $DIR/match_same_arms2.rs:39:9 + | +LL | Some(_) => 24, + | ^^^^^^^ + +error: this `match` has identical arm bodies + --> $DIR/match_same_arms2.rs:62:28 + | +LL | (None, Some(a)) => bar(a), //~ ERROR match arms have same body + | ^^^^^^ + | +note: same as this + --> $DIR/match_same_arms2.rs:61:28 + | +LL | (Some(a), None) => bar(a), + | ^^^^^^ +help: consider refactoring into `(Some(a), None) | (None, Some(a))` + --> $DIR/match_same_arms2.rs:61:9 + | +LL | (Some(a), None) => bar(a), + | ^^^^^^^^^^^^^^^ + +error: this `match` has identical arm bodies + --> $DIR/match_same_arms2.rs:68:26 + | +LL | (.., Some(a)) => bar(a), //~ ERROR match arms have same body + | ^^^^^^ + | +note: same as this + --> $DIR/match_same_arms2.rs:67:26 + | +LL | (Some(a), ..) => bar(a), + | ^^^^^^ +help: consider refactoring into `(Some(a), ..) | (.., Some(a))` + --> $DIR/match_same_arms2.rs:67:9 + | +LL | (Some(a), ..) => bar(a), + | ^^^^^^^^^^^^^ + +error: aborting due to 5 previous errors +