eslint-plugin-jsdoc 37.3.0 → 37.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +122 -8
  2. package/dist/alignTransform.js.map +1 -1
  3. package/dist/bin/generateRule.js.map +1 -1
  4. package/dist/exportParser.js.map +1 -1
  5. package/dist/generateRule.js.map +1 -1
  6. package/dist/getDefaultTagStructureForMode.js.map +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/iterateJsdoc.js.map +1 -1
  9. package/dist/jsdocUtils.js.map +1 -1
  10. package/dist/rules/checkAccess.js.map +1 -1
  11. package/dist/rules/checkExamples.js +2 -2
  12. package/dist/rules/checkExamples.js.map +1 -1
  13. package/dist/rules/checkIndentation.js.map +1 -1
  14. package/dist/rules/checkLineAlignment.js.map +1 -1
  15. package/dist/rules/checkParamNames.js.map +1 -1
  16. package/dist/rules/checkPropertyNames.js.map +1 -1
  17. package/dist/rules/checkSyntax.js.map +1 -1
  18. package/dist/rules/checkTagNames.js.map +1 -1
  19. package/dist/rules/checkTypes.js.map +1 -1
  20. package/dist/rules/emptyTags.js.map +1 -1
  21. package/dist/rules/matchDescription.js +1 -1
  22. package/dist/rules/matchDescription.js.map +1 -1
  23. package/dist/rules/matchName.js.map +1 -1
  24. package/dist/rules/multilineBlocks.js.map +1 -1
  25. package/dist/rules/newlineAfterDescription.js.map +1 -1
  26. package/dist/rules/noBadBlocks.js.map +1 -1
  27. package/dist/rules/noDefaults.js.map +1 -1
  28. package/dist/rules/noMissingSyntax.js.map +1 -1
  29. package/dist/rules/noMultiAsterisks.js +25 -5
  30. package/dist/rules/noMultiAsterisks.js.map +1 -1
  31. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  32. package/dist/rules/noTypes.js.map +1 -1
  33. package/dist/rules/noUndefinedTypes.js.map +1 -1
  34. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  35. package/dist/rules/requireDescription.js.map +1 -1
  36. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  37. package/dist/rules/requireExample.js.map +1 -1
  38. package/dist/rules/requireFileOverview.js.map +1 -1
  39. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  40. package/dist/rules/requireJsdoc.js.map +1 -1
  41. package/dist/rules/requireParam.js.map +1 -1
  42. package/dist/rules/requireProperty.js.map +1 -1
  43. package/dist/rules/requireReturns.js.map +1 -1
  44. package/dist/rules/requireReturnsCheck.js +9 -2
  45. package/dist/rules/requireReturnsCheck.js.map +1 -1
  46. package/dist/rules/requireReturnsDescription.js.map +1 -1
  47. package/dist/rules/requireThrows.js +4 -0
  48. package/dist/rules/requireThrows.js.map +1 -1
  49. package/dist/rules/requireYields.js.map +1 -1
  50. package/dist/rules/requireYieldsCheck.js +8 -0
  51. package/dist/rules/requireYieldsCheck.js.map +1 -1
  52. package/dist/rules/tagLines.js.map +1 -1
  53. package/dist/rules/validTypes.js.map +1 -1
  54. package/dist/tagNames.js.map +1 -1
  55. package/package.json +14 -13
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/checkLineAlignment.js"],"names":["flow","commentFlow","transforms","checkNotAlignedPerTag","utils","tag","customSpacings","spacerProps","contentProps","mightHaveNamepath","tagMightHaveNamepath","tokens","source","followedBySpace","idx","callbck","nextIndex","slice","some","spacerProp","innerIdx","contentProp","spacePropVal","ret","ok","contentPropVal","spacerPropVal","spacing","length","fix","entries","padStart","hasSpace","contentPrp","setTag","reportJSDoc","checkAlignment","indent","jsdoc","jsdocNode","preserveMainDescriptionPostDelimiter","report","tags","transform","transformedJsdoc","comment","value","formatted","stringify","trimStart","fixer","replaceText","context","applicableTags","options","includes","foundTags","getPresentTags","iterateAllJsdocs","meta","docs","description","url","fixable","schema","enum","type","additionalProperties","properties","postDelimiter","postName","postTag","postType","default","items"],"mappings":"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","sourcesContent":["import {\n transforms,\n} from 'comment-parser';\nimport alignTransform from '../alignTransform';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst {\n flow: commentFlow,\n} = transforms;\n\nconst checkNotAlignedPerTag = (utils, tag, customSpacings) => {\n /*\n start +\n delimiter +\n postDelimiter +\n tag +\n postTag +\n type +\n postType +\n name +\n postName +\n description +\n end +\n lineEnd\n */\n let spacerProps;\n let contentProps;\n const mightHaveNamepath = utils.tagMightHaveNamepath(tag.tag);\n if (mightHaveNamepath) {\n spacerProps = ['postDelimiter', 'postTag', 'postType', 'postName'];\n contentProps = ['tag', 'type', 'name', 'description'];\n } else {\n spacerProps = ['postDelimiter', 'postTag', 'postType'];\n contentProps = ['tag', 'type', 'description'];\n }\n\n const {tokens} = tag.source[0];\n\n const followedBySpace = (idx, callbck) => {\n const nextIndex = idx + 1;\n\n return spacerProps.slice(nextIndex).some((spacerProp, innerIdx) => {\n const contentProp = contentProps[nextIndex + innerIdx];\n\n const spacePropVal = tokens[spacerProp];\n\n const ret = spacePropVal;\n\n if (callbck) {\n callbck(!ret, contentProp);\n }\n\n return ret && (callbck || !contentProp);\n });\n };\n\n // If checking alignment on multiple lines, need to check other `source`\n // items\n // Go through `post*` spacing properties and exit to indicate problem if\n // extra spacing detected\n const ok = !spacerProps.some((spacerProp, idx) => {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n const spacerPropVal = tokens[spacerProp];\n const spacing = customSpacings?.[spacerProp] || 1;\n\n // There will be extra alignment if...\n\n // 1. The spaces don't match the space it should have (1 or custom spacing) OR\n return spacerPropVal.length !== spacing && spacerPropVal.length !== 0 ||\n\n // 2. There is a (single) space, no immediate content, and yet another\n // space is found subsequently (not separated by intervening content)\n spacerPropVal && !contentPropVal && followedBySpace(idx);\n });\n if (ok) {\n return;\n }\n\n const fix = () => {\n for (const [idx, spacerProp] of spacerProps.entries()) {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n\n if (contentPropVal) {\n const spacing = customSpacings?.[spacerProp] || 1;\n tokens[spacerProp] = ''.padStart(spacing, ' ');\n followedBySpace(idx, (hasSpace, contentPrp) => {\n if (hasSpace) {\n tokens[contentPrp] = '';\n }\n });\n } else {\n tokens[spacerProp] = '';\n }\n }\n\n utils.setTag(tag, tokens);\n };\n\n utils.reportJSDoc('Expected JSDoc block lines to not be aligned.', tag, fix, true);\n};\n\nconst checkAlignment = ({\n customSpacings,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags,\n utils,\n}) => {\n const transform = commentFlow(\n alignTransform({\n customSpacings,\n indent,\n preserveMainDescriptionPostDelimiter,\n tags,\n }),\n );\n const transformedJsdoc = transform(jsdoc);\n\n const comment = '/*' + jsdocNode.value + '*/';\n const formatted = utils.stringify(transformedJsdoc)\n .trimStart();\n\n if (comment !== formatted) {\n report(\n 'Expected JSDoc block lines to be aligned.',\n (fixer) => {\n return fixer.replaceText(jsdocNode, formatted);\n },\n );\n }\n};\n\nexport default iterateJsdoc(({\n indent,\n jsdoc,\n jsdocNode,\n report,\n context,\n utils,\n}) => {\n const {\n tags: applicableTags = ['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return'],\n preserveMainDescriptionPostDelimiter,\n customSpacings,\n } = context.options[1] || {};\n\n if (context.options[0] === 'always') {\n // Skip if it contains only a single line.\n if (!jsdocNode.value.includes('\\n')) {\n return;\n }\n\n checkAlignment({\n customSpacings,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags: applicableTags,\n utils,\n });\n\n return;\n }\n\n const foundTags = utils.getPresentTags(applicableTags);\n for (const tag of foundTags) {\n checkNotAlignedPerTag(utils, tag, customSpacings);\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid alignment of JSDoc block lines.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-line-alignment',\n },\n fixable: 'whitespace',\n schema: [\n {\n enum: ['always', 'never'],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n customSpacings: {\n additionalProperties: false,\n properties: {\n postDelimiter: {\n type: 'integer',\n },\n postName: {\n type: 'integer',\n },\n postTag: {\n type: 'integer',\n },\n postType: {\n type: 'integer',\n },\n },\n },\n preserveMainDescriptionPostDelimiter: {\n default: false,\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"file":"checkLineAlignment.js"}
1
+ {"version":3,"sources":["../../src/rules/checkLineAlignment.js"],"names":["flow","commentFlow","transforms","checkNotAlignedPerTag","utils","tag","customSpacings","spacerProps","contentProps","mightHaveNamepath","tagMightHaveNamepath","tokens","source","followedBySpace","idx","callbck","nextIndex","slice","some","spacerProp","innerIdx","contentProp","spacePropVal","ret","ok","contentPropVal","spacerPropVal","spacing","length","fix","entries","padStart","hasSpace","contentPrp","setTag","reportJSDoc","checkAlignment","indent","jsdoc","jsdocNode","preserveMainDescriptionPostDelimiter","report","tags","transform","transformedJsdoc","comment","value","formatted","stringify","trimStart","fixer","replaceText","context","applicableTags","options","includes","foundTags","getPresentTags","iterateAllJsdocs","meta","docs","description","url","fixable","schema","enum","type","additionalProperties","properties","postDelimiter","postName","postTag","postType","default","items"],"mappings":"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","sourcesContent":["import {\n transforms,\n} from 'comment-parser';\nimport alignTransform from '../alignTransform';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst {\n flow: commentFlow,\n} = transforms;\n\nconst checkNotAlignedPerTag = (utils, tag, customSpacings) => {\n /*\n start +\n delimiter +\n postDelimiter +\n tag +\n postTag +\n type +\n postType +\n name +\n postName +\n description +\n end +\n lineEnd\n */\n let spacerProps;\n let contentProps;\n const mightHaveNamepath = utils.tagMightHaveNamepath(tag.tag);\n if (mightHaveNamepath) {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType', 'postName',\n ];\n contentProps = [\n 'tag', 'type', 'name', 'description',\n ];\n } else {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType',\n ];\n contentProps = [\n 'tag', 'type', 'description',\n ];\n }\n\n const {\n tokens,\n } = tag.source[0];\n\n const followedBySpace = (idx, callbck) => {\n const nextIndex = idx + 1;\n\n return spacerProps.slice(nextIndex).some((spacerProp, innerIdx) => {\n const contentProp = contentProps[nextIndex + innerIdx];\n\n const spacePropVal = tokens[spacerProp];\n\n const ret = spacePropVal;\n\n if (callbck) {\n callbck(!ret, contentProp);\n }\n\n return ret && (callbck || !contentProp);\n });\n };\n\n // If checking alignment on multiple lines, need to check other `source`\n // items\n // Go through `post*` spacing properties and exit to indicate problem if\n // extra spacing detected\n const ok = !spacerProps.some((spacerProp, idx) => {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n const spacerPropVal = tokens[spacerProp];\n const spacing = customSpacings?.[spacerProp] || 1;\n\n // There will be extra alignment if...\n\n // 1. The spaces don't match the space it should have (1 or custom spacing) OR\n return spacerPropVal.length !== spacing && spacerPropVal.length !== 0 ||\n\n // 2. There is a (single) space, no immediate content, and yet another\n // space is found subsequently (not separated by intervening content)\n spacerPropVal && !contentPropVal && followedBySpace(idx);\n });\n if (ok) {\n return;\n }\n\n const fix = () => {\n for (const [\n idx,\n spacerProp,\n ] of spacerProps.entries()) {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n\n if (contentPropVal) {\n const spacing = customSpacings?.[spacerProp] || 1;\n tokens[spacerProp] = ''.padStart(spacing, ' ');\n followedBySpace(idx, (hasSpace, contentPrp) => {\n if (hasSpace) {\n tokens[contentPrp] = '';\n }\n });\n } else {\n tokens[spacerProp] = '';\n }\n }\n\n utils.setTag(tag, tokens);\n };\n\n utils.reportJSDoc('Expected JSDoc block lines to not be aligned.', tag, fix, true);\n};\n\nconst checkAlignment = ({\n customSpacings,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags,\n utils,\n}) => {\n const transform = commentFlow(\n alignTransform({\n customSpacings,\n indent,\n preserveMainDescriptionPostDelimiter,\n tags,\n }),\n );\n const transformedJsdoc = transform(jsdoc);\n\n const comment = '/*' + jsdocNode.value + '*/';\n const formatted = utils.stringify(transformedJsdoc)\n .trimStart();\n\n if (comment !== formatted) {\n report(\n 'Expected JSDoc block lines to be aligned.',\n (fixer) => {\n return fixer.replaceText(jsdocNode, formatted);\n },\n );\n }\n};\n\nexport default iterateJsdoc(({\n indent,\n jsdoc,\n jsdocNode,\n report,\n context,\n utils,\n}) => {\n const {\n tags: applicableTags = [\n 'param', 'arg', 'argument', 'property', 'prop', 'returns', 'return',\n ],\n preserveMainDescriptionPostDelimiter,\n customSpacings,\n } = context.options[1] || {};\n\n if (context.options[0] === 'always') {\n // Skip if it contains only a single line.\n if (!jsdocNode.value.includes('\\n')) {\n return;\n }\n\n checkAlignment({\n customSpacings,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags: applicableTags,\n utils,\n });\n\n return;\n }\n\n const foundTags = utils.getPresentTags(applicableTags);\n for (const tag of foundTags) {\n checkNotAlignedPerTag(utils, tag, customSpacings);\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid alignment of JSDoc block lines.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-line-alignment',\n },\n fixable: 'whitespace',\n schema: [\n {\n enum: [\n 'always', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n customSpacings: {\n additionalProperties: false,\n properties: {\n postDelimiter: {\n type: 'integer',\n },\n postName: {\n type: 'integer',\n },\n postTag: {\n type: 'integer',\n },\n postType: {\n type: 'integer',\n },\n },\n },\n preserveMainDescriptionPostDelimiter: {\n default: false,\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"file":"checkLineAlignment.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/checkParamNames.js"],"names":["validateParameterNames","targetTagName","allowExtraTrailingParamDocs","checkDestructured","checkRestProperty","checkTypesRegex","disableExtraPropertyReporting","enableFixer","functionParameterNames","jsdoc","_jsdocNode","utils","report","paramTags","Object","entries","tags","filter","tag","paramTagsNonNested","name","includes","dotted","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","reportJSDoc","removeTag","functionParameterName","Array","isArray","type","search","parameterName","names","properties","hasPropertyRest","rests","annotationParamName","undefined","trim","tagName","expectedNames","map","actualNames","paramTag","actualTypes","missingProperties","notCheckingNames","notCheckingName","startsWith","actualNameIdx","findIndex","actualName","comparePaths","missingIndex","pathDoesNotBeginWith","line","source","number","length","push","tagPlacement","hasMissing","missingProperty","extraProperties","match","prop","split","extraProperty","funcParamName","item","join","validateParameterNamesDeep","_allowExtraTrailingParamDocs","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","context","jsdocNode","checkTypesPattern","useDefaultObjectProperties","options","getRegexFromString","jsdocParameterNamesDeep","getJsdocTagsDeep","getFunctionParameterNames","getPreferredTagName","isError","meta","docs","description","url","fixable","schema","additionalProperties"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst validateParameterNames = (\n targetTagName : string,\n allowExtraTrailingParamDocs: boolean,\n checkDestructured : boolean,\n checkRestProperty : boolean,\n checkTypesRegex : RegExp,\n disableExtraPropertyReporting,\n enableFixer: boolean,\n functionParameterNames : Array<string>, jsdoc, _jsdocNode, utils, report,\n) => {\n const paramTags = Object.entries(jsdoc.tags).filter(([, tag]) => {\n return tag.tag === targetTagName;\n });\n const paramTagsNonNested = paramTags.filter(([, tag]) => {\n return !tag.name.includes('.');\n });\n\n let dotted = 0;\n\n // eslint-disable-next-line complexity\n return paramTags.some(([, tag], index) => {\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([tgsIndex, tg], idx) => {\n tagsIndex = tgsIndex;\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n if (tag.name.includes('.')) {\n dotted++;\n\n return false;\n }\n\n const functionParameterName = functionParameterNames[index - dotted];\n\n if (!functionParameterName) {\n if (allowExtraTrailingParamDocs) {\n return false;\n }\n\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n\n if (Array.isArray(functionParameterName)) {\n if (!checkDestructured) {\n return false;\n }\n\n if (tag.type && tag.type.search(checkTypesRegex) === -1) {\n return false;\n }\n\n const [parameterName, {\n names: properties, hasPropertyRest, rests, annotationParamName,\n }] = functionParameterName;\n if (annotationParamName !== undefined) {\n const name = tag.name.trim();\n if (name !== annotationParamName) {\n report(`@${targetTagName} \"${name}\" does not match parameter name \"${annotationParamName}\"`, null, tag);\n }\n }\n\n const tagName = parameterName === undefined ? tag.name.trim() : parameterName;\n const expectedNames = properties.map((name) => {\n return `${tagName}.${name}`;\n });\n const actualNames = paramTags.map(([, paramTag]) => {\n return paramTag.name.trim();\n });\n const actualTypes = paramTags.map(([, paramTag]) => {\n return paramTag.type;\n });\n\n const missingProperties = [];\n const notCheckingNames = [];\n\n for (const [idx, name] of expectedNames.entries()) {\n if (notCheckingNames.some((notCheckingName) => {\n return name.startsWith(notCheckingName);\n })) {\n continue;\n }\n\n const actualNameIdx = actualNames.findIndex((actualName) => {\n return utils.comparePaths(name)(actualName);\n });\n if (actualNameIdx === -1) {\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const missingIndex = actualNames.findIndex((actualName) => {\n return utils.pathDoesNotBeginWith(name, actualName);\n });\n const line = tag.source[0].number - 1 + (missingIndex > -1 ? missingIndex : actualNames.length);\n missingProperties.push({\n name,\n tagPlacement: {\n line: line === 0 ? 1 : line,\n },\n });\n } else if (actualTypes[actualNameIdx].search(checkTypesRegex) === -1 && actualTypes[actualNameIdx] !== '') {\n notCheckingNames.push(name);\n }\n }\n\n const hasMissing = missingProperties.length;\n if (hasMissing) {\n for (const {tagPlacement, name: missingProperty} of missingProperties) {\n report(`Missing @${targetTagName} \"${missingProperty}\"`, null, tagPlacement);\n }\n }\n\n if (!hasPropertyRest || checkRestProperty) {\n const extraProperties = [];\n for (const [idx, name] of actualNames.entries()) {\n const match = name.startsWith(tag.name.trim() + '.');\n if (\n match && !expectedNames.some(\n utils.comparePaths(name),\n ) && !utils.comparePaths(name)(tag.name) &&\n (!disableExtraPropertyReporting || properties.some((prop) => {\n return prop.split('.').length >= name.split('.').length - 1;\n }))\n ) {\n extraProperties.push([name, paramTags[idx][1]]);\n }\n }\n\n if (extraProperties.length) {\n for (const [extraProperty, tg] of extraProperties) {\n report(`@${targetTagName} \"${extraProperty}\" does not exist on ${tag.name}`, null, tg);\n }\n\n return true;\n }\n }\n\n return hasMissing;\n }\n\n let funcParamName;\n if (typeof functionParameterName === 'object') {\n const {name} = functionParameterName;\n funcParamName = name;\n } else {\n funcParamName = functionParameterName;\n }\n\n if (funcParamName !== tag.name.trim()) {\n // Todo: Improve for array or object child items\n const actualNames = paramTagsNonNested.map(([, {name}]) => {\n return name.trim();\n });\n const expectedNames = functionParameterNames.map((item, idx) => {\n if (item?.[1]?.names) {\n return actualNames[idx];\n }\n\n return item;\n }).join(', ');\n\n report(\n `Expected @${targetTagName} names to be \"${expectedNames}\". Got \"${actualNames.join(', ')}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\nconst validateParameterNamesDeep = (\n targetTagName : string, _allowExtraTrailingParamDocs: boolean,\n jsdocParameterNames : Array<string>, jsdoc, report : Function,\n) => {\n let lastRealParameter;\n\n return jsdocParameterNames.some(({name: jsdocParameterName, idx}) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n jsdocNode,\n report,\n utils,\n}) => {\n const {\n allowExtraTrailingParamDocs,\n checkDestructured = true,\n checkRestProperty = false,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = false,\n useDefaultObjectProperties = false,\n disableExtraPropertyReporting = false,\n } = context.options[0] || {};\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');\n if (!jsdocParameterNamesDeep.length) {\n return;\n }\n\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n const targetTagName = utils.getPreferredTagName({tagName: 'param'});\n const isError = validateParameterNames(\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n enableFixer,\n functionParameterNames,\n jsdoc,\n jsdocNode,\n utils,\n report,\n );\n\n if (isError || !checkDestructured) {\n return;\n }\n\n validateParameterNamesDeep(\n targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report,\n );\n}, {\n meta: {\n docs: {\n description: 'Ensures that parameter names in JSDoc match those in the function declaration.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-param-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowExtraTrailingParamDocs: {\n type: 'boolean',\n },\n checkDestructured: {\n type: 'boolean',\n },\n checkRestProperty: {\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n disableExtraPropertyReporting: {\n type: 'boolean',\n },\n enableFixer: {\n type: 'boolean',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkParamNames.js"}
1
+ {"version":3,"sources":["../../src/rules/checkParamNames.js"],"names":["validateParameterNames","targetTagName","allowExtraTrailingParamDocs","checkDestructured","checkRestProperty","checkTypesRegex","disableExtraPropertyReporting","enableFixer","functionParameterNames","jsdoc","_jsdocNode","utils","report","paramTags","Object","entries","tags","filter","tag","paramTagsNonNested","name","includes","dotted","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","reportJSDoc","removeTag","functionParameterName","Array","isArray","type","search","parameterName","names","properties","hasPropertyRest","rests","annotationParamName","undefined","trim","tagName","expectedNames","map","actualNames","paramTag","actualTypes","missingProperties","notCheckingNames","notCheckingName","startsWith","actualNameIdx","findIndex","actualName","comparePaths","missingIndex","pathDoesNotBeginWith","line","source","number","length","push","tagPlacement","hasMissing","missingProperty","extraProperties","match","prop","split","extraProperty","funcParamName","item","join","validateParameterNamesDeep","_allowExtraTrailingParamDocs","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","context","jsdocNode","checkTypesPattern","useDefaultObjectProperties","options","getRegexFromString","jsdocParameterNamesDeep","getJsdocTagsDeep","getFunctionParameterNames","getPreferredTagName","isError","meta","docs","description","url","fixable","schema","additionalProperties"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst validateParameterNames = (\n targetTagName : string,\n allowExtraTrailingParamDocs: boolean,\n checkDestructured : boolean,\n checkRestProperty : boolean,\n checkTypesRegex : RegExp,\n disableExtraPropertyReporting,\n enableFixer: boolean,\n functionParameterNames : Array<string>, jsdoc, _jsdocNode, utils, report,\n) => {\n const paramTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n const paramTagsNonNested = paramTags.filter(([\n , tag,\n ]) => {\n return !tag.name.includes('.');\n });\n\n let dotted = 0;\n\n // eslint-disable-next-line complexity\n return paramTags.some(([\n , tag,\n ], index) => {\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = tgsIndex;\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n if (tag.name.includes('.')) {\n dotted++;\n\n return false;\n }\n\n const functionParameterName = functionParameterNames[index - dotted];\n\n if (!functionParameterName) {\n if (allowExtraTrailingParamDocs) {\n return false;\n }\n\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n\n if (Array.isArray(functionParameterName)) {\n if (!checkDestructured) {\n return false;\n }\n\n if (tag.type && tag.type.search(checkTypesRegex) === -1) {\n return false;\n }\n\n const [\n parameterName,\n {\n names: properties,\n hasPropertyRest,\n rests,\n annotationParamName,\n },\n ] = functionParameterName;\n if (annotationParamName !== undefined) {\n const name = tag.name.trim();\n if (name !== annotationParamName) {\n report(`@${targetTagName} \"${name}\" does not match parameter name \"${annotationParamName}\"`, null, tag);\n }\n }\n\n const tagName = parameterName === undefined ? tag.name.trim() : parameterName;\n const expectedNames = properties.map((name) => {\n return `${tagName}.${name}`;\n });\n const actualNames = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.name.trim();\n });\n const actualTypes = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.type;\n });\n\n const missingProperties = [];\n const notCheckingNames = [];\n\n for (const [\n idx,\n name,\n ] of expectedNames.entries()) {\n if (notCheckingNames.some((notCheckingName) => {\n return name.startsWith(notCheckingName);\n })) {\n continue;\n }\n\n const actualNameIdx = actualNames.findIndex((actualName) => {\n return utils.comparePaths(name)(actualName);\n });\n if (actualNameIdx === -1) {\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const missingIndex = actualNames.findIndex((actualName) => {\n return utils.pathDoesNotBeginWith(name, actualName);\n });\n const line = tag.source[0].number - 1 + (missingIndex > -1 ? missingIndex : actualNames.length);\n missingProperties.push({\n name,\n tagPlacement: {\n line: line === 0 ? 1 : line,\n },\n });\n } else if (actualTypes[actualNameIdx].search(checkTypesRegex) === -1 && actualTypes[actualNameIdx] !== '') {\n notCheckingNames.push(name);\n }\n }\n\n const hasMissing = missingProperties.length;\n if (hasMissing) {\n for (const {\n tagPlacement,\n name: missingProperty,\n } of missingProperties) {\n report(`Missing @${targetTagName} \"${missingProperty}\"`, null, tagPlacement);\n }\n }\n\n if (!hasPropertyRest || checkRestProperty) {\n const extraProperties = [];\n for (const [\n idx,\n name,\n ] of actualNames.entries()) {\n const match = name.startsWith(tag.name.trim() + '.');\n if (\n match && !expectedNames.some(\n utils.comparePaths(name),\n ) && !utils.comparePaths(name)(tag.name) &&\n (!disableExtraPropertyReporting || properties.some((prop) => {\n return prop.split('.').length >= name.split('.').length - 1;\n }))\n ) {\n extraProperties.push([\n name, paramTags[idx][1],\n ]);\n }\n }\n\n if (extraProperties.length) {\n for (const [\n extraProperty,\n tg,\n ] of extraProperties) {\n report(`@${targetTagName} \"${extraProperty}\" does not exist on ${tag.name}`, null, tg);\n }\n\n return true;\n }\n }\n\n return hasMissing;\n }\n\n let funcParamName;\n if (typeof functionParameterName === 'object') {\n const {\n name,\n } = functionParameterName;\n funcParamName = name;\n } else {\n funcParamName = functionParameterName;\n }\n\n if (funcParamName !== tag.name.trim()) {\n // Todo: Improve for array or object child items\n const actualNames = paramTagsNonNested.map(([\n , {\n name,\n },\n ]) => {\n return name.trim();\n });\n const expectedNames = functionParameterNames.map((item, idx) => {\n if (item?.[1]?.names) {\n return actualNames[idx];\n }\n\n return item;\n }).join(', ');\n\n report(\n `Expected @${targetTagName} names to be \"${expectedNames}\". Got \"${actualNames.join(', ')}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\nconst validateParameterNamesDeep = (\n targetTagName : string, _allowExtraTrailingParamDocs: boolean,\n jsdocParameterNames : Array<string>, jsdoc, report : Function,\n) => {\n let lastRealParameter;\n\n return jsdocParameterNames.some(({\n name: jsdocParameterName,\n idx,\n }) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n jsdocNode,\n report,\n utils,\n}) => {\n const {\n allowExtraTrailingParamDocs,\n checkDestructured = true,\n checkRestProperty = false,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = false,\n useDefaultObjectProperties = false,\n disableExtraPropertyReporting = false,\n } = context.options[0] || {};\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');\n if (!jsdocParameterNamesDeep.length) {\n return;\n }\n\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n const targetTagName = utils.getPreferredTagName({\n tagName: 'param',\n });\n const isError = validateParameterNames(\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n enableFixer,\n functionParameterNames,\n jsdoc,\n jsdocNode,\n utils,\n report,\n );\n\n if (isError || !checkDestructured) {\n return;\n }\n\n validateParameterNamesDeep(\n targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report,\n );\n}, {\n meta: {\n docs: {\n description: 'Ensures that parameter names in JSDoc match those in the function declaration.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-param-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowExtraTrailingParamDocs: {\n type: 'boolean',\n },\n checkDestructured: {\n type: 'boolean',\n },\n checkRestProperty: {\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n disableExtraPropertyReporting: {\n type: 'boolean',\n },\n enableFixer: {\n type: 'boolean',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkParamNames.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/checkPropertyNames.js"],"names":["validatePropertyNames","targetTagName","enableFixer","jsdoc","jsdocNode","utils","propertyTags","Object","entries","tags","filter","tag","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","name","reportJSDoc","removeTag","validatePropertyNamesDeep","jsdocPropertyNames","report","lastRealProperty","jsdocPropertyName","isPropertyPath","includes","pathRootNodeName","slice","indexOf","endsWith","context","options","jsdocPropertyNamesDeep","getJsdocTagsDeep","length","getPreferredTagName","tagName","isError","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","type"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst validatePropertyNames = (\n targetTagName : string,\n enableFixer : boolean,\n jsdoc, jsdocNode, utils,\n) => {\n const propertyTags = Object.entries(jsdoc.tags).filter(([, tag]) => {\n return tag.tag === targetTagName;\n });\n\n return propertyTags.some(([, tag], index) => {\n let tagsIndex;\n const dupeTagInfo = propertyTags.find(([tgsIndex, tg], idx) => {\n tagsIndex = tgsIndex;\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n return false;\n });\n};\n\nconst validatePropertyNamesDeep = (\n targetTagName : string,\n jsdocPropertyNames : Array<string>, jsdoc, report : Function,\n) => {\n let lastRealProperty;\n\n return jsdocPropertyNames.some(({name: jsdocPropertyName, idx}) => {\n const isPropertyPath = jsdocPropertyName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealProperty) {\n report(`@${targetTagName} path declaration (\"${jsdocPropertyName}\") appears before any real property.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocPropertyName.slice(0, jsdocPropertyName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealProperty) {\n report(\n `@${targetTagName} path declaration (\"${jsdocPropertyName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real property name (\"${lastRealProperty}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealProperty = jsdocPropertyName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n jsdocNode,\n report,\n utils,\n}) => {\n const {\n enableFixer = false,\n } = context.options[0] || {};\n const jsdocPropertyNamesDeep = utils.getJsdocTagsDeep('property');\n if (!jsdocPropertyNamesDeep.length) {\n return;\n }\n\n const targetTagName = utils.getPreferredTagName({tagName: 'property'});\n const isError = validatePropertyNames(\n targetTagName,\n enableFixer,\n jsdoc,\n jsdocNode,\n utils,\n );\n\n if (isError) {\n return;\n }\n\n validatePropertyNamesDeep(\n targetTagName, jsdocPropertyNamesDeep, jsdoc, report,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Ensures that property names in JSDoc are not duplicated on the same block and that nested properties have defined roots.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-property-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkPropertyNames.js"}
1
+ {"version":3,"sources":["../../src/rules/checkPropertyNames.js"],"names":["validatePropertyNames","targetTagName","enableFixer","jsdoc","jsdocNode","utils","propertyTags","Object","entries","tags","filter","tag","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","name","reportJSDoc","removeTag","validatePropertyNamesDeep","jsdocPropertyNames","report","lastRealProperty","jsdocPropertyName","isPropertyPath","includes","pathRootNodeName","slice","indexOf","endsWith","context","options","jsdocPropertyNamesDeep","getJsdocTagsDeep","length","getPreferredTagName","tagName","isError","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","type"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst validatePropertyNames = (\n targetTagName : string,\n enableFixer : boolean,\n jsdoc, jsdocNode, utils,\n) => {\n const propertyTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n\n return propertyTags.some(([\n , tag,\n ], index) => {\n let tagsIndex;\n const dupeTagInfo = propertyTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = tgsIndex;\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n return false;\n });\n};\n\nconst validatePropertyNamesDeep = (\n targetTagName : string,\n jsdocPropertyNames : Array<string>, jsdoc, report : Function,\n) => {\n let lastRealProperty;\n\n return jsdocPropertyNames.some(({\n name: jsdocPropertyName,\n idx,\n }) => {\n const isPropertyPath = jsdocPropertyName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealProperty) {\n report(`@${targetTagName} path declaration (\"${jsdocPropertyName}\") appears before any real property.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocPropertyName.slice(0, jsdocPropertyName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealProperty) {\n report(\n `@${targetTagName} path declaration (\"${jsdocPropertyName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real property name (\"${lastRealProperty}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealProperty = jsdocPropertyName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n jsdocNode,\n report,\n utils,\n}) => {\n const {\n enableFixer = false,\n } = context.options[0] || {};\n const jsdocPropertyNamesDeep = utils.getJsdocTagsDeep('property');\n if (!jsdocPropertyNamesDeep.length) {\n return;\n }\n\n const targetTagName = utils.getPreferredTagName({\n tagName: 'property',\n });\n const isError = validatePropertyNames(\n targetTagName,\n enableFixer,\n jsdoc,\n jsdocNode,\n utils,\n );\n\n if (isError) {\n return;\n }\n\n validatePropertyNamesDeep(\n targetTagName, jsdocPropertyNamesDeep, jsdoc, report,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Ensures that property names in JSDoc are not duplicated on the same block and that nested properties have defined roots.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-property-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkPropertyNames.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/checkSyntax.js"],"names":["jsdoc","report","settings","mode","tag","tags","type","slice","iterateAllJsdocs","meta","docs","description","url"],"mappings":";;;;;;;AAAA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,KAD2B;AAE3BC,EAAAA,MAF2B;AAG3BC,EAAAA;AAH2B,CAAD,KAItB;AACJ,QAAM;AAACC,IAAAA;AAAD,MAASD,QAAf,CADI,CAGJ;;AACA,MAAIC,IAAI,KAAK,OAAT,IAAoBA,IAAI,KAAK,YAAjC,EAA+C;AAC7C,SAAK,MAAMC,GAAX,IAAkBJ,KAAK,CAACK,IAAxB,EAA8B;AAC5B,UAAID,GAAG,CAACE,IAAJ,CAASC,KAAT,CAAe,CAAC,CAAhB,MAAuB,GAA3B,EAAgC;AAC9BN,QAAAA,MAAM,CAAC,qDAAD,EAAwD,IAAxD,EAA8DG,GAA9D,CAAN;AACA;AACD;AACF;AACF;AACF,CAhBc,EAgBZ;AACDI,EAAAA,gBAAgB,EAAE,IADjB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,oGADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJN,IAAAA,IAAI,EAAE;AALF;AAFL,CAhBY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n settings,\n}) => {\n const {mode} = settings;\n\n // Don't check for \"permissive\" and \"closure\"\n if (mode === 'jsdoc' || mode === 'typescript') {\n for (const tag of jsdoc.tags) {\n if (tag.type.slice(-1) === '=') {\n report('Syntax should not be Google Closure Compiler style.', null, tag);\n break;\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports against syntax not valid for the mode (e.g., Google Closure Compiler in non-Closure mode).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-syntax',\n },\n type: 'suggestion',\n },\n});\n"],"file":"checkSyntax.js"}
1
+ {"version":3,"sources":["../../src/rules/checkSyntax.js"],"names":["jsdoc","report","settings","mode","tag","tags","type","slice","iterateAllJsdocs","meta","docs","description","url"],"mappings":";;;;;;;AAAA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,KAD2B;AAE3BC,EAAAA,MAF2B;AAG3BC,EAAAA;AAH2B,CAAD,KAItB;AACJ,QAAM;AACJC,IAAAA;AADI,MAEFD,QAFJ,CADI,CAKJ;;AACA,MAAIC,IAAI,KAAK,OAAT,IAAoBA,IAAI,KAAK,YAAjC,EAA+C;AAC7C,SAAK,MAAMC,GAAX,IAAkBJ,KAAK,CAACK,IAAxB,EAA8B;AAC5B,UAAID,GAAG,CAACE,IAAJ,CAASC,KAAT,CAAe,CAAC,CAAhB,MAAuB,GAA3B,EAAgC;AAC9BN,QAAAA,MAAM,CAAC,qDAAD,EAAwD,IAAxD,EAA8DG,GAA9D,CAAN;AACA;AACD;AACF;AACF;AACF,CAlBc,EAkBZ;AACDI,EAAAA,gBAAgB,EAAE,IADjB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,oGADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJN,IAAAA,IAAI,EAAE;AALF;AAFL,CAlBY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n settings,\n}) => {\n const {\n mode,\n } = settings;\n\n // Don't check for \"permissive\" and \"closure\"\n if (mode === 'jsdoc' || mode === 'typescript') {\n for (const tag of jsdoc.tags) {\n if (tag.type.slice(-1) === '=') {\n report('Syntax should not be Google Closure Compiler style.', null, tag);\n break;\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports against syntax not valid for the mode (e.g., Google Closure Compiler in non-Closure mode).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-syntax',\n },\n type: 'suggestion',\n },\n});\n"],"file":"checkSyntax.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/checkTagNames.js"],"names":["jsxTagNames","Set","sourceCode","jsdoc","report","utils","context","settings","jsdocNode","definedTags","jsxTags","options","definedPreferredTags","tagNamePreference","structuredTags","definedStructuredTags","Object","keys","definedNonPreferredTags","length","values","map","preferredTag","undefined","reportSettings","replacement","filter","preferredType","jsdocTag","tags","tagName","tag","has","isValidTag","preferredTagName","getPreferredTagName","allowObjectReturn","defaultMessage","message","fixer","getText","replace","RegExp","replaceText","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type"],"mappings":"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","sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// https://babeljs.io/docs/en/babel-plugin-transform-react-jsx/\nconst jsxTagNames = new Set([\n 'jsx',\n 'jsxFrag',\n 'jsxImportSource',\n 'jsxRuntime',\n]);\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdoc,\n report,\n utils,\n context,\n settings,\n jsdocNode,\n}) => {\n const {definedTags = [], jsxTags} = context.options[0] || {};\n\n let definedPreferredTags = [];\n const {tagNamePreference, structuredTags} = settings;\n const definedStructuredTags = Object.keys(structuredTags);\n const definedNonPreferredTags = Object.keys(tagNamePreference);\n if (definedNonPreferredTags.length) {\n definedPreferredTags = Object.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\n if (!preferredTag) {\n return undefined;\n }\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 })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n for (const jsdocTag of jsdoc.tags) {\n const tagName = jsdocTag.tag;\n if (jsxTags && jsxTagNames.has(tagName)) {\n continue;\n }\n\n if (utils.isValidTag(tagName, [\n ...definedTags, ...definedPreferredTags, ...definedNonPreferredTags,\n ...definedStructuredTags,\n ])) {\n let preferredTagName = utils.getPreferredTagName({\n allowObjectReturn: true,\n defaultMessage: `Blacklisted tag found (\\`@${tagName}\\`)`,\n tagName,\n });\n if (!preferredTagName) {\n continue;\n }\n\n let message;\n if (typeof preferredTagName === 'object') {\n ({message, replacement: preferredTagName} = preferredTagName);\n }\n\n if (!message) {\n message = `Invalid JSDoc tag (preference). Replace \"${tagName}\" JSDoc tag with \"${preferredTagName}\".`;\n }\n\n if (preferredTagName !== tagName) {\n report(message, (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).replace(\n new RegExp(`@${escapeStringRegexp(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 docs: {\n description: 'Reports invalid block tag names.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-tag-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n jsxTags: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTagNames.js"}
1
+ {"version":3,"sources":["../../src/rules/checkTagNames.js"],"names":["jsxTagNames","Set","sourceCode","jsdoc","report","utils","context","settings","jsdocNode","definedTags","jsxTags","options","definedPreferredTags","tagNamePreference","structuredTags","definedStructuredTags","Object","keys","definedNonPreferredTags","length","values","map","preferredTag","undefined","reportSettings","replacement","filter","preferredType","jsdocTag","tags","tagName","tag","has","isValidTag","preferredTagName","getPreferredTagName","allowObjectReturn","defaultMessage","message","fixer","getText","replace","RegExp","replaceText","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type"],"mappings":"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","sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// https://babeljs.io/docs/en/babel-plugin-transform-react-jsx/\nconst jsxTagNames = new Set([\n 'jsx',\n 'jsxFrag',\n 'jsxImportSource',\n 'jsxRuntime',\n]);\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdoc,\n report,\n utils,\n context,\n settings,\n jsdocNode,\n}) => {\n const {\n definedTags = [],\n jsxTags,\n } = context.options[0] || {};\n\n let definedPreferredTags = [];\n const {\n tagNamePreference,\n structuredTags,\n } = settings;\n const definedStructuredTags = Object.keys(structuredTags);\n const definedNonPreferredTags = Object.keys(tagNamePreference);\n if (definedNonPreferredTags.length) {\n definedPreferredTags = Object.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\n if (!preferredTag) {\n return undefined;\n }\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 })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n for (const jsdocTag of jsdoc.tags) {\n const tagName = jsdocTag.tag;\n if (jsxTags && jsxTagNames.has(tagName)) {\n continue;\n }\n\n if (utils.isValidTag(tagName, [\n ...definedTags, ...definedPreferredTags, ...definedNonPreferredTags,\n ...definedStructuredTags,\n ])) {\n let preferredTagName = utils.getPreferredTagName({\n allowObjectReturn: true,\n defaultMessage: `Blacklisted tag found (\\`@${tagName}\\`)`,\n tagName,\n });\n if (!preferredTagName) {\n continue;\n }\n\n let message;\n if (typeof preferredTagName === 'object') {\n ({\n message,\n replacement: preferredTagName,\n } = preferredTagName);\n }\n\n if (!message) {\n message = `Invalid JSDoc tag (preference). Replace \"${tagName}\" JSDoc tag with \"${preferredTagName}\".`;\n }\n\n if (preferredTagName !== tagName) {\n report(message, (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).replace(\n new RegExp(`@${escapeStringRegexp(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 docs: {\n description: 'Reports invalid block tag names.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-tag-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n jsxTags: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTagNames.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/checkTypes.js"],"names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","nodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","structuredTags","mode","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","Object","keys","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","jsdocTag","invalidTypes","typeAst","tagName","types","preferredSetting","push","replacement","message","reportSettings","entries","typs","Array","isArray","strictNativeType","toLowerCase","fixedType","fix","fixer","replaceText","getText","badType","preferredType","tagValue","name","JSON","stringify","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"mappings":"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","sourcesContent":["import {\n parse, stringify, traverse, tryParse,\n} from 'jsdoc-type-pratt-parser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\nconst adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta.brackets === 'square' &&\n (nodeName === '[]' || nodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = nodeName;\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {preferredTypes, structuredTags, mode} = settings;\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n const getPreferredTypeInfo = (_type, nodeName, parentNode, property) => {\n let hasMatchingPreferredType;\n let isGenericMatch;\n let typeName = nodeName;\n if (Object.keys(preferredTypes).length) {\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? ['.', '.<>'] : ['<>'];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[nodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property) {\n const checkPostFixes = dot ? ['.', '.<>'] : [brackets === 'angle' ? '<>' : '[]'];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[nodeName] !== undefined &&\n !Object.values(preferredTypes).includes(nodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n }\n\n return [hasMatchingPreferredType, typeName, isGenericMatch];\n };\n\n for (const jsdocTag of jsdocTagsWithPossibleType) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const tagName = jsdocTag.tag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {type, value} = node;\n if (!['JsdocTypeName', 'JsdocTypeAny'].includes(type)) {\n return;\n }\n\n let nodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, nodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n nodeName = typeName === '[]' ? typeName : nodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([nodeName]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([nodeName, preferred]);\n } else if (typeof preferredSetting === 'object') {\n preferred = preferredSetting?.replacement;\n invalidTypes.push([\n nodeName,\n preferred,\n preferredSetting?.message,\n ]);\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([tag, {type: typs}]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(nodeName);\n })) {\n invalidTypes.push([nodeName, types]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n for (const strictNativeType of strictNativeTypes) {\n if (strictNativeType === 'object' && mode === 'typescript') {\n continue;\n }\n\n if (strictNativeType.toLowerCase() === nodeName.toLowerCase() &&\n strictNativeType !== nodeName &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n preferred = strictNativeType;\n invalidTypes.push([nodeName, preferred]);\n break;\n }\n }\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, nodeName, node, parentNode);\n }\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n for (const [badType, preferredType = '', message] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({tag, types}) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue,\n } : null,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTypes.js"}
1
+ {"version":3,"sources":["../../src/rules/checkTypes.js"],"names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","nodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","structuredTags","mode","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","Object","keys","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","jsdocTag","invalidTypes","typeAst","tagName","types","preferredSetting","push","replacement","message","reportSettings","entries","typs","Array","isArray","strictNativeType","toLowerCase","fixedType","fix","fixer","replaceText","getText","badType","preferredType","tagValue","name","JSON","stringify","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"mappings":"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","sourcesContent":["import {\n parse,\n stringify,\n traverse,\n tryParse,\n} from 'jsdoc-type-pratt-parser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\nconst adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta.brackets === 'square' &&\n (nodeName === '[]' || nodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = nodeName;\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n const getPreferredTypeInfo = (_type, nodeName, parentNode, property) => {\n let hasMatchingPreferredType;\n let isGenericMatch;\n let typeName = nodeName;\n if (Object.keys(preferredTypes).length) {\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[nodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property) {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[nodeName] !== undefined &&\n !Object.values(preferredTypes).includes(nodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n }\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n for (const jsdocTag of jsdocTagsWithPossibleType) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const tagName = jsdocTag.tag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } = node;\n if (![\n 'JsdocTypeName', 'JsdocTypeAny',\n ].includes(type)) {\n return;\n }\n\n let nodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, nodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n nodeName = typeName === '[]' ? typeName : nodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n nodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n nodeName, preferred,\n ]);\n } else if (typeof preferredSetting === 'object') {\n preferred = preferredSetting?.replacement;\n invalidTypes.push([\n nodeName,\n preferred,\n preferredSetting?.message,\n ]);\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(nodeName);\n })) {\n invalidTypes.push([\n nodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n for (const strictNativeType of strictNativeTypes) {\n if (strictNativeType === 'object' && mode === 'typescript') {\n continue;\n }\n\n if (strictNativeType.toLowerCase() === nodeName.toLowerCase() &&\n strictNativeType !== nodeName &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n preferred = strictNativeType;\n invalidTypes.push([\n nodeName, preferred,\n ]);\n break;\n }\n }\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, nodeName, node, parentNode);\n }\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n for (const [\n badType,\n preferredType = '',\n message,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue,\n } : null,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTypes.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/emptyTags.js"],"names":["defaultEmptyTags","Set","emptyIfNotClosure","settings","jsdoc","utils","emptyTags","filterTags","tag","tagName","has","hasOptionTag","tags","some","mode","content","name","description","type","trim","fix","setTag","reportJSDoc","checkInternal","checkPrivate","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,gBAAgB,GAAG,IAAIC,GAAJ,CAAQ,CAC/B,UAD+B,EACnB,OADmB,EACV,WADU,EACG,QADH,EACa,iBADb,EAE/B,QAF+B,EAErB,OAFqB,EAEZ,UAFY,EAEA,UAFA,EAEY,UAFZ,EAI/B;AACA;AACA,YAN+B,EAQ/B;AACA,UAT+B,CAAR,CAAzB;AAYA,MAAMC,iBAAiB,GAAG,IAAID,GAAJ,CAAQ,CAChC,SADgC,EACrB,SADqB,EACV,WADU,EACG,QADH,EACa,QADb,EAGhC;AACA,YAJgC,CAAR,CAA1B;;eAOe,2BAAa,CAAC;AAC3BE,EAAAA,QAD2B;AAE3BC,EAAAA,KAF2B;AAG3BC,EAAAA;AAH2B,CAAD,KAItB;AACJ,QAAMC,SAAS,GAAGD,KAAK,CAACE,UAAN,CAAiB,CAAC;AAACC,IAAAA,GAAG,EAAEC;AAAN,GAAD,KAAoB;AACrD,WAAOT,gBAAgB,CAACU,GAAjB,CAAqBD,OAArB,KACLJ,KAAK,CAACM,YAAN,CAAmBF,OAAnB,KAA+BL,KAAK,CAACQ,IAAN,CAAWC,IAAX,CAAgB,CAAC;AAACL,MAAAA;AAAD,KAAD,KAAW;AACxD,aAAOA,GAAG,KAAKC,OAAf;AACD,KAF8B,CAD1B,IAILN,QAAQ,CAACW,IAAT,KAAkB,SAAlB,IAA+BZ,iBAAiB,CAACQ,GAAlB,CAAsBD,OAAtB,CAJjC;AAKD,GANiB,CAAlB;;AAOA,OAAK,MAAMD,GAAX,IAAkBF,SAAlB,EAA6B;AAC3B,UAAMS,OAAO,GAAGP,GAAG,CAACQ,IAAJ,IAAYR,GAAG,CAACS,WAAhB,IAA+BT,GAAG,CAACU,IAAnD;;AACA,QAAIH,OAAO,CAACI,IAAR,EAAJ,EAAoB;AAClB,YAAMC,GAAG,GAAG,MAAM;AAChBf,QAAAA,KAAK,CAACgB,MAAN,CAAab,GAAb;AACD,OAFD;;AAIAH,MAAAA,KAAK,CAACiB,WAAN,CAAmB,IAAGd,GAAG,CAACA,GAAI,mBAA9B,EAAkDA,GAAlD,EAAuDY,GAAvD,EAA4D,IAA5D;AACD;AACF;AACF,CAtBc,EAsBZ;AACDG,EAAAA,aAAa,EAAE,IADd;AAEDC,EAAAA,YAAY,EAAE,IAFb;AAGDC,EAAAA,gBAAgB,EAAE,IAHjB;AAIDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJV,MAAAA,WAAW,EAAE,mDADT;AAEJW,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,OAAO,EAAE,MALL;AAMJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVpB,QAAAA,IAAI,EAAE;AACJqB,UAAAA,KAAK,EAAE;AACLf,YAAAA,IAAI,EAAE;AADD,WADH;AAIJA,UAAAA,IAAI,EAAE;AAJF;AADI,OAFd;AAUEA,MAAAA,IAAI,EAAE;AAVR,KADM,CANJ;AAoBJA,IAAAA,IAAI,EAAE;AApBF;AAJL,CAtBY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst defaultEmptyTags = new Set([\n 'abstract', 'async', 'generator', 'global', 'hideconstructor',\n 'ignore', 'inner', 'instance', 'override', 'readonly',\n\n // jsdoc doesn't use this form in its docs, but allow for compatibility with\n // TypeScript which allows and Closure which requires\n 'inheritDoc',\n\n // jsdoc doesn't use but allow for TypeScript\n 'internal',\n]);\n\nconst emptyIfNotClosure = new Set([\n 'package', 'private', 'protected', 'public', 'static',\n\n // Closure doesn't allow with this casing\n 'inheritdoc',\n]);\n\nexport default iterateJsdoc(({\n settings,\n jsdoc,\n utils,\n}) => {\n const emptyTags = utils.filterTags(({tag: tagName}) => {\n return defaultEmptyTags.has(tagName) ||\n utils.hasOptionTag(tagName) && jsdoc.tags.some(({tag}) => {\n return tag === tagName;\n }) ||\n settings.mode !== 'closure' && emptyIfNotClosure.has(tagName);\n });\n for (const tag of emptyTags) {\n const content = tag.name || tag.description || tag.type;\n if (content.trim()) {\n const fix = () => {\n utils.setTag(tag);\n };\n\n utils.reportJSDoc(`@${tag.tag} should be empty.`, tag, fix, true);\n }\n }\n}, {\n checkInternal: true,\n checkPrivate: true,\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Expects specific tags to be empty of any content.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-empty-tags',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"emptyTags.js"}
1
+ {"version":3,"sources":["../../src/rules/emptyTags.js"],"names":["defaultEmptyTags","Set","emptyIfNotClosure","settings","jsdoc","utils","emptyTags","filterTags","tag","tagName","has","hasOptionTag","tags","some","mode","content","name","description","type","trim","fix","setTag","reportJSDoc","checkInternal","checkPrivate","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,gBAAgB,GAAG,IAAIC,GAAJ,CAAQ,CAC/B,UAD+B,EACnB,OADmB,EACV,WADU,EACG,QADH,EACa,iBADb,EAE/B,QAF+B,EAErB,OAFqB,EAEZ,UAFY,EAEA,UAFA,EAEY,UAFZ,EAI/B;AACA;AACA,YAN+B,EAQ/B;AACA,UAT+B,CAAR,CAAzB;AAYA,MAAMC,iBAAiB,GAAG,IAAID,GAAJ,CAAQ,CAChC,SADgC,EACrB,SADqB,EACV,WADU,EACG,QADH,EACa,QADb,EAGhC;AACA,YAJgC,CAAR,CAA1B;;eAOe,2BAAa,CAAC;AAC3BE,EAAAA,QAD2B;AAE3BC,EAAAA,KAF2B;AAG3BC,EAAAA;AAH2B,CAAD,KAItB;AACJ,QAAMC,SAAS,GAAGD,KAAK,CAACE,UAAN,CAAiB,CAAC;AAClCC,IAAAA,GAAG,EAAEC;AAD6B,GAAD,KAE7B;AACJ,WAAOT,gBAAgB,CAACU,GAAjB,CAAqBD,OAArB,KACLJ,KAAK,CAACM,YAAN,CAAmBF,OAAnB,KAA+BL,KAAK,CAACQ,IAAN,CAAWC,IAAX,CAAgB,CAAC;AAC9CL,MAAAA;AAD8C,KAAD,KAEzC;AACJ,aAAOA,GAAG,KAAKC,OAAf;AACD,KAJ8B,CAD1B,IAMLN,QAAQ,CAACW,IAAT,KAAkB,SAAlB,IAA+BZ,iBAAiB,CAACQ,GAAlB,CAAsBD,OAAtB,CANjC;AAOD,GAViB,CAAlB;;AAWA,OAAK,MAAMD,GAAX,IAAkBF,SAAlB,EAA6B;AAC3B,UAAMS,OAAO,GAAGP,GAAG,CAACQ,IAAJ,IAAYR,GAAG,CAACS,WAAhB,IAA+BT,GAAG,CAACU,IAAnD;;AACA,QAAIH,OAAO,CAACI,IAAR,EAAJ,EAAoB;AAClB,YAAMC,GAAG,GAAG,MAAM;AAChBf,QAAAA,KAAK,CAACgB,MAAN,CAAab,GAAb;AACD,OAFD;;AAIAH,MAAAA,KAAK,CAACiB,WAAN,CAAmB,IAAGd,GAAG,CAACA,GAAI,mBAA9B,EAAkDA,GAAlD,EAAuDY,GAAvD,EAA4D,IAA5D;AACD;AACF;AACF,CA1Bc,EA0BZ;AACDG,EAAAA,aAAa,EAAE,IADd;AAEDC,EAAAA,YAAY,EAAE,IAFb;AAGDC,EAAAA,gBAAgB,EAAE,IAHjB;AAIDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJV,MAAAA,WAAW,EAAE,mDADT;AAEJW,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,OAAO,EAAE,MALL;AAMJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVpB,QAAAA,IAAI,EAAE;AACJqB,UAAAA,KAAK,EAAE;AACLf,YAAAA,IAAI,EAAE;AADD,WADH;AAIJA,UAAAA,IAAI,EAAE;AAJF;AADI,OAFd;AAUEA,MAAAA,IAAI,EAAE;AAVR,KADM,CANJ;AAoBJA,IAAAA,IAAI,EAAE;AApBF;AAJL,CA1BY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst defaultEmptyTags = new Set([\n 'abstract', 'async', 'generator', 'global', 'hideconstructor',\n 'ignore', 'inner', 'instance', 'override', 'readonly',\n\n // jsdoc doesn't use this form in its docs, but allow for compatibility with\n // TypeScript which allows and Closure which requires\n 'inheritDoc',\n\n // jsdoc doesn't use but allow for TypeScript\n 'internal',\n]);\n\nconst emptyIfNotClosure = new Set([\n 'package', 'private', 'protected', 'public', 'static',\n\n // Closure doesn't allow with this casing\n 'inheritdoc',\n]);\n\nexport default iterateJsdoc(({\n settings,\n jsdoc,\n utils,\n}) => {\n const emptyTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return defaultEmptyTags.has(tagName) ||\n utils.hasOptionTag(tagName) && jsdoc.tags.some(({\n tag,\n }) => {\n return tag === tagName;\n }) ||\n settings.mode !== 'closure' && emptyIfNotClosure.has(tagName);\n });\n for (const tag of emptyTags) {\n const content = tag.name || tag.description || tag.type;\n if (content.trim()) {\n const fix = () => {\n utils.setTag(tag);\n };\n\n utils.reportJSDoc(`@${tag.tag} should be empty.`, tag, fix, true);\n }\n }\n}, {\n checkInternal: true,\n checkPrivate: true,\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Expects specific tags to be empty of any content.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-empty-tags',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"emptyTags.js"}
@@ -39,7 +39,7 @@ var _default = (0, _iterateJsdoc.default)(({
39
39
  errorMessage = mainDescription.message;
40
40
  }
41
41
 
42
- if (!tag && mainDescriptionMatch === false) {
42
+ if (mainDescriptionMatch === false && (!tag || !Object.prototype.hasOwnProperty.call(tags, tag.tag))) {
43
43
  return;
44
44
  }
45
45
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/matchDescription.js"],"names":["matchDescriptionDefault","stringOrDefault","value","userDefault","jsdoc","report","context","utils","mainDescription","matchDescription","message","tags","options","validateDescription","description","tag","mainDescriptionMatch","errorMessage","match","tagValue","tagName","regex","getRegexFromString","test","line","source","number","getDescription","replace","Object","keys","length","hasOptionTag","Boolean","forEachPreferredTag","matchingJsdocTag","targetTagName","name","getTagDescription","trim","whitelistedTags","filterTags","tagsWithNames","tagsWithoutNames","getTagsByType","some","contextDefaults","meta","docs","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","oneOf","format","patternProperties","enum"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^[A-Z`\\\\d_][\\\\s\\\\S]*[.?!`]$';\n\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n utils,\n}) => {\n const {\n mainDescription,\n matchDescription,\n message,\n tags,\n } = context.options[0] || {};\n\n const validateDescription = (description, tag) => {\n let mainDescriptionMatch = mainDescription;\n let errorMessage = message;\n if (typeof mainDescription === 'object') {\n mainDescriptionMatch = mainDescription.match;\n errorMessage = mainDescription.message;\n }\n\n if (!tag && mainDescriptionMatch === false) {\n return;\n }\n\n let tagValue = mainDescriptionMatch;\n if (tag) {\n const tagName = tag.tag;\n if (typeof tags[tagName] === 'object') {\n tagValue = tags[tagName].match;\n errorMessage = tags[tagName].message;\n } else {\n tagValue = tags[tagName];\n }\n }\n\n const regex = utils.getRegexFromString(\n stringOrDefault(tagValue, matchDescription),\n );\n\n if (!regex.test(description)) {\n report(\n errorMessage || 'JSDoc description does not satisfy the regex pattern.',\n null,\n tag || {\n // Add one as description would typically be into block\n line: jsdoc.source[0].number + 1,\n },\n );\n }\n };\n\n if (jsdoc.description) {\n const {description} = utils.getDescription();\n validateDescription(\n description.replace(/\\s+$/u, ''),\n );\n }\n\n if (!tags || !Object.keys(tags).length) {\n return;\n }\n\n const hasOptionTag = (tagName) => {\n return Boolean(tags[tagName]);\n };\n\n utils.forEachPreferredTag('description', (matchingJsdocTag, targetTagName) => {\n const description = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasOptionTag(targetTagName)) {\n validateDescription(description, matchingJsdocTag);\n }\n }, true);\n\n const whitelistedTags = utils.filterTags(({tag: tagName}) => {\n return hasOptionTag(tagName);\n });\n const {tagsWithNames, tagsWithoutNames} = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const description = utils.getTagDescription(tag).replace(/^[- ]*/u, '')\n .trim();\n\n return validateDescription(description, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const description = (tag.name + ' ' + utils.getTagDescription(tag)).trim();\n\n return validateDescription(description, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Enforces a regular expression pattern on descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-description',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n message: {\n type: 'string',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [true],\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [true],\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"matchDescription.js"}
1
+ {"version":3,"sources":["../../src/rules/matchDescription.js"],"names":["matchDescriptionDefault","stringOrDefault","value","userDefault","jsdoc","report","context","utils","mainDescription","matchDescription","message","tags","options","validateDescription","description","tag","mainDescriptionMatch","errorMessage","match","Object","prototype","hasOwnProperty","call","tagValue","tagName","regex","getRegexFromString","test","line","source","number","getDescription","replace","keys","length","hasOptionTag","Boolean","forEachPreferredTag","matchingJsdocTag","targetTagName","name","getTagDescription","trim","whitelistedTags","filterTags","tagsWithNames","tagsWithoutNames","getTagsByType","some","contextDefaults","meta","docs","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","oneOf","format","patternProperties","enum"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^[A-Z`\\\\d_][\\\\s\\\\S]*[.?!`]$';\n\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n utils,\n}) => {\n const {\n mainDescription,\n matchDescription,\n message,\n tags,\n } = context.options[0] || {};\n\n const validateDescription = (description, tag) => {\n let mainDescriptionMatch = mainDescription;\n let errorMessage = message;\n if (typeof mainDescription === 'object') {\n mainDescriptionMatch = mainDescription.match;\n errorMessage = mainDescription.message;\n }\n\n if (mainDescriptionMatch === false && (\n !tag || !Object.prototype.hasOwnProperty.call(tags, tag.tag))\n ) {\n return;\n }\n\n let tagValue = mainDescriptionMatch;\n if (tag) {\n const tagName = tag.tag;\n if (typeof tags[tagName] === 'object') {\n tagValue = tags[tagName].match;\n errorMessage = tags[tagName].message;\n } else {\n tagValue = tags[tagName];\n }\n }\n\n const regex = utils.getRegexFromString(\n stringOrDefault(tagValue, matchDescription),\n );\n\n if (!regex.test(description)) {\n report(\n errorMessage || 'JSDoc description does not satisfy the regex pattern.',\n null,\n tag || {\n // Add one as description would typically be into block\n line: jsdoc.source[0].number + 1,\n },\n );\n }\n };\n\n if (jsdoc.description) {\n const {\n description,\n } = utils.getDescription();\n validateDescription(\n description.replace(/\\s+$/u, ''),\n );\n }\n\n if (!tags || !Object.keys(tags).length) {\n return;\n }\n\n const hasOptionTag = (tagName) => {\n return Boolean(tags[tagName]);\n };\n\n utils.forEachPreferredTag('description', (matchingJsdocTag, targetTagName) => {\n const description = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasOptionTag(targetTagName)) {\n validateDescription(description, matchingJsdocTag);\n }\n }, true);\n\n const whitelistedTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return hasOptionTag(tagName);\n });\n const {\n tagsWithNames,\n tagsWithoutNames,\n } = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const description = utils.getTagDescription(tag).replace(/^[- ]*/u, '')\n .trim();\n\n return validateDescription(description, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const description = (tag.name + ' ' + utils.getTagDescription(tag)).trim();\n\n return validateDescription(description, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Enforces a regular expression pattern on descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-description',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n message: {\n type: 'string',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"matchDescription.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/matchName.js"],"names":["context","jsdoc","report","info","lastIndex","utils","match","options","allowName","disallowName","replacement","tags","allowNameRegex","getRegexFromString","disallowNameRegex","applicableTags","includes","getPresentTags","reported","tag","allowed","test","name","disallowed","hasRegex","fixer","source","tokens","replace","message","reportJSDoc","undefined","matchContext","meta","docs","description","url","fixable","schema","additionalProperies","properties","items","type","comment","required"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n info: {lastIndex},\n utils,\n}) => {\n const {match} = context.options[0] || {};\n if (!match) {\n report('Rule `no-restricted-syntax` is missing a `match` option.');\n\n return;\n }\n\n const {\n allowName,\n disallowName,\n replacement,\n tags = ['*'],\n } = match[lastIndex];\n\n const allowNameRegex = allowName && utils.getRegexFromString(allowName);\n const disallowNameRegex = disallowName && utils.getRegexFromString(disallowName);\n\n let applicableTags = jsdoc.tags;\n if (!tags.includes('*')) {\n applicableTags = utils.getPresentTags(tags);\n }\n\n let reported = false;\n for (const tag of applicableTags) {\n const allowed = !allowNameRegex || allowNameRegex.test(tag.name);\n const disallowed = disallowNameRegex && disallowNameRegex.test(tag.name);\n const hasRegex = allowNameRegex || disallowNameRegex;\n if (hasRegex && allowed && !disallowed) {\n continue;\n }\n\n if (!hasRegex && reported) {\n continue;\n }\n\n const fixer = () => {\n tag.source[0].tokens.name = tag.source[0].tokens.name.replace(\n disallowNameRegex, replacement,\n );\n };\n\n let {message} = match[lastIndex];\n if (!message) {\n if (hasRegex) {\n message = disallowed ?\n `Only allowing names not matching \\`${disallowNameRegex}\\` but found \"${tag.name}\".` :\n `Only allowing names matching \\`${allowNameRegex}\\` but found \"${tag.name}\".`;\n } else {\n message = `Prohibited context for \"${tag.name}\".`;\n }\n }\n\n utils.reportJSDoc(\n message,\n hasRegex ? tag : null,\n\n // We could match up\n disallowNameRegex && replacement !== undefined ?\n fixer :\n null,\n false,\n {\n // Could also supply `context`, `comment`, `tags`\n allowName,\n disallowName,\n name: tag.name,\n },\n );\n if (!hasRegex) {\n reported = true;\n }\n }\n}, {\n matchContext: true,\n meta: {\n docs: {\n description: 'Reports the name portion of a JSDoc tag if matching or not matching a given regular expression.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-name',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperies: false,\n properties: {\n match: {\n additionalProperies: false,\n items: {\n properties: {\n allowName: {\n type: 'string',\n },\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n disallowName: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n },\n required: ['match'],\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"matchName.js"}
1
+ {"version":3,"sources":["../../src/rules/matchName.js"],"names":["context","jsdoc","report","info","lastIndex","utils","match","options","allowName","disallowName","replacement","tags","allowNameRegex","getRegexFromString","disallowNameRegex","applicableTags","includes","getPresentTags","reported","tag","allowed","test","name","disallowed","hasRegex","fixer","source","tokens","replace","message","reportJSDoc","undefined","matchContext","meta","docs","description","url","fixable","schema","additionalProperies","properties","items","type","comment","required"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n info: {\n lastIndex,\n },\n utils,\n}) => {\n const {\n match,\n } = context.options[0] || {};\n if (!match) {\n report('Rule `no-restricted-syntax` is missing a `match` option.');\n\n return;\n }\n\n const {\n allowName,\n disallowName,\n replacement,\n tags = [\n '*',\n ],\n } = match[lastIndex];\n\n const allowNameRegex = allowName && utils.getRegexFromString(allowName);\n const disallowNameRegex = disallowName && utils.getRegexFromString(disallowName);\n\n let applicableTags = jsdoc.tags;\n if (!tags.includes('*')) {\n applicableTags = utils.getPresentTags(tags);\n }\n\n let reported = false;\n for (const tag of applicableTags) {\n const allowed = !allowNameRegex || allowNameRegex.test(tag.name);\n const disallowed = disallowNameRegex && disallowNameRegex.test(tag.name);\n const hasRegex = allowNameRegex || disallowNameRegex;\n if (hasRegex && allowed && !disallowed) {\n continue;\n }\n\n if (!hasRegex && reported) {\n continue;\n }\n\n const fixer = () => {\n tag.source[0].tokens.name = tag.source[0].tokens.name.replace(\n disallowNameRegex, replacement,\n );\n };\n\n let {\n message,\n } = match[lastIndex];\n if (!message) {\n if (hasRegex) {\n message = disallowed ?\n `Only allowing names not matching \\`${disallowNameRegex}\\` but found \"${tag.name}\".` :\n `Only allowing names matching \\`${allowNameRegex}\\` but found \"${tag.name}\".`;\n } else {\n message = `Prohibited context for \"${tag.name}\".`;\n }\n }\n\n utils.reportJSDoc(\n message,\n hasRegex ? tag : null,\n\n // We could match up\n disallowNameRegex && replacement !== undefined ?\n fixer :\n null,\n false,\n {\n // Could also supply `context`, `comment`, `tags`\n allowName,\n disallowName,\n name: tag.name,\n },\n );\n if (!hasRegex) {\n reported = true;\n }\n }\n}, {\n matchContext: true,\n meta: {\n docs: {\n description: 'Reports the name portion of a JSDoc tag if matching or not matching a given regular expression.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-name',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperies: false,\n properties: {\n match: {\n additionalProperies: false,\n items: {\n properties: {\n allowName: {\n type: 'string',\n },\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n disallowName: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n },\n required: [\n 'match',\n ],\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"matchName.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/multilineBlocks.js"],"names":["context","jsdoc","utils","allowMultipleTags","noFinalLineText","noZeroLineText","noSingleLineBlocks","singleLineTags","noMultilineBlocks","minimumLengthForMultiline","Number","POSITIVE_INFINITY","multilineTags","options","source","tokens","description","tag","sourceLength","length","isInvalidSingleLine","tagName","includes","slice","fixer","makeMultiline","reportJSDoc","lineChecks","line","emptyTokens","delimiter","start","addLine","finalLine","finalLineTokens","trim","trimEnd","prop","end","tags","hasATag","filterTags","tg","number","reduce","obj","desc","type","typ","name","nme","lineEnd","postType","postName","postTag","nameOrDescription","seedTokens","postDelimiter","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperies","properties","anyOf","enum","items"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n allowMultipleTags = true,\n noFinalLineText = true,\n noZeroLineText = true,\n noSingleLineBlocks = false,\n singleLineTags = ['lends', 'type'],\n noMultilineBlocks = false,\n minimumLengthForMultiline = Number.POSITIVE_INFINITY,\n multilineTags = ['*'],\n } = context.options[0] || {};\n\n const {source: [{tokens}]} = jsdoc;\n const {description, tag} = tokens;\n const sourceLength = jsdoc.source.length;\n\n const isInvalidSingleLine = (tagName) => {\n return noSingleLineBlocks &&\n (!tagName ||\n !singleLineTags.includes(tagName) && !singleLineTags.includes('*'));\n };\n\n if (sourceLength === 1) {\n if (!isInvalidSingleLine(tag.slice(1))) {\n return;\n }\n\n const fixer = () => {\n utils.makeMultiline();\n };\n\n utils.reportJSDoc(\n 'Single line blocks are not permitted by your configuration.',\n null,\n fixer,\n true,\n );\n\n return;\n }\n\n const lineChecks = () => {\n if (\n noZeroLineText &&\n (tag || description)\n ) {\n const fixer = () => {\n const line = {...tokens};\n utils.emptyTokens(tokens);\n const {tokens: {delimiter, start}} = jsdoc.source[1];\n utils.addLine(1, {...line, delimiter, start});\n };\n\n utils.reportJSDoc(\n 'Should have no text on the \"0th\" line (after the `/**`).',\n null,\n fixer,\n );\n\n return;\n }\n\n const finalLine = jsdoc.source[jsdoc.source.length - 1];\n const finalLineTokens = finalLine.tokens;\n if (\n noFinalLineText &&\n finalLineTokens.description.trim()\n ) {\n const fixer = () => {\n const line = {...finalLineTokens};\n line.description = line.description.trimEnd();\n\n const {delimiter} = line;\n\n for (const prop of [\n 'delimiter',\n 'postDelimiter',\n 'tag',\n 'type',\n 'lineEnd',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n ]) {\n finalLineTokens[prop] = '';\n }\n\n utils.addLine(jsdoc.source.length - 1, {...line, delimiter, end: ''});\n };\n\n utils.reportJSDoc(\n 'Should have no text on the final line (before the `*/`).',\n null,\n fixer,\n );\n }\n };\n\n if (noMultilineBlocks) {\n if (\n jsdoc.tags.length &&\n (multilineTags.includes('*') || utils.hasATag(multilineTags))\n ) {\n lineChecks();\n\n return;\n }\n\n if (jsdoc.description.length >= minimumLengthForMultiline) {\n lineChecks();\n\n return;\n }\n\n if (\n noSingleLineBlocks &&\n (!jsdoc.tags.length ||\n !utils.filterTags(({tag: tg}) => {\n return !isInvalidSingleLine(tg);\n }).length)\n ) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but fixing would result in a single ' +\n 'line block which you have prohibited with `noSingleLineBlocks`.',\n );\n\n return;\n }\n\n if (jsdoc.tags.length > 1) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has multiple tags.',\n );\n\n return;\n }\n } else if (jsdoc.tags.length === 1 && jsdoc.description.trim()) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has a description with a tag.',\n );\n\n return;\n }\n } else {\n const fixer = () => {\n jsdoc.source = [{\n number: 1,\n source: '',\n tokens: jsdoc.source.reduce((obj, {\n tokens: {\n description: desc, tag: tg, type: typ, name: nme,\n lineEnd, postType, postName, postTag,\n },\n }) => {\n if (typ) {\n obj.type = typ;\n }\n\n if (tg && typ && nme) {\n obj.postType = postType;\n }\n\n if (nme) {\n obj.name += nme;\n }\n\n if (nme && desc) {\n obj.postName = postName;\n }\n\n obj.description += desc;\n\n const nameOrDescription = obj.description || obj.name;\n if (\n nameOrDescription && nameOrDescription.slice(-1) !== ' '\n ) {\n obj.description += ' ';\n }\n\n obj.lineEnd = lineEnd;\n\n // Already filtered for multiple tags\n obj.tag += tg;\n if (tg) {\n obj.postTag = postTag || ' ';\n }\n\n return obj;\n }, utils.seedTokens({\n delimiter: '/**',\n end: '*/',\n postDelimiter: ' ',\n })),\n }];\n };\n\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration.',\n null,\n fixer,\n );\n\n return;\n }\n }\n\n lineChecks();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-multiline-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowMultipleTags: {\n type: 'boolean',\n },\n minimumLengthForMultiline: {\n type: 'integer',\n },\n multilineTags: {\n anyOf: [\n {\n enum: ['*'],\n type: 'string',\n }, {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n noFinalLineText: {\n type: 'boolean',\n },\n noMultilineBlocks: {\n type: 'boolean',\n },\n noSingleLineBlocks: {\n type: 'boolean',\n },\n noZeroLineText: {\n type: 'boolean',\n },\n singleLineTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"multilineBlocks.js"}
1
+ {"version":3,"sources":["../../src/rules/multilineBlocks.js"],"names":["context","jsdoc","utils","allowMultipleTags","noFinalLineText","noZeroLineText","noSingleLineBlocks","singleLineTags","noMultilineBlocks","minimumLengthForMultiline","Number","POSITIVE_INFINITY","multilineTags","options","source","tokens","description","tag","sourceLength","length","isInvalidSingleLine","tagName","includes","slice","fixer","makeMultiline","reportJSDoc","lineChecks","line","emptyTokens","delimiter","start","addLine","finalLine","finalLineTokens","trim","trimEnd","prop","end","tags","hasATag","filterTags","tg","number","reduce","obj","desc","type","typ","name","nme","lineEnd","postType","postName","postTag","nameOrDescription","seedTokens","postDelimiter","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperies","properties","anyOf","enum","items"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n allowMultipleTags = true,\n noFinalLineText = true,\n noZeroLineText = true,\n noSingleLineBlocks = false,\n singleLineTags = [\n 'lends', 'type',\n ],\n noMultilineBlocks = false,\n minimumLengthForMultiline = Number.POSITIVE_INFINITY,\n multilineTags = [\n '*',\n ],\n } = context.options[0] || {};\n\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n description,\n tag,\n } = tokens;\n const sourceLength = jsdoc.source.length;\n\n const isInvalidSingleLine = (tagName) => {\n return noSingleLineBlocks &&\n (!tagName ||\n !singleLineTags.includes(tagName) && !singleLineTags.includes('*'));\n };\n\n if (sourceLength === 1) {\n if (!isInvalidSingleLine(tag.slice(1))) {\n return;\n }\n\n const fixer = () => {\n utils.makeMultiline();\n };\n\n utils.reportJSDoc(\n 'Single line blocks are not permitted by your configuration.',\n null,\n fixer,\n true,\n );\n\n return;\n }\n\n const lineChecks = () => {\n if (\n noZeroLineText &&\n (tag || description)\n ) {\n const fixer = () => {\n const line = {\n ...tokens,\n };\n utils.emptyTokens(tokens);\n const {\n tokens: {\n delimiter,\n start,\n },\n } = jsdoc.source[1];\n utils.addLine(1, {\n ...line,\n delimiter,\n start,\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the \"0th\" line (after the `/**`).',\n null,\n fixer,\n );\n\n return;\n }\n\n const finalLine = jsdoc.source[jsdoc.source.length - 1];\n const finalLineTokens = finalLine.tokens;\n if (\n noFinalLineText &&\n finalLineTokens.description.trim()\n ) {\n const fixer = () => {\n const line = {\n ...finalLineTokens,\n };\n line.description = line.description.trimEnd();\n\n const {\n delimiter,\n } = line;\n\n for (const prop of [\n 'delimiter',\n 'postDelimiter',\n 'tag',\n 'type',\n 'lineEnd',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n ]) {\n finalLineTokens[prop] = '';\n }\n\n utils.addLine(jsdoc.source.length - 1, {\n ...line,\n delimiter,\n end: '',\n });\n };\n\n utils.reportJSDoc(\n 'Should have no text on the final line (before the `*/`).',\n null,\n fixer,\n );\n }\n };\n\n if (noMultilineBlocks) {\n if (\n jsdoc.tags.length &&\n (multilineTags.includes('*') || utils.hasATag(multilineTags))\n ) {\n lineChecks();\n\n return;\n }\n\n if (jsdoc.description.length >= minimumLengthForMultiline) {\n lineChecks();\n\n return;\n }\n\n if (\n noSingleLineBlocks &&\n (!jsdoc.tags.length ||\n !utils.filterTags(({\n tag: tg,\n }) => {\n return !isInvalidSingleLine(tg);\n }).length)\n ) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but fixing would result in a single ' +\n 'line block which you have prohibited with `noSingleLineBlocks`.',\n );\n\n return;\n }\n\n if (jsdoc.tags.length > 1) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has multiple tags.',\n );\n\n return;\n }\n } else if (jsdoc.tags.length === 1 && jsdoc.description.trim()) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has a description with a tag.',\n );\n\n return;\n }\n } else {\n const fixer = () => {\n jsdoc.source = [\n {\n number: 1,\n source: '',\n tokens: jsdoc.source.reduce((obj, {\n tokens: {\n description: desc,\n tag: tg,\n type: typ,\n name: nme,\n lineEnd,\n postType,\n postName,\n postTag,\n },\n }) => {\n if (typ) {\n obj.type = typ;\n }\n\n if (tg && typ && nme) {\n obj.postType = postType;\n }\n\n if (nme) {\n obj.name += nme;\n }\n\n if (nme && desc) {\n obj.postName = postName;\n }\n\n obj.description += desc;\n\n const nameOrDescription = obj.description || obj.name;\n if (\n nameOrDescription && nameOrDescription.slice(-1) !== ' '\n ) {\n obj.description += ' ';\n }\n\n obj.lineEnd = lineEnd;\n\n // Already filtered for multiple tags\n obj.tag += tg;\n if (tg) {\n obj.postTag = postTag || ' ';\n }\n\n return obj;\n }, utils.seedTokens({\n delimiter: '/**',\n end: '*/',\n postDelimiter: ' ',\n })),\n },\n ];\n };\n\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration.',\n null,\n fixer,\n );\n\n return;\n }\n }\n\n lineChecks();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-multiline-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowMultipleTags: {\n type: 'boolean',\n },\n minimumLengthForMultiline: {\n type: 'integer',\n },\n multilineTags: {\n anyOf: [\n {\n enum: [\n '*',\n ],\n type: 'string',\n }, {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n noFinalLineText: {\n type: 'boolean',\n },\n noMultilineBlocks: {\n type: 'boolean',\n },\n noSingleLineBlocks: {\n type: 'boolean',\n },\n noZeroLineText: {\n type: 'boolean',\n },\n singleLineTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"multilineBlocks.js"}