summaryrefslogtreecommitdiffstats
path: root/Lib/ast.py
diff options
context:
space:
mode:
authorBatuhan Taşkaya <47358913+isidentical@users.noreply.github.com>2020-03-09 20:27:03 (GMT)
committerGitHub <noreply@github.com>2020-03-09 20:27:03 (GMT)
commite7cab7f780ac253999512ee86374fc3454342811 (patch)
tree99730c46952032d120813ab45075276e9c9459ef /Lib/ast.py
parent111e4ee52a1739e7c7221adde2fc364ef4954af2 (diff)
downloadcpython-e7cab7f780ac253999512ee86374fc3454342811.zip
cpython-e7cab7f780ac253999512ee86374fc3454342811.tar.gz
cpython-e7cab7f780ac253999512ee86374fc3454342811.tar.bz2
bpo-38870: Simplify sequence interleaves in ast.unparse (GH-17892)
Diffstat (limited to 'Lib/ast.py')
-rw-r--r--Lib/ast.py37
1 files changed, 14 insertions, 23 deletions
diff --git a/Lib/ast.py b/Lib/ast.py
index 2719f6f..9a3d380 100644
--- a/Lib/ast.py
+++ b/Lib/ast.py
@@ -613,6 +613,16 @@ class _Unparser(NodeVisitor):
inter()
f(x)
+ def items_view(self, traverser, items):
+ """Traverse and separate the given *items* with a comma and append it to
+ the buffer. If *items* is a single item sequence, a trailing comma
+ will be added."""
+ if len(items) == 1:
+ traverser(items[0])
+ self.write(",")
+ else:
+ self.interleave(lambda: self.write(", "), traverser, items)
+
def fill(self, text=""):
"""Indent a piece of text and append it, according to the current
indentation level"""
@@ -1020,11 +1030,7 @@ class _Unparser(NodeVisitor):
value = node.value
if isinstance(value, tuple):
with self.delimit("(", ")"):
- if len(value) == 1:
- self._write_constant(value[0])
- self.write(",")
- else:
- self.interleave(lambda: self.write(", "), self._write_constant, value)
+ self.items_view(self._write_constant, value)
elif value is ...:
self.write("...")
else:
@@ -1116,12 +1122,7 @@ class _Unparser(NodeVisitor):
def visit_Tuple(self, node):
with self.delimit("(", ")"):
- if len(node.elts) == 1:
- elt = node.elts[0]
- self.traverse(elt)
- self.write(",")
- else:
- self.interleave(lambda: self.write(", "), self.traverse, node.elts)
+ self.items_view(self.traverse, node.elts)
unop = {"Invert": "~", "Not": "not", "UAdd": "+", "USub": "-"}
unop_precedence = {
@@ -1264,12 +1265,7 @@ class _Unparser(NodeVisitor):
if (isinstance(node.slice, Index)
and isinstance(node.slice.value, Tuple)
and node.slice.value.elts):
- if len(node.slice.value.elts) == 1:
- elt = node.slice.value.elts[0]
- self.traverse(elt)
- self.write(",")
- else:
- self.interleave(lambda: self.write(", "), self.traverse, node.slice.value.elts)
+ self.items_view(self.traverse, node.slice.value.elts)
else:
self.traverse(node.slice)
@@ -1296,12 +1292,7 @@ class _Unparser(NodeVisitor):
self.traverse(node.step)
def visit_ExtSlice(self, node):
- if len(node.dims) == 1:
- elt = node.dims[0]
- self.traverse(elt)
- self.write(",")
- else:
- self.interleave(lambda: self.write(", "), self.traverse, node.dims)
+ self.items_view(self.traverse, node.dims)
def visit_arg(self, node):
self.write(node.arg)