Add option_and_then_some lint
This commit is contained in:
parent
f01a0c0e08
commit
7065239da5
9 changed files with 201 additions and 10 deletions
21
tests/ui/option_and_then_some.fixed
Normal file
21
tests/ui/option_and_then_some.fixed
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// run-rustfix
|
||||
#![deny(clippy::option_and_then_some)]
|
||||
|
||||
// need a main anyway, use it get rid of unused warnings too
|
||||
pub fn main() {
|
||||
let x = Some(5);
|
||||
// the easiest cases
|
||||
let _ = x;
|
||||
let _ = x.map(|o| o + 1);
|
||||
// and an easy counter-example
|
||||
let _ = x.and_then(|o| if o < 32 { Some(o) } else { None });
|
||||
|
||||
// Different type
|
||||
let x: Result<u32, &str> = Ok(1);
|
||||
let _ = x.and_then(Ok);
|
||||
}
|
||||
|
||||
pub fn foo() -> Option<String> {
|
||||
let x = Some(String::from("hello"));
|
||||
Some("hello".to_owned()).and_then(|s| Some(format!("{}{}", s, x?)))
|
||||
}
|
||||
21
tests/ui/option_and_then_some.rs
Normal file
21
tests/ui/option_and_then_some.rs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// run-rustfix
|
||||
#![deny(clippy::option_and_then_some)]
|
||||
|
||||
// need a main anyway, use it get rid of unused warnings too
|
||||
pub fn main() {
|
||||
let x = Some(5);
|
||||
// the easiest cases
|
||||
let _ = x.and_then(Some);
|
||||
let _ = x.and_then(|o| Some(o + 1));
|
||||
// and an easy counter-example
|
||||
let _ = x.and_then(|o| if o < 32 { Some(o) } else { None });
|
||||
|
||||
// Different type
|
||||
let x: Result<u32, &str> = Ok(1);
|
||||
let _ = x.and_then(Ok);
|
||||
}
|
||||
|
||||
pub fn foo() -> Option<String> {
|
||||
let x = Some(String::from("hello"));
|
||||
Some("hello".to_owned()).and_then(|s| Some(format!("{}{}", s, x?)))
|
||||
}
|
||||
20
tests/ui/option_and_then_some.stderr
Normal file
20
tests/ui/option_and_then_some.stderr
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
error: using `Option.and_then(Some)`, which is a no-op
|
||||
--> $DIR/option_and_then_some.rs:8:13
|
||||
|
|
||||
LL | let _ = x.and_then(Some);
|
||||
| ^^^^^^^^^^^^^^^^ help: use the expression directly: `x`
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/option_and_then_some.rs:2:9
|
||||
|
|
||||
LL | #![deny(clippy::option_and_then_some)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: using `Option.and_then(|x| Some(y))`, which is more succinctly expressed as `map(|x| y)`
|
||||
--> $DIR/option_and_then_some.rs:9:13
|
||||
|
|
||||
LL | let _ = x.and_then(|o| Some(o + 1));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `x.map(|o| o + 1)`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue