Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
462ee9c
Mark the panic macros as diagnostic items.
m-ou-se Oct 18, 2020
a466790
Add lint to warn about braces in a panic message.
m-ou-se Oct 18, 2020
5b3b80a
Allow #[rustc_diagnostic_item] on macros.
m-ou-se Oct 18, 2020
da66a50
Specialize panic_fmt lint for the {core,std}::panic!() macros.
m-ou-se Oct 18, 2020
f228efc
Make panic_fmt lint work properly for assert!(expr, msg) too.
m-ou-se Oct 18, 2020
3beb2e9
Expand assert!(expr) to panic() function instead of panic!() macro.
m-ou-se Oct 18, 2020
451c986
Add test for the panic_fmt lint.
m-ou-se Oct 18, 2020
ded269f
Improve panic_fmt message for panic!("{}") with a fmt placeholder.
m-ou-se Oct 18, 2020
b8a8b68
Formatting.
m-ou-se Oct 18, 2020
14dcf0a
Test for formating placeholders in panic_fmt lint test.
m-ou-se Oct 18, 2020
dd262e3
Add cfg(not(bootstrap)) on the new rustc_diagnostic_item attributes.
m-ou-se Oct 18, 2020
9615d27
Don't see `{{}}` as placeholder in panic_fmt lint.
m-ou-se Oct 18, 2020
9a840a3
Fix brace problem in panic message in rustc_expand.
m-ou-se Oct 18, 2020
0a9330c
Ignore panic_fmt lint in macro-comma-behavior-rpass ui test.
m-ou-se Oct 18, 2020
d3b4149
Also apply panic_fmt lint suggestions to debug_assert!().
m-ou-se Oct 18, 2020
f1fcc4d
Ignore panic_fmt lint in format-args-capture ui test.
m-ou-se Oct 18, 2020
dd81c91
Update mir-opt test output for new assert macro implementation.
m-ou-se Oct 19, 2020
9e3b949
Fix braces in panic message in test.
m-ou-se Oct 19, 2020
ff8df0b
Add cfg(not(test)) to std_panic_macro rustc_diagnostic_item.
m-ou-se Oct 19, 2020
0f193d1
Small cleanups in assert!() and panic_fmt lint.
m-ou-se Oct 19, 2020
6b44662
Parse the format string for the panic_fmt lint for better warnings.
m-ou-se Oct 20, 2020
190c3ad
Improve panic_fmt error messages for invalid format strings too.
m-ou-se Oct 20, 2020
1993f1e
Test that panic_fmt lint doesn't trigger for custom panic macro.
m-ou-se Oct 24, 2020
5cefc3c
Mark panic_fmt suggestion as machine applicable.
m-ou-se Oct 28, 2020
9743f67
Improve panic_fmt lint messages.
m-ou-se Oct 29, 2020
a922c6b
Add test for panic_fmt lint with external panic!()-calling macro.
m-ou-se Oct 29, 2020
454eaec
Remove the clippy::panic-params lint.
m-ou-se Nov 19, 2020
a125ef2
Clippy: Match on assert!() expansions without an inner block.
m-ou-se Nov 19, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Remove the clippy::panic-params lint.
Rustc itself now warns for all cases that triggered this lint.
  • Loading branch information
