diff --git a/python/src/com/jetbrains/python/codeInsight/editorActions/moveUpDown/StatementMover.java b/python/src/com/jetbrains/python/codeInsight/editorActions/moveUpDown/StatementMover.java index 6b77985a6aef..fe32c7f3072b 100644 --- a/python/src/com/jetbrains/python/codeInsight/editorActions/moveUpDown/StatementMover.java +++ b/python/src/com/jetbrains/python/codeInsight/editorActions/moveUpDown/StatementMover.java @@ -394,13 +394,14 @@ public class StatementMover extends LineMover { PyElement statementPart1 = statementParts.first; PyElement statementPart2 = statementParts.second; if (statementPart2 instanceof PyStatementPart) { - PyStatementList stList = ((PyStatementPart)statementParts.second).getStatementList(); + PyStatementList stList = ((PyStatementPart)statementPart2).getStatementList(); if (stList != null && stList.getStatements().length == 1 && stList.getStatements()[0] instanceof PyPassStatement || moveToEmptyLine) { myStatementPartToRemovePass = (PyStatementPart)statementParts.second; } } - return !(statementPart1 instanceof PyExceptPart) && + final boolean fromExceptToElse = statementPart1 instanceof PyExceptPart && statementPart2 instanceof PyTryPart; + return !fromExceptToElse && statementPart2 != null && statementPart1 != null && statementPart1.getParent() == statementPart2.getParent() || diff --git a/python/testData/mover/exceptElse.py b/python/testData/mover/exceptElse.py new file mode 100644 index 000000000000..469663f0e259 --- /dev/null +++ b/python/testData/mover/exceptElse.py @@ -0,0 +1,7 @@ + +try: + print(zoo(1).foo(2)) +except: + print(zoo(0).foo(2)) # <- move statement up here +else: + a = 1 \ No newline at end of file diff --git a/python/testData/mover/exceptElse_afterDown.py b/python/testData/mover/exceptElse_afterDown.py new file mode 100644 index 000000000000..2488e4ff09d9 --- /dev/null +++ b/python/testData/mover/exceptElse_afterDown.py @@ -0,0 +1,8 @@ + +try: + print(zoo(1).foo(2)) +except: + pass +else: + print(zoo(0).foo(2)) # <- move statement up here + a = 1 \ No newline at end of file diff --git a/python/testData/mover/exceptElse_afterUp.py b/python/testData/mover/exceptElse_afterUp.py new file mode 100644 index 000000000000..3e94dfae3420 --- /dev/null +++ b/python/testData/mover/exceptElse_afterUp.py @@ -0,0 +1,8 @@ + +try: + print(zoo(1).foo(2)) + print(zoo(0).foo(2)) # <- move statement up here +except: + pass +else: + a = 1 \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java b/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java index bd0249521b96..c633d21e389d 100644 --- a/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java +++ b/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java @@ -141,6 +141,10 @@ public class PyStatementMoverTest extends PyTestCase { doTest(); } + public void testExceptElse() { // PY-6482 + doTest(); + } + public void testOneLineCompound() { // PY-5198 doTest(); }