rohanpm/pidiff

View on GitHub
docs/errors/signature.rst

Summary

Maintainability
Test Coverage
Signature changes
=================

Various changes to the signature of a callable will produce errors.


Error codes
-----------

====   =========================
Code   Name
====   =========================
B300   removed-argument
B310   added-argument
B320   moved-argument
B330   unpositional-argument
B340   removed-var-args
B350   removed-var-keyword-args
B800   uncallable
N400   added-optional-argument
N410   added-argument-default
N440   added-var-args
N450   added-var-keyword-args
====   =========================


Examples
--------

    .. index:: B300, removed-argument

    B300 removed-argument
        ::

            -def fn(x, y, z)
            +def fn(x, y)

            # breaks: fn('x', 'y', 'z')

        An argument was removed, breaking any clients who were formerly
        providing the argument.

    .. index:: B310, added-argument

    B310 added-argument
        ::

            -def fn(x, y)
            +def fn(x, y, z)

            # breaks: fn('x', 'y')

        A mandatory argument was added, breaking all clients formerly using
        the function.

    .. index:: B320, moved-argument

    B320 moved-argument
        ::

            -def scramble_eggs(with_butter=False, with_milk=True)
            +def scramble_eggs(with_milk=True, with_butter=False)

            # breaks: scramble_eggs(True, False)

        The position of an argument was changed, breaking clients passing
        the relevant argument(s) positionally.  Although, depending on the
        argument types, the call may be able to succeed, it's likely the
        semantics of the call have changed in a backwards-incompatible manner.

    .. index:: B330, unpositional-argument

    B330 unpositional-argument
        ::

            -def scramble_eggs(with_butter=False)
            +def scramble_eggs(*eggs, with_butter=False)

            # breaks: scramble_eggs(True)

        An argument could previously be provided positionally, but can now only
        be passed as a keyword argument.

    .. index:: B340, removed-var-args

    B340 removed-var-args
        ::

            -def max(*values)
            +def max(a, b)

            # breaks: max(10, 3, 7)

        A function previously accepted an unlimited number of positional
        arguments, and no longer does. This breaks any clients formerly passing
        more arguments than accepted by the new version of the function.

    .. index:: B350, removed-var-keyword-args

    B350 removed-var-keyword-args
        ::

            -def scramble_eggs(**kwargs)
            +def scramble_eggs(with_butter=False, with_milk=False)

            # breaks: scramble_eggs(with_salt=True)

        A function previously accepted an unlimited number of keyword
        arguments, and no longer does. This breaks any clients formerly passing
        any keyword arguments other than those supported by the new version of
        the function.

    .. index:: B800, uncallable

    B800 uncallable
        ::

             class EggScrambler:
            -  def __call__(self): ...
            +  def scramble_eggs(self): ...
             scrambler = EggScrambler()

            # breaks: scrambler()

        An object changed from callable to non-callable. This breaks any clients
        formerly using the object as a callable.

    .. index:: N400, added-optional-argument

    N400 added-optional-argument
        ::

            -def scramble_eggs(with_butter=False)
            +def scramble_eggs(with_butter=False, with_milk=True)

            # compatible: scramble_eggs(True)
            # new call:   scramble_eggs(True, True)

        A named argument was added with a default value. Since a default is supplied,
        this is a backwards-compatible change.

    .. index:: N410, added-argument-default

    N410 added-argument-default
        ::

            -def scramble_eggs(with_butter)
            +def scramble_eggs(with_butter=False)

            # compatible: scramble_eggs(True)
            # new call:   scramble_eggs()

        An argument has a default value introduced. This is a backwards-compatible
        change which allows a function to be called with fewer arguments.

    .. index:: N440, added-var-args

    N440 added-var-args
        ::

            -def max(a, b)
            +def max(a, b, *rest)

            # compatible: max(10, 3)
            # new call:   max(10, 3, 7)

        A function now accepts any number of positional arguments.

    .. index:: N450, added-var-keyword-args

    N450 added-var-keyword-args
        ::

            -def scramble_eggs(with_butter=True)
            +def scramble_eggs(with_butter=True, **kwargs)

            # compatible: scramble_eggs(True)
            # new call:   scramble_eggs(True, with_salt=True)

        A function now accepts any number of named arguments.