@depup/eslint-plugin-jsdoc 62.8.0-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +33 -0
  3. package/changes.json +18 -0
  4. package/dist/WarnSettings.cjs +38 -0
  5. package/dist/WarnSettings.cjs.map +1 -0
  6. package/dist/WarnSettings.d.ts +17 -0
  7. package/dist/alignTransform.cjs +402 -0
  8. package/dist/alignTransform.cjs.map +1 -0
  9. package/dist/alignTransform.d.ts +34 -0
  10. package/dist/buildForbidRuleDefinition.cjs +101 -0
  11. package/dist/buildForbidRuleDefinition.cjs.map +1 -0
  12. package/dist/buildForbidRuleDefinition.d.ts +15 -0
  13. package/dist/buildRejectOrPreferRuleDefinition.cjs +352 -0
  14. package/dist/buildRejectOrPreferRuleDefinition.cjs.map +1 -0
  15. package/dist/buildRejectOrPreferRuleDefinition.d.ts +9 -0
  16. package/dist/cjs/WarnSettings.d.ts +16 -0
  17. package/dist/cjs/alignTransform.d.ts +33 -0
  18. package/dist/cjs/buildForbidRuleDefinition.d.ts +14 -0
  19. package/dist/cjs/buildRejectOrPreferRuleDefinition.d.ts +8 -0
  20. package/dist/cjs/defaultTagOrder.d.ts +4 -0
  21. package/dist/cjs/exportParser.d.ts +40 -0
  22. package/dist/cjs/getDefaultTagStructureForMode.d.ts +10 -0
  23. package/dist/cjs/getJsdocProcessorPlugin.d.cts +5 -0
  24. package/dist/cjs/getJsdocProcessorPlugin.d.ts +66 -0
  25. package/dist/cjs/index-cjs.d.ts +23 -0
  26. package/dist/cjs/index.cjs.d.cts +2 -0
  27. package/dist/cjs/iterateJsdoc.d.cts +7 -0
  28. package/dist/cjs/iterateJsdoc.d.ts +495 -0
  29. package/dist/cjs/jsdocUtils.d.ts +493 -0
  30. package/dist/cjs/rules/checkAccess.d.ts +2 -0
  31. package/dist/cjs/rules/checkAlignment.d.ts +2 -0
  32. package/dist/cjs/rules/checkExamples.d.ts +3 -0
  33. package/dist/cjs/rules/checkIndentation.d.ts +2 -0
  34. package/dist/cjs/rules/checkLineAlignment.d.ts +9 -0
  35. package/dist/cjs/rules/checkParamNames.d.ts +2 -0
  36. package/dist/cjs/rules/checkPropertyNames.d.ts +2 -0
  37. package/dist/cjs/rules/checkSyntax.d.ts +2 -0
  38. package/dist/cjs/rules/checkTagNames.d.ts +2 -0
  39. package/dist/cjs/rules/checkTemplateNames.d.ts +2 -0
  40. package/dist/cjs/rules/checkTypes.d.ts +7 -0
  41. package/dist/cjs/rules/checkValues.d.ts +2 -0
  42. package/dist/cjs/rules/convertToJsdocComments.d.ts +266 -0
  43. package/dist/cjs/rules/emptyTags.d.ts +2 -0
  44. package/dist/cjs/rules/escapeInlineTags.d.ts +2 -0
  45. package/dist/cjs/rules/implementsOnClasses.d.ts +2 -0
  46. package/dist/cjs/rules/importsAsDependencies.d.ts +2 -0
  47. package/dist/cjs/rules/informativeDocs.d.ts +2 -0
  48. package/dist/cjs/rules/linesBeforeBlock.d.ts +2 -0
  49. package/dist/cjs/rules/matchDescription.d.ts +2 -0
  50. package/dist/cjs/rules/matchName.d.ts +2 -0
  51. package/dist/cjs/rules/multilineBlocks.d.ts +2 -0
  52. package/dist/cjs/rules/noBadBlocks.d.ts +2 -0
  53. package/dist/cjs/rules/noBlankBlockDescriptions.d.ts +2 -0
  54. package/dist/cjs/rules/noBlankBlocks.d.ts +2 -0
  55. package/dist/cjs/rules/noDefaults.d.ts +2 -0
  56. package/dist/cjs/rules/noMissingSyntax.d.ts +9 -0
  57. package/dist/cjs/rules/noMultiAsterisks.d.ts +2 -0
  58. package/dist/cjs/rules/noRestrictedSyntax.d.ts +2 -0
  59. package/dist/cjs/rules/noTypes.d.ts +2 -0
  60. package/dist/cjs/rules/noUndefinedTypes.d.ts +2 -0
  61. package/dist/cjs/rules/preferImportTag.d.ts +2 -0
  62. package/dist/cjs/rules/requireAsteriskPrefix.d.ts +2 -0
  63. package/dist/cjs/rules/requireDescription.d.ts +2 -0
  64. package/dist/cjs/rules/requireDescriptionCompleteSentence.d.ts +2 -0
  65. package/dist/cjs/rules/requireExample.d.ts +2 -0
  66. package/dist/cjs/rules/requireFileOverview.d.ts +2 -0
  67. package/dist/cjs/rules/requireHyphenBeforeParamDescription.d.ts +2 -0
  68. package/dist/cjs/rules/requireJsdoc.d.ts +24 -0
  69. package/dist/cjs/rules/requireParam.d.ts +3 -0
  70. package/dist/cjs/rules/requireParamDescription.d.ts +2 -0
  71. package/dist/cjs/rules/requireParamName.d.ts +2 -0
  72. package/dist/cjs/rules/requireParamType.d.ts +2 -0
  73. package/dist/cjs/rules/requireProperty.d.ts +2 -0
  74. package/dist/cjs/rules/requirePropertyDescription.d.ts +2 -0
  75. package/dist/cjs/rules/requirePropertyName.d.ts +2 -0
  76. package/dist/cjs/rules/requirePropertyType.d.ts +2 -0
  77. package/dist/cjs/rules/requireRejects.d.ts +2 -0
  78. package/dist/cjs/rules/requireReturns.d.ts +2 -0
  79. package/dist/cjs/rules/requireReturnsCheck.d.ts +2 -0
  80. package/dist/cjs/rules/requireReturnsDescription.d.ts +2 -0
  81. package/dist/cjs/rules/requireReturnsType.d.ts +2 -0
  82. package/dist/cjs/rules/requireTags.d.ts +2 -0
  83. package/dist/cjs/rules/requireTemplate.d.ts +2 -0
  84. package/dist/cjs/rules/requireThrows.d.ts +2 -0
  85. package/dist/cjs/rules/requireYields.d.ts +2 -0
  86. package/dist/cjs/rules/requireYieldsCheck.d.ts +2 -0
  87. package/dist/cjs/rules/sortTags.d.ts +2 -0
  88. package/dist/cjs/rules/tagLines.d.ts +2 -0
  89. package/dist/cjs/rules/textEscaping.d.ts +2 -0
  90. package/dist/cjs/rules/tsMethodSignatureStyle.d.ts +2 -0
  91. package/dist/cjs/rules/tsNoEmptyObjectType.d.ts +2 -0
  92. package/dist/cjs/rules/tsNoUnnecessaryTemplateExpression.d.ts +2 -0
  93. package/dist/cjs/rules/tsPreferFunctionType.d.ts +2 -0
  94. package/dist/cjs/rules/typeFormatting.d.ts +2 -0
  95. package/dist/cjs/rules/validTypes.d.ts +2 -0
  96. package/dist/cjs/tagNames.d.ts +15 -0
  97. package/dist/cjs/utils/hasReturnValue.d.ts +19 -0
  98. package/dist/defaultTagOrder.cjs +46 -0
  99. package/dist/defaultTagOrder.cjs.map +1 -0
  100. package/dist/defaultTagOrder.d.ts +5 -0
  101. package/dist/exportParser.cjs +732 -0
  102. package/dist/exportParser.cjs.map +1 -0
  103. package/dist/exportParser.d.ts +41 -0
  104. package/dist/generateDocs.cjs +342 -0
  105. package/dist/generateDocs.cjs.map +1 -0
  106. package/dist/generateOptions.cjs +62 -0
  107. package/dist/generateOptions.cjs.map +1 -0
  108. package/dist/generateRule.cjs +248 -0
  109. package/dist/generateRule.cjs.map +1 -0
  110. package/dist/generateRuleTypes.cjs +24 -0
  111. package/dist/generateRuleTypes.cjs.map +1 -0
  112. package/dist/getDefaultTagStructureForMode.cjs +289 -0
  113. package/dist/getDefaultTagStructureForMode.cjs.map +1 -0
  114. package/dist/getDefaultTagStructureForMode.d.ts +11 -0
  115. package/dist/getJsdocProcessorPlugin.cjs +587 -0
  116. package/dist/getJsdocProcessorPlugin.cjs.map +1 -0
  117. package/dist/getJsdocProcessorPlugin.cts +5 -0
  118. package/dist/getJsdocProcessorPlugin.d.ts +67 -0
  119. package/dist/index-cjs.cjs +595 -0
  120. package/dist/index-cjs.cjs.map +1 -0
  121. package/dist/index-cjs.d.ts +24 -0
  122. package/dist/index-esm.cjs +162 -0
  123. package/dist/index-esm.cjs.map +1 -0
  124. package/dist/index-esm.d.ts +72 -0
  125. package/dist/index.cjs +743 -0
  126. package/dist/index.cjs.cts +3 -0
  127. package/dist/index.cjs.map +1 -0
  128. package/dist/index.d.ts +93 -0
  129. package/dist/iterateJsdoc.cjs +2150 -0
  130. package/dist/iterateJsdoc.cjs.map +1 -0
  131. package/dist/iterateJsdoc.cts +7 -0
  132. package/dist/iterateJsdoc.d.ts +496 -0
  133. package/dist/jsdocUtils.cjs +1725 -0
  134. package/dist/jsdocUtils.cjs.map +1 -0
  135. package/dist/jsdocUtils.d.ts +494 -0
  136. package/dist/rules/checkAccess.cjs +40 -0
  137. package/dist/rules/checkAccess.cjs.map +1 -0
  138. package/dist/rules/checkAccess.d.ts +3 -0
  139. package/dist/rules/checkAlignment.cjs +78 -0
  140. package/dist/rules/checkAlignment.cjs.map +1 -0
  141. package/dist/rules/checkAlignment.d.ts +3 -0
  142. package/dist/rules/checkExamples.cjs +521 -0
  143. package/dist/rules/checkExamples.cjs.map +1 -0
  144. package/dist/rules/checkExamples.d.ts +4 -0
  145. package/dist/rules/checkIndentation.cjs +170 -0
  146. package/dist/rules/checkIndentation.cjs.map +1 -0
  147. package/dist/rules/checkIndentation.d.ts +3 -0
  148. package/dist/rules/checkLineAlignment.cjs +398 -0
  149. package/dist/rules/checkLineAlignment.cjs.map +1 -0
  150. package/dist/rules/checkLineAlignment.d.ts +10 -0
  151. package/dist/rules/checkParamNames.cjs +407 -0
  152. package/dist/rules/checkParamNames.cjs.map +1 -0
  153. package/dist/rules/checkParamNames.d.ts +3 -0
  154. package/dist/rules/checkPropertyNames.cjs +135 -0
  155. package/dist/rules/checkPropertyNames.cjs.map +1 -0
  156. package/dist/rules/checkPropertyNames.d.ts +3 -0
  157. package/dist/rules/checkSyntax.cjs +38 -0
  158. package/dist/rules/checkSyntax.cjs.map +1 -0
  159. package/dist/rules/checkSyntax.d.ts +3 -0
  160. package/dist/rules/checkTagNames.cjs +312 -0
  161. package/dist/rules/checkTagNames.cjs.map +1 -0
  162. package/dist/rules/checkTagNames.d.ts +3 -0
  163. package/dist/rules/checkTemplateNames.cjs +185 -0
  164. package/dist/rules/checkTemplateNames.cjs.map +1 -0
  165. package/dist/rules/checkTemplateNames.d.ts +3 -0
  166. package/dist/rules/checkTypes.cjs +111 -0
  167. package/dist/rules/checkTypes.cjs.map +1 -0
  168. package/dist/rules/checkTypes.d.ts +8 -0
  169. package/dist/rules/checkValues.cjs +166 -0
  170. package/dist/rules/checkValues.cjs.map +1 -0
  171. package/dist/rules/checkValues.d.ts +3 -0
  172. package/dist/rules/convertToJsdocComments.cjs +356 -0
  173. package/dist/rules/convertToJsdocComments.cjs.map +1 -0
  174. package/dist/rules/convertToJsdocComments.d.ts +267 -0
  175. package/dist/rules/emptyTags.cjs +85 -0
  176. package/dist/rules/emptyTags.cjs.map +1 -0
  177. package/dist/rules/emptyTags.d.ts +3 -0
  178. package/dist/rules/escapeInlineTags.cjs +149 -0
  179. package/dist/rules/escapeInlineTags.cjs.map +1 -0
  180. package/dist/rules/escapeInlineTags.d.ts +3 -0
  181. package/dist/rules/implementsOnClasses.cjs +74 -0
  182. package/dist/rules/implementsOnClasses.cjs.map +1 -0
  183. package/dist/rules/implementsOnClasses.d.ts +3 -0
  184. package/dist/rules/importsAsDependencies.cjs +104 -0
  185. package/dist/rules/importsAsDependencies.cjs.map +1 -0
  186. package/dist/rules/importsAsDependencies.d.ts +3 -0
  187. package/dist/rules/informativeDocs.cjs +187 -0
  188. package/dist/rules/informativeDocs.cjs.map +1 -0
  189. package/dist/rules/informativeDocs.d.ts +3 -0
  190. package/dist/rules/linesBeforeBlock.cjs +120 -0
  191. package/dist/rules/linesBeforeBlock.cjs.map +1 -0
  192. package/dist/rules/linesBeforeBlock.d.ts +3 -0
  193. package/dist/rules/matchDescription.cjs +356 -0
  194. package/dist/rules/matchDescription.cjs.map +1 -0
  195. package/dist/rules/matchDescription.d.ts +3 -0
  196. package/dist/rules/matchName.cjs +160 -0
  197. package/dist/rules/matchName.cjs.map +1 -0
  198. package/dist/rules/matchName.d.ts +3 -0
  199. package/dist/rules/multilineBlocks.cjs +431 -0
  200. package/dist/rules/multilineBlocks.cjs.map +1 -0
  201. package/dist/rules/multilineBlocks.d.ts +3 -0
  202. package/dist/rules/noBadBlocks.cjs +100 -0
  203. package/dist/rules/noBadBlocks.cjs.map +1 -0
  204. package/dist/rules/noBadBlocks.d.ts +3 -0
  205. package/dist/rules/noBlankBlockDescriptions.cjs +63 -0
  206. package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -0
  207. package/dist/rules/noBlankBlockDescriptions.d.ts +3 -0
  208. package/dist/rules/noBlankBlocks.cjs +54 -0
  209. package/dist/rules/noBlankBlocks.cjs.map +1 -0
  210. package/dist/rules/noBlankBlocks.d.ts +3 -0
  211. package/dist/rules/noDefaults.cjs +102 -0
  212. package/dist/rules/noDefaults.cjs.map +1 -0
  213. package/dist/rules/noDefaults.d.ts +3 -0
  214. package/dist/rules/noMissingSyntax.cjs +196 -0
  215. package/dist/rules/noMissingSyntax.cjs.map +1 -0
  216. package/dist/rules/noMissingSyntax.d.ts +10 -0
  217. package/dist/rules/noMultiAsterisks.cjs +126 -0
  218. package/dist/rules/noMultiAsterisks.cjs.map +1 -0
  219. package/dist/rules/noMultiAsterisks.d.ts +3 -0
  220. package/dist/rules/noRestrictedSyntax.cjs +68 -0
  221. package/dist/rules/noRestrictedSyntax.cjs.map +1 -0
  222. package/dist/rules/noRestrictedSyntax.d.ts +3 -0
  223. package/dist/rules/noTypes.cjs +101 -0
  224. package/dist/rules/noTypes.cjs.map +1 -0
  225. package/dist/rules/noTypes.d.ts +3 -0
  226. package/dist/rules/noUndefinedTypes.cjs +588 -0
  227. package/dist/rules/noUndefinedTypes.cjs.map +1 -0
  228. package/dist/rules/noUndefinedTypes.d.ts +3 -0
  229. package/dist/rules/preferImportTag.cjs +362 -0
  230. package/dist/rules/preferImportTag.cjs.map +1 -0
  231. package/dist/rules/preferImportTag.d.ts +3 -0
  232. package/dist/rules/requireAsteriskPrefix.cjs +190 -0
  233. package/dist/rules/requireAsteriskPrefix.cjs.map +1 -0
  234. package/dist/rules/requireAsteriskPrefix.d.ts +3 -0
  235. package/dist/rules/requireDescription.cjs +164 -0
  236. package/dist/rules/requireDescription.cjs.map +1 -0
  237. package/dist/rules/requireDescription.d.ts +3 -0
  238. package/dist/rules/requireDescriptionCompleteSentence.cjs +321 -0
  239. package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -0
  240. package/dist/rules/requireDescriptionCompleteSentence.d.ts +3 -0
  241. package/dist/rules/requireExample.cjs +133 -0
  242. package/dist/rules/requireExample.cjs.map +1 -0
  243. package/dist/rules/requireExample.d.ts +3 -0
  244. package/dist/rules/requireFileOverview.cjs +194 -0
  245. package/dist/rules/requireFileOverview.cjs.map +1 -0
  246. package/dist/rules/requireFileOverview.d.ts +3 -0
  247. package/dist/rules/requireHyphenBeforeParamDescription.cjs +166 -0
  248. package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -0
  249. package/dist/rules/requireHyphenBeforeParamDescription.d.ts +3 -0
  250. package/dist/rules/requireJsdoc.cjs +722 -0
  251. package/dist/rules/requireJsdoc.cjs.map +1 -0
  252. package/dist/rules/requireJsdoc.d.ts +25 -0
  253. package/dist/rules/requireParam.cjs +772 -0
  254. package/dist/rules/requireParam.cjs.map +1 -0
  255. package/dist/rules/requireParam.d.ts +4 -0
  256. package/dist/rules/requireParamDescription.cjs +105 -0
  257. package/dist/rules/requireParamDescription.cjs.map +1 -0
  258. package/dist/rules/requireParamDescription.d.ts +3 -0
  259. package/dist/rules/requireParamName.cjs +68 -0
  260. package/dist/rules/requireParamName.cjs.map +1 -0
  261. package/dist/rules/requireParamName.d.ts +3 -0
  262. package/dist/rules/requireParamType.cjs +104 -0
  263. package/dist/rules/requireParamType.cjs.map +1 -0
  264. package/dist/rules/requireParamType.d.ts +3 -0
  265. package/dist/rules/requireProperty.cjs +63 -0
  266. package/dist/rules/requireProperty.cjs.map +1 -0
  267. package/dist/rules/requireProperty.d.ts +3 -0
  268. package/dist/rules/requirePropertyDescription.cjs +29 -0
  269. package/dist/rules/requirePropertyDescription.cjs.map +1 -0
  270. package/dist/rules/requirePropertyDescription.d.ts +3 -0
  271. package/dist/rules/requirePropertyName.cjs +29 -0
  272. package/dist/rules/requirePropertyName.cjs.map +1 -0
  273. package/dist/rules/requirePropertyName.d.ts +3 -0
  274. package/dist/rules/requirePropertyType.cjs +29 -0
  275. package/dist/rules/requirePropertyType.cjs.map +1 -0
  276. package/dist/rules/requirePropertyType.d.ts +3 -0
  277. package/dist/rules/requireRejects.cjs +226 -0
  278. package/dist/rules/requireRejects.cjs.map +1 -0
  279. package/dist/rules/requireRejects.d.ts +3 -0
  280. package/dist/rules/requireReturns.cjs +262 -0
  281. package/dist/rules/requireReturns.cjs.map +1 -0
  282. package/dist/rules/requireReturns.d.ts +3 -0
  283. package/dist/rules/requireReturnsCheck.cjs +140 -0
  284. package/dist/rules/requireReturnsCheck.cjs.map +1 -0
  285. package/dist/rules/requireReturnsCheck.d.ts +3 -0
  286. package/dist/rules/requireReturnsDescription.cjs +72 -0
  287. package/dist/rules/requireReturnsDescription.cjs.map +1 -0
  288. package/dist/rules/requireReturnsDescription.d.ts +3 -0
  289. package/dist/rules/requireReturnsType.cjs +68 -0
  290. package/dist/rules/requireReturnsType.cjs.map +1 -0
  291. package/dist/rules/requireReturnsType.d.ts +3 -0
  292. package/dist/rules/requireTags.cjs +74 -0
  293. package/dist/rules/requireTags.cjs.map +1 -0
  294. package/dist/rules/requireTags.d.ts +3 -0
  295. package/dist/rules/requireTemplate.cjs +220 -0
  296. package/dist/rules/requireTemplate.cjs.map +1 -0
  297. package/dist/rules/requireTemplate.d.ts +3 -0
  298. package/dist/rules/requireThrows.cjs +118 -0
  299. package/dist/rules/requireThrows.cjs.map +1 -0
  300. package/dist/rules/requireThrows.d.ts +3 -0
  301. package/dist/rules/requireYields.cjs +224 -0
  302. package/dist/rules/requireYields.cjs.map +1 -0
  303. package/dist/rules/requireYields.d.ts +3 -0
  304. package/dist/rules/requireYieldsCheck.cjs +179 -0
  305. package/dist/rules/requireYieldsCheck.cjs.map +1 -0
  306. package/dist/rules/requireYieldsCheck.d.ts +3 -0
  307. package/dist/rules/sortTags.cjs +656 -0
  308. package/dist/rules/sortTags.cjs.map +1 -0
  309. package/dist/rules/sortTags.d.ts +3 -0
  310. package/dist/rules/tagLines.cjs +374 -0
  311. package/dist/rules/tagLines.cjs.map +1 -0
  312. package/dist/rules/tagLines.d.ts +3 -0
  313. package/dist/rules/textEscaping.cjs +141 -0
  314. package/dist/rules/textEscaping.cjs.map +1 -0
  315. package/dist/rules/textEscaping.d.ts +3 -0
  316. package/dist/rules/tsMethodSignatureStyle.cjs +240 -0
  317. package/dist/rules/tsMethodSignatureStyle.cjs.map +1 -0
  318. package/dist/rules/tsMethodSignatureStyle.d.ts +3 -0
  319. package/dist/rules/tsNoEmptyObjectType.cjs +62 -0
  320. package/dist/rules/tsNoEmptyObjectType.cjs.map +1 -0
  321. package/dist/rules/tsNoEmptyObjectType.d.ts +3 -0
  322. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs +104 -0
  323. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs.map +1 -0
  324. package/dist/rules/tsNoUnnecessaryTemplateExpression.d.ts +3 -0
  325. package/dist/rules/tsPreferFunctionType.cjs +110 -0
  326. package/dist/rules/tsPreferFunctionType.cjs.map +1 -0
  327. package/dist/rules/tsPreferFunctionType.d.ts +3 -0
  328. package/dist/rules/typeFormatting.cjs +607 -0
  329. package/dist/rules/typeFormatting.cjs.map +1 -0
  330. package/dist/rules/typeFormatting.d.ts +3 -0
  331. package/dist/rules/validTypes.cjs +328 -0
  332. package/dist/rules/validTypes.cjs.map +1 -0
  333. package/dist/rules/validTypes.d.ts +3 -0
  334. package/dist/rules.d.ts +3203 -0
  335. package/dist/tagNames.cjs +244 -0
  336. package/dist/tagNames.cjs.map +1 -0
  337. package/dist/tagNames.d.ts +16 -0
  338. package/dist/to-valid-identifier.cjs +263 -0
  339. package/dist/utils/hasReturnValue.cjs +495 -0
  340. package/dist/utils/hasReturnValue.cjs.map +1 -0
  341. package/dist/utils/hasReturnValue.d.ts +20 -0
  342. package/package.json +220 -0
  343. package/rollup.config.js +16 -0
  344. package/src/WarnSettings.js +34 -0
  345. package/src/alignTransform.js +444 -0
  346. package/src/buildForbidRuleDefinition.js +106 -0
  347. package/src/buildRejectOrPreferRuleDefinition.js +481 -0
  348. package/src/defaultTagOrder.js +169 -0
  349. package/src/exportParser.js +973 -0
  350. package/src/getDefaultTagStructureForMode.js +968 -0
  351. package/src/getJsdocProcessorPlugin.cts +5 -0
  352. package/src/getJsdocProcessorPlugin.js +692 -0
  353. package/src/index-cjs.js +755 -0
  354. package/src/index-esm.js +196 -0
  355. package/src/index.cjs.cts +3 -0
  356. package/src/index.js +940 -0
  357. package/src/iterateJsdoc.cts +7 -0
  358. package/src/iterateJsdoc.js +2612 -0
  359. package/src/jsdocUtils.js +2158 -0
  360. package/src/rules/checkAccess.js +45 -0
  361. package/src/rules/checkAlignment.js +82 -0
  362. package/src/rules/checkExamples.js +613 -0
  363. package/src/rules/checkIndentation.js +176 -0
  364. package/src/rules/checkLineAlignment.js +453 -0
  365. package/src/rules/checkParamNames.js +541 -0
  366. package/src/rules/checkPropertyNames.js +174 -0
  367. package/src/rules/checkSyntax.js +30 -0
  368. package/src/rules/checkTagNames.js +414 -0
  369. package/src/rules/checkTemplateNames.js +208 -0
  370. package/src/rules/checkTypes.js +130 -0
  371. package/src/rules/checkValues.js +264 -0
  372. package/src/rules/convertToJsdocComments.js +444 -0
  373. package/src/rules/emptyTags.js +106 -0
  374. package/src/rules/escapeInlineTags.js +189 -0
  375. package/src/rules/implementsOnClasses.js +78 -0
  376. package/src/rules/importsAsDependencies.js +132 -0
  377. package/src/rules/informativeDocs.js +228 -0
  378. package/src/rules/linesBeforeBlock.js +144 -0
  379. package/src/rules/matchDescription.js +413 -0
  380. package/src/rules/matchName.js +179 -0
  381. package/src/rules/multilineBlocks.js +562 -0
  382. package/src/rules/noBadBlocks.js +127 -0
  383. package/src/rules/noBlankBlockDescriptions.js +69 -0
  384. package/src/rules/noBlankBlocks.js +55 -0
  385. package/src/rules/noDefaults.js +104 -0
  386. package/src/rules/noMissingSyntax.js +215 -0
  387. package/src/rules/noMultiAsterisks.js +162 -0
  388. package/src/rules/noRestrictedSyntax.js +72 -0
  389. package/src/rules/noTypes.js +108 -0
  390. package/src/rules/noUndefinedTypes.js +797 -0
  391. package/src/rules/preferImportTag.js +521 -0
  392. package/src/rules/requireAsteriskPrefix.js +217 -0
  393. package/src/rules/requireDescription.js +190 -0
  394. package/src/rules/requireDescriptionCompleteSentence.js +376 -0
  395. package/src/rules/requireExample.js +143 -0
  396. package/src/rules/requireFileOverview.js +213 -0
  397. package/src/rules/requireHyphenBeforeParamDescription.js +210 -0
  398. package/src/rules/requireJsdoc.js +897 -0
  399. package/src/rules/requireParam.js +848 -0
  400. package/src/rules/requireParamDescription.js +110 -0
  401. package/src/rules/requireParamName.js +69 -0
  402. package/src/rules/requireParamType.js +109 -0
  403. package/src/rules/requireProperty.js +66 -0
  404. package/src/rules/requirePropertyDescription.js +25 -0
  405. package/src/rules/requirePropertyName.js +25 -0
  406. package/src/rules/requirePropertyType.js +25 -0
  407. package/src/rules/requireRejects.js +246 -0
  408. package/src/rules/requireReturns.js +291 -0
  409. package/src/rules/requireReturnsCheck.js +180 -0
  410. package/src/rules/requireReturnsDescription.js +73 -0
  411. package/src/rules/requireReturnsType.js +65 -0
  412. package/src/rules/requireTags.js +85 -0
  413. package/src/rules/requireTemplate.js +246 -0
  414. package/src/rules/requireThrows.js +128 -0
  415. package/src/rules/requireYields.js +265 -0
  416. package/src/rules/requireYieldsCheck.js +226 -0
  417. package/src/rules/sortTags.js +766 -0
  418. package/src/rules/tagLines.js +486 -0
  419. package/src/rules/textEscaping.js +158 -0
  420. package/src/rules/tsMethodSignatureStyle.js +300 -0
  421. package/src/rules/tsNoEmptyObjectType.js +61 -0
  422. package/src/rules/tsNoUnnecessaryTemplateExpression.js +130 -0
  423. package/src/rules/tsPreferFunctionType.js +127 -0
  424. package/src/rules/typeFormatting.js +690 -0
  425. package/src/rules/validTypes.js +466 -0
  426. package/src/rules.d.ts +3203 -0
  427. package/src/tagNames.js +301 -0
  428. package/src/utils/hasReturnValue.js +572 -0
  429. package/typings/babel__eslint-parser.d.ts +1 -0
  430. package/typings/gitdown.d.ts +16 -0
