From b55fd532586604eff6f1822ef8930efa163bf533 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Thu, 1 Feb 2024 13:53:12 +0200 Subject: [PATCH] PY-35627 Make Python formatter always add a line break after a decorator list For regular non-async functions, it already worked thanks to PyTokenSeparatorGenerator. GitOrigin-RevId: b60dba7b34710cad7dc46ad6f943b3944fc00c42 --- .../python/formatter/PythonFormattingModelBuilder.java | 2 +- .../quickFixes/PyMakeMethodStaticQuickFixTest/asyncMethod.py | 3 +++ .../PyMakeMethodStaticQuickFixTest/asyncMethod_after.py | 4 ++++ .../python/quickFixes/PyMakeMethodStaticQuickFixTest.java | 4 ++++ 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 python/testData/quickFixes/PyMakeMethodStaticQuickFixTest/asyncMethod.py create mode 100644 python/testData/quickFixes/PyMakeMethodStaticQuickFixTest/asyncMethod_after.py diff --git a/python/python-psi-impl/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java b/python/python-psi-impl/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java index 5ccea6269a6a..640e84b1c1c9 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java +++ b/python/python-psi-impl/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java @@ -122,7 +122,7 @@ public class PythonFormattingModelBuilder implements FormattingModelBuilder, Cus .before(PATTERN_ARGUMENT_LIST).spaceIf(commonSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES) .around(DECORATOR_CALL).spacing(1, Integer.MAX_VALUE, 0, true, 0) - .after(DECORATOR_LIST).spacing(1, Integer.MAX_VALUE, 0, true, 0) + .after(DECORATOR_LIST).spacing(1, Integer.MAX_VALUE, 1, true, 0) .aroundInside(EQ, ASSIGNMENT_STATEMENT).spaceIf(commonSettings.SPACE_AROUND_ASSIGNMENT_OPERATORS) .aroundInside(EQ, TYPE_ALIAS_STATEMENT).spaceIf(commonSettings.SPACE_AROUND_ASSIGNMENT_OPERATORS) diff --git a/python/testData/quickFixes/PyMakeMethodStaticQuickFixTest/asyncMethod.py b/python/testData/quickFixes/PyMakeMethodStaticQuickFixTest/asyncMethod.py new file mode 100644 index 000000000000..f82cd60df368 --- /dev/null +++ b/python/testData/quickFixes/PyMakeMethodStaticQuickFixTest/asyncMethod.py @@ -0,0 +1,3 @@ +class C: + async def m(self, p): + return f'{p}' diff --git a/python/testData/quickFixes/PyMakeMethodStaticQuickFixTest/asyncMethod_after.py b/python/testData/quickFixes/PyMakeMethodStaticQuickFixTest/asyncMethod_after.py new file mode 100644 index 000000000000..1129d3e81941 --- /dev/null +++ b/python/testData/quickFixes/PyMakeMethodStaticQuickFixTest/asyncMethod_after.py @@ -0,0 +1,4 @@ +class C: + @staticmethod + async def m(p): + return f'{p}' diff --git a/python/testSrc/com/jetbrains/python/quickFixes/PyMakeMethodStaticQuickFixTest.java b/python/testSrc/com/jetbrains/python/quickFixes/PyMakeMethodStaticQuickFixTest.java index 3029d89801ff..e69ff48579d7 100644 --- a/python/testSrc/com/jetbrains/python/quickFixes/PyMakeMethodStaticQuickFixTest.java +++ b/python/testSrc/com/jetbrains/python/quickFixes/PyMakeMethodStaticQuickFixTest.java @@ -45,4 +45,8 @@ public class PyMakeMethodStaticQuickFixTest extends PyQuickFixTestCase { doMultifilesTest(PyMethodMayBeStaticInspection.class, PyPsiBundle.message("QFIX.NAME.make.static"), new String[]{"test.py"}); } + // PY-35627 + public void testAsyncMethod() { + doQuickFixTest(PyMethodMayBeStaticInspection.class, PyPsiBundle.message("QFIX.NAME.make.static")); + } }