mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Don't use relative import resolving for references in user skeletons
This commit is contained in:
@@ -24,16 +24,17 @@ import com.intellij.openapi.projectRoots.SdkModificator;
|
||||
import com.intellij.openapi.roots.OrderRootType;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.jetbrains.python.PythonHelpersLocator;
|
||||
import com.jetbrains.python.codeInsight.controlflow.ScopeOwner;
|
||||
import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil;
|
||||
import com.jetbrains.python.psi.*;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.jetbrains.python.psi.resolve.*;
|
||||
import com.jetbrains.python.psi.types.PyClassLikeType;
|
||||
import com.jetbrains.python.psi.types.PyType;
|
||||
@@ -77,6 +78,12 @@ public class PyUserSkeletonsUtil {
|
||||
return ourUserSkeletonsDirectory;
|
||||
}
|
||||
|
||||
public static boolean isUnderUserSkeletonsDirectory(@NotNull PsiFile file) {
|
||||
final VirtualFile skeletonsDir = getUserSkeletonsDirectory();
|
||||
final VirtualFile virtualFile = file.getVirtualFile();
|
||||
return skeletonsDir != null && virtualFile != null && VfsUtilCore.isAncestor(skeletonsDir, virtualFile, false);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static <T extends PyElement> T getUserSkeleton(@NotNull T element) {
|
||||
final PsiFile file = element.getContainingFile();
|
||||
|
||||
@@ -28,12 +28,12 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.jetbrains.python.codeInsight.userSkeletons.PyUserSkeletonsUtil;
|
||||
import com.jetbrains.python.console.PydevConsoleRunner;
|
||||
import com.jetbrains.python.facet.PythonPathContributingFacet;
|
||||
import com.jetbrains.python.psi.impl.PyBuiltinCache;
|
||||
import com.jetbrains.python.psi.impl.PyImportResolver;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -216,9 +216,8 @@ public class QualifiedNameResolverImpl implements RootVisitor, QualifiedNameReso
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
if (myRelativeLevel >= 0) {
|
||||
PsiFile footholdFile = myContext.getFootholdFile();
|
||||
assert footholdFile != null;
|
||||
final PsiFile footholdFile = myContext.getFootholdFile();
|
||||
if (myRelativeLevel >= 0 && footholdFile != null && !PyUserSkeletonsUtil.isUnderUserSkeletonsDirectory(footholdFile)) {
|
||||
PsiDirectory dir = footholdFile.getContainingDirectory();
|
||||
if (myRelativeLevel > 0) {
|
||||
dir = ResolveImportUtil.stepBackFrom(footholdFile, myRelativeLevel);
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
from io import BytesIO
|
||||
|
||||
fd = BytesIO('foo')
|
||||
fd.read(10) # Should resolve
|
||||
fd.<warning descr="Unresolved attribute reference 'foo' for class 'BytesIO'">foo</warning>()
|
||||
+4
@@ -318,6 +318,10 @@ public class PyUnresolvedReferencesInspectionTest extends PyTestCase {
|
||||
doMultiFileTest("a.py");
|
||||
}
|
||||
|
||||
public void testBytesIORead() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
private void doTest() {
|
||||
myFixture.configureByFile(TEST_DIRECTORY + getTestName(true) + ".py");
|
||||
myFixture.enableInspections(PyUnresolvedReferencesInspection.class);
|
||||
|
||||
Reference in New Issue
Block a user