diff options
| author | Jason Newcomb <jsnewcomb@pm.me> | 2025-07-09 15:04:39 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-09 15:04:39 +0000 |
| commit | a24fb386b14b4fe9812b033b9c960a9126175486 (patch) | |
| tree | 69e0ae3564e68dabcdeb6913dcf876c4c8f9b784 /tests | |
| parent | dcc790620a9feaa75dda52f819362f608722e29a (diff) | |
| parent | c69905a995dad100185ef38fffcb1ec3079ec66a (diff) | |
| download | rust-a24fb386b14b4fe9812b033b9c960a9126175486.tar.gz rust-a24fb386b14b4fe9812b033b9c960a9126175486.zip | |
Do not remove method call if type is adjusted (#15181)
Propose to replace `x.map_or(false, |y| y == z)` by `x == Some(z)` only if `x` is not adjusted. Otherwise, the type of `x` in the comparaison may not be the expected one, as it may be the product of an auto-deref. changelog: [`unnecessary_map_or`]: do not propose to replace the `map_or` call by a comparaison if types wouldn't be correct Fixes rust-lang/rust-clippy#15180
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/unnecessary_map_or.fixed | 10 | ||||
| -rw-r--r-- | tests/ui/unnecessary_map_or.rs | 10 | ||||
| -rw-r--r-- | tests/ui/unnecessary_map_or.stderr | 26 |
3 files changed, 45 insertions, 1 deletions
diff --git a/tests/ui/unnecessary_map_or.fixed b/tests/ui/unnecessary_map_or.fixed index 3c724397284..3109c4af8e2 100644 --- a/tests/ui/unnecessary_map_or.fixed +++ b/tests/ui/unnecessary_map_or.fixed @@ -130,3 +130,13 @@ fn issue14201(a: Option<String>, b: Option<String>, s: &String) -> bool { //~^ unnecessary_map_or x && y } + +fn issue15180() { + let s = std::sync::Mutex::new(Some("foo")); + _ = s.lock().unwrap().is_some_and(|s| s == "foo"); + //~^ unnecessary_map_or + + let s = &&&&Some("foo"); + _ = s.is_some_and(|s| s == "foo"); + //~^ unnecessary_map_or +} diff --git a/tests/ui/unnecessary_map_or.rs b/tests/ui/unnecessary_map_or.rs index e734a27bada..52a55f9fc9e 100644 --- a/tests/ui/unnecessary_map_or.rs +++ b/tests/ui/unnecessary_map_or.rs @@ -134,3 +134,13 @@ fn issue14201(a: Option<String>, b: Option<String>, s: &String) -> bool { //~^ unnecessary_map_or x && y } + +fn issue15180() { + let s = std::sync::Mutex::new(Some("foo")); + _ = s.lock().unwrap().map_or(false, |s| s == "foo"); + //~^ unnecessary_map_or + + let s = &&&&Some("foo"); + _ = s.map_or(false, |s| s == "foo"); + //~^ unnecessary_map_or +} diff --git a/tests/ui/unnecessary_map_or.stderr b/tests/ui/unnecessary_map_or.stderr index 0f9466a6a6b..99e17e8b34b 100644 --- a/tests/ui/unnecessary_map_or.stderr +++ b/tests/ui/unnecessary_map_or.stderr @@ -326,5 +326,29 @@ LL - let y = b.map_or(true, |b| b == *s); LL + let y = b.is_none_or(|b| b == *s); | -error: aborting due to 26 previous errors +error: this `map_or` can be simplified + --> tests/ui/unnecessary_map_or.rs:140:9 + | +LL | _ = s.lock().unwrap().map_or(false, |s| s == "foo"); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | +help: use is_some_and instead + | +LL - _ = s.lock().unwrap().map_or(false, |s| s == "foo"); +LL + _ = s.lock().unwrap().is_some_and(|s| s == "foo"); + | + +error: this `map_or` can be simplified + --> tests/ui/unnecessary_map_or.rs:144:9 + | +LL | _ = s.map_or(false, |s| s == "foo"); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | +help: use is_some_and instead + | +LL - _ = s.map_or(false, |s| s == "foo"); +LL + _ = s.is_some_and(|s| s == "foo"); + | + +error: aborting due to 28 previous errors |
