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
|
# pylint: disable=print-statement,missing-docstring,no-self-use,too-few-public-methods,bare-except,broad-except
# pylint: disable=using-constant-test
from __future__ import print_function
class Provider(object):
"""provide some attributes and method"""
cattr = 4
def __init__(self):
self.attr = 4
def method(self, val):
"""impressive method"""
return self.attr * val
def hophop(self):
"""hop method"""
print('hop hop hop', self)
class Client(object):
"""use provider class"""
def __init__(self):
self._prov = Provider()
self._prov_attr = Provider.cattr
self._prov_attr2 = Provider.cattribute # [no-member]
self.set_later = 0
def set_set_later(self, value):
"""set set_later attribute (introduce an inference ambiguity)"""
self.set_later = value
def use_method(self):
"""use provider's method"""
self._prov.hophop()
self._prov.hophophop() # [no-member]
def use_attr(self):
"""use provider's attr"""
print(self._prov.attr)
print(self._prov.attribute) # [no-member]
def debug(self):
"""print debug information"""
print(self.__class__.__name__)
print(self.__doc__)
print(self.__dict__)
print(self.__module__)
def test_bt_types(self):
"""test access to unexistant member of builtin types"""
lis = []
lis.apppend(self) # [no-member]
dic = {}
dic.set(self) # [no-member]
tup = ()
tup.append(self) # [no-member]
string = 'toto'
print(string.loower()) # [no-member]
integer = 1
print(integer.whatever) # [no-member]
def test_no_false_positives(self):
none = None
print(none.whatever)
# No misssing in the parents.
super(Client, self).misssing() # [no-member]
class Mixin(object):
"""No no-member should be emitted for mixins."""
class Getattr(object):
"""no-member shouldn't be emitted for classes with dunder getattr."""
def __getattr__(self, attr):
return self.__dict__[attr]
class Getattribute(object):
"""no-member shouldn't be emitted for classes with dunder getattribute."""
def __getattribute__(self, attr):
return 42
print(object.__init__)
print(property.__init__)
print(Client().set_later.lower()) # [no-member]
print(Mixin().nanana())
print(Getattr().nananan())
print(Getattribute().batman())
try:
Client().missing_method()
except AttributeError:
pass
try:
Client().indeed()
except Exception:
pass
try:
Client().indeed()
except:
pass
try:
Client().indeed() # [no-member]
except ImportError:
pass
try:
if Client:
Client().missing()
except AttributeError:
pass
class SuperChecks(str, str): # pylint: disable=duplicate-bases
"""Don't fail when the MRO is invalid."""
def test(self):
super(SuperChecks, self).lalala()
|