From eb701312fd72baf463902db2df73be5e33959954 Mon Sep 17 00:00:00 2001 From: "andrey.matveev" Date: Tue, 30 Jun 2020 11:02:59 +0700 Subject: [PATCH] [PY-16194] Fix passing other calls besides append on list in list creation quick fix GitOrigin-RevId: b699acf7cf42cdd47ff8a7b2f0ab4f404eddb152 --- .../inspections/PyListCreationInspection.java | 37 ++++++++++--------- .../ListCreationOnlyConsecutiveAppends.py | 4 ++ ...istCreationOnlyConsecutiveAppends_after.py | 3 ++ .../com/jetbrains/python/PyQuickFixTest.java | 5 +++ 4 files changed, 32 insertions(+), 17 deletions(-) create mode 100644 python/testData/inspections/ListCreationOnlyConsecutiveAppends.py create mode 100644 python/testData/inspections/ListCreationOnlyConsecutiveAppends_after.py diff --git a/python/python-psi-impl/src/com/jetbrains/python/inspections/PyListCreationInspection.java b/python/python-psi-impl/src/com/jetbrains/python/inspections/PyListCreationInspection.java index c492633b36a9..181afac0b7a5 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/inspections/PyListCreationInspection.java +++ b/python/python-psi-impl/src/com/jetbrains/python/inspections/PyListCreationInspection.java @@ -64,26 +64,29 @@ public class PyListCreationInspection extends PyInspection { final PyCallExpression callExpression = (PyCallExpression)statement; final PyExpression callee = callExpression.getCallee(); - if (callee instanceof PyQualifiedExpression) { - final PyExpression qualifier = ((PyQualifiedExpression)callee).getQualifier(); - final String funcName = ((PyQualifiedExpression)callee).getReferencedName(); - if (qualifier != null && name.equals(qualifier.getText()) && "append".equals(funcName)) { - final PyArgumentList argList = callExpression.getArgumentList(); - if (argList != null) { - for (PyExpression argument : argList.getArguments()) { - if (argument.getText().equals(name)) { - if (quickFix != null) - registerProblem(node, message, quickFix); - return; - } - } - if (quickFix == null) { - quickFix = new ListCreationQuickFix(node); - } - quickFix.addStatement((PyExpressionStatement)expressionStatement); + if (!(callee instanceof PyQualifiedExpression)) break; + + final PyExpression qualifier = ((PyQualifiedExpression)callee).getQualifier(); + if (qualifier == null || !name.equals(qualifier.getText())) break; + + final String funcName = ((PyQualifiedExpression)callee).getReferencedName(); + if (!"append".equals(funcName)) break; + + final PyArgumentList argList = callExpression.getArgumentList(); + if (argList != null) { + for (PyExpression argument : argList.getArguments()) { + if (argument.getText().equals(name)) { + if (quickFix != null) + registerProblem(node, message, quickFix); + return; } } + if (quickFix == null) { + quickFix = new ListCreationQuickFix(node); + } + quickFix.addStatement((PyExpressionStatement)expressionStatement); } + if (quickFix == null) { return; } diff --git a/python/testData/inspections/ListCreationOnlyConsecutiveAppends.py b/python/testData/inspections/ListCreationOnlyConsecutiveAppends.py new file mode 100644 index 000000000000..99545e7f03ea --- /dev/null +++ b/python/testData/inspections/ListCreationOnlyConsecutiveAppends.py @@ -0,0 +1,4 @@ +bar = [] +bar.append(1) +bar.extend([2, 3]) +bar.append(4) diff --git a/python/testData/inspections/ListCreationOnlyConsecutiveAppends_after.py b/python/testData/inspections/ListCreationOnlyConsecutiveAppends_after.py new file mode 100644 index 000000000000..50544260113a --- /dev/null +++ b/python/testData/inspections/ListCreationOnlyConsecutiveAppends_after.py @@ -0,0 +1,3 @@ +bar = [1] +bar.extend([2, 3]) +bar.append(4) diff --git a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java index 6754c2039280..a92e94a37b26 100644 --- a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java +++ b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java @@ -359,6 +359,11 @@ public class PyQuickFixTest extends PyTestCase { doInspectionTest(PyListCreationInspection.class, PyPsiBundle.message("QFIX.list.creation"), true, true); } + // PY-16194 + public void testListCreationOnlyConsecutiveAppends() { + doInspectionTest(PyListCreationInspection.class, PyPsiBundle.message("QFIX.list.creation"), true, true); + } + // PY-1445 public void testConvertSingleQuotedDocstring() { getIndentOptions().INDENT_SIZE = 2;