eslint-plugin-jsdoc 63.0.11 → 63.0.12

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 (171) hide show
  1. package/dist/WarnSettings.cjs +8 -1
  2. package/dist/WarnSettings.cjs.map +1 -1
  3. package/dist/alignTransform.cjs +10 -6
  4. package/dist/alignTransform.cjs.map +1 -1
  5. package/dist/buildForbidRuleDefinition.cjs +10 -3
  6. package/dist/buildForbidRuleDefinition.cjs.map +1 -1
  7. package/dist/buildRejectOrPreferRuleDefinition.cjs +14 -7
  8. package/dist/buildRejectOrPreferRuleDefinition.cjs.map +1 -1
  9. package/dist/defaultTagOrder.cjs +8 -1
  10. package/dist/defaultTagOrder.cjs.map +1 -1
  11. package/dist/exportParser.cjs +14 -6
  12. package/dist/exportParser.cjs.map +1 -1
  13. package/dist/generateDocs.cjs +44 -36
  14. package/dist/generateDocs.cjs.map +1 -1
  15. package/dist/generateOptions.cjs +18 -15
  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 +9 -6
  20. package/dist/generateRuleTypes.cjs.map +1 -1
  21. package/dist/getDefaultTagStructureForMode.cjs +8 -1
  22. package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
  23. package/dist/getJsdocProcessorPlugin.cjs +28 -20
  24. package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
  25. package/dist/index-cjs.cjs +159 -152
  26. package/dist/index-cjs.cjs.map +1 -1
  27. package/dist/index-esm.cjs +27 -16
  28. package/dist/index-esm.cjs.map +1 -1
  29. package/dist/index.cjs +172 -159
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/iterateJsdoc.cjs +32 -22
  32. package/dist/iterateJsdoc.cjs.map +1 -1
  33. package/dist/jsdocUtils.cjs +86 -18
  34. package/dist/jsdocUtils.cjs.map +1 -1
  35. package/dist/rules/checkAccess.cjs +10 -2
  36. package/dist/rules/checkAccess.cjs.map +1 -1
  37. package/dist/rules/checkAlignment.cjs +10 -2
  38. package/dist/rules/checkAlignment.cjs.map +1 -1
  39. package/dist/rules/checkExamples.cjs +15 -6
  40. package/dist/rules/checkExamples.cjs.map +1 -1
  41. package/dist/rules/checkIndentation.cjs +9 -2
  42. package/dist/rules/checkIndentation.cjs.map +1 -1
  43. package/dist/rules/checkLineAlignment.cjs +14 -6
  44. package/dist/rules/checkLineAlignment.cjs.map +1 -1
  45. package/dist/rules/checkParamNames.cjs +9 -2
  46. package/dist/rules/checkParamNames.cjs.map +1 -1
  47. package/dist/rules/checkPropertyNames.cjs +9 -2
  48. package/dist/rules/checkPropertyNames.cjs.map +1 -1
  49. package/dist/rules/checkSyntax.cjs +10 -2
  50. package/dist/rules/checkSyntax.cjs.map +1 -1
  51. package/dist/rules/checkTagNames.cjs +11 -4
  52. package/dist/rules/checkTagNames.cjs.map +1 -1
  53. package/dist/rules/checkTemplateNames.cjs +20 -12
  54. package/dist/rules/checkTemplateNames.cjs.map +1 -1
  55. package/dist/rules/checkTypes.cjs +10 -4
  56. package/dist/rules/checkTypes.cjs.map +1 -1
  57. package/dist/rules/checkValues.cjs +17 -9
  58. package/dist/rules/checkValues.cjs.map +1 -1
  59. package/dist/rules/convertToJsdocComments.cjs +19 -13
  60. package/dist/rules/convertToJsdocComments.cjs.map +1 -1
  61. package/dist/rules/emptyTags.cjs +10 -2
  62. package/dist/rules/emptyTags.cjs.map +1 -1
  63. package/dist/rules/escapeInlineTags.cjs +10 -2
  64. package/dist/rules/escapeInlineTags.cjs.map +1 -1
  65. package/dist/rules/implementsOnClasses.cjs +10 -2
  66. package/dist/rules/implementsOnClasses.cjs.map +1 -1
  67. package/dist/rules/importsAsDependencies.cjs +20 -12
  68. package/dist/rules/importsAsDependencies.cjs.map +1 -1
  69. package/dist/rules/informativeDocs.cjs +12 -4
  70. package/dist/rules/informativeDocs.cjs.map +1 -1
  71. package/dist/rules/linesBeforeBlock.cjs +9 -2
  72. package/dist/rules/linesBeforeBlock.cjs.map +1 -1
  73. package/dist/rules/matchDescription.cjs +9 -2
  74. package/dist/rules/matchDescription.cjs.map +1 -1
  75. package/dist/rules/matchName.cjs +10 -2
  76. package/dist/rules/matchName.cjs.map +1 -1
  77. package/dist/rules/multilineBlocks.cjs +9 -2
  78. package/dist/rules/multilineBlocks.cjs.map +1 -1
  79. package/dist/rules/noBadBlocks.cjs +11 -4
  80. package/dist/rules/noBadBlocks.cjs.map +1 -1
  81. package/dist/rules/noBlankBlockDescriptions.cjs +10 -2
  82. package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
  83. package/dist/rules/noBlankBlocks.cjs +10 -2
  84. package/dist/rules/noBlankBlocks.cjs.map +1 -1
  85. package/dist/rules/noDefaults.cjs +10 -2
  86. package/dist/rules/noDefaults.cjs.map +1 -1
  87. package/dist/rules/noMissingSyntax.cjs +9 -2
  88. package/dist/rules/noMissingSyntax.cjs.map +1 -1
  89. package/dist/rules/noMultiAsterisks.cjs +10 -2
  90. package/dist/rules/noMultiAsterisks.cjs.map +1 -1
  91. package/dist/rules/noRestrictedSyntax.cjs +9 -2
  92. package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
  93. package/dist/rules/noTypes.cjs +9 -2
  94. package/dist/rules/noTypes.cjs.map +1 -1
  95. package/dist/rules/noUndefinedTypes.cjs +21 -13
  96. package/dist/rules/noUndefinedTypes.cjs.map +1 -1
  97. package/dist/rules/preferImportTag.cjs +28 -21
  98. package/dist/rules/preferImportTag.cjs.map +1 -1
  99. package/dist/rules/requireAsteriskPrefix.cjs +10 -2
  100. package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
  101. package/dist/rules/requireDescription.cjs +9 -2
  102. package/dist/rules/requireDescription.cjs.map +1 -1
  103. package/dist/rules/requireDescriptionCompleteSentence.cjs +15 -7
  104. package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
  105. package/dist/rules/requireExample.cjs +10 -2
  106. package/dist/rules/requireExample.cjs.map +1 -1
  107. package/dist/rules/requireFileOverview.cjs +10 -2
  108. package/dist/rules/requireFileOverview.cjs.map +1 -1
  109. package/dist/rules/requireHyphenBeforeParamDescription.cjs +10 -2
  110. package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
  111. package/dist/rules/requireJsdoc.cjs +24 -17
  112. package/dist/rules/requireJsdoc.cjs.map +1 -1
  113. package/dist/rules/requireParam.cjs +9 -2
  114. package/dist/rules/requireParam.cjs.map +1 -1
  115. package/dist/rules/requireParamDescription.cjs +10 -2
  116. package/dist/rules/requireParamDescription.cjs.map +1 -1
  117. package/dist/rules/requireParamName.cjs +10 -2
  118. package/dist/rules/requireParamName.cjs.map +1 -1
  119. package/dist/rules/requireParamType.cjs +10 -2
  120. package/dist/rules/requireParamType.cjs.map +1 -1
  121. package/dist/rules/requireProperty.cjs +10 -2
  122. package/dist/rules/requireProperty.cjs.map +1 -1
  123. package/dist/rules/requirePropertyDescription.cjs +10 -2
  124. package/dist/rules/requirePropertyDescription.cjs.map +1 -1
  125. package/dist/rules/requirePropertyName.cjs +10 -2
  126. package/dist/rules/requirePropertyName.cjs.map +1 -1
  127. package/dist/rules/requirePropertyType.cjs +10 -2
  128. package/dist/rules/requirePropertyType.cjs.map +1 -1
  129. package/dist/rules/requireRejects.cjs +9 -2
  130. package/dist/rules/requireRejects.cjs.map +1 -1
  131. package/dist/rules/requireReturns.cjs +11 -4
  132. package/dist/rules/requireReturns.cjs.map +1 -1
  133. package/dist/rules/requireReturnsCheck.cjs +15 -8
  134. package/dist/rules/requireReturnsCheck.cjs.map +1 -1
  135. package/dist/rules/requireReturnsDescription.cjs +10 -2
  136. package/dist/rules/requireReturnsDescription.cjs.map +1 -1
  137. package/dist/rules/requireReturnsType.cjs +10 -2
  138. package/dist/rules/requireReturnsType.cjs.map +1 -1
  139. package/dist/rules/requireTags.cjs +9 -2
  140. package/dist/rules/requireTags.cjs.map +1 -1
  141. package/dist/rules/requireTemplate.cjs +13 -5
  142. package/dist/rules/requireTemplate.cjs.map +1 -1
  143. package/dist/rules/requireThrows.cjs +9 -2
  144. package/dist/rules/requireThrows.cjs.map +1 -1
  145. package/dist/rules/requireYields.cjs +9 -2
  146. package/dist/rules/requireYields.cjs.map +1 -1
  147. package/dist/rules/requireYieldsCheck.cjs +9 -2
  148. package/dist/rules/requireYieldsCheck.cjs.map +1 -1
  149. package/dist/rules/sortTags.cjs +12 -4
  150. package/dist/rules/sortTags.cjs.map +1 -1
  151. package/dist/rules/tagLines.cjs +9 -2
  152. package/dist/rules/tagLines.cjs.map +1 -1
  153. package/dist/rules/textEscaping.cjs +9 -2
  154. package/dist/rules/textEscaping.cjs.map +1 -1
  155. package/dist/rules/tsMethodSignatureStyle.cjs +18 -10
  156. package/dist/rules/tsMethodSignatureStyle.cjs.map +1 -1
  157. package/dist/rules/tsNoEmptyObjectType.cjs +13 -5
  158. package/dist/rules/tsNoEmptyObjectType.cjs.map +1 -1
  159. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs +16 -8
  160. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs.map +1 -1
  161. package/dist/rules/tsPreferFunctionType.cjs +16 -8
  162. package/dist/rules/tsPreferFunctionType.cjs.map +1 -1
  163. package/dist/rules/typeFormatting.cjs +17 -9
  164. package/dist/rules/typeFormatting.cjs.map +1 -1
  165. package/dist/rules/validTypes.cjs +18 -10
  166. package/dist/rules/validTypes.cjs.map +1 -1
  167. package/dist/tagNames.cjs +9 -4
  168. package/dist/tagNames.cjs.map +1 -1
  169. package/dist/utils/hasReturnValue.cjs +8 -1
  170. package/dist/utils/hasReturnValue.cjs.map +1 -1
  171. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sortTags.cjs","names":[],"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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,4DAA4D;UAChD,IAAI,EAAE;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","ignoreList":[]}
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,5 +1,11 @@
1
- import iterateJsdoc from '../iterateJsdoc.js';
1
+ "use strict";
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 }; }
3
9
  /**
4
10
  * @param {{
5
11
  * maxBlockLines: null|number,
@@ -49,7 +55,7 @@ const checkMaxBlockLines = ({
49
55
  }
50
56
  return false;
51
57
  };
52
- export default iterateJsdoc(({
58
+ var _default = exports.default = (0, _iterateJsdoc.default)(({
53
59
  context,
54
60
  jsdoc,
55
61
  utils
@@ -364,4 +370,5 @@ Defaults to empty object.`,
364
370
  type: 'suggestion'
365
371
  }
366
372
  });
373
+ module.exports = exports.default;
367
374
  //# sourceMappingURL=tagLines.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tagLines.cjs","names":[],"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
+ {"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,5 +1,11 @@
1
- import iterateJsdoc from '../iterateJsdoc.js';
1
+ "use strict";
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 }; }
3
9
  // We could disallow raw gt, quot, and apos, but allow for parity; but we do
4
10
  // not allow hex or decimal character references
5
11
  const htmlRegex = /(<|&(?!(?:amp|lt|gt|quot|apos);))(?=\S)/v;
@@ -28,7 +34,7 @@ const markdownReplacer = desc => {
28
34
  return `\\${bookend}${encapsed}${bookend}`;
29
35
  });
30
36
  };
31
- export default iterateJsdoc(({
37
+ var _default = exports.default = (0, _iterateJsdoc.default)(({
32
38
  context,
33
39
  jsdoc,
34
40
  utils
@@ -131,4 +137,5 @@ Defaults to \`false\`.`,
131
137
  type: 'suggestion'
132
138
  }
133
139
  });
140
+ module.exports = exports.default;
134
141
  //# sourceMappingURL=textEscaping.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"textEscaping.cjs","names":[],"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":"AAAA,OAAO,YAAY,MAAM,oBAAoB;;AAE7C;AACA;AACA,MAAM,SAAS,GAAG,0CAA0C;AAC5D,MAAM,aAAa,GAAG,4BAA4B;;AAElD;AACA;AACA;AACA;AACA,MAAM,YAAY,GAAI,IAAI,IAAK;EAC7B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,EAAG,CAAC,IAAK;IACzD,IAAI,CAAC,KAAK,GAAG,EAAE;MACb,OAAO,MAAM;IACf;IAEA,OAAO,OAAO;EAChB,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAM,gBAAgB,GAAI,IAAI,IAAK;EACjC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,KAAK;IAClF,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;IAC5C,OAAO,KAAK,OAAO,GAAG,QAAQ,GAAG,OAAO,EAAE;EAC5C,CAAC,CAAC;AACJ,CAAC;AAED,eAAe,YAAY,CAAC,CAAC;EAC3B,OAAO;EACP,KAAK;EACL;AACF,CAAC,KAAK;EACJ,MAAM;IACJ,UAAU;IACV;EACF,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,IAAI,CAAC,UAAU,IAAI,CAAC,cAAc,EAAE;IAClC,OAAO,CAAC,MAAM,CAAC;MACb,GAAG,EAAE;QACH,GAAG,EAAE;UACH,MAAM,EAAE,CAAC;UACT,IAAI,EAAE;QACR,CAAC;QACD,KAAK,EAAE;UACL,MAAM,EAAE,CAAC;UACT,IAAI,EAAE;QACR;MACF,CAAC;MACD,OAAO,EAAE;IACX,CAAC,CAAC;IACF;EACF;EAEA,MAAM;IACJ;EACF,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;EAE1B,IAAI,UAAU,EAAE;IACd,IAAI,YAAY,CAAC,IAAI,CAAE,IAAI,IAAK;MAC9B,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B,CAAC,CAAC,EAAE;MACF,MAAM,IAAI,GAAG,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,YAAY,CAAC;MAC/D,KAAK,CAAC,WAAW,CAAC,2CAA2C,EAAE;QAC7D;MACF,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;MAClB;IACF;IAEA,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;MAC5B,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE;QACzB;MACF;MAEA,IAAI,uBACF,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAClC,IAAI,CAAE,IAAI,IAAK;QACf,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;MAC7B,CAAC,CAAC,EAAE;QACF,MAAM,IAAI,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,GAChE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;QACtB,KAAK,CAAC,WAAW,CAAC,oDAAoD,EAAE;UACtE;QACF,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;MACpB;IACF;IAEA;EACF;EAEA,IAAI,YAAY,CAAC,IAAI,CAAE,IAAI,IAAK;IAC9B,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;EACjC,CAAC,CAAC,EAAE;IACF,MAAM,IAAI,GAAG,KAAK,CAAC,mBAAmB,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACvE,KAAK,CAAC,WAAW,CAAC,gDAAgD,EAAE;MAClE;IACF,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;IAClB;EACF;EAEA,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;IAC5B,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE;MACzB;IACF;IAEA,IAAI,uBACF,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAClC,IAAI,CAAE,IAAI,IAAK;MACf,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC,CAAC,CAAC,EAAE;MACF,MAAM,IAAI,GAAG,KAAK,CAAC,iBAAiB,CAClC,GAAG,EAAE,aAAa,EAAE,gBACtB,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;MACxB,KAAK,CAAC,WAAW,CACf,yDAAyD,EACzD;QACE;MACF,CAAC,EACD,MAAM,CAAC,CAAC,EACR,IACF,CAAC;IACH;EACF;AACF,CAAC,EAAE;EACD,gBAAgB,EAAE,IAAI;EACtB,IAAI,EAAE;IACJ,IAAI,EAAE;MACJ,WAAW,EAAE,kFAAkF;MAC/F,GAAG,EAAE;IACP,CAAC;IACD,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,CACN;MACE,oBAAoB,EAAE,KAAK;MAC3B,UAAU,EAAE;QACV,UAAU,EAAE;UACV,WAAW,EAAE;AACzB;AACA,WAAW;UACC,IAAI,EAAE;QACR,CAAC;QACD,cAAc,EAAE;UACd,WAAW,EAAE;AACzB,uBAAuB;UACX,IAAI,EAAE;QACR;MACF,CAAC;MACD,IAAI,EAAE;IACR,CAAC,CACF;IACD,IAAI,EAAE;EACR;AACF,CAAC,CAAC","ignoreList":[]}
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":[]}
@@ -1,7 +1,14 @@
1
- import iterateJsdoc from '../iterateJsdoc.js';
2
- import { rewireByParsedType } from '../jsdocUtils.js';
3
- import { parse as parseType, traverse } from '@es-joy/jsdoccomment';
4
- export default iterateJsdoc(({
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 _jsdocUtils = require("../jsdocUtils.cjs");
9
+ var _jsdoccomment = require("@es-joy/jsdoccomment");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ var _default = exports.default = (0, _iterateJsdoc.default)(({
5
12
  context,
6
13
  indent,
7
14
  jsdoc,
@@ -19,15 +26,15 @@ export default iterateJsdoc(({
19
26
  const potentialType = tag.type;
20
27
  let parsedType;
21
28
  try {
22
- parsedType = parseType(/** @type {string} */potentialType, 'typescript');
29
+ parsedType = (0, _jsdoccomment.parse)(/** @type {string} */potentialType, 'typescript');
23
30
  } catch {
24
31
  return;
25
32
  }
