[3.8] bpo-39889: Fix unparse.py for subscript. (GH-18824). (GH-18826)
(cherry picked from commit c4928fc1a8
)
This commit is contained in:
parent
d692d52f4a
commit
92b72788ec
|
@ -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."""
|
||||
|
|
|
@ -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]``).
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue