summaryrefslogtreecommitdiff
path: root/tests/functional/u/unused/unused_argument.py
blob: 69c37feef4388dfdf6f8f03e099cf0d523a61ce7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# pylint: disable=missing-docstring,too-few-public-methods

def test_unused(first, second, _not_used): # [unused-argument, unused-argument]
    pass


def test_prefixed_with_ignored(first, ignored_second):
    first()


def test_prefixed_with_unused(first, unused_second):
    first()

# for Sub.inherited, only the warning for "aay" is desired.
# The warnings for "aab" and "aac"  are most likely false positives though,
# because there could be another subclass that overrides the same method and does
# use the arguments (e.g. Sub2)


class Base:
    "parent"
    def inherited(self, aaa, aab, aac):
        "abstract method"
        raise NotImplementedError

class Sub(Base):
    "child 1"
    def inherited(self, aaa, aab, aac):
        "overridden method, though don't use every argument"
        return aaa

    def newmethod(self, aax, aay):  # [unused-argument]
        "another method, warning for aay desired"
        return self, aax

class Sub2(Base):
    "child 1"

    def inherited(self, aaa, aab, aac):
        "overridden method, use every argument"
        return aaa + aab + aac

def metadata_from_dict(key):
    """
    Should not raise unused-argument message because key is
    used inside comprehension dict
    """
    return {key: str(value) for key, value in key.items()}


def metadata_from_dict_2(key):
    """Similar, but with more nesting"""
    return {key: (a, b) for key, (a, b) in key.items()}


# pylint: disable=too-few-public-methods, wrong-import-position


def function(arg=1):  # [unused-argument]
    """ignore arg"""


class AAAA:
    """dummy class"""

    def method(self, arg):  # [unused-argument]
        """dummy method"""
        print(self)
    def __init__(self, *unused_args, **unused_kwargs):
        pass

    @classmethod
    def selected(cls, *args, **kwargs):  # [unused-argument, unused-argument]
        """called by the registry when the vobject has been selected.
        """
        return cls

    def using_inner_function(self, etype, size=1):
        """return a fake result set for a particular entity type"""
        rset = AAAA([('A',)]*size, f'{etype} X',
                    description=[(etype,)]*size)
        def inner(row, col=0, etype=etype, req=self, rset=rset):
            """inner using all its argument"""
            # pylint: disable=maybe-no-member
            return req.vreg.etype_class(etype)(req, rset, row, col)
        # pylint: disable = attribute-defined-outside-init
        rset.get_entity = inner

class BBBB:
    """dummy class"""

    def __init__(self, arg):  # [unused-argument]
        """Constructor with an extra parameter. Should raise a warning"""
        self.spam = 1


# Regression test for https://github.com/PyCQA/pylint/issues/5771
# involving keyword-only arguments
class Ancestor:
    def __init__(self):
        self.thing = None

    def set_thing(self, thing, *, other=None):  # [unused-argument]
        self.thing = thing

class Descendant(Ancestor):
    def set_thing(self, thing, *, other=None):
        """Subclass does not raise unused-argument"""
        self.thing = thing


# Test that Class with both `__init__` and `__new__` don't check
# on `__new__` for unused arguments

# pylint: disable=invalid-name

class TestClassWithInitAndNew:
    def __init__(self, argA, argB):
        self.argA = argA
        self.argB = argB

    def __new__(cls, argA, argB):
        return object.__new__(cls)

# Test that `__new__` method is checked for unused arguments
# when `__init__` is not in the Class

class TestClassWithOnlyNew:
    def __new__(cls, argA, argB): # [unused-argument, unused-argument]
        return object.__new__(cls)