Rollup merge of #96617 - ken-matsui:fix-incorrect-syntax-suggestion-with-pub-async-fn, r=cjgillot
Fix incorrect syntax suggestion with `pub async fn` This PR closes: https://github.com/rust-lang/rust/issues/96555
This commit is contained in:
commit
cdaa5c03c9
3 changed files with 104 additions and 9 deletions
|
@ -1085,18 +1085,28 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
|
|||
self.in_progress_typeck_results.map(|t| t.borrow())
|
||||
&& let ty = typeck_results.expr_ty_adjusted(base)
|
||||
&& let ty::FnDef(def_id, _substs) = ty.kind()
|
||||
&& let Some(hir::Node::Item(hir::Item { span, ident, .. })) =
|
||||
&& let Some(hir::Node::Item(hir::Item { ident, span, vis_span, .. })) =
|
||||
hir.get_if_local(*def_id)
|
||||
{
|
||||
err.span_suggestion_verbose(
|
||||
span.shrink_to_lo(),
|
||||
&format!(
|
||||
"alternatively, consider making `fn {}` asynchronous",
|
||||
ident
|
||||
),
|
||||
"async ".to_string(),
|
||||
Applicability::MaybeIncorrect,
|
||||
let msg = format!(
|
||||
"alternatively, consider making `fn {}` asynchronous",
|
||||
ident
|
||||
);
|
||||
if vis_span.is_empty() {
|
||||
err.span_suggestion_verbose(
|
||||
span.shrink_to_lo(),
|
||||
&msg,
|
||||
"async ".to_string(),
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
} else {
|
||||
err.span_suggestion_verbose(
|
||||
vis_span.shrink_to_hi(),
|
||||
&msg,
|
||||
" async".to_string(),
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
19
src/test/ui/suggestions/issue-96555.rs
Normal file
19
src/test/ui/suggestions/issue-96555.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
// edition:2018
|
||||
|
||||
async fn f() {
|
||||
m::f1().await; //~ ERROR `()` is not a future
|
||||
m::f2().await; //~ ERROR `()` is not a future
|
||||
m::f3().await; //~ ERROR `()` is not a future
|
||||
}
|
||||
|
||||
mod m {
|
||||
pub fn f1() {}
|
||||
|
||||
pub(crate) fn f2() {}
|
||||
|
||||
pub
|
||||
fn
|
||||
f3() {}
|
||||
}
|
||||
|
||||
fn main() {}
|
66
src/test/ui/suggestions/issue-96555.stderr
Normal file
66
src/test/ui/suggestions/issue-96555.stderr
Normal file
|
@ -0,0 +1,66 @@
|
|||
error[E0277]: `()` is not a future
|
||||
--> $DIR/issue-96555.rs:4:12
|
||||
|
|
||||
LL | m::f1().await;
|
||||
| -------^^^^^^ `()` is not a future
|
||||
| |
|
||||
| this call returns `()`
|
||||
|
|
||||
= help: the trait `Future` is not implemented for `()`
|
||||
= note: () must be a future or must implement `IntoFuture` to be awaited
|
||||
= note: required because of the requirements on the impl of `IntoFuture` for `()`
|
||||
help: remove the `.await`
|
||||
|
|
||||
LL - m::f1().await;
|
||||
LL + m::f1();
|
||||
|
|
||||
help: alternatively, consider making `fn f1` asynchronous
|
||||
|
|
||||
LL | pub async fn f1() {}
|
||||
| +++++
|
||||
|
||||
error[E0277]: `()` is not a future
|
||||
--> $DIR/issue-96555.rs:5:12
|
||||
|
|
||||
LL | m::f2().await;
|
||||
| -------^^^^^^ `()` is not a future
|
||||
| |
|
||||
| this call returns `()`
|
||||
|
|
||||
= help: the trait `Future` is not implemented for `()`
|
||||
= note: () must be a future or must implement `IntoFuture` to be awaited
|
||||
= note: required because of the requirements on the impl of `IntoFuture` for `()`
|
||||
help: remove the `.await`
|
||||
|
|
||||
LL - m::f2().await;
|
||||
LL + m::f2();
|
||||
|
|
||||
help: alternatively, consider making `fn f2` asynchronous
|
||||
|
|
||||
LL | pub(crate) async fn f2() {}
|
||||
| +++++
|
||||
|
||||
error[E0277]: `()` is not a future
|
||||
--> $DIR/issue-96555.rs:6:12
|
||||
|
|
||||
LL | m::f3().await;
|
||||
| -------^^^^^^ `()` is not a future
|
||||
| |
|
||||
| this call returns `()`
|
||||
|
|
||||
= help: the trait `Future` is not implemented for `()`
|
||||
= note: () must be a future or must implement `IntoFuture` to be awaited
|
||||
= note: required because of the requirements on the impl of `IntoFuture` for `()`
|
||||
help: remove the `.await`
|
||||
|
|
||||
LL - m::f3().await;
|
||||
LL + m::f3();
|
||||
|
|
||||
help: alternatively, consider making `fn f3` asynchronous
|
||||
|
|
||||
LL | pub async
|
||||
| +++++
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
Loading…
Add table
Reference in a new issue