mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fixed PY-11281 Convert dict comprehension to dict call omits if expression
This commit is contained in:
@@ -52,16 +52,38 @@ public class ConvertDictCompQuickFix implements LocalQuickFix {
|
||||
}
|
||||
|
||||
private static void replaceComprehension(Project project, PyDictCompExpression expression) {
|
||||
List<ComprhForComponent> forComponents = expression.getForComponents();
|
||||
if (expression.getResultExpression() instanceof PyKeyValueExpression) {
|
||||
PyKeyValueExpression keyValueExpression = (PyKeyValueExpression)expression.getResultExpression();
|
||||
PyElementGenerator elementGenerator = PyElementGenerator.getInstance(project);
|
||||
final PyKeyValueExpression keyValueExpression = (PyKeyValueExpression)expression.getResultExpression();
|
||||
final PyElementGenerator elementGenerator = PyElementGenerator.getInstance(project);
|
||||
assert keyValueExpression.getValue() != null;
|
||||
expression.replace(elementGenerator.createFromText(LanguageLevel.getDefault(), PyExpressionStatement.class,
|
||||
"dict([(" + keyValueExpression.getKey().getText() + ", " +
|
||||
keyValueExpression.getValue().getText() + ") for " +
|
||||
forComponents.get(0).getIteratorVariable().getText() + " in " +
|
||||
forComponents.get(0).getIteratedList().getText() + "])"));
|
||||
|
||||
final List<ComprehensionComponent> components = expression.getComponents();
|
||||
final StringBuilder replacement = new StringBuilder("dict([(" + keyValueExpression.getKey().getText() + ", " +
|
||||
keyValueExpression.getValue().getText() + ")");
|
||||
int slashNum = 1;
|
||||
for (ComprehensionComponent component : components) {
|
||||
if (component instanceof ComprhForComponent) {
|
||||
replacement.append("for ");
|
||||
replacement.append(((ComprhForComponent)component).getIteratorVariable().getText());
|
||||
replacement.append(" in ");
|
||||
replacement.append(((ComprhForComponent)component).getIteratedList().getText());
|
||||
replacement.append(" ");
|
||||
}
|
||||
if (component instanceof ComprhIfComponent) {
|
||||
final PyExpression test = ((ComprhIfComponent)component).getTest();
|
||||
if (test != null) {
|
||||
replacement.append("if ");
|
||||
replacement.append(test.getText());
|
||||
replacement.append(" ");
|
||||
}
|
||||
}
|
||||
for (int i = 0; i != slashNum; ++i)
|
||||
replacement.append("\t");
|
||||
++slashNum;
|
||||
}
|
||||
replacement.append("])");
|
||||
|
||||
expression.replace(elementGenerator.createFromText(LanguageLevel.getDefault(), PyExpressionStatement.class, replacement.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
var = <warning descr="Python version 2.4, 2.5, 2.6, 3.0 do not support dictionary comprehensions">{k: v for k, v in zip('abc', <caret>range(3)) if k % 2}</warning>
|
||||
@@ -0,0 +1 @@
|
||||
var = dict([(k, v) for k, v in zip('abc', range(3)) if k % 2])
|
||||
@@ -342,6 +342,11 @@ public class PyQuickFixTest extends PyTestCase {
|
||||
PyBundle.message("QFIX.replace.function.set.with.literal"), true, true);
|
||||
}
|
||||
|
||||
public void testDictComprehensionToCall() {
|
||||
doInspectionTest("DictComprehensionToCall.py", PyCompatibilityInspection.class,
|
||||
PyBundle.message("INTN.convert.dict.comp.to"), true, true);
|
||||
}
|
||||
|
||||
public void testDocstringParams() { //PY-3394
|
||||
PyDocumentationSettings documentationSettings = PyDocumentationSettings.getInstance(myFixture.getModule());
|
||||
documentationSettings.setFormat(DocStringFormat.EPYTEXT);
|
||||
|
||||
Reference in New Issue
Block a user