26
- traverse(parsedType, (nde, parentNode) => {
33
+ (0, _jsdoccomment.traverse)(parsedType, (nde, parentNode) => {
27
34
  // @ts-expect-error Adding our own property for use below
28
35
  nde.parentNode = parentNode;
29
36
  });
30
- traverse(parsedType, (nde, parentNode, property, idx) => {
37
+ (0, _jsdoccomment.traverse)(parsedType, (nde, parentNode, property, idx) => {
31
38
  switch (nde.type) {
32
39
  case 'JsdocTypeFunction':
33
40
  {
@@ -60,7 +67,7 @@ export default iterateJsdoc(({
60
67
  type: 'JsdocTypeMethodSignature',
61
68
  typeParameters: nde.typeParameters
62
69
  };
63
- rewireByParsedType(jsdoc, tag, parsedType, indent);
70
+ (0, _jsdocUtils.rewireByParsedType)(jsdoc, tag, parsedType, indent);
64
71
  } : null);
65
72
  break;
66
73
  }
@@ -114,7 +121,7 @@ export default iterateJsdoc(({
114
121
  object.elements.splice(methodIndex, 1);
115
122
  }
116
123
  object.elements.splice(methodIndexes[0], 0, ...methods);
117
- rewireByParsedType(jsdoc, tag, parsedType, indent);
124
+ (0, _jsdocUtils.rewireByParsedType)(jsdoc, tag, parsedType, indent);
118
125
  } : null);
119
126
  }
120
127
  break;
@@ -188,7 +195,7 @@ export default iterateJsdoc(({
188
195
  type: 'JsdocTypeObjectField'
189
196
  };
190
197
  }
191
- rewireByParsedType(jsdoc, tag, parsedType, indent);
198
+ (0, _jsdocUtils.rewireByParsedType)(jsdoc, tag, parsedType, indent);
192
199
  } : null);
193
200
  }
194
201
  break;
@@ -229,4 +236,5 @@ export default iterateJsdoc(({
229
236
  type: 'suggestion'
230
237
  }
231
238
  });
239
+ module.exports = exports.default;
232
240
  //# sourceMappingURL=tsMethodSignatureStyle.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tsMethodSignatureStyle.cjs","names":[],"sources":["../../src/rules/tsMethodSignatureStyle.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n rewireByParsedType,\n} from '../jsdocUtils.js';\nimport {\n parse as parseType,\n traverse,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n utils,\n}) => {\n const functionType = context.options[0] ?? 'property';\n const {\n enableFixer = true,\n } = context.options[1] ?? {};\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const checkType = (tag) => {\n const potentialType = tag.type;\n let parsedType;\n try {\n parsedType = parseType(\n /** @type {string} */ (potentialType), 'typescript',\n );\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, parentNode, property, idx) => {\n switch (nde.type) {\n case 'JsdocTypeFunction': {\n if (functionType !== 'method') {\n break;\n }\n\n if (parentNode?.type === 'JsdocTypeObjectField' &&\n typeof parentNode.key === 'string'\n ) {\n utils.reportJSDoc(\n 'Found function property; prefer method signature.',\n tag,\n enableFixer ? () => {\n const objectField = parentNode;\n const obj =\n /**\n * @type {import('jsdoc-type-pratt-parser').ObjectFieldResult & {\n * parentNode: import('jsdoc-type-pratt-parser').ObjectResult\n * }}\n */\n (objectField).parentNode;\n\n const index = obj.elements.indexOf(parentNode);\n\n obj.elements[index] = {\n /* c8 ignore next 5 -- Guard */\n meta: nde.meta ?\n {\n quote: objectField.meta.quote,\n ...nde.meta,\n } :\n {\n quote: objectField.meta.quote,\n },\n name: /** @type {string} */ (objectField.key),\n parameters: nde.parameters,\n returnType: /** @type {import('jsdoc-type-pratt-parser').RootResult} */ (\n nde.returnType\n ),\n type: 'JsdocTypeMethodSignature',\n typeParameters: nde.typeParameters,\n };\n\n rewireByParsedType(jsdoc, tag, parsedType, indent);\n } : null,\n );\n break;\n }\n\n if (parentNode?.type === 'JsdocTypeParenthesis' &&\n // @ts-expect-error Our own added API\n parentNode.parentNode?.type === 'JsdocTypeIntersection' &&\n // @ts-expect-error Our own added API\n parentNode.parentNode.parentNode.type === 'JsdocTypeObjectField' &&\n // @ts-expect-error Our own added API\n typeof parentNode.parentNode.parentNode.key === 'string'\n ) {\n // @ts-expect-error Our own added API\n const intersection = parentNode.parentNode;\n const objectField = intersection.parentNode;\n const object = objectField.parentNode;\n // const objFieldIndex = object.elements.indexOf(objectField);\n\n /**\n * @param {import('jsdoc-type-pratt-parser').FunctionResult} func\n */\n const convertToMethod = (func) => {\n return /** @type {import('jsdoc-type-pratt-parser').MethodSignatureResult} */ ({\n /* c8 ignore next 5 -- Guard */\n meta: func.meta ?\n {\n quote: objectField.meta.quote,\n ...func.meta,\n } :\n {\n quote: objectField.meta.quote,\n },\n name: /** @type {string} */ (objectField.key),\n parameters: func.parameters,\n returnType: /** @type {import('jsdoc-type-pratt-parser').RootResult} */ (\n func.returnType\n ),\n type: 'JsdocTypeMethodSignature',\n typeParameters: func.typeParameters,\n });\n };\n\n /** @type {import('jsdoc-type-pratt-parser').MethodSignatureResult[]} */\n const methods = [];\n /** @type {number[]} */\n const methodIndexes = [];\n for (const [\n index,\n element,\n ] of intersection.elements.entries()) {\n if (\n element.type !== 'JsdocTypeParenthesis' ||\n element.element.type !== 'JsdocTypeFunction'\n ) {\n return;\n }\n\n methods.push(convertToMethod(element.element));\n methodIndexes.push(index);\n }\n\n utils.reportJSDoc(\n 'Found function property; prefer method signature.',\n tag,\n enableFixer ? () => {\n for (const methodIndex of methodIndexes.toReversed()) {\n object.elements.splice(methodIndex, 1);\n }\n\n object.elements.splice(methodIndexes[0], 0, ...methods);\n\n rewireByParsedType(jsdoc, tag, parsedType, indent);\n } : null,\n );\n }\n\n break;\n }\n\n case 'JsdocTypeMethodSignature': {\n if (functionType !== 'property') {\n break;\n }\n\n /**\n * @param {import('jsdoc-type-pratt-parser').MethodSignatureResult} node\n */\n const convertToFunction = (node) => {\n return {\n arrow: true,\n constructor: false,\n meta: /** @type {Required<import('jsdoc-type-pratt-parser').MethodSignatureResult['meta']>} */ (\n node.meta\n ),\n parameters: node.parameters,\n parenthesis: true,\n returnType: node.returnType,\n type: 'JsdocTypeFunction',\n typeParameters: node.typeParameters,\n };\n };\n\n utils.reportJSDoc(\n 'Found method signature; prefer function property.',\n tag,\n enableFixer ? () => {\n /* c8 ignore next 3 -- TS guard */\n if (!parentNode || !property || typeof idx !== 'number') {\n throw new Error('Unexpected lack of parent or property');\n }\n\n const object = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (\n parentNode\n );\n\n const funcs = [];\n const removals = [];\n\n for (const [\n index,\n element,\n ] of object.elements.entries()) {\n if (element.type === 'JsdocTypeMethodSignature' &&\n element.name === nde.name\n ) {\n funcs.push(convertToFunction(element));\n if (index !== idx) {\n removals.push(index);\n }\n }\n }\n\n if (funcs.length === 1) {\n object.elements[idx] = /** @type {import('jsdoc-type-pratt-parser').ObjectFieldResult} */ ({\n key: nde.name,\n meta: nde.meta,\n optional: false,\n readonly: false,\n right: funcs[0],\n type: 'JsdocTypeObjectField',\n });\n } else {\n for (const removal of removals.toReversed()) {\n object.elements.splice(removal, 1);\n }\n\n object.elements[idx] = {\n key: nde.name,\n meta: nde.meta,\n optional: false,\n readonly: false,\n right: {\n elements: funcs.map((func) => {\n return /** @type {import('jsdoc-type-pratt-parser').ParenthesisResult} */ ({\n element: func,\n type: 'JsdocTypeParenthesis',\n });\n }),\n type: 'JsdocTypeIntersection',\n },\n type: 'JsdocTypeObjectField',\n };\n }\n\n rewireByParsedType(jsdoc, tag, parsedType, indent);\n } : null,\n );\n }\n\n break;\n }\n });\n };\n\n const tags = utils.filterTags(({\n tag,\n }) => {\n return Boolean(tag !== 'import' && utils.tagMightHaveTypePosition(tag));\n });\n\n for (const tag of tags) {\n if (tag.type) {\n checkType(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Prefers either function properties or method signatures',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-method-signature-style.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n enum: [\n 'method',\n 'property',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n description: 'Whether to enable the fixer. Defaults to `true`.',\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":"tsMethodSignatureStyle.cjs","names":["iterateJsdoc","parseType","traverse","rewireByParsedType"],"sources":["../../src/rules/tsMethodSignatureStyle.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n rewireByParsedType,\n} from '../jsdocUtils.js';\nimport {\n parse as parseType,\n traverse,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n utils,\n}) => {\n const functionType = context.options[0] ?? 'property';\n const {\n enableFixer = true,\n } = context.options[1] ?? {};\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const checkType = (tag) => {\n const potentialType = tag.type;\n let parsedType;\n try {\n parsedType = parseType(\n /** @type {string} */ (potentialType), 'typescript',\n );\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, parentNode, property, idx) => {\n switch (nde.type) {\n case 'JsdocTypeFunction': {\n if (functionType !== 'method') {\n break;\n }\n\n if (parentNode?.type === 'JsdocTypeObjectField' &&\n typeof parentNode.key === 'string'\n ) {\n utils.reportJSDoc(\n 'Found function property; prefer method signature.',\n tag,\n enableFixer ? () => {\n const objectField = parentNode;\n const obj =\n /**\n * @type {import('jsdoc-type-pratt-parser').ObjectFieldResult & {\n * parentNode: import('jsdoc-type-pratt-parser').ObjectResult\n * }}\n */\n (objectField).parentNode;\n\n const index = obj.elements.indexOf(parentNode);\n\n obj.elements[index] = {\n /* c8 ignore next 5 -- Guard */\n meta: nde.meta ?\n {\n quote: objectField.meta.quote,\n ...nde.meta,\n } :\n {\n quote: objectField.meta.quote,\n },\n name: /** @type {string} */ (objectField.key),\n parameters: nde.parameters,\n returnType: /** @type {import('jsdoc-type-pratt-parser').RootResult} */ (\n nde.returnType\n ),\n type: 'JsdocTypeMethodSignature',\n typeParameters: nde.typeParameters,\n };\n\n rewireByParsedType(jsdoc, tag, parsedType, indent);\n } : null,\n );\n break;\n }\n\n if (parentNode?.type === 'JsdocTypeParenthesis' &&\n // @ts-expect-error Our own added API\n parentNode.parentNode?.type === 'JsdocTypeIntersection' &&\n // @ts-expect-error Our own added API\n parentNode.parentNode.parentNode.type === 'JsdocTypeObjectField' &&\n // @ts-expect-error Our own added API\n typeof parentNode.parentNode.parentNode.key === 'string'\n ) {\n // @ts-expect-error Our own added API\n const intersection = parentNode.parentNode;\n const objectField = intersection.parentNode;\n const object = objectField.parentNode;\n // const objFieldIndex = object.elements.indexOf(objectField);\n\n /**\n * @param {import('jsdoc-type-pratt-parser').FunctionResult} func\n */\n const convertToMethod = (func) => {\n return /** @type {import('jsdoc-type-pratt-parser').MethodSignatureResult} */ ({\n /* c8 ignore next 5 -- Guard */\n meta: func.meta ?\n {\n quote: objectField.meta.quote,\n ...func.meta,\n } :\n {\n quote: objectField.meta.quote,\n },\n name: /** @type {string} */ (objectField.key),\n parameters: func.parameters,\n returnType: /** @type {import('jsdoc-type-pratt-parser').RootResult} */ (\n func.returnType\n ),\n type: 'JsdocTypeMethodSignature',\n typeParameters: func.typeParameters,\n });\n };\n\n /** @type {import('jsdoc-type-pratt-parser').MethodSignatureResult[]} */\n const methods = [];\n /** @type {number[]} */\n const methodIndexes = [];\n for (const [\n index,\n element,\n ] of intersection.elements.entries()) {\n if (\n element.type !== 'JsdocTypeParenthesis' ||\n element.element.type !== 'JsdocTypeFunction'\n ) {\n return;\n }\n\n methods.push(convertToMethod(element.element));\n methodIndexes.push(index);\n }\n\n utils.reportJSDoc(\n 'Found function property; prefer method signature.',\n tag,\n enableFixer ? () => {\n for (const methodIndex of methodIndexes.toReversed()) {\n object.elements.splice(methodIndex, 1);\n }\n\n object.elements.splice(methodIndexes[0], 0, ...methods);\n\n rewireByParsedType(jsdoc, tag, parsedType, indent);\n } : null,\n );\n }\n\n break;\n }\n\n case 'JsdocTypeMethodSignature': {\n if (functionType !== 'property') {\n break;\n }\n\n /**\n * @param {import('jsdoc-type-pratt-parser').MethodSignatureResult} node\n */\n const convertToFunction = (node) => {\n return {\n arrow: true,\n constructor: false,\n meta: /** @type {Required<import('jsdoc-type-pratt-parser').MethodSignatureResult['meta']>} */ (\n node.meta\n ),\n parameters: node.parameters,\n parenthesis: true,\n returnType: node.returnType,\n type: 'JsdocTypeFunction',\n typeParameters: node.typeParameters,\n };\n };\n\n utils.reportJSDoc(\n 'Found method signature; prefer function property.',\n tag,\n enableFixer ? () => {\n /* c8 ignore next 3 -- TS guard */\n if (!parentNode || !property || typeof idx !== 'number') {\n throw new Error('Unexpected lack of parent or property');\n }\n\n const object = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (\n parentNode\n );\n\n const funcs = [];\n const removals = [];\n\n for (const [\n index,\n element,\n ] of object.elements.entries()) {\n if (element.type === 'JsdocTypeMethodSignature' &&\n element.name === nde.name\n ) {\n funcs.push(convertToFunction(element));\n if (index !== idx) {\n removals.push(index);\n }\n }\n }\n\n if (funcs.length === 1) {\n object.elements[idx] = /** @type {import('jsdoc-type-pratt-parser').ObjectFieldResult} */ ({\n key: nde.name,\n meta: nde.meta,\n optional: false,\n readonly: false,\n right: funcs[0],\n type: 'JsdocTypeObjectField',\n });\n } else {\n for (const removal of removals.toReversed()) {\n object.elements.splice(removal, 1);\n }\n\n object.elements[idx] = {\n key: nde.name,\n meta: nde.meta,\n optional: false,\n readonly: false,\n right: {\n elements: funcs.map((func) => {\n return /** @type {import('jsdoc-type-pratt-parser').ParenthesisResult} */ ({\n element: func,\n type: 'JsdocTypeParenthesis',\n });\n }),\n type: 'JsdocTypeIntersection',\n },\n type: 'JsdocTypeObjectField',\n };\n }\n\n rewireByParsedType(jsdoc, tag, parsedType, indent);\n } : null,\n );\n }\n\n break;\n }\n });\n };\n\n const tags = utils.filterTags(({\n tag,\n }) => {\n return Boolean(tag !== 'import' && utils.tagMightHaveTypePosition(tag));\n });\n\n for (const tag of tags) {\n if (tag.type) {\n checkType(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Prefers either function properties or method signatures',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-method-signature-style.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n enum: [\n 'method',\n 'property',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n description: 'Whether to enable the fixer. Defaults to `true`.',\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,13 @@
1
- import iterateJsdoc from '../iterateJsdoc.js';
2
- import { parse as parseType, traverse } from '@es-joy/jsdoccomment';
3
- export default iterateJsdoc(({
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 _jsdoccomment = require("@es-joy/jsdoccomment");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ var _default = exports.default = (0, _iterateJsdoc.default)(({
4
11
  settings,
5
12
  utils
6
13
  }) => {
@@ -15,11 +22,11 @@ export default iterateJsdoc(({
15
22
  const potentialType = tag.type;
16
23
  let parsedType;
17
24
  try {
18
- parsedType = parseType(/** @type {string} */potentialType, 'typescript');
25
+ parsedType = (0, _jsdoccomment.parse)(/** @type {string} */potentialType, 'typescript');
19
26
  } catch {
20
27
  return;
21
28
  }
22
- traverse(parsedType, nde => {
29
+ (0, _jsdoccomment.traverse)(parsedType, nde => {
23
30
  switch (nde.type) {
24
31
  case 'JsdocTypeObject':
25
32
  {
@@ -51,4 +58,5 @@ export default iterateJsdoc(({
51
58
  type: 'suggestion'
52
59
  }
53
60
  });
61
+ module.exports = exports.default;
54
62
  //# sourceMappingURL=tsNoEmptyObjectType.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tsNoEmptyObjectType.cjs","names":[],"sources":["../../src/rules/tsNoEmptyObjectType.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse as parseType,\n traverse,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n settings,\n utils,\n}) => {\n if (settings.mode !== 'typescript') {\n return;\n }\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const checkType = (tag) => {\n const potentialType = tag.type;\n let parsedType;\n try {\n parsedType = parseType(\n /** @type {string} */ (potentialType), 'typescript',\n );\n } catch {\n return;\n }\n\n traverse(parsedType, (nde) => {\n switch (nde.type) {\n case 'JsdocTypeObject': {\n if (!nde.elements.length) {\n utils.reportJSDoc('No empty object type.', tag);\n }\n }\n }\n });\n };\n\n const tags = utils.filterTags(({\n tag,\n }) => {\n return Boolean(tag !== 'import' && utils.tagMightHaveTypePosition(tag));\n });\n\n for (const tag of tags) {\n if (tag.type) {\n checkType(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Warns against use of the empty object type',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-no-empty-object-type.md#repos-sticky-header',\n },\n schema: [],\n type: 'suggestion',\n },\n});\n"],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB;AAC7C,SACE,KAAK,IAAI,SAAS,EAClB,QAAQ,QACH,sBAAsB;AAE7B,eAAe,YAAY,CAAC,CAAC;EAC3B,QAAQ;EACR;AACF,CAAC,KAAK;EACJ,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE;IAClC;EACF;;EAEA;AACF;AACA;EACE,MAAM,SAAS,GAAI,GAAG,IAAK;IACzB,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI;IAC9B,IAAI,UAAU;IACd,IAAI;MACF,UAAU,GAAG,SAAS,CACpB,qBAAuB,aAAa,EAAG,YACzC,CAAC;IACH,CAAC,CAAC,MAAM;MACN;IACF;IAEA,QAAQ,CAAC,UAAU,EAAG,GAAG,IAAK;MAC5B,QAAQ,GAAG,CAAC,IAAI;QACd,KAAK,iBAAiB;UAAE;YACtB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;cACxB,KAAK,CAAC,WAAW,CAAC,uBAAuB,EAAE,GAAG,CAAC;YACjD;UACF;MACF;IACF,CAAC,CAAC;EACJ,CAAC;EAED,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7B;EACF,CAAC,KAAK;IACJ,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;EACzE,CAAC,CAAC;EAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;IACtB,IAAI,GAAG,CAAC,IAAI,EAAE;MACZ,SAAS,CAAC,GAAG,CAAC;IAChB;EACF;AACF,CAAC,EAAE;EACD,gBAAgB,EAAE,IAAI;EACtB,IAAI,EAAE;IACJ,IAAI,EAAE;MACJ,WAAW,EAAE,4CAA4C;MACzD,GAAG,EAAE;IACP,CAAC;IACD,MAAM,EAAE,EAAE;IACV,IAAI,EAAE;EACR;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"tsNoEmptyObjectType.cjs","names":["iterateJsdoc","parseType","traverse"],"sources":["../../src/rules/tsNoEmptyObjectType.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse as parseType,\n traverse,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n settings,\n utils,\n}) => {\n if (settings.mode !== 'typescript') {\n return;\n }\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const checkType = (tag) => {\n const potentialType = tag.type;\n let parsedType;\n try {\n parsedType = parseType(\n /** @type {string} */ (potentialType), 'typescript',\n );\n } catch {\n return;\n }\n\n traverse(parsedType, (nde) => {\n switch (nde.type) {\n case 'JsdocTypeObject': {\n if (!nde.elements.length) {\n utils.reportJSDoc('No empty object type.', tag);\n }\n }\n }\n });\n };\n\n const tags = utils.filterTags(({\n tag,\n }) => {\n return Boolean(tag !== 'import' && utils.tagMightHaveTypePosition(tag));\n });\n\n for (const tag of tags) {\n if (tag.type) {\n checkType(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Warns against use of the empty object type',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-no-empty-object-type.md#repos-sticky-header',\n },\n schema: [],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA;AACA;AAG8B;AAAA,iCAEf,IAAAA,qBAAY,EAAC,CAAC;EAC3B,QAAQ;EACR;AACF,CAAC,KAAK;EACJ,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE;IAClC;EACF;;EAEA;AACF;AACA;EACE,MAAM,SAAS,GAAI,GAAG,IAAK;IACzB,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI;IAC9B,IAAI,UAAU;IACd,IAAI;MACF,UAAU,GAAG,IAAAC,mBAAS,EACpB,qBAAuB,aAAa,EAAG,YACzC,CAAC;IACH,CAAC,CAAC,MAAM;MACN;IACF;IAEA,IAAAC,cAAA,QAAQ,EAAC,UAAU,EAAG,GAAG,IAAK;MAC5B,QAAQ,GAAG,CAAC,IAAI;QACd,KAAK,iBAAiB;UAAE;YACtB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;cACxB,KAAK,CAAC,WAAW,CAAC,uBAAuB,EAAE,GAAG,CAAC;YACjD;UACF;MACF;IACF,CAAC,CAAC;EACJ,CAAC;EAED,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7B;EACF,CAAC,KAAK;IACJ,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;EACzE,CAAC,CAAC;EAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;IACtB,IAAI,GAAG,CAAC,IAAI,EAAE;MACZ,SAAS,CAAC,GAAG,CAAC;IAChB;EACF;AACF,CAAC,EAAE;EACD,gBAAgB,EAAE,IAAI;EACtB,IAAI,EAAE;IACJ,IAAI,EAAE;MACJ,WAAW,EAAE,4CAA4C;MACzD,GAAG,EAAE;IACP,CAAC;IACD,MAAM,EAAE,EAAE;IACV,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA","ignoreList":[]}