2023-04-20 09:37:15 -05:00
|
|
|
//@run-rustfix
|
2022-03-18 17:18:36 -05:00
|
|
|
|
2022-03-17 19:04:33 -05:00
|
|
|
#![warn(clippy::or_then_unwrap)]
|
2023-05-31 12:47:10 -05:00
|
|
|
#![allow(clippy::map_identity, clippy::let_unit_value, clippy::unnecessary_literal_unwrap)]
|
2022-03-17 12:57:28 -05:00
|
|
|
|
2022-03-27 07:41:09 -05:00
|
|
|
struct SomeStruct;
|
2022-03-17 12:57:28 -05:00
|
|
|
impl SomeStruct {
|
2022-03-17 13:13:44 -05:00
|
|
|
fn or(self, _: Option<Self>) -> Self {
|
|
|
|
self
|
|
|
|
}
|
|
|
|
fn unwrap(&self) {}
|
2022-03-17 12:57:28 -05:00
|
|
|
}
|
|
|
|
|
2022-03-27 07:41:09 -05:00
|
|
|
struct SomeOtherStruct;
|
2022-03-17 18:51:26 -05:00
|
|
|
impl SomeOtherStruct {
|
|
|
|
fn or(self) -> Self {
|
|
|
|
self
|
|
|
|
}
|
|
|
|
fn unwrap(&self) {}
|
|
|
|
}
|
|
|
|
|
2022-03-17 12:57:28 -05:00
|
|
|
fn main() {
|
|
|
|
let option: Option<&str> = None;
|
|
|
|
let _ = option.or(Some("fallback")).unwrap(); // should trigger lint
|
|
|
|
|
|
|
|
let result: Result<&str, &str> = Err("Error");
|
|
|
|
let _ = result.or::<&str>(Ok("fallback")).unwrap(); // should trigger lint
|
|
|
|
|
2022-03-19 12:17:43 -05:00
|
|
|
// as part of a method chain
|
|
|
|
let option: Option<&str> = None;
|
|
|
|
let _ = option.map(|v| v).or(Some("fallback")).unwrap().to_string().chars(); // should trigger lint
|
|
|
|
|
2022-03-17 12:57:28 -05:00
|
|
|
// Not Option/Result
|
|
|
|
let instance = SomeStruct {};
|
|
|
|
let _ = instance.or(Some(SomeStruct {})).unwrap(); // should not trigger lint
|
|
|
|
|
2022-03-18 08:45:48 -05:00
|
|
|
// or takes no argument
|
2022-03-17 18:51:26 -05:00
|
|
|
let instance = SomeOtherStruct {};
|
|
|
|
let _ = instance.or().unwrap(); // should not trigger lint and should not panic
|
|
|
|
|
2022-03-17 12:57:28 -05:00
|
|
|
// None in or
|
|
|
|
let option: Option<&str> = None;
|
|
|
|
let _ = option.or(None).unwrap(); // should not trigger lint
|
|
|
|
|
|
|
|
// Not Err in or
|
|
|
|
let result: Result<&str, &str> = Err("Error");
|
|
|
|
let _ = result.or::<&str>(Err("Other Error")).unwrap(); // should not trigger lint
|
2022-03-17 18:51:26 -05:00
|
|
|
|
|
|
|
// other function between
|
|
|
|
let option: Option<&str> = None;
|
|
|
|
let _ = option.or(Some("fallback")).map(|v| v).unwrap(); // should not trigger lint
|
2022-03-17 12:57:28 -05:00
|
|
|
}
|