From fcbd54c22c19c0db7825ba44cab8b71e9ff38398 Mon Sep 17 00:00:00 2001 From: Lie Ryan Date: Wed, 14 Dec 2022 16:27:06 +1100 Subject: [PATCH] Fix #567. Add posonlyargs to list of written arguments when extracting --- rope/refactor/extract.py | 5 ++++- ropetest/refactor/extracttest.py | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/rope/refactor/extract.py b/rope/refactor/extract.py index 2771092fe..ae2caab88 100644 --- a/rope/refactor/extract.py +++ b/rope/refactor/extract.py @@ -947,7 +947,10 @@ def _handle_loop_context(self, node): def _get_argnames(arguments): - result = [node.arg for node in arguments.args if isinstance(node, ast.arg)] + result = [] + if arguments.posonlyargs: + result.extend(node.arg for node in arguments.posonlyargs) + result.extend(node.arg for node in arguments.args if isinstance(node, ast.arg)) if arguments.vararg: result.append(arguments.vararg.arg) if arguments.kwarg: diff --git a/ropetest/refactor/extracttest.py b/ropetest/refactor/extracttest.py index 865404d04..8a320e028 100644 --- a/ropetest/refactor/extracttest.py +++ b/ropetest/refactor/extracttest.py @@ -222,6 +222,24 @@ def new_func(a_var, another_var): """) self.assertEqual(expected, refactored) + def test_extract_function_with_posonlyargs(self): + code = dedent("""\ + def a_func(a_var, /, b): + another_var = 20 + third_var = a_var + another_var + """) + start, end = self._convert_line_range_to_offset(code, 3, 3) + refactored = self.do_extract_method(code, start, end, "new_func") + expected = dedent("""\ + def a_func(a_var, /, b): + another_var = 20 + new_func(a_var, another_var) + + def new_func(a_var, another_var): + third_var = a_var + another_var + """) + self.assertEqual(expected, refactored) + def test_extract_function_with_multiple_return_values(self): code = dedent("""\ def a_func():