]> git.lizzy.rs Git - rust.git/commitdiff
Simplify manual_memcpy suggestion in some cases
authorOwen Sanchez <pengowen816@gmail.com>
Tue, 16 Oct 2018 04:12:59 +0000 (21:12 -0700)
committerOwen Sanchez <pengowen816@gmail.com>
Tue, 16 Oct 2018 19:38:23 +0000 (12:38 -0700)
clippy_lints/src/loops.rs
tests/ui/for_loop.rs
tests/ui/for_loop.stderr
tests/ui/for_loop.stdout [new file with mode: 0644]

index 3c4f06077d98039a4804454ca177e6e6dd6052eb..4c505ababf14526a84ec535d39e11ad5e98f1446 100644 (file)
@@ -950,8 +950,20 @@ fn detect_manual_memcpy<'a, 'tcx>(
                     ("0", _, x, false) | (x, false, "0", false) => x.into(),
                     ("0", _, x, true) | (x, false, "0", true) => format!("-{}", x),
                     (x, false, y, false) => format!("({} + {})", x, y),
-                    (x, false, y, true) => format!("({} - {})", x, y),
-                    (x, true, y, false) => format!("({} - {})", y, x),
+                    (x, false, y, true) => {
+                        if x == y {
+                            "0".into()
+                        } else {
+                            format!("({} - {})", x, y)
+                        }
+                    },
+                    (x, true, y, false) => {
+                        if x == y {
+                            "0".into()
+                        } else {
+                            format!("({} - {})", y, x)
+                        }
+                    },
                     (x, true, y, true) => format!("-({} + {})", x, y),
                 }
             };
index 89c452f44df010d0b3d6ddf6f879cba098e22c57..f80270d9fe8f71514a37fa4afe7cd91505460932 100644 (file)
@@ -550,6 +550,19 @@ fn index(&self, _: usize) -> &i32 {
     for i in 0..10 {
         dst_vec[i] = src[i];
     }
+
+    // Simplify suggestion (issue #3004)
+    let src = [0, 1, 2, 3, 4];
+    let mut dst = [0, 0, 0, 0, 0, 0];
+    let from = 1;
+
+    for i in from..from + src.len() {
+        dst[i] = src[i - from];
+    }
+
+    for i in from..from + 3 {
+        dst[i] = src[i - from];
+    }
 }
 
 #[warn(clippy::needless_range_loop)]
index 472fa148609695468031d6592e0da063efb7d4c9..331763357832610dad9e6ba4706c4aa4560de589 100644 (file)
@@ -482,22 +482,34 @@ error: it looks like you're manually copying between slices
     |              ^^^^^^^^^^^^^^^^ help: try replacing the loop by: `dst_vec[..src_vec.len()].clone_from_slice(&src_vec[..])`
 
 error: it looks like you're manually copying between slices
-   --> $DIR/for_loop.rs:557:14
+   --> $DIR/for_loop.rs:559:14
     |
-557 |     for i in 0..src.len() {
+559 |     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)])`
+
+error: it looks like you're manually copying between slices
+   --> $DIR/for_loop.rs:563:14
+    |
+563 |     for i in from..from + 3 {
+    |              ^^^^^^^^^^^^^^ help: try replacing the loop by: `dst[from..from + 3].clone_from_slice(&src[0..(from + 3 - from)])`
+
+error: it looks like you're manually copying between slices
+   --> $DIR/for_loop.rs:570:14
+    |
+570 |     for i in 0..src.len() {
     |              ^^^^^^^^^^^^ help: try replacing the loop by: `dst[..src.len()].clone_from_slice(&src[..])`
 
 error: the variable `count` is used as a loop counter. Consider using `for (count, item) in text.chars().enumerate()` or similar iterators
-   --> $DIR/for_loop.rs:618:19
+   --> $DIR/for_loop.rs:631:19
     |
-618 |         for ch in text.chars() {
+631 |         for ch in text.chars() {
     |                   ^^^^^^^^^^^^
 
 error: the variable `count` is used as a loop counter. Consider using `for (count, item) in text.chars().enumerate()` or similar iterators
-   --> $DIR/for_loop.rs:629:19
+   --> $DIR/for_loop.rs:642:19
     |
-629 |         for ch in text.chars() {
+642 |         for ch in text.chars() {
     |                   ^^^^^^^^^^^^
 
-error: aborting due to 61 previous errors
+error: aborting due to 63 previous errors
 
diff --git a/tests/ui/for_loop.stdout b/tests/ui/for_loop.stdout
new file mode 100644 (file)
index 0000000..e69de29