123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /**
- * @fileoverview Rule to check for jsdoc presence.
- * @author Gyandeep Singh
- */
- "use strict";
-
- module.exports = {
- meta: {
- type: "suggestion",
-
- docs: {
- description: "require JSDoc comments",
- category: "Stylistic Issues",
- recommended: false,
- url: "https://eslint.org/docs/rules/require-jsdoc"
- },
-
- schema: [
- {
- type: "object",
- properties: {
- require: {
- type: "object",
- properties: {
- ClassDeclaration: {
- type: "boolean"
- },
- MethodDefinition: {
- type: "boolean"
- },
- FunctionDeclaration: {
- type: "boolean"
- },
- ArrowFunctionExpression: {
- type: "boolean"
- },
- FunctionExpression: {
- type: "boolean"
- }
- },
- additionalProperties: false
- }
- },
- additionalProperties: false
- }
- ]
- },
-
- create(context) {
- const source = context.getSourceCode();
- const DEFAULT_OPTIONS = {
- FunctionDeclaration: true,
- MethodDefinition: false,
- ClassDeclaration: false,
- ArrowFunctionExpression: false,
- FunctionExpression: false
- };
- const options = Object.assign(DEFAULT_OPTIONS, context.options[0] && context.options[0].require || {});
-
- /**
- * Report the error message
- * @param {ASTNode} node node to report
- * @returns {void}
- */
- function report(node) {
- context.report({ node, message: "Missing JSDoc comment." });
- }
-
- /**
- * Check if the jsdoc comment is present or not.
- * @param {ASTNode} node node to examine
- * @returns {void}
- */
- function checkJsDoc(node) {
- const jsdocComment = source.getJSDocComment(node);
-
- if (!jsdocComment) {
- report(node);
- }
- }
-
- return {
- FunctionDeclaration(node) {
- if (options.FunctionDeclaration) {
- checkJsDoc(node);
- }
- },
- FunctionExpression(node) {
- if (
- (options.MethodDefinition && node.parent.type === "MethodDefinition") ||
- (options.FunctionExpression && (node.parent.type === "VariableDeclarator" || (node.parent.type === "Property" && node === node.parent.value)))
- ) {
- checkJsDoc(node);
- }
- },
- ClassDeclaration(node) {
- if (options.ClassDeclaration) {
- checkJsDoc(node);
- }
- },
- ArrowFunctionExpression(node) {
- if (options.ArrowFunctionExpression && node.parent.type === "VariableDeclarator") {
- checkJsDoc(node);
- }
- }
- };
- }
- };
|