mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-47307 Do not insert dot after module name in completion, drop aliases completion
Aliases were completed only when the prefix was a fully-typed alias, and it became useless without inserting a dot and calling PyUnresolvedModuleAttributeCompletionContributor afterwards IJ-MR-6806 GitOrigin-RevId: fc5b5e91911bbc85bda4da0753ad8e6da69951cb
This commit is contained in:
committed by
intellij-monorepo-bot
parent
0a7003d789
commit
b3e4cc8ba9
+3
-20
@@ -1,12 +1,9 @@
|
||||
// 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.AutoPopupController
|
||||
import com.intellij.codeInsight.completion.CompletionContributor
|
||||
import com.intellij.codeInsight.completion.CompletionParameters
|
||||
import com.intellij.codeInsight.completion.CompletionResultSet
|
||||
import com.intellij.codeInsight.completion.InsertHandler
|
||||
import com.intellij.codeInsight.lookup.LookupElement
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder
|
||||
import com.intellij.psi.MultiplePsiFilesPerDocumentFileViewProvider
|
||||
import com.intellij.psi.PsiDirectory
|
||||
@@ -16,7 +13,9 @@ import com.intellij.psi.util.QualifiedName
|
||||
import com.intellij.util.ProcessingContext
|
||||
import com.jetbrains.python.PyNames
|
||||
import com.jetbrains.python.inspections.unresolvedReference.PyPackageAliasesProvider
|
||||
import com.jetbrains.python.psi.*
|
||||
import com.jetbrains.python.psi.PyFile
|
||||
import com.jetbrains.python.psi.PyImportStatementBase
|
||||
import com.jetbrains.python.psi.PyReferenceExpression
|
||||
import com.jetbrains.python.psi.resolve.fromFoothold
|
||||
import com.jetbrains.python.psi.resolve.resolveQualifiedName
|
||||
import com.jetbrains.python.psi.types.PyModuleType
|
||||
@@ -45,26 +44,10 @@ class PyModuleNameCompletionContributor : CompletionContributor() {
|
||||
}
|
||||
|
||||
fun doFillCompletionVariants(parameters: CompletionParameters, result: CompletionResultSet) {
|
||||
val autoPopupController = AutoPopupController.getInstance(parameters.originalFile.project)
|
||||
val packageInsertHandler = InsertHandler<LookupElement> { context, _ ->
|
||||
// add dot for PyUnresolvedModuleAttributeCompletionContributor to work
|
||||
context.document.insertString(context.tailOffset, ".")
|
||||
context.editor.caretModel.moveToOffset(context.tailOffset)
|
||||
autoPopupController.autoPopupMemberLookup(context.editor, null)
|
||||
}
|
||||
val commonAlias = PyPackageAliasesProvider.commonImportAliases[result.prefixMatcher.prefix]
|
||||
if (commonAlias != null) {
|
||||
result.addElement(
|
||||
LookupElementBuilder.create(result.prefixMatcher.prefix).withTypeText(commonAlias).withInsertHandler(packageInsertHandler))
|
||||
return
|
||||
}
|
||||
getCompletionVariants(parameters.position.parent, parameters.originalFile).asSequence()
|
||||
.filterIsInstance<LookupElementBuilder>()
|
||||
.filter { result.prefixMatcher.prefixMatches(it.lookupString) }
|
||||
.filterNot { it.lookupString.startsWith('_') }
|
||||
.map {
|
||||
it.withInsertHandler(packageInsertHandler)
|
||||
}
|
||||
.forEach { result.addElement(it) }
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -110,8 +110,8 @@ class PyUnresolvedModuleAttributeCompletionContributor : CompletionContributor()
|
||||
|
||||
ProgressManager.checkCanceled()
|
||||
val qualifiedName = qualifier.append(attribute)
|
||||
val commonAlias = PyPackageAliasesProvider.commonImportAliases[qualifier.toString()]
|
||||
val packageName = if (commonAlias != null) QualifiedName.fromDottedString(commonAlias) else qualifier
|
||||
val packageNameForAlias = PyPackageAliasesProvider.commonImportAliases[qualifier.toString()]
|
||||
val packageName = if (packageNameForAlias != null) QualifiedName.fromDottedString(packageNameForAlias) else qualifier
|
||||
val resultMatchingCompleteReference = result.withPrefixMatcher(QualifiedNameMatcher(qualifiedName))
|
||||
PyModuleNameIndex.find(packageName.lastComponent!!, project, true).asSequence()
|
||||
.filter { QualifiedNameFinder.findShortestImportableQName(it) == packageName }
|
||||
@@ -126,7 +126,7 @@ class PyUnresolvedModuleAttributeCompletionContributor : CompletionContributor()
|
||||
LookupElementBuilder.create(it, qualifiedNameToSuggest)
|
||||
.withIcon(it.getIcon(0))
|
||||
.withInsertHandler(getInsertHandler(it, parameters.position))
|
||||
.withTypeText(commonAlias)
|
||||
.withTypeText(packageNameForAlias)
|
||||
}
|
||||
else null
|
||||
}
|
||||
@@ -138,7 +138,7 @@ class PyUnresolvedModuleAttributeCompletionContributor : CompletionContributor()
|
||||
}
|
||||
val scope = PySearchUtilBase.defaultSuggestionScope(parameters.originalFile)
|
||||
PyQualifiedNameCompletionMatcher.processMatchingExportedNames(
|
||||
packageName.append(attribute), if (commonAlias != null) qualifiedName else null, parameters.originalFile, scope,
|
||||
packageName.append(attribute), if (packageNameForAlias != null) qualifiedName else null, parameters.originalFile, scope,
|
||||
Processor {
|
||||
ProgressManager.checkCanceled()
|
||||
if (suggestedQualifiedNames.add(it.qualifiedName.toString())) {
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
plt.
|
||||
@@ -1 +0,0 @@
|
||||
plt<caret>
|
||||
@@ -1 +0,0 @@
|
||||
foobar.
|
||||
+1
@@ -0,0 +1 @@
|
||||
foobar
|
||||
@@ -4,15 +4,7 @@ package com.jetbrains.python;
|
||||
import com.jetbrains.python.fixtures.PyTestCase;
|
||||
|
||||
public class PyNotImportedPackageNameCompletionTest extends PyTestCase {
|
||||
public void testDotAfterPackageName() {
|
||||
final String testName = getTestName(false);
|
||||
myFixture.copyDirectoryToProject(testName, "");
|
||||
myFixture.configureByFile("main.py");
|
||||
myFixture.completeBasic();
|
||||
myFixture.checkResultByFile(testName + "/main.after.py");
|
||||
}
|
||||
|
||||
public void testCompletionForAlias() {
|
||||
public void testPackageNameBasicCompletion() {
|
||||
final String testName = getTestName(false);
|
||||
myFixture.copyDirectoryToProject(testName, "");
|
||||
myFixture.configureByFile("main.py");
|
||||
|
||||
Reference in New Issue
Block a user