mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-28461 Fixed completion for implicit package members imported via relative imports from the same level
This commit is contained in:
@@ -16,6 +16,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
@@ -285,8 +286,8 @@ public class PyModuleType implements PyType { // Modules don't descend from obje
|
||||
private static List<QualifiedName> getImportedQNames(@NotNull PyImportElement element) {
|
||||
final List<QualifiedName> importedQNames = new ArrayList<>();
|
||||
final PyStatement stmt = element.getContainingImportStatement();
|
||||
if (stmt instanceof PyFromImportStatement) {
|
||||
final PyFromImportStatement fromImportStatement = (PyFromImportStatement)stmt;
|
||||
final PyFromImportStatement fromImportStatement = ObjectUtils.tryCast(stmt, PyFromImportStatement.class);
|
||||
if (fromImportStatement != null) {
|
||||
final QualifiedName importedQName = fromImportStatement.getImportSourceQName();
|
||||
final String visibleName = element.getVisibleName();
|
||||
if (importedQName != null) {
|
||||
@@ -316,7 +317,8 @@ public class PyModuleType implements PyType { // Modules don't descend from obje
|
||||
importedQNames.add(importedQName);
|
||||
}
|
||||
}
|
||||
if (!ResolveImportUtil.isAbsoluteImportEnabledFor(element)) {
|
||||
if (!ResolveImportUtil.isAbsoluteImportEnabledFor(element) ||
|
||||
(fromImportStatement != null && fromImportStatement.getRelativeLevel() == 1)) {
|
||||
PsiFile file = element.getContainingFile();
|
||||
if (file != null) {
|
||||
file = file.getOriginalFile();
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
import pkg1
|
||||
pkg1.<caret>
|
||||
pkg1.<caret>
|
||||
|
||||
@@ -1 +1 @@
|
||||
foo=1
|
||||
foo = 1
|
||||
|
||||
@@ -1 +1 @@
|
||||
bar = 1
|
||||
bar = 1
|
||||
|
||||
@@ -1 +1 @@
|
||||
foo2
|
||||
foo2 = 0
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
import pkg1
|
||||
pkg1.<caret>
|
||||
@@ -0,0 +1,3 @@
|
||||
from .m1 import foo
|
||||
from pkg1.pkg2 import bar
|
||||
from .pkg3 import foo2
|
||||
@@ -0,0 +1 @@
|
||||
foo = 1
|
||||
@@ -0,0 +1 @@
|
||||
bar = 1
|
||||
@@ -0,0 +1 @@
|
||||
foo2 = 0
|
||||
@@ -1255,14 +1255,25 @@ public class PythonCompletionTest extends PyTestCase {
|
||||
assertContainsElements(suggested, "__init__(self)");
|
||||
}
|
||||
|
||||
//PY-28461
|
||||
// PY-28461
|
||||
public void testImplicitImportsInsidePackage() {
|
||||
runWithLanguageLevel(LanguageLevel.PYTHON37,
|
||||
() -> doMultiFileAssertSameElements("m1", "pkg2", "pkg3", "bar", "foo", "foo2"));
|
||||
}
|
||||
|
||||
// PY-28461
|
||||
public void testImplicitImportsInsidePackagePy2() {
|
||||
runWithLanguageLevel(LanguageLevel.PYTHON27,
|
||||
() -> doMultiFileAssertSameElements("m1", "pkg2", "pkg3", "bar", "foo", "foo2"));
|
||||
}
|
||||
|
||||
private void doMultiFileAssertSameElements(String... variants) {
|
||||
myFixture.copyDirectoryToProject(getTestName(true), "");
|
||||
myFixture.configureByFile("a.py");
|
||||
myFixture.completeBasic();
|
||||
final List<String> suggested = myFixture.getLookupElementStrings();
|
||||
assertNotNull(suggested);
|
||||
assertSameElements(suggested, "m1", "pkg2", "pkg3", "bar", "foo", "foo2");
|
||||
assertSameElements(suggested, variants);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user