Support for implicit namespace packages in Python 3.3 (PY-7156)

This commit is contained in:
Andrey Vlasovskikh
2012-08-27 20:00:06 +04:00
parent 5ee402d1c6
commit 5db6ed1df7
6 changed files with 38 additions and 0 deletions

View File

@@ -648,6 +648,9 @@ public class PyUtil {
if (turnDirIntoInit(directory) != null) {
return true;
}
if (LanguageLevel.forFile(directory.getVirtualFile()).isAtLeast(LanguageLevel.PYTHON33)) {
return true;
}
return hasNamespacePackageFile(directory);
}

View File

@@ -0,0 +1,4 @@
from p1.m1 import foo
foo()
#<ref>

View File

@@ -0,0 +1,2 @@
def foo():
pass

View File

@@ -0,0 +1,4 @@
import p1
p1
#<ref>

View File

@@ -0,0 +1,2 @@
def foo():
pass

View File

@@ -404,6 +404,29 @@ public class PyMultiFileResolveTest extends PyResolveTestCase {
assertResolvesTo(PyFunction.class, "foo");
}
// PY-7156
public void testPython33NamespacePackage() {
setLanguageLevel(LanguageLevel.PYTHON33);
try {
final PsiElement element = doResolve();
assertInstanceOf(element, PyImportedModule.class);
final PyImportedModule module = (PyImportedModule)element;
assertEquals("p1", module.getImportedPrefix().toString());
} finally {
setLanguageLevel(null);
}
}
// PY-7156
public void testFromPython33NamespacePackageImport() {
setLanguageLevel(LanguageLevel.PYTHON33);
try {
assertResolvesTo(PyFunction.class, "foo");
} finally {
setLanguageLevel(null);
}
}
private void prepareTestDirectory() {
final String testName = getTestName(true);
myFixture.copyDirectoryToProject(testName, "");