suggest &str.chars() on attempt to &str.iter()

check if `String` or `&String` or `&str`

Update compiler/rustc_typeck/src/check/method/suggest.rs

Co-authored-by: Esteban Kuber <estebank@users.noreply.github.com>

remove some trailing whitespace
This commit is contained in:
Takayuki Maeda 2021-11-12 01:47:43 +09:00
parent 9dbbbb12c0
commit d562f487c9
3 changed files with 75 additions and 0 deletions

View file

@ -0,0 +1,7 @@
pub fn main() {
let _ = "foo".iter(); //~ ERROR no method named `iter` found for reference `&'static str` in the current scope
let _ = "foo".foo(); //~ ERROR no method named `foo` found for reference `&'static str` in the current scope
let _ = String::from("bar").iter(); //~ ERROR no method named `iter` found for struct `String` in the current scope
let _ = (&String::from("bar")).iter(); //~ ERROR no method named `iter` found for reference `&String` in the current scope
let _ = 0.iter(); //~ ERROR no method named `iter` found for type `{integer}` in the current scope
}

View file

@ -0,0 +1,48 @@
error[E0599]: no method named `iter` found for reference `&'static str` in the current scope
--> $DIR/suggest-using-chars.rs:2:19
|
LL | let _ = "foo".iter();
| ^^^^ method not found in `&'static str`
|
help: because of the in-memory representation of `&str`, to obtain an `Iterator` over each of its codepoint use method `chars`
|
LL | let _ = "foo".chars();
| ~~~~~
error[E0599]: no method named `foo` found for reference `&'static str` in the current scope
--> $DIR/suggest-using-chars.rs:3:19
|
LL | let _ = "foo".foo();
| ^^^ method not found in `&'static str`
error[E0599]: no method named `iter` found for struct `String` in the current scope
--> $DIR/suggest-using-chars.rs:4:33
|
LL | let _ = String::from("bar").iter();
| ^^^^ method not found in `String`
|
help: because of the in-memory representation of `&str`, to obtain an `Iterator` over each of its codepoint use method `chars`
|
LL | let _ = String::from("bar").chars();
| ~~~~~
error[E0599]: no method named `iter` found for reference `&String` in the current scope
--> $DIR/suggest-using-chars.rs:5:36
|
LL | let _ = (&String::from("bar")).iter();
| ^^^^ method not found in `&String`
|
help: because of the in-memory representation of `&str`, to obtain an `Iterator` over each of its codepoint use method `chars`
|
LL | let _ = (&String::from("bar")).chars();
| ~~~~~
error[E0599]: no method named `iter` found for type `{integer}` in the current scope
--> $DIR/suggest-using-chars.rs:6:15
|
LL | let _ = 0.iter();
| ^^^^ method not found in `{integer}`
error: aborting due to 5 previous errors
For more information about this error, try `rustc --explain E0599`.