blob: 9732bb767e77fc5032d884f02832c79a0c9581b4 [file] [log] [blame]
{"version":3,"sources":["../../src/rules/requireJsdoc.js"],"names":["OPTIONS_SCHEMA","additionalProperties","properties","contexts","items","type","exemptEmptyFunctions","default","publicOnly","oneOf","ancestorsOnly","cjs","esm","window","require","ArrowFunctionExpression","ClassDeclaration","ClassExpression","FunctionDeclaration","FunctionExpression","MethodDefinition","getOption","context","baseObject","option","key","_","has","options","getOptions","baseObj","get","Object","keys","reduce","obj","prop","opt","create","sourceCode","getSourceCode","settings","requireOption","checkJsDoc","node","jsDocNode","functionParameterNames","jsdocUtils","getFunctionParameterNames","length","hasReturnValue","fix","fixer","lines","minLines","maxLines","indent","getIndent","insertion","repeat","slice","baseNode","includes","parent","insertTextBefore","report","loc","end","start","messageId","Boolean","initModuleExports","initWindow","parseResult","exportParser","parse","ast","exported","isExported","assign","getContextObject","enforcedContexts","value","meta","doc","category","description","recommended","url","fixable","messages","missingJsDoc","schema"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport jsdocUtils from '../jsdocUtils';\nimport exportParser from '../exportParser';\nimport getJSDocComment from '../eslint/getJSDocComment';\nimport warnRemovedSettings from '../warnRemovedSettings';\nimport {getSettings} from '../iterateJsdoc';\n\nconst OPTIONS_SCHEMA = {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n exemptEmptyFunctions: {\n default: false,\n type: 'boolean',\n },\n publicOnly: {\n oneOf: [\n {\n default: false,\n type: 'boolean',\n },\n {\n additionalProperties: false,\n default: {},\n properties: {\n ancestorsOnly: {\n type: 'boolean',\n },\n cjs: {\n type: 'boolean',\n },\n esm: {\n type: 'boolean',\n },\n window: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n require: {\n additionalProperties: false,\n default: {},\n properties: {\n ArrowFunctionExpression: {\n default: false,\n type: 'boolean',\n },\n ClassDeclaration: {\n default: false,\n type: 'boolean',\n },\n ClassExpression: {\n default: false,\n type: 'boolean',\n },\n FunctionDeclaration: {\n default: true,\n type: 'boolean',\n },\n FunctionExpression: {\n default: false,\n type: 'boolean',\n },\n MethodDefinition: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n};\n\nconst getOption = (context, baseObject, option, key) => {\n if (!_.has(context, `options[0][${option}][${key}]`)) {\n return baseObject.properties[key].default;\n }\n\n return context.options[0][option][key];\n};\n\nconst getOptions = (context) => {\n return {\n exemptEmptyFunctions: context.options[0] ? context.options[0].exemptEmptyFunctions : false,\n publicOnly: ((baseObj) => {\n const publicOnly = _.get(context, 'options[0].publicOnly');\n if (!publicOnly) {\n return false;\n }\n\n return Object.keys(baseObj.properties).reduce((obj, prop) => {\n const opt = getOption(context, baseObj, 'publicOnly', prop);\n obj[prop] = opt;\n\n return obj;\n }, {});\n })(OPTIONS_SCHEMA.properties.publicOnly.oneOf[1]),\n require: ((baseObj) => {\n return Object.keys(baseObj.properties).reduce((obj, prop) => {\n const opt = getOption(context, baseObj, 'require', prop);\n obj[prop] = opt;\n\n return obj;\n }, {});\n })(OPTIONS_SCHEMA.properties.require),\n };\n};\n\nexport default {\n create (context) {\n warnRemovedSettings(context, 'require-jsdoc');\n\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n\n const {require: requireOption, publicOnly, exemptEmptyFunctions} = getOptions(context);\n\n const checkJsDoc = (node) => {\n const jsDocNode = getJSDocComment(sourceCode, node, settings);\n\n if (jsDocNode) {\n return;\n }\n\n if (exemptEmptyFunctions) {\n const functionParameterNames = jsdocUtils.getFunctionParameterNames(node);\n if (!functionParameterNames.length && !jsdocUtils.hasReturnValue(node, context)) {\n return;\n }\n }\n\n const fix = (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n const indent = jsdocUtils.getIndent(sourceCode);\n const insertion = `/**\\n${indent}*\\n${indent}*/${'\\n'.repeat(lines)}${indent.slice(0, -1)}`;\n const baseNode = [\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n ].includes(node.parent && node.parent.type) ? node.parent : node;\n\n return fixer.insertTextBefore(baseNode, insertion);\n };\n\n const report = () => {\n const loc = {\n end: node.loc.start + 1,\n start: node.loc.start,\n };\n context.report({\n fix,\n loc,\n messageId: 'missingJsDoc',\n node,\n });\n };\n\n if (publicOnly) {\n const opt = {\n ancestorsOnly: Boolean(_.get(publicOnly, 'ancestorsOnly', false)),\n esm: Boolean(_.get(publicOnly, 'esm', true)),\n initModuleExports: Boolean(_.get(publicOnly, 'cjs', true)),\n initWindow: Boolean(_.get(publicOnly, 'window', false)),\n };\n const parseResult = exportParser.parse(sourceCode.ast, node, opt);\n const exported = exportParser.isExported(node, parseResult, opt);\n\n if (exported) {\n report();\n }\n } else {\n report();\n }\n };\n\n // eslint-disable-next-line fp/no-mutating-assign\n return Object.assign(\n jsdocUtils.getContextObject(jsdocUtils.enforcedContexts(context, []), checkJsDoc),\n {\n ArrowFunctionExpression (node) {\n if (!requireOption.ArrowFunctionExpression) {\n return;\n }\n\n if (!['VariableDeclarator', 'ExportDefaultDeclaration'].includes(node.parent.type)) {\n return;\n }\n\n checkJsDoc(node);\n },\n\n ClassDeclaration (node) {\n if (!requireOption.ClassDeclaration) {\n return;\n }\n\n checkJsDoc(node);\n },\n\n ClassExpression (node) {\n if (!requireOption.ClassExpression) {\n return;\n }\n\n checkJsDoc(node);\n },\n\n FunctionDeclaration (node) {\n if (!requireOption.FunctionDeclaration) {\n return;\n }\n\n checkJsDoc(node);\n },\n\n FunctionExpression (node) {\n if (requireOption.MethodDefinition && node.parent.type === 'MethodDefinition') {\n checkJsDoc(node);\n\n return;\n }\n\n if (!requireOption.FunctionExpression) {\n return;\n }\n\n if (\n ['VariableDeclarator', 'AssignmentExpression', 'ExportDefaultDeclaration'].includes(node.parent.type) ||\n node.parent.type === 'Property' && node === node.parent.value\n ) {\n checkJsDoc(node);\n }\n },\n },\n );\n },\n meta: {\n doc: {\n category: 'Stylistic Issues',\n description: 'Require JSDoc comments',\n recommended: 'true',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc',\n },\n\n fixable: 'code',\n\n messages: {\n missingJsDoc: 'Missing JSDoc comment.',\n },\n\n schema: [\n OPTIONS_SCHEMA,\n ],\n\n type: 'suggestion',\n },\n};\n"],"file":"requireJsdoc.js"}