From cddc9e26218fb4a77d5baf184a96817d94937d1c Mon Sep 17 00:00:00 2001 From: dryobates Date: Tue, 15 Mar 2022 23:05:15 +0100 Subject: [PATCH 1/3] test(extract-method) recreating bug: Unable do extract method with try and subscriptable refs #459 --- ropetest/refactor/extracttest.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/ropetest/refactor/extracttest.py b/ropetest/refactor/extracttest.py index 93db1cb63..44404a1f4 100644 --- a/ropetest/refactor/extracttest.py +++ b/ropetest/refactor/extracttest.py @@ -1762,6 +1762,30 @@ def g(): """) self.assertEqual(expected, refactored) + def test_extract_method_and_augmentedj_assignment_in_try_block(self): + code = dedent("""\ + def f(): + any_subscriptable = [0] + try: + any_subscriptable[0] += 1 + except Exception: + pass + """) + start, end = self._convert_line_range_to_offset(code, 2, 6) + refactored = self.do_extract_method(code, start, end, "g") + expected = dedent("""\ + def f(): + g() + + def g(): + any_subscriptable = [0] + try: + any_subscriptable[0] += 1 + except Exception: + pass + """) + self.assertEqual(expected, refactored) + def test_extract_and_not_passing_global_functions(self): code = dedent("""\ def next(p): From fad37df0cefdfa8243ecdbf49b172f6acd476084 Mon Sep 17 00:00:00 2001 From: dryobates Date: Tue, 15 Mar 2022 23:13:03 +0100 Subject: [PATCH 2/3] fix(extract-method): Add support for augmented assignments to subscriptable inside try..except block fixes #459 --- rope/refactor/extract.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/rope/refactor/extract.py b/rope/refactor/extract.py index 650a2992a..f48210461 100644 --- a/rope/refactor/extract.py +++ b/rope/refactor/extract.py @@ -843,8 +843,12 @@ def _Assign(self, node): def _AugAssign(self, node): ast.walk(node.value, self) - self._read_variable(node.target.id, node.target.lineno) - self._written_variable(node.target.id, node.target.lineno) + if isinstance(node.target, ast.Subscript): + target_id = node.target.value.id + else: + target_id = node.target.id + self._read_variable(target_id, node.target.lineno) + self._written_variable(target_id, node.target.lineno) def _ClassDef(self, node): self._written_variable(node.name, node.lineno) From 9d780ebbe47e54d44ae9482c4f384d1bb428216a Mon Sep 17 00:00:00 2001 From: dryobates Date: Tue, 15 Mar 2022 23:25:04 +0100 Subject: [PATCH 3/3] docs(CHANGELOG): Information on bug #459 --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51e5b0364..4e1dcfc9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # **Upcoming release** +## Bug fixes + +- #459 Fix bug while extracting method with augmented assignment to subscript in try block (@dryobates) + # Release 0.23.0 ## Syntax support