Fix single_char_pattern lint for escaped chars

This commit is contained in:
flip1995 2018-08-03 10:19:29 +02:00
parent f43d0e53b2
commit 55672e7e49
No known key found for this signature in database
GPG Key ID: ECF9412261FAA470
3 changed files with 9 additions and 5 deletions

View File

@ -1888,11 +1888,8 @@ fn lint_chars_last_cmp_with_unwrap<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, info: &
fn lint_single_char_pattern<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, _expr: &'tcx hir::Expr, arg: &'tcx hir::Expr) { fn lint_single_char_pattern<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, _expr: &'tcx hir::Expr, arg: &'tcx hir::Expr) {
if let Some((Constant::Str(r), _)) = constant(cx, cx.tables, arg) { if let Some((Constant::Str(r), _)) = constant(cx, cx.tables, arg) {
if r.len() == 1 { if r.len() == 1 {
let c = r.chars().next().unwrap();
let snip = snippet(cx, arg.span, ".."); let snip = snippet(cx, arg.span, "..");
let hint = snip.replace( let hint = format!("'{}'", &snip[1..snip.len() - 1]);
&format!("\"{}\"", c.escape_default()),
&format!("'{}'", c.escape_default()));
span_lint_and_sugg( span_lint_and_sugg(
cx, cx,
SINGLE_CHAR_PATTERN, SINGLE_CHAR_PATTERN,

View File

@ -42,4 +42,5 @@ fn main() {
h.contains("X"); // should not warn h.contains("X"); // should not warn
x.replace(";", ",").split(","); // issue #2978 x.replace(";", ",").split(","); // issue #2978
x.starts_with("\x03"); // issue #2996
} }

View File

@ -114,5 +114,11 @@ error: single-character string constant used as pattern
44 | x.replace(";", ",").split(","); // issue #2978 44 | x.replace(";", ",").split(","); // issue #2978
| ^^^ help: try using a char instead: `','` | ^^^ help: try using a char instead: `','`
error: aborting due to 19 previous errors error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:45:19
|
45 | x.starts_with("/x03"); // issue #2996
| ^^^^^^ help: try using a char instead: `'/x03'`
error: aborting due to 20 previous errors