[3.8] bpo-39889: Fix unparse.py for subscript. (GH-18824). (GH-18826)

(cherry picked from commit c4928fc1a8)
This commit is contained in:
Serhiy Storchaka 2020-03-07 18:55:32 +02:00 committed by GitHub
parent d692d52f4a
commit 92b72788ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 2 deletions

View File

@ -265,6 +265,20 @@ class UnparseTestCase(ASTTestCase):
self.check_roundtrip(r"""{**{'y': 2}, 'x': 1}""")
self.check_roundtrip(r"""{**{'y': 2}, **{'x': 1}}""")
def test_subscript(self):
self.check_roundtrip("a[i]")
self.check_roundtrip("a[i,]")
self.check_roundtrip("a[i, j]")
self.check_roundtrip("a[()]")
self.check_roundtrip("a[i:j]")
self.check_roundtrip("a[:j]")
self.check_roundtrip("a[i:]")
self.check_roundtrip("a[i:j:k]")
self.check_roundtrip("a[:j:k]")
self.check_roundtrip("a[i::k]")
self.check_roundtrip("a[i:j,]")
self.check_roundtrip("a[i:j, k]")
class DirectoryTestCase(ASTTestCase):
"""Test roundtrip behaviour on all files in Lib and Lib/test."""

View File

@ -0,0 +1,3 @@
Fixed ``unparse.py`` for extended slices containing a single element (e.g.
``a[i:j,]``). Remove redundant tuples when index with a tuple (e.g. ``a[i,
j]``).

View File

@ -556,7 +556,17 @@ class Unparser:
def _Subscript(self, t):
self.dispatch(t.value)
self.write("[")
self.dispatch(t.slice)
if (isinstance(t.slice, ast.Index)
and isinstance(t.slice.value, ast.Tuple)
and t.slice.value.elts):
if len(t.slice.value.elts) == 1:
elt = t.slice.value.elts[0]
self.dispatch(elt)
self.write(",")
else:
interleave(lambda: self.write(", "), self.dispatch, t.slice.value.elts)
else:
self.dispatch(t.slice)
self.write("]")
def _Starred(self, t):
@ -581,7 +591,12 @@ class Unparser:
self.dispatch(t.step)
def _ExtSlice(self, t):
interleave(lambda: self.write(', '), self.dispatch, t.dims)
if len(t.dims) == 1:
elt = t.dims[0]
self.dispatch(elt)
self.write(",")
else:
interleave(lambda: self.write(', '), self.dispatch, t.dims)
# argument
def _arg(self, t):