[Python-checkins] [3.8] bpo-39889: Fix unparse.py for subscript. (GH-18824). (GH-18826)
Miss Islington (bot)
webhook-mailer at python.org
Sat Mar 7 12:13:36 EST 2020
https://github.com/python/cpython/commit/65b031090161331470827ec809732008b15030d5
commit: 65b031090161331470827ec809732008b15030d5
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2020-03-07T09:13:31-08:00
summary:
[3.8] bpo-39889: Fix unparse.py for subscript. (GH-18824). (GH-18826)
(cherry picked from commit c4928fc1a853f3f84e2b4ec1253d0349137745e5)
(cherry picked from commit 92b72788ecf2ee5dfac780c7dfb5ee5350fc641d)
Co-authored-by: Serhiy Storchaka <storchaka at gmail.com>
files:
A Misc/NEWS.d/next/Tools-Demos/2020-03-07-18-01-30.bpo-39889.l1czT6.rst
M Lib/test/test_tools/test_unparse.py
M Tools/parser/unparse.py
diff --git a/Lib/test/test_tools/test_unparse.py b/Lib/test/test_tools/test_unparse.py
index f3386f5e31a2d..12a41c756cdde 100644
--- a/Lib/test/test_tools/test_unparse.py
+++ b/Lib/test/test_tools/test_unparse.py
@@ -260,6 +260,20 @@ def test_dict_unpacking_in_dict(self):
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."""
diff --git a/Misc/NEWS.d/next/Tools-Demos/2020-03-07-18-01-30.bpo-39889.l1czT6.rst b/Misc/NEWS.d/next/Tools-Demos/2020-03-07-18-01-30.bpo-39889.l1czT6.rst
new file mode 100644
index 0000000000000..1202cb5fa064b
--- /dev/null
+++ b/Misc/NEWS.d/next/Tools-Demos/2020-03-07-18-01-30.bpo-39889.l1czT6.rst
@@ -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]``).
diff --git a/Tools/parser/unparse.py b/Tools/parser/unparse.py
index 7e1cc4ea5db95..721ac3c6483d9 100644
--- a/Tools/parser/unparse.py
+++ b/Tools/parser/unparse.py
@@ -562,7 +562,17 @@ def _Call(self, t):
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):
@@ -587,7 +597,12 @@ def _Slice(self, t):
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):
More information about the Python-checkins
mailing list