121 lines
2.6 KiB
Rust
121 lines
2.6 KiB
Rust
#![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
|
|
}
|