diff options
Diffstat (limited to '')
-rw-r--r-- | src/tools/clippy/tests/ui/redundant_pattern_matching_result.fixed | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/src/tools/clippy/tests/ui/redundant_pattern_matching_result.fixed b/src/tools/clippy/tests/ui/redundant_pattern_matching_result.fixed new file mode 100644 index 000000000..83c783385 --- /dev/null +++ b/src/tools/clippy/tests/ui/redundant_pattern_matching_result.fixed @@ -0,0 +1,110 @@ +// run-rustfix + +#![warn(clippy::all)] +#![warn(clippy::redundant_pattern_matching)] +#![allow( + unused_must_use, + clippy::needless_bool, + clippy::match_like_matches_macro, + clippy::unnecessary_wraps, + deprecated, + clippy::if_same_then_else +)] + +fn main() { + let result: Result<usize, usize> = Err(5); + if result.is_ok() {} + + if Ok::<i32, i32>(42).is_ok() {} + + if Err::<i32, i32>(42).is_err() {} + + while Ok::<i32, i32>(10).is_ok() {} + + while Ok::<i32, i32>(10).is_err() {} + + if Ok::<i32, i32>(42).is_ok() {} + + if Err::<i32, i32>(42).is_err() {} + + if let Ok(x) = Ok::<i32, i32>(42) { + println!("{}", x); + } + + Ok::<i32, i32>(42).is_ok(); + + Ok::<i32, i32>(42).is_err(); + + Err::<i32, i32>(42).is_err(); + + Err::<i32, i32>(42).is_ok(); + + let _ = if Ok::<usize, ()>(4).is_ok() { true } else { false }; + + issue5504(); + issue6067(); + issue6065(); + + let _ = if gen_res().is_ok() { + 1 + } else if gen_res().is_err() { + 2 + } else { + 3 + }; +} + +fn gen_res() -> Result<(), ()> { + Ok(()) +} + +macro_rules! m { + () => { + Some(42u32) + }; +} + +fn issue5504() { + fn result_opt() -> Result<Option<i32>, i32> { + Err(42) + } + + fn try_result_opt() -> Result<i32, i32> { + while (r#try!(result_opt())).is_some() {} + if (r#try!(result_opt())).is_some() {} + Ok(42) + } + + try_result_opt(); + + if m!().is_some() {} + while m!().is_some() {} +} + +fn issue6065() { + macro_rules! if_let_in_macro { + ($pat:pat, $x:expr) => { + if let Some($pat) = $x {} + }; + } + + // shouldn't be linted + if_let_in_macro!(_, Some(42)); +} + +// Methods that are unstable const should not be suggested within a const context, see issue #5697. +// However, in Rust 1.48.0 the methods `is_ok` and `is_err` of `Result` were stabilized as const, +// so the following should be linted. +const fn issue6067() { + if Ok::<i32, i32>(42).is_ok() {} + + if Err::<i32, i32>(42).is_err() {} + + while Ok::<i32, i32>(10).is_ok() {} + + while Ok::<i32, i32>(10).is_err() {} + + Ok::<i32, i32>(42).is_ok(); + + Err::<i32, i32>(42).is_err(); +} |