blob: 3f531724861df6a8a0492a2ba28f0cdd64a743e0 [file] [log] [blame]
{"version":3,"sources":["../../src/rules/checkTagNames.js"],"names":["sourceCode","jsdoc","report","utils","context","settings","jsdocNode","tags","options","definedTags","definedPreferredTags","definedNonPreferredTags","tagNamePreference","Object","keys","length","_","values","map","preferredTag","undefined","reportSettings","replacement","filter","preferredType","forEach","jsdocTag","tagName","tag","isValidTag","preferredTagName","getPreferredTagName","allowObjectReturn","defaultMessage","message","fixer","getText","replace","RegExp","escapeRegExp","replaceText","iterateAllJsdocs","meta","fixable","schema","additionalProperties","properties","items","type"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdoc,\n report,\n utils,\n context,\n settings,\n jsdocNode,\n}) => {\n if (!jsdoc.tags) {\n return;\n }\n const {definedTags = []} = context.options[0] || {};\n\n let definedPreferredTags = [];\n let definedNonPreferredTags = [];\n const {tagNamePreference} = settings;\n if (Object.keys(tagNamePreference).length) {\n definedNonPreferredTags = _.keys(tagNamePreference);\n\n // Replace `_.values` with `Object.values` when we may start requiring Node 7+\n definedPreferredTags = _.values(tagNamePreference).map((preferredTag) => {\n if (typeof preferredTag === 'string') {\n // May become an empty string but will be filtered out below\n return preferredTag;\n }\n if (!preferredTag) {\n return undefined;\n }\n if (typeof preferredTag !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.',\n );\n }\n\n return preferredTag.replacement;\n }).filter((preferredType) => {\n return preferredType;\n });\n }\n\n jsdoc.tags.forEach((jsdocTag) => {\n const tagName = jsdocTag.tag;\n if (utils.isValidTag(tagName, [...definedTags, ...definedPreferredTags, ...definedNonPreferredTags])) {\n let preferredTagName = utils.getPreferredTagName({\n allowObjectReturn: true,\n defaultMessage: `Blacklisted tag found (\\`@${tagName}\\`)`,\n tagName,\n });\n let message = `Invalid JSDoc tag (preference). Replace \"${tagName}\" JSDoc tag with \"${preferredTagName}\".`;\n if (!preferredTagName) {\n return;\n }\n if (typeof preferredTagName === 'object') {\n ({message, replacement: preferredTagName} = preferredTagName);\n }\n\n if (preferredTagName !== tagName) {\n report(message, (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).replace(\n new RegExp(`@${_.escapeRegExp(tagName)}\\\\b`, 'u'),\n `@${preferredTagName}`,\n );\n\n return fixer.replaceText(jsdocNode, replacement);\n }, jsdocTag);\n }\n } else {\n report(`Invalid JSDoc tag name \"${tagName}\".`, null, jsdocTag);\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTagNames.js"}