diff --git a/src/panic.rs b/src/panic.rs index 60a3ce1a461e..7dbcf2a5b30f 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 36427f4330b8..38fe5aa2c0f3 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(); }