summaryrefslogtreecommitdiff
path: root/pylint/checkers/classes.py
diff options
context:
space:
mode:
Diffstat (limited to 'pylint/checkers/classes.py')
-rw-r--r--pylint/checkers/classes.py58
1 files changed, 28 insertions, 30 deletions
diff --git a/pylint/checkers/classes.py b/pylint/checkers/classes.py
index edbc36b..e573153 100644
--- a/pylint/checkers/classes.py
+++ b/pylint/checkers/classes.py
@@ -21,7 +21,6 @@ import sys
from collections import defaultdict
import astroid
-from astroid import YES, Instance, are_exclusive, AssAttr, Class
from astroid.bases import Generator, BUILTINS
from astroid.exceptions import InconsistentMroError, DuplicateBasesError
from astroid import objects
@@ -62,7 +61,7 @@ def _called_in_methods(func, klass, methods):
""" Check if the func was called in any of the given methods,
belonging to the *klass*. Returns True if so, False otherwise.
"""
- if not isinstance(func, astroid.Function):
+ if not isinstance(func, astroid.FunctionDef):
return False
for method in methods:
try:
@@ -70,7 +69,7 @@ def _called_in_methods(func, klass, methods):
except astroid.NotFoundError:
continue
for infer_method in infered:
- for callfunc in infer_method.nodes_of_class(astroid.CallFunc):
+ for callfunc in infer_method.nodes_of_class(astroid.Call):
try:
bound = next(callfunc.func.infer())
except (astroid.InferenceError, StopIteration):
@@ -115,7 +114,7 @@ def _is_attribute_property(name, klass):
infered = next(attr.infer())
except astroid.InferenceError:
continue
- if (isinstance(infered, astroid.Function) and
+ if (isinstance(infered, astroid.FunctionDef) and
decorated_with_property(infered)):
return True
if infered.pytype() == property_name:
@@ -258,7 +257,7 @@ class ClassChecker(BaseChecker):
priority = -2
# configuration options
options = (('ignore-iface-methods',
- # TODO(cpopa): remove this in Pylint 1.7.
+ # TODO(cpopa): remove this in Pylint 1.6.
deprecated_option(opt_type="csv",
help_msg="This is deprecated, because "
"it is not used anymore.")
@@ -337,13 +336,13 @@ a metaclass class method.'}
"""
for base in node.bases:
ancestor = helpers.safe_infer(base)
- if ancestor in (YES, None):
+ if ancestor in (astroid.YES, None):
continue
if (isinstance(ancestor, astroid.Instance) and
ancestor.is_subtype_of('%s.type' % (BUILTINS,))):
continue
- if (not isinstance(ancestor, astroid.Class) or
+ if (not isinstance(ancestor, astroid.ClassDef) or
_is_invalid_base_class(ancestor)):
self.add_message('inherit-non-class',
args=base.as_string(), node=node)
@@ -433,13 +432,13 @@ a metaclass class method.'}
# dictionary.
# This may happen with astroid build from living objects
continue
- if not isinstance(meth_node, astroid.Function):
+ if not isinstance(meth_node, astroid.FunctionDef):
continue
self._check_signature(node, meth_node, 'overridden', klass)
break
if node.decorators:
for decorator in node.decorators.nodes:
- if isinstance(decorator, astroid.Getattr) and \
+ if isinstance(decorator, astroid.Attribute) and \
decorator.attrname in ('getter', 'setter', 'deleter'):
# attribute affectation will call this method, not hiding it
return
@@ -451,10 +450,10 @@ a metaclass class method.'}
try:
overridden = klass.instance_attr(node.name)[0] # XXX
overridden_frame = overridden.frame()
- if (isinstance(overridden_frame, astroid.Function)
+ if (isinstance(overridden_frame, astroid.FunctionDef)
and overridden_frame.type == 'method'):
overridden_frame = overridden_frame.parent.frame()
- if (isinstance(overridden_frame, Class)
+ if (isinstance(overridden_frame, astroid.ClassDef)
and klass.is_subtype_of(overridden_frame.qname())):
args = (overridden.root().name, overridden.fromlineno)
self.add_message('method-hidden', args=args, node=node)
@@ -487,7 +486,7 @@ a metaclass class method.'}
values = [item[0] for item in slots.items]
else:
values = slots.itered()
- if values is YES:
+ if values is astroid.YES:
return
for elt in values:
@@ -498,7 +497,7 @@ a metaclass class method.'}
def _check_slots_elt(self, elt):
for infered in elt.infer():
- if infered is YES:
+ if infered is astroid.YES:
continue
if (not isinstance(infered, astroid.Const) or
not isinstance(infered.value, six.string_types)):
@@ -547,7 +546,7 @@ a metaclass class method.'}
self._check_protected_attribute_access(node)
def visit_assattr(self, node):
- if isinstance(node.ass_type(), astroid.AugAssign) and self.is_first_attr(node):
+ if isinstance(node.assign_type(), astroid.AugAssign) and self.is_first_attr(node):
self._accessed[-1][node.attrname].append(node)
self._check_in_slots(node)
@@ -556,7 +555,7 @@ a metaclass class method.'}
is defined in the class slots.
"""
infered = helpers.safe_infer(node.expr)
- if infered and isinstance(infered, Instance):
+ if infered and isinstance(infered, astroid.Instance):
klass = infered._proxied
if '__slots__' not in klass.locals or not klass.newstyle:
return
@@ -585,7 +584,7 @@ a metaclass class method.'}
@check_messages('protected-access')
def visit_assign(self, assign_node):
node = assign_node.targets[0]
- if not isinstance(node, AssAttr):
+ if not isinstance(node, astroid.AssignAttr):
return
if self.is_first_attr(node):
@@ -621,7 +620,7 @@ a metaclass class method.'}
return
# If the expression begins with a call to super, that's ok.
- if isinstance(node.expr, astroid.CallFunc) and \
+ if isinstance(node.expr, astroid.Call) and \
isinstance(node.expr.func, astroid.Name) and \
node.expr.func.name == 'super':
return
@@ -639,7 +638,7 @@ a metaclass class method.'}
try:
if (isinstance(stmt, astroid.Assign) and
(stmt in klass.body or klass.parent_of(stmt)) and
- isinstance(stmt.value, astroid.CallFunc) and
+ isinstance(stmt.value, astroid.Call) and
isinstance(stmt.value.func, astroid.Name) and
stmt.value.func.name == 'property' and
is_builtin_object(next(stmt.value.func.infer(), None))):
@@ -659,6 +658,7 @@ a metaclass class method.'}
def _check_accessed_members(self, node, accessed):
"""check that accessed members are defined"""
# XXX refactor, probably much simpler now that E0201 is in type checker
+ excs = ('AttributeError', 'Exception', 'BaseException')
for attr, nodes in six.iteritems(accessed):
try:
# is it a class attribute ?
@@ -701,8 +701,7 @@ a metaclass class method.'}
lno = defstmt.fromlineno
for _node in nodes:
if _node.frame() is frame and _node.fromlineno < lno \
- and not are_exclusive(_node.statement(), defstmt,
- ('AttributeError', 'Exception', 'BaseException')):
+ and not astroid.are_exclusive(_node.statement(), defstmt, excs):
self.add_message('access-member-before-definition',
node=_node, args=(attr, lno))
@@ -808,19 +807,19 @@ a metaclass class method.'}
klass_node = node.parent.frame()
to_call = _ancestors_to_call(klass_node)
not_called_yet = dict(to_call)
- for stmt in node.nodes_of_class(astroid.CallFunc):
+ for stmt in node.nodes_of_class(astroid.Call):
expr = stmt.func
- if not isinstance(expr, astroid.Getattr) \
+ if not isinstance(expr, astroid.Attribute) \
or expr.attrname != '__init__':
continue
# skip the test if using super
- if isinstance(expr.expr, astroid.CallFunc) and \
+ if isinstance(expr.expr, astroid.Call) and \
isinstance(expr.expr.func, astroid.Name) and \
expr.expr.func.name == 'super':
return
try:
for klass in expr.expr.infer():
- if klass is YES:
+ if klass is astroid.YES:
continue
# The infered klass can be super(), which was
# assigned to a variable and the `__init__`
@@ -830,7 +829,7 @@ a metaclass class method.'}
# base.__init__(...)
if (isinstance(klass, astroid.Instance) and
- isinstance(klass._proxied, astroid.Class) and
+ isinstance(klass._proxied, astroid.ClassDef) and
is_builtin_object(klass._proxied) and
klass._proxied.name == 'super'):
return
@@ -852,8 +851,8 @@ a metaclass class method.'}
def _check_signature(self, method1, refmethod, class_type, cls):
"""check that the signature of the two given methods match
"""
- if not (isinstance(method1, astroid.Function)
- and isinstance(refmethod, astroid.Function)):
+ if not (isinstance(method1, astroid.FunctionDef)
+ and isinstance(refmethod, astroid.FunctionDef)):
self.add_message('method-check-failed',
args=(method1, refmethod), node=method1)
return
@@ -875,7 +874,7 @@ a metaclass class method.'}
# which shouldn't be taken in consideration.
if method1.decorators:
for decorator in method1.decorators.nodes:
- if (isinstance(decorator, astroid.Getattr) and
+ if (isinstance(decorator, astroid.Attribute) and
decorator.attrname == 'setter'):
return
@@ -982,7 +981,7 @@ class SpecialMethodsChecker(BaseChecker):
return
for infered_node in infered:
- if (infered_node is YES
+ if (infered_node is astroid.YES
or isinstance(infered_node, Generator)):
continue
if isinstance(infered_node, astroid.Instance):
@@ -1020,4 +1019,3 @@ def register(linter):
"""required method to auto register this checker """
linter.register_checker(ClassChecker(linter))
linter.register_checker(SpecialMethodsChecker(linter))
-