CollapseIsinstanceChecksRule
The built-in isinstance
function, instead of a single type,
can take a tuple of types and check whether given target suits
any of them. Rather than chaining multiple isinstance
calls
with a boolean-or operation, a single isinstance
call where
the second argument is a tuple of all types can be used.
Message
Multiple isinstance calls with the same target but different types can be collapsed into a single call with a tuple of types.
Has Autofix: Yes
VALID Code Examples
# 1:
foo() or foo()
# 2:
foo(x, y) or foo(x, z)
# 3:
foo(x, y) or foo(x, z) or foo(x, q)
# 4:
isinstance() or isinstance()
# 5:
isinstance(x) or isinstance(x)
# 6:
isinstance(x, y) or isinstance(x)
# 7:
isinstance(x) or isinstance(x, y)
# 8:
isinstance(x, y) or isinstance(t, y)
# 9:
isinstance(x, y) and isinstance(x, z)
# 10:
isinstance(x, y) or isinstance(x, (z, q))
# 11:
isinstance(x, (y, z)) or isinstance(x, q)
# 12:
isinstance(x, a) or isinstance(y, b) or isinstance(z, c)
# 13:
def foo():
def isinstance(x, y):
return _foo_bar(x, y)
if isinstance(x, y) or isinstance(x, z):
print("foo")
INVALID Code Examples
# 1:
isinstance(x, y) or isinstance(x, z)
Autofix:
---
+++
@@ -1 +1 @@
-isinstance(x, y) or isinstance(x, z)
+isinstance(x, (y, z))
# 2:
isinstance(x, y) or isinstance(x, z) or isinstance(x, q)
Autofix:
---
+++
@@ -1 +1 @@
-isinstance(x, y) or isinstance(x, z) or isinstance(x, q)
+isinstance(x, (y, z, q))
# 3:
something or isinstance(x, y) or isinstance(x, z) or another
Autofix:
---
+++
@@ -1 +1 @@
-something or isinstance(x, y) or isinstance(x, z) or another
+something or isinstance(x, (y, z)) or another
# 4:
isinstance(x, y) or isinstance(x, z) or isinstance(x, q) or isinstance(x, w)
Autofix:
---
+++
@@ -1 +1 @@
-isinstance(x, y) or isinstance(x, z) or isinstance(x, q) or isinstance(x, w)
+isinstance(x, (y, z, q, w))
# 5:
isinstance(x, a) or isinstance(x, b) or isinstance(y, c) or isinstance(y, d)
Autofix:
---
+++
@@ -1 +1 @@
-isinstance(x, a) or isinstance(x, b) or isinstance(y, c) or isinstance(y, d)
+isinstance(x, (a, b)) or isinstance(y, (c, d))
# 6:
isinstance(x, a) or isinstance(x, b) or isinstance(y, c) or isinstance(y, d) or isinstance(z, e)
Autofix:
---
+++
@@ -1 +1 @@
-isinstance(x, a) or isinstance(x, b) or isinstance(y, c) or isinstance(y, d) or isinstance(z, e)
+isinstance(x, (a, b)) or isinstance(y, (c, d)) or isinstance(z, e)
# 7:
isinstance(x, a) or isinstance(x, b) or isinstance(y, c) or isinstance(y, d) or isinstance(z, e) or isinstance(q, f) or isinstance(q, g) or isinstance(q, h)
Autofix:
---
+++
@@ -1 +1 @@
-isinstance(x, a) or isinstance(x, b) or isinstance(y, c) or isinstance(y, d) or isinstance(z, e) or isinstance(q, f) or isinstance(q, g) or isinstance(q, h)
+isinstance(x, (a, b)) or isinstance(y, (c, d)) or isinstance(z, e) or isinstance(q, (f, g, h))