Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Unified Diff: third_party/logilab/astroid/inference.py

Issue 753543006: pylint: upgrade to 1.4.0 (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/logilab/astroid/builder.py ('k') | third_party/logilab/astroid/manager.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/logilab/astroid/inference.py
diff --git a/third_party/logilab/astroid/inference.py b/third_party/logilab/astroid/inference.py
index 4186307a0e8dff0fe53d3fe14ffe1e22758f4bab..f29b3d11e79aa2857534c7ea2a54be07439188b1 100644
--- a/third_party/logilab/astroid/inference.py
+++ b/third_party/logilab/astroid/inference.py
@@ -28,7 +28,7 @@ from astroid.manager import AstroidManager
from astroid.exceptions import (AstroidError, InferenceError, NoDefault,
NotFoundError, UnresolvableName)
from astroid.bases import (YES, Instance, InferenceContext,
- _infer_stmts, copy_context, path_wrapper,
+ _infer_stmts, path_wrapper,
raise_if_nothing_infered)
from astroid.protocols import (
_arguments_infer_argname,
@@ -175,93 +175,89 @@ def infer_name(self, context=None):
if not stmts:
raise UnresolvableName(self.name)
- context = context.clone()
- context.lookupname = self.name
- return _infer_stmts(stmts, context, frame)
+ return _infer_stmts(stmts, context, frame, self.name)
nodes.Name._infer = path_wrapper(infer_name)
nodes.AssName.infer_lhs = infer_name # won't work with a path wrapper
def infer_callfunc(self, context=None):
"""infer a CallFunc node by trying to guess what the function returns"""
- callcontext = context.clone()
- callcontext.callcontext = CallContext(self.args, self.starargs, self.kwargs)
- callcontext.boundnode = None
+ if context is None:
+ context = InferenceContext()
for callee in self.func.infer(context):
- if callee is YES:
- yield callee
- continue
- try:
- if hasattr(callee, 'infer_call_result'):
- for infered in callee.infer_call_result(self, callcontext):
- yield infered
- except InferenceError:
- ## XXX log error ?
- continue
+ with context.scope(
+ callcontext=CallContext(self.args, self.starargs, self.kwargs),
+ boundnode=None,
+ ):
+ if callee is YES:
+ yield callee
+ continue
+ try:
+ if hasattr(callee, 'infer_call_result'):
+ for infered in callee.infer_call_result(self, context):
+ yield infered
+ except InferenceError:
+ ## XXX log error ?
+ continue
nodes.CallFunc._infer = path_wrapper(raise_if_nothing_infered(infer_callfunc))
-def infer_import(self, context=None, asname=True):
+def infer_import(self, context=None, asname=True, lookupname=None):
"""infer an Import node: return the imported module/object"""
- name = context.lookupname
- if name is None:
+ if lookupname is None:
raise InferenceError()
if asname:
- yield self.do_import_module(self.real_name(name))
+ yield self.do_import_module(self.real_name(lookupname))
else:
- yield self.do_import_module(name)
+ yield self.do_import_module(lookupname)
nodes.Import._infer = path_wrapper(infer_import)
def infer_name_module(self, name):
context = InferenceContext()
- context.lookupname = name
- return self.infer(context, asname=False)
+ return self.infer(context, asname=False, lookupname=name)
nodes.Import.infer_name_module = infer_name_module
-def infer_from(self, context=None, asname=True):
+def infer_from(self, context=None, asname=True, lookupname=None):
"""infer a From nodes: return the imported module/object"""
- name = context.lookupname
- if name is None:
+ if lookupname is None:
raise InferenceError()
if asname:
- name = self.real_name(name)
+ lookupname = self.real_name(lookupname)
module = self.do_import_module()
try:
- context = copy_context(context)
- context.lookupname = name
- return _infer_stmts(module.getattr(name, ignore_locals=module is self.root()), context)
+ return _infer_stmts(module.getattr(lookupname, ignore_locals=module is self.root()), context, lookupname=lookupname)
except NotFoundError:
- raise InferenceError(name)
+ raise InferenceError(lookupname)
nodes.From._infer = path_wrapper(infer_from)
def infer_getattr(self, context=None):
"""infer a Getattr node by using getattr on the associated object"""
- #context = context.clone()
+ if not context:
+ context = InferenceContext()
for owner in self.expr.infer(context):
if owner is YES:
yield owner
continue
try:
- context.boundnode = owner
- for obj in owner.igetattr(self.attrname, context):
- yield obj
- context.boundnode = None
+ with context.scope(boundnode=owner):
+ for obj in owner.igetattr(self.attrname, context):
+ yield obj
except (NotFoundError, InferenceError):
- context.boundnode = None
+ pass
except AttributeError:
# XXX method / function
- context.boundnode = None
+ pass
nodes.Getattr._infer = path_wrapper(raise_if_nothing_infered(infer_getattr))
nodes.AssAttr.infer_lhs = raise_if_nothing_infered(infer_getattr) # # won't work with a path wrapper
-def infer_global(self, context=None):
- if context.lookupname is None:
+def infer_global(self, context=None, lookupname=None):
+ if lookupname is None:
raise InferenceError()
try:
- return _infer_stmts(self.root().getattr(context.lookupname), context)
+ return _infer_stmts(self.root().getattr(lookupname), context)
except NotFoundError:
raise InferenceError()
nodes.Global._infer = path_wrapper(infer_global)
@@ -269,12 +265,12 @@ nodes.Global._infer = path_wrapper(infer_global)
def infer_subscript(self, context=None):
"""infer simple subscription such as [1,2,3][0] or (1,2,3)[-1]"""
- value = self.value.infer(context).next()
+ value = next(self.value.infer(context))
if value is YES:
yield YES
return
- index = self.slice.infer(context).next()
+ index = next(self.slice.infer(context))
if index is YES:
yield YES
return
@@ -287,6 +283,12 @@ def infer_subscript(self, context=None):
except (IndexError, TypeError):
yield YES
return
+
+ # Prevent inferring if the infered subscript
+ # is the same as the original subscripted object.
+ if self is assigned:
+ yield YES
+ return
for infered in assigned.infer(context):
yield infered
else:
@@ -347,11 +349,10 @@ def infer_binop(self, context=None):
nodes.BinOp._infer = path_wrapper(infer_binop)
-def infer_arguments(self, context=None):
- name = context.lookupname
- if name is None:
+def infer_arguments(self, context=None, lookupname=None):
+ if lookupname is None:
raise InferenceError()
- return _arguments_infer_argname(self, name, context)
+ return _arguments_infer_argname(self, lookupname, context)
nodes.Arguments._infer = infer_arguments
« no previous file with comments | « third_party/logilab/astroid/builder.py ('k') | third_party/logilab/astroid/manager.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698