1- use crate :: utils:: { is_direct_expn_of , is_expn_of, match_panic_call, span_lint} ;
1+ use crate :: utils:: { is_expn_of, match_panic_call, span_lint} ;
22use if_chain:: if_chain;
3- use rustc_ast:: ast:: LitKind ;
4- use rustc_hir:: { Expr , ExprKind } ;
3+ use rustc_hir:: Expr ;
54use rustc_lint:: { LateContext , LateLintPass } ;
65use rustc_session:: { declare_lint_pass, declare_tool_lint} ;
76use rustc_span:: Span ;
87
9- declare_clippy_lint ! {
10- /// **What it does:** Checks for missing parameters in `panic!`.
11- ///
12- /// **Why is this bad?** Contrary to the `format!` family of macros, there are
13- /// two forms of `panic!`: if there are no parameters given, the first argument
14- /// is not a format string and used literally. So while `format!("{}")` will
15- /// fail to compile, `panic!("{}")` will not.
16- ///
17- /// **Known problems:** None.
18- ///
19- /// **Example:**
20- /// ```no_run
21- /// panic!("This `panic!` is probably missing a parameter there: {}");
22- /// ```
23- pub PANIC_PARAMS ,
24- style,
25- "missing parameters in `panic!` calls"
26- }
27-
288declare_clippy_lint ! {
299 /// **What it does:** Checks for usage of `panic!`.
3010 ///
@@ -89,11 +69,11 @@ declare_clippy_lint! {
8969 "`unreachable!` should not be present in production code"
9070}
9171
92- declare_lint_pass ! ( PanicUnimplemented => [ PANIC_PARAMS , UNIMPLEMENTED , UNREACHABLE , TODO , PANIC ] ) ;
72+ declare_lint_pass ! ( PanicUnimplemented => [ UNIMPLEMENTED , UNREACHABLE , TODO , PANIC ] ) ;
9373
9474impl < ' tcx > LateLintPass < ' tcx > for PanicUnimplemented {
9575 fn check_expr ( & mut self , cx : & LateContext < ' tcx > , expr : & ' tcx Expr < ' _ > ) {
96- if let Some ( params ) = match_panic_call ( cx, expr) {
76+ if let Some ( _ ) = match_panic_call ( cx, expr) {
9777 let span = get_outer_span ( expr) ;
9878 if is_expn_of ( expr. span , "unimplemented" ) . is_some ( ) {
9979 span_lint (
@@ -113,7 +93,6 @@ impl<'tcx> LateLintPass<'tcx> for PanicUnimplemented {
11393 ) ;
11494 } else if is_expn_of ( expr. span , "panic" ) . is_some ( ) {
11595 span_lint ( cx, PANIC , span, "`panic` should not be present in production code" ) ;
116- match_panic ( params, expr, cx) ;
11796 }
11897 }
11998 }
@@ -132,20 +111,3 @@ fn get_outer_span(expr: &Expr<'_>) -> Span {
132111 }
133112 }
134113}
135-
136- fn match_panic ( params : & [ Expr < ' _ > ] , expr : & Expr < ' _ > , cx : & LateContext < ' _ > ) {
137- if_chain ! {
138- if let ExprKind :: Lit ( ref lit) = params[ 0 ] . kind;
139- if is_direct_expn_of( expr. span, "panic" ) . is_some( ) ;
140- if let LitKind :: Str ( ref string, _) = lit. node;
141- let string = string. as_str( ) . replace( "{{" , "" ) . replace( "}}" , "" ) ;
142- if let Some ( par) = string. find( '{' ) ;
143- if string[ par..] . contains( '}' ) ;
144- if params[ 0 ] . span. source_callee( ) . is_none( ) ;
145- if params[ 0 ] . span. lo( ) != params[ 0 ] . span. hi( ) ;
146- then {
147- span_lint( cx, PANIC_PARAMS , params[ 0 ] . span,
148- "you probably are missing some parameter in your format string" ) ;
149- }
150- }
151- }
0 commit comments