From 34c4520eae7adf1a3adf3fce5376eac2911d08b8 Mon Sep 17 00:00:00 2001 From: koka Date: Sat, 12 Nov 2022 22:36:20 +0900 Subject: [PATCH] Fix is_async_fn to check FnKind::Method --- clippy_utils/src/lib.rs | 6 +++++- tests/ui/cognitive_complexity.rs | 8 ++++++++ tests/ui/cognitive_complexity.stderr | 10 +++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/clippy_utils/src/lib.rs b/clippy_utils/src/lib.rs index f7d3c9177..ac4d0b89f 100644 --- a/clippy_utils/src/lib.rs +++ b/clippy_utils/src/lib.rs @@ -1901,7 +1901,11 @@ pub fn if_sequence<'tcx>(mut expr: &'tcx Expr<'tcx>) -> (Vec<&'tcx Expr<'tcx>>, /// Checks if the given function kind is an async function. pub fn is_async_fn(kind: FnKind<'_>) -> bool { - matches!(kind, FnKind::ItemFn(_, _, header) if header.asyncness == IsAsync::Async) + match kind { + FnKind::ItemFn(_, _, header) => header.asyncness == IsAsync::Async, + FnKind::Method(_, sig) => sig.header.asyncness == IsAsync::Async, + FnKind::Closure => false, + } } /// Peels away all the compiler generated code surrounding the body of an async function, diff --git a/tests/ui/cognitive_complexity.rs b/tests/ui/cognitive_complexity.rs index 498a9f064..07bdaff00 100644 --- a/tests/ui/cognitive_complexity.rs +++ b/tests/ui/cognitive_complexity.rs @@ -400,4 +400,12 @@ mod issue9300 { let a = 0; if a == 0 {} } + + pub struct S; + impl S { + pub async fn async_method() { + let a = 0; + if a == 0 {} + } + } } diff --git a/tests/ui/cognitive_complexity.stderr b/tests/ui/cognitive_complexity.stderr index 208f4d7b3..5824631fa 100644 --- a/tests/ui/cognitive_complexity.stderr +++ b/tests/ui/cognitive_complexity.stderr @@ -143,5 +143,13 @@ LL | async fn a() { | = help: you could split it up into multiple smaller functions -error: aborting due to 18 previous errors +error: the function has a cognitive complexity of (2/1) + --> $DIR/cognitive_complexity.rs:406:22 + | +LL | pub async fn async_method() { + | ^^^^^^^^^^^^ + | + = help: you could split it up into multiple smaller functions + +error: aborting due to 19 previous errors