eslint-plugin-jsdoc 63.0.10 → 63.0.11

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 (173) hide show
  1. package/dist/WarnSettings.cjs +1 -8
  2. package/dist/WarnSettings.cjs.map +1 -1
  3. package/dist/alignTransform.cjs +6 -10
  4. package/dist/alignTransform.cjs.map +1 -1
  5. package/dist/buildForbidRuleDefinition.cjs +3 -10
  6. package/dist/buildForbidRuleDefinition.cjs.map +1 -1
  7. package/dist/buildRejectOrPreferRuleDefinition.cjs +7 -14
  8. package/dist/buildRejectOrPreferRuleDefinition.cjs.map +1 -1
  9. package/dist/defaultTagOrder.cjs +1 -8
  10. package/dist/defaultTagOrder.cjs.map +1 -1
  11. package/dist/exportParser.cjs +6 -14
  12. package/dist/exportParser.cjs.map +1 -1
  13. package/dist/generateDocs.cjs +36 -44
  14. package/dist/generateDocs.cjs.map +1 -1
  15. package/dist/generateOptions.cjs +15 -18
  16. package/dist/generateOptions.cjs.map +1 -1
  17. package/dist/generateRule.cjs +24 -24
  18. package/dist/generateRule.cjs.map +1 -1
  19. package/dist/generateRuleTypes.cjs +6 -9
  20. package/dist/generateRuleTypes.cjs.map +1 -1
  21. package/dist/getDefaultTagStructureForMode.cjs +1 -8
  22. package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
  23. package/dist/getJsdocProcessorPlugin.cjs +20 -28
  24. package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
  25. package/dist/index-cjs.cjs +152 -159
  26. package/dist/index-cjs.cjs.map +1 -1
  27. package/dist/index-esm.cjs +16 -27
  28. package/dist/index-esm.cjs.map +1 -1
  29. package/dist/index.cjs +159 -172
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/iterateJsdoc.cjs +22 -32
  32. package/dist/iterateJsdoc.cjs.map +1 -1
  33. package/dist/jsdocUtils.cjs +18 -86
  34. package/dist/jsdocUtils.cjs.map +1 -1
  35. package/dist/rules/checkAccess.cjs +2 -10
  36. package/dist/rules/checkAccess.cjs.map +1 -1
  37. package/dist/rules/checkAlignment.cjs +2 -10
  38. package/dist/rules/checkAlignment.cjs.map +1 -1
  39. package/dist/rules/checkExamples.cjs +6 -15
  40. package/dist/rules/checkExamples.cjs.map +1 -1
  41. package/dist/rules/checkIndentation.cjs +2 -9
  42. package/dist/rules/checkIndentation.cjs.map +1 -1
  43. package/dist/rules/checkLineAlignment.cjs +6 -14
  44. package/dist/rules/checkLineAlignment.cjs.map +1 -1
  45. package/dist/rules/checkParamNames.cjs +2 -9
  46. package/dist/rules/checkParamNames.cjs.map +1 -1
  47. package/dist/rules/checkPropertyNames.cjs +2 -9
  48. package/dist/rules/checkPropertyNames.cjs.map +1 -1
  49. package/dist/rules/checkSyntax.cjs +2 -10
  50. package/dist/rules/checkSyntax.cjs.map +1 -1
  51. package/dist/rules/checkTagNames.cjs +4 -11
  52. package/dist/rules/checkTagNames.cjs.map +1 -1
  53. package/dist/rules/checkTemplateNames.cjs +12 -21
  54. package/dist/rules/checkTemplateNames.cjs.map +1 -1
  55. package/dist/rules/checkTypes.cjs +4 -10
  56. package/dist/rules/checkTypes.cjs.map +1 -1
  57. package/dist/rules/checkValues.cjs +9 -17
  58. package/dist/rules/checkValues.cjs.map +1 -1
  59. package/dist/rules/convertToJsdocComments.cjs +13 -19
  60. package/dist/rules/convertToJsdocComments.cjs.map +1 -1
  61. package/dist/rules/emptyTags.cjs +2 -10
  62. package/dist/rules/emptyTags.cjs.map +1 -1
  63. package/dist/rules/escapeInlineTags.cjs +2 -10
  64. package/dist/rules/escapeInlineTags.cjs.map +1 -1
  65. package/dist/rules/implementsOnClasses.cjs +2 -10
  66. package/dist/rules/implementsOnClasses.cjs.map +1 -1
  67. package/dist/rules/importsAsDependencies.cjs +12 -20
  68. package/dist/rules/importsAsDependencies.cjs.map +1 -1
  69. package/dist/rules/informativeDocs.cjs +4 -12
  70. package/dist/rules/informativeDocs.cjs.map +1 -1
  71. package/dist/rules/linesBeforeBlock.cjs +2 -9
  72. package/dist/rules/linesBeforeBlock.cjs.map +1 -1
  73. package/dist/rules/matchDescription.cjs +2 -9
  74. package/dist/rules/matchDescription.cjs.map +1 -1
  75. package/dist/rules/matchName.cjs +2 -10
  76. package/dist/rules/matchName.cjs.map +1 -1
  77. package/dist/rules/multilineBlocks.cjs +2 -9
  78. package/dist/rules/multilineBlocks.cjs.map +1 -1
  79. package/dist/rules/noBadBlocks.cjs +4 -11
  80. package/dist/rules/noBadBlocks.cjs.map +1 -1
  81. package/dist/rules/noBlankBlockDescriptions.cjs +2 -10
  82. package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
  83. package/dist/rules/noBlankBlocks.cjs +2 -10
  84. package/dist/rules/noBlankBlocks.cjs.map +1 -1
  85. package/dist/rules/noDefaults.cjs +2 -10
  86. package/dist/rules/noDefaults.cjs.map +1 -1
  87. package/dist/rules/noMissingSyntax.cjs +2 -9
  88. package/dist/rules/noMissingSyntax.cjs.map +1 -1
  89. package/dist/rules/noMultiAsterisks.cjs +2 -10
  90. package/dist/rules/noMultiAsterisks.cjs.map +1 -1
  91. package/dist/rules/noRestrictedSyntax.cjs +2 -9
  92. package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
  93. package/dist/rules/noTypes.cjs +2 -9
  94. package/dist/rules/noTypes.cjs.map +1 -1
  95. package/dist/rules/noUndefinedTypes.cjs +13 -21
  96. package/dist/rules/noUndefinedTypes.cjs.map +1 -1
  97. package/dist/rules/preferImportTag.cjs +21 -28
  98. package/dist/rules/preferImportTag.cjs.map +1 -1
  99. package/dist/rules/requireAsteriskPrefix.cjs +2 -10
  100. package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
  101. package/dist/rules/requireDescription.cjs +2 -9
  102. package/dist/rules/requireDescription.cjs.map +1 -1
  103. package/dist/rules/requireDescriptionCompleteSentence.cjs +7 -15
  104. package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
  105. package/dist/rules/requireExample.cjs +2 -10
  106. package/dist/rules/requireExample.cjs.map +1 -1
  107. package/dist/rules/requireFileOverview.cjs +2 -10
  108. package/dist/rules/requireFileOverview.cjs.map +1 -1
  109. package/dist/rules/requireHyphenBeforeParamDescription.cjs +2 -10
  110. package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
  111. package/dist/rules/requireJsdoc.cjs +17 -25
  112. package/dist/rules/requireJsdoc.cjs.map +1 -1
  113. package/dist/rules/requireParam.cjs +2 -9
  114. package/dist/rules/requireParam.cjs.map +1 -1
  115. package/dist/rules/requireParamDescription.cjs +2 -10
  116. package/dist/rules/requireParamDescription.cjs.map +1 -1
  117. package/dist/rules/requireParamName.cjs +2 -10
  118. package/dist/rules/requireParamName.cjs.map +1 -1
  119. package/dist/rules/requireParamType.cjs +2 -10
  120. package/dist/rules/requireParamType.cjs.map +1 -1
  121. package/dist/rules/requireProperty.cjs +2 -10
  122. package/dist/rules/requireProperty.cjs.map +1 -1
  123. package/dist/rules/requirePropertyDescription.cjs +2 -10
  124. package/dist/rules/requirePropertyDescription.cjs.map +1 -1
  125. package/dist/rules/requirePropertyName.cjs +2 -10
  126. package/dist/rules/requirePropertyName.cjs.map +1 -1
  127. package/dist/rules/requirePropertyType.cjs +2 -10
  128. package/dist/rules/requirePropertyType.cjs.map +1 -1
  129. package/dist/rules/requireRejects.cjs +2 -9
  130. package/dist/rules/requireRejects.cjs.map +1 -1
  131. package/dist/rules/requireReturns.cjs +4 -11
  132. package/dist/rules/requireReturns.cjs.map +1 -1
  133. package/dist/rules/requireReturnsCheck.cjs +8 -15
  134. package/dist/rules/requireReturnsCheck.cjs.map +1 -1
  135. package/dist/rules/requireReturnsDescription.cjs +2 -10
  136. package/dist/rules/requireReturnsDescription.cjs.map +1 -1
  137. package/dist/rules/requireReturnsType.cjs +2 -10
  138. package/dist/rules/requireReturnsType.cjs.map +1 -1
  139. package/dist/rules/requireTags.cjs +2 -9
  140. package/dist/rules/requireTags.cjs.map +1 -1
  141. package/dist/rules/requireTemplate.cjs +5 -13
  142. package/dist/rules/requireTemplate.cjs.map +1 -1
  143. package/dist/rules/requireThrows.cjs +2 -9
  144. package/dist/rules/requireThrows.cjs.map +1 -1
  145. package/dist/rules/requireYields.cjs +2 -9
  146. package/dist/rules/requireYields.cjs.map +1 -1
  147. package/dist/rules/requireYieldsCheck.cjs +2 -9
  148. package/dist/rules/requireYieldsCheck.cjs.map +1 -1
  149. package/dist/rules/sortTags.cjs +4 -12
  150. package/dist/rules/sortTags.cjs.map +1 -1
  151. package/dist/rules/tagLines.cjs +2 -9
  152. package/dist/rules/tagLines.cjs.map +1 -1
  153. package/dist/rules/textEscaping.cjs +2 -9
  154. package/dist/rules/textEscaping.cjs.map +1 -1
  155. package/dist/rules/tsMethodSignatureStyle.cjs +10 -18
  156. package/dist/rules/tsMethodSignatureStyle.cjs.map +1 -1
  157. package/dist/rules/tsNoEmptyObjectType.cjs +5 -13
  158. package/dist/rules/tsNoEmptyObjectType.cjs.map +1 -1
  159. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs +8 -16
  160. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs.map +1 -1
  161. package/dist/rules/tsPreferFunctionType.cjs +8 -16
  162. package/dist/rules/tsPreferFunctionType.cjs.map +1 -1
  163. package/dist/rules/typeFormatting.cjs +9 -17
  164. package/dist/rules/typeFormatting.cjs.map +1 -1
  165. package/dist/rules/validTypes.cjs +10 -18
  166. package/dist/rules/validTypes.cjs.map +1 -1
  167. package/dist/tagNames.cjs +4 -9
  168. package/dist/tagNames.cjs.map +1 -1
  169. package/dist/utils/hasReturnValue.cjs +1 -8
  170. package/dist/utils/hasReturnValue.cjs.map +1 -1
  171. package/package.json +21 -21
  172. package/src/rules/checkTemplateNames.js +0 -1
  173. package/src/rules/requireJsdoc.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"preferImportTag.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_eslint","_parseImportsExports","_semver","_interopRequireDefault","_toValidIdentifier","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_default","exports","iterateJsdoc","context","indent","jsdoc","settings","sourceCode","utils","mode","enableFixer","exemptTypedefs","outputType","options","allComments","getAllComments","comments","filter","comment","test","value","map","commentNode","commentParserToESTree","parseComment","typedefs","flatMap","doc","tags","tag","isNameOrNamepathDefiningTag","imports","delimiter","createImportInserter","importText","fixer","programNode","ast","commentNodes","getCommentsBefore","insertTextBefore","semver","lt","Linter","version","sourceText","getText","hasCode","body","length","leadingMatch","match","leading","replaceTextRange","slice","startsWithNewline","iterateInlineImports","potentialType","type","parsedType","tryParseType","parseType","traverse","nde","parentNode","element","currentNode","pathSegments","nodes","extraPathSegments","quotes","propertyOrBrackets","unshift","right","stringify","pathType","undefined","meta","quote","getFixer","name","extrPathSegments","matchingName","toValidIdentifier","node","at","keys","key","newNode","shift","left","nameNode","src","source","tokens","unusedPathSegments","findMatchingTypedef","pthSegments","find","typedef","typedefNode","namepathMatch","pathSegment","push","matchingTypedef","reportJSDoc","findMatchingImport","imprt","parsedImport","parseImportsExports","estreeToString","replace","trim","namedImportsModuleSpecifier","namedImports","values","namedImportNames","names","namespaceImports","namespaceImportsDefault","namespaceImportsNamespace","namespace","namespaceImportsModuleSpecifier","lastPathSegment","includes","matchingImport","lastPthSegment","lstPathSegment","mightHaveTypePosition","tagMightHaveTypePosition","hasTypePosition","Boolean","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","enum","module"],"sources":["../../src/rules/preferImportTag.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n commentParserToESTree,\n estreeToString,\n // getJSDocComment,\n parse as parseType,\n stringify,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n Linter,\n} from 'eslint';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\nimport semver from 'semver';\nimport toValidIdentifier from 'to-valid-identifier';\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n const {\n enableFixer = true,\n exemptTypedefs = true,\n outputType = 'namespaced-import',\n } = context.options[0] || {};\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return commentParserToESTree(\n parseComment(commentNode, ''), mode === 'permissive' ? 'typescript' : mode,\n );\n });\n\n const typedefs = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n });\n });\n\n const imports = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).map((tag) => {\n // Causes problems with stringification otherwise\n tag.delimiter = '';\n return tag;\n });\n\n /**\n * Helper to insert an import statement at the top of the file.\n * @param {string} importText - The import statement text (without newline)\n * @returns {((fixer: import('eslint').Rule.RuleFixer) => import('eslint').Rule.Fix|void)} - Fixer function for ESLint\n */\n const createImportInserter = (importText) => {\n return (fixer) => {\n const programNode = sourceCode.ast;\n const commentNodes = sourceCode.getCommentsBefore(programNode);\n\n /* c8 ignore start -- ESLint < 10 */\n if (commentNodes[0]) {\n return fixer.insertTextBefore(\n // @ts-expect-error - Comment is compatible with Node in practice\n commentNodes[0],\n `${importText}\\n${indent}`,\n );\n }\n\n // For ESLint < 10, use the simple approach of inserting before programNode\n if (semver.lt(Linter.version, '10.0.0')) {\n return fixer.insertTextBefore(\n programNode,\n importText,\n );\n }\n\n // For ESLint 10+, handle the changed Program node range\n const sourceText = sourceCode.getText();\n const hasCode = programNode.body && programNode.body.length > 0;\n const leadingMatch = hasCode ? sourceText.match(/^(\\n[ \\t]*)/v) : null;\n if (leadingMatch) {\n const leading = leadingMatch[1];\n return fixer.replaceTextRange(\n [\n leading.length, leading.length,\n ],\n `${importText}\\n${leading.slice(1)}`,\n );\n }\n\n const startsWithNewline = sourceText[0] === '\\n';\n return fixer.replaceTextRange(\n startsWithNewline ? [\n 0, 1,\n ] : [\n 0, 0,\n ],\n `${importText}\\n`,\n );\n /* c8 ignore end -- ESLint < 10 */\n };\n };\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const iterateInlineImports = (tag) => {\n const potentialType = tag.type;\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode);\n } catch {\n return;\n }\n\n traverse(parsedType, (nde, parentNode) => {\n // @ts-expect-error Adding our own property for use below\n nde.parentNode = parentNode;\n });\n\n traverse(parsedType, (nde) => {\n const {\n element,\n type,\n } = /** @type {import('jsdoc-type-pratt-parser').ImportResult} */ (nde);\n if (type !== 'JsdocTypeImport') {\n return;\n }\n\n let currentNode = nde;\n\n /** @type {string[]} */\n const pathSegments = [];\n\n /** @type {import('jsdoc-type-pratt-parser').NamePathResult[]} */\n const nodes = [];\n\n /** @type {string[]} */\n const extraPathSegments = [];\n\n /** @type {(import('jsdoc-type-pratt-parser').QuoteStyle|undefined)[]} */\n const quotes = [];\n\n const propertyOrBrackets = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType'][]} */ ([]);\n\n // @ts-expect-error Referencing our own property added above\n while (currentNode && currentNode.parentNode) {\n // @ts-expect-error Referencing our own property added above\n currentNode = currentNode.parentNode;\n /* c8 ignore next 3 -- Guard */\n if (currentNode.type !== 'JsdocTypeNamePath') {\n break;\n }\n\n pathSegments.unshift(\n currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ?\n stringify(currentNode.right.right) :\n currentNode.right.value,\n );\n nodes.unshift(currentNode);\n propertyOrBrackets.unshift(currentNode.pathType);\n quotes.unshift(\n currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ?\n undefined :\n currentNode.right.meta.quote,\n );\n }\n\n /**\n * @param {string} name\n * @param {string[]} extrPathSegments\n */\n const getFixer = (name, extrPathSegments) => {\n const matchingName = toValidIdentifier(name);\n return () => {\n /** @type {import('jsdoc-type-pratt-parser').NamePathResult|undefined} */\n let node = nodes.at(0);\n if (!node) {\n // Not really a NamePathResult, but will be converted later anyways\n node = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n /** @type {unknown} */\n (nde)\n );\n }\n\n const keys = /** @type {(keyof import('jsdoc-type-pratt-parser').NamePathResult)[]} */ (\n Object.keys(node)\n );\n\n for (const key of keys) {\n delete node[key];\n }\n\n if (extrPathSegments.length) {\n let newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n /** @type {unknown} */\n (node)\n );\n while (extrPathSegments.length && newNode) {\n newNode.type = 'JsdocTypeNamePath';\n newNode.right = {\n meta: {\n quote: quotes.shift(),\n },\n type: 'JsdocTypeProperty',\n value: /** @type {string} */ (extrPathSegments.shift()),\n };\n\n newNode.pathType = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType']} */ (\n propertyOrBrackets.shift()\n );\n // @ts-expect-error Temporary\n newNode.left = {};\n newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n newNode.left\n );\n }\n\n const nameNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n /** @type {unknown} */\n (newNode)\n );\n nameNode.type = 'JsdocTypeName';\n nameNode.value = matchingName;\n } else {\n const newNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n /** @type {unknown} */\n (node)\n );\n newNode.type = 'JsdocTypeName';\n newNode.value = matchingName;\n }\n\n for (const src of tag.source) {\n if (src.tokens.type) {\n src.tokens.type = `{${stringify(parsedType)}}`;\n break;\n }\n }\n };\n };\n\n /** @type {string[]} */\n let unusedPathSegments = [];\n\n const findMatchingTypedef = () => {\n // Don't want typedefs to find themselves\n if (!exemptTypedefs) {\n return undefined;\n }\n\n const pthSegments = [\n ...pathSegments,\n ];\n return typedefs.find((typedef) => {\n let typedefNode = typedef.parsedType;\n let namepathMatch;\n while (typedefNode && typedefNode.type === 'JsdocTypeNamePath') {\n const pathSegment = pthSegments.shift();\n if (!pathSegment) {\n namepathMatch = false;\n break;\n }\n\n if (\n (typedefNode.right.type === 'JsdocTypeIndexedAccessIndex' &&\n stringify(typedefNode.right.right) !== pathSegment) ||\n (typedefNode.right.type !== 'JsdocTypeIndexedAccessIndex' &&\n typedefNode.right.value !== pathSegment)\n ) {\n if (namepathMatch === true) {\n // It stopped matching, so stop\n break;\n }\n\n extraPathSegments.push(pathSegment);\n namepathMatch = false;\n continue;\n }\n\n namepathMatch = true;\n\n unusedPathSegments = pthSegments;\n\n typedefNode = typedefNode.left;\n }\n\n return namepathMatch &&\n // `import('eslint')` matches\n typedefNode &&\n typedefNode.type === 'JsdocTypeImport' &&\n typedefNode.element.value === element.value;\n });\n };\n\n // Check @typedef's first as should be longest match, allowing\n // for shorter abbreviations\n const matchingTypedef = findMatchingTypedef();\n if (matchingTypedef) {\n utils.reportJSDoc(\n 'Inline `import()` found; using `@typedef`',\n tag,\n enableFixer ? getFixer(matchingTypedef.name, [\n ...extraPathSegments,\n ...unusedPathSegments.slice(-1),\n ...unusedPathSegments.slice(0, -1),\n ]) : null,\n );\n return;\n }\n\n const findMatchingImport = () => {\n for (const imprt of imports) {\n const parsedImport = parseImportsExports(\n estreeToString(imprt).replace(/^\\s*@/v, '').trim(),\n );\n\n const namedImportsModuleSpecifier = Object.keys(parsedImport.namedImports || {})[0];\n\n const namedImports = Object.values(parsedImport.namedImports || {})[0]?.[0];\n const namedImportNames = (namedImports && namedImports.names && Object.keys(namedImports.names)) ?? [];\n\n const namespaceImports = Object.values(parsedImport.namespaceImports || {})[0]?.[0];\n\n const namespaceImportsDefault = namespaceImports && namespaceImports.default;\n const namespaceImportsNamespace = namespaceImports && namespaceImports.namespace;\n const namespaceImportsModuleSpecifier = Object.keys(parsedImport.namespaceImports || {})[0];\n\n const lastPathSegment = pathSegments.at(-1);\n\n if (\n (namespaceImportsDefault &&\n namespaceImportsModuleSpecifier === element.value) ||\n (element.value === namedImportsModuleSpecifier && (\n (lastPathSegment && namedImportNames.includes(lastPathSegment)) ||\n lastPathSegment === 'default'\n )) ||\n (namespaceImportsNamespace &&\n namespaceImportsModuleSpecifier === element.value)\n ) {\n return {\n namedImportNames,\n namedImports,\n namedImportsModuleSpecifier,\n namespaceImports,\n namespaceImportsDefault,\n namespaceImportsModuleSpecifier,\n namespaceImportsNamespace,\n };\n }\n }\n\n return undefined;\n };\n\n const matchingImport = findMatchingImport();\n if (matchingImport) {\n const {\n namedImportNames,\n namedImports,\n namedImportsModuleSpecifier,\n namespaceImportsNamespace,\n } = matchingImport;\n if (!namedImportNames.length && namedImportsModuleSpecifier && namedImports.default) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(namedImports.default, []) : null,\n );\n return;\n }\n\n const lastPthSegment = pathSegments.at(-1);\n if (lastPthSegment && namedImportNames.includes(lastPthSegment)) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(lastPthSegment, pathSegments.slice(0, -1)) : null,\n );\n return;\n }\n\n if (namespaceImportsNamespace) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(namespaceImportsNamespace, [\n ...pathSegments,\n ]) : null,\n );\n return;\n }\n }\n\n if (!pathSegments.length) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n getFixer(element.value, [])();\n return createImportInserter(\n `/** @import * as ${toValidIdentifier(element.value)} from '${element.value}'; */`,\n )(fixer);\n } : null,\n );\n return;\n }\n\n const lstPathSegment = pathSegments.at(-1);\n if (lstPathSegment && lstPathSegment === 'default') {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n getFixer(element.value, [])();\n return createImportInserter(\n `/** @import ${element.value} from '${element.value}'; */`,\n )(fixer);\n } : null,\n );\n return;\n }\n\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n if (outputType === 'namespaced-import') {\n getFixer(element.value, [\n ...pathSegments,\n ])();\n } else {\n getFixer(\n /** @type {string} */ (pathSegments.at(-1)),\n pathSegments.slice(0, -1),\n )();\n }\n\n const importText = outputType === 'namespaced-import' ?\n `/** @import * as ${toValidIdentifier(element.value)} from '${element.value}'; */` :\n `/** @import { ${toValidIdentifier(\n /* c8 ignore next -- TS */\n pathSegments.at(-1) ?? '',\n )} } from '${element.value}'; */`;\n\n return createImportInserter(importText)(fixer);\n } : null,\n );\n });\n };\n\n for (const tag of jsdoc.tags) {\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag);\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition && (!exemptTypedefs || !utils.isNameOrNamepathDefiningTag(tag.tag))) {\n iterateInlineImports(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Prefer `@import` tags to inline `import()` statements.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/prefer-import-tag.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n description: 'Whether or not to enable the fixer to add `@import` tags.',\n type: 'boolean',\n },\n exemptTypedefs: {\n description: 'Whether to allow `import()` statements within `@typedef`',\n type: 'boolean',\n },\n\n // We might add `typedef` and `typedef-local-only`, but also raises\n // question of how deep the generated typedef should be\n outputType: {\n description: 'What kind of `@import` to generate when no matching `@typedef` or `@import` is found',\n enum: [\n 'named-import',\n 'namespaced-import',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"preferImportTag.cjs","names":[],"sources":["../../src/rules/preferImportTag.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n commentParserToESTree,\n estreeToString,\n // getJSDocComment,\n parse as parseType,\n stringify,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n Linter,\n} from 'eslint';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\nimport semver from 'semver';\nimport toValidIdentifier from 'to-valid-identifier';\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n const {\n enableFixer = true,\n exemptTypedefs = true,\n outputType = 'namespaced-import',\n } = context.options[0] || {};\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*(?!\\*)/v).test(comment.value);\n })\n .map((commentNode) => {\n return commentParserToESTree(\n parseComment(commentNode, ''), mode === 'permissive' ? 'typescript' : mode,\n );\n });\n\n const typedefs = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNameOrNamepathDefiningTag(tag);\n });\n });\n\n const imports = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).map((tag) => {\n // Causes problems with stringification otherwise\n tag.delimiter = '';\n return tag;\n });\n\n /**\n * Helper to insert an import statement at the top of the file.\n * @param {string} importText - The import statement text (without newline)\n * @returns {((fixer: import('eslint').Rule.RuleFixer) => import('eslint').Rule.Fix|void)} - Fixer function for ESLint\n */\n const createImportInserter = (importText) => {\n return (fixer) => {\n const programNode = sourceCode.ast;\n const commentNodes = sourceCode.getCommentsBefore(programNode);\n\n /* c8 ignore start -- ESLint < 10 */\n if (commentNodes[0]) {\n return fixer.insertTextBefore(\n // @ts-expect-error - Comment is compatible with Node in practice\n commentNodes[0],\n `${importText}\\n${indent}`,\n );\n }\n\n // For ESLint < 10, use the simple approach of inserting before programNode\n if (semver.lt(Linter.version, '10.0.0')) {\n return fixer.insertTextBefore(\n programNode,\n importText,\n );\n }\n\n // For ESLint 10+, handle the changed Program node range\n const sourceText = sourceCode.getText();\n const hasCode = programNode.body && programNode.body.length > 0;\n const leadingMatch = hasCode ? sourceText.match(/^(\\n[ \\t]*)/v) : null;\n if (leadingMatch) {\n const leading = leadingMatch[1];\n return fixer.replaceTextRange(\n [\n leading.length, leading.length,\n ],\n `${importText}\\n${leading.slice(1)}`,\n );\n }\n\n const startsWithNewline = sourceText[0] === '\\n';\n return fixer.replaceTextRange(\n startsWithNewline ? [\n 0, 1,\n ] : [\n 0, 0,\n ],\n `${importText}\\n`,\n );\n /* c8 ignore end -- ESLint < 10 */\n };\n };\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const iterateInlineImports = (tag) => {\n const potentialType = tag.type;\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode);\n } catch {\n return;\n }\n\n traverse(parsedType, (nde, parentNode) => {\n // @ts-expect-error Adding our own property for use below\n nde.parentNode = parentNode;\n });\n\n traverse(parsedType, (nde) => {\n const {\n element,\n type,\n } = /** @type {import('jsdoc-type-pratt-parser').ImportResult} */ (nde);\n if (type !== 'JsdocTypeImport') {\n return;\n }\n\n let currentNode = nde;\n\n /** @type {string[]} */\n const pathSegments = [];\n\n /** @type {import('jsdoc-type-pratt-parser').NamePathResult[]} */\n const nodes = [];\n\n /** @type {string[]} */\n const extraPathSegments = [];\n\n /** @type {(import('jsdoc-type-pratt-parser').QuoteStyle|undefined)[]} */\n const quotes = [];\n\n const propertyOrBrackets = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType'][]} */ ([]);\n\n // @ts-expect-error Referencing our own property added above\n while (currentNode && currentNode.parentNode) {\n // @ts-expect-error Referencing our own property added above\n currentNode = currentNode.parentNode;\n /* c8 ignore next 3 -- Guard */\n if (currentNode.type !== 'JsdocTypeNamePath') {\n break;\n }\n\n pathSegments.unshift(\n currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ?\n stringify(currentNode.right.right) :\n currentNode.right.value,\n );\n nodes.unshift(currentNode);\n propertyOrBrackets.unshift(currentNode.pathType);\n quotes.unshift(\n currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ?\n undefined :\n currentNode.right.meta.quote,\n );\n }\n\n /**\n * @param {string} name\n * @param {string[]} extrPathSegments\n */\n const getFixer = (name, extrPathSegments) => {\n const matchingName = toValidIdentifier(name);\n return () => {\n /** @type {import('jsdoc-type-pratt-parser').NamePathResult|undefined} */\n let node = nodes.at(0);\n if (!node) {\n // Not really a NamePathResult, but will be converted later anyways\n node = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n /** @type {unknown} */\n (nde)\n );\n }\n\n const keys = /** @type {(keyof import('jsdoc-type-pratt-parser').NamePathResult)[]} */ (\n Object.keys(node)\n );\n\n for (const key of keys) {\n delete node[key];\n }\n\n if (extrPathSegments.length) {\n let newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n /** @type {unknown} */\n (node)\n );\n while (extrPathSegments.length && newNode) {\n newNode.type = 'JsdocTypeNamePath';\n newNode.right = {\n meta: {\n quote: quotes.shift(),\n },\n type: 'JsdocTypeProperty',\n value: /** @type {string} */ (extrPathSegments.shift()),\n };\n\n newNode.pathType = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType']} */ (\n propertyOrBrackets.shift()\n );\n // @ts-expect-error Temporary\n newNode.left = {};\n newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ (\n newNode.left\n );\n }\n\n const nameNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n /** @type {unknown} */\n (newNode)\n );\n nameNode.type = 'JsdocTypeName';\n nameNode.value = matchingName;\n } else {\n const newNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n /** @type {unknown} */\n (node)\n );\n newNode.type = 'JsdocTypeName';\n newNode.value = matchingName;\n }\n\n for (const src of tag.source) {\n if (src.tokens.type) {\n src.tokens.type = `{${stringify(parsedType)}}`;\n break;\n }\n }\n };\n };\n\n /** @type {string[]} */\n let unusedPathSegments = [];\n\n const findMatchingTypedef = () => {\n // Don't want typedefs to find themselves\n if (!exemptTypedefs) {\n return undefined;\n }\n\n const pthSegments = [\n ...pathSegments,\n ];\n return typedefs.find((typedef) => {\n let typedefNode = typedef.parsedType;\n let namepathMatch;\n while (typedefNode && typedefNode.type === 'JsdocTypeNamePath') {\n const pathSegment = pthSegments.shift();\n if (!pathSegment) {\n namepathMatch = false;\n break;\n }\n\n if (\n (typedefNode.right.type === 'JsdocTypeIndexedAccessIndex' &&\n stringify(typedefNode.right.right) !== pathSegment) ||\n (typedefNode.right.type !== 'JsdocTypeIndexedAccessIndex' &&\n typedefNode.right.value !== pathSegment)\n ) {\n if (namepathMatch === true) {\n // It stopped matching, so stop\n break;\n }\n\n extraPathSegments.push(pathSegment);\n namepathMatch = false;\n continue;\n }\n\n namepathMatch = true;\n\n unusedPathSegments = pthSegments;\n\n typedefNode = typedefNode.left;\n }\n\n return namepathMatch &&\n // `import('eslint')` matches\n typedefNode &&\n typedefNode.type === 'JsdocTypeImport' &&\n typedefNode.element.value === element.value;\n });\n };\n\n // Check @typedef's first as should be longest match, allowing\n // for shorter abbreviations\n const matchingTypedef = findMatchingTypedef();\n if (matchingTypedef) {\n utils.reportJSDoc(\n 'Inline `import()` found; using `@typedef`',\n tag,\n enableFixer ? getFixer(matchingTypedef.name, [\n ...extraPathSegments,\n ...unusedPathSegments.slice(-1),\n ...unusedPathSegments.slice(0, -1),\n ]) : null,\n );\n return;\n }\n\n const findMatchingImport = () => {\n for (const imprt of imports) {\n const parsedImport = parseImportsExports(\n estreeToString(imprt).replace(/^\\s*@/v, '').trim(),\n );\n\n const namedImportsModuleSpecifier = Object.keys(parsedImport.namedImports || {})[0];\n\n const namedImports = Object.values(parsedImport.namedImports || {})[0]?.[0];\n const namedImportNames = (namedImports && namedImports.names && Object.keys(namedImports.names)) ?? [];\n\n const namespaceImports = Object.values(parsedImport.namespaceImports || {})[0]?.[0];\n\n const namespaceImportsDefault = namespaceImports && namespaceImports.default;\n const namespaceImportsNamespace = namespaceImports && namespaceImports.namespace;\n const namespaceImportsModuleSpecifier = Object.keys(parsedImport.namespaceImports || {})[0];\n\n const lastPathSegment = pathSegments.at(-1);\n\n if (\n (namespaceImportsDefault &&\n namespaceImportsModuleSpecifier === element.value) ||\n (element.value === namedImportsModuleSpecifier && (\n (lastPathSegment && namedImportNames.includes(lastPathSegment)) ||\n lastPathSegment === 'default'\n )) ||\n (namespaceImportsNamespace &&\n namespaceImportsModuleSpecifier === element.value)\n ) {\n return {\n namedImportNames,\n namedImports,\n namedImportsModuleSpecifier,\n namespaceImports,\n namespaceImportsDefault,\n namespaceImportsModuleSpecifier,\n namespaceImportsNamespace,\n };\n }\n }\n\n return undefined;\n };\n\n const matchingImport = findMatchingImport();\n if (matchingImport) {\n const {\n namedImportNames,\n namedImports,\n namedImportsModuleSpecifier,\n namespaceImportsNamespace,\n } = matchingImport;\n if (!namedImportNames.length && namedImportsModuleSpecifier && namedImports.default) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(namedImports.default, []) : null,\n );\n return;\n }\n\n const lastPthSegment = pathSegments.at(-1);\n if (lastPthSegment && namedImportNames.includes(lastPthSegment)) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(lastPthSegment, pathSegments.slice(0, -1)) : null,\n );\n return;\n }\n\n if (namespaceImportsNamespace) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? getFixer(namespaceImportsNamespace, [\n ...pathSegments,\n ]) : null,\n );\n return;\n }\n }\n\n if (!pathSegments.length) {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n getFixer(element.value, [])();\n return createImportInserter(\n `/** @import * as ${toValidIdentifier(element.value)} from '${element.value}'; */`,\n )(fixer);\n } : null,\n );\n return;\n }\n\n const lstPathSegment = pathSegments.at(-1);\n if (lstPathSegment && lstPathSegment === 'default') {\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n getFixer(element.value, [])();\n return createImportInserter(\n `/** @import ${element.value} from '${element.value}'; */`,\n )(fixer);\n } : null,\n );\n return;\n }\n\n utils.reportJSDoc(\n 'Inline `import()` found; prefer `@import`',\n tag,\n enableFixer ? (fixer) => {\n if (outputType === 'namespaced-import') {\n getFixer(element.value, [\n ...pathSegments,\n ])();\n } else {\n getFixer(\n /** @type {string} */ (pathSegments.at(-1)),\n pathSegments.slice(0, -1),\n )();\n }\n\n const importText = outputType === 'namespaced-import' ?\n `/** @import * as ${toValidIdentifier(element.value)} from '${element.value}'; */` :\n `/** @import { ${toValidIdentifier(\n /* c8 ignore next -- TS */\n pathSegments.at(-1) ?? '',\n )} } from '${element.value}'; */`;\n\n return createImportInserter(importText)(fixer);\n } : null,\n );\n });\n };\n\n for (const tag of jsdoc.tags) {\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag);\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition && (!exemptTypedefs || !utils.isNameOrNamepathDefiningTag(tag.tag))) {\n iterateInlineImports(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Prefer `@import` tags to inline `import()` statements.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/prefer-import-tag.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n description: 'Whether or not to enable the fixer to add `@import` tags.',\n type: 'boolean',\n },\n exemptTypedefs: {\n description: 'Whether to allow `import()` statements within `@typedef`',\n type: 'boolean',\n },\n\n // We might add `typedef` and `typedef-local-only`, but also raises\n // question of how deep the generated typedef should be\n outputType: {\n description: 'What kind of `@import` to generate when no matching `@typedef` or `@import` is found',\n enum: [\n 'named-import',\n 'namespaced-import',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,12 +1,5 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
- var _default = exports.default = (0, _iterateJsdoc.default)(({
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+ export default iterateJsdoc(({
10
3
  context,
11
4
  indent,
12
5
  jsdoc,
@@ -186,5 +179,4 @@ when there is an asterisk present.`,
186
179
  type: 'layout'
187
180
  }
188
181
  });
189
- module.exports = exports.default;
190
182
  //# sourceMappingURL=requireAsteriskPrefix.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"requireAsteriskPrefix.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","context","indent","jsdoc","utils","defaultRequireValue","tags","tagMap","options","source","always","never","currentTag","some","number","tokens","delimiter","description","end","tag","neverFix","postDelimiter","checkNever","checkValue","includes","reportJSDoc","column","line","alwaysFix","start","checkAlways","slice","any","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","type","additionalProperties","properties","items","module"],"sources":["../../src/rules/requireAsteriskPrefix.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n utils,\n}) => {\n const [\n defaultRequireValue = 'always',\n {\n tags: tagMap = {},\n } = {},\n ] = context.options;\n\n const {\n source,\n } = jsdoc;\n\n const always = defaultRequireValue === 'always';\n const never = defaultRequireValue === 'never';\n\n /** @type {string} */\n let currentTag;\n source.some(({\n number,\n tokens,\n }) => {\n const {\n delimiter,\n description,\n end,\n tag,\n } = tokens;\n\n /**\n * @returns {void}\n */\n const neverFix = () => {\n tokens.delimiter = '';\n tokens.postDelimiter = '';\n };\n\n /**\n * @param {string} checkValue\n * @returns {boolean}\n */\n const checkNever = (checkValue) => {\n if (delimiter && delimiter !== '/**' && (\n never && !tagMap.always?.includes(checkValue) ||\n tagMap.never?.includes(checkValue)\n )) {\n utils.reportJSDoc('Expected JSDoc line to have no prefix.', {\n column: 0,\n line: number,\n }, neverFix);\n\n return true;\n }\n\n return false;\n };\n\n /**\n * @returns {void}\n */\n const alwaysFix = () => {\n if (!tokens.start) {\n tokens.start = indent + ' ';\n }\n\n tokens.delimiter = '*';\n tokens.postDelimiter = tag || description ? ' ' : '';\n };\n\n /**\n * @param {string} checkValue\n * @returns {boolean}\n */\n const checkAlways = (checkValue) => {\n if (\n !delimiter && (\n always && !tagMap.never?.includes(checkValue) ||\n tagMap.always?.includes(checkValue)\n )\n ) {\n utils.reportJSDoc('Expected JSDoc line to have the prefix.', {\n column: 0,\n line: number,\n }, alwaysFix);\n\n return true;\n }\n\n return false;\n };\n\n if (tag) {\n // Remove at sign\n currentTag = tag.slice(1);\n }\n\n if (\n // If this is the end but has a tag, the delimiter will also be\n // populated and will be safely ignored later\n end && !tag\n ) {\n return false;\n }\n\n if (!currentTag) {\n if (tagMap.any?.includes('*description')) {\n return false;\n }\n\n if (checkNever('*description')) {\n return true;\n }\n\n if (checkAlways('*description')) {\n return true;\n }\n\n return false;\n }\n\n if (tagMap.any?.includes(currentTag)) {\n return false;\n }\n\n if (checkNever(currentTag)) {\n return true;\n }\n\n if (checkAlways(currentTag)) {\n return true;\n }\n\n return false;\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description:\n 'Requires that each JSDoc line starts with an `*`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-asterisk-prefix.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n description: `If it is \\`\"always\"\\` then a problem is raised when there is no asterisk\nprefix on a given JSDoc line. If it is \\`\"never\"\\` then a problem is raised\nwhen there is an asterisk present.\n\nThe default value is \\`\"always\"\\`. You may also set the default to \\`\"any\"\\`\nand use the \\`tags\\` option to apply to specific tags only.`,\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n tags: {\n additionalProperties: false,\n description: `If you want different values to apply to specific tags, you may use\nthe \\`tags\\` option object. The keys are \\`always\\`, \\`never\\`, or \\`any\\` and\nthe values are arrays of tag names or the special value \\`*description\\`\nwhich applies to the main JSDoc block description.\n\n\\`\\`\\`js\n{\n 'jsdoc/require-asterisk-prefix': ['error', 'always', {\n tags: {\n always: ['*description'],\n any: ['example', 'license'],\n never: ['copyright']\n }\n }]\n}\n\\`\\`\\``,\n properties: {\n always: {\n description: `If it is \\`\"always\"\\` then a problem is raised when there is no asterisk\nprefix on a given JSDoc line.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n any: {\n description: 'No problem is raised regardless of asterisk presence or non-presence.',\n items: {\n type: 'string',\n },\n type: 'array',\n },\n never: {\n description: `If it is \\`\"never\"\\` then a problem is raised\nwhen there is an asterisk present.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"requireAsteriskPrefix.cjs","names":[],"sources":["../../src/rules/requireAsteriskPrefix.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n utils,\n}) => {\n const [\n defaultRequireValue = 'always',\n {\n tags: tagMap = {},\n } = {},\n ] = context.options;\n\n const {\n source,\n } = jsdoc;\n\n const always = defaultRequireValue === 'always';\n const never = defaultRequireValue === 'never';\n\n /** @type {string} */\n let currentTag;\n source.some(({\n number,\n tokens,\n }) => {\n const {\n delimiter,\n description,\n end,\n tag,\n } = tokens;\n\n /**\n * @returns {void}\n */\n const neverFix = () => {\n tokens.delimiter = '';\n tokens.postDelimiter = '';\n };\n\n /**\n * @param {string} checkValue\n * @returns {boolean}\n */\n const checkNever = (checkValue) => {\n if (delimiter && delimiter !== '/**' && (\n never && !tagMap.always?.includes(checkValue) ||\n tagMap.never?.includes(checkValue)\n )) {\n utils.reportJSDoc('Expected JSDoc line to have no prefix.', {\n column: 0,\n line: number,\n }, neverFix);\n\n return true;\n }\n\n return false;\n };\n\n /**\n * @returns {void}\n */\n const alwaysFix = () => {\n if (!tokens.start) {\n tokens.start = indent + ' ';\n }\n\n tokens.delimiter = '*';\n tokens.postDelimiter = tag || description ? ' ' : '';\n };\n\n /**\n * @param {string} checkValue\n * @returns {boolean}\n */\n const checkAlways = (checkValue) => {\n if (\n !delimiter && (\n always && !tagMap.never?.includes(checkValue) ||\n tagMap.always?.includes(checkValue)\n )\n ) {\n utils.reportJSDoc('Expected JSDoc line to have the prefix.', {\n column: 0,\n line: number,\n }, alwaysFix);\n\n return true;\n }\n\n return false;\n };\n\n if (tag) {\n // Remove at sign\n currentTag = tag.slice(1);\n }\n\n if (\n // If this is the end but has a tag, the delimiter will also be\n // populated and will be safely ignored later\n end && !tag\n ) {\n return false;\n }\n\n if (!currentTag) {\n if (tagMap.any?.includes('*description')) {\n return false;\n }\n\n if (checkNever('*description')) {\n return true;\n }\n\n if (checkAlways('*description')) {\n return true;\n }\n\n return false;\n }\n\n if (tagMap.any?.includes(currentTag)) {\n return false;\n }\n\n if (checkNever(currentTag)) {\n return true;\n }\n\n if (checkAlways(currentTag)) {\n return true;\n }\n\n return false;\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description:\n 'Requires that each JSDoc line starts with an `*`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-asterisk-prefix.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n description: `If it is \\`\"always\"\\` then a problem is raised when there is no asterisk\nprefix on a given JSDoc line. If it is \\`\"never\"\\` then a problem is raised\nwhen there is an asterisk present.\n\nThe default value is \\`\"always\"\\`. You may also set the default to \\`\"any\"\\`\nand use the \\`tags\\` option to apply to specific tags only.`,\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n tags: {\n additionalProperties: false,\n description: `If you want different values to apply to specific tags, you may use\nthe \\`tags\\` option object. The keys are \\`always\\`, \\`never\\`, or \\`any\\` and\nthe values are arrays of tag names or the special value \\`*description\\`\nwhich applies to the main JSDoc block description.\n\n\\`\\`\\`js\n{\n 'jsdoc/require-asterisk-prefix': ['error', 'always', {\n tags: {\n always: ['*description'],\n any: ['example', 'license'],\n never: ['copyright']\n }\n }]\n}\n\\`\\`\\``,\n properties: {\n always: {\n description: `If it is \\`\"always\"\\` then a problem is raised when there is no asterisk\nprefix on a given JSDoc line.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n any: {\n description: 'No problem is raised regardless of asterisk presence or non-presence.',\n items: {\n type: 'string',\n },\n type: 'array',\n },\n never: {\n description: `If it is \\`\"never\"\\` then a problem is raised\nwhen there is an asterisk present.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,11 +1,5 @@
1
- "use strict";
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
2
 
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
3
  /**
10
4
  * @param {string} description
11
5
  * @returns {import('../iterateJsdoc.js').Integer}
@@ -13,7 +7,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
13
7
  const checkDescription = description => {
14
8
  return description.trim().split('\n').filter(Boolean).length;
15
9
  };
16
- var _default = exports.default = (0, _iterateJsdoc.default)(({
10
+ export default iterateJsdoc(({
17
11
  context,
18
12
  jsdoc,
19
13
  report,
@@ -160,5 +154,4 @@ to cause exemption of the rule.`,
160
154
  type: 'suggestion'
161
155
  }
162
156
  });
163
- module.exports = exports.default;
164
157
  //# sourceMappingURL=requireDescription.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"requireDescription.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","checkDescription","description","trim","split","filter","Boolean","length","_default","exports","iterateJsdoc","context","jsdoc","report","utils","avoidDocs","descriptionStyle","options","targetTagName","getPreferredTagName","skipReportingBlockedTag","tagName","isBlocked","blocked","getDescription","descTags","getPresentTags","tag","functionExamples","tags","example","name","getTagDescription","contextDefaults","meta","docs","url","schema","additionalProperties","properties","checkConstructors","type","checkGetters","checkSetters","contexts","items","anyOf","comment","enum","exemptedBy","module"],"sources":["../../src/rules/requireDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {string} description\n * @returns {import('../iterateJsdoc.js').Integer}\n */\nconst checkDescription = (description) => {\n return description\n .trim()\n .split('\\n')\n .filter(Boolean)\n .length;\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n if (utils.avoidDocs()) {\n return;\n }\n\n const {\n descriptionStyle = 'body',\n } = context.options[0] || {};\n\n let targetTagName = utils.getPreferredTagName({\n // We skip reporting except when `@description` is essential to the rule,\n // so user can block the tag and still meaningfully use this rule\n // even if the tag is present (and `check-tag-names` is the one to\n // normally report the fact that it is blocked but present)\n skipReportingBlockedTag: descriptionStyle !== 'tag',\n tagName: 'description',\n });\n if (!targetTagName) {\n return;\n }\n\n const isBlocked = typeof targetTagName === 'object' && 'blocked' in targetTagName && targetTagName.blocked;\n if (isBlocked) {\n targetTagName = /** @type {{blocked: true; tagName: string;}} */ (\n targetTagName\n ).tagName;\n }\n\n if (descriptionStyle !== 'tag') {\n const {\n description,\n } = utils.getDescription();\n if (checkDescription(description || '')) {\n return;\n }\n\n if (descriptionStyle === 'body') {\n const descTags = utils.getPresentTags([\n 'desc', 'description',\n ]);\n if (descTags.length) {\n const [\n {\n tag: tagName,\n },\n ] = descTags;\n report(`Remove the @${tagName} tag to leave a plain block description or add additional description text above the @${tagName} line.`);\n } else {\n report('Missing JSDoc block description.');\n }\n\n return;\n }\n }\n\n const functionExamples = isBlocked ?\n [] :\n jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n if (!functionExamples.length) {\n report(\n descriptionStyle === 'any' ?\n `Missing JSDoc block description or @${targetTagName} declaration.` :\n `Missing JSDoc @${targetTagName} declaration.`,\n );\n\n return;\n }\n\n for (const example of functionExamples) {\n if (!checkDescription(`${example.name} ${utils.getTagDescription(example)}`)) {\n report(`Missing JSDoc @${targetTagName} description.`, null, example);\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all functions (and potentially other contexts) have a description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-description.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n description: `A value indicating whether \\`constructor\\`s should be\nchecked. Defaults to \\`true\\`.`,\n type: 'boolean',\n },\n checkGetters: {\n default: true,\n description: `A value indicating whether getters should be checked.\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n checkSetters: {\n default: true,\n description: `A value indicating whether setters should be checked.\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n contexts: {\n description: `Set to an array of strings representing the AST context\nwhere you wish the rule to be applied (e.g., \\`ClassDeclaration\\` for ES6\nclasses).\n\n\\`context\\` defaults to \\`any\\` and \\`comment\\` defaults to no specific comment context.\n\nOverrides the default contexts (\\`ArrowFunctionExpression\\`,\n\\`FunctionDeclaration\\`, \\`FunctionExpression\\`). Set to \\`\"any\"\\` if you want\nthe rule to apply to any JSDoc block throughout your files (as is necessary\nfor finding function blocks not attached to a function declaration or\nexpression, i.e., \\`@callback\\` or \\`@function\\` (or its aliases \\`@func\\` or\n\\`@method\\`) (including those associated with an \\`@interface\\`).\n\nSee the [\"AST and Selectors\"](../advanced.md#ast-and-selectors)\nsection of our Advanced docs for more on the expected format.`,\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 descriptionStyle: {\n description: `Whether to accept implicit descriptions (\\`\"body\"\\`) or\n\\`@description\\` tags (\\`\"tag\"\\`) as satisfying the rule. Set to \\`\"any\"\\` to\naccept either style. Defaults to \\`\"body\"\\`.`,\n enum: [\n 'body', 'tag', 'any',\n ],\n type: 'string',\n },\n exemptedBy: {\n description: `Array of tags (e.g., \\`['type']\\`) whose presence on the\ndocument block avoids the need for a \\`@description\\`. Defaults to an\narray with \\`inheritdoc\\`. If you set this array, it will overwrite the\ndefault, so be sure to add back \\`inheritdoc\\` if you wish its presence\nto cause exemption of the rule.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"requireDescription.cjs","names":[],"sources":["../../src/rules/requireDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {string} description\n * @returns {import('../iterateJsdoc.js').Integer}\n */\nconst checkDescription = (description) => {\n return description\n .trim()\n .split('\\n')\n .filter(Boolean)\n .length;\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n if (utils.avoidDocs()) {\n return;\n }\n\n const {\n descriptionStyle = 'body',\n } = context.options[0] || {};\n\n let targetTagName = utils.getPreferredTagName({\n // We skip reporting except when `@description` is essential to the rule,\n // so user can block the tag and still meaningfully use this rule\n // even if the tag is present (and `check-tag-names` is the one to\n // normally report the fact that it is blocked but present)\n skipReportingBlockedTag: descriptionStyle !== 'tag',\n tagName: 'description',\n });\n if (!targetTagName) {\n return;\n }\n\n const isBlocked = typeof targetTagName === 'object' && 'blocked' in targetTagName && targetTagName.blocked;\n if (isBlocked) {\n targetTagName = /** @type {{blocked: true; tagName: string;}} */ (\n targetTagName\n ).tagName;\n }\n\n if (descriptionStyle !== 'tag') {\n const {\n description,\n } = utils.getDescription();\n if (checkDescription(description || '')) {\n return;\n }\n\n if (descriptionStyle === 'body') {\n const descTags = utils.getPresentTags([\n 'desc', 'description',\n ]);\n if (descTags.length) {\n const [\n {\n tag: tagName,\n },\n ] = descTags;\n report(`Remove the @${tagName} tag to leave a plain block description or add additional description text above the @${tagName} line.`);\n } else {\n report('Missing JSDoc block description.');\n }\n\n return;\n }\n }\n\n const functionExamples = isBlocked ?\n [] :\n jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n if (!functionExamples.length) {\n report(\n descriptionStyle === 'any' ?\n `Missing JSDoc block description or @${targetTagName} declaration.` :\n `Missing JSDoc @${targetTagName} declaration.`,\n );\n\n return;\n }\n\n for (const example of functionExamples) {\n if (!checkDescription(`${example.name} ${utils.getTagDescription(example)}`)) {\n report(`Missing JSDoc @${targetTagName} description.`, null, example);\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all functions (and potentially other contexts) have a description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-description.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n description: `A value indicating whether \\`constructor\\`s should be\nchecked. Defaults to \\`true\\`.`,\n type: 'boolean',\n },\n checkGetters: {\n default: true,\n description: `A value indicating whether getters should be checked.\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n checkSetters: {\n default: true,\n description: `A value indicating whether setters should be checked.\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n contexts: {\n description: `Set to an array of strings representing the AST context\nwhere you wish the rule to be applied (e.g., \\`ClassDeclaration\\` for ES6\nclasses).\n\n\\`context\\` defaults to \\`any\\` and \\`comment\\` defaults to no specific comment context.\n\nOverrides the default contexts (\\`ArrowFunctionExpression\\`,\n\\`FunctionDeclaration\\`, \\`FunctionExpression\\`). Set to \\`\"any\"\\` if you want\nthe rule to apply to any JSDoc block throughout your files (as is necessary\nfor finding function blocks not attached to a function declaration or\nexpression, i.e., \\`@callback\\` or \\`@function\\` (or its aliases \\`@func\\` or\n\\`@method\\`) (including those associated with an \\`@interface\\`).\n\nSee the [\"AST and Selectors\"](../advanced.md#ast-and-selectors)\nsection of our Advanced docs for more on the expected format.`,\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 descriptionStyle: {\n description: `Whether to accept implicit descriptions (\\`\"body\"\\`) or\n\\`@description\\` tags (\\`\"tag\"\\`) as satisfying the rule. Set to \\`\"any\"\\` to\naccept either style. Defaults to \\`\"body\"\\`.`,\n enum: [\n 'body', 'tag', 'any',\n ],\n type: 'string',\n },\n exemptedBy: {\n description: `Array of tags (e.g., \\`['type']\\`) whose presence on the\ndocument block avoids the need for a \\`@description\\`. Defaults to an\narray with \\`inheritdoc\\`. If you set this array, it will overwrite the\ndefault, so be sure to add back \\`inheritdoc\\` if you wish its presence\nto cause exemption of the rule.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,12 +1,5 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
- var _escapeStringRegexp = _interopRequireDefault(require("escape-string-regexp"));
9
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+ import escapeStringRegexp from 'escape-string-regexp';
10
3
  const otherDescriptiveTags = new Set(['classdesc', 'deprecated', 'exception', 'file', 'fileoverview', 'overview',
11
4
  // 'copyright' and 'see' might be good addition, but as the former may be
12
5
  // sensitive text, and the latter may have just a link, they are not
@@ -110,7 +103,7 @@ const validateDescription = (description, reportOrig, jsdocNode, abbreviationsRe
110
103
  let text = sourceCode.getText(jsdocNode);
111
104
  if (!/[.:?!]$/v.test(paragraph)) {
112
105
  const line = paragraph.split('\n').findLast(Boolean);
113
- text = text.replace(new RegExp(`${(0, _escapeStringRegexp.default)(/** @type {string} */
106
+ text = text.replace(new RegExp(`${escapeStringRegexp(/** @type {string} */
114
107
  line)}$`, 'mv'), `${line}.`);
115
108
  }
116
109
  for (const sentence of sentences.filter(sentence_ => {
@@ -118,12 +111,12 @@ const validateDescription = (description, reportOrig, jsdocNode, abbreviationsRe
118
111
  })) {
119
112
  const beginning = sentence.split('\n')[0];
120
113
  if ('tag' in tag && tag.tag) {
121
- const reg = new RegExp(`(@${(0, _escapeStringRegexp.default)(tag.tag)}.*)${(0, _escapeStringRegexp.default)(beginning)}`, 'v');
114
+ const reg = new RegExp(`(@${escapeStringRegexp(tag.tag)}.*)${escapeStringRegexp(beginning)}`, 'v');
122
115
  text = text.replace(reg, (_$0, $1) => {
123
116
  return $1 + capitalize(beginning);
124
117
  });
125
118
  } else {
126
- text = text.replace(new RegExp('((?:[.?!]|\\*|\\})\\s*)' + (0, _escapeStringRegexp.default)(beginning), 'v'), '$1' + capitalize(beginning));
119
+ text = text.replace(new RegExp('((?:[.?!]|\\*|\\})\\s*)' + escapeStringRegexp(beginning), 'v'), '$1' + capitalize(beginning));
127
120
  }
128
121
  }
129
122
  return fixer.replaceText(jsdocNode, text);
@@ -179,7 +172,7 @@ const validateDescription = (description, reportOrig, jsdocNode, abbreviationsRe
179
172
  return false;
180
173
  });
181
174
  };
182
- var _default = exports.default = (0, _iterateJsdoc.default)(({
175
+ export default iterateJsdoc(({
183
176
  context,
184
177
  jsdoc,
185
178
  jsdocNode,
@@ -205,7 +198,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
205
198
  return;
206
199
  }
207
200
  const abbreviationsRegex = abbreviations.length ? new RegExp('\\b' + abbreviations.map(abbreviation => {
208
- return (0, _escapeStringRegexp.default)(abbreviation.replaceAll(/\.$/gv, '') + '.');
201
+ return escapeStringRegexp(abbreviation.replaceAll(/\.$/gv, '') + '.');
209
202
  }).join('|') + '(?:$|\\s)', 'gv') : '';
210
203
  let {
211
204
  description
@@ -317,5 +310,4 @@ is \`xyz\`).`,
317
310
  type: 'suggestion'
318
311
  }
319
312
  });
320
- module.exports = exports.default;
321
313
  //# sourceMappingURL=requireDescriptionCompleteSentence.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"requireDescriptionCompleteSentence.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_escapeStringRegexp","e","__esModule","default","otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replaceAll","replace","sentenceEndGrouping","puncts","matchAll","map","sentEnd","sentence","idx","test","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","some","line","isCapitalized","str","toUpperCase","isTable","charAt","capitalize","slice","validateDescription","description","reportOrig","jsdocNode","sourceCode","tag","newlineBeforeCapsAssumesBadSentenceEnd","descriptionNoHeadings","paragraphs","filter","Boolean","paragraph","parIdx","sentences","fix","fixer","getText","findLast","RegExp","escapeStringRegexp","sentence_","beginning","reg","_$0","$1","replaceText","report","msg","tagObj","source","number","column","paragraphNoAbbreviations","_default","exports","iterateJsdoc","context","jsdoc","utils","abbreviations","options","getInlineTags","includes","length","abbreviation","join","getDescription","indices","match","index","toReversed","forEachPreferredTag","matchingJsdocTag","desc","name","getTagDescription","trim","tagsWithNames","getTagsByType","tags","tagsWithoutNames","filterTags","tagName","has","hasOptionTag","trimEnd","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type","module"],"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport escapeStringRegexp from 'escape-string-regexp';\n\nconst otherDescriptiveTags = new Set([\n 'classdesc', 'deprecated', 'exception', 'file', 'fileoverview', 'overview',\n // 'copyright' and 'see' might be good addition, but as the former may be\n // sensitive text, and the latter may have just a link, they are not\n // included by default\n 'summary', 'throws', 'todo', 'yield', 'yields',\n]);\n\n/**\n * @param {string} text\n * @returns {string[]}\n */\nconst extractParagraphs = (text) => {\n return text.split(/(?<![;:])\\n\\n+/v);\n};\n\n/**\n * @param {string} text\n * @param {string|RegExp} abbreviationsRegex\n * @returns {string[]}\n */\nconst extractSentences = (text, abbreviationsRegex) => {\n const txt = text\n // Remove all {} tags.\n .replaceAll(/(?<!^)\\{[\\s\\S]*?\\}\\s*/gv, '')\n\n // Remove custom abbreviations\n .replace(abbreviationsRegex, '');\n\n const sentenceEndGrouping = /([.?!])(?:\\s+|$)/gv;\n\n const puncts = [\n ...txt.matchAll(sentenceEndGrouping),\n ].map((sentEnd) => {\n return sentEnd[0];\n });\n\n return txt\n .split(/[.?!](?:\\s+|$)/v)\n\n // Re-add the dot.\n .map((sentence, idx) => {\n return !puncts[idx] && /^\\s*$/v.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;\n });\n};\n\n/**\n * @param {string} text\n * @returns {boolean}\n */\nconst isNewLinePrecededByAPeriod = (text) => {\n /** @type {boolean} */\n let lastLineEndsSentence;\n\n const lines = text.split('\\n');\n\n return !lines.some((line) => {\n if (lastLineEndsSentence === false && /^[A-Z][a-z]/v.test(line)) {\n return true;\n }\n\n lastLineEndsSentence = /[.:?!\\|]$/v.test(line);\n\n return false;\n });\n};\n\n/**\n * @param {string} str\n * @returns {boolean}\n */\nconst isCapitalized = (str) => {\n return str[0] === str[0].toUpperCase();\n};\n\n/**\n * @param {string} str\n * @returns {boolean}\n */\nconst isTable = (str) => {\n return str.charAt(0) === '|';\n};\n\n/**\n * @param {string} str\n * @returns {string}\n */\nconst capitalize = (str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\n/**\n * @param {string} description\n * @param {import('../iterateJsdoc.js').Report} reportOrig\n * @param {import('eslint').Rule.Node} jsdocNode\n * @param {string|RegExp} abbreviationsRegex\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('comment-parser').Spec|{\n * line: import('../iterateJsdoc.js').Integer\n * }} tag\n * @param {boolean} newlineBeforeCapsAssumesBadSentenceEnd\n * @returns {boolean}\n */\nconst validateDescription = (\n description, reportOrig, jsdocNode, abbreviationsRegex,\n sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd,\n) => {\n if (!description || (/^\\n+$/v).test(description)) {\n return false;\n }\n\n const descriptionNoHeadings = description.replaceAll(/^\\s*#[^\\n]*(\\n|$)/gmv, '');\n\n const paragraphs = extractParagraphs(descriptionNoHeadings).filter(Boolean);\n\n return paragraphs.some((paragraph, parIdx) => {\n const sentences = extractSentences(paragraph, abbreviationsRegex);\n\n const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n let text = sourceCode.getText(jsdocNode);\n\n if (!/[.:?!]$/v.test(paragraph)) {\n const line = paragraph.split('\\n').findLast(Boolean);\n text = text.replace(new RegExp(`${escapeStringRegexp(\n /** @type {string} */\n (line),\n )}$`, 'mv'), `${line}.`);\n }\n\n for (const sentence of sentences.filter((sentence_) => {\n return !(/^\\s*$/v).test(sentence_) && !isCapitalized(sentence_) &&\n !isTable(sentence_);\n })) {\n const beginning = sentence.split('\\n')[0];\n\n if ('tag' in tag && tag.tag) {\n const reg = new RegExp(`(@${escapeStringRegexp(tag.tag)}.*)${escapeStringRegexp(beginning)}`, 'v');\n\n text = text.replace(reg, (_$0, $1) => {\n return $1 + capitalize(beginning);\n });\n } else {\n text = text.replace(new RegExp('((?:[.?!]|\\\\*|\\\\})\\\\s*)' + escapeStringRegexp(beginning), 'v'), '$1' + capitalize(beginning));\n }\n }\n\n return fixer.replaceText(jsdocNode, text);\n };\n\n /**\n * @param {string} msg\n * @param {import('eslint').Rule.ReportFixer | null | undefined} fixer\n * @param {{\n * line?: number | undefined;\n * column?: number | undefined;\n * } | (import('comment-parser').Spec & {\n * line?: number | undefined;\n * column?: number | undefined;\n * })} tagObj\n * @returns {void}\n */\n const report = (msg, fixer, tagObj) => {\n if ('line' in tagObj) {\n /**\n * @type {{\n * line: number;\n * }}\n */ (tagObj).line += parIdx * 2;\n } else {\n /** @type {import('comment-parser').Spec} */ (\n tagObj\n ).source[0].number += parIdx * 2;\n }\n\n // Avoid errors if old column doesn't exist here\n tagObj.column = 0;\n reportOrig(msg, fixer, tagObj);\n };\n\n if (sentences.some((sentence) => {\n return (/^[.?!]$/v).test(sentence);\n })) {\n report('Sentences must be more than punctuation.', null, tag);\n }\n\n if (sentences.some((sentence) => {\n return !(/^\\s*$/v).test(sentence) && !isCapitalized(sentence) && !isTable(sentence);\n })) {\n report('Sentences should start with an uppercase character.', fix, tag);\n }\n\n const paragraphNoAbbreviations = paragraph.replace(abbreviationsRegex, '');\n\n if (!/(?:[.?!\\|]|```)\\s*$/v.test(paragraphNoAbbreviations)) {\n report('Sentences must end with a period.', fix, tag);\n return true;\n }\n\n if (newlineBeforeCapsAssumesBadSentenceEnd && !isNewLinePrecededByAPeriod(paragraphNoAbbreviations)) {\n report('A line of text is started with an uppercase character, but the preceding line does not end the sentence.', null, tag);\n\n return true;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n jsdocNode,\n report,\n sourceCode,\n utils,\n}) => {\n const /** @type {{abbreviations: string[], newlineBeforeCapsAssumesBadSentenceEnd: boolean}} */ {\n abbreviations = [],\n newlineBeforeCapsAssumesBadSentenceEnd = false,\n } = context.options[0] || {};\n\n // `@inheritDoc` can be used as inline tag with TSDoc/typedoc: https://typedoc.org/documents/Tags.__inheritDoc_.html\n if (utils.getInlineTags().some(({\n tag,\n }) => {\n return [\n // Typdoc\n 'include', 'includeCode',\n // TSDoc\n 'inheritDoc', 'inheritdoc',\n 'label',\n ].includes(tag);\n })) {\n return;\n }\n\n const abbreviationsRegex = abbreviations.length ?\n new RegExp('\\\\b' + abbreviations.map((abbreviation) => {\n return escapeStringRegexp(abbreviation.replaceAll(/\\.$/gv, '') + '.');\n }).join('|') + '(?:$|\\\\s)', 'gv') :\n '';\n\n let {\n description,\n } = utils.getDescription();\n\n const indices = [\n ...description.matchAll(/```[\\s\\S]*```/gv),\n ].map((match) => {\n const {\n index,\n } = match;\n const [\n {\n length,\n },\n ] = match;\n return {\n index,\n length,\n };\n }).toReversed();\n\n for (const {\n index,\n length,\n } of indices) {\n description = description.slice(0, index) +\n description.slice(/** @type {import('../iterateJsdoc.js').Integer} */ (\n index\n ) + length);\n }\n\n if (validateDescription(description, report, jsdocNode, abbreviationsRegex, sourceCode, {\n line: jsdoc.source[0].number + 1,\n }, newlineBeforeCapsAssumesBadSentenceEnd)) {\n return;\n }\n\n utils.forEachPreferredTag('description', (matchingJsdocTag) => {\n const desc = `${matchingJsdocTag.name} ${utils.getTagDescription(matchingJsdocTag)}`.trim();\n validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, matchingJsdocTag, newlineBeforeCapsAssumesBadSentenceEnd);\n }, true);\n\n const {\n tagsWithNames,\n } = utils.getTagsByType(jsdoc.tags);\n const tagsWithoutNames = utils.filterTags(({\n tag: tagName,\n }) => {\n return otherDescriptiveTags.has(tagName) ||\n utils.hasOptionTag(tagName) && !tagsWithNames.some(({\n tag,\n }) => {\n // If user accidentally adds tags with names (or like `returns`\n // get parsed as having names), do not add to this list\n return tag === tagName;\n });\n });\n\n tagsWithNames.some((tag) => {\n const desc = /** @type {string} */ (\n utils.getTagDescription(tag)\n ).replace(/^- /v, '').trimEnd();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = `${tag.name} ${utils.getTagDescription(tag)}`.trim();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-description-complete-sentence.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n abbreviations: {\n description: `You can provide an \\`abbreviations\\` options array to avoid such strings of text\nbeing treated as sentence endings when followed by dots. The \\`.\\` is not\nnecessary at the end of the array items.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n newlineBeforeCapsAssumesBadSentenceEnd: {\n description: `When \\`false\\` (the new default), we will not assume capital letters after\nnewlines are an incorrect way to end the sentence (they may be proper\nnouns, for example).`,\n type: 'boolean',\n },\n tags: {\n description: `If you want additional tags to be checked for their descriptions, you may\nadd them within this option.\n\n\\`\\`\\`js\n{\n 'jsdoc/require-description-complete-sentence': ['error', {\n tags: ['see', 'copyright']\n }]\n}\n\\`\\`\\`\n\nThe tags \\`@param\\`/\\`@arg\\`/\\`@argument\\` and \\`@property\\`/\\`@prop\\` will be properly\nparsed to ensure that the checked \"description\" text includes only the text\nafter the name.\n\nAll other tags will treat the text following the tag name, a space, and\nan optional curly-bracketed type expression (and another space) as part of\nits \"description\" (e.g., for \\`@returns {someType} some description\\`, the\ndescription is \\`some description\\` while for \\`@some-tag xyz\\`, the description\nis \\`xyz\\`).`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"requireDescriptionCompleteSentence.cjs","names":[],"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport escapeStringRegexp from 'escape-string-regexp';\n\nconst otherDescriptiveTags = new Set([\n 'classdesc', 'deprecated', 'exception', 'file', 'fileoverview', 'overview',\n // 'copyright' and 'see' might be good addition, but as the former may be\n // sensitive text, and the latter may have just a link, they are not\n // included by default\n 'summary', 'throws', 'todo', 'yield', 'yields',\n]);\n\n/**\n * @param {string} text\n * @returns {string[]}\n */\nconst extractParagraphs = (text) => {\n return text.split(/(?<![;:])\\n\\n+/v);\n};\n\n/**\n * @param {string} text\n * @param {string|RegExp} abbreviationsRegex\n * @returns {string[]}\n */\nconst extractSentences = (text, abbreviationsRegex) => {\n const txt = text\n // Remove all {} tags.\n .replaceAll(/(?<!^)\\{[\\s\\S]*?\\}\\s*/gv, '')\n\n // Remove custom abbreviations\n .replace(abbreviationsRegex, '');\n\n const sentenceEndGrouping = /([.?!])(?:\\s+|$)/gv;\n\n const puncts = [\n ...txt.matchAll(sentenceEndGrouping),\n ].map((sentEnd) => {\n return sentEnd[0];\n });\n\n return txt\n .split(/[.?!](?:\\s+|$)/v)\n\n // Re-add the dot.\n .map((sentence, idx) => {\n return !puncts[idx] && /^\\s*$/v.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;\n });\n};\n\n/**\n * @param {string} text\n * @returns {boolean}\n */\nconst isNewLinePrecededByAPeriod = (text) => {\n /** @type {boolean} */\n let lastLineEndsSentence;\n\n const lines = text.split('\\n');\n\n return !lines.some((line) => {\n if (lastLineEndsSentence === false && /^[A-Z][a-z]/v.test(line)) {\n return true;\n }\n\n lastLineEndsSentence = /[.:?!\\|]$/v.test(line);\n\n return false;\n });\n};\n\n/**\n * @param {string} str\n * @returns {boolean}\n */\nconst isCapitalized = (str) => {\n return str[0] === str[0].toUpperCase();\n};\n\n/**\n * @param {string} str\n * @returns {boolean}\n */\nconst isTable = (str) => {\n return str.charAt(0) === '|';\n};\n\n/**\n * @param {string} str\n * @returns {string}\n */\nconst capitalize = (str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\n/**\n * @param {string} description\n * @param {import('../iterateJsdoc.js').Report} reportOrig\n * @param {import('eslint').Rule.Node} jsdocNode\n * @param {string|RegExp} abbreviationsRegex\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('comment-parser').Spec|{\n * line: import('../iterateJsdoc.js').Integer\n * }} tag\n * @param {boolean} newlineBeforeCapsAssumesBadSentenceEnd\n * @returns {boolean}\n */\nconst validateDescription = (\n description, reportOrig, jsdocNode, abbreviationsRegex,\n sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd,\n) => {\n if (!description || (/^\\n+$/v).test(description)) {\n return false;\n }\n\n const descriptionNoHeadings = description.replaceAll(/^\\s*#[^\\n]*(\\n|$)/gmv, '');\n\n const paragraphs = extractParagraphs(descriptionNoHeadings).filter(Boolean);\n\n return paragraphs.some((paragraph, parIdx) => {\n const sentences = extractSentences(paragraph, abbreviationsRegex);\n\n const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n let text = sourceCode.getText(jsdocNode);\n\n if (!/[.:?!]$/v.test(paragraph)) {\n const line = paragraph.split('\\n').findLast(Boolean);\n text = text.replace(new RegExp(`${escapeStringRegexp(\n /** @type {string} */\n (line),\n )}$`, 'mv'), `${line}.`);\n }\n\n for (const sentence of sentences.filter((sentence_) => {\n return !(/^\\s*$/v).test(sentence_) && !isCapitalized(sentence_) &&\n !isTable(sentence_);\n })) {\n const beginning = sentence.split('\\n')[0];\n\n if ('tag' in tag && tag.tag) {\n const reg = new RegExp(`(@${escapeStringRegexp(tag.tag)}.*)${escapeStringRegexp(beginning)}`, 'v');\n\n text = text.replace(reg, (_$0, $1) => {\n return $1 + capitalize(beginning);\n });\n } else {\n text = text.replace(new RegExp('((?:[.?!]|\\\\*|\\\\})\\\\s*)' + escapeStringRegexp(beginning), 'v'), '$1' + capitalize(beginning));\n }\n }\n\n return fixer.replaceText(jsdocNode, text);\n };\n\n /**\n * @param {string} msg\n * @param {import('eslint').Rule.ReportFixer | null | undefined} fixer\n * @param {{\n * line?: number | undefined;\n * column?: number | undefined;\n * } | (import('comment-parser').Spec & {\n * line?: number | undefined;\n * column?: number | undefined;\n * })} tagObj\n * @returns {void}\n */\n const report = (msg, fixer, tagObj) => {\n if ('line' in tagObj) {\n /**\n * @type {{\n * line: number;\n * }}\n */ (tagObj).line += parIdx * 2;\n } else {\n /** @type {import('comment-parser').Spec} */ (\n tagObj\n ).source[0].number += parIdx * 2;\n }\n\n // Avoid errors if old column doesn't exist here\n tagObj.column = 0;\n reportOrig(msg, fixer, tagObj);\n };\n\n if (sentences.some((sentence) => {\n return (/^[.?!]$/v).test(sentence);\n })) {\n report('Sentences must be more than punctuation.', null, tag);\n }\n\n if (sentences.some((sentence) => {\n return !(/^\\s*$/v).test(sentence) && !isCapitalized(sentence) && !isTable(sentence);\n })) {\n report('Sentences should start with an uppercase character.', fix, tag);\n }\n\n const paragraphNoAbbreviations = paragraph.replace(abbreviationsRegex, '');\n\n if (!/(?:[.?!\\|]|```)\\s*$/v.test(paragraphNoAbbreviations)) {\n report('Sentences must end with a period.', fix, tag);\n return true;\n }\n\n if (newlineBeforeCapsAssumesBadSentenceEnd && !isNewLinePrecededByAPeriod(paragraphNoAbbreviations)) {\n report('A line of text is started with an uppercase character, but the preceding line does not end the sentence.', null, tag);\n\n return true;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n jsdocNode,\n report,\n sourceCode,\n utils,\n}) => {\n const /** @type {{abbreviations: string[], newlineBeforeCapsAssumesBadSentenceEnd: boolean}} */ {\n abbreviations = [],\n newlineBeforeCapsAssumesBadSentenceEnd = false,\n } = context.options[0] || {};\n\n // `@inheritDoc` can be used as inline tag with TSDoc/typedoc: https://typedoc.org/documents/Tags.__inheritDoc_.html\n if (utils.getInlineTags().some(({\n tag,\n }) => {\n return [\n // Typdoc\n 'include', 'includeCode',\n // TSDoc\n 'inheritDoc', 'inheritdoc',\n 'label',\n ].includes(tag);\n })) {\n return;\n }\n\n const abbreviationsRegex = abbreviations.length ?\n new RegExp('\\\\b' + abbreviations.map((abbreviation) => {\n return escapeStringRegexp(abbreviation.replaceAll(/\\.$/gv, '') + '.');\n }).join('|') + '(?:$|\\\\s)', 'gv') :\n '';\n\n let {\n description,\n } = utils.getDescription();\n\n const indices = [\n ...description.matchAll(/```[\\s\\S]*```/gv),\n ].map((match) => {\n const {\n index,\n } = match;\n const [\n {\n length,\n },\n ] = match;\n return {\n index,\n length,\n };\n }).toReversed();\n\n for (const {\n index,\n length,\n } of indices) {\n description = description.slice(0, index) +\n description.slice(/** @type {import('../iterateJsdoc.js').Integer} */ (\n index\n ) + length);\n }\n\n if (validateDescription(description, report, jsdocNode, abbreviationsRegex, sourceCode, {\n line: jsdoc.source[0].number + 1,\n }, newlineBeforeCapsAssumesBadSentenceEnd)) {\n return;\n }\n\n utils.forEachPreferredTag('description', (matchingJsdocTag) => {\n const desc = `${matchingJsdocTag.name} ${utils.getTagDescription(matchingJsdocTag)}`.trim();\n validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, matchingJsdocTag, newlineBeforeCapsAssumesBadSentenceEnd);\n }, true);\n\n const {\n tagsWithNames,\n } = utils.getTagsByType(jsdoc.tags);\n const tagsWithoutNames = utils.filterTags(({\n tag: tagName,\n }) => {\n return otherDescriptiveTags.has(tagName) ||\n utils.hasOptionTag(tagName) && !tagsWithNames.some(({\n tag,\n }) => {\n // If user accidentally adds tags with names (or like `returns`\n // get parsed as having names), do not add to this list\n return tag === tagName;\n });\n });\n\n tagsWithNames.some((tag) => {\n const desc = /** @type {string} */ (\n utils.getTagDescription(tag)\n ).replace(/^- /v, '').trimEnd();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = `${tag.name} ${utils.getTagDescription(tag)}`.trim();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-description-complete-sentence.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n abbreviations: {\n description: `You can provide an \\`abbreviations\\` options array to avoid such strings of text\nbeing treated as sentence endings when followed by dots. The \\`.\\` is not\nnecessary at the end of the array items.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n newlineBeforeCapsAssumesBadSentenceEnd: {\n description: `When \\`false\\` (the new default), we will not assume capital letters after\nnewlines are an incorrect way to end the sentence (they may be proper\nnouns, for example).`,\n type: 'boolean',\n },\n tags: {\n description: `If you want additional tags to be checked for their descriptions, you may\nadd them within this option.\n\n\\`\\`\\`js\n{\n 'jsdoc/require-description-complete-sentence': ['error', {\n tags: ['see', 'copyright']\n }]\n}\n\\`\\`\\`\n\nThe tags \\`@param\\`/\\`@arg\\`/\\`@argument\\` and \\`@property\\`/\\`@prop\\` will be properly\nparsed to ensure that the checked \"description\" text includes only the text\nafter the name.\n\nAll other tags will treat the text following the tag name, a space, and\nan optional curly-bracketed type expression (and another space) as part of\nits \"description\" (e.g., for \\`@returns {someType} some description\\`, the\ndescription is \\`some description\\` while for \\`@some-tag xyz\\`, the description\nis \\`xyz\\`).`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,12 +1,5 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
- var _default = exports.default = (0, _iterateJsdoc.default)(({
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+ export default iterateJsdoc(({
10
3
  context,
11
4
  jsdoc,
12
5
  report,
@@ -129,5 +122,4 @@ missing \`@example\` declarations.`,
129
122
  type: 'suggestion'
130
123
  }
131
124
  });
132
- module.exports = exports.default;
133
125
  //# sourceMappingURL=requireExample.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"requireExample.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","context","jsdoc","report","utils","avoidDocs","enableFixer","exemptNoArguments","options","targetTagName","functionExamples","tags","filter","tag","length","isIteratingFunctionOrVariable","hasParams","reportJSDoc","addTag","example","exampleContent","name","getTagDescription","trim","split","Boolean","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","properties","checkConstructors","type","checkGetters","checkSetters","contexts","items","anyOf","comment","exemptedBy","module"],"sources":["../../src/rules/requireExample.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n if (utils.avoidDocs()) {\n return;\n }\n\n const {\n enableFixer = true,\n exemptNoArguments = false,\n } = context.options[0] || {};\n\n const targetTagName = 'example';\n\n const functionExamples = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n if (!functionExamples.length) {\n if (exemptNoArguments && utils.isIteratingFunctionOrVariable() &&\n !utils.hasParams()\n ) {\n return;\n }\n\n utils.reportJSDoc(`Missing JSDoc @${targetTagName} declaration.`, null, () => {\n if (enableFixer) {\n utils.addTag(targetTagName);\n }\n });\n\n return;\n }\n\n for (const example of functionExamples) {\n const exampleContent = `${example.name} ${utils.getTagDescription(example)}`\n .trim()\n .split('\\n')\n .filter(Boolean);\n\n if (!exampleContent.length) {\n report(`Missing JSDoc @${targetTagName} description.`, null, example);\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all functions (and potentially other contexts) have examples.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-example.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n description: `A value indicating whether \\`constructor\\`s should be checked.\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n checkGetters: {\n default: false,\n description: 'A value indicating whether getters should be checked. Defaults to `false`.',\n type: 'boolean',\n },\n checkSetters: {\n default: false,\n description: 'A value indicating whether setters should be checked. Defaults to `false`.',\n type: 'boolean',\n },\n contexts: {\n description: `Set this to an array of strings representing the AST context (or an object with\noptional \\`context\\` and \\`comment\\` properties) where you wish the rule to be applied.\n(e.g., \\`ClassDeclaration\\` for ES6 classes).\n\n\\`context\\` defaults to \\`any\\` and \\`comment\\` defaults to no specific comment context.\n\nOverrides the default contexts (\\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`). Set to \\`\"any\"\\` if you want the rule to apply to any\nJSDoc block throughout your files.\n\nSee the [\"AST and Selectors\"](../advanced.md#ast-and-selectors)\nsection of our Advanced docs for more on the expected format.`,\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 enableFixer: {\n default: true,\n description: `A boolean on whether to enable the fixer (which adds an empty \\`@example\\` block).\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n exemptedBy: {\n description: `Array of tags (e.g., \\`['type']\\`) whose presence on the document\nblock avoids the need for an \\`@example\\`. Defaults to an array with\n\\`inheritdoc\\`. If you set this array, it will overwrite the default,\nso be sure to add back \\`inheritdoc\\` if you wish its presence to cause\nexemption of the rule.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n exemptNoArguments: {\n default: false,\n description: `Boolean to indicate that no-argument functions should not be reported for\nmissing \\`@example\\` declarations.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"requireExample.cjs","names":[],"sources":["../../src/rules/requireExample.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n if (utils.avoidDocs()) {\n return;\n }\n\n const {\n enableFixer = true,\n exemptNoArguments = false,\n } = context.options[0] || {};\n\n const targetTagName = 'example';\n\n const functionExamples = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n if (!functionExamples.length) {\n if (exemptNoArguments && utils.isIteratingFunctionOrVariable() &&\n !utils.hasParams()\n ) {\n return;\n }\n\n utils.reportJSDoc(`Missing JSDoc @${targetTagName} declaration.`, null, () => {\n if (enableFixer) {\n utils.addTag(targetTagName);\n }\n });\n\n return;\n }\n\n for (const example of functionExamples) {\n const exampleContent = `${example.name} ${utils.getTagDescription(example)}`\n .trim()\n .split('\\n')\n .filter(Boolean);\n\n if (!exampleContent.length) {\n report(`Missing JSDoc @${targetTagName} description.`, null, example);\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all functions (and potentially other contexts) have examples.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-example.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n description: `A value indicating whether \\`constructor\\`s should be checked.\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n checkGetters: {\n default: false,\n description: 'A value indicating whether getters should be checked. Defaults to `false`.',\n type: 'boolean',\n },\n checkSetters: {\n default: false,\n description: 'A value indicating whether setters should be checked. Defaults to `false`.',\n type: 'boolean',\n },\n contexts: {\n description: `Set this to an array of strings representing the AST context (or an object with\noptional \\`context\\` and \\`comment\\` properties) where you wish the rule to be applied.\n(e.g., \\`ClassDeclaration\\` for ES6 classes).\n\n\\`context\\` defaults to \\`any\\` and \\`comment\\` defaults to no specific comment context.\n\nOverrides the default contexts (\\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`). Set to \\`\"any\"\\` if you want the rule to apply to any\nJSDoc block throughout your files.\n\nSee the [\"AST and Selectors\"](../advanced.md#ast-and-selectors)\nsection of our Advanced docs for more on the expected format.`,\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 enableFixer: {\n default: true,\n description: `A boolean on whether to enable the fixer (which adds an empty \\`@example\\` block).\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n exemptedBy: {\n description: `Array of tags (e.g., \\`['type']\\`) whose presence on the document\nblock avoids the need for an \\`@example\\`. Defaults to an array with\n\\`inheritdoc\\`. If you set this array, it will overwrite the default,\nso be sure to add back \\`inheritdoc\\` if you wish its presence to cause\nexemption of the rule.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n exemptNoArguments: {\n default: false,\n description: `Boolean to indicate that no-argument functions should not be reported for\nmissing \\`@example\\` declarations.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,11 +1,4 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
1
+ import iterateJsdoc from '../iterateJsdoc.js';
9
2
  const defaultTags = {
10
3
  file: {
11
4
  initialCommentsOnly: true,
@@ -27,7 +20,7 @@ const setDefaults = state => {
27
20
  state.hasNonCommentBeforeTag = {};
28
21
  }
29
22
  };
30
- var _default = exports.default = (0, _iterateJsdoc.default)(({
23
+ export default iterateJsdoc(({
31
24
  context,
32
25
  jsdocNode,
33
26
  state,
@@ -190,5 +183,4 @@ will be checked, but you must use \`file\` on the configuration object).`,
190
183
  }
191
184
  }
192
185
  });
193
- module.exports = exports.default;
194
186
  //# sourceMappingURL=requireFileOverview.cjs.map