summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--astroid/bases.py1
-rw-r--r--astroid/context.py9
-rw-r--r--astroid/inference.py11
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: