Commit d66dd5ce authored by Berker Peksag's avatar Berker Peksag

Issue #26489: Add dictionary unpacking support to Tools/parser/unparse.py

Patch by Guo Ci Teo.
parent e88dd1c3
......@@ -250,6 +250,11 @@ class UnparseTestCase(ASTTestCase):
def test_with_two_items(self):
self.check_roundtrip(with_two_items)
def test_dict_unpacking_in_dict(self):
# See issue 26489
self.check_roundtrip(r"""{**{'y': 2}, 'x': 1}""")
self.check_roundtrip(r"""{**{'y': 2}, **{'x': 1}}""")
class DirectoryTestCase(ASTTestCase):
"""Test roundtrip behaviour on all files in Lib and Lib/test."""
......
......@@ -328,6 +328,9 @@ Windows
Tools/Demos
-----------
- Issue #26489: Add dictionary unpacking support to Tools/parser/unparse.py.
Patch by Guo Ci Teo.
- Issue #26316: Fix variable name typo in Argument Clinic.
......
......@@ -393,12 +393,21 @@ class Unparser:
def _Dict(self, t):
self.write("{")
def write_pair(pair):
(k, v) = pair
def write_key_value_pair(k, v):
self.dispatch(k)
self.write(": ")
self.dispatch(v)
interleave(lambda: self.write(", "), write_pair, zip(t.keys, t.values))
def write_item(item):
k, v = item
if k is None:
# for dictionary unpacking operator in dicts {**{'y': 2}}
# see PEP 448 for details
self.write("**")
self.dispatch(v)
else:
write_key_value_pair(k, v)
interleave(lambda: self.write(", "), write_item, zip(t.keys, t.values))
self.write("}")
def _Tuple(self, t):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment