You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							117 lines
						
					
					
						
							3.6 KiB
						
					
					
				
			
		
		
	
	
							117 lines
						
					
					
						
							3.6 KiB
						
					
					
				/** | 
						|
 * @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); | 
						|
                } | 
						|
            } | 
						|
        }; | 
						|
    } | 
						|
};
 | 
						|
 |