change name to [infinite_loop
];
& apply review suggestions;
This commit is contained in:
parent
0d26f9183b
commit
758d0e8661
@ -5147,7 +5147,7 @@ Released 2018-09-13
|
|||||||
[`inefficient_to_string`]: https://rust-lang.github.io/rust-clippy/master/index.html#inefficient_to_string
|
[`inefficient_to_string`]: https://rust-lang.github.io/rust-clippy/master/index.html#inefficient_to_string
|
||||||
[`infallible_destructuring_match`]: https://rust-lang.github.io/rust-clippy/master/index.html#infallible_destructuring_match
|
[`infallible_destructuring_match`]: https://rust-lang.github.io/rust-clippy/master/index.html#infallible_destructuring_match
|
||||||
[`infinite_iter`]: https://rust-lang.github.io/rust-clippy/master/index.html#infinite_iter
|
[`infinite_iter`]: https://rust-lang.github.io/rust-clippy/master/index.html#infinite_iter
|
||||||
[`infinite_loops`]: https://rust-lang.github.io/rust-clippy/master/index.html#infinite_loops
|
[`infinite_loop`]: https://rust-lang.github.io/rust-clippy/master/index.html#infinite_loop
|
||||||
[`inherent_to_string`]: https://rust-lang.github.io/rust-clippy/master/index.html#inherent_to_string
|
[`inherent_to_string`]: https://rust-lang.github.io/rust-clippy/master/index.html#inherent_to_string
|
||||||
[`inherent_to_string_shadow_display`]: https://rust-lang.github.io/rust-clippy/master/index.html#inherent_to_string_shadow_display
|
[`inherent_to_string_shadow_display`]: https://rust-lang.github.io/rust-clippy/master/index.html#inherent_to_string_shadow_display
|
||||||
[`init_numbered_fields`]: https://rust-lang.github.io/rust-clippy/master/index.html#init_numbered_fields
|
[`init_numbered_fields`]: https://rust-lang.github.io/rust-clippy/master/index.html#init_numbered_fields
|
||||||
|
@ -263,7 +263,7 @@
|
|||||||
crate::loops::EXPLICIT_INTO_ITER_LOOP_INFO,
|
crate::loops::EXPLICIT_INTO_ITER_LOOP_INFO,
|
||||||
crate::loops::EXPLICIT_ITER_LOOP_INFO,
|
crate::loops::EXPLICIT_ITER_LOOP_INFO,
|
||||||
crate::loops::FOR_KV_MAP_INFO,
|
crate::loops::FOR_KV_MAP_INFO,
|
||||||
crate::loops::INFINITE_LOOPS_INFO,
|
crate::loops::INFINITE_LOOP_INFO,
|
||||||
crate::loops::ITER_NEXT_LOOP_INFO,
|
crate::loops::ITER_NEXT_LOOP_INFO,
|
||||||
crate::loops::MANUAL_FIND_INFO,
|
crate::loops::MANUAL_FIND_INFO,
|
||||||
crate::loops::MANUAL_FLATTEN_INFO,
|
crate::loops::MANUAL_FLATTEN_INFO,
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_lint::LateContext;
|
use rustc_lint::LateContext;
|
||||||
|
|
||||||
use super::INFINITE_LOOPS;
|
use super::INFINITE_LOOP;
|
||||||
|
|
||||||
pub(super) fn check<'tcx>(
|
pub(super) fn check<'tcx>(
|
||||||
cx: &LateContext<'tcx>,
|
cx: &LateContext<'tcx>,
|
||||||
@ -15,7 +15,7 @@ pub(super) fn check<'tcx>(
|
|||||||
loop_block: &'tcx hir::Block<'_>,
|
loop_block: &'tcx hir::Block<'_>,
|
||||||
label: Option<Label>,
|
label: Option<Label>,
|
||||||
) {
|
) {
|
||||||
if is_lint_allowed(cx, INFINITE_LOOPS, expr.hir_id) {
|
if is_lint_allowed(cx, INFINITE_LOOP, expr.hir_id) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ pub(super) fn check<'tcx>(
|
|||||||
let is_finite_loop = loop_visitor.is_finite;
|
let is_finite_loop = loop_visitor.is_finite;
|
||||||
|
|
||||||
if !is_finite_loop {
|
if !is_finite_loop {
|
||||||
span_lint_and_then(cx, INFINITE_LOOPS, expr.span, "infinite loop detected", |diag| {
|
span_lint_and_then(cx, INFINITE_LOOP, expr.span, "infinite loop detected", |diag| {
|
||||||
if let FnRetTy::DefaultReturn(ret_span) = parent_fn_ret {
|
if let FnRetTy::DefaultReturn(ret_span) = parent_fn_ret {
|
||||||
diag.span_suggestion(
|
diag.span_suggestion(
|
||||||
ret_span,
|
ret_span,
|
||||||
@ -54,10 +54,7 @@ pub(super) fn check<'tcx>(
|
|||||||
Applicability::MaybeIncorrect,
|
Applicability::MaybeIncorrect,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
diag.span_help(
|
diag.help("if this is not intended, try adding a `break` or `return` condition in the loop");
|
||||||
expr.span,
|
|
||||||
"if this is not intended, try adding a `break` or `return` condition in this loop",
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
@ -3,7 +3,7 @@
|
|||||||
mod explicit_into_iter_loop;
|
mod explicit_into_iter_loop;
|
||||||
mod explicit_iter_loop;
|
mod explicit_iter_loop;
|
||||||
mod for_kv_map;
|
mod for_kv_map;
|
||||||
mod infinite_loops;
|
mod infinite_loop;
|
||||||
mod iter_next_loop;
|
mod iter_next_loop;
|
||||||
mod manual_find;
|
mod manual_find;
|
||||||
mod manual_flatten;
|
mod manual_flatten;
|
||||||
@ -642,7 +642,7 @@
|
|||||||
/// and lint accordingly.
|
/// and lint accordingly.
|
||||||
///
|
///
|
||||||
/// ### Why is this bad?
|
/// ### Why is this bad?
|
||||||
/// A loop should be gently exited somewhere, or at lease mark its parent function as
|
/// A loop should be gently exited somewhere, or at least mark its parent function as
|
||||||
/// never return (`!`).
|
/// never return (`!`).
|
||||||
///
|
///
|
||||||
/// ### Example
|
/// ### Example
|
||||||
@ -673,9 +673,9 @@
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
#[clippy::version = "1.75.0"]
|
#[clippy::version = "1.75.0"]
|
||||||
pub INFINITE_LOOPS,
|
pub INFINITE_LOOP,
|
||||||
restriction,
|
restriction,
|
||||||
"possibly unintended infinite loops"
|
"possibly unintended infinite loop"
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Loops {
|
pub struct Loops {
|
||||||
@ -712,7 +712,7 @@ pub fn new(msrv: Msrv, enforce_iter_loop_reborrow: bool) -> Self {
|
|||||||
MANUAL_FIND,
|
MANUAL_FIND,
|
||||||
MANUAL_WHILE_LET_SOME,
|
MANUAL_WHILE_LET_SOME,
|
||||||
UNUSED_ENUMERATE_INDEX,
|
UNUSED_ENUMERATE_INDEX,
|
||||||
INFINITE_LOOPS,
|
INFINITE_LOOP,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
impl<'tcx> LateLintPass<'tcx> for Loops {
|
impl<'tcx> LateLintPass<'tcx> for Loops {
|
||||||
@ -755,7 +755,7 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
|
|||||||
// also check for empty `loop {}` statements, skipping those in #[panic_handler]
|
// also check for empty `loop {}` statements, skipping those in #[panic_handler]
|
||||||
empty_loop::check(cx, expr, block);
|
empty_loop::check(cx, expr, block);
|
||||||
while_let_loop::check(cx, expr, block);
|
while_let_loop::check(cx, expr, block);
|
||||||
infinite_loops::check(cx, expr, block, label);
|
infinite_loop::check(cx, expr, block, label);
|
||||||
}
|
}
|
||||||
|
|
||||||
while_let_on_iterator::check(cx, expr);
|
while_let_on_iterator::check(cx, expr);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//@no-rustfix
|
//@no-rustfix
|
||||||
#![allow(clippy::never_loop)]
|
#![allow(clippy::never_loop)]
|
||||||
#![warn(clippy::infinite_loops)]
|
#![warn(clippy::infinite_loop)]
|
||||||
|
|
||||||
fn do_something() {}
|
fn do_something() {}
|
||||||
|
|
||||||
@ -357,4 +357,10 @@ fn inf_loop_in_closure() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn inf_loop_in_res() -> Result<(), i32> {
|
||||||
|
Ok(loop {
|
||||||
|
do_something()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
@ -7,8 +7,8 @@ LL | | do_something();
|
|||||||
LL | | }
|
LL | | }
|
||||||
| |_____^
|
| |_____^
|
||||||
|
|
|
|
||||||
= note: `-D clippy::infinite-loops` implied by `-D warnings`
|
= note: `-D clippy::infinite-loop` implied by `-D warnings`
|
||||||
= help: to override `-D warnings` add `#[allow(clippy::infinite_loops)]`
|
= help: to override `-D warnings` add `#[allow(clippy::infinite_loop)]`
|
||||||
help: if this is intentional, consider specifing `!` as function return
|
help: if this is intentional, consider specifing `!` as function return
|
||||||
|
|
|
|
||||||
LL | fn no_break() -> ! {
|
LL | fn no_break() -> ! {
|
||||||
@ -71,14 +71,7 @@ LL | | do_something();
|
|||||||
LL | | }
|
LL | | }
|
||||||
| |_____^
|
| |_____^
|
||||||
|
|
|
|
||||||
help: if this is not intended, try adding a `break` or `return` condition in this loop
|
= help: if this is not intended, try adding a `break` or `return` condition in the loop
|
||||||
--> $DIR/infinite_loops.rs:33:5
|
|
||||||
|
|
|
||||||
LL | / loop {
|
|
||||||
LL | |
|
|
||||||
LL | | do_something();
|
|
||||||
LL | | }
|
|
||||||
| |_____^
|
|
||||||
|
|
||||||
error: infinite loop detected
|
error: infinite loop detected
|
||||||
--> $DIR/infinite_loops.rs:46:5
|
--> $DIR/infinite_loops.rs:46:5
|
||||||
@ -251,5 +244,16 @@ help: if this is intentional, consider specifing `!` as function return
|
|||||||
LL | let _loop_forever = || -> ! {
|
LL | let _loop_forever = || -> ! {
|
||||||
| ++++
|
| ++++
|
||||||
|
|
||||||
error: aborting due to 16 previous errors
|
error: infinite loop detected
|
||||||
|
--> $DIR/infinite_loops.rs:361:8
|
||||||
|
|
|
||||||
|
LL | Ok(loop {
|
||||||
|
| ________^
|
||||||
|
LL | | do_something()
|
||||||
|
LL | | })
|
||||||
|
| |_____^
|
||||||
|
|
|
||||||
|
= help: if this is not intended, try adding a `break` or `return` condition in the loop
|
||||||
|
|
||||||
|
error: aborting due to 17 previous errors
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user