diff options
| author | Jason Newcomb <jsnewcomb@pm.me> | 2021-04-15 10:37:42 -0400 |
|---|---|---|
| committer | Jason Newcomb <jsnewcomb@pm.me> | 2021-04-15 10:37:42 -0400 |
| commit | 779d98f6ccbd76807e811a134bb00a4e0d92c6db (patch) | |
| tree | 018cb396bb60478f7607c62c264c1f48ea646901 | |
| parent | b1c675f3fc682201cdb28719133285b878e2d157 (diff) | |
| download | rust-779d98f6ccbd76807e811a134bb00a4e0d92c6db.tar.gz rust-779d98f6ccbd76807e811a134bb00a4e0d92c6db.zip | |
Don't allow adjustments for `manual_map`
| -rw-r--r-- | clippy_lints/src/manual_map.rs | 6 | ||||
| -rw-r--r-- | tests/ui/manual_map_option.fixed | 7 | ||||
| -rw-r--r-- | tests/ui/manual_map_option.rs | 7 |
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, + }; } |
