summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/tests/ui/vec.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/clippy/tests/ui/vec.rs')
-rw-r--r--src/tools/clippy/tests/ui/vec.rs82
1 files changed, 71 insertions, 11 deletions
diff --git a/src/tools/clippy/tests/ui/vec.rs b/src/tools/clippy/tests/ui/vec.rs
index dfed3a29a..0404d8cdb 100644
--- a/src/tools/clippy/tests/ui/vec.rs
+++ b/src/tools/clippy/tests/ui/vec.rs
@@ -1,9 +1,12 @@
//@run-rustfix
#![warn(clippy::useless_vec)]
-#![allow(clippy::nonstandard_macro_braces, clippy::uninlined_format_args)]
+#![allow(clippy::nonstandard_macro_braces, clippy::uninlined_format_args, unused)]
-#[derive(Debug)]
-struct NonCopy;
+use std::rc::Rc;
+
+struct StructWithVec {
+ _x: Vec<i32>,
+}
fn on_slice(_: &[u8]) {}
@@ -60,14 +63,6 @@ fn main() {
on_mut_slice(&mut vec![2; line.length]);
on_mut_slice(&mut vec![2; line.length()]);
- for a in vec![1, 2, 3] {
- println!("{:?}", a);
- }
-
- for a in vec![NonCopy, NonCopy] {
- println!("{:?}", a);
- }
-
on_vec(&vec![1; 201]); // Ok, size of `vec` higher than `too_large_for_stack`
on_mut_vec(&mut vec![1; 201]); // Ok, size of `vec` higher than `too_large_for_stack`
@@ -75,4 +70,69 @@ fn main() {
for a in vec![1; 201] {
println!("{:?}", a);
}
+
+ // https://github.com/rust-lang/rust-clippy/issues/2262#issuecomment-783979246
+ let _x: i32 = vec![1, 2, 3].iter().sum();
+
+ // Do lint
+ let mut x = vec![1, 2, 3];
+ x.fill(123);
+ dbg!(x[0]);
+ dbg!(x.len());
+ dbg!(x.iter().sum::<i32>());
+
+ let _x: &[i32] = &vec![1, 2, 3];
+
+ for _ in vec![1, 2, 3] {}
+
+ // Don't lint
+ let x = vec![1, 2, 3];
+ let _v: Vec<i32> = x;
+
+ let x = vec![1, 2, 3];
+ let _s = StructWithVec { _x: x };
+
+ // Explicit type annotation would make the change to [1, 2, 3]
+ // a compile error.
+ let _x: Vec<i32> = vec![1, 2, 3];
+
+ // Calling a Vec method through a mutable reference
+ let mut x = vec![1, 2, 3];
+ let re = &mut x;
+ re.push(4);
+
+ // Comparing arrays whose length is not equal is a compile error
+ let x = vec![1, 2, 3];
+ let y = vec![1, 2, 3, 4];
+ dbg!(x == y);
+
+ // Non-copy types
+ let _x = vec![String::new(); 10];
+ #[allow(clippy::rc_clone_in_vec_init)]
+ let _x = vec![Rc::new(1); 10];
+
+ // Too large
+ let _x = vec![1; 201];
+}
+
+#[clippy::msrv = "1.53"]
+fn above() {
+ for a in vec![1, 2, 3] {
+ let _: usize = a;
+ }
+
+ for a in vec![String::new(), String::new()] {
+ let _: String = a;
+ }
+}
+
+#[clippy::msrv = "1.52"]
+fn below() {
+ for a in vec![1, 2, 3] {
+ let _: usize = a;
+ }
+
+ for a in vec![String::new(), String::new()] {
+ let _: String = a;
+ }
}