PY-15119 Completion in relative imports ignores whitespaces between dots

This commit is contained in:
Mikhail Golubev
2015-07-31 17:50:03 +03:00
parent a8c57917a7
commit ddc77ab24c
8 changed files with 16 additions and 6 deletions
@@ -26,12 +26,13 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.psi.*;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.QualifiedName;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ProcessingContext;
import com.jetbrains.python.PyNames;
import com.jetbrains.python.PyTokenTypes;
import com.jetbrains.python.psi.*;
import com.intellij.psi.util.QualifiedName;
import com.jetbrains.python.psi.impl.PyPsiUtils;
import com.jetbrains.python.psi.impl.PyReferenceExpressionImpl;
import com.jetbrains.python.psi.resolve.*;
import com.jetbrains.python.psi.types.PyModuleType;
@@ -222,10 +223,10 @@ public class PyImportReference extends PyReferenceImpl {
}
}
else { // in "import _" or "from _ import"
ASTNode n = myElement.getNode().getTreePrev();
while (n != null && n.getElementType() == PyTokenTypes.DOT) {
PsiElement prevElem = PyPsiUtils.getPrevNonWhitespaceSibling(myElement);
while (prevElem != null && prevElem.getNode().getElementType() == PyTokenTypes.DOT) {
relativeLevel += 1;
n = n.getTreePrev();
prevElem = PyPsiUtils.getPrevNonWhitespaceSibling(prevElem);
}
if (fromImport != null) {
addImportedNames(fromImport.getImportElements());
@@ -0,0 +1 @@
from . . <caret>
@@ -767,6 +767,14 @@ public class PythonCompletionTest extends PyTestCase {
assertEmpty(variants);
}
// PY-15119
public void testRelativeFromImportWhitespacesAfterDot() {
myFixture.copyDirectoryToProject("completion/" + getTestName(true), "");
myFixture.configureByFile("pkg/subpkg1/a.py");
myFixture.completeBasic();
assertSameElements(myFixture.getLookupElementStrings(), "import", "subpkg1", "subpkg2", "m");
}
public void testStructuralType() {
doTest();
}
@@ -233,7 +233,7 @@ public class PythonKeywordCompletionTest extends PyTestCase {
List<String> variants = doTestByText("from ...<caret>");
assertDoesntContain(variants, "import");
variants = doTestByText("from ... <caret>");
assertContainsElements(variants, "import");
assertNull(doTestByText("from ... <caret>"));
myFixture.checkResult("from ... import ");
}
}