From 05ec42064388689a256dd31304001908575ca02a Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 5 Jul 2011 15:02:52 +0200 Subject: [PATCH] fixed a case when formatter breaks code (PY-4034 comment) --- python/src/com/jetbrains/python/formatter/PyBlock.java | 5 +++-- python/testData/formatter/tupleAssignment.py | 8 ++++++++ python/testData/formatter/tupleAssignment_after.py | 8 ++++++++ python/testSrc/com/jetbrains/python/PyFormatterTest.java | 4 ++++ 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 python/testData/formatter/tupleAssignment.py create mode 100644 python/testData/formatter/tupleAssignment_after.py diff --git a/python/src/com/jetbrains/python/formatter/PyBlock.java b/python/src/com/jetbrains/python/formatter/PyBlock.java index 40169cac6b31..2b03588bd7b4 100644 --- a/python/src/com/jetbrains/python/formatter/PyBlock.java +++ b/python/src/com/jetbrains/python/formatter/PyBlock.java @@ -177,7 +177,7 @@ public class PyBlock implements ASTBlock { childIndent = Indent.getNormalIndent(); } } - else if (parentType == PyElementTypes.PARENTHESIZED_EXPRESSION) { + else if (parentType == PyElementTypes.PARENTHESIZED_EXPRESSION && hasLineBreaksBefore(child, 1)) { childIndent = Indent.getNormalIndent(); } @@ -242,7 +242,8 @@ public class PyBlock implements ASTBlock { } private static boolean hasLineBreaksBefore(ASTNode child, int minCount) { - return isWhitespaceWithLineBreaks(TreeUtil.findLastLeaf(child.getTreePrev()), minCount) || + final ASTNode treePrev = child.getTreePrev(); + return (treePrev != null && isWhitespaceWithLineBreaks(TreeUtil.findLastLeaf(treePrev), minCount)) || isWhitespaceWithLineBreaks(child.getFirstChildNode(), minCount); } diff --git a/python/testData/formatter/tupleAssignment.py b/python/testData/formatter/tupleAssignment.py new file mode 100644 index 000000000000..3218dc78e424 --- /dev/null +++ b/python/testData/formatter/tupleAssignment.py @@ -0,0 +1,8 @@ +def bad_autoformat_example(): + a = 5 + b = 10 + print a, b + (a, b) = b, a + print a, b + a, b = b, a + print a, b \ No newline at end of file diff --git a/python/testData/formatter/tupleAssignment_after.py b/python/testData/formatter/tupleAssignment_after.py new file mode 100644 index 000000000000..3218dc78e424 --- /dev/null +++ b/python/testData/formatter/tupleAssignment_after.py @@ -0,0 +1,8 @@ +def bad_autoformat_example(): + a = 5 + b = 10 + print a, b + (a, b) = b, a + print a, b + a, b = b, a + print a, b \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyFormatterTest.java b/python/testSrc/com/jetbrains/python/PyFormatterTest.java index 80e4413d11cd..3bb0f3af12ed 100644 --- a/python/testSrc/com/jetbrains/python/PyFormatterTest.java +++ b/python/testSrc/com/jetbrains/python/PyFormatterTest.java @@ -113,6 +113,10 @@ public class PyFormatterTest extends PyLightFixtureTestCase { doTest(); } + public void testTupleAssignment() { // PY-4034 comment + doTest(); + } + public void testPsiFormatting() { // IDEA-69724 String initial = "def method_name(\n" +