collapse-isinstance-checks

Combine repeated isinstance checks by passing a tuple of types.

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)
isinstance(x, y) or isinstance(x, z) or isinstance(x, q)
something or isinstance(x, y) or isinstance(x, z) or another
isinstance(x, y) or isinstance(x, z) or isinstance(x, q) or isinstance(x, w)
isinstance(x, a) or isinstance(x, b) or isinstance(y, c) or isinstance(y, d)
isinstance(x, a) or isinstance(x, b) or isinstance(y, c) or isinstance(y, d) or isinstance(z, e)
Show more
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)
import builtins

builtins.isinstance(x, A) or builtins.isinstance(x, B)
from builtins import isinstance as check

check(x, A) or check(x, B)