about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2020-09-14 15:31:04 +0200
committerEduardo Broto <ebroto@tutanota.com>2020-10-30 23:29:38 +0100
commitc6412aeebc432ab49d46fe1f45a0fb5322c805d1 (patch)
tree73159274516f83f3dd26c304df62fee544652a3b
parent2350ee75b2cc9c3d8cfbbb8d950012678913b92d (diff)
downloadrust-c6412aeebc432ab49d46fe1f45a0fb5322c805d1.tar.gz
rust-c6412aeebc432ab49d46fe1f45a0fb5322c805d1.zip
handle macros returning Strings in single_char_push_str and single_char_insert_str
-rw-r--r--clippy_lints/src/methods/mod.rs6
-rw-r--r--tests/ui/single_char_insert_str.fixed8
-rw-r--r--tests/ui/single_char_insert_str.rs8
-rw-r--r--tests/ui/single_char_insert_str.stderr20
-rw-r--r--tests/ui/single_char_push_str.fixed8
-rw-r--r--tests/ui/single_char_push_str.rs8
-rw-r--r--tests/ui/single_char_push_str.stderr10
7 files changed, 54 insertions, 14 deletions
diff --git a/clippy_lints/src/methods/mod.rs b/clippy_lints/src/methods/mod.rs
index 86e7c57afae..68a152270e0 100644
--- a/clippy_lints/src/methods/mod.rs
+++ b/clippy_lints/src/methods/mod.rs
@@ -3243,7 +3243,8 @@ fn lint_single_char_pattern(cx: &LateContext<'_>, _expr: &hir::Expr<'_>, arg: &h
 fn lint_single_char_push_string(cx: &LateContext<'_>, expr: &hir::Expr<'_>, args: &[hir::Expr<'_>]) {
     let mut applicability = Applicability::MachineApplicable;
     if let Some(extension_string) = get_hint_if_single_char_arg(cx, &args[1], &mut applicability) {
-        let base_string_snippet = snippet_with_applicability(cx, args[0].span, "..", &mut applicability);
+        let base_string_snippet =
+            snippet_with_applicability(cx, args[0].span.source_callsite(), "..", &mut applicability);
         let sugg = format!("{}.push({})", base_string_snippet, extension_string);
         span_lint_and_sugg(
             cx,
@@ -3261,7 +3262,8 @@ fn lint_single_char_push_string(cx: &LateContext<'_>, expr: &hir::Expr<'_>, args
 fn lint_single_char_insert_string(cx: &LateContext<'_>, expr: &hir::Expr<'_>, args: &[hir::Expr<'_>]) {
     let mut applicability = Applicability::MachineApplicable;
     if let Some(extension_string) = get_hint_if_single_char_arg(cx, &args[2], &mut applicability) {
-        let base_string_snippet = snippet_with_applicability(cx, args[0].span, "_", &mut applicability);
+        let base_string_snippet =
+            snippet_with_applicability(cx, args[0].span.source_callsite(), "_", &mut applicability);
         let pos_arg = snippet(cx, args[1].span, "..");
         let sugg = format!("{}.insert({}, {})", base_string_snippet, pos_arg, extension_string);
         span_lint_and_sugg(
diff --git a/tests/ui/single_char_insert_str.fixed b/tests/ui/single_char_insert_str.fixed
index c3416720ec3..fd43f913330 100644
--- a/tests/ui/single_char_insert_str.fixed
+++ b/tests/ui/single_char_insert_str.fixed
@@ -1,6 +1,12 @@
 // run-rustfix
 #![warn(clippy::single_char_push_str)]
 
+macro_rules! get_string {
+    () => {
+        String::from("Hello world!")
+    };
+}
+
 fn main() {
     let mut string = String::new();
     string.insert(0, 'R');
@@ -15,4 +21,6 @@ fn main() {
     string.insert(x, 'a');
     const Y: usize = 1;
     string.insert(Y, 'a');
+
+    get_string!().insert(1, '?');
 }
diff --git a/tests/ui/single_char_insert_str.rs b/tests/ui/single_char_insert_str.rs
index 2295669e81d..4278f7ef9fd 100644
--- a/tests/ui/single_char_insert_str.rs
+++ b/tests/ui/single_char_insert_str.rs
@@ -1,6 +1,12 @@
 // run-rustfix
 #![warn(clippy::single_char_push_str)]
 
+macro_rules! get_string {
+    () => {
+        String::from("Hello world!")
+    };
+}
+
 fn main() {
     let mut string = String::new();
     string.insert_str(0, "R");
@@ -15,4 +21,6 @@ fn main() {
     string.insert_str(x, r##"a"##);
     const Y: usize = 1;
     string.insert_str(Y, r##"a"##);
+
+    get_string!().insert_str(1, "?");
 }
diff --git a/tests/ui/single_char_insert_str.stderr b/tests/ui/single_char_insert_str.stderr
index 65dc8a69d69..3d00c91a2ac 100644
--- a/tests/ui/single_char_insert_str.stderr
+++ b/tests/ui/single_char_insert_str.stderr
@@ -1,5 +1,5 @@
 error: calling `insert_str()` using a single-character string literal
-  --> $DIR/single_char_insert_str.rs:6:5
+  --> $DIR/single_char_insert_str.rs:12:5
    |
 LL |     string.insert_str(0, "R");
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `insert` with a character literal: `string.insert(0, 'R')`
@@ -7,34 +7,40 @@ LL |     string.insert_str(0, "R");
    = note: `-D clippy::single-char-push-str` implied by `-D warnings`
 
 error: calling `insert_str()` using a single-character string literal
-  --> $DIR/single_char_insert_str.rs:7:5
+  --> $DIR/single_char_insert_str.rs:13:5
    |
 LL |     string.insert_str(1, "'");
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `insert` with a character literal: `string.insert(1, '/'')`
 
 error: calling `insert_str()` using a single-character string literal
-  --> $DIR/single_char_insert_str.rs:12:5
+  --> $DIR/single_char_insert_str.rs:18:5
    |
 LL |     string.insert_str(0, "/x52");
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `insert` with a character literal: `string.insert(0, '/x52')`
 
 error: calling `insert_str()` using a single-character string literal
-  --> $DIR/single_char_insert_str.rs:13:5
+  --> $DIR/single_char_insert_str.rs:19:5
    |
 LL |     string.insert_str(0, "/u{0052}");
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `insert` with a character literal: `string.insert(0, '/u{0052}')`
 
 error: calling `insert_str()` using a single-character string literal
-  --> $DIR/single_char_insert_str.rs:15:5
+  --> $DIR/single_char_insert_str.rs:21:5
    |
 LL |     string.insert_str(x, r##"a"##);
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `insert` with a character literal: `string.insert(x, 'a')`
 
 error: calling `insert_str()` using a single-character string literal
-  --> $DIR/single_char_insert_str.rs:17:5
+  --> $DIR/single_char_insert_str.rs:23:5
    |
 LL |     string.insert_str(Y, r##"a"##);
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `insert` with a character literal: `string.insert(Y, 'a')`
 
-error: aborting due to 6 previous errors
+error: calling `insert_str()` using a single-character string literal
+  --> $DIR/single_char_insert_str.rs:25:5
+   |
+LL |     get_string!().insert_str(1, "?");
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `insert` with a character literal: `get_string!().insert(1, '?')`
+
+error: aborting due to 7 previous errors
 
diff --git a/tests/ui/single_char_push_str.fixed b/tests/ui/single_char_push_str.fixed
index 0812c026a64..da742fe70e2 100644
--- a/tests/ui/single_char_push_str.fixed
+++ b/tests/ui/single_char_push_str.fixed
@@ -1,6 +1,12 @@
 // run-rustfix
 #![warn(clippy::single_char_push_str)]
 
+macro_rules! get_string {
+    () => {
+        String::from("Hello world!")
+    };
+}
+
 fn main() {
     let mut string = String::new();
     string.push('R');
@@ -12,4 +18,6 @@ fn main() {
     string.push('\x52');
     string.push('\u{0052}');
     string.push('a');
+
+    get_string!().push_str("ö");
 }
diff --git a/tests/ui/single_char_push_str.rs b/tests/ui/single_char_push_str.rs
index ab293bbe4ee..a8203e6503e 100644
--- a/tests/ui/single_char_push_str.rs
+++ b/tests/ui/single_char_push_str.rs
@@ -1,6 +1,12 @@
 // run-rustfix
 #![warn(clippy::single_char_push_str)]
 
+macro_rules! get_string {
+    () => {
+        String::from("Hello world!")
+    };
+}
+
 fn main() {
     let mut string = String::new();
     string.push_str("R");
@@ -12,4 +18,6 @@ fn main() {
     string.push_str("\x52");
     string.push_str("\u{0052}");
     string.push_str(r##"a"##);
+
+    get_string!().push_str("ö");
 }
diff --git a/tests/ui/single_char_push_str.stderr b/tests/ui/single_char_push_str.stderr
index 0e9bdaa23e7..1f535589121 100644
--- a/tests/ui/single_char_push_str.stderr
+++ b/tests/ui/single_char_push_str.stderr
@@ -1,5 +1,5 @@
 error: calling `push_str()` using a single-character string literal
-  --> $DIR/single_char_push_str.rs:6:5
+  --> $DIR/single_char_push_str.rs:12:5
    |
 LL |     string.push_str("R");
    |     ^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `string.push('R')`
@@ -7,25 +7,25 @@ LL |     string.push_str("R");
    = note: `-D clippy::single-char-push-str` implied by `-D warnings`
 
 error: calling `push_str()` using a single-character string literal
-  --> $DIR/single_char_push_str.rs:7:5
+  --> $DIR/single_char_push_str.rs:13:5
    |
 LL |     string.push_str("'");
    |     ^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `string.push('/'')`
 
 error: calling `push_str()` using a single-character string literal
-  --> $DIR/single_char_push_str.rs:12:5
+  --> $DIR/single_char_push_str.rs:18:5
    |
 LL |     string.push_str("/x52");
    |     ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `string.push('/x52')`
 
 error: calling `push_str()` using a single-character string literal
-  --> $DIR/single_char_push_str.rs:13:5
+  --> $DIR/single_char_push_str.rs:19:5
    |
 LL |     string.push_str("/u{0052}");
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `string.push('/u{0052}')`
 
 error: calling `push_str()` using a single-character string literal
-  --> $DIR/single_char_push_str.rs:14:5
+  --> $DIR/single_char_push_str.rs:20:5
    |
 LL |     string.push_str(r##"a"##);
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `string.push('a')`