diff --git a/python/psi-api/src/com/jetbrains/python/PyNames.java b/python/psi-api/src/com/jetbrains/python/PyNames.java index da970ed07576..e1b99d0135a8 100644 --- a/python/psi-api/src/com/jetbrains/python/PyNames.java +++ b/python/psi-api/src/com/jetbrains/python/PyNames.java @@ -65,6 +65,7 @@ public class PyNames { public static final String ASSERT_IS_INSTANCE = "assertIsInstance"; public static final String HAS_ATTR = "hasattr"; + public static final String DOC = "__doc__"; public static final String DOCFORMAT = "__docformat__"; public static final String DIRNAME = "dirname"; diff --git a/python/psi-api/src/com/jetbrains/python/psi/PyAssignmentStatement.java b/python/psi-api/src/com/jetbrains/python/psi/PyAssignmentStatement.java index 4a6977bc82b1..2490ba4a24b0 100644 --- a/python/psi-api/src/com/jetbrains/python/psi/PyAssignmentStatement.java +++ b/python/psi-api/src/com/jetbrains/python/psi/PyAssignmentStatement.java @@ -62,4 +62,6 @@ public interface PyAssignmentStatement extends PyStatement, NameDefiner { @Nullable PyExpression getLeftHandSideExpression(); + boolean isAssignmentTo(@NotNull String name); + } diff --git a/python/src/com/jetbrains/python/psi/impl/PyAssignmentStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyAssignmentStatementImpl.java index d46826399c8d..57a7fef14bb4 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyAssignmentStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyAssignmentStatementImpl.java @@ -139,6 +139,12 @@ public class PyAssignmentStatementImpl extends PyElementImpl implements PyAssign return (PyExpression)child; } + @Override + public boolean isAssignmentTo(@NotNull String name) { + PyExpression lhs = getLeftHandSideExpression(); + return lhs instanceof PyTargetExpression && name.equals(lhs.getName()); + } + private static void mapToValues(PyExpression lhs, PyExpression rhs, List> map) { // cast for convenience PySequenceExpression lhs_tuple = null; diff --git a/python/src/com/jetbrains/python/validation/DocStringAnnotator.java b/python/src/com/jetbrains/python/validation/DocStringAnnotator.java index 51ceb1aef815..76b5c2df8dd6 100644 --- a/python/src/com/jetbrains/python/validation/DocStringAnnotator.java +++ b/python/src/com/jetbrains/python/validation/DocStringAnnotator.java @@ -4,6 +4,7 @@ import com.intellij.lang.annotation.Annotation; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.util.TextRange; +import com.jetbrains.python.PyNames; import com.jetbrains.python.documentation.*; import com.jetbrains.python.highlighting.PyHighlighter; import com.jetbrains.python.psi.*; @@ -30,8 +31,7 @@ public class DocStringAnnotator extends PyAnnotator { @Override public void visitPyAssignmentStatement(PyAssignmentStatement node) { - PyExpression left = node.getLeftHandSideExpression(); - if (left != null && "__doc__".equals(left.getName())) { + if (node.isAssignmentTo(PyNames.DOC)) { PyExpression right = node.getAssignedValue(); if (right instanceof PyStringLiteralExpression) { Annotation ann = getHolder().createInfoAnnotation(right, null);