From cce1381e3ed6f3bdf4422921b7bf8904779bbeae Mon Sep 17 00:00:00 2001 From: aldwinaldwin Date: Tue, 13 Aug 2019 17:21:10 +0800 Subject: [PATCH 1/4] bpo-12611: 2to3 crashes when converting doctest using reduce() --- Lib/lib2to3/refactor.py | 13 +++++++++++-- Lib/lib2to3/tests/test_fixers.py | 24 ++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Lib/lib2to3/refactor.py b/Lib/lib2to3/refactor.py index 55fd60fa27c3da..3ec50458a9b57d 100644 --- a/Lib/lib2to3/refactor.py +++ b/Lib/lib2to3/refactor.py @@ -592,12 +592,21 @@ def refactor_doctest(self, block, lineno, indent, filename): return block if self.refactor_tree(tree, filename): new = str(tree).splitlines(keepends=True) + # Adjust lineno for lines inserted before + jmp = 0 + for n in new: + if n == '\n': break + jmp += 1 + pre = new[:jmp] # Undo the adjustment of the line numbers in wrap_toks() below. - clipped, new = new[:lineno-1], new[lineno-1:] + clipped, new = new[jmp:lineno-1+jmp], new[lineno-1+jmp:] assert clipped == ["\n"] * (lineno-1), clipped if not new[-1].endswith("\n"): new[-1] += "\n" - block = [indent + self.PS1 + new.pop(0)] + block = [] + if pre: + block += [indent + self.PS1 + line for line in pre] + block += [indent + self.PS1 + new.pop(0)] if new: block += [indent + self.PS2 + line for line in new] return block diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py index 3da5dd845c93c6..446b79a357435c 100644 --- a/Lib/lib2to3/tests/test_fixers.py +++ b/Lib/lib2to3/tests/test_fixers.py @@ -428,6 +428,30 @@ def test_unchanged(self): s = "reduce()" self.unchanged(s) +class Test_doctests(FixerTestCase): + fixer = "reduce" + + def check(self, before, after, ignore_warnings=False): + before = support.reformat(before) + after = support.reformat(after) + output = self.refactor.refactor_docstring(before, self.filename) + self.assertEqual(after, output) + + def test_reduce(self): + # See issue 12611 + b = """\ + ''' + >>> reduce(lambda x, y: x + y, seq) + ''' + """ + a = """\ + ''' + >>> from functools import reduce + >>> reduce(lambda x, y: x + y, seq) + ''' + """ + self.check(b, a) + class Test_print(FixerTestCase): fixer = "print" From 3ee64d022abcd7782a5daa3145f4975c42ee4a1a Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2019 09:27:25 +0000 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../next/Tools/Demos/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Tools/Demos/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst diff --git a/Misc/NEWS.d/next/Tools/Demos/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst b/Misc/NEWS.d/next/Tools/Demos/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst new file mode 100644 index 00000000000000..0eef9a8797d649 --- /dev/null +++ b/Misc/NEWS.d/next/Tools/Demos/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst @@ -0,0 +1 @@ +2to3 converting doctest using reduce(). Patch by Aldwin Pollefeyt \ No newline at end of file From 70d5875b6442bc7b0e837406a3cd772b8b0ea8df Mon Sep 17 00:00:00 2001 From: aldwinaldwin Date: Wed, 14 Aug 2019 15:44:11 +0800 Subject: [PATCH 3/4] moved news to correct directory --- .../2019-08-13-09-27-23.bpo-12611.e06VtJ.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename Misc/NEWS.d/next/{Tools/Demos => Tools-Demos}/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst (95%) diff --git a/Misc/NEWS.d/next/Tools/Demos/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst b/Misc/NEWS.d/next/Tools-Demos/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst similarity index 95% rename from Misc/NEWS.d/next/Tools/Demos/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst rename to Misc/NEWS.d/next/Tools-Demos/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst index 0eef9a8797d649..0b82e1a6c9288f 100644 --- a/Misc/NEWS.d/next/Tools/Demos/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst +++ b/Misc/NEWS.d/next/Tools-Demos/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst @@ -1 +1 @@ -2to3 converting doctest using reduce(). Patch by Aldwin Pollefeyt \ No newline at end of file +2to3 converting doctest using reduce(). Patch by Aldwin Pollefeyt. From 520a7f6fb0fb924f316659cee1ae240d317632e9 Mon Sep 17 00:00:00 2001 From: aldwinaldwin Date: Wed, 14 Aug 2019 15:57:09 +0800 Subject: [PATCH 4/4] moved news to Library --- .../2019-08-13-09-27-23.bpo-12611.e06VtJ.rst | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Misc/NEWS.d/next/{Tools-Demos => Library}/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst (100%) diff --git a/Misc/NEWS.d/next/Tools-Demos/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst b/Misc/NEWS.d/next/Library/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst similarity index 100% rename from Misc/NEWS.d/next/Tools-Demos/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst rename to Misc/NEWS.d/next/Library/2019-08-13-09-27-23.bpo-12611.e06VtJ.rst