diff options
| author | yukang <moorekang@gmail.com> | 2022-09-29 13:16:47 +0800 |
|---|---|---|
| committer | yukang <moorekang@gmail.com> | 2022-10-04 17:30:52 +0800 |
| commit | 5dd44d4d4c4545f65f15f890e93fac68214cfe54 (patch) | |
| tree | 2c79664ff64bc841dd9c0e61fecd6b6789df22f2 /src/test/ui/methods/issues | |
| parent | d9f8b4b98503e3f88623eb59d4f20432161b840a (diff) | |
| download | rust-5dd44d4d4c4545f65f15f890e93fac68214cfe54.tar.gz rust-5dd44d4d4c4545f65f15f890e93fac68214cfe54.zip | |
fix #102396, suggest parentheses for possible range methods
Diffstat (limited to 'src/test/ui/methods/issues')
| -rw-r--r-- | src/test/ui/methods/issues/issue-90315.rs | 73 | ||||
| -rw-r--r-- | src/test/ui/methods/issues/issue-90315.stderr | 176 |
2 files changed, 239 insertions, 10 deletions
diff --git a/src/test/ui/methods/issues/issue-90315.rs b/src/test/ui/methods/issues/issue-90315.rs index 01bf9f48402..74cd2b35834 100644 --- a/src/test/ui/methods/issues/issue-90315.rs +++ b/src/test/ui/methods/issues/issue-90315.rs @@ -1,7 +1,70 @@ +#![allow(unused)] fn main() { - let arr = &[0,1,2,3]; - for _i in 0..arr.len().rev() { //~ERROR not an iterator - // The above error used to say “the method `rev` exists for type `usize`”. - // This regression test ensures it doesn't say that any more. - } + let arr = &[0, 1, 2, 3]; + for _i in 0..arr.len().rev() { + //~^ ERROR not an iterator + //~| surround the range in parentheses + // The above error used to say “the method `rev` exists for type `usize`”. + // This regression test ensures it doesn't say that any more. + } + + // Test for #102396 + for i in 1..11.rev() { + //~^ ERROR not an iterator + //~| HELP surround the range in parentheses + } + + let end: usize = 10; + for i in 1..end.rev() { + //~^ ERROR not an iterator + //~| HELP surround the range in parentheses + } + + for i in 1..(end + 1).rev() { + //~^ ERROR not an iterator + //~| HELP surround the range in parentheses + } + + if 1..(end + 1).is_empty() { + //~^ ERROR not an iterator + //~| ERROR mismatched types [E0308] + //~| HELP surround the range in parentheses + } + + if 1..(end + 1).is_sorted() { + //~^ ERROR mismatched types [E0308] + //~| ERROR `usize` is not an iterator [E0599] + //~| HELP surround the range in parentheses + } + + let _res: i32 = 3..6.take(2).sum(); + //~^ ERROR `{integer}` is not an iterator [E0599] + //~| ERROR mismatched types [E0308] + //~| HELP surround the range in parentheses + + let _sum: i32 = 3..6.sum(); + //~^ ERROR `{integer}` is not an iterator [E0599] + //~| ERROR mismatched types [E0308] + //~| HELP surround the range in parentheses + + let a = 1 as usize; + let b = 10 as usize; + + for _a in a..=b.rev() { + //~^ ERROR not an iterator + //~| HELP surround the range in parentheses + } + + let _res = ..10.contains(3); + //~^ ERROR not an iterator + //~| HELP surround the range in parentheses + + if 1..end.error_method() { + //~^ ERROR no method named `error_method` + //~| ERROR mismatched types [E0308] + // Won't suggest + } + + let _res = b.take(1)..a; + //~^ ERROR not an iterator } diff --git a/src/test/ui/methods/issues/issue-90315.stderr b/src/test/ui/methods/issues/issue-90315.stderr index c6a76c9e790..f2084b593c2 100644 --- a/src/test/ui/methods/issues/issue-90315.stderr +++ b/src/test/ui/methods/issues/issue-90315.stderr @@ -1,13 +1,179 @@ error[E0599]: `usize` is not an iterator - --> $DIR/issue-90315.rs:3:26 + --> $DIR/issue-90315.rs:4:28 | -LL | for _i in 0..arr.len().rev() { - | ^^^ `usize` is not an iterator +LL | for _i in 0..arr.len().rev() { + | ^^^ `usize` is not an iterator + | +help: you must surround the range in parentheses to call the `rev` function + | +LL | for _i in (0..arr.len()).rev() { + | + + + +error[E0599]: `{integer}` is not an iterator + --> $DIR/issue-90315.rs:12:20 + | +LL | for i in 1..11.rev() { + | ^^^ `{integer}` is not an iterator + | +help: you must surround the range in parentheses to call the `rev` function + | +LL | for i in (1..11).rev() { + | + + + +error[E0599]: `usize` is not an iterator + --> $DIR/issue-90315.rs:18:21 + | +LL | for i in 1..end.rev() { + | ^^^ `usize` is not an iterator + | +help: you must surround the range in parentheses to call the `rev` function + | +LL | for i in (1..end).rev() { + | + + + +error[E0599]: `usize` is not an iterator + --> $DIR/issue-90315.rs:23:27 + | +LL | for i in 1..(end + 1).rev() { + | ^^^ `usize` is not an iterator + | +help: you must surround the range in parentheses to call the `rev` function + | +LL | for i in (1..(end + 1)).rev() { + | + + + +error[E0599]: `usize` is not an iterator + --> $DIR/issue-90315.rs:28:21 + | +LL | if 1..(end + 1).is_empty() { + | ^^^^^^^^ `usize` is not an iterator + | +help: you must surround the range in parentheses to call the `is_empty` function + | +LL | if (1..(end + 1)).is_empty() { + | + + + +error[E0308]: mismatched types + --> $DIR/issue-90315.rs:28:8 + | +LL | if 1..(end + 1).is_empty() { + | ^^^^^^^^^^^^^^^^^^^^^^^ expected `bool`, found struct `std::ops::Range` + | + = note: expected type `bool` + found struct `std::ops::Range<{integer}>` + +error[E0599]: `usize` is not an iterator + --> $DIR/issue-90315.rs:34:21 + | +LL | if 1..(end + 1).is_sorted() { + | ^^^^^^^^^ `usize` is not an iterator + | +help: you must surround the range in parentheses to call the `is_sorted` function + | +LL | if (1..(end + 1)).is_sorted() { + | + + + +error[E0308]: mismatched types + --> $DIR/issue-90315.rs:34:8 + | +LL | if 1..(end + 1).is_sorted() { + | ^^^^^^^^^^^^^^^^^^^^^^^^ expected `bool`, found struct `std::ops::Range` + | + = note: expected type `bool` + found struct `std::ops::Range<{integer}>` + +error[E0599]: `{integer}` is not an iterator + --> $DIR/issue-90315.rs:40:26 + | +LL | let _res: i32 = 3..6.take(2).sum(); + | ^^^^ `{integer}` is not an iterator + | +help: you must surround the range in parentheses to call the `take` function + | +LL | let _res: i32 = (3..6).take(2).sum(); + | + + + +error[E0308]: mismatched types + --> $DIR/issue-90315.rs:40:21 + | +LL | let _res: i32 = 3..6.take(2).sum(); + | --- ^^^^^^^^^^^^^^^^^^ expected `i32`, found struct `std::ops::Range` + | | + | expected due to this + | + = note: expected type `i32` + found struct `std::ops::Range<{integer}>` + +error[E0599]: `{integer}` is not an iterator + --> $DIR/issue-90315.rs:45:26 + | +LL | let _sum: i32 = 3..6.sum(); + | ^^^ `{integer}` is not an iterator + | +help: you must surround the range in parentheses to call the `sum` function + | +LL | let _sum: i32 = (3..6).sum(); + | + + + +error[E0308]: mismatched types + --> $DIR/issue-90315.rs:45:21 + | +LL | let _sum: i32 = 3..6.sum(); + | --- ^^^^^^^^^^ expected `i32`, found struct `std::ops::Range` + | | + | expected due to this + | + = note: expected type `i32` + found struct `std::ops::Range<{integer}>` + +error[E0599]: `usize` is not an iterator + --> $DIR/issue-90315.rs:53:21 + | +LL | for _a in a..=b.rev() { + | ^^^ `usize` is not an iterator + | +help: you must surround the range in parentheses to call the `rev` function + | +LL | for _a in (a..=b).rev() { + | + + + +error[E0599]: `{integer}` is not an iterator + --> $DIR/issue-90315.rs:58:21 + | +LL | let _res = ..10.contains(3); + | ^^^^^^^^ `{integer}` is not an iterator + | +help: you must surround the range in parentheses to call the `contains` function + | +LL | let _res = (..10).contains(3); + | + + + +error[E0599]: no method named `error_method` found for type `usize` in the current scope + --> $DIR/issue-90315.rs:62:15 + | +LL | if 1..end.error_method() { + | ^^^^^^^^^^^^ method not found in `usize` + +error[E0308]: mismatched types + --> $DIR/issue-90315.rs:62:8 + | +LL | if 1..end.error_method() { + | ^^^^^^^^^^^^^^^^^^^^^ expected `bool`, found struct `std::ops::Range` + | + = note: expected type `bool` + found struct `std::ops::Range<{integer}>` + +error[E0599]: `usize` is not an iterator + --> $DIR/issue-90315.rs:68:18 + | +LL | let _res = b.take(1)..a; + | ^^^^ `usize` is not an iterator | = note: the following trait bounds were not satisfied: `usize: Iterator` which is required by `&mut usize: Iterator` -error: aborting due to previous error +error: aborting due to 17 previous errors -For more information about this error, try `rustc --explain E0599`. +Some errors have detailed explanations: E0308, E0599. +For more information about an error, try `rustc --explain E0308`. |
