2019-07-02 08:08:28 +02:00
|
|
|
#![warn(clippy::match_same_arms)]
|
2018-12-09 23:26:16 +01:00
|
|
|
#![allow(
|
|
|
|
clippy::blacklisted_name,
|
|
|
|
clippy::collapsible_if,
|
2019-02-23 02:19:50 +01:00
|
|
|
clippy::cognitive_complexity,
|
2018-12-09 23:26:16 +01:00
|
|
|
clippy::eq_op,
|
|
|
|
clippy::needless_continue,
|
|
|
|
clippy::needless_return,
|
|
|
|
clippy::no_effect,
|
|
|
|
clippy::zero_divided_by_zero,
|
|
|
|
clippy::unused_unit
|
|
|
|
)]
|
2018-07-28 17:34:52 +02:00
|
|
|
|
2016-02-10 01:22:53 +01:00
|
|
|
fn bar<T>(_: T) {}
|
2018-12-09 23:26:16 +01:00
|
|
|
fn foo() -> bool {
|
|
|
|
unimplemented!()
|
|
|
|
}
|
2016-01-30 18:03:53 +01:00
|
|
|
|
2016-10-08 15:16:00 +02:00
|
|
|
pub enum Abc {
|
|
|
|
A,
|
|
|
|
B,
|
|
|
|
C,
|
|
|
|
}
|
|
|
|
|
2018-09-27 19:10:20 +02:00
|
|
|
#[allow(clippy::unused_unit)]
|
2019-02-10 10:19:24 +01:00
|
|
|
fn match_same_arms() {
|
2016-10-02 02:17:04 +02:00
|
|
|
let _ = match 42 {
|
|
|
|
42 => {
|
|
|
|
foo();
|
|
|
|
let mut a = 42 + [23].len() as i32;
|
|
|
|
if true {
|
|
|
|
a += 7;
|
|
|
|
}
|
2018-12-09 23:26:16 +01:00
|
|
|
a = -31 - a;
|
2016-10-02 02:17:04 +02:00
|
|
|
a
|
2018-12-09 23:26:16 +01:00
|
|
|
},
|
|
|
|
_ => {
|
|
|
|
//~ ERROR match arms have same body
|
2016-10-02 02:17:04 +02:00
|
|
|
foo();
|
|
|
|
let mut a = 42 + [23].len() as i32;
|
|
|
|
if true {
|
|
|
|
a += 7;
|
|
|
|
}
|
2018-12-09 23:26:16 +01:00
|
|
|
a = -31 - a;
|
2016-10-02 02:17:04 +02:00
|
|
|
a
|
2018-12-09 23:26:16 +01:00
|
|
|
},
|
2016-01-30 19:16:49 +01:00
|
|
|
};
|
|
|
|
|
2016-10-08 15:16:00 +02:00
|
|
|
let _ = match Abc::A {
|
|
|
|
Abc::A => 0,
|
|
|
|
Abc::B => 1,
|
2018-02-08 20:26:50 +01:00
|
|
|
_ => 0, //~ ERROR match arms have same body
|
2016-10-08 15:16:00 +02:00
|
|
|
};
|
|
|
|
|
2016-02-10 01:22:53 +01:00
|
|
|
let _ = match 42 {
|
|
|
|
42 => foo(),
|
2018-02-08 20:26:50 +01:00
|
|
|
51 => foo(), //~ ERROR match arms have same body
|
2016-02-10 01:22:53 +01:00
|
|
|
_ => true,
|
|
|
|
};
|
|
|
|
|
2016-03-29 01:39:35 +02:00
|
|
|
let _ = match Some(42) {
|
|
|
|
Some(_) => 24,
|
2018-02-08 20:26:50 +01:00
|
|
|
None => 24, //~ ERROR match arms have same body
|
2016-03-29 01:39:35 +02:00
|
|
|
};
|
|
|
|
|
2016-05-31 21:50:13 +02:00
|
|
|
let _ = match Some(42) {
|
|
|
|
Some(foo) => 24,
|
|
|
|
None => 24,
|
|
|
|
};
|
|
|
|
|
2016-02-10 01:22:53 +01:00
|
|
|
let _ = match Some(42) {
|
|
|
|
Some(42) => 24,
|
|
|
|
Some(a) => 24, // bindings are different
|
|
|
|
None => 0,
|
|
|
|
};
|
|
|
|
|
2016-03-29 01:39:35 +02:00
|
|
|
let _ = match Some(42) {
|
|
|
|
Some(a) if a > 0 => 24,
|
|
|
|
Some(a) => 24, // one arm has a guard
|
|
|
|
None => 0,
|
|
|
|
};
|
|
|
|
|
2016-02-10 01:22:53 +01:00
|
|
|
match (Some(42), Some(42)) {
|
|
|
|
(Some(a), None) => bar(a),
|
2018-02-08 20:26:50 +01:00
|
|
|
(None, Some(a)) => bar(a), //~ ERROR match arms have same body
|
2016-02-10 01:22:53 +01:00
|
|
|
_ => (),
|
|
|
|
}
|
|
|
|
|
2016-05-27 14:24:28 +02:00
|
|
|
match (Some(42), Some(42)) {
|
|
|
|
(Some(a), ..) => bar(a),
|
2018-02-08 20:26:50 +01:00
|
|
|
(.., Some(a)) => bar(a), //~ ERROR match arms have same body
|
2016-05-27 14:24:28 +02:00
|
|
|
_ => (),
|
|
|
|
}
|
|
|
|
|
|
|
|
match (1, 2, 3) {
|
|
|
|
(1, .., 3) => 42,
|
2018-02-08 20:26:50 +01:00
|
|
|
(.., 3) => 42, //~ ERROR match arms have same body
|
2016-05-27 14:24:28 +02:00
|
|
|
_ => 0,
|
|
|
|
};
|
|
|
|
|
2016-07-13 09:43:33 +02:00
|
|
|
let _ = match Some(()) {
|
|
|
|
Some(()) => 0.0,
|
2018-12-09 23:26:16 +01:00
|
|
|
None => -0.0,
|
2016-07-13 09:43:33 +02:00
|
|
|
};
|
|
|
|
|
2016-02-10 01:22:53 +01:00
|
|
|
match (Some(42), Some("")) {
|
|
|
|
(Some(a), None) => bar(a),
|
|
|
|
(None, Some(a)) => bar(a), // bindings have different types
|
|
|
|
_ => (),
|
|
|
|
}
|
2019-05-16 14:13:57 +02:00
|
|
|
|
|
|
|
let _ = match 42 {
|
|
|
|
42 => 1,
|
|
|
|
51 => 1, //~ ERROR match arms have same body
|
|
|
|
41 => 2,
|
|
|
|
52 => 2, //~ ERROR match arms have same body
|
|
|
|
_ => 0,
|
|
|
|
};
|
2019-05-20 10:22:13 +02:00
|
|
|
|
|
|
|
let _ = match 42 {
|
|
|
|
1 => 2,
|
2019-05-20 18:25:13 +02:00
|
|
|
2 => 2, //~ ERROR 2nd matched arms have same body
|
2019-05-20 10:22:13 +02:00
|
|
|
3 => 2, //~ ERROR 3rd matched arms have same body
|
|
|
|
4 => 3,
|
|
|
|
_ => 0,
|
|
|
|
};
|
2016-01-30 19:16:49 +01:00
|
|
|
}
|
|
|
|
|
2019-07-02 08:08:28 +02:00
|
|
|
mod issue4244 {
|
|
|
|
#[derive(PartialEq, PartialOrd, Eq, Ord)]
|
|
|
|
pub enum CommandInfo {
|
|
|
|
BuiltIn { name: String, about: Option<String> },
|
|
|
|
External { name: String, path: std::path::PathBuf },
|
|
|
|
}
|
|
|
|
|
|
|
|
impl CommandInfo {
|
|
|
|
pub fn name(&self) -> String {
|
|
|
|
match self {
|
|
|
|
CommandInfo::BuiltIn { name, .. } => name.to_string(),
|
|
|
|
CommandInfo::External { name, .. } => name.to_string(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-01-30 19:16:49 +01:00
|
|
|
fn main() {}
|