Remove redundant code left from the previous combined inspection.
Leave check PyInspectionExtension#ignoreMissingDocstring() only in
MissingOrEmptyDocstringInspection.
import com.intellij.codeInspection.LocalInspectionToolSession;
import com.intellij.codeInspection.ProblemsHolder;
-import com.intellij.openapi.extensions.Extensions;
import com.jetbrains.python.psi.*;
import com.jetbrains.python.testing.PythonUnitTestUtil;
import org.jetbrains.annotations.NotNull;
public abstract class PyBaseDocstringInspection extends PyInspection {
@NotNull
@Override
- public abstract Visitor buildVisitor(@NotNull ProblemsHolder holder,
- boolean isOnTheFly,
- @NotNull LocalInspectionToolSession session);
+ public abstract Visitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly, @NotNull LocalInspectionToolSession session);
protected static abstract class Visitor extends PyInspectionVisitor {
public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) {
}
@Override
- public void visitPyFile(@NotNull PyFile node) {
+ public final void visitPyFile(@NotNull PyFile node) {
checkDocString(node);
}
@Override
- public void visitPyFunction(@NotNull PyFunction node) {
+ public final void visitPyFunction(@NotNull PyFunction node) {
if (PythonUnitTestUtil.isUnitTestCaseFunction(node)) return;
final PyClass containingClass = node.getContainingClass();
if (containingClass != null && PythonUnitTestUtil.isUnitTestCaseClass(containingClass)) return;
}
@Override
- public void visitPyClass(@NotNull PyClass node) {
+ public final void visitPyClass(@NotNull PyClass node) {
if (PythonUnitTestUtil.isUnitTestCaseClass(node)) return;
final String name = node.getName();
if (name == null || name.startsWith("_")) {
checkDocString(node);
}
- protected void checkDocString(@NotNull PyDocStringOwner node) {
- for (PyInspectionExtension extension : Extensions.getExtensions(PyInspectionExtension.EP_NAME)) {
- if (extension.ignoreMissingDocstring(node)) {
- return;
- }
- }
- }
+ protected abstract void checkDocString(@NotNull PyDocStringOwner node);
}
}
public class PyIncorrectDocstringInspection extends PyBaseDocstringInspection {
@NotNull
@Override
- public Visitor buildVisitor(@NotNull ProblemsHolder holder,
- boolean isOnTheFly,
- @NotNull LocalInspectionToolSession session) {
+ public Visitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly, @NotNull LocalInspectionToolSession session) {
return new Visitor(holder, session) {
@Override
protected void checkDocString(@NotNull PyDocStringOwner node) {
- super.checkDocString(node);
- final PyStringLiteralExpression docStringExpression1 = node.getDocStringExpression();
- if (docStringExpression1 != null) {
- checkParameters(node, docStringExpression1);
+ final PyStringLiteralExpression docstringExpr = node.getDocStringExpression();
+ if (docstringExpr != null) {
+ checkParameters(node, docstringExpr);
}
}
- private boolean checkParameters(@NotNull PyDocStringOwner pyDocStringOwner, @NotNull PyStringLiteralExpression node) {
+ private void checkParameters(@NotNull PyDocStringOwner pyDocStringOwner, @NotNull PyStringLiteralExpression node) {
final String text = node.getText();
if (text == null) {
- return false;
+ return;
}
final StructuredDocString docString = DocStringUtil.parse(text, node);
if (docString instanceof PlainDocString) {
- return false;
+ return;
}
if (pyDocStringOwner instanceof PyFunction) {
final PyParameter[] realParams = ((PyFunction)pyDocStringOwner).getParameterList().getParameters();
final List<PyNamedParameter> missingParams = getMissingParams(docString, realParams);
- boolean registered = false;
if (!missingParams.isEmpty()) {
for (PyNamedParameter param : missingParams) {
registerProblem(param,
PyBundle.message("INSP.missing.parameter.in.docstring", param.getName()),
new DocstringQuickFix(param, null));
}
- registered = true;
}
final List<Substring> unexpectedParams = getUnexpectedParams(docString, realParams);
if (!unexpectedParams.isEmpty()) {
new DocstringQuickFix(null, param.getValue()));
}
}
- registered = true;
}
- return registered;
}
- return false;
}
};
}
import com.intellij.codeInspection.LocalInspectionToolSession;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.lang.ASTNode;
+import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
public class PyMissingOrEmptyDocstringInspection extends PyBaseDocstringInspection {
@NotNull
@Override
- public Visitor buildVisitor(@NotNull ProblemsHolder holder,
- boolean isOnTheFly,
- @NotNull LocalInspectionToolSession session) {
+ public Visitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly, @NotNull LocalInspectionToolSession session) {
return new Visitor(holder, session) {
@Override
protected void checkDocString(@NotNull PyDocStringOwner node) {
- super.checkDocString(node);
final PyStringLiteralExpression docStringExpression = node.getDocStringExpression();
if (docStringExpression == null) {
+ for (PyInspectionExtension extension : Extensions.getExtensions(PyInspectionExtension.EP_NAME)) {
+ if (extension.ignoreMissingDocstring(node)) {
+ return;
+ }
+ }
PsiElement marker = null;
if (node instanceof PyClass) {
final ASTNode n = ((PyClass)node).getNameNode();