rust/tests/ui/unnecessary_lazy_eval.fixed

112 lines
3.8 KiB
Rust
Raw Normal View History

2020-06-15 11:21:56 +02:00
// run-rustfix
#![warn(clippy::unnecessary_lazy_evaluation)]
#![allow(clippy::redundant_closure)]
#![allow(clippy::bind_instead_of_map)]
struct Deep(Option<usize>);
2020-06-15 11:21:56 +02:00
#[derive(Copy, Clone)]
struct SomeStruct {
some_field: usize,
2020-06-15 11:21:56 +02:00
}
impl SomeStruct {
fn return_some_field(&self) -> usize {
2020-06-15 11:21:56 +02:00
self.some_field
}
}
fn some_call<T: Default>() -> T {
T::default()
}
fn main() {
let astronomers_pi = 10;
let ext_arr: [usize; 1] = [2];
2020-06-15 11:21:56 +02:00
let ext_str = SomeStruct { some_field: 10 };
// Should lint - Option
let mut opt = Some(42);
let ext_opt = Some(42);
let _ = opt.unwrap_or(2);
let _ = opt.unwrap_or(astronomers_pi);
let _ = opt.unwrap_or(ext_str.some_field);
let _ = opt.unwrap_or(ext_arr[0]);
2020-06-15 11:21:56 +02:00
let _ = opt.and(ext_opt);
let _ = opt.or(ext_opt);
let _ = opt.or(None);
let _ = opt.get_or_insert(2);
let _ = opt.ok_or(2);
let _ = opt.ok_or(ext_arr[0]);
2020-06-15 11:21:56 +02:00
// Cases when unwrap is not called on a simple variable
let _ = Some(10).unwrap_or(2);
let _ = Some(10).and(ext_opt);
let _: Option<usize> = None.or(ext_opt);
2020-06-15 11:21:56 +02:00
let _ = None.get_or_insert(2);
let _: Result<usize, usize> = None.ok_or(2);
let _: Option<usize> = None.or(None);
2020-06-15 11:21:56 +02:00
let mut deep = Deep(Some(42));
let _ = deep.0.unwrap_or(2);
let _ = deep.0.and(ext_opt);
let _ = deep.0.or(None);
let _ = deep.0.get_or_insert(2);
let _ = deep.0.ok_or(2);
// Should not lint - Option
let _ = opt.unwrap_or_else(|| ext_str.return_some_field());
let _ = opt.or_else(some_call);
let _ = opt.or_else(|| some_call());
let _: Result<usize, usize> = opt.ok_or_else(|| some_call());
let _: Result<usize, usize> = opt.ok_or_else(some_call);
2020-06-15 11:21:56 +02:00
let _ = deep.0.get_or_insert_with(|| some_call());
let _ = deep.0.or_else(some_call);
let _ = deep.0.or_else(|| some_call());
// These are handled by bind_instead_of_map
let _ = Some(10).and_then(|idx| Some(ext_arr[idx]));
let _ = Some(10).and_then(|idx| Some(idx));
let _: Option<usize> = None.or_else(|| Some(3));
2020-06-15 11:21:56 +02:00
let _ = deep.0.or_else(|| Some(3));
let _ = opt.or_else(|| Some(3));
// Should lint - Result
let res: Result<usize, usize> = Err(5);
let res2: Result<usize, SomeStruct> = Err(SomeStruct { some_field: 5 });
2020-06-15 11:21:56 +02:00
let _ = res2.unwrap_or(2);
let _ = res2.unwrap_or(astronomers_pi);
let _ = res2.unwrap_or(ext_str.some_field);
// Should not lint - Result
let _ = res.unwrap_or_else(|err| err);
let _ = res.unwrap_or_else(|err| ext_arr[err]);
2020-06-15 11:21:56 +02:00
let _ = res2.unwrap_or_else(|err| err.some_field);
let _ = res2.unwrap_or_else(|err| err.return_some_field());
let _ = res2.unwrap_or_else(|_| ext_str.return_some_field());
let _: Result<usize, usize> = res.and_then(|x| Ok(x));
let _: Result<usize, usize> = res.and_then(|x| Err(x));
2020-06-15 11:21:56 +02:00
let _: Result<usize, usize> = res.or_else(|err| Ok(err));
let _: Result<usize, usize> = res.or_else(|err| Err(err));
2020-06-15 11:21:56 +02:00
// These are handled by bind_instead_of_map
let _: Result<usize, usize> = res.and_then(|_| Ok(2));
let _: Result<usize, usize> = res.and_then(|_| Ok(astronomers_pi));
let _: Result<usize, usize> = res.and_then(|_| Ok(ext_str.some_field));
2020-06-15 11:21:56 +02:00
let _: Result<usize, usize> = res.and_then(|_| Err(2));
let _: Result<usize, usize> = res.and_then(|_| Err(astronomers_pi));
let _: Result<usize, usize> = res.and_then(|_| Err(ext_str.some_field));
2020-06-15 11:21:56 +02:00
let _: Result<usize, usize> = res.or_else(|_| Ok(2));
let _: Result<usize, usize> = res.or_else(|_| Ok(astronomers_pi));
let _: Result<usize, usize> = res.or_else(|_| Ok(ext_str.some_field));
2020-06-15 11:21:56 +02:00
let _: Result<usize, usize> = res.or_else(|_| Err(2));
let _: Result<usize, usize> = res.or_else(|_| Err(astronomers_pi));
let _: Result<usize, usize> = res.or_else(|_| Err(ext_str.some_field));
2020-06-15 11:21:56 +02:00
}