More friendly error msg when await on NONE ASYNC fn/block or return a obj that implements deprecated Future #66731
Closed
Description
opened on Nov 25, 2019
fn bar () -> impl futures::future::Future<Item=(), Error=()> {}
fn boo (){}
async fn foo() -> std::io::Result<()> {
boo().await;
bar().await;
std::io::Result::Ok(())
}
error[E0277]: the trait bound `(): std::future::Future` is not satisfied
--> src/main.rs:6:5
|
6 | boo().await;
| ^^^^^^^^^^^ the trait `std::future::Future` is not implemented for `()`
error[E0277]: the trait bound `impl futures::future::Future: std::future::Future` is not satisfied
--> src/main.rs:7:5
|
7 | bar().await;
| ^^^^^^^^^^^ the trait `std::future::Future` is not implemented for `impl futures::future::Future`
error: aborting due to 2 previous errors
- First error should more like
await need a async function, async block or return a type that impl std::future::Future, did you forget add async before fn boo() ?
- Second error should more like
You are return a Future that has been droped support or deprecated, maybe try to upgrade to latest version of futures crate?
- if 3rd party crate depends on derpecated crate that uses deprecated Future trait, the compiler should also tell use explicitly by some error message. (e.g. reqwest 0.9.22 depends on futures = "0.1.23")
I think more friendly error message like these will help new comers from javascript -> front end devs to more quickly solve problem, because they don't have multiple Promise
implements, current error messages will make them very confusing and frustrating
Metadata
Assignees
Labels
Area: Async & AwaitArea: Messages for errors, warnings, and lintsAsync-await issues that have been triaged during a working group meeting.Category: An issue proposing an enhancement or a PR with one.Diagnostics: An error or lint that needs small tweaks.Call for participation: Medium difficulty. Experience needed to fix: Intermediate.Call for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.Error messages that can be tackled with `#[rustc_on_unimplemented]`Medium priorityRelevant to the compiler team, which will review and decide on the PR/issue.
Type
Projects
Status
Done
Activity