@depup/eslint-plugin-jsdoc 63.3.2-depup.1 → 64.0.0-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/README.md +3 -11
  2. package/changes.json +3 -16
  3. package/dist/index.d.ts +7 -4
  4. package/package.json +29 -67
  5. package/src/index.js +7 -8
  6. package/dist/WarnSettings.cjs +0 -38
  7. package/dist/WarnSettings.cjs.map +0 -1
  8. package/dist/alignTransform.cjs +0 -402
  9. package/dist/alignTransform.cjs.map +0 -1
  10. package/dist/buildForbidRuleDefinition.cjs +0 -101
  11. package/dist/buildForbidRuleDefinition.cjs.map +0 -1
  12. package/dist/buildRejectOrPreferRuleDefinition.cjs +0 -352
  13. package/dist/buildRejectOrPreferRuleDefinition.cjs.map +0 -1
  14. package/dist/cjs/WarnSettings.d.ts +0 -16
  15. package/dist/cjs/alignTransform.d.ts +0 -33
  16. package/dist/cjs/buildForbidRuleDefinition.d.ts +0 -14
  17. package/dist/cjs/buildRejectOrPreferRuleDefinition.d.ts +0 -8
  18. package/dist/cjs/defaultTagOrder.d.ts +0 -4
  19. package/dist/cjs/exportParser.d.ts +0 -40
  20. package/dist/cjs/getDefaultTagStructureForMode.d.ts +0 -10
  21. package/dist/cjs/getJsdocProcessorPlugin.d.cts +0 -5
  22. package/dist/cjs/getJsdocProcessorPlugin.d.ts +0 -66
  23. package/dist/cjs/index-cjs.d.ts +0 -23
  24. package/dist/cjs/index.cjs.d.cts +0 -2
  25. package/dist/cjs/iterateJsdoc.d.cts +0 -7
  26. package/dist/cjs/iterateJsdoc.d.ts +0 -495
  27. package/dist/cjs/jsdocUtils.d.ts +0 -500
  28. package/dist/cjs/rules/checkAccess.d.ts +0 -2
  29. package/dist/cjs/rules/checkAlignment.d.ts +0 -2
  30. package/dist/cjs/rules/checkExamples.d.ts +0 -3
  31. package/dist/cjs/rules/checkIndentation.d.ts +0 -2
  32. package/dist/cjs/rules/checkLineAlignment.d.ts +0 -9
  33. package/dist/cjs/rules/checkParamNames.d.ts +0 -2
  34. package/dist/cjs/rules/checkPropertyNames.d.ts +0 -2
  35. package/dist/cjs/rules/checkSyntax.d.ts +0 -2
  36. package/dist/cjs/rules/checkTagNames.d.ts +0 -2
  37. package/dist/cjs/rules/checkTemplateNames.d.ts +0 -2
  38. package/dist/cjs/rules/checkTypes.d.ts +0 -7
  39. package/dist/cjs/rules/checkValues.d.ts +0 -2
  40. package/dist/cjs/rules/convertToJsdocComments.d.ts +0 -266
  41. package/dist/cjs/rules/emptyTags.d.ts +0 -2
  42. package/dist/cjs/rules/escapeInlineTags.d.ts +0 -2
  43. package/dist/cjs/rules/implementsOnClasses.d.ts +0 -2
  44. package/dist/cjs/rules/importsAsDependencies.d.ts +0 -2
  45. package/dist/cjs/rules/informativeDocs.d.ts +0 -2
  46. package/dist/cjs/rules/linesBeforeBlock.d.ts +0 -2
  47. package/dist/cjs/rules/matchDescription.d.ts +0 -2
  48. package/dist/cjs/rules/matchName.d.ts +0 -2
  49. package/dist/cjs/rules/multilineBlocks.d.ts +0 -2
  50. package/dist/cjs/rules/noBadBlocks.d.ts +0 -2
  51. package/dist/cjs/rules/noBlankBlockDescriptions.d.ts +0 -2
  52. package/dist/cjs/rules/noBlankBlocks.d.ts +0 -2
  53. package/dist/cjs/rules/noDefaults.d.ts +0 -2
  54. package/dist/cjs/rules/noMissingSyntax.d.ts +0 -9
  55. package/dist/cjs/rules/noMultiAsterisks.d.ts +0 -2
  56. package/dist/cjs/rules/noRestrictedSyntax.d.ts +0 -2
  57. package/dist/cjs/rules/noTypes.d.ts +0 -2
  58. package/dist/cjs/rules/noUndefinedTypes.d.ts +0 -2
  59. package/dist/cjs/rules/normalizeSeeLinks.d.ts +0 -2
  60. package/dist/cjs/rules/preferImportTag.d.ts +0 -2
  61. package/dist/cjs/rules/requireAsteriskPrefix.d.ts +0 -2
  62. package/dist/cjs/rules/requireDescription.d.ts +0 -2
  63. package/dist/cjs/rules/requireDescriptionCompleteSentence.d.ts +0 -2
  64. package/dist/cjs/rules/requireExample.d.ts +0 -2
  65. package/dist/cjs/rules/requireFileOverview.d.ts +0 -2
  66. package/dist/cjs/rules/requireHyphenBeforeParamDescription.d.ts +0 -2
  67. package/dist/cjs/rules/requireJsdoc.d.ts +0 -24
  68. package/dist/cjs/rules/requireParam.d.ts +0 -3
  69. package/dist/cjs/rules/requireParamDescription.d.ts +0 -2
  70. package/dist/cjs/rules/requireParamName.d.ts +0 -2
  71. package/dist/cjs/rules/requireParamType.d.ts +0 -2
  72. package/dist/cjs/rules/requireProperty.d.ts +0 -2
  73. package/dist/cjs/rules/requirePropertyDescription.d.ts +0 -2
  74. package/dist/cjs/rules/requirePropertyName.d.ts +0 -2
  75. package/dist/cjs/rules/requirePropertyType.d.ts +0 -2
  76. package/dist/cjs/rules/requireRejects.d.ts +0 -2
  77. package/dist/cjs/rules/requireReturns.d.ts +0 -2
  78. package/dist/cjs/rules/requireReturnsCheck.d.ts +0 -2
  79. package/dist/cjs/rules/requireReturnsDescription.d.ts +0 -2
  80. package/dist/cjs/rules/requireReturnsType.d.ts +0 -2
  81. package/dist/cjs/rules/requireTags.d.ts +0 -2
  82. package/dist/cjs/rules/requireTemplate.d.ts +0 -2
  83. package/dist/cjs/rules/requireThrows.d.ts +0 -2
  84. package/dist/cjs/rules/requireYields.d.ts +0 -2
  85. package/dist/cjs/rules/requireYieldsCheck.d.ts +0 -2
  86. package/dist/cjs/rules/sortTags.d.ts +0 -2
  87. package/dist/cjs/rules/tagLines.d.ts +0 -2
  88. package/dist/cjs/rules/textEscaping.d.ts +0 -2
  89. package/dist/cjs/rules/tsMethodSignatureStyle.d.ts +0 -2
  90. package/dist/cjs/rules/tsNoEmptyObjectType.d.ts +0 -2
  91. package/dist/cjs/rules/tsNoUnnecessaryTemplateExpression.d.ts +0 -2
  92. package/dist/cjs/rules/tsPreferFunctionType.d.ts +0 -2
  93. package/dist/cjs/rules/typeFormatting.d.ts +0 -2
  94. package/dist/cjs/rules/validTypes.d.ts +0 -2
  95. package/dist/cjs/tagNames.d.ts +0 -15
  96. package/dist/cjs/utils/hasReturnValue.d.ts +0 -19
  97. package/dist/defaultTagOrder.cjs +0 -46
  98. package/dist/defaultTagOrder.cjs.map +0 -1
  99. package/dist/exportParser.cjs +0 -732
  100. package/dist/exportParser.cjs.map +0 -1
  101. package/dist/generateDocs.cjs +0 -342
  102. package/dist/generateDocs.cjs.map +0 -1
  103. package/dist/generateOptions.cjs +0 -62
  104. package/dist/generateOptions.cjs.map +0 -1
  105. package/dist/generateRule.cjs +0 -248
  106. package/dist/generateRule.cjs.map +0 -1
  107. package/dist/generateRuleTypes.cjs +0 -24
  108. package/dist/generateRuleTypes.cjs.map +0 -1
  109. package/dist/getDefaultTagStructureForMode.cjs +0 -289
  110. package/dist/getDefaultTagStructureForMode.cjs.map +0 -1
  111. package/dist/getJsdocProcessorPlugin.cjs +0 -587
  112. package/dist/getJsdocProcessorPlugin.cjs.map +0 -1
  113. package/dist/getJsdocProcessorPlugin.cts +0 -5
  114. package/dist/index-cjs.cjs +0 -598
  115. package/dist/index-cjs.cjs.map +0 -1
  116. package/dist/index-cjs.d.ts +0 -24
  117. package/dist/index-esm.cjs +0 -162
  118. package/dist/index-esm.cjs.map +0 -1
  119. package/dist/index-esm.d.ts +0 -72
  120. package/dist/index.cjs +0 -746
  121. package/dist/index.cjs.cts +0 -3
  122. package/dist/index.cjs.map +0 -1
  123. package/dist/iterateJsdoc.cjs +0 -2150
  124. package/dist/iterateJsdoc.cjs.map +0 -1
  125. package/dist/iterateJsdoc.cts +0 -7
  126. package/dist/jsdocUtils.cjs +0 -1786
  127. package/dist/jsdocUtils.cjs.map +0 -1
  128. package/dist/rules/checkAccess.cjs +0 -40
  129. package/dist/rules/checkAccess.cjs.map +0 -1
  130. package/dist/rules/checkAlignment.cjs +0 -78
  131. package/dist/rules/checkAlignment.cjs.map +0 -1
  132. package/dist/rules/checkExamples.cjs +0 -521
  133. package/dist/rules/checkExamples.cjs.map +0 -1
  134. package/dist/rules/checkIndentation.cjs +0 -170
  135. package/dist/rules/checkIndentation.cjs.map +0 -1
  136. package/dist/rules/checkLineAlignment.cjs +0 -398
  137. package/dist/rules/checkLineAlignment.cjs.map +0 -1
  138. package/dist/rules/checkParamNames.cjs +0 -407
  139. package/dist/rules/checkParamNames.cjs.map +0 -1
  140. package/dist/rules/checkPropertyNames.cjs +0 -135
  141. package/dist/rules/checkPropertyNames.cjs.map +0 -1
  142. package/dist/rules/checkSyntax.cjs +0 -38
  143. package/dist/rules/checkSyntax.cjs.map +0 -1
  144. package/dist/rules/checkTagNames.cjs +0 -312
  145. package/dist/rules/checkTagNames.cjs.map +0 -1
  146. package/dist/rules/checkTemplateNames.cjs +0 -192
  147. package/dist/rules/checkTemplateNames.cjs.map +0 -1
  148. package/dist/rules/checkTypes.cjs +0 -111
  149. package/dist/rules/checkTypes.cjs.map +0 -1
  150. package/dist/rules/checkValues.cjs +0 -166
  151. package/dist/rules/checkValues.cjs.map +0 -1
  152. package/dist/rules/convertToJsdocComments.cjs +0 -356
  153. package/dist/rules/convertToJsdocComments.cjs.map +0 -1
  154. package/dist/rules/emptyTags.cjs +0 -98
  155. package/dist/rules/emptyTags.cjs.map +0 -1
  156. package/dist/rules/escapeInlineTags.cjs +0 -234
  157. package/dist/rules/escapeInlineTags.cjs.map +0 -1
  158. package/dist/rules/implementsOnClasses.cjs +0 -74
  159. package/dist/rules/implementsOnClasses.cjs.map +0 -1
  160. package/dist/rules/importsAsDependencies.cjs +0 -104
  161. package/dist/rules/importsAsDependencies.cjs.map +0 -1
  162. package/dist/rules/informativeDocs.cjs +0 -187
  163. package/dist/rules/informativeDocs.cjs.map +0 -1
  164. package/dist/rules/linesBeforeBlock.cjs +0 -120
  165. package/dist/rules/linesBeforeBlock.cjs.map +0 -1
  166. package/dist/rules/matchDescription.cjs +0 -356
  167. package/dist/rules/matchDescription.cjs.map +0 -1
  168. package/dist/rules/matchName.cjs +0 -160
  169. package/dist/rules/matchName.cjs.map +0 -1
  170. package/dist/rules/multilineBlocks.cjs +0 -431
  171. package/dist/rules/multilineBlocks.cjs.map +0 -1
  172. package/dist/rules/noBadBlocks.cjs +0 -100
  173. package/dist/rules/noBadBlocks.cjs.map +0 -1
  174. package/dist/rules/noBlankBlockDescriptions.cjs +0 -63
  175. package/dist/rules/noBlankBlockDescriptions.cjs.map +0 -1
  176. package/dist/rules/noBlankBlocks.cjs +0 -54
  177. package/dist/rules/noBlankBlocks.cjs.map +0 -1
  178. package/dist/rules/noDefaults.cjs +0 -102
  179. package/dist/rules/noDefaults.cjs.map +0 -1
  180. package/dist/rules/noMissingSyntax.cjs +0 -196
  181. package/dist/rules/noMissingSyntax.cjs.map +0 -1
  182. package/dist/rules/noMultiAsterisks.cjs +0 -126
  183. package/dist/rules/noMultiAsterisks.cjs.map +0 -1
  184. package/dist/rules/noRestrictedSyntax.cjs +0 -68
  185. package/dist/rules/noRestrictedSyntax.cjs.map +0 -1
  186. package/dist/rules/noTypes.cjs +0 -101
  187. package/dist/rules/noTypes.cjs.map +0 -1
  188. package/dist/rules/noUndefinedTypes.cjs +0 -616
  189. package/dist/rules/noUndefinedTypes.cjs.map +0 -1
  190. package/dist/rules/normalizeSeeLinks.cjs +0 -271
  191. package/dist/rules/normalizeSeeLinks.cjs.map +0 -1
  192. package/dist/rules/preferImportTag.cjs +0 -362
  193. package/dist/rules/preferImportTag.cjs.map +0 -1
  194. package/dist/rules/requireAsteriskPrefix.cjs +0 -190
  195. package/dist/rules/requireAsteriskPrefix.cjs.map +0 -1
  196. package/dist/rules/requireDescription.cjs +0 -164
  197. package/dist/rules/requireDescription.cjs.map +0 -1
  198. package/dist/rules/requireDescriptionCompleteSentence.cjs +0 -321
  199. package/dist/rules/requireDescriptionCompleteSentence.cjs.map +0 -1
  200. package/dist/rules/requireExample.cjs +0 -136
  201. package/dist/rules/requireExample.cjs.map +0 -1
  202. package/dist/rules/requireFileOverview.cjs +0 -194
  203. package/dist/rules/requireFileOverview.cjs.map +0 -1
  204. package/dist/rules/requireHyphenBeforeParamDescription.cjs +0 -166
  205. package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +0 -1
  206. package/dist/rules/requireJsdoc.cjs +0 -721
  207. package/dist/rules/requireJsdoc.cjs.map +0 -1
  208. package/dist/rules/requireParam.cjs +0 -772
  209. package/dist/rules/requireParam.cjs.map +0 -1
  210. package/dist/rules/requireParamDescription.cjs +0 -105
  211. package/dist/rules/requireParamDescription.cjs.map +0 -1
  212. package/dist/rules/requireParamName.cjs +0 -68
  213. package/dist/rules/requireParamName.cjs.map +0 -1
  214. package/dist/rules/requireParamType.cjs +0 -104
  215. package/dist/rules/requireParamType.cjs.map +0 -1
  216. package/dist/rules/requireProperty.cjs +0 -63
  217. package/dist/rules/requireProperty.cjs.map +0 -1
  218. package/dist/rules/requirePropertyDescription.cjs +0 -29
  219. package/dist/rules/requirePropertyDescription.cjs.map +0 -1
  220. package/dist/rules/requirePropertyName.cjs +0 -29
  221. package/dist/rules/requirePropertyName.cjs.map +0 -1
  222. package/dist/rules/requirePropertyType.cjs +0 -29
  223. package/dist/rules/requirePropertyType.cjs.map +0 -1
  224. package/dist/rules/requireRejects.cjs +0 -226
  225. package/dist/rules/requireRejects.cjs.map +0 -1
  226. package/dist/rules/requireReturns.cjs +0 -262
  227. package/dist/rules/requireReturns.cjs.map +0 -1
  228. package/dist/rules/requireReturnsCheck.cjs +0 -225
  229. package/dist/rules/requireReturnsCheck.cjs.map +0 -1
  230. package/dist/rules/requireReturnsDescription.cjs +0 -72
  231. package/dist/rules/requireReturnsDescription.cjs.map +0 -1
  232. package/dist/rules/requireReturnsType.cjs +0 -68
  233. package/dist/rules/requireReturnsType.cjs.map +0 -1
  234. package/dist/rules/requireTags.cjs +0 -74
  235. package/dist/rules/requireTags.cjs.map +0 -1
  236. package/dist/rules/requireTemplate.cjs +0 -220
  237. package/dist/rules/requireTemplate.cjs.map +0 -1
  238. package/dist/rules/requireThrows.cjs +0 -118
  239. package/dist/rules/requireThrows.cjs.map +0 -1
  240. package/dist/rules/requireYields.cjs +0 -224
  241. package/dist/rules/requireYields.cjs.map +0 -1
  242. package/dist/rules/requireYieldsCheck.cjs +0 -179
  243. package/dist/rules/requireYieldsCheck.cjs.map +0 -1
  244. package/dist/rules/sortTags.cjs +0 -656
  245. package/dist/rules/sortTags.cjs.map +0 -1
  246. package/dist/rules/tagLines.cjs +0 -374
  247. package/dist/rules/tagLines.cjs.map +0 -1
  248. package/dist/rules/textEscaping.cjs +0 -141
  249. package/dist/rules/textEscaping.cjs.map +0 -1
  250. package/dist/rules/tsMethodSignatureStyle.cjs +0 -240
  251. package/dist/rules/tsMethodSignatureStyle.cjs.map +0 -1
  252. package/dist/rules/tsNoEmptyObjectType.cjs +0 -62
  253. package/dist/rules/tsNoEmptyObjectType.cjs.map +0 -1
  254. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs +0 -104
  255. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs.map +0 -1
  256. package/dist/rules/tsPreferFunctionType.cjs +0 -110
  257. package/dist/rules/tsPreferFunctionType.cjs.map +0 -1
  258. package/dist/rules/typeFormatting.cjs +0 -607
  259. package/dist/rules/typeFormatting.cjs.map +0 -1
  260. package/dist/rules/validTypes.cjs +0 -324
  261. package/dist/rules/validTypes.cjs.map +0 -1
  262. package/dist/tagNames.cjs +0 -244
  263. package/dist/tagNames.cjs.map +0 -1
  264. package/dist/to-valid-identifier.cjs +0 -263
  265. package/dist/utils/hasReturnValue.cjs +0 -495
  266. package/dist/utils/hasReturnValue.cjs.map +0 -1
  267. package/rollup.config.js +0 -16
  268. package/src/getJsdocProcessorPlugin.cts +0 -5
  269. package/src/index-cjs.js +0 -758
  270. package/src/index-esm.js +0 -196
  271. package/src/index.cjs.cts +0 -3
  272. package/src/iterateJsdoc.cts +0 -7
