| #![warn(clippy::op_ref)] | |
| #![expect(clippy::disallowed_names)] | |
| use std::collections::HashSet; | |
| use std::ops::{BitAnd, Mul}; | |
| fn main() { | |
| let tracked_fds: HashSet<i32> = HashSet::new(); | |
| let new_fds = HashSet::new(); | |
| let unwanted = &tracked_fds - &new_fds; | |
| let foo = &5 - &6; | |
| //~^ op_ref | |
| let bar = String::new(); | |
| let bar = "foo" == &bar; | |
| let a = "a".to_string(); | |
| let b = "a"; | |
| if b < &a { | |
| println!("OK"); | |
| } | |
| struct X(i32); | |
| impl BitAnd for X { | |
| type Output = X; | |
| fn bitand(self, rhs: X) -> X { | |
| X(self.0 & rhs.0) | |
| } | |
| } | |
| impl<'a> BitAnd<&'a X> for X { | |
| type Output = X; | |
| fn bitand(self, rhs: &'a X) -> X { | |
| X(self.0 & rhs.0) | |
| } | |
| } | |
| let x = X(1); | |
| let y = X(2); | |
| let z = x & &y; | |
| #[derive(Copy, Clone)] | |
| struct Y(i32); | |
| impl BitAnd for Y { | |
| type Output = Y; | |
| fn bitand(self, rhs: Y) -> Y { | |
| Y(self.0 & rhs.0) | |
| } | |
| } | |
| impl<'a> BitAnd<&'a Y> for Y { | |
| type Output = Y; | |
| fn bitand(self, rhs: &'a Y) -> Y { | |
| Y(self.0 & rhs.0) | |
| } | |
| } | |
| let x = Y(1); | |
| let y = Y(2); | |
| let z = x & &y; | |
| //~^ op_ref | |
| } | |
| #[derive(Clone, Copy)] | |
| struct A(i32); | |
| #[derive(Clone, Copy)] | |
| struct B(i32); | |
| impl Mul<&A> for B { | |
| type Output = i32; | |
| fn mul(self, rhs: &A) -> Self::Output { | |
| self.0 * rhs.0 | |
| } | |
| } | |
| impl Mul<A> for B { | |
| type Output = i32; | |
| fn mul(self, rhs: A) -> Self::Output { | |
| // Should not lint because removing the reference would lead to unconditional recursion | |
| self * &rhs | |
| } | |
| } | |
| impl Mul<&A> for A { | |
| type Output = i32; | |
| fn mul(self, rhs: &A) -> Self::Output { | |
| self.0 * rhs.0 | |
| } | |
| } | |
| impl Mul<A> for A { | |
| type Output = i32; | |
| fn mul(self, rhs: A) -> Self::Output { | |
| let one = B(1); | |
| let two = 2; | |
| let three = 3; | |
| let _ = one * &self; | |
| //~^ op_ref | |
| let _ = two + &three; | |
| //~^ op_ref | |
| // Removing the reference would lead to unconditional recursion | |
| self * &rhs | |
| } | |
| } | |
| mod issue_2597 { | |
| fn ex1() { | |
| let a: &str = "abc"; | |
| let b: String = "abc".to_owned(); | |
| println!("{}", a > &b); | |
| } | |
| pub fn ex2<T: Ord + PartialOrd>(array: &[T], val: &T, idx: usize) -> bool { | |
| &array[idx] < val | |
| } | |
| } | |
| #[allow(clippy::needless_ifs)] | |
| fn issue15063() { | |
| use std::ops::BitAnd; | |
| macro_rules! mac { | |
| ($e:expr) => { | |
| $e.clone() | |
| }; | |
| } | |
| let x = 1; | |
| if &x == &mac!(1) {} | |
| //~^ op_ref | |
| #[derive(Copy, Clone)] | |
| struct Y(i32); | |
| impl BitAnd for Y { | |
| type Output = Y; | |
| fn bitand(self, rhs: Y) -> Y { | |
| Y(self.0 & rhs.0) | |
| } | |
| } | |
| impl<'a> BitAnd<&'a Y> for Y { | |
| type Output = Y; | |
| fn bitand(self, rhs: &'a Y) -> Y { | |
| Y(self.0 & rhs.0) | |
| } | |
| } | |
| let x = Y(1); | |
| let y = Y(2); | |
| let z = x & &mac!(y); | |
| //~^ op_ref | |
| } |