From dd5b1887282aef3329bfa1abeed7e13614808a67 Mon Sep 17 00:00:00 2001 From: Marcus Mews Date: Tue, 5 Aug 2025 09:18:03 +0000 Subject: [PATCH] PY-22720 Extract Method does Not Preserve Existing Line Breaks - keep empty lines between statements - add test GitOrigin-RevId: 276000bdce7ffee22ecd2e03d2ec4831dd8f6725 --- .../extractmethod/PyExtractMethodUtil.java | 3 --- .../PreserveWhitespaceBetweenStatements.after.py | 12 ++++++++++++ .../PreserveWhitespaceBetweenStatements.before.py | 9 +++++++++ .../python/refactoring/PyExtractMethodTest.java | 4 ++++ 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 python/testData/refactoring/extractmethod/PreserveWhitespaceBetweenStatements.after.py create mode 100644 python/testData/refactoring/extractmethod/PreserveWhitespaceBetweenStatements.before.py diff --git a/python/python-psi-impl/src/com/jetbrains/python/refactoring/extractmethod/PyExtractMethodUtil.java b/python/python-psi-impl/src/com/jetbrains/python/refactoring/extractmethod/PyExtractMethodUtil.java index 3d49c4f0a960..031ab196e48c 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/refactoring/extractmethod/PyExtractMethodUtil.java +++ b/python/python-psi-impl/src/com/jetbrains/python/refactoring/extractmethod/PyExtractMethodUtil.java @@ -566,9 +566,6 @@ public final class PyExtractMethodUtil { final PyFunction method = builder.buildFunction(); final PyStatementList statementList = method.getStatementList(); for (PsiElement element : elementsRange) { - if (element instanceof PsiWhiteSpace) { - continue; - } statementList.add(element); } final PsiElement child = statementList.getFirstChild(); diff --git a/python/testData/refactoring/extractmethod/PreserveWhitespaceBetweenStatements.after.py b/python/testData/refactoring/extractmethod/PreserveWhitespaceBetweenStatements.after.py new file mode 100644 index 000000000000..e0b2cb6130d9 --- /dev/null +++ b/python/testData/refactoring/extractmethod/PreserveWhitespaceBetweenStatements.after.py @@ -0,0 +1,12 @@ +class Foo: + def bar(self): + print('hello') + + self.extracted() + + return self + + def extracted(self): + print('awesome') + + print('world') diff --git a/python/testData/refactoring/extractmethod/PreserveWhitespaceBetweenStatements.before.py b/python/testData/refactoring/extractmethod/PreserveWhitespaceBetweenStatements.before.py new file mode 100644 index 000000000000..c869513ccec7 --- /dev/null +++ b/python/testData/refactoring/extractmethod/PreserveWhitespaceBetweenStatements.before.py @@ -0,0 +1,9 @@ +class Foo: + def bar(self): + print('hello') + + print('awesome') + + print('world') + + return self diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java index 9b9a37d5fd59..3afd1ac048ba 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java @@ -348,4 +348,8 @@ public class PyExtractMethodTest extends LightMarkedTestCase { public void testTypedStatements() { doTest("greeting"); } + + public void testPreserveWhitespaceBetweenStatements() { + doTest("extracted"); + } }