diff options
author | Claudiu Popa <pcmanticore@gmail.com> | 2019-06-02 09:29:36 +0200 |
---|---|---|
committer | Claudiu Popa <pcmanticore@gmail.com> | 2019-06-02 10:01:52 +0200 |
commit | 0441055d1b917781ba838b4796fe82d07ec478e3 (patch) | |
tree | 7a3039dce61f2ca7883cb95a65bc7e3411ef342d /astroid/inference.py | |
parent | a63f18dfa7e15f8243409bd121011b7c01707582 (diff) | |
download | astroid-git-0441055d1b917781ba838b4796fe82d07ec478e3.tar.gz |
Add inference support to NamedExpr nodes
Diffstat (limited to 'astroid/inference.py')
-rw-r--r-- | astroid/inference.py | 14 |
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 |