From e62d70bc566ed40ed34413f1e24ad444efc61eae Mon Sep 17 00:00:00 2001 From: "andrey.matveev" Date: Thu, 5 Sep 2019 11:52:53 +0700 Subject: [PATCH] Fix PY-7018 GitOrigin-RevId: 56344326c46ce29b03fd3733cff0c989b357e594 --- .../completion/PyKeywordCompletionContributor.java | 8 +++++++- .../noNotAndLambdaAfterTargetQualifier.py | 4 ++++ .../com/jetbrains/python/PythonKeywordCompletionTest.java | 5 +++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 python/testData/keywordCompletion/noNotAndLambdaAfterTargetQualifier.py diff --git a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyKeywordCompletionContributor.java b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyKeywordCompletionContributor.java index d2f62097e82b..4821a8719f48 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyKeywordCompletionContributor.java +++ b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyKeywordCompletionContributor.java @@ -247,6 +247,9 @@ public class PyKeywordCompletionContributor extends CompletionContributor { public static final PsiElementPattern.Capture AFTER_QUALIFIER = psiElement().afterLeaf(psiElement().withText(".").inside(PyReferenceExpression.class)); + public static final PsiElementPattern.Capture TARGET_AFTER_QUALIFIER = + psiElement().afterLeaf(psiElement().withText(".").inside(PyTargetExpression.class)); + public static final FilterPattern FIRST_ON_LINE = new FilterPattern(new StartOfLineFilter()); private static final PsiElementPattern.Capture IN_IMPORT_AFTER_REF = @@ -592,6 +595,7 @@ public class PyKeywordCompletionContributor extends CompletionContributor { .andNot(IN_PARAM_LIST) .andNot(IN_FUNCTION_HEADER) .andNot(AFTER_QUALIFIER).andNot(IN_STRING_LITERAL) + .andNot(AFTER_QUALIFIER).andNot(IN_STRING_LITERAL).andNot(TARGET_AFTER_QUALIFIER) , new PyKeywordCompletionProvider(PyNames.NOT, PyNames.LAMBDA) ); @@ -607,6 +611,7 @@ public class PyKeywordCompletionContributor extends CompletionContributor { .andNot(AFTER_QUALIFIER) .andNot(IN_FUNCTION_HEADER) .andNot(IN_STRING_LITERAL) + .andNot(TARGET_AFTER_QUALIFIER) , new PyKeywordCompletionProvider(TailType.NONE, PyNames.TRUE, PyNames.FALSE, PyNames.NONE)); extend(CompletionType.BASIC, @@ -617,7 +622,8 @@ public class PyKeywordCompletionContributor extends CompletionContributor { .andNot(IN_IMPORT_STMT) .andNot(IN_PARAM_LIST) .andNot(AFTER_QUALIFIER) - .andNot(IN_STRING_LITERAL), + .andNot(IN_STRING_LITERAL) + .andNot(TARGET_AFTER_QUALIFIER), new PyKeywordCompletionProvider(PyNames.ASYNC)); extend(CompletionType.BASIC, psiElement() diff --git a/python/testData/keywordCompletion/noNotAndLambdaAfterTargetQualifier.py b/python/testData/keywordCompletion/noNotAndLambdaAfterTargetQualifier.py new file mode 100644 index 000000000000..ab24246987fd --- /dev/null +++ b/python/testData/keywordCompletion/noNotAndLambdaAfterTargetQualifier.py @@ -0,0 +1,4 @@ +class A: + def __init__(self): + self.dct1 = [] + self.dct1. = None #here "lambda" and "not" must not be in completion list \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PythonKeywordCompletionTest.java b/python/testSrc/com/jetbrains/python/PythonKeywordCompletionTest.java index 9c711284f12d..ccb52bb50111 100644 --- a/python/testSrc/com/jetbrains/python/PythonKeywordCompletionTest.java +++ b/python/testSrc/com/jetbrains/python/PythonKeywordCompletionTest.java @@ -236,6 +236,11 @@ public class PythonKeywordCompletionTest extends PyTestCase { myFixture.checkResult("from ... import "); } + // PY-7018 + public void testNoNotAndLambdaAfterTargetQualifier() { + assertDoesntContain(doTestByTestName(), "not", "lambda"); + } + // PY-13111 public void testNoForAndYieldInCommentContext() { assertDoesntContain(doTestByTestName(), "for", "yield");