mirror of
https://github.com/rust-lang/rust-clippy
synced 2025-02-17 14:38:46 +00:00
Split high-cyclomatic-complexity function into two
This commit is contained in:
parent
a67774530f
commit
f48281b632
1 changed files with 77 additions and 73 deletions
|
@ -4,7 +4,7 @@ use std::char;
|
|||
use syntax::ast::*;
|
||||
use syntax::codemap::Span;
|
||||
use syntax::visit::FnKind;
|
||||
use utils::{constants, span_lint, span_help_and_lint, snippet, snippet_opt, span_lint_and_then};
|
||||
use utils::{constants, span_lint, span_help_and_lint, snippet, snippet_opt, span_lint_and_then, in_external_macro};
|
||||
|
||||
/// **What it does:** Checks for structure field patterns bound to wildcards.
|
||||
///
|
||||
|
@ -293,7 +293,38 @@ impl EarlyLintPass for MiscEarly {
|
|||
"`--x` could be misinterpreted as pre-decrement by C programmers, is usually a no-op");
|
||||
}
|
||||
},
|
||||
ExprKind::Lit(ref lit) => {
|
||||
ExprKind::Lit(ref lit) => self.check_lit(cx, lit),
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
|
||||
fn check_block(&mut self, cx: &EarlyContext, block: &Block) {
|
||||
for w in block.stmts.windows(2) {
|
||||
if_let_chain! {[
|
||||
let StmtKind::Local(ref local) = w[0].node,
|
||||
let Option::Some(ref t) = local.init,
|
||||
let ExprKind::Closure(_, _, _, _) = t.node,
|
||||
let PatKind::Ident(_, sp_ident, _) = local.pat.node,
|
||||
let StmtKind::Semi(ref second) = w[1].node,
|
||||
let ExprKind::Assign(_, ref call) = second.node,
|
||||
let ExprKind::Call(ref closure, _) = call.node,
|
||||
let ExprKind::Path(_, ref path) = closure.node
|
||||
], {
|
||||
if sp_ident.node == (&path.segments[0]).identifier {
|
||||
span_lint(
|
||||
cx,
|
||||
REDUNDANT_CLOSURE_CALL,
|
||||
second.span,
|
||||
"Closure called just once immediately after it was declared",
|
||||
);
|
||||
}
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl MiscEarly {
|
||||
fn check_lit(&self, cx: &EarlyContext, lit: &Lit) {
|
||||
if_let_chain! {[
|
||||
let LitKind::Int(value, ..) = lit.node,
|
||||
let Some(src) = snippet_opt(cx, lit.span),
|
||||
|
@ -364,32 +395,5 @@ impl EarlyLintPass for MiscEarly {
|
|||
prev = ch;
|
||||
}
|
||||
}}
|
||||
},
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
|
||||
fn check_block(&mut self, cx: &EarlyContext, block: &Block) {
|
||||
for w in block.stmts.windows(2) {
|
||||
if_let_chain! {[
|
||||
let StmtKind::Local(ref local) = w[0].node,
|
||||
let Option::Some(ref t) = local.init,
|
||||
let ExprKind::Closure(_, _, _, _) = t.node,
|
||||
let PatKind::Ident(_, sp_ident, _) = local.pat.node,
|
||||
let StmtKind::Semi(ref second) = w[1].node,
|
||||
let ExprKind::Assign(_, ref call) = second.node,
|
||||
let ExprKind::Call(ref closure, _) = call.node,
|
||||
let ExprKind::Path(_, ref path) = closure.node
|
||||
], {
|
||||
if sp_ident.node == (&path.segments[0]).identifier {
|
||||
span_lint(
|
||||
cx,
|
||||
REDUNDANT_CLOSURE_CALL,
|
||||
second.span,
|
||||
"Closure called just once immediately after it was declared",
|
||||
);
|
||||
}
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue