@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,848 @@
1
+ import iterateJsdoc from '../iterateJsdoc.js';
2
+
3
+ /**
4
+ * @typedef {[string, boolean, () => RootNamerReturn]} RootNamerReturn
5
+ */
6
+
7
+ /**
8
+ * @param {string[]} desiredRoots
9
+ * @param {number} currentIndex
10
+ * @returns {RootNamerReturn}
11
+ */
12
+ const rootNamer = (desiredRoots, currentIndex) => {
13
+ /** @type {string} */
14
+ let name;
15
+ let idx = currentIndex;
16
+ const incremented = desiredRoots.length <= 1;
17
+ if (incremented) {
18
+ const base = desiredRoots[0];
19
+ const suffix = idx++;
20
+ name = `${base}${suffix}`;
21
+ } else {
22
+ name = /** @type {string} */ (desiredRoots.shift());
23
+ }
24
+
25
+ return [
26
+ name,
27
+ incremented,
28
+ () => {
29
+ return rootNamer(desiredRoots, idx);
30
+ },
31
+ ];
32
+ };
33
+
34
+ /* eslint-disable complexity -- Temporary */
35
+ export default iterateJsdoc(({
36
+ context,
37
+ jsdoc,
38
+ node,
39
+ utils,
40
+ }) => {
41
+ /* eslint-enable complexity -- Temporary */
42
+ if (utils.avoidDocs()) {
43
+ return;
44
+ }
45
+
46
+ // Param type is specified by type in @type
47
+ if (utils.hasTag('type')) {
48
+ return;
49
+ }
50
+
51
+ const {
52
+ autoIncrementBase = 0,
53
+ checkDestructured = true,
54
+ checkDestructuredRoots = true,
55
+ checkRestProperty = false,
56
+ checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',
57
+ enableFixer = true,
58
+ enableRestElementFixer = true,
59
+ enableRootFixer = true,
60
+ ignoreWhenAllParamsMissing = false,
61
+ interfaceExemptsParamsCheck = false,
62
+ unnamedRootBase = [
63
+ 'root',
64
+ ],
65
+ useDefaultObjectProperties = false,
66
+ } = context.options[0] || {};
67
+
68
+ if (interfaceExemptsParamsCheck && node &&
69
+ node.parent?.type === 'VariableDeclarator' &&
70
+ 'typeAnnotation' in node.parent.id && node.parent.id.typeAnnotation) {
71
+ return;
72
+ }
73
+
74
+ const preferredTagName = /** @type {string} */ (utils.getPreferredTagName({
75
+ tagName: 'param',
76
+ }));
77
+ if (!preferredTagName) {
78
+ return;
79
+ }
80
+
81
+ const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties, interfaceExemptsParamsCheck);
82
+ if (!functionParameterNames.length) {
83
+ return;
84
+ }
85
+
86
+ const jsdocParameterNames =
87
+ /**
88
+ * @type {{
89
+ * idx: import('../iterateJsdoc.js').Integer;
90
+ * name: string;
91
+ * type: string;
92
+ * }[]}
93
+ */ (utils.getJsdocTagsDeep(preferredTagName));
94
+
95
+ if (ignoreWhenAllParamsMissing && !jsdocParameterNames.length) {
96
+ return;
97
+ }
98
+
99
+ const shallowJsdocParameterNames = jsdocParameterNames.filter((tag) => {
100
+ return !tag.name.includes('.');
101
+ }).map((tag, idx) => {
102
+ return {
103
+ ...tag,
104
+ idx,
105
+ };
106
+ });
107
+
108
+ const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);
109
+
110
+ /**
111
+ * @type {{
112
+ * functionParameterIdx: import('../iterateJsdoc.js').Integer,
113
+ * functionParameterName: string,
114
+ * inc: boolean|undefined,
115
+ * remove?: true,
116
+ * type?: string|undefined
117
+ * }[]}
118
+ */
119
+ const missingTags = [];
120
+ const flattenedRoots = utils.flattenRoots(functionParameterNames).names;
121
+
122
+ /**
123
+ * @type {{
124
+ * [key: string]: import('../iterateJsdoc.js').Integer
125
+ * }}
126
+ */
127
+ const paramIndex = {};
128
+
129
+ /**
130
+ * @param {string} cur
131
+ * @returns {boolean}
132
+ */
133
+ const hasParamIndex = (cur) => {
134
+ return utils.dropPathSegmentQuotes(String(cur)) in paramIndex;
135
+ };
136
+
137
+ /**
138
+ *
139
+ * @param {string|number|undefined} cur
140
+ * @returns {import('../iterateJsdoc.js').Integer}
141
+ */
142
+ const getParamIndex = (cur) => {
143
+ return paramIndex[utils.dropPathSegmentQuotes(String(cur))];
144
+ };
145
+
146
+ /**
147
+ *
148
+ * @param {string} cur
149
+ * @param {import('../iterateJsdoc.js').Integer} idx
150
+ * @returns {void}
151
+ */
152
+ const setParamIndex = (cur, idx) => {
153
+ paramIndex[utils.dropPathSegmentQuotes(String(cur))] = idx;
154
+ };
155
+
156
+ for (const [
157
+ idx,
158
+ cur,
159
+ ] of flattenedRoots.entries()) {
160
+ setParamIndex(cur, idx);
161
+ }
162
+
163
+ /**
164
+ *
165
+ * @param {(import('@es-joy/jsdoccomment').JsdocTagWithInline & {
166
+ * newAdd?: boolean
167
+ * })[]} jsdocTags
168
+ * @param {import('../iterateJsdoc.js').Integer} indexAtFunctionParams
169
+ * @returns {{
170
+ * foundIndex: import('../iterateJsdoc.js').Integer,
171
+ * tagLineCount: import('../iterateJsdoc.js').Integer,
172
+ * }}
173
+ */
174
+ const findExpectedIndex = (jsdocTags, indexAtFunctionParams) => {
175
+ // Get the parameters that come after the current index in the flattened order
176
+ const remainingFlattenedRoots = flattenedRoots.slice((indexAtFunctionParams || 0) + 1);
177
+
178
+ // Find the first existing tag that comes after the current parameter in the flattened order
179
+ const foundIndex = jsdocTags.findIndex(({
180
+ name,
181
+ newAdd,
182
+ }) => {
183
+ if (newAdd) {
184
+ return false;
185
+ }
186
+
187
+ // Check if the tag name matches any of the remaining flattened roots
188
+ return remainingFlattenedRoots.some((flattenedRoot) => {
189
+ // The flattened roots don't have the root prefix (e.g., "bar", "bar.baz")
190
+ // but JSDoc tags do (e.g., "root0", "root0.bar", "root0.bar.baz")
191
+ // So we need to check if the tag name ends with the flattened root
192
+
193
+ // Check if tag name ends with ".<flattenedRoot>"
194
+ if (name.endsWith(`.${flattenedRoot}`)) {
195
+ return true;
196
+ }
197
+
198
+ // Also check if tag name exactly matches the flattenedRoot
199
+ // (for single-level params)
200
+ if (name === flattenedRoot) {
201
+ return true;
202
+ }
203
+
204
+ return false;
205
+ });
206
+ });
207
+
208
+ const tags = foundIndex > -1 ?
209
+ jsdocTags.slice(0, foundIndex) :
210
+ jsdocTags.filter(({
211
+ tag,
212
+ }) => {
213
+ return tag === preferredTagName;
214
+ });
215
+
216
+ let tagLineCount = 0;
217
+ for (const {
218
+ source,
219
+ } of tags) {
220
+ for (const {
221
+ tokens: {
222
+ end,
223
+ },
224
+ } of source) {
225
+ if (!end) {
226
+ tagLineCount++;
227
+ }
228
+ }
229
+ }
230
+
231
+ return {
232
+ foundIndex,
233
+ tagLineCount,
234
+ };
235
+ };
236
+
237
+ let [
238
+ nextRootName,
239
+ incremented,
240
+ namer,
241
+ ] = rootNamer([
242
+ ...unnamedRootBase,
243
+ ], autoIncrementBase);
244
+
245
+ const thisOffset = functionParameterNames[0] === 'this' ? 1 : 0;
246
+
247
+ for (const [
248
+ functionParameterIdx,
249
+ functionParameterName,
250
+ ] of functionParameterNames.entries()) {
251
+ let inc;
252
+ if (Array.isArray(functionParameterName)) {
253
+ const matchedJsdoc = shallowJsdocParameterNames[functionParameterIdx - thisOffset];
254
+
255
+ /** @type {string} */
256
+ let rootName;
257
+ if (functionParameterName[0]) {
258
+ rootName = functionParameterName[0];
259
+ } else if (matchedJsdoc && matchedJsdoc.name) {
260
+ rootName = matchedJsdoc.name;
261
+ if (matchedJsdoc.type && matchedJsdoc.type.search(checkTypesRegex) === -1) {
262
+ continue;
263
+ }
264
+ } else {
265
+ rootName = nextRootName;
266
+ inc = incremented;
267
+ }
268
+
269
+ [
270
+ nextRootName,
271
+ incremented,
272
+ namer,
273
+ ] = namer();
274
+
275
+ const {
276
+ hasPropertyRest,
277
+ hasRestElement,
278
+ names,
279
+ rests,
280
+ } = /**
281
+ * @type {import('../jsdocUtils.js').FlattendRootInfo & {
282
+ * annotationParamName?: string | undefined;
283
+ * }}
284
+ */ (functionParameterName[1]);
285
+ const notCheckingNames = [];
286
+ if (!enableRestElementFixer && hasRestElement) {
287
+ continue;
288
+ }
289
+
290
+ if (!checkDestructuredRoots) {
291
+ continue;
292
+ }
293
+
294
+ for (const [
295
+ idx,
296
+ paramName,
297
+ ] of names.entries()) {
298
+ // Add root if the root name is not in the docs (and is not already
299
+ // in the tags to be fixed)
300
+ if (!jsdocParameterNames.find(({
301
+ name,
302
+ }) => {
303
+ return name === rootName;
304
+ }) && !missingTags.find(({
305
+ functionParameterName: fpn,
306
+ }) => {
307
+ return fpn === rootName;
308
+ })) {
309
+ const emptyParamIdx = jsdocParameterNames.findIndex(({
310
+ name,
311
+ }) => {
312
+ return !name;
313
+ });
314
+
315
+ if (emptyParamIdx > -1) {
316
+ missingTags.push({
317
+ functionParameterIdx: emptyParamIdx,
318
+ functionParameterName: rootName,
319
+ inc,
320
+ remove: true,
321
+ });
322
+ } else {
323
+ missingTags.push({
324
+ functionParameterIdx: hasParamIndex(rootName) ?
325
+ getParamIndex(rootName) :
326
+ getParamIndex(paramName),
327
+ functionParameterName: rootName,
328
+ inc,
329
+ });
330
+ }
331
+ }
332
+
333
+ if (!checkDestructured) {
334
+ continue;
335
+ }
336
+
337
+ if (!checkRestProperty && rests[idx]) {
338
+ continue;
339
+ }
340
+
341
+ const fullParamName = `${rootName}.${paramName}`;
342
+
343
+ const notCheckingName = jsdocParameterNames.find(({
344
+ name,
345
+ type: paramType,
346
+ }) => {
347
+ return utils.comparePaths(name)(fullParamName) && paramType.search(checkTypesRegex) === -1 && paramType !== '';
348
+ });
349
+
350
+ if (notCheckingName !== undefined) {
351
+ notCheckingNames.push(notCheckingName.name);
352
+ }
353
+
354
+ if (notCheckingNames.find((name) => {
355
+ return fullParamName.startsWith(name);
356
+ })) {
357
+ continue;
358
+ }
359
+
360
+ if (jsdocParameterNames && !jsdocParameterNames.find(({
361
+ name,
362
+ }) => {
363
+ return utils.comparePaths(name)(fullParamName);
364
+ })) {
365
+ missingTags.push({
366
+ functionParameterIdx: getParamIndex(
367
+ functionParameterName[0] ? fullParamName : paramName,
368
+ ),
369
+ functionParameterName: fullParamName,
370
+ inc,
371
+ type: hasRestElement && !hasPropertyRest ? '{...any}' : undefined,
372
+ });
373
+ }
374
+ }
375
+
376
+ continue;
377
+ }
378
+
379
+ /** @type {string} */
380
+ let funcParamName;
381
+ let type;
382
+ if (typeof functionParameterName === 'object') {
383
+ if (!enableRestElementFixer && functionParameterName.restElement) {
384
+ continue;
385
+ }
386
+
387
+ funcParamName = /** @type {string} */ (functionParameterName.name);
388
+ type = '{...any}';
389
+ } else {
390
+ funcParamName = /** @type {string} */ (functionParameterName);
391
+ }
392
+
393
+ if (jsdocParameterNames && !jsdocParameterNames.find(({
394
+ name,
395
+ }) => {
396
+ return name === funcParamName;
397
+ }) && funcParamName !== 'this') {
398
+ missingTags.push({
399
+ functionParameterIdx: getParamIndex(funcParamName),
400
+ functionParameterName: funcParamName,
401
+ inc,
402
+ type,
403
+ });
404
+ }
405
+ }
406
+
407
+ /**
408
+ *
409
+ * @param {{
410
+ * functionParameterIdx: import('../iterateJsdoc.js').Integer,
411
+ * functionParameterName: string,
412
+ * remove?: true,
413
+ * inc?: boolean,
414
+ * type?: string
415
+ * }} cfg
416
+ */
417
+ const fix = ({
418
+ functionParameterIdx,
419
+ functionParameterName,
420
+ inc,
421
+ remove,
422
+ type,
423
+ }) => {
424
+ if (inc && !enableRootFixer) {
425
+ return;
426
+ }
427
+
428
+ /**
429
+ *
430
+ * @param {import('../iterateJsdoc.js').Integer} tagIndex
431
+ * @param {import('../iterateJsdoc.js').Integer} sourceIndex
432
+ * @param {import('../iterateJsdoc.js').Integer} spliceCount
433
+ * @returns {void}
434
+ */
435
+ const createTokens = (tagIndex, sourceIndex, spliceCount) => {
436
+ // console.log(sourceIndex, tagIndex, jsdoc.tags, jsdoc.source);
437
+ const tokens = {
438
+ number: sourceIndex + 1,
439
+ source: '',
440
+ tokens: {
441
+ delimiter: '*',
442
+ description: '',
443
+ end: '',
444
+ lineEnd: '',
445
+ name: functionParameterName,
446
+ newAdd: true,
447
+ postDelimiter: ' ',
448
+ postName: '',
449
+ postTag: ' ',
450
+ postType: type ? ' ' : '',
451
+ start: jsdoc.source[sourceIndex].tokens.start,
452
+ tag: `@${preferredTagName}`,
453
+ type: type ?? '',
454
+ },
455
+ };
456
+
457
+ /**
458
+ * @type {(import('@es-joy/jsdoccomment').JsdocTagWithInline & {
459
+ * newAdd?: true
460
+ * })[]}
461
+ */ (jsdoc.tags).splice(tagIndex, spliceCount, {
462
+ description: '',
463
+ inlineTags: [],
464
+ name: functionParameterName,
465
+ newAdd: true,
466
+ optional: false,
467
+ problems: [],
468
+ source: [
469
+ tokens,
470
+ ],
471
+ tag: preferredTagName,
472
+ type: type ?? '',
473
+ });
474
+ const firstNumber = jsdoc.source[0].number;
475
+ jsdoc.source.splice(sourceIndex, spliceCount, tokens);
476
+ for (const [
477
+ idx,
478
+ src,
479
+ ] of jsdoc.source.slice(sourceIndex).entries()) {
480
+ src.number = firstNumber + sourceIndex + idx;
481
+ }
482
+ };
483
+
484
+ const offset = jsdoc.source.findIndex(({
485
+ tokens: {
486
+ end,
487
+ tag,
488
+ },
489
+ }) => {
490
+ return tag || end;
491
+ });
492
+ if (remove) {
493
+ createTokens(functionParameterIdx, offset + functionParameterIdx, 1);
494
+ } else {
495
+ const {
496
+ foundIndex,
497
+ tagLineCount: expectedIdx,
498
+ } =
499
+ findExpectedIndex(jsdoc.tags, functionParameterIdx);
500
+
501
+ const firstParamLine = jsdoc.source.findIndex(({
502
+ tokens,
503
+ }) => {
504
+ return tokens.tag === `@${preferredTagName}`;
505
+ });
506
+ const baseOffset = foundIndex > -1 || firstParamLine === -1 ?
507
+ offset :
508
+ firstParamLine;
509
+
510
+ createTokens(expectedIdx, baseOffset + expectedIdx, 0);
511
+ }
512
+ };
513
+
514
+ /**
515
+ * @returns {void}
516
+ */
517
+ const fixer = () => {
518
+ for (const missingTag of missingTags) {
519
+ fix(missingTag);
520
+ }
521
+ };
522
+
523
+ if (missingTags.length && jsdoc.source.length === 1) {
524
+ utils.makeMultiline();
525
+ }
526
+
527
+ for (const {
528
+ functionParameterName,
529
+ } of missingTags) {
530
+ utils.reportJSDoc(
531
+ `Missing JSDoc @${preferredTagName} "${functionParameterName}" declaration.`,
532
+ null,
533
+ enableFixer ? fixer : null,
534
+ );
535
+ }
536
+ }, {
537
+ contextDefaults: true,
538
+ meta: {
539
+ docs: {
540
+ description: 'Requires that all function parameters are documented with a `@param` tag.',
541
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-param.md#repos-sticky-header',
542
+ },
543
+ fixable: 'code',
544
+ schema: [
545
+ {
546
+ additionalProperties: false,
547
+ properties: {
548
+ autoIncrementBase: {
549
+ default: 0,
550
+ description: `Numeric to indicate the number at which to begin auto-incrementing roots.
551
+ Defaults to \`0\`.`,
552
+ type: 'integer',
553
+ },
554
+ checkConstructors: {
555
+ default: true,
556
+ description: `A value indicating whether \`constructor\`s should be checked. Defaults to
557
+ \`true\`.`,
558
+ type: 'boolean',
559
+ },
560
+ checkDestructured: {
561
+ default: true,
562
+ description: 'Whether to require destructured properties. Defaults to `true`.',
563
+ type: 'boolean',
564
+ },
565
+ checkDestructuredRoots: {
566
+ default: true,
567
+ description: `Whether to check the existence of a corresponding \`@param\` for root objects
568
+ of destructured properties (e.g., that for \`function ({a, b}) {}\`, that there
569
+ is something like \`@param myRootObj\` defined that can correspond to
570
+ the \`{a, b}\` object parameter).
571
+
572
+ If \`checkDestructuredRoots\` is \`false\`, \`checkDestructured\` will also be
573
+ implied to be \`false\` (i.e., the inside of the roots will not be checked
574
+ either, e.g., it will also not complain if \`a\` or \`b\` do not have their own
575
+ documentation). Defaults to \`true\`.`,
576
+ type: 'boolean',
577
+ },
578
+ checkGetters: {
579
+ default: false,
580
+ description: 'A value indicating whether getters should be checked. Defaults to `false`.',
581
+ type: 'boolean',
582
+ },
583
+ checkRestProperty: {
584
+ default: false,
585
+ description: `If set to \`true\`, will report (and add fixer insertions) for missing rest
586
+ properties. Defaults to \`false\`.
587
+
588
+ If set to \`true\`, note that you can still document the subproperties of the
589
+ rest property using other jsdoc features, e.g., \`@typedef\`:
590
+
591
+ \`\`\`js
592
+ /**
593
+ * @typedef ExtraOptions
594
+ * @property innerProp1
595
+ * @property innerProp2
596
+ */
597
+
598
+ /**
599
+ * @param cfg
600
+ * @param cfg.num
601
+ * @param {ExtraOptions} extra
602
+ */
603
+ function quux ({num, ...extra}) {
604
+ }
605
+ \`\`\`
606
+
607
+ Setting this option to \`false\` (the default) may be useful in cases where
608
+ you already have separate \`@param\` definitions for each of the properties
609
+ within the rest property.
610
+
611
+ For example, with the option disabled, this will not give an error despite
612
+ \`extra\` not having any definition:
613
+
614
+ \`\`\`js
615
+ /**
616
+ * @param cfg
617
+ * @param cfg.num
618
+ */
619
+ function quux ({num, ...extra}) {
620
+ }
621
+ \`\`\`
622
+
623
+ Nor will this:
624
+
625
+ \`\`\`js
626
+ /**
627
+ * @param cfg
628
+ * @param cfg.num
629
+ * @param cfg.innerProp1
630
+ * @param cfg.innerProp2
631
+ */
632
+ function quux ({num, ...extra}) {
633
+ }
634
+ \`\`\``,
635
+ type: 'boolean',
636
+ },
637
+ checkSetters: {
638
+ default: false,
639
+ description: 'A value indicating whether setters should be checked. Defaults to `false`.',
640
+ type: 'boolean',
641
+ },
642
+ checkTypesPattern: {
643
+ description: `When one specifies a type, unless it is of a generic type, like \`object\`
644
+ or \`array\`, it may be considered unnecessary to have that object's
645
+ destructured components required, especially where generated docs will
646
+ link back to the specified type. For example:
647
+
648
+ \`\`\`js
649
+ /**
650
+ * @param {SVGRect} bbox - a SVGRect
651
+ */
652
+ export const bboxToObj = function ({x, y, width, height}) {
653
+ return {x, y, width, height};
654
+ };
655
+ \`\`\`
656
+
657
+ By default \`checkTypesPattern\` is set to
658
+ \`/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/v\`,
659
+ meaning that destructuring will be required only if the type of the \`@param\`
660
+ (the text between curly brackets) is a match for "Object" or "Array" (with or
661
+ without initial caps), "PlainObject", or "GenericObject", "GenericArray" (or
662
+ if no type is present). So in the above example, the lack of a match will
663
+ mean that no complaint will be given about the undocumented destructured
664
+ parameters.
665
+
666
+ Note that the \`/\` delimiters are optional, but necessary to add flags.
667
+
668
+ Defaults to using (only) the \`v\` flag, so to add your own flags, encapsulate
669
+ your expression as a string, but like a literal, e.g., \`/^object$/vi\`.
670
+
671
+ You could set this regular expression to a more expansive list, or you
672
+ could restrict it such that even types matching those strings would not
673
+ need destructuring.`,
674
+ type: 'string',
675
+ },
676
+ contexts: {
677
+ description: `Set this to an array of strings representing the AST context (or an object with
678
+ optional \`context\` and \`comment\` properties) where you wish the rule to be applied.
679
+
680
+ \`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context.
681
+
682
+ Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`,
683
+ \`FunctionExpression\`). May be useful for adding such as
684
+ \`TSMethodSignature\` in TypeScript or restricting the contexts
685
+ which are checked.
686
+
687
+ See the ["AST and Selectors"](../#advanced-ast-and-selectors)
688
+ section of our Advanced docs for more on the expected format.`,
689
+ items: {
690
+ anyOf: [
691
+ {
692
+ type: 'string',
693
+ },
694
+ {
695
+ additionalProperties: false,
696
+ properties: {
697
+ comment: {
698
+ type: 'string',
699
+ },
700
+ context: {
701
+ type: 'string',
702
+ },
703
+ },
704
+ type: 'object',
705
+ },
706
+ ],
707
+ },
708
+ type: 'array',
709
+ },
710
+ enableFixer: {
711
+ description: 'Whether to enable the fixer. Defaults to `true`.',
712
+ type: 'boolean',
713
+ },
714
+ enableRestElementFixer: {
715
+ description: `Whether to enable the rest element fixer.
716
+
717
+ The fixer will automatically report/insert
718
+ [JSDoc repeatable parameters](https://jsdoc.app/tags-param.html#multiple-types-and-repeatable-parameters)
719
+ if missing.
720
+
721
+ \`\`\`js
722
+ /**
723
+ * @param {GenericArray} cfg
724
+ * @param {number} cfg."0"
725
+ */
726
+ function baar ([a, ...extra]) {
727
+ //
728
+ }
729
+ \`\`\`
730
+
731
+ ...becomes:
732
+
733
+ \`\`\`js
734
+ /**
735
+ * @param {GenericArray} cfg
736
+ * @param {number} cfg."0"
737
+ * @param {...any} cfg."1"
738
+ */
739
+ function baar ([a, ...extra]) {
740
+ //
741
+ }
742
+ \`\`\`
743
+
744
+ Note that the type \`any\` is included since we don't know of any specific
745
+ type to use.
746
+
747
+ Defaults to \`true\`.`,
748
+ type: 'boolean',
749
+ },
750
+ enableRootFixer: {
751
+ description: `Whether to enable the auto-adding of incrementing roots.
752
+
753
+ The default behavior of \`true\` is for "root" to be auto-inserted for missing
754
+ roots, followed by a 0-based auto-incrementing number.
755
+
756
+ So for:
757
+
758
+ \`\`\`js
759
+ function quux ({foo}, {bar}, {baz}) {
760
+ }
761
+ \`\`\`
762
+
763
+ ...the default JSDoc that would be added if the fixer is enabled would be:
764
+
765
+ \`\`\`js
766
+ /**
767
+ * @param root0
768
+ * @param root0.foo
769
+ * @param root1
770
+ * @param root1.bar
771
+ * @param root2
772
+ * @param root2.baz
773
+ */
774
+ \`\`\`
775
+
776
+ Has no effect if \`enableFixer\` is set to \`false\`.`,
777
+ type: 'boolean',
778
+ },
779
+ exemptedBy: {
780
+ description: `Array of tags (e.g., \`['type']\`) whose presence on the document block
781
+ avoids the need for a \`@param\`. Defaults to an array with
782
+ \`inheritdoc\`. If you set this array, it will overwrite the default,
783
+ so be sure to add back \`inheritdoc\` if you wish its presence to cause
784
+ exemption of the rule.`,
785
+ items: {
786
+ type: 'string',
787
+ },
788
+ type: 'array',
789
+ },
790
+ ignoreWhenAllParamsMissing: {
791
+ description: `Set to \`true\` to ignore reporting when all params are missing. Defaults to
792
+ \`false\`.`,
793
+ type: 'boolean',
794
+ },
795
+ interfaceExemptsParamsCheck: {
796
+ description: `Set if you wish TypeScript interfaces to exempt checks for the existence of
797
+ \`@param\`'s.
798
+
799
+ Will check for a type defining the function itself (on a variable
800
+ declaration) or if there is a single destructured object with a type.
801
+ Defaults to \`false\`.`,
802
+ type: 'boolean',
803
+ },
804
+ unnamedRootBase: {
805
+ description: `An array of root names to use in the fixer when roots are missing. Defaults
806
+ to \`['root']\`. Note that only when all items in the array besides the last
807
+ are exhausted will auto-incrementing occur. So, with
808
+ \`unnamedRootBase: ['arg', 'config']\`, the following:
809
+
810
+ \`\`\`js
811
+ function quux ({foo}, [bar], {baz}) {
812
+ }
813
+ \`\`\`
814
+
815
+ ...will get the following JSDoc block added:
816
+
817
+ \`\`\`js
818
+ /**
819
+ * @param arg
820
+ * @param arg.foo
821
+ * @param config0
822
+ * @param config0."0" (\`bar\`)
823
+ * @param config1
824
+ * @param config1.baz
825
+ */
826
+ \`\`\``,
827
+ items: {
828
+ type: 'string',
829
+ },
830
+ type: 'array',
831
+ },
832
+ useDefaultObjectProperties: {
833
+ description: `Set to \`true\` if you wish to expect documentation of properties on objects
834
+ supplied as default values. Defaults to \`false\`.`,
835
+ type: 'boolean',
836
+ },
837
+ },
838
+ type: 'object',
839
+ },
840
+ ],
841
+ type: 'suggestion',
842
+ },
843
+
844
+ // We cannot cache comment nodes as the contexts may recur with the
845
+ // same comment node but a different JS node, and we may need the different
846
+ // JS node to ensure we iterate its context
847
+ noTracking: true,
848
+ });