From 0774b203f4a9a46d91ea4edfab89e7552382c2c6 Mon Sep 17 00:00:00 2001 From: mcarton Date: Sat, 12 Mar 2016 21:23:01 +0100 Subject: [PATCH] Fix false-positive in `panic_params` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It might still have false positives, but it’s even less likely. --- src/panic.rs | 3 ++- tests/compile-fail/panic.rs | 20 +++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/panic.rs b/src/panic.rs index 60a3ce1a4..7dbcf2a5b 100644 --- a/src/panic.rs +++ b/src/panic.rs @@ -37,7 +37,8 @@ impl LateLintPass for PanicPass { match_path(path, &BEGIN_UNWIND), let ExprLit(ref lit) = params[0].node, let LitKind::Str(ref string, _) = lit.node, - string.contains('{'), + let Some(par) = string.find('{'), + string[par..].contains('}'), let Some(sp) = cx.sess().codemap() .with_expn_info(expr.span.expn_id, |info| info.map(|i| i.call_site)) diff --git a/tests/compile-fail/panic.rs b/tests/compile-fail/panic.rs index 36427f433..38fe5aa2c 100644 --- a/tests/compile-fail/panic.rs +++ b/tests/compile-fail/panic.rs @@ -4,10 +4,14 @@ #[deny(panic_params)] fn missing() { - panic!("{}"); //~ERROR: You probably are missing some parameter + if true { + panic!("{}"); //~ERROR: You probably are missing some parameter + } else { + panic!("{:?}"); //~ERROR: You probably are missing some parameter + } } -fn ok_sigle() { +fn ok_single() { panic!("foo bar"); } @@ -15,8 +19,18 @@ fn ok_multiple() { panic!("{}", "This is {ok}"); } +fn ok_bracket() { + // the match is just here because of #759, it serves no other purpose for the lint + match 42 { + 1337 => panic!("{so is this"), + 666 => panic!("so is this}"), + _ => panic!("}so is that{"), + } +} + fn main() { missing(); - ok_sigle(); + ok_single(); ok_multiple(); + ok_bracket(); }