diff options
-rw-r--r-- | astroid/bases.py | 1 | ||||
-rw-r--r-- | astroid/context.py | 9 | ||||
-rw-r--r-- | astroid/inference.py | 11 |
3 files changed, 9 insertions, 12 deletions
diff --git a/astroid/bases.py b/astroid/bases.py index e783fe01..318ddb5d 100644 --- a/astroid/bases.py +++ b/astroid/bases.py @@ -117,7 +117,6 @@ class Proxy: def _infer_stmts(stmts, context, frame=None): """Return an iterator on statements inferred by each statement in *stmts*.""" - stmt = None inferred = False if context is not None: name = context.lookupname diff --git a/astroid/context.py b/astroid/context.py index 1d6dab5c..dcdd559c 100644 --- a/astroid/context.py +++ b/astroid/context.py @@ -11,6 +11,7 @@ import contextlib import copy import pprint +from typing import Optional class InferenceContext: @@ -150,7 +151,8 @@ class CallContext: self.keywords = keywords -def copy_context(context): +def copy_context(context: Optional[InferenceContext]) -> InferenceContext: + """Clone a context if given, or return a fresh contexxt""" if context is not None: return context.clone() @@ -174,9 +176,6 @@ def bind_context_to_node(context, node): :returns: A new context :rtype: InferenceContext """ - if context is not None: - context = context.clone() - else: - context = InferenceContext() + context = copy_context(context) context.boundnode = node return context diff --git a/astroid/inference.py b/astroid/inference.py index 62c06e65..ac473093 100644 --- a/astroid/inference.py +++ b/astroid/inference.py @@ -187,7 +187,7 @@ def infer_name(self, context=None): raise exceptions.NameInferenceError( name=self.name, scope=self.scope(), context=context ) - context = context.clone() + context = contextmod.copy_context(context) context.lookupname = self.name return bases._infer_stmts(stmts, context, frame) @@ -203,7 +203,7 @@ nodes.AssignName.infer_lhs = infer_name # won't work with a path wrapper @decorators.path_wrapper def infer_call(self, context=None): """infer a Call node by trying to guess what the function returns""" - callcontext = context.clone() + callcontext = contextmod.copy_context(context) callcontext.callcontext = contextmod.CallContext( args=self.args, keywords=self.keywords ) @@ -745,16 +745,15 @@ def _infer_binary_operation(left, right, binary_opnode, context, flow_factory): def _infer_binop(self, context): """Binary operation inference logic.""" - if context is None: - context = contextmod.InferenceContext() left = self.left right = self.right # we use two separate contexts for evaluating lhs and rhs because # 1. evaluating lhs may leave some undesired entries in context.path # which may not let us infer right value of rhs - lhs_context = context.clone() - rhs_context = context.clone() + context = context or contextmod.InferenceContext() + lhs_context = contextmod.copy_context(context) + rhs_context = contextmod.copy_context(context) for lhs in left.infer(context=lhs_context): if lhs is util.Uninferable: |