mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
PY-46361 Don't suggest stubs from legacy python-skeletons for auto import
GitOrigin-RevId: ec56e579d0240cb03b2f16bb468b7a1be6a95762
This commit is contained in:
committed by
intellij-monorepo-bot
parent
8910b97535
commit
55e52c42b6
+5
-2
@@ -10,6 +10,7 @@ import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.jetbrains.python.PyNames;
|
||||
import com.jetbrains.python.codeInsight.PyCodeInsightSettings;
|
||||
import com.jetbrains.python.codeInsight.userSkeletons.PyUserSkeletonsUtil;
|
||||
import com.jetbrains.python.inspections.unresolvedReference.PyPackageAliasesProvider;
|
||||
import com.jetbrains.python.psi.*;
|
||||
import com.jetbrains.python.psi.impl.PyFileImpl;
|
||||
@@ -106,8 +107,10 @@ public class PyImportCollector {
|
||||
|
||||
private void addSymbolImportCandidates(PsiFile existingImportFile) {
|
||||
Project project = myNode.getProject();
|
||||
List<PsiNamedElement> symbols = new ArrayList<>(PyClassNameIndex.find(myRefText, project, true));
|
||||
GlobalSearchScope scope = PySearchUtilBase.excludeSdkTestsScope(myNode);
|
||||
GlobalSearchScope scope = PySearchUtilBase.excludeSdkTestsScope(myNode)
|
||||
.intersectWith(GlobalSearchScope.notScope(PyUserSkeletonsUtil.getUserSkeletonsDirectoryScope(project)));
|
||||
|
||||
List<PsiNamedElement> symbols = new ArrayList<>(PyClassNameIndex.find(myRefText, project, scope));
|
||||
if (!isQualifier()) {
|
||||
symbols.addAll(PyFunctionNameIndex.find(myRefText, project, scope));
|
||||
}
|
||||
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
class MyView(<error descr="Unresolved reference 'View'">Vi<caret>ew</error>):
|
||||
pass
|
||||
+1
@@ -0,0 +1 @@
|
||||
<error descr="Unresolved reference 'django'">dj<caret>ango</error>.settings
|
||||
@@ -20,7 +20,9 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
@@ -29,10 +31,15 @@ import com.jetbrains.python.codeInsight.PyCodeInsightSettings;
|
||||
import com.jetbrains.python.codeInsight.imports.AutoImportQuickFix;
|
||||
import com.jetbrains.python.codeInsight.imports.ImportCandidateHolder;
|
||||
import com.jetbrains.python.codeInsight.imports.PythonImportUtils;
|
||||
import com.jetbrains.python.codeInsight.userSkeletons.PyUserSkeletonsUtil;
|
||||
import com.jetbrains.python.formatter.PyCodeStyleSettings;
|
||||
import com.jetbrains.python.inspections.unresolvedReference.PyUnresolvedReferencesInspection;
|
||||
import com.jetbrains.python.psi.LanguageLevel;
|
||||
import com.jetbrains.python.psi.PyClass;
|
||||
import com.jetbrains.python.psi.PyFile;
|
||||
import com.jetbrains.python.psi.PyReferenceExpression;
|
||||
import com.jetbrains.python.psi.stubs.PyClassNameIndex;
|
||||
import com.jetbrains.python.psi.stubs.PyModuleNameIndex;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -129,7 +136,9 @@ public class PyAddImportQuickFixTest extends PyQuickFixTestCase {
|
||||
|
||||
// PY-25234
|
||||
public void testUserSkeletonStdlibModule() {
|
||||
doMultiFileAutoImportTest("Import 'alembic'");
|
||||
runWithAdditionalClassEntryInSdkRoots(getTestName(true) + "/site-packages", () -> {
|
||||
doMultiFileAutoImportTest("Import 'alembic'");
|
||||
});
|
||||
}
|
||||
|
||||
// PY-16176
|
||||
@@ -326,6 +335,26 @@ public class PyAddImportQuickFixTest extends PyQuickFixTestCase {
|
||||
doMultiFileAutoImportTest("Import 'matplotlib.pyplot as plt' locally");
|
||||
}
|
||||
|
||||
// PY-46361
|
||||
public void testPackagesFromPythonSkeletonsNotSuggested() {
|
||||
GlobalSearchScope scope = GlobalSearchScope.allScope(myFixture.getProject());
|
||||
List<PyFile> djangoPackages = PyModuleNameIndex.findByQualifiedName(QualifiedName.fromComponents("django"),
|
||||
myFixture.getProject(), scope);
|
||||
PyFile djangoPackage = assertOneElement(djangoPackages);
|
||||
assertTrue(PyUserSkeletonsUtil.isUnderUserSkeletonsDirectory(djangoPackage));
|
||||
|
||||
doMultiFileNegativeTest("Import");
|
||||
}
|
||||
|
||||
// PY-46361
|
||||
public void testClassesFromPythonSkeletonsNotSuggested() {
|
||||
PyClass djangoViewClass = PyClassNameIndex.findClass("django.views.generic.base.View", myFixture.getProject());
|
||||
assertNotNull(djangoViewClass);
|
||||
assertTrue(PyUserSkeletonsUtil.isUnderUserSkeletonsDirectory(djangoViewClass.getContainingFile()));
|
||||
|
||||
doMultiFileNegativeTest("Import");
|
||||
}
|
||||
|
||||
private void doTestProposedImportsOrdering(String @NotNull ... expected) {
|
||||
doMultiFileAutoImportTest("Import", fix -> {
|
||||
final List<String> candidates = ContainerUtil.map(fix.getCandidates(), c -> c.getPresentableText());
|
||||
|
||||
Reference in New Issue
Block a user