eslint-plugin-jsdoc
Version:
JSDoc linting rules for ESLint.
1 lines • 12.8 kB
Source Map (JSON)
{"version":3,"file":"checkValues.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_parseImportsExports","_semver","_spdxExpressionParse","e","__esModule","default","allowedKinds","Set","_default","exports","iterateJsdoc","context","report","settings","utils","options","allowedAuthors","allowedLicenses","licensePattern","numericOnlyVariation","forEachPreferredTag","jsdocParameter","targetTagName","version","getTagDescription","trim","semver","valid","kind","has","join","variation","Number","isInteger","licenseRegex","getRegexFromString","matches","matchAll","positiveMatch","match","license","includes","spdxExpressionParse","mode","tag","description","name","type","typePart","imprt","importsExports","parseImportsExports","errors","author","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","anyOf","module"],"sources":["../../src/rules/checkValues.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\nimport semver from 'semver';\nimport spdxExpressionParse from 'spdx-expression-parse';\n\nconst allowedKinds = new Set([\n 'class',\n 'constant',\n 'event',\n 'external',\n 'file',\n 'function',\n 'member',\n 'mixin',\n 'module',\n 'namespace',\n 'typedef',\n]);\n\nexport default iterateJsdoc(({\n context,\n report,\n settings,\n utils,\n}) => {\n const options = context.options[0] || {};\n const {\n allowedAuthors = null,\n allowedLicenses = null,\n licensePattern = '/([^\\n\\r]*)/gu',\n numericOnlyVariation = false,\n } = options;\n\n utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n\n utils.forEachPreferredTag('kind', (jsdocParameter, targetTagName) => {\n const kind = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!kind) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!allowedKinds.has(kind)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; ` +\n `must be one of: ${[\n ...allowedKinds,\n ].join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n\n if (numericOnlyVariation) {\n utils.forEachPreferredTag('variation', (jsdocParameter, targetTagName) => {\n const variation = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!variation) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (\n !Number.isInteger(Number(variation)) ||\n Number(variation) <= 0\n ) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('since', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n utils.forEachPreferredTag('license', (jsdocParameter, targetTagName) => {\n const licenseRegex = utils.getRegexFromString(licensePattern, 'g');\n const matches = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).matchAll(licenseRegex);\n let positiveMatch = false;\n for (const match of matches) {\n const license = match[1] || match[0];\n if (license) {\n positiveMatch = true;\n }\n\n if (!license.trim()) {\n // Avoid reporting again as empty match\n if (positiveMatch) {\n return;\n }\n\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedLicenses) {\n if (allowedLicenses !== true && !allowedLicenses.includes(license)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected one of ${allowedLicenses.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n } else {\n try {\n spdxExpressionParse(license);\n } catch {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected SPDX expression: https://spdx.org/licenses/.`,\n null,\n jsdocParameter,\n );\n }\n }\n }\n });\n\n if (settings.mode === 'typescript') {\n utils.forEachPreferredTag('import', (tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n if (importsExports.errors) {\n report(\n 'Bad @import tag',\n null,\n tag,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('author', (jsdocParameter, targetTagName) => {\n const author = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!author) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedAuthors && !allowedAuthors.includes(author)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; expected one of ${allowedAuthors.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-values.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedAuthors: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n allowedLicenses: {\n anyOf: [\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n {\n type: 'boolean',\n },\n ],\n },\n licensePattern: {\n type: 'string',\n },\n numericOnlyVariation: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}