prefer-match-type-dispatch
Prefer match for structural runtime type dispatch.
Why
A long mutually exclusive isinstance dispatch repeats its subject and hides the closed list of runtime shapes. Class patterns make the alternatives explicit without repeating the dispatch subject.
Fix
Replace the branches with match subject and one class-pattern arm per distinct type; combine types that share behavior with an OR-pattern.
Examples
def parse(value: object): if isinstance(value, str): return parse_text(value) elif isinstance(value, bytes): return parse_bytes(value) elif isinstance(value, dict): return parse_mapping(value) raise TypeError(type(value))def parse(value: object): match value: case str(): return parse_text(value) case bytes(): return parse_bytes(value) case dict(): return parse_mapping(value) case _: raise TypeError(type(value))import ast
def dotted_tail(node: ast.expr) -> str | None: if isinstance(node, ast.Name): return node.id if isinstance(node, ast.Attribute): return node.attr return Noneimport ast
def dotted_tail(node: ast.expr) -> str | None: match node: case ast.Name(): return node.id case ast.Attribute(): return node.attr case _: return None