about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2019-04-08 14:01:20 +0000
committerbors <bors@rust-lang.org>2019-04-08 14:01:20 +0000
commit949f58440b19e470a8ed370166f9d72cd09bd7e3 (patch)
treec29fe6e7682f9b6104148028df52d305c31da568
parent4fdd113bedb41a74482e050df5884b1a913707f3 (diff)
parent560fd163d636420a36dac5eb582340a3cc338892 (diff)
downloadrust-949f58440b19e470a8ed370166f9d72cd09bd7e3.tar.gz
rust-949f58440b19e470a8ed370166f9d72cd09bd7e3.zip
Auto merge of #3929 - KarboniteKream:single-char-pattern, r=oli-obk
Escape a single quote in single_char_pattern hint

This PR correctly escapes single quotes in the hint for `single_char_pattern`.
For instance, the hint for `x.split("'")` was `'''`, while it should be `'\''`.
-rw-r--r--clippy_lints/src/methods/mod.rs3
-rw-r--r--tests/ui/single_char_pattern.fixed2
-rw-r--r--tests/ui/single_char_pattern.rs2
-rw-r--r--tests/ui/single_char_pattern.stderr18
4 files changed, 21 insertions, 4 deletions
diff --git a/clippy_lints/src/methods/mod.rs b/clippy_lints/src/methods/mod.rs
index 7316a0a74f0..bccabe1a61d 100644
--- a/clippy_lints/src/methods/mod.rs
+++ b/clippy_lints/src/methods/mod.rs
@@ -2143,7 +2143,8 @@ fn lint_single_char_pattern<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, _expr: &'tcx h
         then {
             let mut applicability = Applicability::MachineApplicable;
             let snip = snippet_with_applicability(cx, arg.span, "..", &mut applicability);
-            let hint = format!("'{}'", &snip[1..snip.len() - 1]);
+            let c = &snip[1..snip.len() - 1];
+            let hint = format!("'{}'", if c == "'" { "\\'" } else { c });
             span_lint_and_sugg(
                 cx,
                 SINGLE_CHAR_PATTERN,
diff --git a/tests/ui/single_char_pattern.fixed b/tests/ui/single_char_pattern.fixed
index 2dd21790389..d5b6d81d0a5 100644
--- a/tests/ui/single_char_pattern.fixed
+++ b/tests/ui/single_char_pattern.fixed
@@ -41,6 +41,8 @@ fn main() {
     x.trim_end_matches('x');
     // Make sure we escape characters correctly.
     x.split('\n');
+    x.split('\'');
+    x.split('\'');
 
     let h = HashSet::<String>::new();
     h.contains("X"); // should not warn
diff --git a/tests/ui/single_char_pattern.rs b/tests/ui/single_char_pattern.rs
index dc2f9fe4959..73f364854d0 100644
--- a/tests/ui/single_char_pattern.rs
+++ b/tests/ui/single_char_pattern.rs
@@ -41,6 +41,8 @@ fn main() {
     x.trim_end_matches("x");
     // Make sure we escape characters correctly.
     x.split("\n");
+    x.split("'");
+    x.split("\'");
 
     let h = HashSet::<String>::new();
     h.contains("X"); // should not warn
diff --git a/tests/ui/single_char_pattern.stderr b/tests/ui/single_char_pattern.stderr
index 0fcb203dbc1..d394c989c44 100644
--- a/tests/ui/single_char_pattern.stderr
+++ b/tests/ui/single_char_pattern.stderr
@@ -109,16 +109,28 @@ LL |     x.split("/n");
    |             ^^^^ help: try using a char instead: `'/n'`
 
 error: single-character string constant used as pattern
-  --> $DIR/single_char_pattern.rs:48:31
+  --> $DIR/single_char_pattern.rs:44:13
+   |
+LL |     x.split("'");
+   |             ^^^ help: try using a char instead: `'/''`
+
+error: single-character string constant used as pattern
+  --> $DIR/single_char_pattern.rs:45:13
+   |
+LL |     x.split("/'");
+   |             ^^^^ help: try using a char instead: `'/''`
+
+error: single-character string constant used as pattern
+  --> $DIR/single_char_pattern.rs:50:31
    |
 LL |     x.replace(";", ",").split(","); // issue #2978
    |                               ^^^ help: try using a char instead: `','`
 
 error: single-character string constant used as pattern
-  --> $DIR/single_char_pattern.rs:49:19
+  --> $DIR/single_char_pattern.rs:51:19
    |
 LL |     x.starts_with("/x03"); // issue #2996
    |                   ^^^^^^ help: try using a char instead: `'/x03'`
 
-error: aborting due to 20 previous errors
+error: aborting due to 22 previous errors