blob: 41b0f10a0598b8779bf4b9509419a7a5c5eeef22 [file] [edit]
#![warn(clippy::manual_contains)]
#![expect(clippy::eq_op, clippy::useless_vec)]
fn should_lint() {
let vec: Vec<u8> = vec![1, 2, 3, 4, 5, 6];
let values = &vec[..];
let _ = values.contains(&4);
//~^ manual_contains
let vec: Vec<u32> = vec![1, 2, 3, 4, 5, 6];
let values = &vec[..];
let _ = values.contains(&4);
//~^ manual_contains
let values: [u8; 6] = [3, 14, 15, 92, 6, 5];
let _ = values.contains(&10);
//~^ manual_contains
let num = 14;
let values: [u8; 6] = [3, 14, 15, 92, 6, 5];
let _ = values.contains(&num);
//~^ manual_contains
let num = 14;
let values: [u8; 6] = [3, 14, 15, 92, 6, 5];
let _ = values.contains(&num);
//~^ manual_contains
let values: [u8; 6] = [3, 14, 15, 92, 6, 5];
let _ = values.contains(&4);
//~^ manual_contains
let vec: Vec<u8> = vec![1, 2, 3, 4, 5, 6];
let values = &vec[..];
let _ = values.contains(&4);
//~^ manual_contains
let vec: Vec<u8> = vec![1, 2, 3, 4, 5, 6];
let values = &vec[..];
let a = &4;
let _ = values.contains(a);
//~^ manual_contains
let vec = vec!["1", "2", "3", "4", "5", "6"];
let values = &vec[..];
let _ = values.contains(&"4");
//~^ manual_contains
let vec: Vec<u32> = vec![1, 2, 3, 4, 5, 6];
let values = &vec[..];
let _ = values.contains(&(4 + 1));
//~^ manual_contains
// Eager bitwise expressions still lint when they do not mention the element.
let mask = 0x0f_u8;
let other = 0x03_u8;
let values: [u8; 6] = [3, 14, 15, 92, 6, 5];
let _ = values.contains(&(mask & other));
//~^ manual_contains
let _ = values.contains(&(mask | other));
//~^ manual_contains
}
fn should_not_lint() {
let values: [u8; 6] = [3, 14, 15, 92, 6, 5];
let _ = values.iter().any(|&v| v > 10);
let vec: Vec<u32> = vec![1, 2, 3, 4, 5, 6];
let values = &vec[..];
let _ = values.iter().any(|&v| v.is_multiple_of(2));
let _ = values.iter().any(|&v| v * 2 == 6);
let _ = values.iter().any(|&v| v == v);
let _ = values.iter().any(|&v| 4 == 4);
let _ = values.contains(&4);
let a = 1;
let b = 2;
let _ = values.iter().any(|&v| a == b);
let _ = values.iter().any(|&v| a == 4);
let vec: Vec<String> = vec!["1", "2", "3", "4", "5", "6"]
.iter()
.map(|&x| x.to_string())
.collect();
let values = &vec[..];
let _ = values.iter().any(|v| v == "4");
let vec: Vec<u32> = vec![1, 2, 3, 4, 5, 6];
let values = &vec[..];
let mut counter = 0;
let mut count = || {
counter += 1;
counter
};
let _ = values.iter().any(|&v| v == count());
let _ = values.iter().any(|&v| v == v * 2);
// Don't fire when both sides use the slice element. #17563
let mask = 0x0f_u8;
let values: &[u8] = &[1, 2, 3];
let _ = values.iter().any(|&i| i & mask == i);
let _ = values.iter().any(|&i| i == i & mask);
let _ = values.iter().any(|&i| i == !i);
let _ = values.iter().any(|i| *i == *i & mask);
}
fn foo(values: &[u8]) -> bool {
values.contains(&10)
//~^ manual_contains
}
fn bar(values: [u8; 3]) -> bool {
values.contains(&10)
//~^ manual_contains
}