summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudiu Popa <cpopa@cloudbasesolutions.com>2015-03-11 18:15:47 +0200
committerClaudiu Popa <cpopa@cloudbasesolutions.com>2015-03-11 18:15:47 +0200
commit5f6964648de47f9f418c38a898ba34c265676bf5 (patch)
tree70122ed95c139d0598fa57094b12aece4e1acb87
parent407d2ab9ea9516ea190733a7542ddf57ed89fb8f (diff)
downloadpylint-5f6964648de47f9f418c38a898ba34c265676bf5.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.py39
-rw-r--r--pylint/test/functional/abstract_class_instantiated_py2.py2
-rw-r--r--pylint/test/functional/abstract_class_instantiated_py3.py1
-rw-r--r--pylint/test/functional/abstract_class_instantiated_py3.txt8
-rw-r--r--pylint/test/functional/abstract_class_instantiated_py34.py4
-rw-r--r--pylint/test/functional/abstract_method_py2.py1
-rw-r--r--pylint/test/functional/abstract_method_py2.txt32
-rw-r--r--pylint/test/functional/abstract_method_py3.py1
-rw-r--r--pylint/test/functional/abstract_method_py3.txt32
-rw-r--r--pylint/test/input/func_r0921.py15
-rw-r--r--pylint/test/input/func_typecheck_callfunc_assigment.py2
-rw-r--r--pylint/test/messages/func_r0921.txt1
-rw-r--r--pylintrc2
13 files changed, 45 insertions, 95 deletions
diff --git a/pylint/checkers/design_analysis.py b/pylint/checkers/design_analysis.py
index fe5e973..9ff10bf 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 2fc575a..9b3f315 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 561c605..be26b8c 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 b2e70a0..6469929 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 8f710a2..4dadef4 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 341f5de..a7c0d6b 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 4ccf9ca..ce0c617 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 93e2cf1..e7b0445 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 fd01e9a..7d83f38 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 1baf0a8..0000000
--- 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 3a668ab..0fb1ed4 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 7e9a442..0000000
--- a/pylint/test/messages/func_r0921.txt
+++ /dev/null
@@ -1 +0,0 @@
-R: 4:Aaaa: Abstract class not referenced
diff --git a/pylintrc b/pylintrc
index e1a8f4b..bd60a2a 100644
--- a/pylintrc
+++ b/pylintrc
@@ -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]