m-ou-se committed Nov 19, 2020
commit 454eaec1dc0875614a59ce6b074e91eccb5ab96a
3 changes: 0 additions & 3 deletions src/tools/clippy/clippy_lints/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -788,7 +788,6 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
&overflow_check_conditional::OVERFLOW_CHECK_CONDITIONAL,
&panic_in_result_fn::PANIC_IN_RESULT_FN,
&panic_unimplemented::PANIC,
&panic_unimplemented::PANIC_PARAMS,
&panic_unimplemented::TODO,
&panic_unimplemented::UNIMPLEMENTED,
&panic_unimplemented::UNREACHABLE,
Expand Down Expand Up @@ -1499,7 +1498,6 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
LintId::of(&open_options::NONSENSICAL_OPEN_OPTIONS),
LintId::of(&option_env_unwrap::OPTION_ENV_UNWRAP),
LintId::of(&overflow_check_conditional::OVERFLOW_CHECK_CONDITIONAL),
LintId::of(&panic_unimplemented::PANIC_PARAMS),
LintId::of(&partialeq_ne_impl::PARTIALEQ_NE_IMPL),
LintId::of(&precedence::PRECEDENCE),
LintId::of(&ptr::CMP_NULL),
Expand Down Expand Up @@ -1666,7 +1664,6 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
LintId::of(&non_copy_const::DECLARE_INTERIOR_MUTABLE_CONST),
LintId::of(&non_expressive_names::JUST_UNDERSCORES_AND_DIGITS),
LintId::of(&non_expressive_names::MANY_SINGLE_CHAR_NAMES),
LintId::of(&panic_unimplemented::PANIC_PARAMS),
LintId::of(&ptr::CMP_NULL),
LintId::of(&ptr::PTR_ARG),
LintId::of(&ptr_eq::PTR_EQ),
Expand Down
46 changes: 4 additions & 42 deletions src/tools/clippy/clippy_lints/src/panic_unimplemented.rs
Original file line number Diff line number Diff line change
@@ -1,30 +1,10 @@
use crate::utils::{is_direct_expn_of, is_expn_of, match_panic_call, span_lint};
use crate::utils::{is_expn_of, match_panic_call, span_lint};
use if_chain::if_chain;
use rustc_ast::ast::LitKind;
use rustc_hir::{Expr, ExprKind};
use rustc_hir::Expr;
use rustc_lint::{LateContext, LateLintPass};
use rustc_session::{declare_lint_pass, declare_tool_lint};
use rustc_span::Span;

declare_clippy_lint! {
/// **What it does:** Checks for missing parameters in `panic!`.
///
/// **Why is this bad?** Contrary to the `format!` family of macros, there are
/// two forms of `panic!`: if there are no parameters given, the first argument
/// is not a format string and used literally. So while `format!("{}")` will
/// fail to compile, `panic!("{}")` will not.
///
/// **Known problems:** None.
///
/// **Example:**
/// ```no_run
/// panic!("This `panic!` is probably missing a parameter there: {}");
/// ```
pub PANIC_PARAMS,
style,
"missing parameters in `panic!` calls"
}

declare_clippy_lint! {
/// **What it does:** Checks for usage of `panic!`.
///
Expand Down Expand Up @@ -89,11 +69,11 @@ declare_clippy_lint! {
"`unreachable!` should not be present in production code"
}

declare_lint_pass!(PanicUnimplemented => [PANIC_PARAMS, UNIMPLEMENTED, UNREACHABLE, TODO, PANIC]);
declare_lint_pass!(PanicUnimplemented => [UNIMPLEMENTED, UNREACHABLE, TODO, PANIC]);

impl<'tcx> LateLintPass<'tcx> for PanicUnimplemented {
fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
if let Some(params) = match_panic_call(cx, expr) {
if let Some(_) = match_panic_call(cx, expr) {
let span = get_outer_span(expr);
if is_expn_of(expr.span, "unimplemented").is_some() {
span_lint(
Expand All @@ -113,7 +93,6 @@ impl<'tcx> LateLintPass<'tcx> for PanicUnimplemented {
);
} else if is_expn_of(expr.span, "panic").is_some() {
span_lint(cx, PANIC, span, "`panic` should not be present in production code");
match_panic(params, expr, cx);
}
}
}
Expand All @@ -132,20 +111,3 @@ fn get_outer_span(expr: &Expr<'_>) -> Span {
}
}
}

fn match_panic(params: &[Expr<'_>], expr: &Expr<'_>, cx: &LateContext<'_>) {
if_chain! {
if let ExprKind::Lit(ref lit) = params[0].kind;
if is_direct_expn_of(expr.span, "panic").is_some();
if let LitKind::Str(ref string, _) = lit.node;
let string = string.as_str().replace("{{", "").replace("}}", "");
if let Some(par) = string.find('{');
if string[par..].contains('}');
if params[0].span.source_callee().is_none();
if params[0].span.lo() != params[0].span.hi();
then {
span_lint(cx, PANIC_PARAMS, params[0].span,
"you probably are missing some parameter in your format string");
}
}
}
61 changes: 0 additions & 61 deletions src/tools/clippy/tests/ui/panic.rs

This file was deleted.

28 changes: 0 additions & 28 deletions src/tools/clippy/tests/ui/panic.stderr

This file was deleted.