From 518e265ac1fe08479053fdfe91693a738cf57c81 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 16 Sep 2011 12:43:48 +0400 Subject: [PATCH 1/6] fixed PY-4548 "Fix all 'Single quoted docstring' problems" results in 5 quotes --- .../python/actions/ConvertDocstringQuickFix.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/python/src/com/jetbrains/python/actions/ConvertDocstringQuickFix.java b/python/src/com/jetbrains/python/actions/ConvertDocstringQuickFix.java index f08fd2900e4c..aaa01a0b881e 100644 --- a/python/src/com/jetbrains/python/actions/ConvertDocstringQuickFix.java +++ b/python/src/com/jetbrains/python/actions/ConvertDocstringQuickFix.java @@ -5,7 +5,9 @@ import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.jetbrains.python.PyBundle; -import com.jetbrains.python.psi.*; +import com.jetbrains.python.psi.PyElementGenerator; +import com.jetbrains.python.psi.PyExpression; +import com.jetbrains.python.psi.PyStringLiteralExpression; import com.jetbrains.python.psi.impl.PyStringLiteralExpressionImpl; import org.jetbrains.annotations.NotNull; @@ -41,7 +43,9 @@ public class ConvertDocstringQuickFix implements LocalQuickFix { String content = expression.getText().substring(prefixLength); if (content.startsWith("'''") ) { content = content.substring(3, content.length()-3); - } else { + } else if (content.startsWith("\"\"\"")) + return; + else { content = content.length() == 1 ? "" : content.substring(1, content.length()-1); } From 91a389aa128036036e7dd7eb1d5dd6c70ca5501d Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 16 Sep 2011 14:33:52 +0400 Subject: [PATCH 2/6] added sphinx producer. PY-4391 Python docs run configurations / sphinx: provide temporary run configuration on Ctrl+Shift+F10 for docs sources directory --- python/src/META-INF/python-plugin-common.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/python/src/META-INF/python-plugin-common.xml b/python/src/META-INF/python-plugin-common.xml index 6417e740ad8e..7280fdf76bdb 100644 --- a/python/src/META-INF/python-plugin-common.xml +++ b/python/src/META-INF/python-plugin-common.xml @@ -508,6 +508,7 @@ + From 61219d686a0992113b770d8daa9bf4c37c7d2534 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 16 Sep 2011 15:10:18 +0400 Subject: [PATCH 3/6] fixed PY-4392 Python docs run configurations: messed up slashes for input\output fields --- .../python/testing/pytest/PyTestConfigurationEditor.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/python/src/com/jetbrains/python/testing/pytest/PyTestConfigurationEditor.java b/python/src/com/jetbrains/python/testing/pytest/PyTestConfigurationEditor.java index e2eb2a47c356..b9afaa31afa6 100644 --- a/python/src/com/jetbrains/python/testing/pytest/PyTestConfigurationEditor.java +++ b/python/src/com/jetbrains/python/testing/pytest/PyTestConfigurationEditor.java @@ -16,8 +16,6 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; -import static com.intellij.openapi.util.io.FileUtil.toSystemIndependentName; - /** * @author yole */ @@ -51,13 +49,13 @@ public class PyTestConfigurationEditor extends SettingsEditor Date: Sat, 17 Sep 2011 17:21:06 +0400 Subject: [PATCH 4/6] fixed PY-4551 "Remove redundant parenthesis" suggestion yields to mistake --- .../python/inspections/PyRedundantParenthesesInspection.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/src/com/jetbrains/python/inspections/PyRedundantParenthesesInspection.java b/python/src/com/jetbrains/python/inspections/PyRedundantParenthesesInspection.java index e81287e52f25..2321395c7445 100644 --- a/python/src/com/jetbrains/python/inspections/PyRedundantParenthesesInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyRedundantParenthesesInspection.java @@ -69,6 +69,8 @@ public class PyRedundantParenthesesInspection extends PyInspection { registerProblem(node, "Remove redundant parentheses", new RedundantParenthesesQuickFix()); } else if (expression instanceof PyBinaryExpression) { + if (node.getParent() instanceof PyPrefixExpression) + return; if (((PyBinaryExpression)expression).getOperator() == PyTokenTypes.AND_KEYWORD || ((PyBinaryExpression)expression).getOperator() == PyTokenTypes.OR_KEYWORD) { if (((PyBinaryExpression)expression).getLeftExpression() instanceof PyParenthesizedExpression && From 6e354fe97bf1f24f79a94d1b439dfe7f9eb43132 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Sun, 18 Sep 2011 14:36:05 +0400 Subject: [PATCH 5/6] fixed PY-4397 "Remove argument equal to default" should reformat argument list in a nicer way --- .../RemoveArgumentEqualDefaultQuickFix.java | 30 ++++++++++++------- .../inspections/ArgumentEqualDefault.py | 3 +- .../PyArgumentEqualDefaultInspection/test.py | 9 ++++++ 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/python/src/com/jetbrains/python/actions/RemoveArgumentEqualDefaultQuickFix.java b/python/src/com/jetbrains/python/actions/RemoveArgumentEqualDefaultQuickFix.java index dd3c22c4fd73..ca0d8e2115f6 100644 --- a/python/src/com/jetbrains/python/actions/RemoveArgumentEqualDefaultQuickFix.java +++ b/python/src/com/jetbrains/python/actions/RemoveArgumentEqualDefaultQuickFix.java @@ -3,14 +3,15 @@ package com.jetbrains.python.actions; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiTreeUtil; import com.jetbrains.python.PyBundle; -import com.jetbrains.python.psi.PyArgumentList; -import com.jetbrains.python.psi.PyExpression; -import com.jetbrains.python.psi.PyKeywordArgument; +import com.jetbrains.python.psi.*; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; +import java.util.List; import java.util.Set; /** @@ -36,14 +37,23 @@ public class RemoveArgumentEqualDefaultQuickFix implements LocalQuickFix { public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { PsiElement element = descriptor.getPsiElement(); - PyExpression[] arguments = PsiTreeUtil.getParentOfType(element, PyArgumentList.class).getArguments(); - boolean canDelete = true; - for (int i = arguments.length-1; i != -1; --i) { - if (myProblemElements.contains(arguments[i])) { - if (canDelete) - arguments[i].delete(); + + PyArgumentList argumentList = PsiTreeUtil.getParentOfType(element, PyArgumentList.class); + if (argumentList == null) return; + StringBuilder newArgumentList = new StringBuilder("foo("); + + PyExpression[] arguments = argumentList.getArguments(); + List newArgs = new ArrayList(); + for (int i = 0; i != arguments.length; ++i) { + if (!myProblemElements.contains(arguments[i])) { + newArgs.add(arguments[i].getText()); } - else if (!(arguments[i] instanceof PyKeywordArgument)) canDelete = false; } + + newArgumentList.append(StringUtil.join(newArgs, ", ")).append(")"); + PyExpression expression = PyElementGenerator.getInstance(project).createFromText( + LanguageLevel.forElement(argumentList), PyExpressionStatement.class, newArgumentList.toString()).getExpression(); + if (expression instanceof PyCallExpression) + argumentList.replace(((PyCallExpression)expression).getArgumentList()); } } diff --git a/python/testData/inspections/ArgumentEqualDefault.py b/python/testData/inspections/ArgumentEqualDefault.py index 275e16df0bd2..2db19b255ef1 100644 --- a/python/testData/inspections/ArgumentEqualDefault.py +++ b/python/testData/inspections/ArgumentEqualDefault.py @@ -2,4 +2,5 @@ def foo(a, b = 345, c = 1): pass #PY-3261 -foo(1, 345, c=22) \ No newline at end of file +foo(1, +345, c=22) \ No newline at end of file diff --git a/python/testData/inspections/PyArgumentEqualDefaultInspection/test.py b/python/testData/inspections/PyArgumentEqualDefaultInspection/test.py index f7f0da3a04e6..f95271a0abba 100644 --- a/python/testData/inspections/PyArgumentEqualDefaultInspection/test.py +++ b/python/testData/inspections/PyArgumentEqualDefaultInspection/test.py @@ -58,3 +58,12 @@ def bar(a = "qwer"): bar(a = 'qwer') getattr(bar, "__doc__", None) # None is not highlighted + +class a: + def get(self, a, b = None): + pass + +kw = a() + +kw['customerPaymentProfileId'] = kw.get("customerPaymentProfileId", + None) From 42e38e214033668b4abbba81577dc5f20e5eba73 Mon Sep 17 00:00:00 2001 From: Evgeny Zakrevsky Date: Mon, 19 Sep 2011 16:42:10 +0400 Subject: [PATCH 6/6] rename ComponentWithAnchor -> PanelWithAnchor added interface AnchorableComponent for JBLabel, JBCheckBox, etc. Before they implements ComponentWithAnchor. --- .../com/jetbrains/python/run/AbstractPyCommonOptionsForm.java | 4 ++-- .../com/jetbrains/python/run/PythonRunConfigurationForm.java | 4 ++-- .../python/testing/PythonTestRunConfigurationForm.java | 4 ++-- .../python/testing/pytest/PyTestConfigurationEditor.java | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/python/src/com/jetbrains/python/run/AbstractPyCommonOptionsForm.java b/python/src/com/jetbrains/python/run/AbstractPyCommonOptionsForm.java index ec967f54b346..8f700b8f9520 100644 --- a/python/src/com/jetbrains/python/run/AbstractPyCommonOptionsForm.java +++ b/python/src/com/jetbrains/python/run/AbstractPyCommonOptionsForm.java @@ -1,12 +1,12 @@ package com.jetbrains.python.run; -import com.intellij.ui.ComponentWithAnchor; +import com.intellij.ui.PanelWithAnchor; import javax.swing.*; /** * @author yole */ -public interface AbstractPyCommonOptionsForm extends AbstractPythonRunConfigurationParams, ComponentWithAnchor { +public interface AbstractPyCommonOptionsForm extends AbstractPythonRunConfigurationParams, PanelWithAnchor { JComponent getMainPanel(); } diff --git a/python/src/com/jetbrains/python/run/PythonRunConfigurationForm.java b/python/src/com/jetbrains/python/run/PythonRunConfigurationForm.java index d20512529a09..b72b83ff3553 100644 --- a/python/src/com/jetbrains/python/run/PythonRunConfigurationForm.java +++ b/python/src/com/jetbrains/python/run/PythonRunConfigurationForm.java @@ -8,7 +8,7 @@ import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.ui.ComponentWithAnchor; +import com.intellij.ui.PanelWithAnchor; import com.intellij.ui.RawCommandLineEditor; import com.intellij.ui.components.JBLabel; @@ -18,7 +18,7 @@ import java.awt.*; /** * @author yole */ -public class PythonRunConfigurationForm implements PythonRunConfigurationParams, ComponentWithAnchor { +public class PythonRunConfigurationForm implements PythonRunConfigurationParams, PanelWithAnchor { private JPanel myRootPanel; private TextFieldWithBrowseButton myScriptTextField; private RawCommandLineEditor myScriptParametersTextField; diff --git a/python/src/com/jetbrains/python/testing/PythonTestRunConfigurationForm.java b/python/src/com/jetbrains/python/testing/PythonTestRunConfigurationForm.java index 742f18a17138..974a3a82739f 100644 --- a/python/src/com/jetbrains/python/testing/PythonTestRunConfigurationForm.java +++ b/python/src/com/jetbrains/python/testing/PythonTestRunConfigurationForm.java @@ -5,7 +5,7 @@ import com.intellij.openapi.ui.LabeledComponent; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.ui.ComponentWithAnchor; +import com.intellij.ui.PanelWithAnchor; import com.intellij.ui.components.JBLabel; import com.jetbrains.python.PyBundle; import com.jetbrains.python.run.AbstractPyCommonOptionsForm; @@ -24,7 +24,7 @@ import static com.jetbrains.python.testing.unittest.PythonUnitTestRunConfigurati /** * @author Leonid Shalupov */ -public class PythonTestRunConfigurationForm implements AbstractPythonTestRunConfigurationParams, ComponentWithAnchor { +public class PythonTestRunConfigurationForm implements AbstractPythonTestRunConfigurationParams, PanelWithAnchor { private JPanel myRootPanel; private LabeledComponent myTestClassComponent; private LabeledComponent myTestMethodComponent; diff --git a/python/src/com/jetbrains/python/testing/pytest/PyTestConfigurationEditor.java b/python/src/com/jetbrains/python/testing/pytest/PyTestConfigurationEditor.java index b9afaa31afa6..513f8f78ce57 100644 --- a/python/src/com/jetbrains/python/testing/pytest/PyTestConfigurationEditor.java +++ b/python/src/com/jetbrains/python/testing/pytest/PyTestConfigurationEditor.java @@ -6,7 +6,7 @@ import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.TextFieldWithBrowseButton; -import com.intellij.ui.ComponentWithAnchor; +import com.intellij.ui.PanelWithAnchor; import com.intellij.ui.components.JBLabel; import com.jetbrains.python.PyBundle; import com.jetbrains.python.run.AbstractPyCommonOptionsForm; @@ -19,7 +19,7 @@ import javax.swing.*; /** * @author yole */ -public class PyTestConfigurationEditor extends SettingsEditor implements ComponentWithAnchor { +public class PyTestConfigurationEditor extends SettingsEditor implements PanelWithAnchor { private JPanel myMainPanel; private JPanel myCommonOptionsPlaceholder; private JTextField myKeywordsTextField;