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))