mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-47304 Keep showing direct (non-fuzzy) module attributes after dot in completion
Previously, we accidentally offered immediate attributes of a module only right after a dot in a non-imported qualified name (i.e., with an empty attribute name). If a qualified name of a fuzzy variant matched that of a direct attribute, it went unnoticed. However, if a name was non-trivially exported, as in case of "_pytest.mark.structures.MARK_GEN" exported as "pytest.mark", its expected name, as an attribute of pytest module, disappeared immediately as one started typing anything past the dot in "pytest.". GitOrigin-RevId: 5fbd7bd77fd1629f4d852b757d350cc182b991d7
This commit is contained in:
committed by
intellij-monorepo-bot
parent
23103c4883
commit
8faf6e47bb
+1
-1
@@ -119,7 +119,7 @@ class PyUnresolvedModuleAttributeCompletionContributor : CompletionContributor()
|
||||
.filter { it.containingFile != null }
|
||||
.filterNot { it is PsiFileSystemItem }
|
||||
.filterNot { it.name == null || it.name!!.startsWith('_') }
|
||||
.filter { attribute.isEmpty() || resultMatchingCompleteReference.prefixMatcher.prefixMatches(it.name!!) }
|
||||
.filter { attribute.isEmpty() || resultMatchingCompleteReference.prefixMatcher.prefixMatches("$packageName.${it.name}") }
|
||||
.mapNotNull {
|
||||
val qualifiedNameToSuggest = "$qualifier.${it.name}"
|
||||
if (suggestedQualifiedNames.add(qualifiedNameToSuggest)) {
|
||||
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
def bar():
|
||||
pass
|
||||
+1
@@ -0,0 +1 @@
|
||||
from _impl import bar
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
import foo
|
||||
|
||||
foo.bar()
|
||||
+1
@@ -0,0 +1 @@
|
||||
foo.ba<caret>
|
||||
@@ -75,38 +75,30 @@ public class PyNotImportedQualifiedNameCompletionTest extends PyTestCase {
|
||||
}
|
||||
|
||||
public void testImportForModuleFunction() {
|
||||
final String testName = getTestName(false);
|
||||
myFixture.copyDirectoryToProject(testName, "");
|
||||
myFixture.configureByFile("main.py");
|
||||
myFixture.completeBasic();
|
||||
myFixture.checkResultByFile(testName + "/main.after.py");
|
||||
doTestBasicCompletion();
|
||||
}
|
||||
|
||||
public void testImportForModuleClass() {
|
||||
final String testName = getTestName(false);
|
||||
myFixture.copyDirectoryToProject(testName, "");
|
||||
myFixture.configureByFile("main.py");
|
||||
myFixture.completeBasic();
|
||||
myFixture.checkResultByFile(testName + "/main.after.py");
|
||||
doTestBasicCompletion();
|
||||
}
|
||||
|
||||
public void testImportForAlias() {
|
||||
final String testName = getTestName(false);
|
||||
myFixture.copyDirectoryToProject(testName, "");
|
||||
myFixture.configureByFile("main.py");
|
||||
myFixture.completeBasic();
|
||||
myFixture.checkResultByFile(testName + "/main.after.py");
|
||||
doTestBasicCompletion();
|
||||
}
|
||||
|
||||
public void testImportForAliasWithNonEmptyAttribute() {
|
||||
final String testName = getTestName(false);
|
||||
myFixture.copyDirectoryToProject(testName, "");
|
||||
myFixture.configureByFile("main.py");
|
||||
myFixture.completeBasic();
|
||||
myFixture.checkResultByFile(testName + "/main.after.py");
|
||||
doTestBasicCompletion();
|
||||
}
|
||||
|
||||
public void testUseImportPriorityWhenAddingImport() {
|
||||
doTestBasicCompletion();
|
||||
}
|
||||
|
||||
public void testDirectModuleAttributesSuggestedForNonEmptyAttributePrefix() {
|
||||
doTestBasicCompletion();
|
||||
}
|
||||
|
||||
private void doTestBasicCompletion() {
|
||||
final String testName = getTestName(false);
|
||||
myFixture.copyDirectoryToProject(testName, "");
|
||||
myFixture.configureByFile("main.py");
|
||||
|
||||
Reference in New Issue
Block a user