diff options
author | Claudiu Popa <cpopa@cloudbasesolutions.com> | 2015-03-11 18:15:47 +0200 |
---|---|---|
committer | Claudiu Popa <cpopa@cloudbasesolutions.com> | 2015-03-11 18:15:47 +0200 |
commit | 66cc4feff79b1619e02b83ed32c2ee319ca94031 (patch) | |
tree | 00c37186641f4ae55e1069bd7b0d6716a8dae97f | |
parent | 4fb159bc60c3fb4d45c5495423e7134788a5ebf9 (diff) | |
download | pylint-git-66cc4feff79b1619e02b83ed32c2ee319ca94031.tar.gz |
Remove abstract-class-not-used, for the same reasons as star-args and abstract-class-little-referenced.
-rw-r--r-- | pylint/checkers/design_analysis.py | 39 | ||||
-rw-r--r-- | pylint/test/functional/abstract_class_instantiated_py2.py | 2 | ||||
-rw-r--r-- | pylint/test/functional/abstract_class_instantiated_py3.py | 1 | ||||
-rw-r--r-- | pylint/test/functional/abstract_class_instantiated_py3.txt | 8 | ||||
-rw-r--r-- | pylint/test/functional/abstract_class_instantiated_py34.py | 4 | ||||
-rw-r--r-- | pylint/test/functional/abstract_method_py2.py | 1 | ||||
-rw-r--r-- | pylint/test/functional/abstract_method_py2.txt | 32 | ||||
-rw-r--r-- | pylint/test/functional/abstract_method_py3.py | 1 | ||||
-rw-r--r-- | pylint/test/functional/abstract_method_py3.txt | 32 | ||||
-rw-r--r-- | pylint/test/input/func_r0921.py | 15 | ||||
-rw-r--r-- | pylint/test/input/func_typecheck_callfunc_assigment.py | 2 | ||||
-rw-r--r-- | pylint/test/messages/func_r0921.txt | 1 | ||||
-rw-r--r-- | pylintrc | 2 |
13 files changed, 45 insertions, 95 deletions
diff --git a/pylint/checkers/design_analysis.py b/pylint/checkers/design_analysis.py index fe5e973c9..9ff10bf31 100644 --- a/pylint/checkers/design_analysis.py +++ b/pylint/checkers/design_analysis.py @@ -18,7 +18,7 @@ import re from collections import defaultdict -from astroid import Function, If, InferenceError +from astroid import If, InferenceError from pylint.interfaces import IAstroidChecker from pylint.checkers import BaseChecker @@ -28,17 +28,6 @@ from pylint.checkers.utils import check_messages IGNORED_ARGUMENT_NAMES = re.compile('_.*') -def class_is_abstract(klass): - """return true if the given class node should be considered as an abstract - class - """ - for attr in klass.values(): - if isinstance(attr, Function): - if attr.is_abstract(pass_is_abstract=False): - return True - return False - - MSGS = { 'R0901': ('Too many ancestors (%s/%s)', 'too-many-ancestors', @@ -75,10 +64,6 @@ MSGS = { 'too-many-statements', 'Used when a function or method has too many statements. You \ should then split it in smaller functions / methods.'), - - 'R0921': ('Abstract class not referenced', - 'abstract-class-not-used', - 'Used when an abstract class is not used as ancestor anywhere.'), 'R0923': ('Interface not implemented', 'interface-not-implemented', 'Used when an interface class is not implemented anywhere.'), @@ -161,9 +146,7 @@ class MisdesignChecker(BaseChecker): self.stats = None self._returns = None self._branches = None - self._used_abstracts = None self._used_ifaces = None - self._abstracts = None self._ifaces = None self._stmts = 0 @@ -172,23 +155,17 @@ class MisdesignChecker(BaseChecker): self.stats = self.linter.add_stats() self._returns = [] self._branches = defaultdict(int) - self._used_abstracts = {} self._used_ifaces = {} - self._abstracts = [] self._ifaces = [] def close(self): - """check that abstract/interface classes are used""" - for abstract in self._abstracts: - if not abstract in self._used_abstracts: - self.add_message('abstract-class-not-used', node=abstract) + """check that interface classes are used""" for iface in self._ifaces: if not iface in self._used_ifaces: self.add_message('interface-not-implemented', node=iface) @check_messages('too-many-ancestors', 'too-many-instance-attributes', 'too-few-public-methods', 'too-many-public-methods', - 'abstract-class-not-used', 'interface-not-implemented') def visit_class(self, node): """check size of inheritance hierarchy and number of instance attributes @@ -205,10 +182,8 @@ class MisdesignChecker(BaseChecker): self.add_message('too-many-instance-attributes', node=node, args=(len(node.instance_attrs), self.config.max_attributes)) - # update abstract / interface classes structures - if class_is_abstract(node): - self._abstracts.append(node) - elif node.type == 'interface' and node.name != 'Interface': + # update interface classes structures + if node.type == 'interface' and node.name != 'Interface': self._ifaces.append(node) for parent in node.ancestors(False): if parent.name == 'Interface': @@ -220,11 +195,6 @@ class MisdesignChecker(BaseChecker): except InferenceError: # XXX log ? pass - for parent in node.ancestors(): - try: - self._used_abstracts[parent] += 1 - except KeyError: - self._used_abstracts[parent] = 1 @check_messages('too-few-public-methods', 'too-many-public-methods') def leave_class(self, node): @@ -355,7 +325,6 @@ class MisdesignChecker(BaseChecker): """increments the branches counter""" self._branches[node.scope()] += branchesnum - # FIXME: make a nice report... def register(linter): """required method to auto register this checker """ diff --git a/pylint/test/functional/abstract_class_instantiated_py2.py b/pylint/test/functional/abstract_class_instantiated_py2.py index 2fc575a17..9b3f315ca 100644 --- a/pylint/test/functional/abstract_class_instantiated_py2.py +++ b/pylint/test/functional/abstract_class_instantiated_py2.py @@ -3,7 +3,7 @@ abstract methods. """ -# pylint: disable=too-few-public-methods, missing-docstring, abstract-class-not-used +# pylint: disable=too-few-public-methods, missing-docstring # pylint: disable=no-absolute-import, metaclass-assignment # pylint: disable=abstract-method diff --git a/pylint/test/functional/abstract_class_instantiated_py3.py b/pylint/test/functional/abstract_class_instantiated_py3.py index 561c6058e..be26b8c60 100644 --- a/pylint/test/functional/abstract_class_instantiated_py3.py +++ b/pylint/test/functional/abstract_class_instantiated_py3.py @@ -4,7 +4,6 @@ abstract methods. """ # pylint: disable=too-few-public-methods, missing-docstring -# pylint: disable=abstract-class-not-used # pylint: disable=abstract-method __revision__ = 0 diff --git a/pylint/test/functional/abstract_class_instantiated_py3.txt b/pylint/test/functional/abstract_class_instantiated_py3.txt index b2e70a0d2..646992992 100644 --- a/pylint/test/functional/abstract_class_instantiated_py3.txt +++ b/pylint/test/functional/abstract_class_instantiated_py3.txt @@ -1,4 +1,4 @@ -abstract-class-instantiated:95:main:Abstract class 'BadMroAbstractMethods' with abstract methods instantiated
-abstract-class-instantiated:96:main:Abstract class 'BadClass' with abstract methods instantiated
-abstract-class-instantiated:97:main:Abstract class 'SecondBadClass' with abstract methods instantiated
-abstract-class-instantiated:98:main:Abstract class 'ThirdBadClass' with abstract methods instantiated
+abstract-class-instantiated:94:main:Abstract class 'BadMroAbstractMethods' with abstract methods instantiated
+abstract-class-instantiated:95:main:Abstract class 'BadClass' with abstract methods instantiated
+abstract-class-instantiated:96:main:Abstract class 'SecondBadClass' with abstract methods instantiated
+abstract-class-instantiated:97:main:Abstract class 'ThirdBadClass' with abstract methods instantiated
diff --git a/pylint/test/functional/abstract_class_instantiated_py34.py b/pylint/test/functional/abstract_class_instantiated_py34.py index 8f710a226..4dadef437 100644 --- a/pylint/test/functional/abstract_class_instantiated_py34.py +++ b/pylint/test/functional/abstract_class_instantiated_py34.py @@ -1,9 +1,9 @@ """
-Check that instantiating a class with `abc.ABCM` as ancestor fails if it
+Check that instantiating a class with `abc.ABCMeta` as ancestor fails if it
defines abstract methods.
"""
-# pylint: disable=too-few-public-methods, missing-docstring, abstract-class-not-used, no-init
+# pylint: disable=too-few-public-methods, missing-docstring, no-init
__revision__ = 0
diff --git a/pylint/test/functional/abstract_method_py2.py b/pylint/test/functional/abstract_method_py2.py index 341f5de32..a7c0d6b75 100644 --- a/pylint/test/functional/abstract_method_py2.py +++ b/pylint/test/functional/abstract_method_py2.py @@ -3,7 +3,6 @@ from __future__ import print_function # pylint: disable=missing-docstring, no-init, no-self-use # pylint: disable=too-few-public-methods -# pylint: disable=abstract-class-not-used import abc class Abstract(object): diff --git a/pylint/test/functional/abstract_method_py2.txt b/pylint/test/functional/abstract_method_py2.txt index 4ccf9caab..ce0c6176c 100644 --- a/pylint/test/functional/abstract_method_py2.txt +++ b/pylint/test/functional/abstract_method_py2.txt @@ -1,16 +1,16 @@ -abstract-method:29:Concret:"Method 'bbbb' is abstract in class 'Abstract' but is not overridden"
-abstract-method:54:Container:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
-abstract-method:54:Container:"Method '__iter__' is abstract in class 'Structure' but is not overridden"
-abstract-method:54:Container:"Method '__len__' is abstract in class 'Structure' but is not overridden"
-abstract-method:60:Sizable:"Method '__contains__' is abstract in class 'Structure' but is not overridden"
-abstract-method:60:Sizable:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
-abstract-method:60:Sizable:"Method '__iter__' is abstract in class 'Structure' but is not overridden"
-abstract-method:66:Hashable:"Method '__contains__' is abstract in class 'Structure' but is not overridden"
-abstract-method:66:Hashable:"Method '__iter__' is abstract in class 'Structure' but is not overridden"
-abstract-method:66:Hashable:"Method '__len__' is abstract in class 'Structure' but is not overridden"
-abstract-method:71:Iterator:"Method '__contains__' is abstract in class 'Structure' but is not overridden"
-abstract-method:71:Iterator:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
-abstract-method:71:Iterator:"Method '__len__' is abstract in class 'Structure' but is not overridden"
-abstract-method:90:BadComplexMro:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
-abstract-method:90:BadComplexMro:"Method '__len__' is abstract in class 'AbstractSizable' but is not overridden"
-abstract-method:90:BadComplexMro:"Method 'length' is abstract in class 'AbstractSizable' but is not overridden"
+abstract-method:28:Concret:"Method 'bbbb' is abstract in class 'Abstract' but is not overridden"
+abstract-method:53:Container:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
+abstract-method:53:Container:"Method '__iter__' is abstract in class 'Structure' but is not overridden"
+abstract-method:53:Container:"Method '__len__' is abstract in class 'Structure' but is not overridden"
+abstract-method:59:Sizable:"Method '__contains__' is abstract in class 'Structure' but is not overridden"
+abstract-method:59:Sizable:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
+abstract-method:59:Sizable:"Method '__iter__' is abstract in class 'Structure' but is not overridden"
+abstract-method:65:Hashable:"Method '__contains__' is abstract in class 'Structure' but is not overridden"
+abstract-method:65:Hashable:"Method '__iter__' is abstract in class 'Structure' but is not overridden"
+abstract-method:65:Hashable:"Method '__len__' is abstract in class 'Structure' but is not overridden"
+abstract-method:70:Iterator:"Method '__contains__' is abstract in class 'Structure' but is not overridden"
+abstract-method:70:Iterator:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
+abstract-method:70:Iterator:"Method '__len__' is abstract in class 'Structure' but is not overridden"
+abstract-method:89:BadComplexMro:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
+abstract-method:89:BadComplexMro:"Method '__len__' is abstract in class 'AbstractSizable' but is not overridden"
+abstract-method:89:BadComplexMro:"Method 'length' is abstract in class 'AbstractSizable' but is not overridden"
diff --git a/pylint/test/functional/abstract_method_py3.py b/pylint/test/functional/abstract_method_py3.py index 93e2cf125..e7b044517 100644 --- a/pylint/test/functional/abstract_method_py3.py +++ b/pylint/test/functional/abstract_method_py3.py @@ -3,7 +3,6 @@ from __future__ import print_function # pylint: disable=missing-docstring, no-init, no-self-use # pylint: disable=too-few-public-methods -# pylint: disable=abstract-class-not-used import abc class Abstract(object): diff --git a/pylint/test/functional/abstract_method_py3.txt b/pylint/test/functional/abstract_method_py3.txt index fd01e9ae1..7d83f380f 100644 --- a/pylint/test/functional/abstract_method_py3.txt +++ b/pylint/test/functional/abstract_method_py3.txt @@ -1,16 +1,16 @@ -abstract-method:29:Concret:"Method 'bbbb' is abstract in class 'Abstract' but is not overridden"
-abstract-method:52:Container:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
-abstract-method:52:Container:"Method '__iter__' is abstract in class 'Structure' but is not overridden"
-abstract-method:52:Container:"Method '__len__' is abstract in class 'Structure' but is not overridden"
-abstract-method:58:Sizable:"Method '__contains__' is abstract in class 'Structure' but is not overridden"
-abstract-method:58:Sizable:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
-abstract-method:58:Sizable:"Method '__iter__' is abstract in class 'Structure' but is not overridden"
-abstract-method:64:Hashable:"Method '__contains__' is abstract in class 'Structure' but is not overridden"
-abstract-method:64:Hashable:"Method '__iter__' is abstract in class 'Structure' but is not overridden"
-abstract-method:64:Hashable:"Method '__len__' is abstract in class 'Structure' but is not overridden"
-abstract-method:69:Iterator:"Method '__contains__' is abstract in class 'Structure' but is not overridden"
-abstract-method:69:Iterator:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
-abstract-method:69:Iterator:"Method '__len__' is abstract in class 'Structure' but is not overridden"
-abstract-method:88:BadComplexMro:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
-abstract-method:88:BadComplexMro:"Method '__len__' is abstract in class 'AbstractSizable' but is not overridden"
-abstract-method:88:BadComplexMro:"Method 'length' is abstract in class 'AbstractSizable' but is not overridden"
+abstract-method:28:Concret:"Method 'bbbb' is abstract in class 'Abstract' but is not overridden"
+abstract-method:51:Container:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
+abstract-method:51:Container:"Method '__iter__' is abstract in class 'Structure' but is not overridden"
+abstract-method:51:Container:"Method '__len__' is abstract in class 'Structure' but is not overridden"
+abstract-method:57:Sizable:"Method '__contains__' is abstract in class 'Structure' but is not overridden"
+abstract-method:57:Sizable:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
+abstract-method:57:Sizable:"Method '__iter__' is abstract in class 'Structure' but is not overridden"
+abstract-method:63:Hashable:"Method '__contains__' is abstract in class 'Structure' but is not overridden"
+abstract-method:63:Hashable:"Method '__iter__' is abstract in class 'Structure' but is not overridden"
+abstract-method:63:Hashable:"Method '__len__' is abstract in class 'Structure' but is not overridden"
+abstract-method:68:Iterator:"Method '__contains__' is abstract in class 'Structure' but is not overridden"
+abstract-method:68:Iterator:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
+abstract-method:68:Iterator:"Method '__len__' is abstract in class 'Structure' but is not overridden"
+abstract-method:87:BadComplexMro:"Method '__hash__' is abstract in class 'Structure' but is not overridden"
+abstract-method:87:BadComplexMro:"Method '__len__' is abstract in class 'AbstractSizable' but is not overridden"
+abstract-method:87:BadComplexMro:"Method 'length' is abstract in class 'AbstractSizable' but is not overridden"
diff --git a/pylint/test/input/func_r0921.py b/pylint/test/input/func_r0921.py deleted file mode 100644 index 1baf0a8ef..000000000 --- a/pylint/test/input/func_r0921.py +++ /dev/null @@ -1,15 +0,0 @@ -"""test max methods""" -__revision__ = None - -class Aaaa(object): - """yo""" - def __init__(self): - pass - - def meth1(self): - """hehehe""" - raise NotImplementedError - - def meth2(self): - """hehehe""" - return 'Yo', self diff --git a/pylint/test/input/func_typecheck_callfunc_assigment.py b/pylint/test/input/func_typecheck_callfunc_assigment.py index 3a668ab21..0fb1ed4c4 100644 --- a/pylint/test/input/func_typecheck_callfunc_assigment.py +++ b/pylint/test/input/func_typecheck_callfunc_assigment.py @@ -1,4 +1,4 @@ -# pylint: disable=R0921, print-statement +# pylint: disable=print-statement """check assignment to function call where the function doesn't return 'E1111': ('Assigning to function call which doesn\'t return', diff --git a/pylint/test/messages/func_r0921.txt b/pylint/test/messages/func_r0921.txt deleted file mode 100644 index 7e9a44286..000000000 --- a/pylint/test/messages/func_r0921.txt +++ /dev/null @@ -1 +0,0 @@ -R: 4:Aaaa: Abstract class not referenced @@ -60,7 +60,7 @@ confidence= # --enable=similarities". If you want to run only the classes checker, but have # no Warning level messages displayed, use"--disable=all --enable=classes # --disable=W" -disable=C0103,C0111,C0302,C0330,C0401,C0402,C0403,C1001,E0001,E0011,E0012,E0100,E0101,E0102,E0103,E0104,E0105,E0106,E0107,E0108,E0109,E0110,E0111,E0202,E0203,E0211,E0213,E0221,E0222,E0235,E0236,E0237,E0238,E0239,E0601,E0602,E0603,E0604,E0611,E0701,E0702,E0710,E0711,E0712,E1001,E1002,E1003,E1004,E1101,E1102,E1111,E1120,E1121,E1123,E1124,E1126,E1127,E1200,E1201,E1205,E1206,E1300,E1301,E1302,E1303,E1304,E1305,E1306,E1310,E1601,E1602,E1603,E1604,E1605,E1606,E1607,E1608,F0001,F0002,F0003,F0010,F0202,F0220,F0401,I0001,I0010,I0011,I0012,I0013,I0020,I0021,I0022,R0201,R0401,R0801,R0901,R0902,R0903,R0904,R0911,R0912,R0913,R0914,R0915,R0921,R0923,W0101,W0102,W0104,W0105,W0106,W0107,W0108,W0109,W0110,W0120,W0122,W0123,W0141,W0142,W0150,W0199,W0201,W0211,W0212,W0221,W0222,W0223,W0231,W0232,W0233,W0234,W0301,W0311,W0312,W0332,W0401,W0402,W0403,W0404,W0406,W0410,W0511,W0512,W0601,W0602,W0603,W0604,W0611,W0612,W0613,W0614,W0621,W0622,W0623,W0631,W0632,W0633,W0640,W0702,W0703,W0704,W0710,W0711,W1001,W1111,W1201,W1202,W1300,W1301,W1302,W1303,W1304,W1305,W1306,W1307,W1401,W1402,W1501,W1502,W1503,W1504,W1601,W1602,W1603,W1604,W1605,W1606,W1607,W1608,W1609,W1610,W1611,W1612,W1613,W1614,W1615,W1616,W1617,W1618,W1619,W1620,W1621,W1622,W1623,W1624,W1625,W1626,W1627,W1628,W1629,W1630,W1632,W1633,W1634,W1635,W1636,W1637,W1638,W1639 +disable=C0103,C0111,C0302,C0330,C0401,C0402,C0403,C1001,E0001,E0011,E0012,E0100,E0101,E0102,E0103,E0104,E0105,E0106,E0107,E0108,E0109,E0110,E0111,E0202,E0203,E0211,E0213,E0221,E0222,E0235,E0236,E0237,E0238,E0239,E0601,E0602,E0603,E0604,E0611,E0701,E0702,E0710,E0711,E0712,E1001,E1002,E1003,E1004,E1101,E1102,E1111,E1120,E1121,E1123,E1124,E1126,E1127,E1200,E1201,E1205,E1206,E1300,E1301,E1302,E1303,E1304,E1305,E1306,E1310,E1601,E1602,E1603,E1604,E1605,E1606,E1607,E1608,F0001,F0002,F0003,F0010,F0202,F0220,F0401,I0001,I0010,I0011,I0012,I0013,I0020,I0021,I0022,R0201,R0401,R0801,R0901,R0902,R0903,R0904,R0911,R0912,R0913,R0914,R0915,R0923,W0101,W0102,W0104,W0105,W0106,W0107,W0108,W0109,W0110,W0120,W0122,W0123,W0141,W0142,W0150,W0199,W0201,W0211,W0212,W0221,W0222,W0223,W0231,W0232,W0233,W0234,W0301,W0311,W0312,W0332,W0401,W0402,W0403,W0404,W0406,W0410,W0511,W0512,W0601,W0602,W0603,W0604,W0611,W0612,W0613,W0614,W0621,W0622,W0623,W0631,W0632,W0633,W0640,W0702,W0703,W0704,W0710,W0711,W1001,W1111,W1201,W1202,W1300,W1301,W1302,W1303,W1304,W1305,W1306,W1307,W1401,W1402,W1501,W1502,W1503,W1504,W1601,W1602,W1603,W1604,W1605,W1606,W1607,W1608,W1609,W1610,W1611,W1612,W1613,W1614,W1615,W1616,W1617,W1618,W1619,W1620,W1621,W1622,W1623,W1624,W1625,W1626,W1627,W1628,W1629,W1630,W1632,W1633,W1634,W1635,W1636,W1637,W1638,W1639 [REPORTS] |