mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 00:03:43 +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"
|
||||
}
|
||||
|
||||
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! {
|
||||
/// **What it does:** Checks for usage of `unimplemented!`.
|
||||
///
|
||||
@ -41,7 +57,23 @@ declare_clippy_lint! {
|
||||
"`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 {
|
||||
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);
|
||||
span_lint(cx, UNIMPLEMENTED, span,
|
||||
"`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);
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
#![warn(clippy::panic_params, clippy::unimplemented)]
|
||||
#![warn(clippy::panic_params, clippy::unimplemented, clippy::unreachable)]
|
||||
#![allow(clippy::assertions_on_constants)]
|
||||
fn missing() {
|
||||
if true {
|
||||
@ -56,6 +56,12 @@ fn unimplemented() {
|
||||
let b = a + 2;
|
||||
}
|
||||
|
||||
fn unreachable() {
|
||||
let a = 2;
|
||||
unreachable!();
|
||||
let b = a + 2;
|
||||
}
|
||||
|
||||
fn main() {
|
||||
missing();
|
||||
ok_single();
|
||||
@ -65,4 +71,5 @@ fn main() {
|
||||
ok_nomsg();
|
||||
ok_escaped();
|
||||
unimplemented();
|
||||
unreachable();
|
||||
}
|
||||
|
@ -32,5 +32,13 @@ LL | unimplemented!();
|
||||
|
|
||||
= 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