diff --git a/python/src/com/jetbrains/python/codeInsight/completion/PyKeywordCompletionContributor.java b/python/src/com/jetbrains/python/codeInsight/completion/PyKeywordCompletionContributor.java index 6642636f8bd7..387fc05830aa 100644 --- a/python/src/com/jetbrains/python/codeInsight/completion/PyKeywordCompletionContributor.java +++ b/python/src/com/jetbrains/python/codeInsight/completion/PyKeywordCompletionContributor.java @@ -254,8 +254,13 @@ public class PyKeywordCompletionContributor extends CompletionContributor { public static final PsiElementPattern.Capture IN_FROM_IMPORT_AFTER_REF = psiElement().afterLeaf( or(psiElement().withElementType(PyTokenTypes.IDENTIFIER).inside(PyReferenceExpression.class), - psiElement().withElementType(PyTokenTypes.DOT)) - ).inside(PyFromImportStatement.class); + psiElement().with(new PatternCondition("dotFollowedByWhitespace") { + @Override + public boolean accepts(@NotNull PsiElement element, ProcessingContext context) { + return element.getNode().getElementType() == PyTokenTypes.DOT && element.getNextSibling() instanceof PsiWhiteSpace; + } + })) + ).inside(PyFromImportStatement.class); public static final ElementPattern IN_WITH_AFTER_REF = psiElement().afterLeaf(psiElement().inside(psiElement(PyWithItem.class).with(new PatternCondition("withoutAsKeyword") { diff --git a/python/testSrc/com/jetbrains/python/PythonKeywordCompletionTest.java b/python/testSrc/com/jetbrains/python/PythonKeywordCompletionTest.java index e64f02ad16c3..60171fb7c899 100644 --- a/python/testSrc/com/jetbrains/python/PythonKeywordCompletionTest.java +++ b/python/testSrc/com/jetbrains/python/PythonKeywordCompletionTest.java @@ -227,4 +227,13 @@ public class PythonKeywordCompletionTest extends PyTestCase { "finally:\n" + " pass\n"), "except"); } + + // PY-15075 + public void testImportAfterWhitespaceInRelativeImport() { + List variants = doTestByText("from ..."); + assertDoesntContain(variants, "import"); + + variants = doTestByText("from ... "); + assertContainsElements(variants, "import"); + } }