2 #![warn(clippy::suspicious_operation_groupings)]
3 #![allow(dead_code, unused_parens, clippy::eq_op)]
13 impl PartialEq for Vec3 {
14 fn eq(&self, other: &Self) -> bool {
15 // This should trigger the lint because `self.x` is compared to `other.y`
16 self.x == other.x && self.y == other.y && self.z == other.z
27 fn buggy_ab_cmp(s1: &S, s2: &S) -> bool {
29 s1.a < s2.a && s1.b < s2.b
42 fn do_not_give_bad_suggestions_for_this_unusual_expr(s1: &S, s2: &SaOnly) -> bool {
43 // This is superficially similar to `buggy_ab_cmp`, but we should not suggest
44 // `s2.b` since that is invalid.
45 s1.a < s2.a && s1.a() < s1.b
48 fn do_not_give_bad_suggestions_for_this_macro_expr(s1: &S, s2: &SaOnly) -> bool {
60 // This is superficially similar to `buggy_ab_cmp`, but we should not suggest
61 // `s2.b` since that is invalid.
62 s1.a < s2.a && s1!().a < s1.b
65 fn do_not_give_bad_suggestions_for_this_incorrect_expr(s1: &S, s2: &SaOnly) -> bool {
66 // There's two `s1.b`, but we should not suggest `s2.b` since that is invalid
67 s1.a < s2.a && s1.b < s1.b
70 fn permissable(s1: &S, s2: &S) -> bool {
71 // Something like this seems like it might actually be what is desired.
75 fn non_boolean_operators(s1: &S, s2: &S) -> i32 {
77 s1.a * s2.a + s1.b * s2.b + s1.c * s2.c + s1.d * s2.d
80 fn odd_number_of_pairs(s1: &S, s2: &S) -> i32 {
82 s1.a * s2.a + s1.b * s2.b + s1.c * s2.c
85 fn not_caught_by_eq_op_middle_change_left(s1: &S, s2: &S) -> i32 {
87 s1.a * s2.a + s1.b * s2.b + s1.c * s2.c
90 fn not_caught_by_eq_op_middle_change_right(s1: &S, s2: &S) -> i32 {
92 s1.a * s2.a + s1.b * s2.b + s1.c * s2.c
95 fn not_caught_by_eq_op_start(s1: &S, s2: &S) -> i32 {
97 s1.a * s2.a + s1.b * s2.b + s1.c * s2.c
100 fn not_caught_by_eq_op_end(s1: &S, s2: &S) -> i32 {
102 s1.a * s2.a + s1.b * s2.b + s1.c * s2.c
105 fn the_cross_product_should_not_lint(s1: &S, s2: &S) -> (i32, i32, i32) {
107 s1.b * s2.c - s1.c * s2.b,
108 s1.c * s2.a - s1.a * s2.c,
109 s1.a * s2.b - s1.b * s2.a,
113 fn outer_parens_simple(s1: &S, s2: &S) -> i32 {
115 (s1.a * s2.a + s1.b * s2.b)
118 fn outer_parens(s1: &S, s2: &S) -> i32 {
120 (s1.a * s2.a + s1.b * s2.b + s1.c * s2.c + s1.d * s2.d)
123 fn inner_parens(s1: &S, s2: &S) -> i32 {
125 (s1.a * s2.a) + (s1.b * s2.b) + (s1.c * s2.c) + (s1.d * s2.d)
128 fn outer_and_some_inner_parens(s1: &S, s2: &S) -> i32 {
130 ((s1.a * s2.a) + (s1.b * s2.b) + (s1.c * s2.c) + (s1.d * s2.d))
133 fn all_parens_balanced_tree(s1: &S, s2: &S) -> i32 {
135 (((s1.a * s2.a) + (s1.b * s2.b)) + ((s1.c * s2.c) + (s1.d * s2.d)))
138 fn all_parens_left_tree(s1: &S, s2: &S) -> i32 {
140 (((s1.a * s2.a) + (s1.b * s2.b) + (s1.c * s2.c)) + (s1.d * s2.d))
143 fn all_parens_right_tree(s1: &S, s2: &S) -> i32 {
145 ((s1.a * s2.a) + ((s1.b * s2.b) + (s1.c * s2.c) + (s1.d * s2.d)))
148 fn inside_other_binop_expression(s1: &S, s2: &S) -> i32 {
150 (s1.a * s2.a + s1.b * s2.b) / 2
153 fn inside_function_call(s1: &S, s2: &S) -> i32 {
155 i32::swap_bytes(s1.a * s2.a + s1.b * s2.b)
158 fn inside_larger_boolean_expression(s1: &S, s2: &S) -> bool {
160 s1.a > 0 && s1.b > 0 && s1.c == s2.c && s1.d == s2.d
163 fn inside_larger_boolean_expression_with_unsorted_ops(s1: &S, s2: &S) -> bool {
165 s1.a > 0 && s1.c == s2.c && s1.b > 0 && s1.d == s2.d
169 inner: ((i32,), (i32,), (i32,)),
172 fn changed_middle_ident(n1: &Nested, n2: &Nested) -> bool {
173 // There's no `n2.inner.2.0`
174 (n1.inner.0).0 == (n2.inner.0).0 && (n1.inner.1).0 == (n2.inner.1).0 && (n1.inner.2).0 == (n2.inner.2).0
177 // `eq_op` should catch this one.
178 fn changed_initial_ident(n1: &Nested, n2: &Nested) -> bool {
179 // There's no `n2.inner.0.0`
180 (n1.inner.0).0 == (n1.inner.0).0 && (n1.inner.1).0 == (n2.inner.1).0 && (n1.inner.2).0 == (n2.inner.2).0
183 fn inside_fn_with_similar_expression(s1: &S, s2: &S, strict: bool) -> bool {
185 s1.a < s2.a && s1.b < s2.b
187 // There's no `s1.b` in this subexpression
188 s1.a <= s2.a && s1.b <= s2.b
192 fn inside_an_if_statement(s1: &mut S, s2: &S) {
194 if s1.a < s2.a && s1.b < s2.b {
199 fn maximum_unary_minus_right_tree(s1: &S, s2: &S) -> i32 {
201 -(-(-s1.a * -s2.a) + (-(-s1.b * -s2.b) + -(-s1.c * -s2.c) + -(-s1.d * -s2.d)))
204 fn unary_minus_and_an_if_expression(s1: &S, s2: &S) -> i32 {
206 -(if -s1.a < -s2.a && -s1.b < -s2.b { s1.c } else { s2.a })