exclude import elements when calculating the list of completion variants for a module (PY-2385)

This commit is contained in:
Dmitry Jemerov
2011-04-02 20:01:54 +02:00
parent 0562a83ca5
commit 7986ab8f77
5 changed files with 28 additions and 9 deletions
@@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableSet;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.psi.*;
@@ -14,6 +15,7 @@ import com.jetbrains.python.codeInsight.PyDynamicMember;
import com.jetbrains.python.psi.AccessDirection;
import com.jetbrains.python.psi.PyExpression;
import com.jetbrains.python.psi.PyFile;
import com.jetbrains.python.psi.PyImportElement;
import com.jetbrains.python.psi.resolve.PyResolveContext;
import com.jetbrains.python.psi.resolve.ResolveImportUtil;
import com.jetbrains.python.psi.resolve.VariantsProcessor;
@@ -111,7 +113,12 @@ public class PyModuleType implements PyType { // Modules don't descend from obje
}
if (point == ResolveImportUtil.PointInImport.NONE || point == ResolveImportUtil.PointInImport.AS_NAME) { // when not imported from, add regular attributes
final VariantsProcessor processor = new VariantsProcessor(location);
final VariantsProcessor processor = new VariantsProcessor(location, new Condition<PsiElement>() {
@Override
public boolean value(PsiElement psiElement) {
return !(psiElement instanceof PyImportElement);
}
}, null);
processor.setPlainNamesOnly(point == ResolveImportUtil.PointInImport.AS_NAME); // no parens after imported function names
myModule.processDeclarations(processor, ResolveState.initial(), null, location);
if (names_already != null) {
@@ -0,0 +1,3 @@
import b
b.da<caret>
@@ -0,0 +1,3 @@
import b
b.da<caret>
@@ -0,0 +1 @@
import datetime
@@ -21,6 +21,13 @@ public class PythonCompletionTest extends PyLightFixtureTestCase {
myFixture.checkResultByFile(testName + ".after.py");
}
private void doMultiFileTest() {
myFixture.copyDirectoryToProject("completion/" + getTestName(true), "");
myFixture.configureByFile("a.py");
myFixture.completeBasic();
myFixture.checkResultByFile("completion/" + getTestName(true) + "/a.after.py");
}
public void testLocalVar() {
doTest();
}
@@ -295,17 +302,11 @@ public class PythonCompletionTest extends PyLightFixtureTestCase {
}
public void testDuplicateImportKeyword() { // PY-3034
myFixture.copyDirectoryToProject("completion/duplicateImportKeyword", "");
myFixture.configureByFile("a.py");
myFixture.completeBasic();
myFixture.checkResultByFile("completion/duplicateImportKeyword/a.after.py");
doMultiFileTest();
}
public void testImportInMiddleOfHierarchy() { // PY-3016
myFixture.copyDirectoryToProject("completion/importInMiddleOfHierarchy", "");
myFixture.configureByFile("a.py");
myFixture.completeBasic();
myFixture.checkResultByFile("completion/importInMiddleOfHierarchy/a.after.py");
doMultiFileTest();
}
public void testLambdaInExpression() { // PY-3150
@@ -315,4 +316,8 @@ public class PythonCompletionTest extends PyLightFixtureTestCase {
public void testVeryPrivate() { // PY-3246
doTest();
}
public void testReexportModules() { // PY-2385
doMultiFileTest();
}
}