error: called `map(..).flatten()` on `Iterator`
  --> tests/ui/map_flatten_fixable.rs:11:47
   |
LL |     let _: Vec<_> = vec![5_i8; 6].into_iter().map(option_id).flatten().collect();
   |                                               ^^^^^^^^^^^^^^^^^^^^^^^^ help: try replacing `map` with `filter_map` and remove the `.flatten()`: `filter_map(option_id)`
   |
   = note: `-D clippy::map-flatten` implied by `-D warnings`
   = help: to override `-D warnings` add `#[allow(clippy::map_flatten)]`

error: called `map(..).flatten()` on `Iterator`
  --> tests/ui/map_flatten_fixable.rs:13:47
   |
LL |     let _: Vec<_> = vec![5_i8; 6].into_iter().map(option_id_ref).flatten().collect();
   |                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try replacing `map` with `filter_map` and remove the `.flatten()`: `filter_map(option_id_ref)`

error: called `map(..).flatten()` on `Iterator`
  --> tests/ui/map_flatten_fixable.rs:15:47
   |
LL |     let _: Vec<_> = vec![5_i8; 6].into_iter().map(option_id_closure).flatten().collect();
   |                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try replacing `map` with `filter_map` and remove the `.flatten()`: `filter_map(option_id_closure)`

error: called `map(..).flatten()` on `Iterator`
  --> tests/ui/map_flatten_fixable.rs:17:47
   |
LL |     let _: Vec<_> = vec![5_i8; 6].into_iter().map(|x| x.checked_add(1)).flatten().collect();
   |                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try replacing `map` with `filter_map` and remove the `.flatten()`: `filter_map(|x| x.checked_add(1))`

error: called `map(..).flatten()` on `Iterator`
  --> tests/ui/map_flatten_fixable.rs:21:47
   |
LL |     let _: Vec<_> = vec![5_i8; 6].into_iter().map(|x| 0..x).flatten().collect();
   |                                               ^^^^^^^^^^^^^^^^^^^^^^^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|x| 0..x)`

error: called `map(..).flatten()` on `Option`
  --> tests/ui/map_flatten_fixable.rs:25:40
   |
LL |     let _: Option<_> = (Some(Some(1))).map(|x| x).flatten();
   |                                        ^^^^^^^^^^^^^^^^^^^^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(|x| x)`

error: called `map(..).flatten()` on `Result`
  --> tests/ui/map_flatten_fixable.rs:29:42
   |
LL |     let _: Result<_, &str> = (Ok(Ok(1))).map(|x| x).flatten();
   |                                          ^^^^^^^^^^^^^^^^^^^^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(|x| x)`

error: called `map(..).flatten()` on `Iterator`
  --> tests/ui/map_flatten_fixable.rs:39:10
   |
LL |           .map(|n| match n {
   |  __________^
LL | |
LL | |             1 => [n
LL | |                 .saturating_add(1)
...  |
LL | |         })
LL | |         .flatten();
   | |__________________^
   |
help: try replacing `map` with `flat_map` and remove the `.flatten()`
   |
LL ~         .flat_map(|n| match n {
LL +
LL +             1 => [n
LL +                 .saturating_add(1)
LL +                 .saturating_add(1)
LL +                 .saturating_add(1)
LL +                 .saturating_add(1)
LL +                 .saturating_add(1)
LL +                 .saturating_add(1)
LL +                 .saturating_add(1)
LL +                 .saturating_add(1)],
LL +             n => [n],
LL ~         });
   |

error: called `map(..).flatten()` on `Option`
  --> tests/ui/map_flatten_fixable.rs:60:10
   |
LL |           .map(|_| {
   |  __________^
...  |
LL | |         })
LL | |         .flatten();
   | |__________________^
   |
help: try replacing `map` with `and_then` and remove the `.flatten()`
   |
LL ~         .and_then(|_| {
LL +
LL + // we need some newlines
LL + // so that the span is big enough
LL + // for a split output of the diagnostic
LL +             Some("")
LL +  // whitespace beforehand is important as well
LL ~         });
   |

error: aborting due to 9 previous errors

