diff --git a/python/src/com/jetbrains/python/codeInsight/PyClassNameCompletionContributor.java b/python/src/com/jetbrains/python/codeInsight/PyClassNameCompletionContributor.java index 3b61aa7c564e..6e4d19fec21b 100644 --- a/python/src/com/jetbrains/python/codeInsight/PyClassNameCompletionContributor.java +++ b/python/src/com/jetbrains/python/codeInsight/PyClassNameCompletionContributor.java @@ -43,7 +43,6 @@ public class PyClassNameCompletionContributor extends CompletionContributor { @NotNull final CompletionResultSet resultSet) { addVariantsFromIndex(resultSet, parameters.getOriginalFile(), PyClassNameIndex.KEY, CLASS_INSERT_HANDLER, Conditions.alwaysTrue()); addVariantsFromIndex(resultSet, parameters.getOriginalFile(), PyFunctionNameIndex.KEY, FUNCTION_INSERT_HANDLER, TOPLEVEL_FUNCTION); - ProjectScope.getAllScope(parameters.getOriginalFile().getProject()); } }); } diff --git a/python/src/com/jetbrains/python/formatter/PyBlock.java b/python/src/com/jetbrains/python/formatter/PyBlock.java index 10e355f9abb4..82d77decb709 100644 --- a/python/src/com/jetbrains/python/formatter/PyBlock.java +++ b/python/src/com/jetbrains/python/formatter/PyBlock.java @@ -141,7 +141,7 @@ public class PyBlock implements ASTBlock { childIndent = Indent.getNoneIndent(); } else { - childIndent = Indent.getContinuationIndent(); + childIndent = Indent.getNormalIndent(); } } else if (parentType == PyElementTypes.ARGUMENT_LIST) { @@ -152,7 +152,7 @@ public class PyBlock implements ASTBlock { childIndent = Indent.getNormalIndent(); } } - else if (parentType == PyElementTypes.DICT_LITERAL_EXPRESSION) { + else if (parentType == PyElementTypes.DICT_LITERAL_EXPRESSION || parentType == PyElementTypes.SET_LITERAL_EXPRESSION) { if (childType == PyTokenTypes.RBRACE) { childIndent = Indent.getNoneIndent(); } @@ -211,7 +211,9 @@ public class PyBlock implements ASTBlock { private boolean needListAlignment(ASTNode child) { IElementType childType = child.getElementType(); - if (PyTokenTypes.OPEN_BRACES.contains(childType)) { + ASTNode firstGrandchild = child.getFirstChildNode(); + IElementType firstGrandchildType = firstGrandchild == null ? null : firstGrandchild.getElementType(); + if (PyTokenTypes.OPEN_BRACES.contains(childType) || PyTokenTypes.OPEN_BRACES.contains(firstGrandchildType)) { return false; } if (PyTokenTypes.CLOSE_BRACES.contains(childType)) { diff --git a/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java index 0c6fc66c907b..4b7d15e5263d 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java @@ -97,15 +97,15 @@ public class PyFromImportStatementImpl extends PyBaseElementImpl \ No newline at end of file diff --git a/python/testData/completion/pep328/package/subpackage1/moduleX.py b/python/testData/completion/pep328/package/subpackage1/moduleX.py new file mode 100644 index 000000000000..1e9f9b6be9d2 --- /dev/null +++ b/python/testData/completion/pep328/package/subpackage1/moduleX.py @@ -0,0 +1 @@ +from ..subpackage2.mo \ No newline at end of file diff --git a/python/testData/completion/pep328/package/subpackage2/__init__.py b/python/testData/completion/pep328/package/subpackage2/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/completion/pep328/package/subpackage2/moduleZ.py b/python/testData/completion/pep328/package/subpackage2/moduleZ.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testSrc/com/jetbrains/python/PyIndentTest.java b/python/testSrc/com/jetbrains/python/PyIndentTest.java index 5cd39c0783d6..e79dcba68aae 100644 --- a/python/testSrc/com/jetbrains/python/PyIndentTest.java +++ b/python/testSrc/com/jetbrains/python/PyIndentTest.java @@ -192,6 +192,26 @@ public class PyIndentTest extends PyLightFixtureTestCase { " params=1)"); } + public void testEnterInSet() { // PY-1947 + doTest("test_set = {'some_value'}", + "test_set = {\n" + + " 'some_value'}"); + + } + + public void testEnterInList() { // PY-1947 + doTest("test_list = ['some_value']", + "test_list = [\n" + + " 'some_value']"); + } + + public void testEnterInDictInTuple() { // PY-1947 + doTest("td = ({})", + "td = ({\n" + + " \n" + + "})"); + } + public void testIndentAfterComment() { // PY-641 doTest("def foo():\n #some_call()\n another_call()", "def foo():\n #some_call()\n \n another_call()"); } diff --git a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java index 5401090efda1..afe6abd1459b 100644 --- a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java +++ b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java @@ -352,4 +352,11 @@ public class PythonCompletionTest extends PyLightFixtureTestCase { public void testNoneInArgList() { // PY-3464 doTest3K(); } + + public void testPep328Completion() { // PY-3409 + myFixture.copyDirectoryToProject("completion/pep328", "pep328"); + myFixture.configureByFile("pep328/package/subpackage1/moduleX.py"); + myFixture.completeBasic(); + myFixture.checkResultByFile("completion/pep328/package/subpackage1/moduleX.after.py"); + } }