From 09c9fc28987128d0647f3d7020996897474cfb1a Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Fri, 4 Jun 2021 13:42:53 +0300 Subject: [PATCH] PY-48665 Disable f-string-like completion in literal string patterns Since f-strings are not supported inside patterns. GitOrigin-RevId: f96b8b6e999c893930203f933c6f55aec6e60869 --- .../completion/PyFStringLikeCompletionContributor.java | 5 +++-- .../fStringLikeCompletionNotAvailableInLiteralPatterns.py | 4 ++++ python/testSrc/com/jetbrains/python/Py3CompletionTest.java | 5 +++++ 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 python/testData/completion/fStringLikeCompletionNotAvailableInLiteralPatterns.py diff --git a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyFStringLikeCompletionContributor.java b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyFStringLikeCompletionContributor.java index e1f99a8ccbb2..f87d299d797d 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyFStringLikeCompletionContributor.java +++ b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/completion/PyFStringLikeCompletionContributor.java @@ -35,13 +35,14 @@ import static com.jetbrains.python.psi.PyUtil.as; */ public class PyFStringLikeCompletionContributor extends CompletionContributor { - private static final PsiElementPattern.Capture INSIDE_NON_FORMATTED_STRING_ELEMENT = + private static final PsiElementPattern.Capture APPLICABLE_STRING_ELEMENT = psiElement(PyPlainStringElement.class) .withParent(PyStringLiteralExpression.class) + .andNot(psiElement().withSuperParent(2, PyLiteralPattern.class)) .andNot(psiElement().inside(PyStringFormatCompletionContributor.FORMAT_STRING_CAPTURE)); public PyFStringLikeCompletionContributor() { - extend(CompletionType.BASIC, INSIDE_NON_FORMATTED_STRING_ELEMENT, new CompletionProvider<>() { + extend(CompletionType.BASIC, APPLICABLE_STRING_ELEMENT, new CompletionProvider<>() { @Override protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, diff --git a/python/testData/completion/fStringLikeCompletionNotAvailableInLiteralPatterns.py b/python/testData/completion/fStringLikeCompletionNotAvailableInLiteralPatterns.py new file mode 100644 index 000000000000..92c2d5d39d7c --- /dev/null +++ b/python/testData/completion/fStringLikeCompletionNotAvailableInLiteralPatterns.py @@ -0,0 +1,4 @@ +my_expr = 42 +match my_expr: + case '{my_e': + pass \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/Py3CompletionTest.java b/python/testSrc/com/jetbrains/python/Py3CompletionTest.java index 6328329d78cf..00a23617dfff 100644 --- a/python/testSrc/com/jetbrains/python/Py3CompletionTest.java +++ b/python/testSrc/com/jetbrains/python/Py3CompletionTest.java @@ -474,6 +474,11 @@ public class Py3CompletionTest extends PyTestCase { assertContainsElements(myFixture.getLookupElementStrings(), "city"); } + // PY-48665 + public void testFStringLikeCompletionNotAvailableInLiteralPatterns() { + doNegativeTest(); + } + // PY-46056 public void testImportCompletionHintForSameDirectoryModuleInOrdinaryPackage() { doTestVariantTailText("ordinaryPackage/sample.py", "logging", null);