From 2a6368d98b0239dd2a3c328caa2c459d91452262 Mon Sep 17 00:00:00 2001 From: Dmitry Cheryasov Date: Fri, 3 Sep 2010 18:58:14 +0300 Subject: [PATCH] PY-1416: saner missing docstring inspection. --- .../com/jetbrains/python/PyBundle.properties | 2 ++ .../inspections/PyDocstringInspection.java | 29 +++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/python/src/com/jetbrains/python/PyBundle.properties b/python/src/com/jetbrains/python/PyBundle.properties index 2479f3381aca..d63ed09108c6 100644 --- a/python/src/com/jetbrains/python/PyBundle.properties +++ b/python/src/com/jetbrains/python/PyBundle.properties @@ -214,6 +214,8 @@ INSP.NAME.raising.new.style.class=Raising a new style class # PyDocstringInspection INSP.NAME.docstring=Missing or empty docstring +INSP.no.docstring=Missing docstring +INSP.empty.docstring=Empty docstring # PyStatementEffectInspection INSP.NAME.statement.effect=Statement has no effect diff --git a/python/src/com/jetbrains/python/inspections/PyDocstringInspection.java b/python/src/com/jetbrains/python/inspections/PyDocstringInspection.java index 122317fa0ec3..329c2134230d 100644 --- a/python/src/com/jetbrains/python/inspections/PyDocstringInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyDocstringInspection.java @@ -2,8 +2,11 @@ package com.jetbrains.python.inspections; import com.intellij.codeInspection.LocalInspectionTool; import com.intellij.codeInspection.ProblemsHolder; +import com.intellij.lang.ASTNode; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.PsiNamedElement; import com.jetbrains.python.PyBundle; import com.jetbrains.python.console.PydevConsoleRunner; import com.jetbrains.python.psi.*; @@ -45,12 +48,14 @@ public class PyDocstringInspection extends PyInspection { @Override public void visitPyFunction(PyFunction node) { - checkDocString(node); + final String name = node.getName(); + if (name != null && !name.startsWith("_")) checkDocString(node); } @Override public void visitPyClass(PyClass node) { - checkDocString(node); + final String name = node.getName(); + if (name != null && !name.startsWith("_")) checkDocString(node); } private void checkDocString(PyDocStringOwner node) { @@ -59,9 +64,23 @@ public class PyDocstringInspection extends PyInspection { } final PyStringLiteralExpression docStringExpression = node.getDocStringExpression(); if (docStringExpression == null) { - registerProblem(node, "Missing docstring"); // node? - } else if (StringUtil.isEmptyOrSpaces(docStringExpression.getStringValue())) { - registerProblem(docStringExpression, "Empty docstring"); + PsiElement marker = null; + if (node instanceof PyClass) { + final ASTNode n = ((PyClass)node).getNameNode(); + if (n != null) marker = n.getPsi(); + } + else if (node instanceof PyFunction) { + final ASTNode n = ((PyFunction)node).getNameNode(); + if (n != null) marker = n.getPsi(); + } + else if (node instanceof PyFile) { + marker = node.findElementAt(0); + } + if (marker == null) marker = node; + registerProblem(marker, PyBundle.message("INSP.no.docstring")); + } + else if (StringUtil.isEmptyOrSpaces(docStringExpression.getStringValue())) { + registerProblem(docStringExpression, PyBundle.message("INSP.empty.docstring")); } } }