| /** |
| * @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", |
| default: false |
| }, |
| MethodDefinition: { |
| type: "boolean", |
| default: false |
| }, |
| FunctionDeclaration: { |
| type: "boolean", |
| default: true |
| }, |
| ArrowFunctionExpression: { |
| type: "boolean", |
| default: false |
| }, |
| FunctionExpression: { |
| type: "boolean", |
| default: false |
| } |
| }, |
| additionalProperties: false, |
| default: {} |
| } |
| }, |
| additionalProperties: false |
| } |
| ], |
| |
| deprecated: true, |
| replacedBy: [] |
| }, |
| |
| 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); |
| } |
| } |
| }; |
| } |
| }; |