about summary refs log tree commit diff
diff options
context:
space:
mode:
authorrail <12975677+rail-rain@users.noreply.github.com>2020-04-27 17:51:01 +1200
committerrail <12975677+rail-rain@users.noreply.github.com>2020-04-27 17:51:01 +1200
commit37261a904ce2fbd4137180500c57f75f29945828 (patch)
tree6bf803976ebb3af94d775efbcb6463dd3a0ba9cd
parentad9ad6f402e3e15706519e59ef111a941d28d5af (diff)
downloadrust-37261a904ce2fbd4137180500c57f75f29945828.tar.gz
rust-37261a904ce2fbd4137180500c57f75f29945828.zip
Print 0 when `end` and `offset` is 0, and also simplify the suggestion
-rw-r--r--clippy_lints/src/loops.rs15
-rw-r--r--tests/ui/manual_memcpy.stderr4
2 files changed, 14 insertions, 5 deletions
diff --git a/clippy_lints/src/loops.rs b/clippy_lints/src/loops.rs
index f16b98883b8..6b5a8498dc9 100644
--- a/clippy_lints/src/loops.rs
+++ b/clippy_lints/src/loops.rs
@@ -959,7 +959,7 @@ fn detect_manual_memcpy<'a, 'tcx>(
         if let PatKind::Binding(_, canonical_id, _, _) = pat.kind {
             let print_sum = |arg1: &Offset, arg2: &Offset| -> String {
                 match (&arg1.value[..], arg1.negate, &arg2.value[..], arg2.negate) {
-                    ("0", _, "0", _) => "".into(),
+                    ("0", _, "0", _) => "0".into(),
                     ("0", _, x, false) | (x, false, "0", _) => x.into(),
                     ("0", _, x, true) => format!("-{}", x),
                     (x, false, y, false) => format!("({} + {})", x, y),
@@ -981,6 +981,15 @@ fn detect_manual_memcpy<'a, 'tcx>(
                 }
             };
 
+            let print_offset = |start_str: &Offset, inline_offset: &Offset| -> String {
+                let offset = print_sum(start_str, inline_offset);
+                if offset.as_str() == "0" {
+                    "".into()
+                } else {
+                    offset
+                }
+            };
+
             let print_limit = |end: &Option<&Expr<'_>>, offset: Offset, var_name: &str| {
                 if let Some(end) = *end {
                     if_chain! {
@@ -1020,9 +1029,9 @@ fn detect_manual_memcpy<'a, 'tcx>(
                 .into_iter()
                 .map(|(dst_var, src_var)| {
                     let start_str = Offset::positive(snippet(cx, start.span, "").to_string());
-                    let dst_offset = print_sum(&start_str, &dst_var.offset);
+                    let dst_offset = print_offset(&start_str, &dst_var.offset);
                     let dst_limit = print_limit(end, dst_var.offset, &dst_var.var_name);
-                    let src_offset = print_sum(&start_str, &src_var.offset);
+                    let src_offset = print_offset(&start_str, &src_var.offset);
                     let src_limit = print_limit(end, src_var.offset, &src_var.var_name);
                     let dst = if dst_offset == "" && dst_limit == "" {
                         dst_var.var_name
diff --git a/tests/ui/manual_memcpy.stderr b/tests/ui/manual_memcpy.stderr
index 3dbb2155d4d..ec80f6070d6 100644
--- a/tests/ui/manual_memcpy.stderr
+++ b/tests/ui/manual_memcpy.stderr
@@ -58,13 +58,13 @@ error: it looks like you're manually copying between slices
   --> $DIR/manual_memcpy.rs:94:14
    |
 LL |     for i in from..from + src.len() {
-   |              ^^^^^^^^^^^^^^^^^^^^^^ help: try replacing the loop by: `dst[from..from + src.len()].clone_from_slice(&src[0..(from + src.len() - from)])`
+   |              ^^^^^^^^^^^^^^^^^^^^^^ help: try replacing the loop by: `dst[from..from + src.len()].clone_from_slice(&src[..(from + src.len() - from)])`
 
 error: it looks like you're manually copying between slices
   --> $DIR/manual_memcpy.rs:98:14
    |
 LL |     for i in from..from + 3 {
-   |              ^^^^^^^^^^^^^^ help: try replacing the loop by: `dst[from..from + 3].clone_from_slice(&src[0..(from + 3 - from)])`
+   |              ^^^^^^^^^^^^^^ help: try replacing the loop by: `dst[from..from + 3].clone_from_slice(&src[..(from + 3 - from)])`
 
 error: it looks like you're manually copying between slices
   --> $DIR/manual_memcpy.rs:105:14