1
Fork 0

review comments

This commit is contained in:
Esteban Küber 2022-08-17 08:21:43 -07:00
parent 243496e129
commit 8bd8484972
3 changed files with 14 additions and 7 deletions

View file

@ -95,10 +95,17 @@ impl<'tcx> LateLintPass<'tcx> for UnusedResults {
if let hir::ExprKind::Match(await_expr, _arms, hir::MatchSource::AwaitDesugar) = expr.kind if let hir::ExprKind::Match(await_expr, _arms, hir::MatchSource::AwaitDesugar) = expr.kind
&& let ty = cx.typeck_results().expr_ty(&await_expr) && let ty = cx.typeck_results().expr_ty(&await_expr)
&& let ty::Opaque(def_id, _) = ty.kind() && let ty::Opaque(future_def_id, _) = ty.kind()
&& cx.tcx.ty_is_opaque_future(ty) && cx.tcx.ty_is_opaque_future(ty)
&& let parent = cx.tcx.parent(*def_id) // FIXME: This also includes non-async fns that return `impl Future`.
&& check_must_use_def(cx, parent, expr.span, "awaited future returned by ", "") && let async_fn_def_id = cx.tcx.parent(*future_def_id)
&& check_must_use_def(
cx,
async_fn_def_id,
expr.span,
"output of future returned by ",
"",
)
{ {
// We have a bare `foo().await;` on an opaque type from an async function that was // We have a bare `foo().await;` on an opaque type from an async function that was
// annotated with `#[must_use]`. // annotated with `#[must_use]`.

View file

@ -30,10 +30,10 @@ impl Wowee {
async fn test() { async fn test() {
foo(); //~ ERROR unused return value of `foo` that must be used foo(); //~ ERROR unused return value of `foo` that must be used
//~^ ERROR unused implementer of `Future` that must be used //~^ ERROR unused implementer of `Future` that must be used
foo().await; //~ ERROR unused awaited future returned by `foo` that must be used foo().await; //~ ERROR unused output of future returned by `foo` that must be used
bar(); //~ ERROR unused return value of `bar` that must be used bar(); //~ ERROR unused return value of `bar` that must be used
//~^ ERROR unused implementer of `Future` that must be used //~^ ERROR unused implementer of `Future` that must be used
bar().await; //~ ERROR unused awaited future returned by `bar` that must be used bar().await; //~ ERROR unused output of future returned by `bar` that must be used
baz(); //~ ERROR unused implementer of `Future` that must be used baz(); //~ ERROR unused implementer of `Future` that must be used
baz().await; // ok baz().await; // ok
} }

View file

@ -17,7 +17,7 @@ error: unused return value of `foo` that must be used
LL | foo(); LL | foo();
| ^^^^^ | ^^^^^
error: unused awaited future returned by `foo` that must be used error: unused output of future returned by `foo` that must be used
--> $DIR/unused-async.rs:33:5 --> $DIR/unused-async.rs:33:5
| |
LL | foo().await; LL | foo().await;
@ -37,7 +37,7 @@ error: unused return value of `bar` that must be used
LL | bar(); LL | bar();
| ^^^^^ | ^^^^^
error: unused awaited future returned by `bar` that must be used error: unused output of future returned by `bar` that must be used
--> $DIR/unused-async.rs:36:5 --> $DIR/unused-async.rs:36:5
| |
LL | bar().await; LL | bar().await;