add manual_ok_or lint
This commit is contained in:
parent
afbac8906e
commit
111b9023da
7 changed files with 234 additions and 0 deletions
40
tests/ui/manual_ok_or.fixed
Normal file
40
tests/ui/manual_ok_or.fixed
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
// run-rustfix
|
||||
#![warn(clippy::manual_ok_or)]
|
||||
#![allow(clippy::blacklisted_name)]
|
||||
#![allow(clippy::redundant_closure)]
|
||||
#![allow(dead_code)]
|
||||
#![allow(unused_must_use)]
|
||||
|
||||
fn main() {
|
||||
// basic case
|
||||
let foo: Option<i32> = None;
|
||||
foo.ok_or("error");
|
||||
|
||||
// eta expansion case
|
||||
foo.ok_or("error");
|
||||
|
||||
// turbo fish syntax
|
||||
None::<i32>.ok_or("error");
|
||||
|
||||
// multiline case
|
||||
#[rustfmt::skip]
|
||||
foo.ok_or(&format!(
|
||||
"{}{}{}{}{}{}{}",
|
||||
"Alice", "Bob", "Sarah", "Marc", "Sandra", "Eric", "Jenifer"));
|
||||
|
||||
// not applicable, closure isn't direct `Ok` wrapping
|
||||
foo.map_or(Err("error"), |v| Ok(v + 1));
|
||||
|
||||
// not applicable, or side isn't `Result::Err`
|
||||
foo.map_or(Ok::<i32, &str>(1), |v| Ok(v));
|
||||
|
||||
// not applicatble, expr is not a `Result` value
|
||||
foo.map_or(42, |v| v);
|
||||
|
||||
// TODO patterns not covered yet
|
||||
match foo {
|
||||
Some(v) => Ok(v),
|
||||
None => Err("error"),
|
||||
};
|
||||
foo.map_or_else(|| Err("error"), |v| Ok(v));
|
||||
}
|
||||
44
tests/ui/manual_ok_or.rs
Normal file
44
tests/ui/manual_ok_or.rs
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
// run-rustfix
|
||||
#![warn(clippy::manual_ok_or)]
|
||||
#![allow(clippy::blacklisted_name)]
|
||||
#![allow(clippy::redundant_closure)]
|
||||
#![allow(dead_code)]
|
||||
#![allow(unused_must_use)]
|
||||
|
||||
fn main() {
|
||||
// basic case
|
||||
let foo: Option<i32> = None;
|
||||
foo.map_or(Err("error"), |v| Ok(v));
|
||||
|
||||
// eta expansion case
|
||||
foo.map_or(Err("error"), Ok);
|
||||
|
||||
// turbo fish syntax
|
||||
None::<i32>.map_or(Err("error"), |v| Ok(v));
|
||||
|
||||
// multiline case
|
||||
#[rustfmt::skip]
|
||||
foo.map_or(Err::<i32, &str>(
|
||||
&format!(
|
||||
"{}{}{}{}{}{}{}",
|
||||
"Alice", "Bob", "Sarah", "Marc", "Sandra", "Eric", "Jenifer")
|
||||
),
|
||||
|v| Ok(v),
|
||||
);
|
||||
|
||||
// not applicable, closure isn't direct `Ok` wrapping
|
||||
foo.map_or(Err("error"), |v| Ok(v + 1));
|
||||
|
||||
// not applicable, or side isn't `Result::Err`
|
||||
foo.map_or(Ok::<i32, &str>(1), |v| Ok(v));
|
||||
|
||||
// not applicatble, expr is not a `Result` value
|
||||
foo.map_or(42, |v| v);
|
||||
|
||||
// TODO patterns not covered yet
|
||||
match foo {
|
||||
Some(v) => Ok(v),
|
||||
None => Err("error"),
|
||||
};
|
||||
foo.map_or_else(|| Err("error"), |v| Ok(v));
|
||||
}
|
||||
41
tests/ui/manual_ok_or.stderr
Normal file
41
tests/ui/manual_ok_or.stderr
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
error: this pattern reimplements `Option::ok_or`
|
||||
--> $DIR/manual_ok_or.rs:11:5
|
||||
|
|
||||
LL | foo.map_or(Err("error"), |v| Ok(v));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `foo.ok_or("error")`
|
||||
|
|
||||
= note: `-D clippy::manual-ok-or` implied by `-D warnings`
|
||||
|
||||
error: this pattern reimplements `Option::ok_or`
|
||||
--> $DIR/manual_ok_or.rs:14:5
|
||||
|
|
||||
LL | foo.map_or(Err("error"), Ok);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `foo.ok_or("error")`
|
||||
|
||||
error: this pattern reimplements `Option::ok_or`
|
||||
--> $DIR/manual_ok_or.rs:17:5
|
||||
|
|
||||
LL | None::<i32>.map_or(Err("error"), |v| Ok(v));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `None::<i32>.ok_or("error")`
|
||||
|
||||
error: this pattern reimplements `Option::ok_or`
|
||||
--> $DIR/manual_ok_or.rs:21:5
|
||||
|
|
||||
LL | / foo.map_or(Err::<i32, &str>(
|
||||
LL | | &format!(
|
||||
LL | | "{}{}{}{}{}{}{}",
|
||||
LL | | "Alice", "Bob", "Sarah", "Marc", "Sandra", "Eric", "Jenifer")
|
||||
LL | | ),
|
||||
LL | | |v| Ok(v),
|
||||
LL | | );
|
||||
| |_____^
|
||||
|
|
||||
help: replace with
|
||||
|
|
||||
LL | foo.ok_or(&format!(
|
||||
LL | "{}{}{}{}{}{}{}",
|
||||
LL | "Alice", "Bob", "Sarah", "Marc", "Sandra", "Eric", "Jenifer"));
|
||||
|
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue