pylint/checkers/utils.py
def is_registered_in_singledispatch_function(node: astroid.FunctionDef) -> bool:
    """Check if the given function node is a singledispatch function."""

    singledispatch_qnames = (
        "functools.singledispatch",
        "singledispatch.singledispatch",
    )

    if not isinstance(node, astroid.FunctionDef):
        return False

    decorators = node.decorators.nodes if node.decorators else []
    for decorator in decorators:
        # func.register are function calls
        if not isinstance(decorator, astroid.Call):
            continue

        func = decorator.func
        if not isinstance(func, astroid.Attribute) or func.attrname != "register":
            continue

        try:
            func_def = next(func.expr.infer())
        except astroid.InferenceError:
            continue

        if isinstance(func_def, astroid.FunctionDef):
            # pylint: disable=redundant-keyword-arg; some flow inference goes wrong here
            return decorated_with(func_def, singledispatch_qnames)

    return False
def is_registered_in_singledispatch_function(node: astroid.FunctionDef) -> bool:
    singledispatch_qnames = (
        "functools.singledispatch",
        "singledispatch.singledispatch",
    )

    if not isinstance(node, astroid.FunctionDef):
        return False

    decorators = node.decorators.nodes if node.decorators else []
    for decorator in decorators:
        # func.register are function calls
        if not isinstance(decorator, astroid.Call):
            continue

        func = decorator.func
        if not isinstance(func, astroid.Attribute) or func.attrname != "register":
            continue

        try:
            func_def = next(func.expr.infer())
        except astroid.InferenceError:
            continue

        if isinstance(func_def, astroid.FunctionDef):
            # pylint: disable=redundant-keyword-arg; some flow inference goes wrong here
            return decorated_with(func_def, singledispatch_qnames)

    return False
def is_registered_in_singledispatch_function ( node : astroid . FunctionDef ) -> bool : singledispatch_qnames = ( "functools.singledispatch" , "singledispatch.singledispatch" , ) if not isinstance ( node , astroid . FunctionDef ) : return False decorators = node . decorators . nodes if node . decorators else [ ] for decorator in decorators : # func.register are function calls if not isinstance ( decorator , astroid . Call ) : continue func = decorator . func if not isinstance ( func , astroid . Attribute ) or func . attrname != "register" : continue try : func_def = next ( func . expr . infer ( ) ) except astroid . InferenceError : continue if isinstance ( func_def , astroid . FunctionDef ) : # pylint: disable=redundant-keyword-arg; some flow inference goes wrong here return decorated_with ( func_def , singledispatch_qnames ) return False
Check if the given function node is a singledispatch function.
Check if the given function node is a singledispatch function .