rust/tests/ui/unnecessary_wraps.rs

154 lines
3.0 KiB
Rust
Raw Normal View History

2023-07-27 06:40:22 -05:00
//@no-rustfix: overlapping suggestions
2020-11-17 10:01:22 -06:00
#![warn(clippy::unnecessary_wraps)]
#![allow(clippy::no_effect)]
#![allow(clippy::needless_return)]
#![allow(clippy::if_same_then_else)]
2020-09-20 04:22:01 -05:00
#![allow(dead_code)]
// should be linted
fn func1(a: bool, b: bool) -> Option<i32> {
//~^ ERROR: this function's return value is unnecessarily wrapped by `Option`
//~| NOTE: `-D clippy::unnecessary-wraps` implied by `-D warnings`
if a && b {
return Some(42);
}
if a {
Some(-1);
Some(2)
} else {
return Some(1337);
}
}
2020-09-26 02:27:10 -05:00
// should be linted
fn func2(a: bool, b: bool) -> Option<i32> {
//~^ ERROR: this function's return value is unnecessarily wrapped by `Option`
2020-09-26 02:27:10 -05:00
if a && b {
return Some(10);
}
if a { Some(20) } else { Some(30) }
2020-09-26 02:27:10 -05:00
}
// public fns should not be linted
2020-09-26 02:27:10 -05:00
pub fn func3(a: bool) -> Option<i32> {
if a { Some(1) } else { Some(1) }
}
// should not be linted
2020-09-26 02:27:10 -05:00
fn func4(a: bool) -> Option<i32> {
if a { Some(1) } else { None }
}
// should be linted
2020-09-26 02:27:10 -05:00
fn func5() -> Option<i32> {
//~^ ERROR: this function's return value is unnecessarily wrapped by `Option`
Some(1)
}
2020-09-20 10:11:28 -05:00
// should not be linted
2020-09-26 02:27:10 -05:00
fn func6() -> Option<i32> {
2020-09-20 10:11:28 -05:00
None
}
2020-09-20 04:22:01 -05:00
// should be linted
2020-09-26 02:27:10 -05:00
fn func7() -> Result<i32, ()> {
//~^ ERROR: this function's return value is unnecessarily wrapped by `Result`
2020-09-20 04:22:01 -05:00
Ok(1)
}
// should not be linted
2020-09-26 02:27:10 -05:00
fn func8(a: bool) -> Result<i32, ()> {
if a { Ok(1) } else { Err(()) }
2020-09-20 04:22:01 -05:00
}
2020-09-20 10:11:28 -05:00
// should not be linted
2020-09-26 02:27:10 -05:00
fn func9(a: bool) -> Result<i32, ()> {
2020-09-20 10:11:28 -05:00
Err(())
}
2020-10-18 03:17:45 -05:00
// should not be linted
fn func10() -> Option<()> {
unimplemented!()
}
pub struct A;
2020-10-18 02:53:18 -05:00
impl A {
// should not be linted
2020-10-18 03:17:45 -05:00
pub fn func11() -> Option<i32> {
2020-10-18 02:53:18 -05:00
Some(1)
}
// should be linted
2020-10-18 03:17:45 -05:00
fn func12() -> Option<i32> {
//~^ ERROR: this function's return value is unnecessarily wrapped by `Option`
2020-10-18 02:53:18 -05:00
Some(1)
}
}
2020-11-14 04:25:54 -06:00
trait B {
// trait impls are not linted
fn func13() -> Option<i32> {
Some(1)
}
}
2020-11-14 04:39:41 -06:00
impl B for A {
2020-11-14 04:25:54 -06:00
// trait impls are not linted
fn func13() -> Option<i32> {
Some(0)
}
}
fn issue_6384(s: &str) -> Option<&str> {
Some(match s {
"a" => "A",
_ => return None,
})
}
2021-02-02 17:39:23 -06:00
// should be linted
fn issue_6640_1(a: bool, b: bool) -> Option<()> {
//~^ ERROR: this function's return value is unnecessary
2021-02-02 17:39:23 -06:00
if a && b {
return Some(());
}
if a {
Some(());
Some(())
} else {
return Some(());
}
}
// should be linted
fn issue_6640_2(a: bool, b: bool) -> Result<(), i32> {
//~^ ERROR: this function's return value is unnecessary
2021-02-02 17:39:23 -06:00
if a && b {
return Ok(());
}
if a {
Ok(())
} else {
return Ok(());
}
}
2021-02-18 16:32:55 -06:00
// should not be linted
fn issue_6640_3() -> Option<()> {
if true { Some(()) } else { None }
2021-02-18 16:32:55 -06:00
}
// should not be linted
fn issue_6640_4() -> Result<(), ()> {
if true { Ok(()) } else { Err(()) }
2021-02-18 16:32:55 -06:00
}
fn main() {
// method calls are not linted
func1(true, true);
2020-09-26 02:27:10 -05:00
func2(true, true);
2021-02-02 17:39:23 -06:00
issue_6640_1(true, true);
issue_6640_2(true, true);
}