mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-28 17:53:56 +00:00
add restirction for unreachable and panic
This commit is contained in:
parent
ee6fc1bead
commit
8d911fe988
@ -25,6 +25,22 @@ declare_clippy_lint! {
|
|||||||
"missing parameters in `panic!` calls"
|
"missing parameters in `panic!` calls"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare_clippy_lint! {
|
||||||
|
/// **What it does:** Checks for usage of `panic!`.
|
||||||
|
///
|
||||||
|
/// **Why is this bad?** `panic!` will stop the execution of the executable
|
||||||
|
///
|
||||||
|
/// **Known problems:** None.
|
||||||
|
///
|
||||||
|
/// **Example:**
|
||||||
|
/// ```no_run
|
||||||
|
/// panic!("even with a good reason");
|
||||||
|
/// ```
|
||||||
|
pub PANIC,
|
||||||
|
restriction,
|
||||||
|
"missing parameters in `panic!` calls"
|
||||||
|
}
|
||||||
|
|
||||||
declare_clippy_lint! {
|
declare_clippy_lint! {
|
||||||
/// **What it does:** Checks for usage of `unimplemented!`.
|
/// **What it does:** Checks for usage of `unimplemented!`.
|
||||||
///
|
///
|
||||||
@ -41,7 +57,23 @@ declare_clippy_lint! {
|
|||||||
"`unimplemented!` should not be present in production code"
|
"`unimplemented!` should not be present in production code"
|
||||||
}
|
}
|
||||||
|
|
||||||
declare_lint_pass!(PanicUnimplemented => [PANIC_PARAMS, UNIMPLEMENTED]);
|
declare_clippy_lint! {
|
||||||
|
/// **What it does:** Checks for usage of `unreachable!`.
|
||||||
|
///
|
||||||
|
/// **Why is this bad?** This macro can cause cause code to panics
|
||||||
|
///
|
||||||
|
/// **Known problems:** None.
|
||||||
|
///
|
||||||
|
/// **Example:**
|
||||||
|
/// ```no_run
|
||||||
|
/// unreachable!();
|
||||||
|
/// ```
|
||||||
|
pub UNREACHABLE,
|
||||||
|
restriction,
|
||||||
|
"`unreachable!` should not be present in production code"
|
||||||
|
}
|
||||||
|
|
||||||
|
declare_lint_pass!(PanicUnimplemented => [PANIC_PARAMS, UNIMPLEMENTED, UNREACHABLE]);
|
||||||
|
|
||||||
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for PanicUnimplemented {
|
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for PanicUnimplemented {
|
||||||
fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr) {
|
fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr) {
|
||||||
@ -55,7 +87,15 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for PanicUnimplemented {
|
|||||||
let span = get_outer_span(expr);
|
let span = get_outer_span(expr);
|
||||||
span_lint(cx, UNIMPLEMENTED, span,
|
span_lint(cx, UNIMPLEMENTED, span,
|
||||||
"`unimplemented` should not be present in production code");
|
"`unimplemented` should not be present in production code");
|
||||||
} else {
|
} else if is_expn_of(expr.span, "unreachable").is_some() {
|
||||||
|
let span = get_outer_span(expr);
|
||||||
|
span_lint(cx, UNREACHABLE, span,
|
||||||
|
"`unreachable` should not be present in production code");
|
||||||
|
} else if is_expn_of(expr.span, "panic").is_some() {
|
||||||
|
let span = get_outer_span(expr);
|
||||||
|
span_lint(cx, PANIC, span,
|
||||||
|
"`panic` should not be present in production code");
|
||||||
|
//} else {
|
||||||
match_panic(params, expr, cx);
|
match_panic(params, expr, cx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#![warn(clippy::panic_params, clippy::unimplemented)]
|
#![warn(clippy::panic_params, clippy::unimplemented, clippy::unreachable)]
|
||||||
#![allow(clippy::assertions_on_constants)]
|
#![allow(clippy::assertions_on_constants)]
|
||||||
fn missing() {
|
fn missing() {
|
||||||
if true {
|
if true {
|
||||||
@ -56,6 +56,12 @@ fn unimplemented() {
|
|||||||
let b = a + 2;
|
let b = a + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn unreachable() {
|
||||||
|
let a = 2;
|
||||||
|
unreachable!();
|
||||||
|
let b = a + 2;
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
missing();
|
missing();
|
||||||
ok_single();
|
ok_single();
|
||||||
@ -65,4 +71,5 @@ fn main() {
|
|||||||
ok_nomsg();
|
ok_nomsg();
|
||||||
ok_escaped();
|
ok_escaped();
|
||||||
unimplemented();
|
unimplemented();
|
||||||
|
unreachable();
|
||||||
}
|
}
|
||||||
|
@ -32,5 +32,13 @@ LL | unimplemented!();
|
|||||||
|
|
|
|
||||||
= note: `-D clippy::unimplemented` implied by `-D warnings`
|
= note: `-D clippy::unimplemented` implied by `-D warnings`
|
||||||
|
|
||||||
error: aborting due to 5 previous errors
|
error: `unreachable` should not be present in production code
|
||||||
|
--> $DIR/panic_unimplemented.rs:61:5
|
||||||
|
|
|
||||||
|
LL | unreachable!();
|
||||||
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: `-D clippy::unreachable` implied by `-D warnings`
|
||||||
|
|
||||||
|
error: aborting due to 6 previous errors
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user