#![warn(clippy::async_yields_async)] #![allow(clippy::redundant_async_block)] use core::future::Future; use core::pin::Pin; use core::task::{Context, Poll}; struct CustomFutureType; impl Future for CustomFutureType { type Output = u8; fn poll(self: Pin<&mut Self>, _: &mut Context) -> Poll { Poll::Ready(3) } } fn custom_future_type_ctor() -> CustomFutureType { CustomFutureType } async fn f() -> CustomFutureType { // Don't warn for functions since you have to explicitly declare their // return types. CustomFutureType } #[rustfmt::skip] fn main() { let _f = { 3 }; let _g = async { 3 }; let _h = async { async { 3 }.await }; //~^^^^ async_yields_async let _i = async { CustomFutureType.await }; //~^^ async_yields_async let _i = async || { 3 }; let _j = async || { async { 3 }.await }; //~^^^^ async_yields_async let _k = async || { CustomFutureType.await }; //~^^ async_yields_async let _l = async || CustomFutureType.await; //~^ async_yields_async let _m = async || { println!("I'm bored"); // Some more stuff // Finally something to await CustomFutureType.await }; //~^^ async_yields_async let _n = async || custom_future_type_ctor(); let _o = async || f(); } #[rustfmt::skip] #[allow(dead_code)] fn check_expect_suppression() { #[expect(clippy::async_yields_async)] let _j = async || { async { 3 } }; } #[allow(clippy::let_underscore_future)] fn issue15552() { async fn bar(i: i32) {} macro_rules! call_bar { () => { async { bar(5).await } }; ($e:expr) => { bar($e) }; } let x = async { call_bar!(5).await }; //~^ async_yields_async let y = async { call_bar!().await }; //~^ async_yields_async //~| async_yields_async use std::future::{Future, Ready}; use std::ops::Add; use std::pin::Pin; use std::task::{Context, Poll}; struct CustomFutureType; impl Add for CustomFutureType { type Output = Self; fn add(self, other: Self) -> Self { self } } impl Future for CustomFutureType { type Output = (); fn poll(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll { Poll::Ready(()) } } let _ = async { (CustomFutureType + CustomFutureType).await }; //~^ async_yields_async }