mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 06:05:01 +07:00
PY-85270 [python] Remove PyModuleNameCompletionContributor
GitOrigin-RevId: d4fe03f17b800f26067b970b6aae0d3179b11f37
This commit is contained in:
committed by
intellij-monorepo-bot
parent
6048958235
commit
b4db1f83a9
@@ -12,7 +12,6 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.python.codeInsight.PyCodeInsightSettings;
|
||||
import com.jetbrains.python.codeInsight.completion.PyModuleNameCompletionContributor;
|
||||
import com.jetbrains.python.codeInsight.typing.PyTypeShed;
|
||||
import com.jetbrains.python.documentation.docstrings.DocStringFormat;
|
||||
import com.jetbrains.python.fixture.PythonCommonTestCase;
|
||||
@@ -29,7 +28,6 @@ public abstract class PythonCommonCompletionTest extends PythonCommonTestCase {
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
myFixture.setTestDataPath(getTestDataPath());
|
||||
PyModuleNameCompletionContributor.ENABLED = false;
|
||||
}
|
||||
|
||||
protected void doTest() {
|
||||
|
||||
-104
@@ -1,104 +0,0 @@
|
||||
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.jetbrains.python.codeInsight.completion
|
||||
|
||||
import com.intellij.codeInsight.completion.CompletionContributor
|
||||
import com.intellij.codeInsight.completion.CompletionParameters
|
||||
import com.intellij.codeInsight.completion.CompletionResultSet
|
||||
import com.intellij.codeInsight.completion.PrioritizedLookupElement
|
||||
import com.intellij.codeInsight.lookup.LookupElement
|
||||
import com.intellij.openapi.project.DumbAware
|
||||
import com.intellij.psi.MultiplePsiFilesPerDocumentFileViewProvider
|
||||
import com.intellij.psi.PsiDirectory
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.util.PsiTreeUtil
|
||||
import com.intellij.psi.util.QualifiedName
|
||||
import com.intellij.util.ProcessingContext
|
||||
import com.jetbrains.python.PyNames
|
||||
import com.jetbrains.python.PythonRuntimeService
|
||||
import com.jetbrains.python.codeInsight.completion.PythonCompletionWeigher.NOT_IMPORTED_MODULE_WEIGHT
|
||||
import com.jetbrains.python.psi.PyFile
|
||||
import com.jetbrains.python.psi.PyImportStatementBase
|
||||
import com.jetbrains.python.psi.PyReferenceExpression
|
||||
import com.jetbrains.python.psi.PyTargetExpression
|
||||
import com.jetbrains.python.psi.resolve.fromFoothold
|
||||
import com.jetbrains.python.psi.resolve.resolveQualifiedName
|
||||
import com.jetbrains.python.psi.types.PyModuleType
|
||||
import com.jetbrains.python.psi.types.PyType
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
|
||||
/**
|
||||
* Adds completion variants for modules and packages, inserts a dot after and calls completion on the result,
|
||||
* see [PyUnresolvedModuleAttributeCompletionContributor]
|
||||
*/
|
||||
class PyModuleNameCompletionContributor : CompletionContributor(), DumbAware {
|
||||
|
||||
companion object {
|
||||
// temporary solution for tests that are not prepared for module name completion firing everywhere
|
||||
@TestOnly
|
||||
@JvmField
|
||||
var ENABLED = true
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether completion should be performed for a given [parameters] and delegates actual work to [doFillCompletionVariants].
|
||||
*/
|
||||
override fun fillCompletionVariants(parameters: CompletionParameters, result: CompletionResultSet) {
|
||||
if (!shouldDoCompletion(parameters)) return
|
||||
|
||||
val otherVariants = mutableSetOf<String>()
|
||||
result.runRemainingContributors(parameters) {
|
||||
otherVariants.add(it.lookupElement.lookupString)
|
||||
result.passResult(it)
|
||||
}
|
||||
doFillCompletionVariants(parameters, result, otherVariants)
|
||||
}
|
||||
|
||||
private fun doFillCompletionVariants(parameters: CompletionParameters, result: CompletionResultSet, otherVariants: Set<String>) {
|
||||
getCompletionVariants(parameters.position.parent, parameters.originalFile, otherVariants).asSequence()
|
||||
.filterIsInstance<LookupElement>()
|
||||
.filterNot { it.lookupString.startsWith('_') }
|
||||
.filter { result.prefixMatcher.isStartMatch(it) }
|
||||
.forEach { result.addElement(PrioritizedLookupElement.withPriority(it, NOT_IMPORTED_MODULE_WEIGHT.toDouble())) }
|
||||
}
|
||||
|
||||
private fun getCompletionVariants(element: PsiElement, file: PsiElement, otherVariants: Set<String>): List<Any> {
|
||||
val alreadyAddedNames = HashSet<String>(otherVariants)
|
||||
val result = ArrayList<Any>()
|
||||
resolveQualifiedName(QualifiedName.fromComponents(), fromFoothold(file))
|
||||
.asSequence()
|
||||
.filterIsInstance<PsiDirectory>()
|
||||
.forEach {
|
||||
val initPy = it.findFile(PyNames.INIT_DOT_PY)
|
||||
if (initPy is PyFile) {
|
||||
val moduleType = PyModuleType(initPy)
|
||||
val context = ProcessingContext()
|
||||
context.put(PyType.CTX_NAMES, alreadyAddedNames)
|
||||
val completionVariants = moduleType.getCompletionVariants("", element, context)
|
||||
result.addAll(listOf(*completionVariants))
|
||||
}
|
||||
else {
|
||||
result.addAll(PyModuleType.getSubModuleVariants(it, element, alreadyAddedNames))
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
private fun shouldDoCompletion(parameters: CompletionParameters): Boolean {
|
||||
if (!ENABLED || PythonRuntimeService.getInstance().isInPydevConsole(parameters.originalFile)) {
|
||||
return false
|
||||
}
|
||||
|
||||
val element = parameters.position
|
||||
val parent = element.parent
|
||||
|
||||
val provider = element.containingFile.viewProvider
|
||||
if (provider is MultiplePsiFilesPerDocumentFileViewProvider) {
|
||||
return false
|
||||
}
|
||||
|
||||
return parent is PyReferenceExpression
|
||||
&& !parent.isQualified
|
||||
&& parameters.originalPosition?.parent !is PyTargetExpression
|
||||
&& PsiTreeUtil.getParentOfType(element, PyImportStatementBase::class.java) == null
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,6 @@ import com.intellij.testFramework.PsiTestUtil;
|
||||
import com.intellij.testFramework.TestDataPath;
|
||||
import com.intellij.testFramework.fixtures.TestLookupElementPresentation;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.python.codeInsight.completion.PyModuleNameCompletionContributor;
|
||||
import com.jetbrains.python.fixtures.PyTestCase;
|
||||
import com.jetbrains.python.formatter.PyCodeStyleSettings;
|
||||
import com.jetbrains.python.inspections.PyMethodParametersInspection;
|
||||
@@ -181,7 +180,6 @@ public class Py3CompletionTest extends PyTestCase {
|
||||
}
|
||||
|
||||
public void testAsync() {
|
||||
PyModuleNameCompletionContributor.ENABLED = false;
|
||||
doTest();
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.jetbrains.python;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightSettings;
|
||||
import com.intellij.codeInsight.completion.impl.CamelHumpMatcher;
|
||||
import com.jetbrains.python.codeInsight.completion.PyModuleNameCompletionContributor;
|
||||
import com.jetbrains.python.fixtures.PyTestCase;
|
||||
import com.jetbrains.python.psi.LanguageLevel;
|
||||
|
||||
@@ -13,7 +12,6 @@ public class PythonKeywordCompletionTest extends PyTestCase {
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
PyModuleNameCompletionContributor.ENABLED = false;
|
||||
}
|
||||
|
||||
private void doTest() {
|
||||
|
||||
@@ -45,7 +45,6 @@ import com.intellij.util.CommonProcessors.CollectProcessor;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.jetbrains.python.PythonLanguage;
|
||||
import com.jetbrains.python.PythonTestUtil;
|
||||
import com.jetbrains.python.codeInsight.completion.PyModuleNameCompletionContributor;
|
||||
import com.jetbrains.python.codeInsight.typing.PyBundledStubs;
|
||||
import com.jetbrains.python.codeInsight.typing.PyTypeShed;
|
||||
import com.jetbrains.python.documentation.PyDocumentationSettings;
|
||||
@@ -96,7 +95,6 @@ public abstract class PyTestCase extends UsefulTestCase {
|
||||
if (myFixture.getModule() != null) {
|
||||
PyNamespacePackagesService.getInstance(myFixture.getModule()).resetAllNamespacePackages();
|
||||
}
|
||||
PyModuleNameCompletionContributor.ENABLED = true;
|
||||
setLanguageLevel(null);
|
||||
|
||||
myFixture.tearDown();
|
||||
|
||||
Reference in New Issue
Block a user