diff --git a/python/src/com/jetbrains/python/psi/impl/PyImportReferenceImpl.java b/python/src/com/jetbrains/python/psi/impl/PyImportReferenceImpl.java index 87dde5032591..ff1cafceac55 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyImportReferenceImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyImportReferenceImpl.java @@ -146,7 +146,7 @@ public class PyImportReferenceImpl extends PyReferenceImpl { } public Object[] execute() { - int relative_level = 0; + int relative_level = -1; Condition node_filter = new PyResolveUtil.FilterNameNotIn(myNamesAlready); InsertHandler insertHandler = null; @@ -208,7 +208,7 @@ public class PyImportReferenceImpl extends PyReferenceImpl { } } // look at dir by level - if (myCurrentFile != null && (relative_level > 0 || !ResolveImportUtil.isAbsoluteImportEnabledFor(myCurrentFile))) { + if (myCurrentFile != null && (relative_level >= 0 || !ResolveImportUtil.isAbsoluteImportEnabledFor(myCurrentFile))) { PyQualifiedName thisQName = ResolveImportUtil.findShortestImportableQName(myCurrentFile.getContainingDirectory()); if (thisQName == null) { fillFromDir(ResolveImportUtil.stepBackFrom(myCurrentFile, relative_level), insertHandler); @@ -219,7 +219,7 @@ public class PyImportReferenceImpl extends PyReferenceImpl { } } } - if (relative_level == 0) { + if (relative_level == -1) { fillFromQName(PyQualifiedName.fromComponents(), insertHandler); } diff --git a/python/testData/completion/relativeImport/__init__.py b/python/testData/completion/relativeImport/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/completion/relativeImport/pkg/__init__.py b/python/testData/completion/relativeImport/pkg/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/completion/relativeImport/pkg/main.after.py b/python/testData/completion/relativeImport/pkg/main.after.py new file mode 100644 index 000000000000..489e5789fc9b --- /dev/null +++ b/python/testData/completion/relativeImport/pkg/main.after.py @@ -0,0 +1 @@ +from .string import \ No newline at end of file diff --git a/python/testData/completion/relativeImport/pkg/main.py b/python/testData/completion/relativeImport/pkg/main.py new file mode 100644 index 000000000000..8330a71f2409 --- /dev/null +++ b/python/testData/completion/relativeImport/pkg/main.py @@ -0,0 +1 @@ +from .s \ No newline at end of file diff --git a/python/testData/completion/relativeImport/pkg/string.py b/python/testData/completion/relativeImport/pkg/string.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java index 49b45ee1daf6..275adcb814fc 100644 --- a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java +++ b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java @@ -275,4 +275,11 @@ public class PythonCompletionTest extends PyLightFixtureTestCase { public void testSuperClassAttributesNoCompletionInFunc() { doTest(); } + + public void testRelativeImport() { // PY-2816 + myFixture.copyDirectoryToProject("completion/relativeImport", "relativeImport"); + myFixture.configureByFile("relativeImport/pkg/main.py"); + myFixture.completeBasic(); + myFixture.checkResultByFile("completion/relativeImport/pkg/main.after.py"); + } }