mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Don't ignore files and resolve modules in them (PY-28764)
This commit is contained in:
@@ -122,7 +122,7 @@ private fun resolveModuleFromRoots(name: QualifiedName, context: PyQualifiedName
|
||||
return nameNoHead.components.fold(resultsFromRoots(head, context)) { results, component ->
|
||||
findFirstResults(results, context.module)
|
||||
.asSequence()
|
||||
.filterIsInstance<PsiDirectory>()
|
||||
.filterIsInstance<PsiFileSystemItem>()
|
||||
.flatMap { resolveModuleAt(QualifiedName.fromComponents(component), it, context).asSequence() }
|
||||
.toList()
|
||||
}
|
||||
@@ -143,15 +143,15 @@ fun resolveTopLevelMember(name: QualifiedName, context : PyQualifiedNameResolveC
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves a [name] relative to the specified [directory].
|
||||
* Resolves a [name] relative to the specified [item].
|
||||
*/
|
||||
fun resolveModuleAt(name: QualifiedName, directory: PsiDirectory?, context: PyQualifiedNameResolveContext): List<PsiElement> {
|
||||
fun resolveModuleAt(name: QualifiedName, item: PsiFileSystemItem?, context: PyQualifiedNameResolveContext): List<PsiElement> {
|
||||
checkAccess()
|
||||
val empty = emptyList<PsiElement>()
|
||||
if (directory == null || !directory.isValid) {
|
||||
if (item == null || !item.isValid) {
|
||||
return empty
|
||||
}
|
||||
return name.components.fold(listOf<PsiElement>(directory)) { seekers, component ->
|
||||
return name.components.fold(listOf<PsiElement>(item)) { seekers, component ->
|
||||
if (component == null) empty
|
||||
else seekers.flatMap {
|
||||
val children = ResolveImportUtil.resolveChildren(it, component, context.footholdFile, !context.withMembers,
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
from os.path import join
|
||||
# <ref>
|
||||
@@ -0,0 +1,4 @@
|
||||
if a:
|
||||
import posixpath as path
|
||||
elif b:
|
||||
import ntpath as path
|
||||
@@ -24,6 +24,7 @@ import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -559,4 +560,26 @@ public class PyMultiFileResolveTest extends PyMultiFileResolveTestCase {
|
||||
prepareTestDirectory();
|
||||
assertSameElements(doMultiResolveAndGetFileUrls("pkg1/pkg2/mod1.py"), "pkg1/pkg2/__init__.py");
|
||||
}
|
||||
|
||||
// PY-28764
|
||||
public void testOsAttributesFromPosixPathAndNTPath() {
|
||||
myFixture.copyDirectoryToProject(getTestName(true), "");
|
||||
|
||||
runWithSourceRoots(
|
||||
Collections.singletonList(myFixture.findFileInTempDir("lib")),
|
||||
() -> {
|
||||
final PsiReference reference = PyResolveTestCase.findReferenceByMarker(myFixture.configureByFile("a.py"));
|
||||
assertInstanceOf(reference, PsiPolyVariantReference.class);
|
||||
|
||||
final List<PsiElement> elements = PyUtil.multiResolveTopPriority((PsiPolyVariantReference)reference);
|
||||
assertEquals(1, elements.size());
|
||||
|
||||
final PsiElement element = elements.get(0);
|
||||
assertInstanceOf(element, PyFile.class);
|
||||
|
||||
final VirtualFile file = ((PyFile)element).getVirtualFile();
|
||||
assertEquals("ntpath.py", file.getName());
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user