From a2ab96d619694f25b8af5999a19cd906e26daccf Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 6 Feb 2013 21:08:57 +0100 Subject: [PATCH] PyParameter.isSelf(); highlight first argument of @classmethod as self (PY-6881) --- .../com/jetbrains/python/psi/PyParameter.java | 6 ++++ .../PyUnusedLocalInspectionVisitor.java | 12 ++----- .../python/psi/impl/PyNamedParameterImpl.java | 29 +++++++++++++++-- .../psi/impl/PySingleStarParameterImpl.java | 5 +++ .../python/psi/impl/PyTupleParameterImpl.java | 5 +++ .../validation/HighlightingAnnotator.java | 31 ++----------------- 6 files changed, 48 insertions(+), 40 deletions(-) diff --git a/python/psi-api/src/com/jetbrains/python/psi/PyParameter.java b/python/psi-api/src/com/jetbrains/python/psi/PyParameter.java index 123505596fca..a63d47be38f5 100644 --- a/python/psi-api/src/com/jetbrains/python/psi/PyParameter.java +++ b/python/psi-api/src/com/jetbrains/python/psi/PyParameter.java @@ -26,4 +26,10 @@ public interface PyParameter extends PyElement { PyExpression getDefaultValue(); boolean hasDefaultValue(); + + /** + * @return true if the parameter is the 'self' parameter of an instance attribute function or a function + * annotated with @classmethod + */ + boolean isSelf(); } diff --git a/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java b/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java index 1454a9c19f42..5aae8e6ec16b 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java +++ b/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java @@ -247,15 +247,9 @@ public class PyUnusedLocalInspectionVisitor extends PyInspectionVisitor { ? (PyNamedParameter) element : (PyNamedParameter) element.getParent(); name = namedParameter.getName(); - if (PsiTreeUtil.getParentOfType(element, PyClass.class) != null) { - // When function is inside a class, first parameter may be either self or cls which is always 'used'. - final PyFunction method = PsiTreeUtil.getParentOfType(element, PyFunction.class); - if (method != null && method.getModifier() != PyFunction.Modifier.STATICMETHOD) { - final PsiElement parent = namedParameter.getParent(); - if (parent instanceof PyParameterList && ((PyParameterList)parent).getParameters()[0] == namedParameter) { - continue; - } - } + // When function is inside a class, first parameter may be either self or cls which is always 'used'. + if (namedParameter.isSelf()) { + continue; } if (myIgnoreLambdaParameters && PsiTreeUtil.getParentOfType(element, Callable.class) instanceof PyLambdaExpression) { continue; diff --git a/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java b/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java index 7f16c71e37a3..1ebeec40f793 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java @@ -9,6 +9,7 @@ import com.intellij.psi.stubs.IStubElementType; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.PlatformIcons; +import com.jetbrains.cython.psi.CythonClass; import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.PyNames; import com.jetbrains.python.PyTokenTypes; @@ -157,11 +158,10 @@ public class PyNamedParameterImpl extends PyPresentableElementImpl