mirror of https://github.com/astral-sh/ruff
Ignore multi-comparisons in `repeated-equality-comparison-target` (#6705)
Given `foo == "a" == "b" or foo == "c"`, we were suggesting `foo in
{"a", "b", "c"}`.
This commit is contained in:
parent
129b19050a
commit
a742a562fd
|
|
@ -32,3 +32,7 @@ foo not in {"a", "b", "c"} # Uses membership test already.
|
|||
foo == "a" # Single comparison.
|
||||
|
||||
foo != "a" # Single comparison.
|
||||
|
||||
foo == "a" == "b" or foo == "c" # Multiple comparisons.
|
||||
|
||||
foo == bar == "b" or foo == "c" # Multiple comparisons.
|
||||
|
|
|
|||
|
|
@ -111,24 +111,27 @@ fn is_allowed_value(bool_op: BoolOp, value: &Expr) -> bool {
|
|||
return false;
|
||||
};
|
||||
|
||||
ops.iter().all(|op| {
|
||||
if match bool_op {
|
||||
BoolOp::Or => !matches!(op, CmpOp::Eq),
|
||||
BoolOp::And => !matches!(op, CmpOp::NotEq),
|
||||
} {
|
||||
return false;
|
||||
}
|
||||
// Ignore, e.g., `foo == bar == baz`.
|
||||
let [op] = ops.as_slice() else {
|
||||
return false;
|
||||
};
|
||||
|
||||
if left.is_call_expr() {
|
||||
return false;
|
||||
}
|
||||
if match bool_op {
|
||||
BoolOp::Or => !matches!(op, CmpOp::Eq),
|
||||
BoolOp::And => !matches!(op, CmpOp::NotEq),
|
||||
} {
|
||||
return false;
|
||||
}
|
||||
|
||||
if any(comparators.iter(), Expr::is_call_expr) {
|
||||
return false;
|
||||
}
|
||||
if left.is_call_expr() {
|
||||
return false;
|
||||
}
|
||||
|
||||
true
|
||||
})
|
||||
if any(comparators.iter(), Expr::is_call_expr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
/// Generate a string like `obj in (a, b, c)` or `obj not in (a, b, c)`.
|
||||
|
|
|
|||
Loading…
Reference in New Issue