diff --git a/python/src/com/jetbrains/python/codeInsight/postfix/PyForEnumeratePostfixTemplate.kt b/python/src/com/jetbrains/python/codeInsight/postfix/PyForEnumeratePostfixTemplate.kt new file mode 100644 index 000000000000..e622786d0da8 --- /dev/null +++ b/python/src/com/jetbrains/python/codeInsight/postfix/PyForEnumeratePostfixTemplate.kt @@ -0,0 +1,23 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.codeInsight.postfix + +import com.intellij.codeInsight.template.Template +import com.intellij.codeInsight.template.impl.MacroCallNode +import com.intellij.codeInsight.template.impl.TextExpression +import com.intellij.codeInsight.template.impl.VariableNode +import com.intellij.codeInsight.template.postfix.templates.PostfixTemplateProvider +import com.intellij.psi.PsiElement +import com.jetbrains.python.codeInsight.liveTemplates.CollectionElementNameMacro + +class PyForEnumeratePostfixTemplate(name: String, provider: PostfixTemplateProvider) : PyEditablePostfixTemplate( + name, name, "for \$INDEX$, \$VAR$ in enumerate(\$EXPR$):\n \$END$", "for i, e in enumerate(expr)", + setOf(PyPostfixTemplateExpressionCondition.PyIterable()), false, provider, true) { + + override fun addTemplateVariables(element: PsiElement, template: Template) { + super.addTemplateVariables(element, template) + val name = MacroCallNode(CollectionElementNameMacro()) + name.addParameter(VariableNode("EXPR", null)) + template.addVariable("VAR", name, TextExpression("e"), true) + template.addVariable("INDEX", null, TextExpression("i"), true) + } +} diff --git a/python/src/com/jetbrains/python/codeInsight/postfix/PyPostfixTemplateProvider.java b/python/src/com/jetbrains/python/codeInsight/postfix/PyPostfixTemplateProvider.java index 0243497bffe4..a073905d1af7 100644 --- a/python/src/com/jetbrains/python/codeInsight/postfix/PyPostfixTemplateProvider.java +++ b/python/src/com/jetbrains/python/codeInsight/postfix/PyPostfixTemplateProvider.java @@ -29,6 +29,9 @@ public class PyPostfixTemplateProvider implements PostfixTemplateProvider { new PyWhilePostfixTemplate(this), new PyForPostfixTemplate("for", this), new PyForPostfixTemplate("iter", this), + new PyForEnumeratePostfixTemplate("fore", this), + new PyForEnumeratePostfixTemplate("itere", this), + new PyForEnumeratePostfixTemplate("enum", this), new PyIsNonePostfixTemplate(this), new PyIsNotNonePostfixTemplate(this), new PyIsNotNonePostfixTemplate(this), diff --git a/python/testData/postfix/enum/complexExpression.py b/python/testData/postfix/enum/complexExpression.py new file mode 100644 index 000000000000..382d5637a6e1 --- /dev/null +++ b/python/testData/postfix/enum/complexExpression.py @@ -0,0 +1,2 @@ +def f(a:list, b:list, c:int): + (2*(a + b)) * c.enum \ No newline at end of file diff --git a/python/testData/postfix/enum/complexExpression_after.py b/python/testData/postfix/enum/complexExpression_after.py new file mode 100644 index 000000000000..9099e369295b --- /dev/null +++ b/python/testData/postfix/enum/complexExpression_after.py @@ -0,0 +1,3 @@ +def f(a:list, b:list, c:int): + for i, e in enumerate((2 * (a + b)) * c): + \ No newline at end of file diff --git a/python/testData/postfix/enum/function.py b/python/testData/postfix/enum/function.py new file mode 100644 index 000000000000..16b34a0a8626 --- /dev/null +++ b/python/testData/postfix/enum/function.py @@ -0,0 +1,2 @@ +def f(a:list): + a.enum \ No newline at end of file diff --git a/python/testData/postfix/enum/function_after.py b/python/testData/postfix/enum/function_after.py new file mode 100644 index 000000000000..bba03075c3c9 --- /dev/null +++ b/python/testData/postfix/enum/function_after.py @@ -0,0 +1,3 @@ +def f(a:list): + for i, e in enumerate(a): + \ No newline at end of file diff --git a/python/testData/postfix/enum/topLevel.py b/python/testData/postfix/enum/topLevel.py new file mode 100644 index 000000000000..46d28894c494 --- /dev/null +++ b/python/testData/postfix/enum/topLevel.py @@ -0,0 +1 @@ +[].enum \ No newline at end of file diff --git a/python/testData/postfix/enum/topLevel_after.py b/python/testData/postfix/enum/topLevel_after.py new file mode 100644 index 000000000000..cdb9322f6817 --- /dev/null +++ b/python/testData/postfix/enum/topLevel_after.py @@ -0,0 +1,2 @@ +for i, e in enumerate([]): + \ No newline at end of file diff --git a/python/testData/postfix/fore/complexExpression.py b/python/testData/postfix/fore/complexExpression.py new file mode 100644 index 000000000000..7604d1842236 --- /dev/null +++ b/python/testData/postfix/fore/complexExpression.py @@ -0,0 +1,2 @@ +def f(a:list, b:list, c:int): + (2*(a + b)) * c.fore \ No newline at end of file diff --git a/python/testData/postfix/fore/complexExpression_after.py b/python/testData/postfix/fore/complexExpression_after.py new file mode 100644 index 000000000000..9099e369295b --- /dev/null +++ b/python/testData/postfix/fore/complexExpression_after.py @@ -0,0 +1,3 @@ +def f(a:list, b:list, c:int): + for i, e in enumerate((2 * (a + b)) * c): + \ No newline at end of file diff --git a/python/testData/postfix/fore/function.py b/python/testData/postfix/fore/function.py new file mode 100644 index 000000000000..c02e3ea9d82c --- /dev/null +++ b/python/testData/postfix/fore/function.py @@ -0,0 +1,2 @@ +def f(a:list): + a.fore \ No newline at end of file diff --git a/python/testData/postfix/fore/function_after.py b/python/testData/postfix/fore/function_after.py new file mode 100644 index 000000000000..bba03075c3c9 --- /dev/null +++ b/python/testData/postfix/fore/function_after.py @@ -0,0 +1,3 @@ +def f(a:list): + for i, e in enumerate(a): + \ No newline at end of file diff --git a/python/testData/postfix/fore/topLevel.py b/python/testData/postfix/fore/topLevel.py new file mode 100644 index 000000000000..d43a03c01d26 --- /dev/null +++ b/python/testData/postfix/fore/topLevel.py @@ -0,0 +1 @@ +[].fore \ No newline at end of file diff --git a/python/testData/postfix/fore/topLevel_after.py b/python/testData/postfix/fore/topLevel_after.py new file mode 100644 index 000000000000..cdb9322f6817 --- /dev/null +++ b/python/testData/postfix/fore/topLevel_after.py @@ -0,0 +1,2 @@ +for i, e in enumerate([]): + \ No newline at end of file diff --git a/python/testData/postfix/itere/complexExpression.py b/python/testData/postfix/itere/complexExpression.py new file mode 100644 index 000000000000..c6e7fcb5ecfd --- /dev/null +++ b/python/testData/postfix/itere/complexExpression.py @@ -0,0 +1,2 @@ +def f(a:list, b:list, c:int): + (2*(a + b)) * c.itere \ No newline at end of file diff --git a/python/testData/postfix/itere/complexExpression_after.py b/python/testData/postfix/itere/complexExpression_after.py new file mode 100644 index 000000000000..9099e369295b --- /dev/null +++ b/python/testData/postfix/itere/complexExpression_after.py @@ -0,0 +1,3 @@ +def f(a:list, b:list, c:int): + for i, e in enumerate((2 * (a + b)) * c): + \ No newline at end of file diff --git a/python/testData/postfix/itere/function.py b/python/testData/postfix/itere/function.py new file mode 100644 index 000000000000..c4403d4c274a --- /dev/null +++ b/python/testData/postfix/itere/function.py @@ -0,0 +1,2 @@ +def f(a:list): + a.itere \ No newline at end of file diff --git a/python/testData/postfix/itere/function_after.py b/python/testData/postfix/itere/function_after.py new file mode 100644 index 000000000000..bba03075c3c9 --- /dev/null +++ b/python/testData/postfix/itere/function_after.py @@ -0,0 +1,3 @@ +def f(a:list): + for i, e in enumerate(a): + \ No newline at end of file diff --git a/python/testData/postfix/itere/topLevel.py b/python/testData/postfix/itere/topLevel.py new file mode 100644 index 000000000000..e5d6a3c3dee0 --- /dev/null +++ b/python/testData/postfix/itere/topLevel.py @@ -0,0 +1 @@ +[].itere \ No newline at end of file diff --git a/python/testData/postfix/itere/topLevel_after.py b/python/testData/postfix/itere/topLevel_after.py new file mode 100644 index 000000000000..cdb9322f6817 --- /dev/null +++ b/python/testData/postfix/itere/topLevel_after.py @@ -0,0 +1,2 @@ +for i, e in enumerate([]): + \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/postfix/PyEnumEnumeratePostfixTemplateTest.java b/python/testSrc/com/jetbrains/python/postfix/PyEnumEnumeratePostfixTemplateTest.java new file mode 100644 index 000000000000..574a908823c6 --- /dev/null +++ b/python/testSrc/com/jetbrains/python/postfix/PyEnumEnumeratePostfixTemplateTest.java @@ -0,0 +1,22 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.postfix; + +public class PyEnumEnumeratePostfixTemplateTest extends PyPostfixTemplateTestCase{ + + public void testTopLevel() { + doTest(); + } + + public void testFunction() { + doTest(); + } + + public void testComplexExpression() { + doTest(); + } + + @Override + protected String getTestDataDir() { + return "enum/"; + } +} diff --git a/python/testSrc/com/jetbrains/python/postfix/PyForEnumeratePostfixTemplateTest.java b/python/testSrc/com/jetbrains/python/postfix/PyForEnumeratePostfixTemplateTest.java new file mode 100644 index 000000000000..34cec5e1500c --- /dev/null +++ b/python/testSrc/com/jetbrains/python/postfix/PyForEnumeratePostfixTemplateTest.java @@ -0,0 +1,22 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.postfix; + +public class PyForEnumeratePostfixTemplateTest extends PyPostfixTemplateTestCase{ + + public void testTopLevel() { + doTest(); + } + + public void testFunction() { + doTest(); + } + + public void testComplexExpression() { + doTest(); + } + + @Override + protected String getTestDataDir() { + return "fore/"; + } +} diff --git a/python/testSrc/com/jetbrains/python/postfix/PyIterEnumeratePostfixTemplateTest.java b/python/testSrc/com/jetbrains/python/postfix/PyIterEnumeratePostfixTemplateTest.java new file mode 100644 index 000000000000..82824081a6b2 --- /dev/null +++ b/python/testSrc/com/jetbrains/python/postfix/PyIterEnumeratePostfixTemplateTest.java @@ -0,0 +1,22 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.postfix; + +public class PyIterEnumeratePostfixTemplateTest extends PyPostfixTemplateTestCase{ + + public void testTopLevel() { + doTest(); + } + + public void testFunction() { + doTest(); + } + + public void testComplexExpression() { + doTest(); + } + + @Override + protected String getTestDataDir() { + return "itere/"; + } +}