Auto merge of #8880 - hellow554:rustfix_update, r=Manishearth

Add some testcases for recent rustfix update

changelog: none

This adds a testcase for a bugfix that has been fixed by https://github.com/rust-lang/rustfix/tree/v0.6.1

`rustfix` is pulled in by `compiletest_rs`. So to test that the correct rustfix version is used, I added one (and a half) testcase.

I tried to add a testcase for #8734 as well, but interesting enough the rustfix is wrong:

```diff
 fn issue8734() {
     let _ = [0u8, 1, 2, 3]
         .into_iter()
-        .and_then(|n| match n {
+        .flat_map(|n| match n {
+            1 => [n
+                .saturating_add(1)
             1 => [n
                 .saturating_add(1)
                 .saturating_add(1)
                 .saturating_add(1)
                 .saturating_add(1)
                 .saturating_add(1)
                 .saturating_add(1)
                 .saturating_add(1)
                 .saturating_add(1)],
             n => [n],
         });
 }
```

this needs some investigation and then this testcase needs to be enabled by commenting it out

closes #8878
related to #8734
This commit is contained in:
bors 2022-05-24 21:20:57 +00:00
commit 67a089134d
3 changed files with 100 additions and 1 deletions

View file

@ -28,4 +28,41 @@ fn main() {
// mapping to Result on Result
let _: Result<_, &str> = (Ok(Ok(1))).and_then(|x| x);
issue8734();
issue8878();
}
fn issue8734() {
// let _ = [0u8, 1, 2, 3]
// .into_iter()
// .map(|n| match n {
// 1 => [n
// .saturating_add(1)
// .saturating_add(1)
// .saturating_add(1)
// .saturating_add(1)
// .saturating_add(1)
// .saturating_add(1)
// .saturating_add(1)
// .saturating_add(1)],
// n => [n],
// })
// .flatten();
}
#[allow(clippy::bind_instead_of_map)] // map + flatten will be suggested to `and_then`, but afterwards `map` is suggested again
#[rustfmt::skip] // whitespace is important for this one
fn issue8878() {
std::collections::HashMap::<u32, u32>::new()
.get(&0)
.and_then(|_| {
// we need some newlines
// so that the span is big enough
// we need some newlines
// so that the span is big enough
// for a splitted output of the diagnostic
Some("")
// whitespace beforehand is important as well
});
}

View file

@ -28,4 +28,40 @@ fn main() {
// mapping to Result on Result
let _: Result<_, &str> = (Ok(Ok(1))).map(|x| x).flatten();
issue8734();
issue8878();
}
fn issue8734() {
// let _ = [0u8, 1, 2, 3]
// .into_iter()
// .map(|n| match n {
// 1 => [n
// .saturating_add(1)
// .saturating_add(1)
// .saturating_add(1)
// .saturating_add(1)
// .saturating_add(1)
// .saturating_add(1)
// .saturating_add(1)
// .saturating_add(1)],
// n => [n],
// })
// .flatten();
}
#[allow(clippy::bind_instead_of_map)] // map + flatten will be suggested to `and_then`, but afterwards `map` is suggested again
#[rustfmt::skip] // whitespace is important for this one
fn issue8878() {
std::collections::HashMap::<u32, u32>::new()
.get(&0)
.map(|_| {
// we need some newlines
// so that the span is big enough
// for a splitted output of the diagnostic
Some("")
// whitespace beforehand is important as well
})
.flatten();
}

View file

@ -76,5 +76,31 @@ help: try replacing `map` with `and_then`, and remove the `.flatten()`
LL | let _: Result<_, &str> = (Ok(Ok(1))).and_then(|x| x);
| ~~~~~~~~~~~~~~~
error: aborting due to 7 previous errors
error: called `map(..).flatten()` on `Option`
--> $DIR/map_flatten_fixable.rs:59:10
|
LL | .map(|_| {
| __________^
LL | | // we need some newlines
LL | | // so that the span is big enough
LL | | // for a splitted output of the diagnostic
... |
LL | | })
LL | | .flatten();
| |__________________^
|
help: try replacing `map` with `and_then`
|
LL ~ .and_then(|_| {
LL + // we need some newlines
LL + // so that the span is big enough
|
help: and remove the `.flatten()`
|
LL + Some("")
LL + // whitespace beforehand is important as well
LL ~ });
|
error: aborting due to 8 previous errors