Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix SIM222 and SIM223 false positives and auto-fix #4063

110 changes: 110 additions & 0 deletions crates/ruff/resources/test/fixtures/flake8_simplify/SIM222.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,113 @@ def validate(self, value):

if a and False and f() and b and g(): # OK
pass


a or "" or True # SIM222

a or "foo" or True or "bar" # SIM222

a or 0 or True # SIM222

a or 1 or True or 2 # SIM222

a or 0.0 or True # SIM222

a or 0.1 or True or 0.2 # SIM222

a or [] or True # SIM222

a or list([]) or True # SIM222

a or [1] or True or [2] # SIM222

a or list([1]) or True or list([2]) # SIM222

a or {} or True # SIM222

a or dict() or True # SIM222

a or {1: 1} or True or {2: 2} # SIM222

a or dict({1: 1}) or True or dict({2: 2}) # SIM222

a or set() or True # SIM222

a or set(set()) or True # SIM222

a or {1} or True or {2} # SIM222

a or set({1}) or True or set({2}) # SIM222

a or () or True # SIM222

a or tuple(()) or True # SIM222

a or (1,) or True or (2,) # SIM222

a or tuple((1,)) or True or tuple((2,)) # SIM222

a or frozenset() or True # SIM222

a or frozenset(frozenset()) or True # SIM222

a or frozenset({1}) or True or frozenset({2}) # SIM222

a or frozenset(frozenset({1})) or True or frozenset(frozenset({2})) # SIM222


# Inside test `a` is simplified.

bool(a or [1] or True or [2]) # SIM222

assert a or [1] or True or [2] # SIM222

if (a or [1] or True or [2]) and (a or [1] or True or [2]): # SIM222
pass

0 if a or [1] or True or [2] else 1 # SIM222

while a or [1] or True or [2]: # SIM222
pass

[
0
for a in range(10)
for b in range(10)
if a or [1] or True or [2] # SIM222
if b or [1] or True or [2] # SIM222
]

{
0
for a in range(10)
for b in range(10)
if a or [1] or True or [2] # SIM222
if b or [1] or True or [2] # SIM222
}

{
0: 0
for a in range(10)
for b in range(10)
if a or [1] or True or [2] # SIM222
if b or [1] or True or [2] # SIM222
}

(
0
for a in range(10)
for b in range(10)
if a or [1] or True or [2] # SIM222
if b or [1] or True or [2] # SIM222
)

# Outside test `a` is not simplified.

a or [1] or True or [2] # SIM222

if (a or [1] or True or [2]) == (a or [1]): # SIM222
pass

if f(a or [1] or True or [2]): # SIM222
pass
110 changes: 110 additions & 0 deletions crates/ruff/resources/test/fixtures/flake8_simplify/SIM223.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,113 @@

if a or True or f() or b or g(): # OK
pass


a and "" and False # SIM223

a and "foo" and False and "bar" # SIM223

a and 0 and False # SIM223

a and 1 and False and 2 # SIM223

a and 0.0 and False # SIM223

a and 0.1 and False and 0.2 # SIM223

a and [] and False # SIM223

a and list([]) and False # SIM223

a and [1] and False and [2] # SIM223

a and list([1]) and False and list([2]) # SIM223

a and {} and False # SIM223

a and dict() and False # SIM223

a and {1: 1} and False and {2: 2} # SIM223

a and dict({1: 1}) and False and dict({2: 2}) # SIM223

a and set() and False # SIM223

a and set(set()) and False # SIM223

a and {1} and False and {2} # SIM223

a and set({1}) and False and set({2}) # SIM223

a and () and False # SIM222

a and tuple(()) and False # SIM222

a and (1,) and False and (2,) # SIM222

a and tuple((1,)) and False and tuple((2,)) # SIM222

a and frozenset() and False # SIM222

a and frozenset(frozenset()) and False # SIM222

a and frozenset({1}) and False and frozenset({2}) # SIM222

a and frozenset(frozenset({1})) and False and frozenset(frozenset({2})) # SIM222


# Inside test `a` is simplified.

bool(a and [] and False and []) # SIM223

assert a and [] and False and [] # SIM223

if (a and [] and False and []) or (a and [] and False and []): # SIM223
pass

0 if a and [] and False and [] else 1 # SIM222

while a and [] and False and []: # SIM223
pass

[
0
for a in range(10)
for b in range(10)
if a and [] and False and [] # SIM223
if b and [] and False and [] # SIM223
]

{
0
for a in range(10)
for b in range(10)
if a and [] and False and [] # SIM223
if b and [] and False and [] # SIM223
}

{
0: 0
for a in range(10)
for b in range(10)
if a and [] and False and [] # SIM223
if b and [] and False and [] # SIM223
}

(
0
for a in range(10)
for b in range(10)
if a and [] and False and [] # SIM223
if b and [] and False and [] # SIM223
)

# Outside test `a` is not simplified.

a and [] and False and [] # SIM223

if (a and [] and False and []) == (a and []): # SIM223
pass

if f(a and [] and False and []): # SIM223
pass
Loading