diff options
| author | bors <bors@rust-lang.org> | 2023-03-27 11:41:48 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-03-27 11:41:48 +0000 |
| commit | 70db22648bb1a79d2f6978adf6dc40240de59d89 (patch) | |
| tree | fb461671482457b200d06b3e4eefe874e07be22a /tests | |
| parent | 5698f43f9482809c9a3c8a9356583b83d5acf580 (diff) | |
| parent | df65d21f4c98a19573f1cd89d9ff01ee8812cf43 (diff) | |
| download | rust-70db22648bb1a79d2f6978adf6dc40240de59d89.tar.gz rust-70db22648bb1a79d2f6978adf6dc40240de59d89.zip | |
Auto merge of #10528 - bluthej:clear-with-drain, r=llogiq
Clear with drain changelog: [`clear_with_drain`]: Add new lint Fixes #9339
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/clear_with_drain.fixed | 86 | ||||
| -rw-r--r-- | tests/ui/clear_with_drain.rs | 86 | ||||
| -rw-r--r-- | tests/ui/clear_with_drain.stderr | 40 |
3 files changed, 212 insertions, 0 deletions
diff --git a/tests/ui/clear_with_drain.fixed b/tests/ui/clear_with_drain.fixed new file mode 100644 index 00000000000..9c4dc010ca7 --- /dev/null +++ b/tests/ui/clear_with_drain.fixed @@ -0,0 +1,86 @@ +// run-rustfix +#![allow(unused)] +#![warn(clippy::clear_with_drain)] + +fn range() { + let mut v = vec![1, 2, 3]; + let iter = v.drain(0..v.len()); // Yay + + let mut v = vec![1, 2, 3]; + let n = v.drain(0..v.len()).count(); // Yay + + let mut v = vec![1, 2, 3]; + let iter = v.drain(usize::MIN..v.len()); // Yay + let n = iter.count(); + + let mut v = vec![1, 2, 3]; + v.clear(); // Nay + + let mut v = vec![1, 2, 3]; + v.clear(); // Nay +} + +fn range_from() { + let mut v = vec![1, 2, 3]; + let iter = v.drain(0..); // Yay + + let mut v = vec![1, 2, 3]; + let mut iter = v.drain(0..); // Yay + let next = iter.next(); + + let mut v = vec![1, 2, 3]; + let next = v.drain(usize::MIN..).next(); // Yay + + let mut v = vec![1, 2, 3]; + v.clear(); // Nay + + let mut v = vec![1, 2, 3]; + v.clear(); // Nay +} + +fn range_full() { + let mut v = vec![1, 2, 3]; + let iter = v.drain(..); // Yay + + let mut v = vec![1, 2, 3]; + // Yay + for x in v.drain(..) { + let y = format!("x = {x}"); + } + + let mut v = vec![1, 2, 3]; + v.clear(); // Nay +} + +fn range_to() { + let mut v = vec![1, 2, 3]; + let iter = v.drain(..v.len()); // Yay + + let mut v = vec![1, 2, 3]; + let iter = v.drain(..v.len()); // Yay + for x in iter { + let y = format!("x = {x}"); + } + + let mut v = vec![1, 2, 3]; + v.clear(); // Nay +} + +fn partial_drains() { + let mut v = vec![1, 2, 3]; + v.drain(1..); // Yay + let mut v = vec![1, 2, 3]; + v.drain(1..).max(); // Yay + + let mut v = vec![1, 2, 3]; + v.drain(..v.len() - 1); // Yay + let mut v = vec![1, 2, 3]; + v.drain(..v.len() - 1).min(); // Yay + + let mut v = vec![1, 2, 3]; + v.drain(1..v.len() - 1); // Yay + let mut v = vec![1, 2, 3]; + let w: Vec<i8> = v.drain(1..v.len() - 1).collect(); // Yay +} + +fn main() {} diff --git a/tests/ui/clear_with_drain.rs b/tests/ui/clear_with_drain.rs new file mode 100644 index 00000000000..f00dbab234c --- /dev/null +++ b/tests/ui/clear_with_drain.rs @@ -0,0 +1,86 @@ +// run-rustfix +#![allow(unused)] +#![warn(clippy::clear_with_drain)] + +fn range() { + let mut v = vec![1, 2, 3]; + let iter = v.drain(0..v.len()); // Yay + + let mut v = vec![1, 2, 3]; + let n = v.drain(0..v.len()).count(); // Yay + + let mut v = vec![1, 2, 3]; + let iter = v.drain(usize::MIN..v.len()); // Yay + let n = iter.count(); + + let mut v = vec![1, 2, 3]; + v.drain(0..v.len()); // Nay + + let mut v = vec![1, 2, 3]; + v.drain(usize::MIN..v.len()); // Nay +} + +fn range_from() { + let mut v = vec![1, 2, 3]; + let iter = v.drain(0..); // Yay + + let mut v = vec![1, 2, 3]; + let mut iter = v.drain(0..); // Yay + let next = iter.next(); + + let mut v = vec![1, 2, 3]; + let next = v.drain(usize::MIN..).next(); // Yay + + let mut v = vec![1, 2, 3]; + v.drain(0..); // Nay + + let mut v = vec![1, 2, 3]; + v.drain(usize::MIN..); // Nay +} + +fn range_full() { + let mut v = vec![1, 2, 3]; + let iter = v.drain(..); // Yay + + let mut v = vec![1, 2, 3]; + // Yay + for x in v.drain(..) { + let y = format!("x = {x}"); + } + + let mut v = vec![1, 2, 3]; + v.drain(..); // Nay +} + +fn range_to() { + let mut v = vec![1, 2, 3]; + let iter = v.drain(..v.len()); // Yay + + let mut v = vec![1, 2, 3]; + let iter = v.drain(..v.len()); // Yay + for x in iter { + let y = format!("x = {x}"); + } + + let mut v = vec![1, 2, 3]; + v.drain(..v.len()); // Nay +} + +fn partial_drains() { + let mut v = vec![1, 2, 3]; + v.drain(1..); // Yay + let mut v = vec![1, 2, 3]; + v.drain(1..).max(); // Yay + + let mut v = vec![1, 2, 3]; + v.drain(..v.len() - 1); // Yay + let mut v = vec![1, 2, 3]; + v.drain(..v.len() - 1).min(); // Yay + + let mut v = vec![1, 2, 3]; + v.drain(1..v.len() - 1); // Yay + let mut v = vec![1, 2, 3]; + let w: Vec<i8> = v.drain(1..v.len() - 1).collect(); // Yay +} + +fn main() {} diff --git a/tests/ui/clear_with_drain.stderr b/tests/ui/clear_with_drain.stderr new file mode 100644 index 00000000000..c88aa1a23cb --- /dev/null +++ b/tests/ui/clear_with_drain.stderr @@ -0,0 +1,40 @@ +error: `drain` used to clear a `Vec` + --> $DIR/clear_with_drain.rs:17:7 + | +LL | v.drain(0..v.len()); // Nay + | ^^^^^^^^^^^^^^^^^ help: try: `clear()` + | + = note: `-D clippy::clear-with-drain` implied by `-D warnings` + +error: `drain` used to clear a `Vec` + --> $DIR/clear_with_drain.rs:20:7 + | +LL | v.drain(usize::MIN..v.len()); // Nay + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `clear()` + +error: `drain` used to clear a `Vec` + --> $DIR/clear_with_drain.rs:35:7 + | +LL | v.drain(0..); // Nay + | ^^^^^^^^^^ help: try: `clear()` + +error: `drain` used to clear a `Vec` + --> $DIR/clear_with_drain.rs:38:7 + | +LL | v.drain(usize::MIN..); // Nay + | ^^^^^^^^^^^^^^^^^^^ help: try: `clear()` + +error: `drain` used to clear a `Vec` + --> $DIR/clear_with_drain.rs:52:7 + | +LL | v.drain(..); // Nay + | ^^^^^^^^^ help: try: `clear()` + +error: `drain` used to clear a `Vec` + --> $DIR/clear_with_drain.rs:66:7 + | +LL | v.drain(..v.len()); // Nay + | ^^^^^^^^^^^^^^^^ help: try: `clear()` + +error: aborting due to 6 previous errors + |
