mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 23:34:48 +00:00
Auto merge of #9828 - koka831:fix/9300, r=Alexendoo
fix: cognitive_complexity for async fn fix https://github.com/rust-lang/rust-clippy/issues/9300 changelog: [`cognitive_complexity`] support async fn
This commit is contained in:
commit
4f1698db60
@ -4,11 +4,11 @@ use clippy_utils::diagnostics::span_lint_and_help;
|
||||
use clippy_utils::source::snippet_opt;
|
||||
use clippy_utils::ty::is_type_diagnostic_item;
|
||||
use clippy_utils::visitors::for_each_expr;
|
||||
use clippy_utils::LimitStack;
|
||||
use clippy_utils::{get_async_fn_body, is_async_fn, LimitStack};
|
||||
use core::ops::ControlFlow;
|
||||
use rustc_ast::ast::Attribute;
|
||||
use rustc_hir::intravisit::FnKind;
|
||||
use rustc_hir::{Body, ExprKind, FnDecl, HirId};
|
||||
use rustc_hir::{Body, Expr, ExprKind, FnDecl, HirId};
|
||||
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
||||
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
||||
use rustc_span::source_map::Span;
|
||||
@ -56,15 +56,13 @@ impl CognitiveComplexity {
|
||||
cx: &LateContext<'tcx>,
|
||||
kind: FnKind<'tcx>,
|
||||
decl: &'tcx FnDecl<'_>,
|
||||
body: &'tcx Body<'_>,
|
||||
expr: &'tcx Expr<'_>,
|
||||
body_span: Span,
|
||||
) {
|
||||
if body_span.from_expansion() {
|
||||
return;
|
||||
}
|
||||
|
||||
let expr = body.value;
|
||||
|
||||
let mut cc = 1u64;
|
||||
let mut returns = 0u64;
|
||||
let _: Option<!> = for_each_expr(expr, |e| {
|
||||
@ -146,7 +144,18 @@ impl<'tcx> LateLintPass<'tcx> for CognitiveComplexity {
|
||||
) {
|
||||
let def_id = cx.tcx.hir().local_def_id(hir_id);
|
||||
if !cx.tcx.has_attr(def_id.to_def_id(), sym::test) {
|
||||
self.check(cx, kind, decl, body, span);
|
||||
let expr = if is_async_fn(kind) {
|
||||
match get_async_fn_body(cx.tcx, body) {
|
||||
Some(b) => b,
|
||||
None => {
|
||||
return;
|
||||
},
|
||||
}
|
||||
} else {
|
||||
body.value
|
||||
};
|
||||
|
||||
self.check(cx, kind, decl, expr, span);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -393,3 +393,11 @@ impl Moo {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[clippy::cognitive_complexity = "1"]
|
||||
mod issue9300 {
|
||||
async fn a() {
|
||||
let a = 0;
|
||||
if a == 0 {}
|
||||
}
|
||||
}
|
||||
|
@ -135,5 +135,13 @@ LL | fn moo(&self) {
|
||||
|
|
||||
= help: you could split it up into multiple smaller functions
|
||||
|
||||
error: aborting due to 17 previous errors
|
||||
error: the function has a cognitive complexity of (2/1)
|
||||
--> $DIR/cognitive_complexity.rs:399:14
|
||||
|
|
||||
LL | async fn a() {
|
||||
| ^
|
||||
|
|
||||
= help: you could split it up into multiple smaller functions
|
||||
|
||||
error: aborting due to 18 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user