@@ -1 +0,0 @@
1
- {"version":3,"file":"sortTags.cjs","names":["iterateJsdoc","defaultTagOrder"],"sources":["../../src/rules/sortTags.js"],"sourcesContent":["import defaultTagOrder from '../defaultTagOrder.js';\nimport iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n// eslint-disable-next-line complexity -- Temporary\n}) => {\n const\n /**\n * @type {{\n * linesBetween: import('../iterateJsdoc.js').Integer,\n * tagExceptions: Record<string, number>,\n * tagSequence: {\n * tags: string[]\n * }[],\n * alphabetizeExtras: boolean,\n * reportTagGroupSpacing: boolean,\n * reportIntraTagGroupSpacing: boolean,\n * }}\n */ {\n alphabetizeExtras = false,\n linesBetween = 1,\n reportIntraTagGroupSpacing = true,\n reportTagGroupSpacing = true,\n tagExceptions = {},\n tagSequence = defaultTagOrder,\n } = context.options[0] || {};\n\n const tagList = tagSequence.flatMap((obj) => {\n /* typeof obj === 'string' ? obj : */\n return obj.tags;\n });\n\n const otherPos = tagList.indexOf('-other');\n const endPos = otherPos > -1 ? otherPos : tagList.length;\n\n let ongoingCount = 0;\n for (const [\n idx,\n tag,\n ] of\n /**\n * @type {(\n * import('@es-joy/jsdoccomment').JsdocTagWithInline & {\n * originalIndex: import('../iterateJsdoc.js').Integer,\n * originalLine: import('../iterateJsdoc.js').Integer,\n * }\n * )[]}\n */ (jsdoc.tags).entries()) {\n tag.originalIndex = idx;\n ongoingCount += tag.source.length;\n tag.originalLine = ongoingCount;\n }\n\n /** @type {import('../iterateJsdoc.js').Integer|undefined} */\n let firstChangedTagLine;\n /** @type {import('../iterateJsdoc.js').Integer|undefined} */\n let firstChangedTagIndex;\n\n /**\n * @type {(import('comment-parser').Spec & {\n * originalIndex: import('../iterateJsdoc.js').Integer,\n * originalLine: import('../iterateJsdoc.js').Integer,\n * })[]}\n */\n const sortedTags = JSON.parse(JSON.stringify(jsdoc.tags));\n sortedTags.sort(({\n tag: tagNew,\n }, {\n originalIndex,\n originalLine,\n tag: tagOld,\n }) => {\n // Optimize: Just keep relative positions if the same tag name\n if (tagNew === tagOld) {\n return 0;\n }\n\n const checkOrSetFirstChanged = () => {\n if (!firstChangedTagLine || originalLine < firstChangedTagLine) {\n firstChangedTagLine = originalLine;\n firstChangedTagIndex = originalIndex;\n }\n };\n\n const newPos = tagList.indexOf(tagNew);\n const oldPos = tagList.indexOf(tagOld);\n\n const preferredNewPos = newPos === -1 ? endPos : newPos;\n const preferredOldPos = oldPos === -1 ? endPos : oldPos;\n\n if (preferredNewPos < preferredOldPos) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n if (preferredNewPos > preferredOldPos) {\n return 1;\n }\n\n // preferredNewPos === preferredOldPos\n if (\n !alphabetizeExtras ||\n\n // Optimize: If tagNew (or tagOld which is the same) was found in the\n // priority array, it can maintain its relative position—without need\n // of alphabetizing (secondary sorting)\n newPos >= 0\n ) {\n return 0;\n }\n\n if (tagNew < tagOld) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n // tagNew > tagOld\n return 1;\n });\n\n if (firstChangedTagLine === undefined) {\n // Should be ordered by now\n\n /**\n * @type {import('comment-parser').Spec[]}\n */\n const lastTagsOfGroup = [];\n\n /**\n * @type {[\n * import('comment-parser').Spec,\n * import('../iterateJsdoc.js').Integer\n * ][]}\n */\n const badLastTagsOfGroup = [];\n\n /**\n * @param {import('comment-parser').Spec} tag\n */\n const countTagEmptyLines = (tag) => {\n return tag.source.reduce((acc, {\n tokens: {\n description,\n end,\n name,\n tag: tg,\n type,\n },\n }) => {\n const empty = !tg && !type && !name && !description;\n // Reset the count so long as there is content\n return empty ? acc + Number(empty && !end) : 0;\n }, 0);\n };\n\n let idx = 0;\n for (const {\n tags,\n } of tagSequence) {\n let innerIdx;\n /** @type {import('comment-parser').Spec} */\n let currentTag;\n /** @type {import('comment-parser').Spec|undefined} */\n let lastTag;\n do {\n currentTag = jsdoc.tags[idx];\n if (!currentTag) {\n idx++;\n break;\n }\n\n innerIdx = tags.indexOf(currentTag.tag);\n\n if (\n innerIdx === -1 &&\n // eslint-disable-next-line no-loop-func -- Safe\n (!tags.includes('-other') || tagSequence.some(({\n tags: tgs,\n }) => {\n return tgs.includes(currentTag.tag);\n }))\n ) {\n idx++;\n break;\n }\n\n lastTag = currentTag;\n\n idx++;\n } while (true);\n\n idx--;\n\n if (lastTag) {\n lastTagsOfGroup.push(lastTag);\n const ct = countTagEmptyLines(lastTag);\n if (\n ct !== linesBetween &&\n // Use another rule for adding to end (should be of interest outside this rule)\n jsdoc.tags[idx]\n ) {\n badLastTagsOfGroup.push([\n lastTag, ct,\n ]);\n }\n }\n }\n\n if (reportTagGroupSpacing && badLastTagsOfGroup.length) {\n /**\n * @param {import('comment-parser').Spec} tg\n * @returns {() => void}\n */\n const fixer = (tg) => {\n return () => {\n // Due to https://github.com/syavorsky/comment-parser/issues/110 ,\n // we have to modify `jsdoc.source` rather than just modify tags\n // directly\n for (const [\n currIdx,\n {\n tokens,\n },\n ] of jsdoc.source.entries()) {\n if (tokens.tag !== '@' + tg.tag) {\n continue;\n }\n\n // Cannot be `tokens.end`, as dropped off last tag, so safe to\n // go on\n let newIdx = currIdx;\n\n const emptyLine = () => {\n return {\n number: 0,\n source: '',\n tokens: utils.seedTokens({\n delimiter: '*',\n start: jsdoc.source[newIdx - 1].tokens.start,\n }),\n };\n };\n\n let existingEmptyLines = 0;\n while (true) {\n const nextTokens = jsdoc.source[++newIdx]?.tokens;\n\n /* c8 ignore next 3 -- Guard */\n if (!nextTokens) {\n return;\n }\n\n // Should be no `nextTokens.end` to worry about since ignored\n // if not followed by tag\n\n if (nextTokens.tag) {\n // Haven't made it to last tag instance yet, so keep looking\n if (nextTokens.tag === tokens.tag) {\n existingEmptyLines = 0;\n continue;\n }\n\n const lineDiff = linesBetween - existingEmptyLines;\n if (lineDiff > 0) {\n const lines = Array.from({\n length: lineDiff,\n }, () => {\n return emptyLine();\n });\n jsdoc.source.splice(newIdx, 0, ...lines);\n } else {\n // lineDiff < 0\n jsdoc.source.splice(\n newIdx + lineDiff,\n -lineDiff,\n );\n }\n\n break;\n }\n\n const empty = !nextTokens.type && !nextTokens.name &&\n !nextTokens.description;\n\n if (empty) {\n existingEmptyLines++;\n } else {\n // Has content again, so reset empty line count\n existingEmptyLines = 0;\n }\n }\n\n break;\n }\n\n for (const [\n srcIdx,\n src,\n ] of jsdoc.source.entries()) {\n src.number = srcIdx;\n }\n };\n };\n\n for (const [\n tg,\n ] of badLastTagsOfGroup) {\n utils.reportJSDoc(\n 'Tag groups do not have the expected whitespace',\n tg,\n fixer(tg),\n );\n }\n\n return;\n }\n\n if (!reportIntraTagGroupSpacing) {\n return;\n }\n\n for (const [\n tagIdx,\n tag,\n ] of jsdoc.tags.entries()) {\n if (!jsdoc.tags[tagIdx + 1] || lastTagsOfGroup.includes(tag)) {\n continue;\n }\n\n const ct = countTagEmptyLines(tag);\n if (ct && (!tagExceptions[tag.tag] || tagExceptions[tag.tag] < ct)) {\n const fixer = () => {\n let foundFirstTag = false;\n\n /** @type {string|undefined} */\n let currentTag;\n\n for (const [\n currIdx,\n {\n tokens: {\n description,\n end,\n name,\n tag: tg,\n type,\n },\n },\n ] of jsdoc.source.entries()) {\n if (tg) {\n foundFirstTag = true;\n currentTag = tg;\n }\n\n if (!foundFirstTag) {\n continue;\n }\n\n if (currentTag && !tg && !type && !name && !description && !end) {\n let nextIdx = currIdx;\n\n let ignore = true;\n // Even if a tag of the same name as the last tags in a group,\n // could still be an earlier tag in that group\n\n // eslint-disable-next-line no-loop-func -- Safe\n if (lastTagsOfGroup.some((lastTagOfGroup) => {\n return currentTag === '@' + lastTagOfGroup.tag;\n })) {\n while (true) {\n const nextTokens = jsdoc.source[++nextIdx]?.tokens;\n if (!nextTokens) {\n break;\n }\n\n if (!nextTokens.tag) {\n continue;\n }\n\n // Followed by the same tag name, so not actually last in group,\n // and of interest\n if (nextTokens.tag === currentTag) {\n ignore = false;\n }\n }\n } else {\n while (true) {\n const nextTokens = jsdoc.source[++nextIdx]?.tokens;\n if (!nextTokens || nextTokens.end) {\n break;\n }\n\n // Not the very last tag, so don't ignore\n if (nextTokens.tag) {\n ignore = false;\n break;\n }\n }\n }\n\n if (!ignore) {\n jsdoc.source.splice(currIdx, 1);\n for (const [\n srcIdx,\n src,\n ] of jsdoc.source.entries()) {\n src.number = srcIdx;\n }\n }\n }\n }\n };\n\n utils.reportJSDoc(\n 'Intra-group tags have unexpected whitespace',\n tag,\n fixer,\n );\n }\n }\n\n return;\n }\n\n const firstLine = utils.getFirstLine();\n\n const fix = () => {\n const itemsToMoveRange = [\n ...Array.from({\n length: jsdoc.tags.length -\n /** @type {import('../iterateJsdoc.js').Integer} */ (\n firstChangedTagIndex\n ),\n }).keys(),\n ];\n\n const unchangedPriorTagDescriptions = jsdoc.tags.slice(\n 0,\n firstChangedTagIndex,\n ).reduce((ct, {\n source,\n }) => {\n return ct + source.length - 1;\n }, 0);\n\n // This offset includes not only the offset from where the first tag\n // must begin, and the additional offset of where the first changed\n // tag begins, but it must also account for prior descriptions\n const initialOffset = /** @type {import('../iterateJsdoc.js').Integer} */ (\n firstLine\n ) + /** @type {import('../iterateJsdoc.js').Integer} */ (firstChangedTagIndex) +\n\n // May be the first tag, so don't try finding a prior one if so\n unchangedPriorTagDescriptions;\n\n // Use `firstChangedTagLine` for line number to begin reporting/splicing\n for (const idx of itemsToMoveRange) {\n utils.removeTag(\n idx +\n /** @type {import('../iterateJsdoc.js').Integer} */ (\n firstChangedTagIndex\n ),\n );\n }\n\n const changedTags = sortedTags.slice(firstChangedTagIndex);\n let extraTagCount = 0;\n\n for (const idx of itemsToMoveRange) {\n const changedTag = changedTags[idx];\n\n utils.addTag(\n changedTag.tag,\n extraTagCount + initialOffset + idx,\n {\n ...changedTag.source[0].tokens,\n\n // `comment-parser` puts the `end` within the `tags` section, so\n // avoid adding another to jsdoc.source\n end: '',\n },\n );\n\n for (const {\n tokens,\n } of changedTag.source.slice(1)) {\n if (!tokens.end) {\n utils.addLine(\n extraTagCount + initialOffset + idx + 1,\n {\n ...tokens,\n end: '',\n },\n );\n extraTagCount++;\n }\n }\n }\n };\n\n utils.reportJSDoc(\n `Tags are not in the prescribed order: ${\n tagList.join(', ') || '(alphabetical)'\n }`,\n jsdoc.tags[/** @type {import('../iterateJsdoc.js').Integer} */ (\n firstChangedTagIndex\n )],\n fix,\n true,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/sort-tags.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n alphabetizeExtras: {\n description: `Defaults to \\`false\\`. Alphabetizes any items not within \\`tagSequence\\` after any\nitems within \\`tagSequence\\` (or in place of the special \\`-other\\` pseudo-tag)\nare sorted.\n\nIf you want all your tags alphabetized, you can supply an empty array for\n\\`tagSequence\\` along with setting this option to \\`true\\`.`,\n type: 'boolean',\n },\n linesBetween: {\n description: `Indicates the number of lines to be added between tag groups. Defaults to 1.\nDo not set to 0 or 2+ if you are using \\`tag-lines\\` and \\`\"always\"\\` and do not\nset to 1+ if you are using \\`tag-lines\\` and \\`\"never\"\\`.`,\n type: 'integer',\n },\n reportIntraTagGroupSpacing: {\n description: `Whether to enable reporting and fixing of line breaks within tags of a given\ntag group. Defaults to \\`true\\` which will remove any line breaks at the end of\nsuch tags. Do not use with \\`true\\` if you are using \\`tag-lines\\` and \\`always\\`.`,\n type: 'boolean',\n },\n reportTagGroupSpacing: {\n description: `Whether to enable reporting and fixing of line breaks between tag groups\nas set by \\`linesBetween\\`. Defaults to \\`true\\`. Note that the very last tag\nwill not have spacing applied regardless. For adding line breaks there, you\nmay wish to use the \\`endLines\\` option of the \\`tag-lines\\` rule.`,\n type: 'boolean',\n },\n tagExceptions: {\n description: 'Allows specification by tag of a specific higher maximum number of lines. Keys are tags and values are the maximum number of lines allowed for such tags. Overrides `linesBetween`. Defaults to no special exceptions per tag.',\n patternProperties: {\n '.*': {\n type: 'number',\n },\n },\n type: 'object',\n },\n tagSequence: {\n description: `An array of tag group objects indicating the preferred sequence for sorting tags.\n\nEach item in the array should be an object with a \\`tags\\` property set to an array\nof tag names.\n\nTag names earlier in the list will be arranged first. The relative position of\ntags of the same name will not be changed.\n\nEarlier groups will also be arranged before later groups, but with the added\nfeature that additional line breaks may be added between (or before or after)\nsuch groups (depending on the setting of \\`linesBetween\\`).\n\nTag names not in the list will be grouped together at the end. The pseudo-tag\n\\`-other\\` can be used to place them anywhere else if desired. The tags will be\nplaced in their order of appearance, or alphabetized if \\`alphabetizeExtras\\`\nis enabled, see more below about that option.\n\nDefaults to the array below (noting that it is just a single tag group with\nno lines between groups by default).\n\nPlease note that this order is still experimental, so if you want to retain\na fixed order that doesn't change into the future, supply your own\n\\`tagSequence\\`.\n\n\\`\\`\\`js\n[{tags: [\n // Brief descriptions\n 'summary',\n 'typeSummary',\n\n // Module/file-level\n 'module',\n 'exports',\n 'file',\n 'fileoverview',\n 'overview',\n 'import',\n\n // Identifying (name, type)\n 'typedef',\n 'interface',\n 'record',\n 'template',\n 'name',\n 'kind',\n 'type',\n 'alias',\n 'external',\n 'host',\n 'callback',\n 'func',\n 'function',\n 'method',\n 'class',\n 'constructor',\n\n // Relationships\n 'modifies',\n 'mixes',\n 'mixin',\n 'mixinClass',\n 'mixinFunction',\n 'namespace',\n 'borrows',\n 'constructs',\n 'lends',\n 'implements',\n 'requires',\n\n // Long descriptions\n 'desc',\n 'description',\n 'classdesc',\n 'tutorial',\n 'copyright',\n 'license',\n\n // Simple annotations\n 'const',\n 'constant',\n 'final',\n 'global',\n 'readonly',\n 'abstract',\n 'virtual',\n 'var',\n 'member',\n 'memberof',\n 'memberof!',\n 'inner',\n 'instance',\n 'inheritdoc',\n 'inheritDoc',\n 'override',\n 'hideconstructor',\n\n // Core function/object info\n 'param',\n 'arg',\n 'argument',\n 'prop',\n 'property',\n 'return',\n 'returns',\n\n // Important behavior details\n 'async',\n 'generator',\n 'default',\n 'defaultvalue',\n 'enum',\n 'augments',\n 'extends',\n 'throws',\n 'exception',\n 'yield',\n 'yields',\n 'event',\n 'fires',\n 'emits',\n 'listens',\n 'this',\n\n // Access\n 'static',\n 'private',\n 'protected',\n 'public',\n 'access',\n 'package',\n\n '-other',\n\n // Supplementary descriptions\n 'see',\n 'example',\n\n // METADATA\n\n // Other Closure (undocumented) metadata\n 'closurePrimitive',\n 'customElement',\n 'expose',\n 'hidden',\n 'idGenerator',\n 'meaning',\n 'ngInject',\n 'owner',\n 'wizaction',\n\n // Other Closure (documented) metadata\n 'define',\n 'dict',\n 'export',\n 'externs',\n 'implicitCast',\n 'noalias',\n 'nocollapse',\n 'nocompile',\n 'noinline',\n 'nosideeffects',\n 'polymer',\n 'polymerBehavior',\n 'preserve',\n 'struct',\n 'suppress',\n 'unrestricted',\n\n // @homer0/prettier-plugin-jsdoc metadata\n 'category',\n\n // Non-Closure metadata\n 'ignore',\n 'author',\n 'version',\n 'variation',\n 'since',\n 'deprecated',\n 'todo',\n]}];\n\\`\\`\\``,\n items: {\n additionalProperties: false,\n properties: {\n tags: {\n description: 'See description on `tagSequence`.',\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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QACR,CAAC;QACD,YAAY,EAAE;UACZ,WAAW,EAAE;AACzB;AACA,0DAA0D;UAC9C,IAAI,EAAE;QACR,CAAC;QACD,0BAA0B,EAAE;UAC1B,WAAW,EAAE;AACzB;AACA,mFAAmF;UACvE,IAAI,EAAE;QACR,CAAC;QACD,qBAAqB,EAAE;UACrB,WAAW,EAAE;AACzB;AACA;AACA,mEAAmE;UACvD,IAAI,EAAE;QACR,CAAC;QACD,aAAa,EAAE;UACb,WAAW,EAAE,gOAAgO;UAC7O,iBAAiB,EAAE;YACjB,IAAI,EAAE;cACJ,IAAI,EAAE;YACR;UACF,CAAC;UACD,IAAI,EAAE;QACR,CAAC;QACD,WAAW,EAAE;UACX,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACK,KAAK,EAAE;YACL,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;cACV,IAAI,EAAE;gBACJ,WAAW,EAAE,mCAAmC;gBAChD,KAAK,EAAE;kBACL,IAAI,EAAE;gBACR,CAAC;gBACD,IAAI,EAAE;cACR;YACF,CAAC;YACD,IAAI,EAAE;UACR,CAAC;UACD,IAAI,EAAE;QACR;MACF,CAAC;MACD,IAAI,EAAE;IACR,CAAC,CACF;IACD,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA","ignoreList":[]}
@@ -1,374 +0,0 @@
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
- /**
10
- * @param {{
11
- * maxBlockLines: null|number,
12
- * startLines: null|number,
13
- * utils: import('../iterateJsdoc.js').Utils
14
- * }} cfg
15
- */
16
- const checkMaxBlockLines = ({
17
- maxBlockLines,
18
- startLines,
19
- utils
20
- }) => {
21
- if (typeof maxBlockLines !== 'number') {
22
- return false;
23
- }
24
- if (typeof startLines === 'number' && maxBlockLines < startLines) {
25
- utils.reportJSDoc('If set to a number, `maxBlockLines` must be greater than or equal to `startLines`.');
26
- return true;
27
- }
28
- const {
29
- description
30
- } = utils.getDescription();
31
- const excessBlockLinesRegex = new RegExp('\n{' + (maxBlockLines + 2) + ',}', 'v');
32
- const excessBlockLinesMatch = description.match(excessBlockLinesRegex);
33
- const excessBlockLines = excessBlockLinesMatch?.[0]?.length ?? 0;
34
- if (excessBlockLinesMatch) {
35
- const excessIndexLine = description.slice(0, excessBlockLinesMatch.index).match(/\n/gv)?.length ?? 0;
36
- utils.reportJSDoc(`Expected a maximum of ${maxBlockLines} line${maxBlockLines === 1 ? '' : 's'} within block description`, {
37
- line: excessIndexLine
38
- }, () => {
39
- utils.setBlockDescription((info, seedTokens, descLines, postDelims) => {
40
- const newPostDelims = [...postDelims.slice(0, excessIndexLine), ...postDelims.slice(excessIndexLine + excessBlockLines - 1 - maxBlockLines)];
41
- return [...descLines.slice(0, excessIndexLine), ...descLines.slice(excessIndexLine + excessBlockLines - 1 - maxBlockLines)].map((desc, idx) => {
42
- return {
43
- number: 0,
44
- source: '',
45
- tokens: seedTokens({
46
- ...info,
47
- description: desc,
48
- postDelimiter: newPostDelims[idx]
49
- })
50
- };
51
- });
52
- });
53
- });
54
- return true;
55
- }
56
- return false;
57
- };
58
- var _default = exports.default = (0, _iterateJsdoc.default)(({
59
- context,
60
- jsdoc,
61
- utils
62
- }) => {
63
- const [alwaysNever = 'never', {
64
- applyToEndTag = true,
65
- count = 1,
66
- endLines = 0,
67
- maxBlockLines = null,
68
- startLines = 0,
69
- startLinesWithNoTags = null,
70
- tags = {}
71
- } = {}] = context.options;
72
- jsdoc.tags.some((tg, tagIdx) => {
73
- let lastTag;
74
-
75
- /**
76
- * @type {null|import('../iterateJsdoc.js').Integer}
77
- */
78
- let lastEmpty = null;
79
-
80
- /**
81
- * @type {null|import('../iterateJsdoc.js').Integer}
82
- */
83
- let reportIndex = null;
84
- let emptyLinesCount = 0;
85
- for (const [idx, {
86
- tokens: {
87
- description,
88
- end,
89
- name,
90
- tag,
91
- type
92
- }
93
- }] of tg.source.entries()) {
94
- // May be text after a line break within a tag description
95
- if (description) {
96
- reportIndex = null;
97
- }
98
- if (lastTag && ['always', 'any'].includes(tags[lastTag.slice(1)]?.lines)) {
99
- continue;
100
- }
101
- const empty = !tag && !name && !type && !description;
102
- if (empty && !end && (alwaysNever === 'never' || lastTag && tags[lastTag.slice(1)]?.lines === 'never')) {
103
- reportIndex = idx;
104
- continue;
105
- }
106
- if (!end) {
107
- if (empty) {
108
- emptyLinesCount++;
109
- } else {
110
- emptyLinesCount = 0;
111
- }
112
- lastEmpty = empty ? idx : null;
113
- }
114
- lastTag = tag;
115
- }
116
- if (typeof endLines === 'number' && lastEmpty !== null && tagIdx === jsdoc.tags.length - 1) {
117
- const lineDiff = endLines - emptyLinesCount;
118
- if (lineDiff < 0) {
119
- const fixer = () => {
120
- utils.removeTag(tagIdx, {
121
- tagSourceOffset: /** @type {import('../iterateJsdoc.js').Integer} */lastEmpty + lineDiff + 1
122
- });
123
- };
124
- utils.reportJSDoc(`Expected ${endLines} trailing lines`, {
125
- line: tg.source[lastEmpty].number + lineDiff + 1
126
- }, fixer);
127
- } else if (lineDiff > 0) {
128
- const fixer = () => {
129
- utils.addLines(tagIdx, /** @type {import('../iterateJsdoc.js').Integer} */lastEmpty, endLines - emptyLinesCount);
130
- };
131
- utils.reportJSDoc(`Expected ${endLines} trailing lines`, {
132
- line: tg.source[lastEmpty].number
133
- }, fixer);
134
- }
135
- return true;
136
- }
137
- if (reportIndex !== null) {
138
- const fixer = () => {
139
- utils.removeTag(tagIdx, {
140
- tagSourceOffset: (/** @type {import('../iterateJsdoc.js').Integer} */
141
- reportIndex)
142
- });
143
- };
144
- utils.reportJSDoc('Expected no lines between tags', {
145
- line: tg.source[0].number + 1
146
- }, fixer);
147
- return true;
148
- }
149
- return false;
150
- });
151
- (applyToEndTag ? jsdoc.tags : jsdoc.tags.slice(0, -1)).some((tg, tagIdx) => {
152
- /**
153
- * @type {{
154
- * idx: import('../iterateJsdoc.js').Integer,
155
- * number: import('../iterateJsdoc.js').Integer
156
- * }[]}
157
- */
158
- const lines = [];
159
- let currentTag;
160
- let tagSourceIdx = 0;
161
- for (const [idx, {
162
- number,
163
- tokens: {
164
- description,
165
- end,
166
- name,
167
- tag,
168
- type
169
- }
170
- }] of tg.source.entries()) {
171
- if (description) {
172
- lines.splice(0);
173
- tagSourceIdx = idx;
174
- }
175
- if (tag) {
176
- currentTag = tag;
177
- }
178
- if (!tag && !name && !type && !description && !end) {
179
- lines.push({
180
- idx,
181
- number
182
- });
183
- }
184
- }
185
- const currentTg = currentTag && tags[currentTag.slice(1)];
186
- const tagCount = currentTg?.count;
187
- const defaultAlways = alwaysNever === 'always' && currentTg?.lines !== 'never' && currentTg?.lines !== 'any' && lines.length < count;
188
- let overrideAlways;
189
- let fixCount = count;
190
- if (!defaultAlways) {
191
- fixCount = typeof tagCount === 'number' ? tagCount : count;
192
- overrideAlways = currentTg?.lines === 'always' && lines.length < fixCount;
193
- }
194
- if (defaultAlways || overrideAlways) {
195
- const fixer = () => {
196
- utils.addLines(tagIdx, lines[lines.length - 1]?.idx || tagSourceIdx + 1, fixCount - lines.length);
197
- };
198
- const line = lines[lines.length - 1]?.number || tg.source[tagSourceIdx].number;
199
- utils.reportJSDoc(`Expected ${fixCount} line${fixCount === 1 ? '' : 's'} between tags but found ${lines.length}`, {
200
- line
201
- }, fixer);
202
- return true;
203
- }
204
- return false;
205
- });
206
- if (checkMaxBlockLines({
207
- maxBlockLines,
208
- startLines,
209
- utils
210
- })) {
211
- return;
212
- }
213
- if (typeof startLines === 'number' || typeof startLinesWithNoTags === 'number') {
214
- const noTags = !jsdoc.tags.length;
215
- if (noTags && startLinesWithNoTags === null) {
216
- return;
217
- }
218
- const {
219
- description,
220
- lastDescriptionLine
221
- } = utils.getDescription();
222
- if (!/\S/v.test(description)) {
223
- return;
224
- }
225
- const startingLines = noTags ? startLinesWithNoTags : startLines;
226
- const trailingLines = description.match(/\n+$/v)?.[0]?.length;
227
- const trailingDiff = (trailingLines ?? 0) - startingLines;
228
- if (trailingDiff > 0) {
229
- utils.reportJSDoc(`Expected only ${startingLines} line${startingLines === 1 ? '' : 's'} after block description`, {
230
- line: lastDescriptionLine - trailingDiff
231
- }, () => {
232
- utils.setBlockDescription((info, seedTokens, descLines, postDelims) => {
233
- return descLines.slice(0, -trailingDiff).map((desc, idx) => {
234
- return {
235
- number: 0,
236
- source: '',
237
- tokens: seedTokens({
238
- ...info,
239
- description: desc,
240
- postDelimiter: postDelims[idx]
241
- })
242
- };
243
- });
244
- });
245
- });
246
- } else if (trailingDiff < 0) {
247
- utils.reportJSDoc(`Expected ${startingLines} lines after block description`, {
248
- line: lastDescriptionLine
249
- }, () => {
250
- utils.setBlockDescription((info, seedTokens, descLines, postDelims) => {
251
- return [...descLines, ...Array.from({
252
- length: -trailingDiff
253
- }, () => {
254
- return '';
255
- })].map((desc, idx) => {
256
- return {
257
- number: 0,
258
- source: '',
259
- tokens: seedTokens({
260
- ...info,
261
- description: desc,
262
- postDelimiter: desc.trim() ? postDelims[idx] : ''
263
- })
264
- };
265
- });
266
- });
267
- });
268
- }
269
- }
270
- }, {
271
- iterateAllJsdocs: true,
272
- meta: {
273
- docs: {
274
- description: 'Enforces lines (or no lines) before, after, or between tags.',
275
- url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/tag-lines.md#repos-sticky-header'
276
- },
277
- fixable: 'code',
278
- schema: [{
279
- description: `Defaults to "never". "any" is only useful with \`tags\` (allowing non-enforcement of lines except
280
- for particular tags) or with \`startLines\`, \`startLinesWithNoTags\` \`endLines\`, or \`maxBlockLines\`. It is also
281
- necessary if using the linebreak-setting options of the \`sort-tags\` rule
282
- so that the two rules won't conflict in both attempting to set lines
283
- between tags.`,
284
- enum: ['always', 'any', 'never'],
285
- type: 'string'
286
- }, {
287
- additionalProperties: false,
288
- properties: {
289
- applyToEndTag: {
290
- description: `Set to \`false\` and use with "always" to indicate the normal lines to be
291
- added after tags should not be added after the final tag.
292
-
293
- Defaults to \`true\`.`,
294
- type: 'boolean'
295
- },
296
- count: {
297
- description: `Use with "always" to indicate the number of lines to require be present.
298
-
299
- Defaults to 1.`,
300
- type: 'integer'
301
- },
302
- endLines: {
303
- anyOf: [{
304
- type: 'integer'
305
- }, {
306
- type: 'null'
307
- }],
308
- description: `If not set to \`null\`, will enforce end lines to the given count on the
309
- final tag only.
310
-
311
- Defaults to \`0\`.`
312
- },
313
- maxBlockLines: {
314
- anyOf: [{
315
- type: 'integer'
316
- }, {
317
- type: 'null'
318
- }],
319
- description: `If not set to \`null\`, will enforce a maximum number of lines to the given count anywhere in the block description.
320
-
321
- Note that if non-\`null\`, \`maxBlockLines\` must be greater than or equal to \`startLines\`.
322
-
323
- Defaults to \`null\`.`
324
- },
325
- startLines: {
326
- anyOf: [{
327
- type: 'integer'
328
- }, {
329
- type: 'null'
330
- }],
331
- description: `If not set to \`null\`, will enforce end lines to the given count before the
332
- first tag only, unless there is only whitespace content, in which case,
333
- a line count will not be enforced.
334
-
335
- Defaults to \`0\`.`
336
- },
337
- startLinesWithNoTags: {
338
- description: 'If set to a number, will enforce a starting lines count when there are no tags. Defaults to `undefined`.',
339
- type: 'number'
340
- },
341
- tags: {
342
- description: `Overrides the default behavior depending on specific tags.
343
-
344
- An object whose keys are tag names and whose values are objects with the
345
- following keys:
346
-
347
- 1. \`lines\` - Set to \`always\`, \`never\`, or \`any\` to override.
348
- 2. \`count\` - Overrides main \`count\` (for "always")
349
-
350
- Defaults to empty object.`,
351
- patternProperties: {
352
- '.*': {
353
- additionalProperties: false,
354
- properties: {
355
- count: {
356
- type: 'integer'
357
- },
358
- lines: {
359
- enum: ['always', 'never', 'any'],
360
- type: 'string'
361
- }
362
- }
363
- }
364
- },
365
- type: 'object'
366
- }
367
- },
368
- type: 'object'
369
- }],
370
- type: 'suggestion'
371
- }
372
- });
373
- module.exports = exports.default;
374
- //# sourceMappingURL=tagLines.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tagLines.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/tagLines.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {{\n * maxBlockLines: null|number,\n * startLines: null|number,\n * utils: import('../iterateJsdoc.js').Utils\n * }} cfg\n */\nconst checkMaxBlockLines = ({\n maxBlockLines,\n startLines,\n utils,\n}) => {\n if (typeof maxBlockLines !== 'number') {\n return false;\n }\n\n if (typeof startLines === 'number' && maxBlockLines < startLines) {\n utils.reportJSDoc(\n 'If set to a number, `maxBlockLines` must be greater than or equal to `startLines`.',\n );\n return true;\n }\n\n const {\n description,\n } = utils.getDescription();\n const excessBlockLinesRegex = new RegExp('\\n{' + (maxBlockLines + 2) + ',}', 'v');\n const excessBlockLinesMatch = description.match(excessBlockLinesRegex);\n const excessBlockLines = excessBlockLinesMatch?.[0]?.length ?? 0;\n if (excessBlockLinesMatch) {\n const excessIndexLine = description.slice(0, excessBlockLinesMatch.index).match(/\\n/gv)?.length ?? 0;\n utils.reportJSDoc(\n `Expected a maximum of ${maxBlockLines} line${maxBlockLines === 1 ? '' : 's'} within block description`,\n {\n line: excessIndexLine,\n },\n () => {\n utils.setBlockDescription((info, seedTokens, descLines, postDelims) => {\n const newPostDelims = [\n ...postDelims.slice(0, excessIndexLine),\n ...postDelims.slice(excessIndexLine + excessBlockLines - 1 - maxBlockLines),\n ];\n return [\n ...descLines.slice(0, excessIndexLine),\n ...descLines.slice(excessIndexLine + excessBlockLines - 1 - maxBlockLines),\n ].map((desc, idx) => {\n return {\n number: 0,\n source: '',\n tokens: seedTokens({\n ...info,\n description: desc,\n postDelimiter: newPostDelims[idx],\n }),\n };\n });\n });\n },\n );\n return true;\n }\n\n return false;\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const [\n alwaysNever = 'never',\n {\n applyToEndTag = true,\n count = 1,\n endLines = 0,\n maxBlockLines = null,\n startLines = 0,\n startLinesWithNoTags = null,\n tags = {},\n } = {},\n ] = context.options;\n\n jsdoc.tags.some((tg, tagIdx) => {\n let lastTag;\n\n /**\n * @type {null|import('../iterateJsdoc.js').Integer}\n */\n let lastEmpty = null;\n\n /**\n * @type {null|import('../iterateJsdoc.js').Integer}\n */\n let reportIndex = null;\n let emptyLinesCount = 0;\n for (const [\n idx,\n {\n tokens: {\n description,\n end,\n name,\n tag,\n type,\n },\n },\n ] of tg.source.entries()) {\n // May be text after a line break within a tag description\n if (description) {\n reportIndex = null;\n }\n\n if (lastTag && [\n 'always', 'any',\n ].includes(tags[lastTag.slice(1)]?.lines)) {\n continue;\n }\n\n const empty = !tag && !name && !type && !description;\n if (\n empty && !end &&\n (alwaysNever === 'never' ||\n lastTag && tags[lastTag.slice(1)]?.lines === 'never'\n )\n ) {\n reportIndex = idx;\n\n continue;\n }\n\n if (!end) {\n if (empty) {\n emptyLinesCount++;\n } else {\n emptyLinesCount = 0;\n }\n\n lastEmpty = empty ? idx : null;\n }\n\n lastTag = tag;\n }\n\n if (\n typeof endLines === 'number' &&\n lastEmpty !== null && tagIdx === jsdoc.tags.length - 1\n ) {\n const lineDiff = endLines - emptyLinesCount;\n\n if (lineDiff < 0) {\n const fixer = () => {\n utils.removeTag(tagIdx, {\n tagSourceOffset: /** @type {import('../iterateJsdoc.js').Integer} */ (\n lastEmpty\n ) + lineDiff + 1,\n });\n };\n\n utils.reportJSDoc(\n `Expected ${endLines} trailing lines`,\n {\n line: tg.source[lastEmpty].number + lineDiff + 1,\n },\n fixer,\n );\n } else if (lineDiff > 0) {\n const fixer = () => {\n utils.addLines(\n tagIdx,\n /** @type {import('../iterateJsdoc.js').Integer} */ (lastEmpty),\n endLines - emptyLinesCount,\n );\n };\n\n utils.reportJSDoc(\n `Expected ${endLines} trailing lines`,\n {\n line: tg.source[lastEmpty].number,\n },\n fixer,\n );\n }\n\n return true;\n }\n\n if (reportIndex !== null) {\n const fixer = () => {\n utils.removeTag(tagIdx, {\n tagSourceOffset: /** @type {import('../iterateJsdoc.js').Integer} */ (\n reportIndex\n ),\n });\n };\n\n utils.reportJSDoc(\n 'Expected no lines between tags',\n {\n line: tg.source[0].number + 1,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n\n (applyToEndTag ? jsdoc.tags : jsdoc.tags.slice(0, -1)).some((tg, tagIdx) => {\n /**\n * @type {{\n * idx: import('../iterateJsdoc.js').Integer,\n * number: import('../iterateJsdoc.js').Integer\n * }[]}\n */\n const lines = [];\n\n let currentTag;\n let tagSourceIdx = 0;\n for (const [\n idx,\n {\n number,\n tokens: {\n description,\n end,\n name,\n tag,\n type,\n },\n },\n ] of tg.source.entries()) {\n if (description) {\n lines.splice(0);\n tagSourceIdx = idx;\n }\n\n if (tag) {\n currentTag = tag;\n }\n\n if (!tag && !name && !type && !description && !end) {\n lines.push({\n idx,\n number,\n });\n }\n }\n\n const currentTg = currentTag && tags[currentTag.slice(1)];\n const tagCount = currentTg?.count;\n\n const defaultAlways = alwaysNever === 'always' && currentTg?.lines !== 'never' &&\n currentTg?.lines !== 'any' && lines.length < count;\n\n let overrideAlways;\n let fixCount = count;\n if (!defaultAlways) {\n fixCount = typeof tagCount === 'number' ? tagCount : count;\n overrideAlways = currentTg?.lines === 'always' &&\n lines.length < fixCount;\n }\n\n if (defaultAlways || overrideAlways) {\n const fixer = () => {\n utils.addLines(tagIdx, lines[lines.length - 1]?.idx || tagSourceIdx + 1, fixCount - lines.length);\n };\n\n const line = lines[lines.length - 1]?.number || tg.source[tagSourceIdx].number;\n utils.reportJSDoc(\n `Expected ${fixCount} line${fixCount === 1 ? '' : 's'} between tags but found ${lines.length}`,\n {\n line,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n\n if (checkMaxBlockLines({\n maxBlockLines,\n startLines,\n utils,\n })) {\n return;\n }\n\n if (typeof startLines === 'number' || typeof startLinesWithNoTags === 'number') {\n const noTags = !jsdoc.tags.length;\n\n if (noTags && startLinesWithNoTags === null) {\n return;\n }\n\n const {\n description,\n lastDescriptionLine,\n } = utils.getDescription();\n if (!(/\\S/v).test(description)) {\n return;\n }\n\n const startingLines = noTags ? startLinesWithNoTags : startLines;\n\n const trailingLines = description.match(/\\n+$/v)?.[0]?.length;\n const trailingDiff = (trailingLines ?? 0) - startingLines;\n if (trailingDiff > 0) {\n utils.reportJSDoc(\n `Expected only ${startingLines} line${startingLines === 1 ? '' : 's'} after block description`,\n {\n line: lastDescriptionLine - trailingDiff,\n },\n () => {\n utils.setBlockDescription((info, seedTokens, descLines, postDelims) => {\n return descLines.slice(0, -trailingDiff).map((desc, idx) => {\n return {\n number: 0,\n source: '',\n tokens: seedTokens({\n ...info,\n description: desc,\n postDelimiter: postDelims[idx],\n }),\n };\n });\n });\n },\n );\n } else if (trailingDiff < 0) {\n utils.reportJSDoc(\n `Expected ${startingLines} lines after block description`,\n {\n line: lastDescriptionLine,\n },\n () => {\n utils.setBlockDescription((info, seedTokens, descLines, postDelims) => {\n return [\n ...descLines,\n ...Array.from({\n length: -trailingDiff,\n }, () => {\n return '';\n }),\n ].map((desc, idx) => {\n return {\n number: 0,\n source: '',\n tokens: seedTokens({\n ...info,\n description: desc,\n postDelimiter: desc.trim() ? postDelims[idx] : '',\n }),\n };\n });\n });\n },\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces lines (or no lines) before, after, or between tags.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/tag-lines.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n description: `Defaults to \"never\". \"any\" is only useful with \\`tags\\` (allowing non-enforcement of lines except\nfor particular tags) or with \\`startLines\\`, \\`startLinesWithNoTags\\` \\`endLines\\`, or \\`maxBlockLines\\`. It is also\nnecessary if using the linebreak-setting options of the \\`sort-tags\\` rule\nso that the two rules won't conflict in both attempting to set lines\nbetween tags.`,\n enum: [\n 'always', 'any', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n applyToEndTag: {\n description: `Set to \\`false\\` and use with \"always\" to indicate the normal lines to be\nadded after tags should not be added after the final tag.\n\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n count: {\n description: `Use with \"always\" to indicate the number of lines to require be present.\n\nDefaults to 1.`,\n type: 'integer',\n },\n endLines: {\n anyOf: [\n {\n type: 'integer',\n },\n {\n type: 'null',\n },\n ],\n description: `If not set to \\`null\\`, will enforce end lines to the given count on the\nfinal tag only.\n\nDefaults to \\`0\\`.`,\n },\n maxBlockLines: {\n anyOf: [\n {\n type: 'integer',\n },\n {\n type: 'null',\n },\n ],\n description: `If not set to \\`null\\`, will enforce a maximum number of lines to the given count anywhere in the block description.\n\nNote that if non-\\`null\\`, \\`maxBlockLines\\` must be greater than or equal to \\`startLines\\`.\n\nDefaults to \\`null\\`.`,\n },\n startLines: {\n anyOf: [\n {\n type: 'integer',\n },\n {\n type: 'null',\n },\n ],\n description: `If not set to \\`null\\`, will enforce end lines to the given count before the\nfirst tag only, unless there is only whitespace content, in which case,\na line count will not be enforced.\n\nDefaults to \\`0\\`.`,\n },\n startLinesWithNoTags: {\n description: 'If set to a number, will enforce a starting lines count when there are no tags. Defaults to `undefined`.',\n type: 'number',\n },\n tags: {\n description: `Overrides the default behavior depending on specific tags.\n\nAn object whose keys are tag names and whose values are objects with the\nfollowing keys:\n\n1. \\`lines\\` - Set to \\`always\\`, \\`never\\`, or \\`any\\` to override.\n2. \\`count\\` - Overrides main \\`count\\` (for \"always\")\n\nDefaults to empty object.`,\n patternProperties: {\n '.*': {\n additionalProperties: false,\n properties: {\n count: {\n type: 'integer',\n },\n lines: {\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n },\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,141 +0,0 @@
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
- // We could disallow raw gt, quot, and apos, but allow for parity; but we do
10
- // not allow hex or decimal character references
11
- const htmlRegex = /(<|&(?!(?:amp|lt|gt|quot|apos);))(?=\S)/v;
12
- const markdownRegex = /(?<!\\)(`+)([^`]+)\1(?!`)/v;
13
-
14
- /**
15
- * @param {string} desc
16
- * @returns {string}
17
- */
18
- const htmlReplacer = desc => {
19
- return desc.replaceAll(new RegExp(htmlRegex, 'gv'), _ => {
20
- if (_ === '<') {
21
- return '&lt;';
22
- }
23
- return '&amp;';
24
- });
25
- };
26
-
27
- /**
28
- * @param {string} desc
29
- * @returns {string}
30
- */
31
- const markdownReplacer = desc => {
32
- return desc.replaceAll(new RegExp(markdownRegex, 'gv'), (_, backticks, encapsed) => {
33
- const bookend = '`'.repeat(backticks.length);
34
- return `\\${bookend}${encapsed}${bookend}`;
35
- });
36
- };
37
- var _default = exports.default = (0, _iterateJsdoc.default)(({
38
- context,
39
- jsdoc,
40
- utils
41
- }) => {
42
- const {
43
- escapeHTML,
44
- escapeMarkdown
45
- } = context.options[0] || {};
46
- if (!escapeHTML && !escapeMarkdown) {
47
- context.report({
48
- loc: {
49
- end: {
50
- column: 1,
51
- line: 1
52
- },
53
- start: {
54
- column: 1,
55
- line: 1
56
- }
57
- },
58
- message: 'You must include either `escapeHTML` or `escapeMarkdown`'
59
- });
60
- return;
61
- }
62
- const {
63
- descriptions
64
- } = utils.getDescription();
65
- if (escapeHTML) {
66
- if (descriptions.some(desc => {
67
- return htmlRegex.test(desc);
68
- })) {
69
- const line = utils.setDescriptionLines(htmlRegex, htmlReplacer);
70
- utils.reportJSDoc('You have unescaped HTML characters < or &', {
71
- line
72
- }, () => {}, true);
73
- return;
74
- }
75
- for (const tag of jsdoc.tags) {
76
- if (tag.tag === 'example') {
77
- continue;
78
- }
79
- if (/** @type {string[]} */utils.getTagDescription(tag, true).some(desc => {
80
- return htmlRegex.test(desc);
81
- })) {
82
- const line = utils.setTagDescription(tag, htmlRegex, htmlReplacer) + tag.source[0].number;
83
- utils.reportJSDoc('You have unescaped HTML characters < or & in a tag', {
84
- line
85
- }, () => {}, true);
86
- }
87
- }
88
- return;
89
- }
90
- if (descriptions.some(desc => {
91
- return markdownRegex.test(desc);
92
- })) {
93
- const line = utils.setDescriptionLines(markdownRegex, markdownReplacer);
94
- utils.reportJSDoc('You have unescaped Markdown backtick sequences', {
95
- line
96
- }, () => {}, true);
97
- return;
98
- }
99
- for (const tag of jsdoc.tags) {
100
- if (tag.tag === 'example') {
101
- continue;
102
- }
103
- if (/** @type {string[]} */utils.getTagDescription(tag, true).some(desc => {
104
- return markdownRegex.test(desc);
105
- })) {
106
- const line = utils.setTagDescription(tag, markdownRegex, markdownReplacer) + tag.source[0].number;
107
- utils.reportJSDoc('You have unescaped Markdown backtick sequences in a tag', {
108
- line
109
- }, () => {}, true);
110
- }
111
- }
112
- }, {
113
- iterateAllJsdocs: true,
114
- meta: {
115
- docs: {
116
- description: 'Auto-escape certain characters that are input within block and tag descriptions.',
117
- url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/text-escaping.md#repos-sticky-header'
118
- },
119
- fixable: 'code',
120
- schema: [{
121
- additionalProperties: false,
122
- properties: {
123
- escapeHTML: {
124
- description: `This option escapes all \`<\` and \`&\` characters (except those followed by
125
- whitespace which are treated as literals by Visual Studio Code). Defaults to
126
- \`false\`.`,
127
- type: 'boolean'
128
- },
129
- escapeMarkdown: {
130
- description: `This option escapes the first backtick (\`\` \` \`\`) in a paired sequence.
131
- Defaults to \`false\`.`,
132
- type: 'boolean'
133
- }
134
- },
135
- type: 'object'
136
- }],
137
- type: 'suggestion'
138
- }
139
- });
140
- module.exports = exports.default;
141
- //# sourceMappingURL=textEscaping.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"textEscaping.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/textEscaping.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n// We could disallow raw gt, quot, and apos, but allow for parity; but we do\n// not allow hex or decimal character references\nconst htmlRegex = /(<|&(?!(?:amp|lt|gt|quot|apos);))(?=\\S)/v;\nconst markdownRegex = /(?<!\\\\)(`+)([^`]+)\\1(?!`)/v;\n\n/**\n * @param {string} desc\n * @returns {string}\n */\nconst htmlReplacer = (desc) => {\n return desc.replaceAll(new RegExp(htmlRegex, 'gv'), (_) => {\n if (_ === '<') {\n return '&lt;';\n }\n\n return '&amp;';\n });\n};\n\n/**\n * @param {string} desc\n * @returns {string}\n */\nconst markdownReplacer = (desc) => {\n return desc.replaceAll(new RegExp(markdownRegex, 'gv'), (_, backticks, encapsed) => {\n const bookend = '`'.repeat(backticks.length);\n return `\\\\${bookend}${encapsed}${bookend}`;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n escapeHTML,\n escapeMarkdown,\n } = context.options[0] || {};\n\n if (!escapeHTML && !escapeMarkdown) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: 'You must include either `escapeHTML` or `escapeMarkdown`',\n });\n return;\n }\n\n const {\n descriptions,\n } = utils.getDescription();\n\n if (escapeHTML) {\n if (descriptions.some((desc) => {\n return htmlRegex.test(desc);\n })) {\n const line = utils.setDescriptionLines(htmlRegex, htmlReplacer);\n utils.reportJSDoc('You have unescaped HTML characters < or &', {\n line,\n }, () => {}, true);\n return;\n }\n\n for (const tag of jsdoc.tags) {\n if (tag.tag === 'example') {\n continue;\n }\n\n if (/** @type {string[]} */ (\n utils.getTagDescription(tag, true)\n ).some((desc) => {\n return htmlRegex.test(desc);\n })) {\n const line = utils.setTagDescription(tag, htmlRegex, htmlReplacer) +\n tag.source[0].number;\n utils.reportJSDoc('You have unescaped HTML characters < or & in a tag', {\n line,\n }, () => {}, true);\n }\n }\n\n return;\n }\n\n if (descriptions.some((desc) => {\n return markdownRegex.test(desc);\n })) {\n const line = utils.setDescriptionLines(markdownRegex, markdownReplacer);\n utils.reportJSDoc('You have unescaped Markdown backtick sequences', {\n line,\n }, () => {}, true);\n return;\n }\n\n for (const tag of jsdoc.tags) {\n if (tag.tag === 'example') {\n continue;\n }\n\n if (/** @type {string[]} */ (\n utils.getTagDescription(tag, true)\n ).some((desc) => {\n return markdownRegex.test(desc);\n })) {\n const line = utils.setTagDescription(\n tag, markdownRegex, markdownReplacer,\n ) + tag.source[0].number;\n utils.reportJSDoc(\n 'You have unescaped Markdown backtick sequences in a tag',\n {\n line,\n },\n () => {},\n true,\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Auto-escape certain characters that are input within block and tag descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/text-escaping.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n escapeHTML: {\n description: `This option escapes all \\`<\\` and \\`&\\` characters (except those followed by\nwhitespace which are treated as literals by Visual Studio Code). Defaults to\n\\`false\\`.`,\n type: 'boolean',\n },\n escapeMarkdown: {\n description: `This option escapes the first backtick (\\`\\` \\` \\`\\`) in a paired sequence.\nDefaults to \\`false\\`.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}