| #![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<Self::Output> { |
| 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<Self::Output> { |
| Poll::Ready(()) |
| } |
| } |
| let _ = async { (CustomFutureType + CustomFutureType).await }; |
| //~^ async_yields_async |
| } |