Add suggestion to use &*var when &str: From<String> is expected
This commit is contained in:
parent
9f91bee03f
commit
ac3290e8d9
4 changed files with 41 additions and 0 deletions
|
|
@ -138,3 +138,15 @@ error[E0277]: `&str` is not an iterator
|
|||
= help: the trait `std::iter::Iterator` is not implemented for `&str`
|
||||
= note: required by `std::iter::IntoIterator::into_iter`
|
||||
```
|
||||
|
||||
If you need to filter on multiple attributes, you can use `all` in the following way:
|
||||
|
||||
```rust,compile_fail
|
||||
#[rustc_on_unimplemented(
|
||||
on(
|
||||
all(_Self="&str", T="std::string::String"),
|
||||
note="you can coerce a `{T}` into a `{Self}` by writing `&*variable`"
|
||||
)
|
||||
)]
|
||||
pub trait From<T>: Sized { /* ... */ }
|
||||
```
|
||||
|
|
@ -352,6 +352,12 @@ pub trait Into<T>: Sized {
|
|||
/// [`from`]: trait.From.html#tymethod.from
|
||||
/// [book]: ../../book/ch09-00-error-handling.html
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_on_unimplemented(
|
||||
on(
|
||||
all(_Self="&str", T="std::string::String"),
|
||||
note="you can coerce a `{T}` into a `{Self}` by writing `&*variable`"
|
||||
)
|
||||
)]
|
||||
pub trait From<T>: Sized {
|
||||
/// Performs the conversion.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
|
|
|||
6
src/test/ui/suggestions/into-str.rs
Normal file
6
src/test/ui/suggestions/into-str.rs
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
fn foo<'a, T>(_t: T) where T: Into<&'a str> {}
|
||||
|
||||
fn main() {
|
||||
foo(String::new());
|
||||
//~^ ERROR the trait bound `&str: std::convert::From<std::string::String>` is not satisfied
|
||||
}
|
||||
17
src/test/ui/suggestions/into-str.stderr
Normal file
17
src/test/ui/suggestions/into-str.stderr
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
error[E0277]: the trait bound `&str: std::convert::From<std::string::String>` is not satisfied
|
||||
--> $DIR/into-str.rs:4:5
|
||||
|
|
||||
LL | foo(String::new());
|
||||
| ^^^ the trait `std::convert::From<std::string::String>` is not implemented for `&str`
|
||||
|
|
||||
= note: you can coerce a `std::string::String` into a `&str` by writing `&*variable`
|
||||
= note: required because of the requirements on the impl of `std::convert::Into<&str>` for `std::string::String`
|
||||
note: required by `foo`
|
||||
--> $DIR/into-str.rs:1:1
|
||||
|
|
||||
LL | fn foo<'a, T>(_t: T) where T: Into<&'a str> {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue