[python] postfix templates: add .fore/.itere/.enum (PY-27374)

GitOrigin-RevId: 1e389ba4ef18ebb13da8665fb5a47708cddc6ccf
This commit is contained in:
Vladislav Rassokhin
2023-03-08 19:21:11 +00:00
committed by intellij-monorepo-bot
parent 6ccf88cac0
commit ce118bf029
23 changed files with 131 additions and 0 deletions
@@ -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)
}
}
@@ -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),
@@ -0,0 +1,2 @@
def f(a:list, b:list, c:int):
(2*(a + b)) * c.enum<caret>
@@ -0,0 +1,3 @@
def f(a:list, b:list, c:int):
for i, e in enumerate((2 * (a + b)) * c):
<caret>
+2
View File
@@ -0,0 +1,2 @@
def f(a:list):
a.enum<caret>
@@ -0,0 +1,3 @@
def f(a:list):
for i, e in enumerate(a):
<caret>
+1
View File
@@ -0,0 +1 @@
[].enum<caret>
@@ -0,0 +1,2 @@
for i, e in enumerate([]):
<caret>
@@ -0,0 +1,2 @@
def f(a:list, b:list, c:int):
(2*(a + b)) * c.fore<caret>
@@ -0,0 +1,3 @@
def f(a:list, b:list, c:int):
for i, e in enumerate((2 * (a + b)) * c):
<caret>
+2
View File
@@ -0,0 +1,2 @@
def f(a:list):
a.fore<caret>
@@ -0,0 +1,3 @@
def f(a:list):
for i, e in enumerate(a):
<caret>
+1
View File
@@ -0,0 +1 @@
[].fore<caret>
@@ -0,0 +1,2 @@
for i, e in enumerate([]):
<caret>
@@ -0,0 +1,2 @@
def f(a:list, b:list, c:int):
(2*(a + b)) * c.itere<caret>
@@ -0,0 +1,3 @@
def f(a:list, b:list, c:int):
for i, e in enumerate((2 * (a + b)) * c):
<caret>
@@ -0,0 +1,2 @@
def f(a:list):
a.itere<caret>
@@ -0,0 +1,3 @@
def f(a:list):
for i, e in enumerate(a):
<caret>
@@ -0,0 +1 @@
[].itere<caret>
@@ -0,0 +1,2 @@
for i, e in enumerate([]):
<caret>
@@ -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/";
}
}
@@ -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/";
}
}
@@ -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/";
}
}