collapse-isinstance-checks

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.

Valid examples

foo() or foo()
foo(x, y) or foo(x, z)
foo(x, y) or foo(x, z) or foo(x, q)
isinstance() or isinstance()
isinstance(x) or isinstance(x)
isinstance(x, y) or isinstance(x)
Show more
isinstance(x) or isinstance(x, y)
isinstance(x, y) or isinstance(t, y)
isinstance(f(), A) or isinstance(f(), B)
isinstance(x, y) and isinstance(x, z)
isinstance(x, y) or isinstance(x, (z, q))
isinstance(x, (y, z)) or isinstance(x, q)
isinstance(x, a) or isinstance(y, b) or isinstance(z, c)
def foo():
    def isinstance(x, y):
        return _foo_bar(x, y)
    if isinstance(x, y) or isinstance(x, z):
        print("foo")

Invalid examples

isinstance(x, y) or isinstance(x, z)

Suggested fix

isinstance(x, (y, z))
isinstance(x, y) or isinstance(x, z) or isinstance(x, q)

Suggested fix

isinstance(x, (y, z, q))
something or isinstance(x, y) or isinstance(x, z) or another

Suggested fix

something or isinstance(x, (y, z)) or another
Show more
isinstance(x, y) or isinstance(x, z) or isinstance(x, q) or isinstance(x, w)

Suggested fix

isinstance(x, (y, z, q, w))
isinstance(x, a) or isinstance(x, b) or isinstance(y, c) or isinstance(y, d)

Suggested fix

isinstance(x, (a, b)) or isinstance(y, (c, d))
isinstance(x, a) or isinstance(x, b) or isinstance(y, c) or isinstance(y, d) or isinstance(z, e)

Suggested fix

isinstance(x, (a, b)) or isinstance(y, (c, d)) or isinstance(z, e)
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)

Suggested fix

isinstance(x, (a, b)) or isinstance(y, (c, d)) or isinstance(z, e) or isinstance(q, (f, g, h))