summaryrefslogtreecommitdiff
path: root/astroid/inference.py
diff options
context:
space:
mode:
authorClaudiu Popa <pcmanticore@gmail.com>2019-06-02 09:29:36 +0200
committerClaudiu Popa <pcmanticore@gmail.com>2019-06-02 10:01:52 +0200
commit0441055d1b917781ba838b4796fe82d07ec478e3 (patch)
tree7a3039dce61f2ca7883cb95a65bc7e3411ef342d /astroid/inference.py
parenta63f18dfa7e15f8243409bd121011b7c01707582 (diff)
downloadastroid-git-0441055d1b917781ba838b4796fe82d07ec478e3.tar.gz
Add inference support to NamedExpr nodes
Diffstat (limited to 'astroid/inference.py')
-rw-r--r--astroid/inference.py14
1 files changed, 11 insertions, 3 deletions
diff --git a/astroid/inference.py b/astroid/inference.py
index 1ef5849f..1ea45248 100644
--- a/astroid/inference.py
+++ b/astroid/inference.py
@@ -71,6 +71,11 @@ def _infer_sequence_helper(node, context=None):
if not hasattr(starred, "elts"):
raise exceptions.InferenceError(node=node, context=context)
values.extend(_infer_sequence_helper(starred))
+ elif isinstance(elt, nodes.NamedExpr):
+ value = helpers.safe_infer(elt.value, context)
+ if not value:
+ raise exceptions.InferenceError(node=node, context=context)
+ values.append(value)
else:
values.append(elt)
return values
@@ -78,9 +83,10 @@ def _infer_sequence_helper(node, context=None):
@decorators.raise_if_nothing_inferred
def infer_sequence(self, context=None):
- if not any(isinstance(e, nodes.Starred) for e in self.elts):
- yield self
- else:
+ has_starred_named_expr = any(
+ isinstance(e, (nodes.Starred, nodes.NamedExpr)) for e in self.elts
+ )
+ if has_starred_named_expr:
values = _infer_sequence_helper(self, context)
new_seq = type(self)(
lineno=self.lineno, col_offset=self.col_offset, parent=self.parent
@@ -88,6 +94,8 @@ def infer_sequence(self, context=None):
new_seq.postinit(values)
yield new_seq
+ else:
+ yield self
nodes.List._infer = infer_sequence