From 14626e2e8ed11cbd77bd0d47a213a35bf310030c Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 22 Feb 2011 17:52:06 +0100 Subject: [PATCH] fix off-by-one error in counting target directory for relative imports (part of PY-2816) --- .../jetbrains/python/psi/impl/PyImportReferenceImpl.java | 6 +++--- python/testData/completion/relativeImport/__init__.py | 0 python/testData/completion/relativeImport/pkg/__init__.py | 0 .../testData/completion/relativeImport/pkg/main.after.py | 1 + python/testData/completion/relativeImport/pkg/main.py | 1 + python/testData/completion/relativeImport/pkg/string.py | 0 .../testSrc/com/jetbrains/python/PythonCompletionTest.java | 7 +++++++ 7 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 python/testData/completion/relativeImport/__init__.py create mode 100644 python/testData/completion/relativeImport/pkg/__init__.py create mode 100644 python/testData/completion/relativeImport/pkg/main.after.py create mode 100644 python/testData/completion/relativeImport/pkg/main.py create mode 100644 python/testData/completion/relativeImport/pkg/string.py 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"); + } }