@@ -0,0 +1,110 @@
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+
3
+ export default iterateJsdoc(({
4
+ context,
5
+ report,
6
+ settings,
7
+ utils,
8
+ }) => {
9
+ const {
10
+ defaultDestructuredRootDescription = 'The root object',
11
+ setDefaultDestructuredRootDescription = false,
12
+ } = context.options[0] || {};
13
+
14
+ const functionParameterNames = utils.getFunctionParameterNames();
15
+
16
+ let rootCount = -1;
17
+ utils.forEachPreferredTag('param', (jsdocParameter, targetTagName) => {
18
+ rootCount += jsdocParameter.name.includes('.') ? 0 : 1;
19
+ if (!jsdocParameter.description.trim()) {
20
+ if (Array.isArray(functionParameterNames[rootCount])) {
21
+ if (settings.exemptDestructuredRootsFromChecks) {
22
+ return;
23
+ }
24
+
25
+ if (setDefaultDestructuredRootDescription) {
26
+ utils.reportJSDoc(`Missing root description for @${targetTagName}.`, jsdocParameter, () => {
27
+ utils.changeTag(jsdocParameter, {
28
+ description: defaultDestructuredRootDescription,
29
+ postName: ' ',
30
+ });
31
+ });
32
+ return;
33
+ }
34
+ }
35
+
36
+ report(
37
+ `Missing JSDoc @${targetTagName} "${jsdocParameter.name}" description.`,
38
+ null,
39
+ jsdocParameter,
40
+ );
41
+ }
42
+ });
43
+ }, {
44
+ contextDefaults: true,
45
+ meta: {
46
+ docs: {
47
+ description: 'Requires that each `@param` tag has a `description` value.',
48
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-param-description.md#repos-sticky-header',
49
+ },
50
+ fixable: 'code',
51
+ schema: [
52
+ {
53
+ additionalProperties: false,
54
+ properties: {
55
+ contexts: {
56
+ description: `Set this to an array of strings representing the AST context (or an object with
57
+ optional \`context\` and \`comment\` properties) where you wish the rule to be applied.
58
+
59
+ \`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context.
60
+
61
+ Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`,
62
+ \`FunctionExpression\`). Set to \`"any"\` if you want
63
+ the rule to apply to any JSDoc block throughout your files (as is necessary
64
+ for finding function blocks not attached to a function declaration or
65
+ expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or
66
+ \`@method\`) (including those associated with an \`@interface\`).
67
+
68
+ See the ["AST and Selectors"](../#advanced-ast-and-selectors)
69
+ section of our Advanced docs for more on the expected format.`,
70
+ items: {
71
+ anyOf: [
72
+ {
73
+ type: 'string',
74
+ },
75
+ {
76
+ additionalProperties: false,
77
+ properties: {
78
+ comment: {
79
+ type: 'string',
80
+ },
81
+ context: {
82
+ type: 'string',
83
+ },
84
+ },
85
+ type: 'object',
86
+ },
87
+ ],
88
+ },
89
+ type: 'array',
90
+ },
91
+ defaultDestructuredRootDescription: {
92
+ description: `The description string to set by default for destructured roots. Defaults to
93
+ "The root object".`,
94
+ type: 'string',
95
+ },
96
+ setDefaultDestructuredRootDescription: {
97
+ description: `Whether to set a default destructured root description. For example, you may
98
+ wish to avoid manually having to set the description for a \`@param\`
99
+ corresponding to a destructured root object as it should always be the same
100
+ type of object. Uses \`defaultDestructuredRootDescription\` for the description
101
+ string. Defaults to \`false\`.`,
102
+ type: 'boolean',
103
+ },
104
+ },
105
+ type: 'object',
106
+ },
107
+ ],
108
+ type: 'suggestion',
109
+ },
110
+ });
@@ -0,0 +1,69 @@
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+
3
+ export default iterateJsdoc(({
4
+ report,
5
+ utils,
6
+ }) => {
7
+ utils.forEachPreferredTag('param', (jsdocParameter, targetTagName) => {
8
+ if (jsdocParameter.tag && jsdocParameter.name === '') {
9
+ report(
10
+ `There must be an identifier after @${targetTagName} ${jsdocParameter.type === '' ? 'type' : 'tag'}.`,
11
+ null,
12
+ jsdocParameter,
13
+ );
14
+ }
15
+ });
16
+ }, {
17
+ contextDefaults: true,
18
+ meta: {
19
+ docs: {
20
+ description: 'Requires that all `@param` tags have names.',
21
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-param-name.md#repos-sticky-header',
22
+ },
23
+ schema: [
24
+ {
25
+ additionalProperties: false,
26
+ properties: {
27
+ contexts: {
28
+ description: `Set this to an array of strings representing the AST context (or an object with
29
+ optional \`context\` and \`comment\` properties) where you wish the rule to be applied.
30
+
31
+ \`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context.
32
+
33
+ Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`,
34
+ \`FunctionExpression\`). Set to \`"any"\` if you want
35
+ the rule to apply to any JSDoc block throughout your files (as is necessary
36
+ for finding function blocks not attached to a function declaration or
37
+ expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or
38
+ \`@method\`) (including those associated with an \`@interface\`).
39
+
40
+ See the ["AST and Selectors"](../#advanced-ast-and-selectors)
41
+ section of our Advanced docs for more on the expected format.`,
42
+ items: {
43
+ anyOf: [
44
+ {
45
+ type: 'string',
46
+ },
47
+ {
48
+ additionalProperties: false,
49
+ properties: {
50
+ comment: {
51
+ type: 'string',
52
+ },
53
+ context: {
54
+ type: 'string',
55
+ },
56
+ },
57
+ type: 'object',
58
+ },
59
+ ],
60
+ },
61
+ type: 'array',
62
+ },
63
+ },
64
+ type: 'object',
65
+ },
66
+ ],
67
+ type: 'suggestion',
68
+ },
69
+ });
@@ -0,0 +1,109 @@
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+
3
+ export default iterateJsdoc(({
4
+ context,
5
+ report,
6
+ settings,
7
+ utils,
8
+ }) => {
9
+ const {
10
+ defaultDestructuredRootType = 'object',
11
+ setDefaultDestructuredRootType = false,
12
+ } = context.options[0] || {};
13
+
14
+ const functionParameterNames = utils.getFunctionParameterNames();
15
+
16
+ let rootCount = -1;
17
+ utils.forEachPreferredTag('param', (jsdocParameter, targetTagName) => {
18
+ rootCount += jsdocParameter.name.includes('.') ? 0 : 1;
19
+ if (!jsdocParameter.type) {
20
+ if (Array.isArray(functionParameterNames[rootCount])) {
21
+ if (settings.exemptDestructuredRootsFromChecks) {
22
+ return;
23
+ }
24
+
25
+ if (setDefaultDestructuredRootType) {
26
+ utils.reportJSDoc(`Missing root type for @${targetTagName}.`, jsdocParameter, () => {
27
+ utils.changeTag(jsdocParameter, {
28
+ postType: ' ',
29
+ type: `{${defaultDestructuredRootType}}`,
30
+ });
31
+ });
32
+ return;
33
+ }
34
+ }
35
+
36
+ report(
37
+ `Missing JSDoc @${targetTagName} "${jsdocParameter.name}" type.`,
38
+ null,
39
+ jsdocParameter,
40
+ );
41
+ }
42
+ });
43
+ }, {
44
+ contextDefaults: true,
45
+ meta: {
46
+ docs: {
47
+ description: 'Requires that each `@param` tag has a type value (in curly brackets).',
48
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-param-type.md#repos-sticky-header',
49
+ },
50
+ fixable: 'code',
51
+ schema: [
52
+ {
53
+ additionalProperties: false,
54
+ properties: {
55
+ contexts: {
56
+ description: `Set this to an array of strings representing the AST context (or an object with
57
+ optional \`context\` and \`comment\` properties) where you wish the rule to be applied.
58
+
59
+ \`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context.
60
+
61
+ Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`,
62
+ \`FunctionExpression\`). Set to \`"any"\` if you want
63
+ the rule to apply to any JSDoc block throughout your files (as is necessary
64
+ for finding function blocks not attached to a function declaration or
65
+ expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or
66
+ \`@method\`) (including those associated with an \`@interface\`).
67
+
68
+ See the ["AST and Selectors"](../#advanced-ast-and-selectors)
69
+ section of our Advanced docs for more on the expected format.`,
70
+ items: {
71
+ anyOf: [
72
+ {
73
+ type: 'string',
74
+ },
75
+ {
76
+ additionalProperties: false,
77
+ properties: {
78
+ comment: {
79
+ type: 'string',
80
+ },
81
+ context: {
82
+ type: 'string',
83
+ },
84
+ },
85
+ type: 'object',
86
+ },
87
+ ],
88
+ },
89
+ type: 'array',
90
+ },
91
+ defaultDestructuredRootType: {
92
+ description: 'The type string to set by default for destructured roots. Defaults to "object".',
93
+ type: 'string',
94
+ },
95
+ setDefaultDestructuredRootType: {
96
+ description: `Whether to set a default destructured root type. For example, you may wish
97
+ to avoid manually having to set the type for a \`@param\`
98
+ corresponding to a destructured root object as it is always going to be an
99
+ object. Uses \`defaultDestructuredRootType\` for the type string. Defaults to
100
+ \`false\`.`,
101
+ type: 'boolean',
102
+ },
103
+ },
104
+ type: 'object',
105
+ },
106
+ ],
107
+ type: 'suggestion',
108
+ },
109
+ });
@@ -0,0 +1,66 @@
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+
3
+ export default iterateJsdoc(({
4
+ context,
5
+ utils,
6
+ }) => {
7
+ const propertyAssociatedTags = utils.filterTags(({
8
+ tag,
9
+ }) => {
10
+ return [
11
+ 'namespace', 'typedef',
12
+ ].includes(tag);
13
+ });
14
+ if (!propertyAssociatedTags.length) {
15
+ return;
16
+ }
17
+
18
+ const targetTagName = /** @type {string} */ (utils.getPreferredTagName({
19
+ tagName: 'property',
20
+ }));
21
+
22
+ if (!targetTagName) {
23
+ context.report({
24
+ loc: {
25
+ end: {
26
+ column: 1,
27
+ line: 1,
28
+ },
29
+ start: {
30
+ column: 1,
31
+ line: 1,
32
+ },
33
+ },
34
+ message: 'Cannot prohibit `@property` in the `tagNamePreference` setting while using the `require-property` rule.',
35
+ });
36
+ return;
37
+ }
38
+
39
+ if (utils.hasATag([
40
+ targetTagName,
41
+ ])) {
42
+ return;
43
+ }
44
+
45
+ for (const propertyAssociatedTag of propertyAssociatedTags) {
46
+ if (![
47
+ 'object', 'Object', 'PlainObject',
48
+ ].includes(propertyAssociatedTag.type)) {
49
+ continue;
50
+ }
51
+
52
+ utils.reportJSDoc(`Missing JSDoc @${targetTagName}.`, null, () => {
53
+ utils.addTag(targetTagName);
54
+ });
55
+ }
56
+ }, {
57
+ iterateAllJsdocs: true,
58
+ meta: {
59
+ docs: {
60
+ description: 'Requires that all `@typedef` and `@namespace` tags have `@property` when their type is a plain `object`, `Object`, or `PlainObject`.',
61
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-property.md#repos-sticky-header',
62
+ },
63
+ fixable: 'code',
64
+ type: 'suggestion',
65
+ },
66
+ });
@@ -0,0 +1,25 @@
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+
3
+ export default iterateJsdoc(({
4
+ report,
5
+ utils,
6
+ }) => {
7
+ utils.forEachPreferredTag('property', (jsdoc, targetTagName) => {
8
+ if (!jsdoc.description.trim()) {
9
+ report(
10
+ `Missing JSDoc @${targetTagName} "${jsdoc.name}" description.`,
11
+ null,
12
+ jsdoc,
13
+ );
14
+ }
15
+ });
16
+ }, {
17
+ iterateAllJsdocs: true,
18
+ meta: {
19
+ docs: {
20
+ description: 'Requires that each `@property` tag has a `description` value.',
21
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-property-description.md#repos-sticky-header',
22
+ },
23
+ type: 'suggestion',
24
+ },
25
+ });
@@ -0,0 +1,25 @@
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+
3
+ export default iterateJsdoc(({
4
+ report,
5
+ utils,
6
+ }) => {
7
+ utils.forEachPreferredTag('property', (jsdoc, targetTagName) => {
8
+ if (jsdoc.tag && jsdoc.name === '') {
9
+ report(
10
+ `There must be an identifier after @${targetTagName} ${jsdoc.type === '' ? 'type' : 'tag'}.`,
11
+ null,
12
+ jsdoc,
13
+ );
14
+ }
15
+ });
16
+ }, {
17
+ iterateAllJsdocs: true,
18
+ meta: {
19
+ docs: {
20
+ description: 'Requires that all `@property` tags have names.',
21
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-property-name.md#repos-sticky-header',
22
+ },
23
+ type: 'suggestion',
24
+ },
25
+ });
@@ -0,0 +1,25 @@
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+
3
+ export default iterateJsdoc(({
4
+ report,
5
+ utils,
6
+ }) => {
7
+ utils.forEachPreferredTag('property', (jsdoc, targetTagName) => {
8
+ if (!jsdoc.type) {
9
+ report(
10
+ `Missing JSDoc @${targetTagName} "${jsdoc.name}" type.`,
11
+ null,
12
+ jsdoc,
13
+ );
14
+ }
15
+ });
16
+ }, {
17
+ iterateAllJsdocs: true,
18
+ meta: {
19
+ docs: {
20
+ description: 'Requires that each `@property` tag has a type value (in curly brackets).',
21
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-property-type.md#repos-sticky-header',
22
+ },
23
+ type: 'suggestion',
24
+ },
25
+ });
@@ -0,0 +1,246 @@
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+
3
+ /**
4
+ * Checks if a node or its children contain Promise rejection patterns
5
+ * @param {import('eslint').Rule.Node} node
6
+ * @param {boolean} [innerFunction]
7
+ * @param {boolean} [isAsync]
8
+ * @returns {boolean}
9
+ */
10
+ // eslint-disable-next-line complexity -- Temporary
11
+ const hasRejectValue = (node, innerFunction, isAsync) => {
12
+ if (!node) {
13
+ return false;
14
+ }
15
+
16
+ switch (node.type) {
17
+ case 'ArrowFunctionExpression':
18
+ case 'FunctionDeclaration':
19
+ case 'FunctionExpression': {
20
+ // For inner functions in async contexts, check if they throw
21
+ // (they could be called and cause rejection)
22
+ if (innerFunction) {
23
+ // Check inner functions for throws - if called from async context, throws become rejections
24
+ const innerIsAsync = node.async;
25
+ // Pass isAsync=true if the inner function is async OR if we're already in an async context
26
+ return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.body), false, innerIsAsync || isAsync);
27
+ }
28
+
29
+ // This is the top-level function we're checking
30
+ return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.body), true, node.async);
31
+ }
32
+
33
+ case 'BlockStatement': {
34
+ return node.body.some((bodyNode) => {
35
+ return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (bodyNode), innerFunction, isAsync);
36
+ });
37
+ }
38
+
39
+ case 'CallExpression': {
40
+ // Check for Promise.reject()
41
+ if (node.callee.type === 'MemberExpression' &&
42
+ node.callee.object.type === 'Identifier' &&
43
+ node.callee.object.name === 'Promise' &&
44
+ node.callee.property.type === 'Identifier' &&
45
+ node.callee.property.name === 'reject') {
46
+ return true;
47
+ }
48
+
49
+ // Check for reject() call (in Promise executor context)
50
+ if (node.callee.type === 'Identifier' && node.callee.name === 'reject') {
51
+ return true;
52
+ }
53
+
54
+ // Check if this is calling an inner function that might reject
55
+ if (innerFunction && node.callee.type === 'Identifier') {
56
+ // We found a function call inside - check if it could be calling a function that rejects
57
+ // We'll handle this in function body traversal
58
+ return false;
59
+ }
60
+
61
+ return false;
62
+ }
63
+
64
+ case 'DoWhileStatement':
65
+ case 'ForInStatement':
66
+ case 'ForOfStatement':
67
+ case 'ForStatement':
68
+ case 'LabeledStatement':
69
+ case 'WhileStatement':
70
+
71
+ case 'WithStatement': {
72
+ return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.body), innerFunction, isAsync);
73
+ }
74
+
75
+ case 'ExpressionStatement': {
76
+ return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.expression), innerFunction, isAsync);
77
+ }
78
+
79
+ case 'IfStatement': {
80
+ return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.consequent), innerFunction, isAsync) || hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.alternate), innerFunction, isAsync);
81
+ }
82
+
83
+ case 'NewExpression': {
84
+ // Check for new Promise((resolve, reject) => { reject(...) })
85
+ if (node.callee.type === 'Identifier' && node.callee.name === 'Promise' && node.arguments.length > 0) {
86
+ const executor = node.arguments[0];
87
+ if (executor.type === 'ArrowFunctionExpression' || executor.type === 'FunctionExpression') {
88
+ // Check if the executor has reject() calls
89
+ return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (executor.body), false, false);
90
+ }
91
+ }
92
+
93
+ return false;
94
+ }
95
+
96
+ case 'ReturnStatement': {
97
+ if (node.argument) {
98
+ return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.argument), innerFunction, isAsync);
99
+ }
100
+
101
+ return false;
102
+ }
103
+
104
+ case 'SwitchStatement': {
105
+ return node.cases.some(
106
+ (someCase) => {
107
+ return someCase.consequent.some((nde) => {
108
+ return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (nde), innerFunction, isAsync);
109
+ });
110
+ },
111
+ );
112
+ }
113
+
114
+ // Throw statements in async functions become rejections
115
+ case 'ThrowStatement': {
116
+ return isAsync === true;
117
+ }
118
+
119
+ case 'TryStatement': {
120
+ return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.handler && node.handler.body), innerFunction, isAsync) ||
121
+ hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.finalizer), innerFunction, isAsync);
122
+ }
123
+
124
+ default: {
125
+ return false;
126
+ }
127
+ }
128
+ };
129
+
130
+ /**
131
+ * We can skip checking for a rejects value, in case the documentation is inherited
132
+ * or the method is abstract.
133
+ * @param {import('../iterateJsdoc.js').Utils} utils
134
+ * @returns {boolean}
135
+ */
136
+ const canSkip = (utils) => {
137
+ return utils.hasATag([
138
+ 'abstract',
139
+ 'virtual',
140
+ 'type',
141
+ ]) ||
142
+ utils.avoidDocs();
143
+ };
144
+
145
+ export default iterateJsdoc(({
146
+ node,
147
+ report,
148
+ utils,
149
+ }) => {
150
+ if (canSkip(utils)) {
151
+ return;
152
+ }
153
+
154
+ const tagName = /** @type {string} */ (utils.getPreferredTagName({
155
+ tagName: 'rejects',
156
+ }));
157
+ if (!tagName) {
158
+ return;
159
+ }
160
+
161
+ const tags = utils.getTags(tagName);
162
+ const iteratingFunction = utils.isIteratingFunction();
163
+
164
+ const [
165
+ tag,
166
+ ] = tags;
167
+ const missingRejectsTag = typeof tag === 'undefined' || tag === null;
168
+
169
+ const shouldReport = () => {
170
+ if (!missingRejectsTag) {
171
+ return false;
172
+ }
173
+
174
+ // Check if this is an async function or returns a Promise
175
+ const isAsync = utils.isAsync();
176
+ if (!isAsync && !iteratingFunction) {
177
+ return false;
178
+ }
179
+
180
+ // For async functions, check for throw statements
181
+ // For regular functions, check for Promise.reject or reject calls
182
+ return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node));
183
+ };
184
+
185
+ if (shouldReport()) {
186
+ report('Promise-rejecting function requires `@rejects` tag');
187
+ }
188
+ }, {
189
+ contextDefaults: true,
190
+ meta: {
191
+ docs: {
192
+ description: 'Requires that Promise rejections are documented with `@rejects` tags.',
193
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-rejects.md#repos-sticky-header',
194
+ },
195
+ schema: [
196
+ {
197
+ additionalProperties: false,
198
+ properties: {
199
+ contexts: {
200
+ description: `Set this to an array of strings representing the AST context
201
+ (or objects with optional \`context\` and \`comment\` properties) where you wish
202
+ the rule to be applied.
203
+
204
+ \`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context.
205
+
206
+ Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`,
207
+ \`FunctionExpression\`).`,
208
+ items: {
209
+ anyOf: [
210
+ {
211
+ type: 'string',
212
+ },
213
+ {
214
+ additionalProperties: false,
215
+ properties: {
216
+ comment: {
217
+ type: 'string',
218
+ },
219
+ context: {
220
+ type: 'string',
221
+ },
222
+ },
223
+ type: 'object',
224
+ },
225
+ ],
226
+ },
227
+ type: 'array',
228
+ },
229
+ exemptedBy: {
230
+ description: `Array of tags (e.g., \`['type']\`) whose presence on the
231
+ document block avoids the need for a \`@rejects\`. Defaults to an array
232
+ with \`abstract\`, \`virtual\`, and \`type\`. If you set this array, it will overwrite the default,
233
+ so be sure to add back those tags if you wish their presence to cause
234
+ exemption of the rule.`,
235
+ items: {
236
+ type: 'string',
237
+ },
238
+ type: 'array',
239
+ },
240
+ },
241
+ type: 'object',
242
+ },
243
+ ],
244
+ type: 'suggestion',
245
+ },
246
+ });