| #![warn(clippy::manual_async_fn)] |
| #![allow(clippy::needless_pub_self, unused)] |
| |
| use std::future::Future; |
| |
| async fn fut() -> i32 { 42 } |
| |
| #[rustfmt::skip] |
| async fn fut2() -> i32 { 42 } |
| |
| #[rustfmt::skip] |
| async fn fut3() -> i32 { 42 } |
| |
| async fn empty_fut() {} |
| |
| #[rustfmt::skip] |
| async fn empty_fut2() {} |
| |
| #[rustfmt::skip] |
| async fn empty_fut3() {} |
| |
| async fn core_fut() -> i32 { 42 } |
| |
| // should be ignored |
| fn has_other_stmts() -> impl core::future::Future<Output = i32> { |
| let _ = 42; |
| async move { 42 } |
| } |
| |
| // should be ignored |
| fn not_fut() -> i32 { |
| 42 |
| } |
| |
| // should be ignored |
| async fn already_async() -> impl Future<Output = i32> { |
| async { 42 } |
| } |
| |
| struct S; |
| impl S { |
| async fn inh_fut() -> i32 { |
| // NOTE: this code is here just to check that the indentation is correct in the suggested fix |
| let a = 42; |
| let b = 21; |
| if a < b { |
| let c = 21; |
| let d = 42; |
| if c < d { |
| let _ = 42; |
| } |
| } |
| 42 |
| } |
| |
| // should be ignored |
| fn not_fut(&self) -> i32 { |
| 42 |
| } |
| |
| // should be ignored |
| fn has_other_stmts() -> impl core::future::Future<Output = i32> { |
| let _ = 42; |
| async move { 42 } |
| } |
| |
| // should be ignored |
| async fn already_async(&self) -> impl Future<Output = i32> { |
| async { 42 } |
| } |
| } |
| |
| // Tests related to lifetime capture |
| |
| async fn elided(_: &i32) -> i32 { 42 } |
| |
| // should be ignored |
| fn elided_not_bound(_: &i32) -> impl Future<Output = i32> + use<> { |
| async { 42 } |
| } |
| |
| #[allow(clippy::needless_lifetimes)] |
| async fn explicit<'a, 'b>(_: &'a i32, _: &'b i32) -> i32 { 42 } |
| |
| // should be ignored |
| #[allow(clippy::needless_lifetimes)] |
| fn explicit_not_bound<'a, 'b>(_: &'a i32, _: &'b i32) -> impl Future<Output = i32> + use<> { |
| async { 42 } |
| } |
| |
| // should be ignored |
| mod issue_5765 { |
| use std::future::Future; |
| |
| struct A; |
| impl A { |
| fn f(&self) -> impl Future<Output = ()> + use<> { |
| async {} |
| } |
| } |
| |
| fn test() { |
| let _future = { |
| let a = A; |
| a.f() |
| }; |
| } |
| } |
| |
| pub async fn issue_10450() -> i32 { 42 } |
| |
| pub(crate) async fn issue_10450_2() -> i32 { 42 } |
| |
| pub(self) async fn issue_10450_3() -> i32 { 42 } |
| |
| macro_rules! issue_12407 { |
| ( |
| $( |
| $(#[$m:meta])* |
| $v:vis $(override($($overrides:tt),* $(,)?))? fn $name:ident $([$($params:tt)*])? ( |
| $($arg_name:ident: $arg_typ:ty),* $(,)? |
| ) $(-> $ret_ty:ty)? = $e:expr; |
| )* |
| ) => { |
| $( |
| $(#[$m])* |
| $v $($($overrides)*)? fn $name$(<$($params)*>)?( |
| $($arg_name: $arg_typ),* |
| ) $(-> $ret_ty)? { |
| $e |
| } |
| )* |
| }; |
| } |
| |
| issue_12407! { |
| fn _hello() -> impl Future<Output = ()> = async {}; |
| fn non_async() = println!("hello"); |
| fn foo() = non_async(); |
| } |
| |
| fn main() {} |