about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-04-16 03:05:52 +0000
committerbors <bors@rust-lang.org>2021-04-16 03:05:52 +0000
commitfaa97568a0ed3804339bec3becc2dda54ccdcafc (patch)
treebb593f00da40c4fc612d13eefa068ec2376357f3
parent586a99348c6a6f5309e82b340193067b7d76e37c (diff)
parent779d98f6ccbd76807e811a134bb00a4e0d92c6db (diff)
downloadrust-faa97568a0ed3804339bec3becc2dda54ccdcafc.tar.gz
rust-faa97568a0ed3804339bec3becc2dda54ccdcafc.zip
Auto merge of #7085 - Jarcho:manual_map_autoderef, r=giraffate
Don't allow adjustments for `manual_map`

fixes: #7077

The other option here would be to add the return type to the closure. It would be fine for simple types, but longer types can be rather unwieldy. Could also implement the adjustment manually.

changelog: Don't lint `manual_map` when type adjustments are added. e.g. autoderef
-rw-r--r--clippy_lints/src/manual_map.rs6
-rw-r--r--tests/ui/manual_map_option.fixed7
-rw-r--r--tests/ui/manual_map_option.rs7
3 files changed, 20 insertions, 0 deletions
diff --git a/clippy_lints/src/manual_map.rs b/clippy_lints/src/manual_map.rs
index 29be0739977..f16ed4104fe 100644
--- a/clippy_lints/src/manual_map.rs
+++ b/clippy_lints/src/manual_map.rs
@@ -104,12 +104,18 @@ impl LateLintPass<'_> for ManualMap {
                 None => return,
             };
 
+            // These two lints will go back and forth with each other.
             if cx.typeck_results().expr_ty(some_expr) == cx.tcx.types.unit
                 && !is_allowed(cx, OPTION_MAP_UNIT_FN, expr.hir_id)
             {
                 return;
             }
 
+            // `map` won't perform any adjustments.
+            if !cx.typeck_results().expr_adjustments(some_expr).is_empty() {
+                return;
+            }
+
             if !can_move_expr_to_closure(cx, some_expr) {
                 return;
             }
diff --git a/tests/ui/manual_map_option.fixed b/tests/ui/manual_map_option.fixed
index ee015845777..40d01df6379 100644
--- a/tests/ui/manual_map_option.fixed
+++ b/tests/ui/manual_map_option.fixed
@@ -146,4 +146,11 @@ fn main() {
             None => None,
         };
     }
+
+    // #7077
+    let s = &String::new();
+    let _: Option<&str> = match Some(s) {
+        Some(s) => Some(s),
+        None => None,
+    };
 }
diff --git a/tests/ui/manual_map_option.rs b/tests/ui/manual_map_option.rs
index 29509bddfd9..cfef0c5cc4e 100644
--- a/tests/ui/manual_map_option.rs
+++ b/tests/ui/manual_map_option.rs
@@ -212,4 +212,11 @@ fn main() {
             None => None,
         };
     }
+
+    // #7077
+    let s = &String::new();
+    let _: Option<&str> = match Some(s) {
+        Some(s) => Some(s),
+        None => None,
+    };
 }