mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
ensure packages resolve to __init__.py when possible
This commit is contained in:
committed by
Andrey Vlasovskikh
parent
972c9fb44e
commit
bd2a9bbfee
@@ -92,7 +92,7 @@ public class PyModuleType implements PyType { // Modules don't descend from obje
|
||||
if (PyUtil.isPackage(anchor, location)) {
|
||||
final ResolveResultList implicitMembers = new ResolveResultList();
|
||||
processImplicitPackageMembers(anchor, location, importedModule, n -> name.endsWith(n), results -> {
|
||||
implicitMembers.addAll(results);
|
||||
implicitMembers.addAll(convertDirsToInit(results));
|
||||
return implicitMembers.isEmpty();
|
||||
});
|
||||
if (!implicitMembers.isEmpty()) {
|
||||
@@ -238,6 +238,20 @@ public class PyModuleType implements PyType { // Modules don't descend from obje
|
||||
}
|
||||
}
|
||||
|
||||
private static @NotNull
|
||||
List<? extends RatedResolveResult> convertDirsToInit(@NotNull List<? extends RatedResolveResult> ratedResolveList) {
|
||||
return ContainerUtil.map(ratedResolveList, result -> {
|
||||
final PsiElement element = result.getElement();
|
||||
if (element instanceof PsiDirectory) {
|
||||
final PsiElement pkgInit = PyUtil.turnDirIntoInit(element);
|
||||
return pkgInit != null ? result.replace(pkgInit) : result;
|
||||
}
|
||||
else {
|
||||
return result;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiElement resolveByMembersProviders(PyFile module, String name, @NotNull PyResolveContext resolveContext) {
|
||||
for (PyModuleMembersProvider provider : Extensions.getExtensions(PyModuleMembersProvider.EP_NAME)) {
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
import pkg1
|
||||
|
||||
pkg1.pkg2
|
||||
# #<ref>
|
||||
@@ -571,4 +571,9 @@ public class PyMultiFileResolveTest extends PyMultiFileResolveTestCase {
|
||||
prepareTestDirectory();
|
||||
assertSameElements(doMultiResolveAndGetFileUrls("pkg1/pkg2/mod1.py"), "pkg1/pkg2/mod1.py");
|
||||
}
|
||||
|
||||
public void testImportResolvesToPkgInit() {
|
||||
prepareTestDirectory();
|
||||
assertSameElements(doMultiResolveAndGetFileUrls("pkg1/pkg2/mod1.py"), "pkg1/pkg2/__init__.py");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user