decided against reinventing the wheel
This commit is contained in:
parent
a9da61b115
commit
88143ac295
|
@ -158,6 +158,16 @@ The maximum cognitive complexity a function can have
|
||||||
* [`cognitive_complexity`](https://rust-lang.github.io/rust-clippy/master/index.html#cognitive_complexity)
|
* [`cognitive_complexity`](https://rust-lang.github.io/rust-clippy/master/index.html#cognitive_complexity)
|
||||||
|
|
||||||
|
|
||||||
|
## `excessive-nesting-threshold`
|
||||||
|
The maximum amount of nesting a block can reside in
|
||||||
|
|
||||||
|
**Default Value:** `10` (`u64`)
|
||||||
|
|
||||||
|
---
|
||||||
|
**Affected lints:**
|
||||||
|
* [`excessive_nesting`](https://rust-lang.github.io/rust-clippy/master/index.html#excessive_nesting)
|
||||||
|
|
||||||
|
|
||||||
## `disallowed-names`
|
## `disallowed-names`
|
||||||
The list of disallowed names to lint about. NB: `bar` is not here since it has legitimate uses. The value
|
The list of disallowed names to lint about. NB: `bar` is not here since it has legitimate uses. The value
|
||||||
`".."` can be used as part of the list to indicate, that the configured values should be appended to the
|
`".."` can be used as part of the list to indicate, that the configured values should be appended to the
|
||||||
|
|
|
@ -1,16 +1,12 @@
|
||||||
use clippy_utils::diagnostics::span_lint_and_help;
|
use clippy_utils::diagnostics::span_lint_and_help;
|
||||||
use rustc_ast::{
|
use rustc_ast::{
|
||||||
node_id::NodeId,
|
visit::{walk_block, walk_item, Visitor},
|
||||||
ptr::P,
|
Block, Crate, Inline, Item, ItemKind, ModKind,
|
||||||
visit::{FnKind, Visitor},
|
|
||||||
Arm, AssocItemKind, Block, Expr, ExprKind, Inline, Item, ItemKind, Local, LocalKind, ModKind, ModSpans, Pat,
|
|
||||||
PatKind, Stmt, StmtKind,
|
|
||||||
};
|
};
|
||||||
use rustc_lint::{EarlyContext, EarlyLintPass, LintContext};
|
use rustc_lint::{EarlyContext, EarlyLintPass, LintContext};
|
||||||
use rustc_middle::lint::in_external_macro;
|
use rustc_middle::lint::in_external_macro;
|
||||||
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use thin_vec::ThinVec;
|
|
||||||
|
|
||||||
declare_clippy_lint! {
|
declare_clippy_lint! {
|
||||||
/// ### What it does
|
/// ### What it does
|
||||||
|
@ -22,11 +18,6 @@ declare_clippy_lint! {
|
||||||
/// It can severely hinder readability. The default is very generous; if you
|
/// It can severely hinder readability. The default is very generous; if you
|
||||||
/// exceed this, it's a sign you should refactor.
|
/// exceed this, it's a sign you should refactor.
|
||||||
///
|
///
|
||||||
/// ### Known issues
|
|
||||||
///
|
|
||||||
/// Nested inline modules will all be linted, rather than just the outermost one
|
|
||||||
/// that applies. This makes the output a bit verbose.
|
|
||||||
///
|
|
||||||
/// ### Example
|
/// ### Example
|
||||||
/// An example clippy.toml configuration:
|
/// An example clippy.toml configuration:
|
||||||
/// ```toml
|
/// ```toml
|
||||||
|
@ -74,14 +65,17 @@ pub struct ExcessiveNesting {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl EarlyLintPass for ExcessiveNesting {
|
impl EarlyLintPass for ExcessiveNesting {
|
||||||
fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) {
|
fn check_crate(&mut self, cx: &EarlyContext<'_>, krate: &Crate) {
|
||||||
let conf = self;
|
let conf = self;
|
||||||
NestingVisitor {
|
let mut visitor = NestingVisitor {
|
||||||
conf,
|
conf,
|
||||||
cx,
|
cx,
|
||||||
nest_level: 0,
|
nest_level: 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
for item in &krate.items {
|
||||||
|
visitor.visit_item(item);
|
||||||
}
|
}
|
||||||
.visit_item(item);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,239 +85,52 @@ struct NestingVisitor<'conf, 'cx> {
|
||||||
nest_level: u64,
|
nest_level: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'conf, 'cx> Visitor<'_> for NestingVisitor<'conf, 'cx> {
|
impl NestingVisitor<'_, '_> {
|
||||||
fn visit_local(&mut self, local: &Local) {
|
fn check_indent(&self, span: Span) -> bool {
|
||||||
self.visit_pat(&local.pat);
|
if self.nest_level > self.conf.excessive_nesting_threshold && !in_external_macro(self.cx.sess(), span) {
|
||||||
|
|
||||||
match &local.kind {
|
|
||||||
LocalKind::Init(expr) => self.visit_expr(expr),
|
|
||||||
LocalKind::InitElse(expr, block) => {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
self.visit_block(block);
|
|
||||||
},
|
|
||||||
LocalKind::Decl => (),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_block(&mut self, block: &Block) {
|
|
||||||
// TODO: Can we use some RAII guard instead? Borrow checker seems to hate that
|
|
||||||
// idea but it would be a lot cleaner.
|
|
||||||
self.nest_level += 1;
|
|
||||||
|
|
||||||
if !check_indent(self, block.span) {
|
|
||||||
for stmt in &block.stmts {
|
|
||||||
self.visit_stmt(stmt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self.nest_level -= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_stmt(&mut self, stmt: &Stmt) {
|
|
||||||
match &stmt.kind {
|
|
||||||
StmtKind::Local(local) => self.visit_local(local),
|
|
||||||
StmtKind::Item(item) => self.visit_item(item),
|
|
||||||
StmtKind::Expr(expr) | StmtKind::Semi(expr) => self.visit_expr(expr),
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_arm(&mut self, arm: &Arm) {
|
|
||||||
self.visit_pat(&arm.pat);
|
|
||||||
if let Some(expr) = &arm.guard {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
}
|
|
||||||
self.visit_expr(&arm.body);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Is this necessary?
|
|
||||||
fn visit_pat(&mut self, pat: &Pat) {
|
|
||||||
match &pat.kind {
|
|
||||||
PatKind::Box(pat) | PatKind::Ref(pat, ..) | PatKind::Paren(pat) => self.visit_pat(pat),
|
|
||||||
PatKind::Lit(expr) => self.visit_expr(expr),
|
|
||||||
PatKind::Range(start, end, ..) => {
|
|
||||||
if let Some(expr) = start {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
}
|
|
||||||
if let Some(expr) = end {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
PatKind::Ident(.., pat) if let Some(pat) = pat => {
|
|
||||||
self.visit_pat(pat);
|
|
||||||
},
|
|
||||||
PatKind::Struct(.., pat_fields, _) => {
|
|
||||||
for pat_field in pat_fields {
|
|
||||||
self.visit_pat(&pat_field.pat);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
PatKind::TupleStruct(.., pats) | PatKind::Or(pats) | PatKind::Tuple(pats) | PatKind::Slice(pats) => {
|
|
||||||
for pat in pats {
|
|
||||||
self.visit_pat(pat);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_expr(&mut self, expr: &Expr) {
|
|
||||||
// This is a mess, but really all it does is extract every expression from every applicable variant
|
|
||||||
// of ExprKind until it finds a Block.
|
|
||||||
// TODO: clippy_utils has the two functions for_each_expr and for_each_expr_with_closures, can those
|
|
||||||
// be used here or are they not applicable for this case?
|
|
||||||
match &expr.kind {
|
|
||||||
ExprKind::ConstBlock(anon_const) => self.visit_expr(&anon_const.value),
|
|
||||||
ExprKind::Call(.., args) => {
|
|
||||||
for expr in args {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ExprKind::MethodCall(method_call) => {
|
|
||||||
for expr in &method_call.args {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ExprKind::Tup(exprs) | ExprKind::Array(exprs) => {
|
|
||||||
for expr in exprs {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ExprKind::Binary(.., left, right)
|
|
||||||
| ExprKind::Assign(left, right, ..)
|
|
||||||
| ExprKind::AssignOp(.., left, right)
|
|
||||||
| ExprKind::Index(left, right) => {
|
|
||||||
self.visit_expr(left);
|
|
||||||
self.visit_expr(right);
|
|
||||||
},
|
|
||||||
ExprKind::Let(pat, expr, ..) => {
|
|
||||||
self.visit_pat(pat);
|
|
||||||
self.visit_expr(expr);
|
|
||||||
},
|
|
||||||
ExprKind::Unary(.., expr)
|
|
||||||
| ExprKind::Await(expr)
|
|
||||||
| ExprKind::Field(expr, ..)
|
|
||||||
| ExprKind::AddrOf(.., expr)
|
|
||||||
| ExprKind::Try(expr) => {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
},
|
|
||||||
ExprKind::Repeat(expr, anon_const) => {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
self.visit_expr(&anon_const.value);
|
|
||||||
},
|
|
||||||
ExprKind::If(expr, block, else_expr) => {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
self.visit_block(block);
|
|
||||||
|
|
||||||
if let Some(expr) = else_expr {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ExprKind::While(expr, block, ..) => {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
self.visit_block(block);
|
|
||||||
},
|
|
||||||
ExprKind::ForLoop(pat, expr, block, ..) => {
|
|
||||||
self.visit_pat(pat);
|
|
||||||
self.visit_expr(expr);
|
|
||||||
self.visit_block(block);
|
|
||||||
},
|
|
||||||
ExprKind::Loop(block, ..)
|
|
||||||
| ExprKind::Block(block, ..)
|
|
||||||
| ExprKind::Async(.., block)
|
|
||||||
| ExprKind::TryBlock(block) => {
|
|
||||||
self.visit_block(block);
|
|
||||||
},
|
|
||||||
ExprKind::Match(expr, arms) => {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
|
|
||||||
for arm in arms {
|
|
||||||
self.visit_arm(arm);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ExprKind::Closure(closure) => self.visit_expr(&closure.body),
|
|
||||||
ExprKind::Range(start, end, ..) => {
|
|
||||||
if let Some(expr) = start {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
}
|
|
||||||
if let Some(expr) = end {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ExprKind::Break(.., expr) | ExprKind::Ret(expr) | ExprKind::Yield(expr) | ExprKind::Yeet(expr) => {
|
|
||||||
if let Some(expr) = expr {
|
|
||||||
self.visit_expr(expr);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ExprKind::Struct(struct_expr) => {
|
|
||||||
for field in &struct_expr.fields {
|
|
||||||
self.visit_expr(&field.expr);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_fn(&mut self, fk: FnKind<'_>, _: Span, _: NodeId) {
|
|
||||||
match fk {
|
|
||||||
FnKind::Fn(.., block) if let Some(block) = block => self.visit_block(block),
|
|
||||||
FnKind::Closure(.., expr) => self.visit_expr(expr),
|
|
||||||
// :/
|
|
||||||
FnKind::Fn(..) => (),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_item(&mut self, item: &Item) {
|
|
||||||
match &item.kind {
|
|
||||||
ItemKind::Static(static_item) if let Some(expr) = static_item.expr.as_ref() => self.visit_expr(expr),
|
|
||||||
ItemKind::Const(const_item) if let Some(expr) = const_item.expr.as_ref() => self.visit_expr(expr),
|
|
||||||
ItemKind::Fn(fk) if let Some(block) = fk.body.as_ref() => self.visit_block(block),
|
|
||||||
ItemKind::Mod(.., mod_kind)
|
|
||||||
if let ModKind::Loaded(items, Inline::Yes, ModSpans { inner_span, ..}) = mod_kind =>
|
|
||||||
{
|
|
||||||
self.nest_level += 1;
|
|
||||||
|
|
||||||
check_indent(self, *inner_span);
|
|
||||||
|
|
||||||
self.nest_level -= 1;
|
|
||||||
}
|
|
||||||
ItemKind::Trait(trit) => check_trait_and_impl(self, item, &trit.items),
|
|
||||||
ItemKind::Impl(imp) => check_trait_and_impl(self, item, &imp.items),
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn check_trait_and_impl(visitor: &mut NestingVisitor<'_, '_>, item: &Item, items: &ThinVec<P<Item<AssocItemKind>>>) {
|
|
||||||
visitor.nest_level += 1;
|
|
||||||
|
|
||||||
if !check_indent(visitor, item.span) {
|
|
||||||
for item in items {
|
|
||||||
match &item.kind {
|
|
||||||
AssocItemKind::Const(const_item) if let Some(expr) = const_item.expr.as_ref() => {
|
|
||||||
visitor.visit_expr(expr);
|
|
||||||
},
|
|
||||||
AssocItemKind::Fn(fk) if let Some(block) = fk.body.as_ref() => visitor.visit_block(block),
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
visitor.nest_level -= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn check_indent(visitor: &NestingVisitor<'_, '_>, span: Span) -> bool {
|
|
||||||
if visitor.nest_level > visitor.conf.excessive_nesting_threshold && !in_external_macro(visitor.cx.sess(), span) {
|
|
||||||
span_lint_and_help(
|
span_lint_and_help(
|
||||||
visitor.cx,
|
self.cx,
|
||||||
EXCESSIVE_NESTING,
|
EXCESSIVE_NESTING,
|
||||||
span,
|
span,
|
||||||
"this block is too nested",
|
"this block is too nested",
|
||||||
None,
|
None,
|
||||||
"try refactoring your code, extraction is often both easier to read and less nested",
|
"try refactoring your code to minimize nesting",
|
||||||
);
|
);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
false
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'conf, 'cx> Visitor<'_> for NestingVisitor<'conf, 'cx> {
|
||||||
|
fn visit_block(&mut self, block: &Block) {
|
||||||
|
self.nest_level += 1;
|
||||||
|
|
||||||
|
if !self.check_indent(block.span) {
|
||||||
|
walk_block(self, block);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.nest_level -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_item(&mut self, item: &Item) {
|
||||||
|
match &item.kind {
|
||||||
|
ItemKind::Trait(_) | ItemKind::Impl(_) | ItemKind::Mod(.., ModKind::Loaded(_, Inline::Yes, _)) => {
|
||||||
|
self.nest_level += 1;
|
||||||
|
|
||||||
|
if !self.check_indent(item.span) {
|
||||||
|
walk_item(self, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.nest_level -= 1;
|
||||||
|
},
|
||||||
|
// Mod: Don't visit non-inline modules
|
||||||
|
// ForeignMod: I don't think this is necessary, but just incase let's not take any chances (don't want to
|
||||||
|
// cause any false positives)
|
||||||
|
ItemKind::Mod(..) | ItemKind::ForeignMod(..) => {},
|
||||||
|
_ => walk_item(self, item),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,7 +77,7 @@ trait Lol {
|
||||||
fn lmao() {
|
fn lmao() {
|
||||||
fn bb() {
|
fn bb() {
|
||||||
fn cc() {
|
fn cc() {
|
||||||
let x = { 1 }; // not a warning
|
let x = { 1 }; // not a warning, but cc is
|
||||||
}
|
}
|
||||||
|
|
||||||
let x = { 1 }; // warning
|
let x = { 1 }; // warning
|
||||||
|
@ -93,8 +93,8 @@ pub mod a {
|
||||||
pub mod d {
|
pub mod d {
|
||||||
pub mod e {
|
pub mod e {
|
||||||
pub mod f {}
|
pub mod f {}
|
||||||
}
|
} // not here
|
||||||
}
|
} // only warning should be here
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -139,6 +139,7 @@ fn main() {
|
||||||
let boo = true;
|
let boo = true;
|
||||||
!{boo as u32 + !{boo as u32 + !{boo as u32}}};
|
!{boo as u32 + !{boo as u32 + !{boo as u32}}};
|
||||||
|
|
||||||
|
// this is a mess, but that's intentional
|
||||||
let mut y = 1;
|
let mut y = 1;
|
||||||
y += {{{{{5}}}}};
|
y += {{{{{5}}}}};
|
||||||
let z = y + {{{{{{{{{5}}}}}}}}};
|
let z = y + {{{{{{{{{5}}}}}}}}};
|
||||||
|
|
|
@ -8,7 +8,7 @@ LL | | w
|
||||||
LL | | };
|
LL | | };
|
||||||
| |_____________^
|
| |_____________^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
= note: `-D clippy::excessive-nesting` implied by `-D warnings`
|
= note: `-D clippy::excessive-nesting` implied by `-D warnings`
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
|
@ -24,26 +24,18 @@ LL | | }
|
||||||
LL | | }
|
LL | | }
|
||||||
| |_____________^
|
| |_____________^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
|
||||||
--> $DIR/excessive_nesting.rs:67:32
|
|
||||||
|
|
|
||||||
LL | pub fn c() {}
|
|
||||||
| ^^
|
|
||||||
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:79:21
|
--> $DIR/excessive_nesting.rs:79:21
|
||||||
|
|
|
|
||||||
LL | fn cc() {
|
LL | fn cc() {
|
||||||
| _____________________^
|
| _____________________^
|
||||||
LL | | let x = { 1 }; // not a warning
|
LL | | let x = { 1 }; // not a warning, but cc is
|
||||||
LL | | }
|
LL | | }
|
||||||
| |_____________^
|
| |_____________^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:83:21
|
--> $DIR/excessive_nesting.rs:83:21
|
||||||
|
@ -51,7 +43,19 @@ error: this block is too nested
|
||||||
LL | let x = { 1 }; // warning
|
LL | let x = { 1 }; // warning
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
|
error: this block is too nested
|
||||||
|
--> $DIR/excessive_nesting.rs:93:13
|
||||||
|
|
|
||||||
|
LL | / pub mod d {
|
||||||
|
LL | | pub mod e {
|
||||||
|
LL | | pub mod f {}
|
||||||
|
LL | | } // not here
|
||||||
|
LL | | } // only warning should be here
|
||||||
|
| |_____________^
|
||||||
|
|
|
||||||
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:107:17
|
--> $DIR/excessive_nesting.rs:107:17
|
||||||
|
@ -59,7 +63,7 @@ error: this block is too nested
|
||||||
LL | a_but_not({{{{{{{{0}}}}}}}});
|
LL | a_but_not({{{{{{{{0}}}}}}}});
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:108:11
|
--> $DIR/excessive_nesting.rs:108:11
|
||||||
|
@ -67,7 +71,7 @@ error: this block is too nested
|
||||||
LL | a.a({{{{{{{{{0}}}}}}}}});
|
LL | a.a({{{{{{{{{0}}}}}}}}});
|
||||||
| ^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:109:11
|
--> $DIR/excessive_nesting.rs:109:11
|
||||||
|
@ -75,7 +79,7 @@ error: this block is too nested
|
||||||
LL | (0, {{{{{{{1}}}}}}});
|
LL | (0, {{{{{{{1}}}}}}});
|
||||||
| ^^^^^^^^^^^
|
| ^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:113:21
|
--> $DIR/excessive_nesting.rs:113:21
|
||||||
|
@ -90,7 +94,22 @@ LL | | }
|
||||||
LL | | }
|
LL | | }
|
||||||
| |_____________^
|
| |_____________^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
|
error: this block is too nested
|
||||||
|
--> $DIR/excessive_nesting.rs:125:25
|
||||||
|
|
|
||||||
|
LL | let y = (|| {
|
||||||
|
| _________________________^
|
||||||
|
LL | | let z = (|| {
|
||||||
|
LL | | let w = { 3 };
|
||||||
|
LL | | w
|
||||||
|
LL | | })();
|
||||||
|
LL | | z
|
||||||
|
LL | | })();
|
||||||
|
| |_____________^
|
||||||
|
|
|
||||||
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:33:13
|
--> $DIR/excessive_nesting.rs:33:13
|
||||||
|
@ -107,7 +126,7 @@ LL | | }
|
||||||
LL | xx!();
|
LL | xx!();
|
||||||
| ----- in this macro invocation
|
| ----- in this macro invocation
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
= note: this error originates in the macro `xx` (in Nightly builds, run with -Z macro-backtrace for more info)
|
= note: this error originates in the macro `xx` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
|
@ -116,210 +135,210 @@ error: this block is too nested
|
||||||
LL | !{boo as u32 + !{boo as u32 + !{boo as u32}}};
|
LL | !{boo as u32 + !{boo as u32 + !{boo as u32}}};
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:143:12
|
--> $DIR/excessive_nesting.rs:144:12
|
||||||
|
|
|
|
||||||
LL | y += {{{{{5}}}}};
|
LL | y += {{{{{5}}}}};
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:144:19
|
--> $DIR/excessive_nesting.rs:145:19
|
||||||
|
|
|
|
||||||
LL | let z = y + {{{{{{{{{5}}}}}}}}};
|
LL | let z = y + {{{{{{{{{5}}}}}}}}};
|
||||||
| ^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:145:11
|
--> $DIR/excessive_nesting.rs:146:11
|
||||||
|
|
|
|
||||||
LL | [0, {{{{{{{{{{0}}}}}}}}}}];
|
LL | [0, {{{{{{{{{{0}}}}}}}}}}];
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:146:24
|
--> $DIR/excessive_nesting.rs:147:24
|
||||||
|
|
|
|
||||||
LL | let mut xx = [0; {{{{{{{{100}}}}}}}}];
|
LL | let mut xx = [0; {{{{{{{{100}}}}}}}}];
|
||||||
| ^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:147:10
|
--> $DIR/excessive_nesting.rs:148:10
|
||||||
|
|
|
|
||||||
LL | xx[{{{{{{{{{{{{{{{{{{{{{{{{3}}}}}}}}}}}}}}}}}}}}}}}}];
|
LL | xx[{{{{{{{{{{{{{{{{{{{{{{{{3}}}}}}}}}}}}}}}}}}}}}}}}];
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:148:12
|
--> $DIR/excessive_nesting.rs:149:12
|
||||||
|
|
|
|
||||||
LL | &mut {{{{{{{{{{y}}}}}}}}}};
|
LL | &mut {{{{{{{{{{y}}}}}}}}}};
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:150:16
|
--> $DIR/excessive_nesting.rs:151:16
|
||||||
|
|
|
|
||||||
LL | for i in {{{{xx}}}} {{{{{{{{}}}}}}}}
|
LL | for i in {{{{xx}}}} {{{{{{{{}}}}}}}}
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:150:27
|
--> $DIR/excessive_nesting.rs:151:27
|
||||||
|
|
|
|
||||||
LL | for i in {{{{xx}}}} {{{{{{{{}}}}}}}}
|
LL | for i in {{{{xx}}}} {{{{{{{{}}}}}}}}
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:152:27
|
--> $DIR/excessive_nesting.rs:153:27
|
||||||
|
|
|
|
||||||
LL | while let Some(i) = {{{{{{Some(1)}}}}}} {{{{{{{}}}}}}}
|
LL | while let Some(i) = {{{{{{Some(1)}}}}}} {{{{{{{}}}}}}}
|
||||||
| ^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:152:47
|
--> $DIR/excessive_nesting.rs:153:47
|
||||||
|
|
|
|
||||||
LL | while let Some(i) = {{{{{{Some(1)}}}}}} {{{{{{{}}}}}}}
|
LL | while let Some(i) = {{{{{{Some(1)}}}}}} {{{{{{{}}}}}}}
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:154:13
|
--> $DIR/excessive_nesting.rs:155:13
|
||||||
|
|
|
|
||||||
LL | while {{{{{{{{true}}}}}}}} {{{{{{{{{}}}}}}}}}
|
LL | while {{{{{{{{true}}}}}}}} {{{{{{{{{}}}}}}}}}
|
||||||
| ^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:154:34
|
--> $DIR/excessive_nesting.rs:155:34
|
||||||
|
|
|
|
||||||
LL | while {{{{{{{{true}}}}}}}} {{{{{{{{{}}}}}}}}}
|
LL | while {{{{{{{{true}}}}}}}} {{{{{{{{{}}}}}}}}}
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:156:22
|
--> $DIR/excessive_nesting.rs:157:22
|
||||||
|
|
|
|
||||||
LL | let d = D { d: {{{{{{{{{{{{{{{{{{{{{{{3}}}}}}}}}}}}}}}}}}}}}}} };
|
LL | let d = D { d: {{{{{{{{{{{{{{{{{{{{{{{3}}}}}}}}}}}}}}}}}}}}}}} };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
|
||||||
--> $DIR/excessive_nesting.rs:158:7
|
|
||||||
|
|
|
||||||
LL | {{{{1;}}}}..{{{{{{3}}}}}};
|
|
||||||
| ^^^^^^
|
|
||||||
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
|
||||||
|
|
||||||
error: this block is too nested
|
|
||||||
--> $DIR/excessive_nesting.rs:158:19
|
|
||||||
|
|
|
||||||
LL | {{{{1;}}}}..{{{{{{3}}}}}};
|
|
||||||
| ^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:159:7
|
--> $DIR/excessive_nesting.rs:159:7
|
||||||
|
|
|
|
||||||
|
LL | {{{{1;}}}}..{{{{{{3}}}}}};
|
||||||
|
| ^^^^^^
|
||||||
|
|
|
||||||
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
|
error: this block is too nested
|
||||||
|
--> $DIR/excessive_nesting.rs:159:19
|
||||||
|
|
|
||||||
|
LL | {{{{1;}}}}..{{{{{{3}}}}}};
|
||||||
|
| ^^^^^^^^^
|
||||||
|
|
|
||||||
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
|
error: this block is too nested
|
||||||
|
--> $DIR/excessive_nesting.rs:160:7
|
||||||
|
|
|
||||||
LL | {{{{1;}}}}..={{{{{{{{{{{{{{{{{{{{{{{{{{6}}}}}}}}}}}}}}}}}}}}}}}}}};
|
LL | {{{{1;}}}}..={{{{{{{{{{{{{{{{{{{{{{{{{{6}}}}}}}}}}}}}}}}}}}}}}}}}};
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:159:20
|
--> $DIR/excessive_nesting.rs:160:20
|
||||||
|
|
|
|
||||||
LL | {{{{1;}}}}..={{{{{{{{{{{{{{{{{{{{{{{{{{6}}}}}}}}}}}}}}}}}}}}}}}}}};
|
LL | {{{{1;}}}}..={{{{{{{{{{{{{{{{{{{{{{{{{{6}}}}}}}}}}}}}}}}}}}}}}}}}};
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:160:9
|
--> $DIR/excessive_nesting.rs:161:9
|
||||||
|
|
|
|
||||||
LL | ..{{{{{{{5}}}}}}};
|
LL | ..{{{{{{{5}}}}}}};
|
||||||
| ^^^^^^^^^^^
|
| ^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:161:10
|
--> $DIR/excessive_nesting.rs:162:10
|
||||||
|
|
|
|
||||||
LL | ..={{{{{3}}}}};
|
LL | ..={{{{{3}}}}};
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:162:7
|
--> $DIR/excessive_nesting.rs:163:7
|
||||||
|
|
|
|
||||||
LL | {{{{{1;}}}}}..;
|
LL | {{{{{1;}}}}}..;
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:164:19
|
--> $DIR/excessive_nesting.rs:165:19
|
||||||
|
|
|
|
||||||
LL | loop { break {{{{1}}}} };
|
LL | loop { break {{{{1}}}} };
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:165:12
|
--> $DIR/excessive_nesting.rs:166:12
|
||||||
|
|
|
|
||||||
LL | loop {{{{{{}}}}}}
|
LL | loop {{{{{{}}}}}}
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:167:13
|
--> $DIR/excessive_nesting.rs:168:13
|
||||||
|
|
|
|
||||||
LL | match {{{{{{true}}}}}} {
|
LL | match {{{{{{true}}}}}} {
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:168:19
|
--> $DIR/excessive_nesting.rs:169:19
|
||||||
|
|
|
|
||||||
LL | true => {{{{}}}},
|
LL | true => {{{{}}}},
|
||||||
| ^^^^
|
| ^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:169:20
|
--> $DIR/excessive_nesting.rs:170:20
|
||||||
|
|
|
|
||||||
LL | false => {{{{}}}},
|
LL | false => {{{{}}}},
|
||||||
| ^^^^
|
| ^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:174:13
|
--> $DIR/excessive_nesting.rs:175:13
|
||||||
|
|
|
|
||||||
LL | / {
|
LL | / {
|
||||||
LL | | {
|
LL | | {
|
||||||
|
@ -328,31 +347,23 @@ LL | | }
|
||||||
LL | | }
|
LL | | }
|
||||||
| |_____________^
|
| |_____________^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:184:27
|
--> $DIR/excessive_nesting.rs:185:27
|
||||||
|
|
|
|
||||||
LL | async fn c() -> u32 {{{{{{{0}}}}}}}
|
LL | async fn c() -> u32 {{{{{{{0}}}}}}}
|
||||||
| ^^^^^^^^^^^
|
| ^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: this block is too nested
|
error: this block is too nested
|
||||||
--> $DIR/excessive_nesting.rs:184:28
|
--> $DIR/excessive_nesting.rs:191:7
|
||||||
|
|
|
||||||
LL | async fn c() -> u32 {{{{{{{0}}}}}}}
|
|
||||||
| ^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
|
||||||
|
|
||||||
error: this block is too nested
|
|
||||||
--> $DIR/excessive_nesting.rs:190:7
|
|
||||||
|
|
|
|
||||||
LL | {{{{b().await}}}};
|
LL | {{{{b().await}}}};
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= help: try refactoring your code, extraction is often both easier to read and less nested
|
= help: try refactoring your code to minimize nesting
|
||||||
|
|
||||||
error: aborting due to 40 previous errors
|
error: aborting due to 40 previous errors
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue