eslint-plugin-jsdoc 53.0.1 → 54.0.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 (359) hide show
  1. package/dist/WarnSettings.cjs +35 -18
  2. package/dist/WarnSettings.cjs.map +1 -1
  3. package/dist/alignTransform.cjs +305 -224
  4. package/dist/alignTransform.cjs.map +1 -1
  5. package/dist/defaultTagOrder.cjs +43 -132
  6. package/dist/defaultTagOrder.cjs.map +1 -1
  7. package/dist/exportParser.cjs +696 -478
  8. package/dist/exportParser.cjs.map +1 -1
  9. package/dist/generateRule.cjs +242 -0
  10. package/dist/generateRule.cjs.map +1 -0
  11. package/dist/getDefaultTagStructureForMode.cjs +288 -184
  12. package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
  13. package/dist/getJsdocProcessorPlugin.cjs +550 -364
  14. package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
  15. package/dist/getJsdocProcessorPlugin.d.ts +65 -68
  16. package/dist/getJsdocProcessorPlugin.d.ts.map +1 -1
  17. package/dist/index.cjs +410 -2
  18. package/dist/index.cjs.map +1 -0
  19. package/dist/index.d.ts +17 -2
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/iterateJsdoc.cjs +2005 -1539
  22. package/dist/iterateJsdoc.cjs.map +1 -1
  23. package/dist/iterateJsdoc.d.ts +350 -359
  24. package/dist/iterateJsdoc.d.ts.map +1 -1
  25. package/dist/jsdocUtils.cjs +1376 -1009
  26. package/dist/jsdocUtils.cjs.map +1 -1
  27. package/dist/rules/checkAccess.cjs +36 -29
  28. package/dist/rules/checkAccess.cjs.map +1 -1
  29. package/dist/rules/checkAlignment.cjs +54 -41
  30. package/dist/rules/checkAlignment.cjs.map +1 -1
  31. package/dist/rules/checkExamples.cjs +484 -327
  32. package/dist/rules/checkExamples.cjs.map +1 -1
  33. package/dist/rules/checkIndentation.cjs +65 -50
  34. package/dist/rules/checkIndentation.cjs.map +1 -1
  35. package/dist/rules/checkLineAlignment.cjs +311 -220
  36. package/dist/rules/checkLineAlignment.cjs.map +1 -1
  37. package/dist/rules/checkParamNames.cjs +335 -227
  38. package/dist/rules/checkParamNames.cjs.map +1 -1
  39. package/dist/rules/checkPropertyNames.cjs +106 -78
  40. package/dist/rules/checkPropertyNames.cjs.map +1 -1
  41. package/dist/rules/checkSyntax.cjs +34 -21
  42. package/dist/rules/checkSyntax.cjs.map +1 -1
  43. package/dist/rules/checkTagNames.cjs +210 -188
  44. package/dist/rules/checkTagNames.cjs.map +1 -1
  45. package/dist/rules/checkTemplateNames.cjs +178 -121
  46. package/dist/rules/checkTemplateNames.cjs.map +1 -1
  47. package/dist/rules/checkTypes.cjs +385 -291
  48. package/dist/rules/checkTypes.cjs.map +1 -1
  49. package/dist/rules/checkValues.cjs +146 -100
  50. package/dist/rules/checkValues.cjs.map +1 -1
  51. package/dist/rules/convertToJsdocComments.cjs +306 -228
  52. package/dist/rules/convertToJsdocComments.cjs.map +1 -1
  53. package/dist/rules/emptyTags.cjs +72 -62
  54. package/dist/rules/emptyTags.cjs.map +1 -1
  55. package/dist/rules/implementsOnClasses.cjs +56 -36
  56. package/dist/rules/implementsOnClasses.cjs.map +1 -1
  57. package/dist/rules/importsAsDependencies.cjs +99 -62
  58. package/dist/rules/importsAsDependencies.cjs.map +1 -1
  59. package/dist/rules/informativeDocs.cjs +142 -105
  60. package/dist/rules/informativeDocs.cjs.map +1 -1
  61. package/dist/rules/linesBeforeBlock.cjs +105 -70
  62. package/dist/rules/linesBeforeBlock.cjs.map +1 -1
  63. package/dist/rules/matchDescription.cjs +222 -160
  64. package/dist/rules/matchDescription.cjs.map +1 -1
  65. package/dist/rules/matchName.cjs +128 -73
  66. package/dist/rules/matchName.cjs.map +1 -1
  67. package/dist/rules/multilineBlocks.cjs +352 -235
  68. package/dist/rules/multilineBlocks.cjs.map +1 -1
  69. package/dist/rules/noBadBlocks.cjs +86 -63
  70. package/dist/rules/noBadBlocks.cjs.map +1 -1
  71. package/dist/rules/noBlankBlockDescriptions.cjs +57 -35
  72. package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
  73. package/dist/rules/noBlankBlocks.cjs +48 -26
  74. package/dist/rules/noBlankBlocks.cjs.map +1 -1
  75. package/dist/rules/noDefaults.cjs +79 -52
  76. package/dist/rules/noDefaults.cjs.map +1 -1
  77. package/dist/rules/noMissingSyntax.cjs +165 -115
  78. package/dist/rules/noMissingSyntax.cjs.map +1 -1
  79. package/dist/rules/noMultiAsterisks.cjs +89 -48
  80. package/dist/rules/noMultiAsterisks.cjs.map +1 -1
  81. package/dist/rules/noRestrictedSyntax.cjs +79 -45
  82. package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
  83. package/dist/rules/noTypes.cjs +80 -59
  84. package/dist/rules/noTypes.cjs.map +1 -1
  85. package/dist/rules/noUndefinedTypes.cjs +388 -297
  86. package/dist/rules/noUndefinedTypes.cjs.map +1 -1
  87. package/dist/rules/requireAsteriskPrefix.cjs +159 -108
  88. package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
  89. package/dist/rules/requireDescription.cjs +129 -89
  90. package/dist/rules/requireDescription.cjs.map +1 -1
  91. package/dist/rules/requireDescriptionCompleteSentence.cjs +262 -201
  92. package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
  93. package/dist/rules/requireExample.cjs +104 -73
  94. package/dist/rules/requireExample.cjs.map +1 -1
  95. package/dist/rules/requireFileOverview.cjs +129 -75
  96. package/dist/rules/requireFileOverview.cjs.map +1 -1
  97. package/dist/rules/requireHyphenBeforeParamDescription.cjs +133 -85
  98. package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
  99. package/dist/rules/requireJsdoc.cjs +557 -384
  100. package/dist/rules/requireJsdoc.cjs.map +1 -1
  101. package/dist/rules/requireParam.cjs +526 -336
  102. package/dist/rules/requireParam.cjs.map +1 -1
  103. package/dist/rules/requireParamDescription.cjs +80 -55
  104. package/dist/rules/requireParamDescription.cjs.map +1 -1
  105. package/dist/rules/requireParamName.cjs +50 -32
  106. package/dist/rules/requireParamName.cjs.map +1 -1
  107. package/dist/rules/requireParamType.cjs +80 -55
  108. package/dist/rules/requireParamType.cjs.map +1 -1
  109. package/dist/rules/requireProperty.cjs +42 -31
  110. package/dist/rules/requireProperty.cjs.map +1 -1
  111. package/dist/rules/requirePropertyDescription.cjs +25 -17
  112. package/dist/rules/requirePropertyDescription.cjs.map +1 -1
  113. package/dist/rules/requirePropertyName.cjs +25 -17
  114. package/dist/rules/requirePropertyName.cjs.map +1 -1
  115. package/dist/rules/requirePropertyType.cjs +25 -17
  116. package/dist/rules/requirePropertyType.cjs.map +1 -1
  117. package/dist/rules/requireReturns.cjs +203 -125
  118. package/dist/rules/requireReturns.cjs.map +1 -1
  119. package/dist/rules/requireReturnsCheck.cjs +103 -60
  120. package/dist/rules/requireReturnsCheck.cjs.map +1 -1
  121. package/dist/rules/requireReturnsDescription.cjs +54 -39
  122. package/dist/rules/requireReturnsDescription.cjs.map +1 -1
  123. package/dist/rules/requireReturnsType.cjs +50 -32
  124. package/dist/rules/requireReturnsType.cjs.map +1 -1
  125. package/dist/rules/requireTemplate.cjs +178 -119
  126. package/dist/rules/requireTemplate.cjs.map +1 -1
  127. package/dist/rules/requireThrows.cjs +95 -61
  128. package/dist/rules/requireThrows.cjs.map +1 -1
  129. package/dist/rules/requireYields.cjs +166 -106
  130. package/dist/rules/requireYields.cjs.map +1 -1
  131. package/dist/rules/requireYieldsCheck.cjs +152 -96
  132. package/dist/rules/requireYieldsCheck.cjs.map +1 -1
  133. package/dist/rules/sortTags.cjs +444 -258
  134. package/dist/rules/sortTags.cjs.map +1 -1
  135. package/dist/rules/tagLines.cjs +266 -179
  136. package/dist/rules/tagLines.cjs.map +1 -1
  137. package/dist/rules/textEscaping.cjs +127 -92
  138. package/dist/rules/textEscaping.cjs.map +1 -1
  139. package/dist/rules/validTypes.cjs +265 -252
  140. package/dist/rules/validTypes.cjs.map +1 -1
  141. package/dist/tagNames.cjs +170 -134
  142. package/dist/tagNames.cjs.map +1 -1
  143. package/dist/utils/hasReturnValue.cjs +474 -246
  144. package/dist/utils/hasReturnValue.cjs.map +1 -1
  145. package/package.json +24 -40
  146. package/src/WarnSettings.js +34 -0
  147. package/src/alignTransform.js +358 -0
  148. package/src/defaultTagOrder.js +169 -0
  149. package/src/exportParser.js +978 -0
  150. package/src/getDefaultTagStructureForMode.js +969 -0
  151. package/src/getJsdocProcessorPlugin.js +672 -0
  152. package/src/index.js +530 -0
  153. package/src/iterateJsdoc.js +2541 -0
  154. package/src/jsdocUtils.js +1896 -0
  155. package/src/rules/checkAccess.js +45 -0
  156. package/src/rules/checkAlignment.js +63 -0
  157. package/src/rules/checkExamples.js +589 -0
  158. package/src/rules/checkIndentation.js +75 -0
  159. package/src/rules/checkLineAlignment.js +372 -0
  160. package/src/rules/checkParamNames.js +474 -0
  161. package/src/rules/checkPropertyNames.js +152 -0
  162. package/src/rules/checkSyntax.js +30 -0
  163. package/src/rules/checkTagNames.js +314 -0
  164. package/src/rules/checkTemplateNames.js +204 -0
  165. package/src/rules/checkTypes.js +535 -0
  166. package/src/rules/checkValues.js +248 -0
  167. package/src/rules/convertToJsdocComments.js +398 -0
  168. package/src/rules/emptyTags.js +98 -0
  169. package/src/rules/implementsOnClasses.js +64 -0
  170. package/src/rules/importsAsDependencies.js +133 -0
  171. package/src/rules/informativeDocs.js +189 -0
  172. package/src/rules/linesBeforeBlock.js +134 -0
  173. package/src/rules/matchDescription.js +286 -0
  174. package/src/rules/matchName.js +151 -0
  175. package/src/rules/multilineBlocks.js +493 -0
  176. package/src/rules/noBadBlocks.js +119 -0
  177. package/src/rules/noBlankBlockDescriptions.js +69 -0
  178. package/src/rules/noBlankBlocks.js +53 -0
  179. package/src/rules/noDefaults.js +85 -0
  180. package/src/rules/noMissingSyntax.js +195 -0
  181. package/src/rules/noMultiAsterisks.js +134 -0
  182. package/src/rules/noRestrictedSyntax.js +91 -0
  183. package/src/rules/noTypes.js +93 -0
  184. package/src/rules/noUndefinedTypes.js +543 -0
  185. package/src/rules/requireAsteriskPrefix.js +190 -0
  186. package/src/rules/requireDescription.js +161 -0
  187. package/src/rules/requireDescriptionCompleteSentence.js +335 -0
  188. package/src/rules/requireExample.js +118 -0
  189. package/src/rules/requireFileOverview.js +154 -0
  190. package/src/rules/requireHyphenBeforeParamDescription.js +176 -0
  191. package/src/rules/requireJsdoc.js +743 -0
  192. package/src/rules/requireParam.js +602 -0
  193. package/src/rules/requireParamDescription.js +89 -0
  194. package/src/rules/requireParamName.js +55 -0
  195. package/src/rules/requireParamType.js +89 -0
  196. package/src/rules/requireProperty.js +48 -0
  197. package/src/rules/requirePropertyDescription.js +25 -0
  198. package/src/rules/requirePropertyName.js +25 -0
  199. package/src/rules/requirePropertyType.js +25 -0
  200. package/src/rules/requireReturns.js +238 -0
  201. package/src/rules/requireReturnsCheck.js +145 -0
  202. package/src/rules/requireReturnsDescription.js +59 -0
  203. package/src/rules/requireReturnsType.js +51 -0
  204. package/src/rules/requireTemplate.js +201 -0
  205. package/src/rules/requireThrows.js +111 -0
  206. package/src/rules/requireYields.js +216 -0
  207. package/src/rules/requireYieldsCheck.js +208 -0
  208. package/src/rules/sortTags.js +558 -0
  209. package/src/rules/tagLines.js +359 -0
  210. package/src/rules/textEscaping.js +154 -0
  211. package/src/rules/validTypes.js +401 -0
  212. package/src/tagNames.js +238 -0
  213. package/src/utils/hasReturnValue.js +572 -0
  214. package/dist/WarnSettings.js +0 -20
  215. package/dist/WarnSettings.js.map +0 -1
  216. package/dist/_virtual/rolldown_runtime.cjs +0 -32
  217. package/dist/_virtual/rolldown_runtime.js +0 -11
  218. package/dist/alignTransform.js +0 -241
  219. package/dist/alignTransform.js.map +0 -1
  220. package/dist/defaultTagOrder.js +0 -134
  221. package/dist/defaultTagOrder.js.map +0 -1
  222. package/dist/exportParser.js +0 -518
  223. package/dist/exportParser.js.map +0 -1
  224. package/dist/getDefaultTagStructureForMode.js +0 -188
  225. package/dist/getDefaultTagStructureForMode.js.map +0 -1
  226. package/dist/getJsdocProcessorPlugin.d.cts +0 -70
  227. package/dist/getJsdocProcessorPlugin.d.cts.map +0 -1
  228. package/dist/getJsdocProcessorPlugin.js +0 -383
  229. package/dist/getJsdocProcessorPlugin.js.map +0 -1
  230. package/dist/index.d.cts +0 -2
  231. package/dist/index.js +0 -3
  232. package/dist/iterateJsdoc.d.cts +0 -472
  233. package/dist/iterateJsdoc.d.cts.map +0 -1
  234. package/dist/iterateJsdoc.js +0 -1628
  235. package/dist/iterateJsdoc.js.map +0 -1
  236. package/dist/jsdocUtils.js +0 -1123
  237. package/dist/jsdocUtils.js.map +0 -1
  238. package/dist/plugin.cjs +0 -427
  239. package/dist/plugin.cjs.map +0 -1
  240. package/dist/plugin.js +0 -427
  241. package/dist/plugin.js.map +0 -1
  242. package/dist/rules/checkAccess.js +0 -33
  243. package/dist/rules/checkAccess.js.map +0 -1
  244. package/dist/rules/checkAlignment.js +0 -47
  245. package/dist/rules/checkAlignment.js.map +0 -1
  246. package/dist/rules/checkExamples.js +0 -348
  247. package/dist/rules/checkExamples.js.map +0 -1
  248. package/dist/rules/checkIndentation.js +0 -59
  249. package/dist/rules/checkIndentation.js.map +0 -1
  250. package/dist/rules/checkLineAlignment.js +0 -229
  251. package/dist/rules/checkLineAlignment.js.map +0 -1
  252. package/dist/rules/checkParamNames.js +0 -237
  253. package/dist/rules/checkParamNames.js.map +0 -1
  254. package/dist/rules/checkPropertyNames.js +0 -88
  255. package/dist/rules/checkPropertyNames.js.map +0 -1
  256. package/dist/rules/checkSyntax.js +0 -25
  257. package/dist/rules/checkSyntax.js.map +0 -1
  258. package/dist/rules/checkTagNames.js +0 -191
  259. package/dist/rules/checkTagNames.js.map +0 -1
  260. package/dist/rules/checkTemplateNames.js +0 -124
  261. package/dist/rules/checkTemplateNames.js.map +0 -1
  262. package/dist/rules/checkTypes.js +0 -299
  263. package/dist/rules/checkTypes.js.map +0 -1
  264. package/dist/rules/checkValues.js +0 -103
  265. package/dist/rules/checkValues.js.map +0 -1
  266. package/dist/rules/convertToJsdocComments.js +0 -231
  267. package/dist/rules/convertToJsdocComments.js.map +0 -1
  268. package/dist/rules/emptyTags.js +0 -67
  269. package/dist/rules/emptyTags.js.map +0 -1
  270. package/dist/rules/implementsOnClasses.js +0 -40
  271. package/dist/rules/implementsOnClasses.js.map +0 -1
  272. package/dist/rules/importsAsDependencies.js +0 -68
  273. package/dist/rules/importsAsDependencies.js.map +0 -1
  274. package/dist/rules/informativeDocs.js +0 -110
  275. package/dist/rules/informativeDocs.js.map +0 -1
  276. package/dist/rules/linesBeforeBlock.js +0 -75
  277. package/dist/rules/linesBeforeBlock.js.map +0 -1
  278. package/dist/rules/matchDescription.js +0 -167
  279. package/dist/rules/matchDescription.js.map +0 -1
  280. package/dist/rules/matchName.js +0 -77
  281. package/dist/rules/matchName.js.map +0 -1
  282. package/dist/rules/multilineBlocks.js +0 -245
  283. package/dist/rules/multilineBlocks.js.map +0 -1
  284. package/dist/rules/noBadBlocks.js +0 -68
  285. package/dist/rules/noBadBlocks.js.map +0 -1
  286. package/dist/rules/noBlankBlockDescriptions.js +0 -41
  287. package/dist/rules/noBlankBlockDescriptions.js.map +0 -1
  288. package/dist/rules/noBlankBlocks.js +0 -30
  289. package/dist/rules/noBlankBlocks.js.map +0 -1
  290. package/dist/rules/noDefaults.js +0 -56
  291. package/dist/rules/noDefaults.js.map +0 -1
  292. package/dist/rules/noMissingSyntax.js +0 -126
  293. package/dist/rules/noMissingSyntax.js.map +0 -1
  294. package/dist/rules/noMultiAsterisks.js +0 -58
  295. package/dist/rules/noMultiAsterisks.js.map +0 -1
  296. package/dist/rules/noRestrictedSyntax.js +0 -49
  297. package/dist/rules/noRestrictedSyntax.js.map +0 -1
  298. package/dist/rules/noTypes.js +0 -65
  299. package/dist/rules/noTypes.js.map +0 -1
  300. package/dist/rules/noUndefinedTypes.js +0 -303
  301. package/dist/rules/noUndefinedTypes.js.map +0 -1
  302. package/dist/rules/requireAsteriskPrefix.js +0 -112
  303. package/dist/rules/requireAsteriskPrefix.js.map +0 -1
  304. package/dist/rules/requireDescription.js +0 -95
  305. package/dist/rules/requireDescription.js.map +0 -1
  306. package/dist/rules/requireDescriptionCompleteSentence.js +0 -220
  307. package/dist/rules/requireDescriptionCompleteSentence.js.map +0 -1
  308. package/dist/rules/requireExample.js +0 -77
  309. package/dist/rules/requireExample.js.map +0 -1
  310. package/dist/rules/requireFileOverview.js +0 -81
  311. package/dist/rules/requireFileOverview.js.map +0 -1
  312. package/dist/rules/requireHyphenBeforeParamDescription.js +0 -89
  313. package/dist/rules/requireHyphenBeforeParamDescription.js.map +0 -1
  314. package/dist/rules/requireJsdoc.js +0 -404
  315. package/dist/rules/requireJsdoc.js.map +0 -1
  316. package/dist/rules/requireParam.js +0 -344
  317. package/dist/rules/requireParam.js.map +0 -1
  318. package/dist/rules/requireParamDescription.js +0 -59
  319. package/dist/rules/requireParamDescription.js.map +0 -1
  320. package/dist/rules/requireParamName.js +0 -36
  321. package/dist/rules/requireParamName.js.map +0 -1
  322. package/dist/rules/requireParamType.js +0 -59
  323. package/dist/rules/requireParamType.js.map +0 -1
  324. package/dist/rules/requireProperty.js +0 -35
  325. package/dist/rules/requireProperty.js.map +0 -1
  326. package/dist/rules/requirePropertyDescription.js +0 -21
  327. package/dist/rules/requirePropertyDescription.js.map +0 -1
  328. package/dist/rules/requirePropertyName.js +0 -21
  329. package/dist/rules/requirePropertyName.js.map +0 -1
  330. package/dist/rules/requirePropertyType.js +0 -21
  331. package/dist/rules/requirePropertyType.js.map +0 -1
  332. package/dist/rules/requireReturns.js +0 -131
  333. package/dist/rules/requireReturns.js.map +0 -1
  334. package/dist/rules/requireReturnsCheck.js +0 -66
  335. package/dist/rules/requireReturnsCheck.js.map +0 -1
  336. package/dist/rules/requireReturnsDescription.js +0 -43
  337. package/dist/rules/requireReturnsDescription.js.map +0 -1
  338. package/dist/rules/requireReturnsType.js +0 -36
  339. package/dist/rules/requireReturnsType.js.map +0 -1
  340. package/dist/rules/requireTemplate.js +0 -122
  341. package/dist/rules/requireTemplate.js.map +0 -1
  342. package/dist/rules/requireThrows.js +0 -67
  343. package/dist/rules/requireThrows.js.map +0 -1
  344. package/dist/rules/requireYields.js +0 -115
  345. package/dist/rules/requireYields.js.map +0 -1
  346. package/dist/rules/requireYieldsCheck.js +0 -105
  347. package/dist/rules/requireYieldsCheck.js.map +0 -1
  348. package/dist/rules/sortTags.js +0 -262
  349. package/dist/rules/sortTags.js.map +0 -1
  350. package/dist/rules/tagLines.js +0 -183
  351. package/dist/rules/tagLines.js.map +0 -1
  352. package/dist/rules/textEscaping.js +0 -102
  353. package/dist/rules/textEscaping.js.map +0 -1
  354. package/dist/rules/validTypes.js +0 -259
  355. package/dist/rules/validTypes.js.map +0 -1
  356. package/dist/tagNames.js +0 -144
  357. package/dist/tagNames.js.map +0 -1
  358. package/dist/utils/hasReturnValue.js +0 -265
  359. package/dist/utils/hasReturnValue.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsdocUtils.js","names":["getDefaultTagStructureForMode","WarnSettings"],"sources":["../src/jsdocUtils.js"],"sourcesContent":["import getDefaultTagStructureForMode from './getDefaultTagStructureForMode.js';\nimport {\n closureTags,\n jsdocTags,\n typeScriptTags,\n} from './tagNames.js';\nimport WarnSettings from './WarnSettings.js';\nimport {\n tryParse,\n} from '@es-joy/jsdoccomment';\n\n/**\n * @typedef {number} Integer\n */\n/**\n * @typedef {import('./utils/hasReturnValue.js').ESTreeOrTypeScriptNode} ESTreeOrTypeScriptNode\n */\n\n/**\n * @typedef {\"jsdoc\"|\"typescript\"|\"closure\"|\"permissive\"} ParserMode\n */\n\n/**\n * @type {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\nlet tagStructure;\n\n/**\n * @param {ParserMode} mode\n * @returns {void}\n */\nconst setTagStructure = (mode) => {\n tagStructure = getDefaultTagStructureForMode(mode);\n};\n\n/**\n * @typedef {undefined|string|{\n * name: Integer,\n * restElement: boolean\n * }|{\n * isRestProperty: boolean|undefined,\n * name: string,\n * restElement: boolean\n * }|{\n * name: string,\n * restElement: boolean\n * }} ParamCommon\n */\n/**\n * @typedef {ParamCommon|[string|undefined, (FlattendRootInfo & {\n * annotationParamName?: string,\n * })]|NestedParamInfo} ParamNameInfo\n */\n\n/**\n * @typedef {{\n * hasPropertyRest: boolean,\n * hasRestElement: boolean,\n * names: string[],\n * rests: boolean[],\n * }} FlattendRootInfo\n */\n/**\n * @typedef {[string, (string[]|ParamInfo[])]} NestedParamInfo\n */\n/**\n * @typedef {ParamCommon|\n * [string|undefined, (FlattendRootInfo & {\n * annotationParamName?: string\n * })]|\n * NestedParamInfo} ParamInfo\n */\n\n/**\n * Given a nested array of property names, reduce them to a single array,\n * appending the name of the root element along the way if present.\n * @callback FlattenRoots\n * @param {ParamInfo[]} params\n * @param {string} [root]\n * @returns {FlattendRootInfo}\n */\n\n/** @type {FlattenRoots} */\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n\n /**\n * @type {boolean[]}\n */\n const rests = [];\n\n const names = params.reduce(\n /**\n * @param {string[]} acc\n * @param {ParamInfo} cur\n * @returns {string[]}\n */\n (acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n const inner = /** @type {string[]} */ ([\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean));\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n\n if (typeof cur === 'object') {\n if ('isRestProperty' in cur && cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n\n if ('restElement' in cur && cur.restElement) {\n hasRestElement = true;\n }\n\n acc.push(root ? `${root}.${String(cur.name)}` : String(cur.name));\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, [],\n );\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\n/**\n * @param {import('@typescript-eslint/types').TSESTree.TSIndexSignature|\n * import('@typescript-eslint/types').TSESTree.TSConstructSignatureDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSCallSignatureDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSPropertySignature} propSignature\n * @returns {undefined|string|[string, string[]]}\n */\nconst getPropertiesFromPropertySignature = (propSignature) => {\n if (\n propSignature.type === 'TSIndexSignature' ||\n propSignature.type === 'TSConstructSignatureDeclaration' ||\n propSignature.type === 'TSCallSignatureDeclaration'\n ) {\n return undefined;\n }\n\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n propSignature.key\n ).name,\n propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return /** @type {string} */ (\n getPropertiesFromPropertySignature(\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n member\n ),\n )\n );\n }),\n ];\n }\n\n return /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n propSignature.key\n ).name;\n};\n\n/**\n * @param {ESTreeOrTypeScriptNode|null} functionNode\n * @param {boolean} [checkDefaultObjects]\n * @throws {Error}\n * @returns {ParamNameInfo[]}\n */\nconst getFunctionParameterNames = (\n functionNode, checkDefaultObjects,\n) => {\n /* eslint-disable complexity -- Temporary */\n /**\n * @param {import('estree').Identifier|import('estree').AssignmentPattern|\n * import('estree').ObjectPattern|import('estree').Property|\n * import('estree').RestElement|import('estree').ArrayPattern|\n * import('@typescript-eslint/types').TSESTree.TSParameterProperty|\n * import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.RestElement|\n * import('@typescript-eslint/types').TSESTree.Identifier|\n * import('@typescript-eslint/types').TSESTree.ObjectPattern|\n * import('@typescript-eslint/types').TSESTree.BindingName|\n * import('@typescript-eslint/types').TSESTree.Parameter\n * } param\n * @param {boolean} [isProperty]\n * @returns {ParamNameInfo|[string, ParamNameInfo[]]}\n */\n const getParamName = (param, isProperty) => {\n /* eslint-enable complexity -- Temporary */\n const hasLeftTypeAnnotation = 'left' in param && 'typeAnnotation' in param.left;\n\n if ('typeAnnotation' in param || hasLeftTypeAnnotation) {\n const typeAnnotation = hasLeftTypeAnnotation ?\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n param.left\n ).typeAnnotation :\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier|import('@typescript-eslint/types').TSESTree.ObjectPattern} */\n (param).typeAnnotation;\n\n if (typeAnnotation?.typeAnnotation?.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */\n (member),\n );\n });\n\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: 'name' in param ? param.name : undefined,\n };\n const hasLeftName = 'left' in param && 'name' in param.left;\n\n if ('name' in param || hasLeftName) {\n return [\n hasLeftName ?\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n param.left\n ).name :\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n param\n ).name,\n flattened,\n ];\n }\n\n return [\n undefined, flattened,\n ];\n }\n }\n\n if ('name' in param) {\n return param.name;\n }\n\n if ('left' in param && 'name' in param.left) {\n return param.left.name;\n }\n\n if (\n param.type === 'ObjectPattern' ||\n ('left' in param &&\n (\n param\n ).left.type === 'ObjectPattern')\n ) {\n const properties = /** @type {import('@typescript-eslint/types').TSESTree.ObjectPattern} */ (\n param\n ).properties ||\n /** @type {import('estree').ObjectPattern} */\n (\n /** @type {import('@typescript-eslint/types').TSESTree.AssignmentPattern} */ (\n param\n ).left\n )?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if (param.type === 'Property') {\n switch (param.value.type) {\n case 'ArrayPattern': {\n return [\n /** @type {import('estree').Identifier} */\n (param.key).name,\n /** @type {import('estree').ArrayPattern} */ (\n param.value\n ).elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop?.type === 'RestElement',\n };\n }),\n ];\n }\n\n case 'ObjectPattern': {\n return [\n /** @type {import('estree').Identifier} */ (param.key).name,\n /** @type {import('estree').ObjectPattern} */ (\n param.value\n ).properties.map((prop) => {\n return /** @type {string|[string, string[]]} */ (getParamName(prop, isProperty));\n }),\n ];\n }\n\n case 'AssignmentPattern': {\n switch (param.value.left.type) {\n case 'ArrayPattern':\n return [\n /** @type {import('estree').Identifier} */\n (param.key).name,\n /** @type {import('estree').ArrayPattern} */ (\n param.value.left\n ).elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop?.type === 'RestElement',\n };\n }),\n ];\n case 'Identifier':\n // Default parameter\n if (checkDefaultObjects && param.value.right.type === 'ObjectExpression') {\n return [\n /** @type {import('estree').Identifier} */ (\n param.key\n ).name,\n /** @type {import('estree').AssignmentPattern} */ (\n param.value\n ).right.properties.map((prop) => {\n return /** @type {string} */ (getParamName(\n /** @type {import('estree').Property} */\n (prop),\n isProperty,\n ));\n }),\n ];\n }\n\n break;\n case 'ObjectPattern':\n return [\n /** @type {import('estree').Identifier} */\n (param.key).name,\n /** @type {import('estree').ObjectPattern} */ (\n param.value.left\n ).properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n }\n }\n }\n\n switch (param.key.type) {\n case 'Identifier':\n return param.key.name;\n\n // The key of an object could also be a string or number\n case 'Literal':\n /* c8 ignore next 2 -- `raw` may not be present in all parsers */\n return /** @type {string} */ (param.key.raw ||\n param.key.value);\n\n // case 'MemberExpression':\n default:\n // Todo: We should really create a structure (and a corresponding\n // option analogous to `checkRestProperty`) which allows for\n // (and optionally requires) dynamic properties to have a single\n // line of documentation\n return undefined;\n }\n }\n\n if (\n param.type === 'ArrayPattern' ||\n /** @type {import('estree').AssignmentPattern} */ (\n param\n ).left?.type === 'ArrayPattern'\n ) {\n const elements = /** @type {import('estree').ArrayPattern} */ (\n param\n ).elements || /** @type {import('estree').ArrayPattern} */ (\n /** @type {import('estree').AssignmentPattern} */ (\n param\n ).left\n )?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: `\"${idx}\"`,\n restElement: prop?.type === 'RestElement',\n };\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if ([\n 'ExperimentalRestProperty', 'RestElement',\n ].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.RestElement} */ (\n param\n // @ts-expect-error Ok\n ).argument).name ?? param?.argument?.elements?.map(({\n // @ts-expect-error Ok\n name,\n }) => {\n return name;\n }),\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSParameterProperty} */ (\n param\n ).parameter\n ),\n true,\n );\n }\n\n throw new Error(`Unsupported function signature format: \\`${param.type}\\`.`);\n };\n\n if (!functionNode) {\n return [];\n }\n\n return (/** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n functionNode\n ).params || /** @type {import('@typescript-eslint/types').TSESTree.MethodDefinition} */ (\n functionNode\n ).value?.params || []).map((param) => {\n return getParamName(param);\n });\n};\n\n/**\n * @param {ESTreeOrTypeScriptNode} functionNode\n * @returns {Integer}\n */\nconst hasParams = (functionNode) => {\n // Should also check `functionNode.value.params` if supporting `MethodDefinition`\n return /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n functionNode\n ).params.length;\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * `foo` or `foo.bar`.\n * @param {import('comment-parser').Block} jsdoc\n * @param {string} targetTagName\n * @returns {{\n * idx: Integer,\n * name: string,\n * type: string\n * }[]}\n */\nconst getJsdocTagsDeep = (jsdoc, targetTagName) => {\n const ret = [];\n for (const [\n idx,\n {\n name,\n tag,\n type,\n },\n ] of jsdoc.tags.entries()) {\n if (tag !== targetTagName) {\n continue;\n }\n\n ret.push({\n idx,\n name,\n type,\n });\n }\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\n/**\n * @param {ParserMode|undefined} mode\n * @param {Reporter} context\n * @returns {import('./tagNames.js').AliasedTags}\n */\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'closure':\n case 'permissive':\n return closureTags;\n case 'jsdoc':\n return jsdocTags; case 'typescript':\n return typeScriptTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\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: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\n/**\n * @param {import('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\nconst getTagDescription = (tg, returnArray) => {\n /**\n * @type {string[]}\n */\n const descriptions = [];\n tg.source.some(({\n tokens: {\n description,\n end,\n lineEnd,\n name,\n postDelimiter,\n postTag,\n tag,\n type,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return returnArray ? descriptions : descriptions.join('\\n');\n};\n\n/**\n * @typedef {{\n * report: (descriptor: import('eslint').Rule.ReportDescriptor) => void\n * }} Reporter\n */\n\n/**\n * @param {string} name\n * @param {ParserMode|undefined} mode\n * @param {TagNamePreference} tagPreference\n * @param {Reporter} context\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined;\n * }}\n */\nconst getPreferredTagNameSimple = (\n name,\n mode,\n tagPreference = {},\n // eslint-disable-next-line unicorn/no-object-as-default-parameter -- Ok\n context = {\n report () {\n // No-op\n },\n },\n) => {\n const prefValues = Object.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = Object.fromEntries(\n Object\n .entries(tagPreference)\n .map(([\n key,\n value,\n ]) => {\n return [\n key.replace(/^tag /v, ''), value,\n ];\n }),\n );\n\n if (Object.hasOwn(tagPreferenceFixed, name)) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([\n , aliases,\n ]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {ParserMode|undefined} mode\n * @param {string} name\n * @param {string[]} definedTags\n * @returns {boolean}\n */\nconst isValidTag = (\n context,\n mode,\n name,\n definedTags,\n) => {\n const tagNames = getTagNamesForMode(mode, context);\n\n const validTagNames = Object.keys(tagNames).concat(Object.values(tagNames).flat());\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} targetTagName\n * @returns {boolean}\n */\nconst hasTag = (jsdoc, targetTagName) => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return jsdoc.tags.some((doc) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\nconst filterTags = (jsdoc, filter) => {\n return jsdoc.tags.filter((tag) => {\n return filter(tag);\n });\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\nconst getTags = (jsdoc, tagName) => {\n return filterTags(jsdoc, (item) => {\n return item.tag === tagName;\n });\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {{\n * tagName: string,\n * context?: import('eslint').Rule.RuleContext,\n * mode?: ParserMode,\n * report?: import('./iterateJsdoc.js').Report\n * tagNamePreference?: TagNamePreference\n * skipReportingBlockedTag?: boolean,\n * allowObjectReturn?: boolean,\n * defaultMessage?: string,\n * }} cfg\n * @returns {string|undefined|false|{\n * message: string;\n * replacement?: string|undefined;\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\nconst getPreferredTagName = (jsdoc, {\n allowObjectReturn = false,\n context,\n tagName,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n mode,\n report = () => {},\n skipReportingBlockedTag = false,\n tagNamePreference,\n}) => {\n const ret = getPreferredTagNameSimple(tagName, mode, tagNamePreference, context);\n const isObject = ret && typeof ret === 'object';\n if (hasTag(jsdoc, tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, getTags(jsdoc, tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} tagName\n * @param {(\n * matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n * targetTagName: string\n * ) => void} arrayHandler\n * @param {object} cfg\n * @param {import('eslint').Rule.RuleContext} [cfg.context]\n * @param {ParserMode} [cfg.mode]\n * @param {import('./iterateJsdoc.js').Report} [cfg.report]\n * @param {TagNamePreference} [cfg.tagNamePreference]\n * @param {boolean} [cfg.skipReportingBlockedTag]\n * @returns {void}\n */\nconst forEachPreferredTag = (\n jsdoc, tagName, arrayHandler,\n {\n context,\n mode,\n report,\n skipReportingBlockedTag = false,\n tagNamePreference,\n } = {},\n) => {\n const targetTagName = /** @type {string|false} */ (\n getPreferredTagName(jsdoc, {\n context,\n mode,\n report,\n skipReportingBlockedTag,\n tagName,\n tagNamePreference,\n })\n );\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(\n /**\n * @type {import('@es-joy/jsdoccomment').JsdocTagWithInline}\n */ (\n matchingJsdocTag\n ), targetTagName,\n );\n }\n};\n\n/**\n * Get all tags, inline tags and inline tags in tags\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]}\n */\nconst getAllTags = (jsdoc) => {\n return [\n ...jsdoc.tags,\n ...jsdoc.inlineTags.map((inlineTag) => {\n // Tags don't have source or line numbers, so add before returning\n let line = -1;\n for (const {\n tokens: {\n description,\n },\n } of jsdoc.source) {\n line++;\n if (description && description.includes(`{@${inlineTag.tag}`)) {\n break;\n }\n }\n\n inlineTag.line = line;\n\n return inlineTag;\n }),\n ...jsdoc.tags.flatMap((tag) => {\n let tagBegins = -1;\n for (const {\n tokens: {\n tag: tg,\n },\n } of jsdoc.source) {\n tagBegins++;\n if (tg) {\n break;\n }\n }\n\n for (const inlineTag of tag.inlineTags) {\n /** @type {import('./iterateJsdoc.js').Integer} */\n let line = 0;\n for (const {\n number,\n tokens: {\n description,\n },\n } of tag.source) {\n if (description && description.includes(`{@${inlineTag.tag}`)) {\n line = number;\n break;\n }\n }\n\n inlineTag.line = tagBegins + line - 1;\n }\n\n return (\n /**\n * @type {import('comment-parser').Spec & {\n * inlineTags: import('@es-joy/jsdoccomment').JsdocInlineTagNoType[]\n * }}\n */ (\n tag\n ).inlineTags\n );\n }),\n ];\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string[]} targetTagNames\n * @returns {boolean}\n */\nconst hasATag = (jsdoc, targetTagNames) => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment has an undefined type.\n * @param {import('comment-parser').Spec|null|undefined} tag\n * the tag which should be checked.\n * @param {ParserMode} mode\n * @returns {boolean}\n * true in case a defined type is undeclared; otherwise false.\n */\nconst mayBeUndefinedTypeTag = (tag, mode) => {\n // The function should not continue in the event the type is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return true;\n }\n\n // .. same applies if it declares an `{undefined}` or `{void}` type\n const tagType = tag.type.trim();\n\n // Exit early if matching\n if (\n tagType === 'undefined' || tagType === 'void' ||\n tagType === '*' || tagType === 'any'\n ) {\n return true;\n }\n\n let parsedTypes;\n try {\n parsedTypes = tryParse(\n tagType,\n mode === 'permissive' ? undefined : [\n mode,\n ],\n );\n } catch {\n // Ignore\n }\n\n if (\n // We do not traverse deeply as it could be, e.g., `Promise<void>`\n parsedTypes &&\n parsedTypes.type === 'JsdocTypeUnion' &&\n parsedTypes.elements.find((elem) => {\n return elem.type === 'JsdocTypeUndefined' ||\n elem.type === 'JsdocTypeName' && elem.value === 'void';\n })) {\n return true;\n }\n\n // In any other case, a type is present\n return false;\n};\n\n/**\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} map\n * @param {string} tag\n * @returns {Map<string, string|string[]|boolean|undefined>}\n */\nconst ensureMap = (map, tag) => {\n if (!map.has(tag)) {\n map.set(tag, new Map());\n }\n\n return /** @type {Map<string, string | boolean>} */ (map.get(tag));\n};\n\n/**\n * @param {import('./iterateJsdoc.js').StructuredTags} structuredTags\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {void}\n */\nconst overrideTagStructure = (structuredTags, tagMap = tagStructure) => {\n for (const [\n tag,\n {\n name,\n required = [],\n type,\n },\n ] of Object.entries(structuredTags)) {\n const tagStruct = ensureMap(tagMap, tag);\n\n tagStruct.set('namepathRole', name);\n tagStruct.set('typeAllowed', type);\n\n const requiredName = required.includes('name');\n if (requiredName && name === false) {\n throw new Error('Cannot add \"name\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n tagStruct.set('nameRequired', requiredName);\n\n const requiredType = required.includes('type');\n if (requiredType && type === false) {\n throw new Error('Cannot add \"type\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeRequired', requiredType);\n\n const typeOrNameRequired = required.includes('typeOrNameRequired');\n if (typeOrNameRequired && name === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n if (typeOrNameRequired && type === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeOrNameRequired', typeOrNameRequired);\n }\n};\n\n/**\n * @param {ParserMode} mode\n * @param {import('./iterateJsdoc.js').StructuredTags} structuredTags\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\nconst getTagStructureForMode = (mode, structuredTags) => {\n const tagStruct = getDefaultTagStructureForMode(mode);\n\n try {\n overrideTagStructure(structuredTags, tagStruct);\n /* c8 ignore next 3 */\n } catch {\n //\n }\n\n return tagStruct;\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathDefiningTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('namepathRole') === 'namepath-defining';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathReferencingTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n return tagStruct.get('namepathRole') === 'namepath-referencing';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathOrUrlReferencingTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n return tagStruct.get('namepathRole') === 'namepath-or-url-referencing';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveTypePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return /** @type {boolean|undefined} */ (tagStruct.get('typeRequired'));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|string}\n */\nconst tagMightHaveTypePosition = (tag, tagMap = tagStructure) => {\n if (tagMustHaveTypePosition(tag, tagMap)) {\n return true;\n }\n\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = /** @type {boolean|undefined} */ (tagStruct.get('typeAllowed'));\n\n return ret === undefined ? true : ret;\n};\n\nconst namepathTypes = new Set([\n 'namepath-defining', 'namepath-referencing',\n]);\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('namepathRole');\n\n return ret === undefined ? true : Boolean(ret);\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamepath = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const nampathRole = tagStruct.get('namepathRole');\n\n return nampathRole !== false &&\n namepathTypes.has(/** @type {string} */ (nampathRole));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return /** @type {boolean|undefined} */ (tagStruct.get('nameRequired'));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n return Boolean(tagMightHaveTypePosition(tag, tagMap)) || tagMightHaveNamepath(tag, tagMap);\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return /** @type {boolean} */ (tagStruct.get('typeOrNameRequired'));\n};\n\n/**\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => {\n const mustHaveTypePosition = tagMustHaveTypePosition(tag.tag, tagMap);\n const mightHaveTypePosition = tagMightHaveTypePosition(tag.tag, tagMap);\n const hasTypePosition = mightHaveTypePosition && Boolean(tag.type);\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition(tag.tag, tagMap) ||\n tagMightHaveNamepath(tag.tag, tagMap)\n ) && Boolean(tag.name);\n const mustHaveEither = tagMustHaveEitherTypeOrNamePosition(tag.tag, tagMap);\n const hasEither = tagMightHaveEitherTypeOrNamePosition(tag.tag, tagMap) &&\n (hasTypePosition || hasNameOrNamepathPosition);\n\n return mustHaveEither && !hasEither && !mustHaveTypePosition;\n};\n\n/* eslint-disable complexity -- Temporary */\n/**\n * @param {ESTreeOrTypeScriptNode|null|undefined} node\n * @param {boolean} [checkYieldReturnValue]\n * @returns {boolean}\n */\nconst hasNonFunctionYield = (node, checkYieldReturnValue) => {\n /* eslint-enable complexity -- Temporary */\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'ArrayExpression':\n\n case 'ArrayPattern':\n return node.elements.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonFunctionYield(node.left, checkYieldReturnValue) ||\n hasNonFunctionYield(node.right, checkYieldReturnValue);\n }\n\n case 'AssignmentPattern':\n return hasNonFunctionYield(node.right, checkYieldReturnValue);\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return ![\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(bodyNode.type) && hasNonFunctionYield(\n bodyNode, checkYieldReturnValue,\n );\n });\n }\n\n /* c8 ignore next 2 -- In Babel? */\n case 'CallExpression':\n // @ts-expect-error In Babel?\n case 'OptionalCallExpression':\n return node.arguments.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'ChainExpression':\n case 'ExpressionStatement': {\n return hasNonFunctionYield(node.expression, checkYieldReturnValue);\n }\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ClassProperty':\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ObjectProperty':\n /* c8 ignore next 2 -- In Babel? */\n case 'Property':\n\n case 'PropertyDefinition':\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n hasNonFunctionYield(node.value, checkYieldReturnValue);\n\n case 'ConditionalExpression':\n\n case 'IfStatement': {\n return hasNonFunctionYield(node.test, checkYieldReturnValue) ||\n hasNonFunctionYield(node.consequent, checkYieldReturnValue) ||\n hasNonFunctionYield(node.alternate, checkYieldReturnValue);\n }\n\n case 'DoWhileStatement':\n case 'ForInStatement':\n\n case 'ForOfStatement':\n\n case 'ForStatement':\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'WithStatement': {\n return hasNonFunctionYield(node.body, checkYieldReturnValue);\n }\n\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonFunctionYield(node.source, checkYieldReturnValue);\n\n // ?.\n /* c8 ignore next 2 -- In Babel? */\n case 'MemberExpression':\n // @ts-expect-error In Babel?\n case 'OptionalMemberExpression':\n return hasNonFunctionYield(node.object, checkYieldReturnValue) ||\n hasNonFunctionYield(node.property, checkYieldReturnValue);\n\n case 'ObjectExpression':\n /* eslint-disable no-fallthrough */\n case 'ObjectPattern':\n /* eslint-enable no-fallthrough */\n return node.properties.some((property) => {\n return hasNonFunctionYield(property, checkYieldReturnValue);\n });\n /* c8 ignore next 2 -- In Babel? */\n // @ts-expect-error In Babel?\n case 'ObjectMethod':\n /* c8 ignore next 6 -- In Babel? */\n // @ts-expect-error In Babel?\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n // @ts-expect-error In Babel?\n node.arguments.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n }\n\n // Comma\n case 'SequenceExpression':\n\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonFunctionYield(subExpression, checkYieldReturnValue);\n });\n case 'SpreadElement':\n\n case 'UnaryExpression':\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n },\n );\n }\n\n case 'TaggedTemplateExpression':\n return hasNonFunctionYield(node.quasi, checkYieldReturnValue);\n\n case 'TryStatement': {\n return hasNonFunctionYield(node.block, checkYieldReturnValue) ||\n hasNonFunctionYield(\n node.handler && node.handler.body, checkYieldReturnValue,\n ) ||\n hasNonFunctionYield(\n /** @type {import('@typescript-eslint/types').TSESTree.BlockStatement} */\n (node.finalizer),\n checkYieldReturnValue,\n );\n }\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonFunctionYield(node.id, checkYieldReturnValue) ||\n hasNonFunctionYield(node.init, checkYieldReturnValue);\n }\n\n case 'YieldExpression': {\n if (checkYieldReturnValue) {\n if (\n /** @type {import('eslint').Rule.Node} */ (\n node\n ).parent.type === 'VariableDeclarator'\n ) {\n return true;\n }\n\n return false;\n }\n\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n * @param {ESTreeOrTypeScriptNode} node\n * @param {boolean} [checkYieldReturnValue]\n * @returns {boolean}\n */\nconst hasYieldValue = (node, checkYieldReturnValue) => {\n return /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n node\n ).generator && (\n /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n node\n ).expression || hasNonFunctionYield(\n /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */\n (node).body,\n checkYieldReturnValue,\n )\n );\n};\n\n/**\n * Checks if a node has a throws statement.\n * @param {ESTreeOrTypeScriptNode|null|undefined} node\n * @param {boolean} [innerFunction]\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasThrowValue = (node, innerFunction) => {\n if (!node) {\n return false;\n }\n\n // There are cases where a function may execute its inner function which\n // throws, but we're treating functions atomically rather than trying to\n // follow them\n switch (node.type) {\n case 'ArrowFunctionExpression':\n case 'FunctionDeclaration':\n case 'FunctionExpression': {\n return !innerFunction && !node.async && hasThrowValue(node.body, true);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\n });\n }\n\n case 'DoWhileStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'ForStatement':\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasThrowValue(nde);\n });\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @param {string} tag\n */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /v.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n * @see {@link https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @see {@link https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#template}\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.name\n .split(',')\n .map((type) => {\n return type.trim().replace(/^\\[?(?<name>.*?)=.*$/v, '$<name>');\n });\n};\n\n/**\n * @typedef {true|string[]} DefaultContexts\n */\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n * @param {import('eslint').Rule.RuleContext} context\n * @param {DefaultContexts|undefined} defaultContexts\n * @param {{\n * contexts?: import('./iterateJsdoc.js').Context[]\n * }} settings\n * @returns {(string|import('./iterateJsdoc.js').ContextObject)[]}\n */\nconst enforcedContexts = (context, defaultContexts, settings) => {\n const contexts = context.options[0]?.contexts || settings.contexts || (defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ] : defaultContexts);\n\n return contexts;\n};\n\n/**\n * @param {import('./iterateJsdoc.js').Context[]} contexts\n * @param {import('./iterateJsdoc.js').CheckJsdoc} checkJsdoc\n * @param {import('@es-joy/jsdoccomment').CommentHandler} [handler]\n * @returns {import('eslint').Rule.RuleListener}\n */\nconst getContextObject = (contexts, checkJsdoc, handler) => {\n /** @type {import('eslint').Rule.RuleListener} */\n const properties = {};\n\n for (const [\n idx,\n prop,\n ] of contexts.entries()) {\n /** @type {string} */\n let property;\n\n /** @type {(node: import('eslint').Rule.Node) => void} */\n let value;\n\n if (typeof prop === 'object') {\n const selInfo = {\n lastIndex: idx,\n selector: prop.context,\n };\n if (prop.comment) {\n property = /** @type {string} */ (prop.context);\n value = checkJsdoc.bind(\n null,\n {\n ...selInfo,\n comment: prop.comment,\n },\n /**\n * @type {(jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean}\n */\n (/** @type {import('@es-joy/jsdoccomment').CommentHandler} */ (\n handler\n ).bind(null, prop.comment)),\n );\n } else {\n property = /** @type {string} */ (prop.context);\n value = checkJsdoc.bind(null, selInfo, null);\n }\n } else {\n const selInfo = {\n lastIndex: idx,\n selector: prop,\n };\n property = prop;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n\n const old = /**\n * @type {((node: import('eslint').Rule.Node) => void)}\n */ (properties[property]);\n properties[property] = old ?\n /**\n * @type {((node: import('eslint').Rule.Node) => void)}\n */\n function (node) {\n old(node);\n value(node);\n } :\n value;\n }\n\n return properties;\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\n 'arg', 'argument', 'param', 'prop', 'property',\n 'return',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'template',\n]);\n\n/**\n * @typedef {{\n * [key: string]: false|string|\n * {message: string, replacement?: string}\n * }} TagNamePreference\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {ParserMode|undefined} mode\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n * tagsWithNames: import('comment-parser').Spec[],\n * tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\nconst getTagsByType = (context, mode, tags) => {\n /**\n * @type {import('comment-parser').Spec[]}\n */\n const tagsWithoutNames = [];\n const tagsWithNames = tags.filter((tag) => {\n const {\n tag: tagName,\n } = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(tagName);\n if (!tagWithName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\n/**\n * @param {import('eslint').SourceCode|{\n * text: string\n * }} sourceCode\n * @returns {string}\n */\nconst getIndent = (sourceCode) => {\n return (sourceCode.text.match(/^\\n*([ \\t]+)/v)?.[1] ?? '') + ' ';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isConstructor = (node) => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n /** @type {import('@typescript-eslint/types').TSESTree.MethodDefinition} */ (\n node?.parent\n )?.kind === 'constructor';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isGetter = (node) => {\n return node !== null &&\n /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */ (\n node.parent\n )?.kind === 'get';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isSetter = (node) => {\n return node !== null &&\n /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */(\n node.parent\n )?.kind === 'set';\n};\n\n/**\n * @param {import('eslint').Rule.Node} node\n * @returns {boolean}\n */\nconst hasAccessorPair = (node) => {\n const {\n key,\n kind: sourceKind,\n type,\n } =\n /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */ (node);\n\n const sourceName =\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n key\n ).name;\n\n const oppositeKind = sourceKind === 'get' ? 'set' : 'get';\n\n const sibling = type === 'MethodDefinition' ?\n /** @type {import('@typescript-eslint/types').TSESTree.ClassBody} */ (\n node.parent\n ).body :\n /** @type {import('@typescript-eslint/types').TSESTree.ObjectExpression} */ (\n node.parent\n ).properties;\n\n return (\n sibling.some((child) => {\n const {\n key: ky,\n kind,\n } = /**\n * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n * import('@typescript-eslint/types').TSESTree.Property}\n */ (child);\n\n const name =\n /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n ky\n ).name;\n\n return kind === oppositeKind && name === sourceName;\n })\n );\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {import('eslint').Rule.Node|null} node\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('json-schema').JSONSchema4} schema\n * @returns {boolean}\n */\nconst exemptSpeciaMethods = (jsdoc, node, context, schema) => {\n /**\n * @param {\"checkGetters\"|\"checkSetters\"|\"checkConstructors\"} prop\n * @returns {boolean|\"no-setter\"|\"no-getter\"}\n */\n const hasSchemaOption = (prop) => {\n const schemaProperties = schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n const checkGetters = hasSchemaOption('checkGetters');\n const checkSetters = hasSchemaOption('checkSetters');\n\n return !hasSchemaOption('checkConstructors') &&\n (\n isConstructor(node) ||\n hasATag(jsdoc, [\n 'class',\n 'constructor',\n ])) ||\n isGetter(node) && (\n !checkGetters ||\n checkGetters === 'no-setter' && hasAccessorPair(/** @type {import('./iterateJsdoc.js').Node} */ (node).parent)\n ) ||\n isSetter(node) && (\n !checkSetters ||\n checkSetters === 'no-getter' && hasAccessorPair(/** @type {import('./iterateJsdoc.js').Node} */ (node).parent)\n );\n};\n\n/**\n * Since path segments may be unquoted (if matching a reserved word,\n * identifier or numeric literal) or single or double quoted, in either\n * the `@param` or in source, we need to strip the quotes to give a fair\n * comparison.\n * @param {string} str\n * @returns {string}\n */\nconst dropPathSegmentQuotes = (str) => {\n return str.replaceAll(/\\.(['\"])(.*)\\1/gv, '.$2');\n};\n\n/**\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\nconst comparePaths = (name) => {\n return (otherPathName) => {\n return otherPathName === name ||\n dropPathSegmentQuotes(otherPathName) === dropPathSegmentQuotes(name);\n };\n};\n\n/**\n * @callback PathDoesNotBeginWith\n * @param {string} name\n * @param {string} otherPathName\n * @returns {boolean}\n */\n\n/** @type {PathDoesNotBeginWith} */\nconst pathDoesNotBeginWith = (name, otherPathName) => {\n return !name.startsWith(otherPathName) &&\n !dropPathSegmentQuotes(name).startsWith(dropPathSegmentQuotes(otherPathName));\n};\n\n/**\n * @param {string} regexString\n * @param {string} [requiredFlags]\n * @returns {RegExp}\n */\nconst getRegexFromString = (regexString, requiredFlags) => {\n const match = regexString.match(/^\\/(.*)\\/([gimyvus]*)$/vs);\n let flags = 'v';\n let regex = regexString;\n if (match) {\n [\n , regex,\n flags,\n ] = match;\n if (!flags) {\n flags = 'v';\n }\n }\n\n const uniqueFlags = [\n ...new Set(flags + (requiredFlags || '')),\n ];\n flags = uniqueFlags.join('');\n\n return new RegExp(regex, flags);\n};\n\nexport {\n comparePaths,\n dropPathSegmentQuotes,\n enforcedContexts,\n exemptSpeciaMethods,\n filterTags,\n flattenRoots,\n forEachPreferredTag,\n getAllTags,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getPreferredTagNameSimple,\n getRegexFromString,\n getTagDescription,\n getTags,\n getTagsByType,\n getTagStructureForMode,\n hasATag,\n hasParams,\n\n hasTag,\n hasThrowValue,\n\n hasYieldValue,\n isConstructor,\n isGetter,\n isNamepathDefiningTag,\n isNamepathOrUrlReferencingTag,\n isNamepathReferencingTag,\n isSetter,\n isValidTag,\n mayBeUndefinedTypeTag,\n overrideTagStructure,\n parseClosureTemplateTag,\n pathDoesNotBeginWith,\n setTagStructure,\n tagMightHaveEitherTypeOrNamePosition,\n tagMightHaveNamepath,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMissingRequiredTypeOrNamepath,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\nexport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n} from './utils/hasReturnValue.js';\n"],"mappings":"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"}
package/dist/plugin.cjs DELETED
@@ -1,427 +0,0 @@
1
- const require_getJsdocProcessorPlugin = require('./getJsdocProcessorPlugin.cjs');
2
- const require_checkAccess = require('./rules/checkAccess.cjs');
3
- const require_checkAlignment = require('./rules/checkAlignment.cjs');
4
- const require_checkExamples = require('./rules/checkExamples.cjs');
5
- const require_checkIndentation = require('./rules/checkIndentation.cjs');
6
- const require_checkLineAlignment = require('./rules/checkLineAlignment.cjs');
7
- const require_checkParamNames = require('./rules/checkParamNames.cjs');
8
- const require_checkPropertyNames = require('./rules/checkPropertyNames.cjs');
9
- const require_checkSyntax = require('./rules/checkSyntax.cjs');
10
- const require_checkTagNames = require('./rules/checkTagNames.cjs');
11
- const require_checkTemplateNames = require('./rules/checkTemplateNames.cjs');
12
- const require_checkTypes = require('./rules/checkTypes.cjs');
13
- const require_checkValues = require('./rules/checkValues.cjs');
14
- const require_convertToJsdocComments = require('./rules/convertToJsdocComments.cjs');
15
- const require_emptyTags = require('./rules/emptyTags.cjs');
16
- const require_implementsOnClasses = require('./rules/implementsOnClasses.cjs');
17
- const require_importsAsDependencies = require('./rules/importsAsDependencies.cjs');
18
- const require_informativeDocs = require('./rules/informativeDocs.cjs');
19
- const require_linesBeforeBlock = require('./rules/linesBeforeBlock.cjs');
20
- const require_matchDescription = require('./rules/matchDescription.cjs');
21
- const require_matchName = require('./rules/matchName.cjs');
22
- const require_multilineBlocks = require('./rules/multilineBlocks.cjs');
23
- const require_noBadBlocks = require('./rules/noBadBlocks.cjs');
24
- const require_noBlankBlockDescriptions = require('./rules/noBlankBlockDescriptions.cjs');
25
- const require_noBlankBlocks = require('./rules/noBlankBlocks.cjs');
26
- const require_noDefaults = require('./rules/noDefaults.cjs');
27
- const require_noMissingSyntax = require('./rules/noMissingSyntax.cjs');
28
- const require_noMultiAsterisks = require('./rules/noMultiAsterisks.cjs');
29
- const require_noRestrictedSyntax = require('./rules/noRestrictedSyntax.cjs');
30
- const require_noTypes = require('./rules/noTypes.cjs');
31
- const require_noUndefinedTypes = require('./rules/noUndefinedTypes.cjs');
32
- const require_requireAsteriskPrefix = require('./rules/requireAsteriskPrefix.cjs');
33
- const require_requireDescription = require('./rules/requireDescription.cjs');
34
- const require_requireDescriptionCompleteSentence = require('./rules/requireDescriptionCompleteSentence.cjs');
35
- const require_requireExample = require('./rules/requireExample.cjs');
36
- const require_requireFileOverview = require('./rules/requireFileOverview.cjs');
37
- const require_requireHyphenBeforeParamDescription = require('./rules/requireHyphenBeforeParamDescription.cjs');
38
- const require_requireJsdoc = require('./rules/requireJsdoc.cjs');
39
- const require_requireParam = require('./rules/requireParam.cjs');
40
- const require_requireParamDescription = require('./rules/requireParamDescription.cjs');
41
- const require_requireParamName = require('./rules/requireParamName.cjs');
42
- const require_requireParamType = require('./rules/requireParamType.cjs');
43
- const require_requireProperty = require('./rules/requireProperty.cjs');
44
- const require_requirePropertyDescription = require('./rules/requirePropertyDescription.cjs');
45
- const require_requirePropertyName = require('./rules/requirePropertyName.cjs');
46
- const require_requirePropertyType = require('./rules/requirePropertyType.cjs');
47
- const require_requireReturns = require('./rules/requireReturns.cjs');
48
- const require_requireReturnsCheck = require('./rules/requireReturnsCheck.cjs');
49
- const require_requireReturnsDescription = require('./rules/requireReturnsDescription.cjs');
50
- const require_requireReturnsType = require('./rules/requireReturnsType.cjs');
51
- const require_requireTemplate = require('./rules/requireTemplate.cjs');
52
- const require_requireThrows = require('./rules/requireThrows.cjs');
53
- const require_requireYields = require('./rules/requireYields.cjs');
54
- const require_requireYieldsCheck = require('./rules/requireYieldsCheck.cjs');
55
- const require_sortTags = require('./rules/sortTags.cjs');
56
- const require_tagLines = require('./rules/tagLines.cjs');
57
- const require_textEscaping = require('./rules/textEscaping.cjs');
58
- const require_validTypes = require('./rules/validTypes.cjs');
59
-
60
- //#region src/plugin.js
61
- /**
62
- * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups
63
- * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants
64
- * @typedef {"" | "-error"} ErrorLevelVariants
65
- */
66
- /**
67
- * @type {import('eslint').ESLint.Plugin & {
68
- * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`,
69
- * import('eslint').Linter.Config>
70
- * }}
71
- */
72
- const plugin = {
73
- configs: {},
74
- rules: {
75
- "check-access": require_checkAccess.default,
76
- "check-alignment": require_checkAlignment.default,
77
- "check-examples": require_checkExamples.default,
78
- "check-indentation": require_checkIndentation.default,
79
- "check-line-alignment": require_checkLineAlignment.default,
80
- "check-param-names": require_checkParamNames.default,
81
- "check-property-names": require_checkPropertyNames.default,
82
- "check-syntax": require_checkSyntax.default,
83
- "check-tag-names": require_checkTagNames.default,
84
- "check-template-names": require_checkTemplateNames.default,
85
- "check-types": require_checkTypes.default,
86
- "check-values": require_checkValues.default,
87
- "convert-to-jsdoc-comments": require_convertToJsdocComments.default,
88
- "empty-tags": require_emptyTags.default,
89
- "implements-on-classes": require_implementsOnClasses.default,
90
- "imports-as-dependencies": require_importsAsDependencies.default,
91
- "informative-docs": require_informativeDocs.default,
92
- "lines-before-block": require_linesBeforeBlock.default,
93
- "match-description": require_matchDescription.default,
94
- "match-name": require_matchName.default,
95
- "multiline-blocks": require_multilineBlocks.default,
96
- "no-bad-blocks": require_noBadBlocks.default,
97
- "no-blank-block-descriptions": require_noBlankBlockDescriptions.default,
98
- "no-blank-blocks": require_noBlankBlocks.default,
99
- "no-defaults": require_noDefaults.default,
100
- "no-missing-syntax": require_noMissingSyntax.default,
101
- "no-multi-asterisks": require_noMultiAsterisks.default,
102
- "no-restricted-syntax": require_noRestrictedSyntax.default,
103
- "no-types": require_noTypes.default,
104
- "no-undefined-types": require_noUndefinedTypes.default,
105
- "require-asterisk-prefix": require_requireAsteriskPrefix.default,
106
- "require-description": require_requireDescription.default,
107
- "require-description-complete-sentence": require_requireDescriptionCompleteSentence.default,
108
- "require-example": require_requireExample.default,
109
- "require-file-overview": require_requireFileOverview.default,
110
- "require-hyphen-before-param-description": require_requireHyphenBeforeParamDescription.default,
111
- "require-jsdoc": require_requireJsdoc.default,
112
- "require-param": require_requireParam.default,
113
- "require-param-description": require_requireParamDescription.default,
114
- "require-param-name": require_requireParamName.default,
115
- "require-param-type": require_requireParamType.default,
116
- "require-property": require_requireProperty.default,
117
- "require-property-description": require_requirePropertyDescription.default,
118
- "require-property-name": require_requirePropertyName.default,
119
- "require-property-type": require_requirePropertyType.default,
120
- "require-returns": require_requireReturns.default,
121
- "require-returns-check": require_requireReturnsCheck.default,
122
- "require-returns-description": require_requireReturnsDescription.default,
123
- "require-returns-type": require_requireReturnsType.default,
124
- "require-template": require_requireTemplate.default,
125
- "require-throws": require_requireThrows.default,
126
- "require-yields": require_requireYields.default,
127
- "require-yields-check": require_requireYieldsCheck.default,
128
- "sort-tags": require_sortTags.default,
129
- "tag-lines": require_tagLines.default,
130
- "text-escaping": require_textEscaping.default,
131
- "valid-types": require_validTypes.default
132
- }
133
- };
134
- /**
135
- * @param {"warn"|"error"} warnOrError
136
- * @param {string} [flatName]
137
- * @returns {import('eslint').Linter.FlatConfig}
138
- */
139
- const createRecommendedRuleset = (warnOrError, flatName) => {
140
- return {
141
- ...flatName ? { name: "jsdoc/" + flatName } : {},
142
- plugins: flatName ? { jsdoc: plugin } : ["jsdoc"],
143
- rules: {
144
- "jsdoc/check-access": warnOrError,
145
- "jsdoc/check-alignment": warnOrError,
146
- "jsdoc/check-examples": "off",
147
- "jsdoc/check-indentation": "off",
148
- "jsdoc/check-line-alignment": "off",
149
- "jsdoc/check-param-names": warnOrError,
150
- "jsdoc/check-property-names": warnOrError,
151
- "jsdoc/check-syntax": "off",
152
- "jsdoc/check-tag-names": warnOrError,
153
- "jsdoc/check-template-names": "off",
154
- "jsdoc/check-types": warnOrError,
155
- "jsdoc/check-values": warnOrError,
156
- "jsdoc/convert-to-jsdoc-comments": "off",
157
- "jsdoc/empty-tags": warnOrError,
158
- "jsdoc/implements-on-classes": warnOrError,
159
- "jsdoc/imports-as-dependencies": "off",
160
- "jsdoc/informative-docs": "off",
161
- "jsdoc/lines-before-block": "off",
162
- "jsdoc/match-description": "off",
163
- "jsdoc/match-name": "off",
164
- "jsdoc/multiline-blocks": warnOrError,
165
- "jsdoc/no-bad-blocks": "off",
166
- "jsdoc/no-blank-block-descriptions": "off",
167
- "jsdoc/no-blank-blocks": "off",
168
- "jsdoc/no-defaults": warnOrError,
169
- "jsdoc/no-missing-syntax": "off",
170
- "jsdoc/no-multi-asterisks": warnOrError,
171
- "jsdoc/no-restricted-syntax": "off",
172
- "jsdoc/no-types": "off",
173
- "jsdoc/no-undefined-types": warnOrError,
174
- "jsdoc/require-asterisk-prefix": "off",
175
- "jsdoc/require-description": "off",
176
- "jsdoc/require-description-complete-sentence": "off",
177
- "jsdoc/require-example": "off",
178
- "jsdoc/require-file-overview": "off",
179
- "jsdoc/require-hyphen-before-param-description": "off",
180
- "jsdoc/require-jsdoc": warnOrError,
181
- "jsdoc/require-param": warnOrError,
182
- "jsdoc/require-param-description": warnOrError,
183
- "jsdoc/require-param-name": warnOrError,
184
- "jsdoc/require-param-type": warnOrError,
185
- "jsdoc/require-property": warnOrError,
186
- "jsdoc/require-property-description": warnOrError,
187
- "jsdoc/require-property-name": warnOrError,
188
- "jsdoc/require-property-type": warnOrError,
189
- "jsdoc/require-returns": warnOrError,
190
- "jsdoc/require-returns-check": warnOrError,
191
- "jsdoc/require-returns-description": warnOrError,
192
- "jsdoc/require-returns-type": warnOrError,
193
- "jsdoc/require-template": "off",
194
- "jsdoc/require-throws": "off",
195
- "jsdoc/require-yields": warnOrError,
196
- "jsdoc/require-yields-check": warnOrError,
197
- "jsdoc/sort-tags": "off",
198
- "jsdoc/tag-lines": warnOrError,
199
- "jsdoc/text-escaping": "off",
200
- "jsdoc/valid-types": warnOrError
201
- }
202
- };
203
- };
204
- /**
205
- * @param {"warn"|"error"} warnOrError
206
- * @param {string} [flatName]
207
- * @returns {import('eslint').Linter.FlatConfig}
208
- */
209
- const createRecommendedTypeScriptRuleset = (warnOrError, flatName) => {
210
- const ruleset = createRecommendedRuleset(warnOrError, flatName);
211
- return {
212
- ...ruleset,
213
- rules: {
214
- ...ruleset.rules,
215
- "jsdoc/check-tag-names": [warnOrError, { typed: true }],
216
- "jsdoc/no-types": warnOrError,
217
- "jsdoc/no-undefined-types": "off",
218
- "jsdoc/require-param-type": "off",
219
- "jsdoc/require-property-type": "off",
220
- "jsdoc/require-returns-type": "off"
221
- }
222
- };
223
- };
224
- /**
225
- * @param {"warn"|"error"} warnOrError
226
- * @param {string} [flatName]
227
- * @returns {import('eslint').Linter.FlatConfig}
228
- */
229
- const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flatName) => {
230
- const ruleset = createRecommendedRuleset(warnOrError, flatName);
231
- return {
232
- ...ruleset,
233
- rules: {
234
- ...ruleset.rules,
235
- "jsdoc/no-undefined-types": "off"
236
- }
237
- };
238
- };
239
- /**
240
- * @param {(string | unknown[])[]} ruleNames
241
- */
242
- const createStandaloneRulesetFactory = (ruleNames) => {
243
- /**
244
- * @param {"warn"|"error"} warnOrError
245
- * @param {string} [flatName]
246
- * @returns {import('eslint').Linter.FlatConfig}
247
- */
248
- return (warnOrError, flatName) => {
249
- return {
250
- name: "jsdoc/" + flatName,
251
- plugins: { jsdoc: plugin },
252
- rules: Object.fromEntries(ruleNames.map((ruleName) => {
253
- return typeof ruleName === "string" ? [ruleName, warnOrError] : [ruleName[0], [warnOrError, ...ruleName.slice(1)]];
254
- }))
255
- };
256
- };
257
- };
258
- const contentsRules = [
259
- "jsdoc/informative-docs",
260
- "jsdoc/match-description",
261
- "jsdoc/no-blank-block-descriptions",
262
- "jsdoc/no-blank-blocks",
263
- ["jsdoc/text-escaping", { escapeHTML: true }]
264
- ];
265
- const createContentsTypescriptRuleset = createStandaloneRulesetFactory(contentsRules);
266
- const createContentsTypescriptFlavorRuleset = createStandaloneRulesetFactory(contentsRules);
267
- const logicalRules = [
268
- "jsdoc/check-access",
269
- "jsdoc/check-param-names",
270
- "jsdoc/check-property-names",
271
- "jsdoc/check-syntax",
272
- "jsdoc/check-tag-names",
273
- "jsdoc/check-template-names",
274
- "jsdoc/check-types",
275
- "jsdoc/check-values",
276
- "jsdoc/empty-tags",
277
- "jsdoc/implements-on-classes",
278
- "jsdoc/require-returns-check",
279
- "jsdoc/require-yields-check",
280
- "jsdoc/no-bad-blocks",
281
- "jsdoc/no-defaults",
282
- "jsdoc/no-types",
283
- "jsdoc/no-undefined-types",
284
- "jsdoc/valid-types"
285
- ];
286
- const createLogicalTypescriptRuleset = createStandaloneRulesetFactory(logicalRules);
287
- const createLogicalTypescriptFlavorRuleset = createStandaloneRulesetFactory(logicalRules);
288
- const requirementsRules = [
289
- "jsdoc/require-example",
290
- "jsdoc/require-jsdoc",
291
- "jsdoc/require-param",
292
- "jsdoc/require-param-description",
293
- "jsdoc/require-param-name",
294
- "jsdoc/require-property",
295
- "jsdoc/require-property-description",
296
- "jsdoc/require-property-name",
297
- "jsdoc/require-returns",
298
- "jsdoc/require-returns-description",
299
- "jsdoc/require-yields"
300
- ];
301
- const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory(requirementsRules);
302
- const createRequirementsTypeScriptFlavorRuleset = createStandaloneRulesetFactory([
303
- ...requirementsRules,
304
- "jsdoc/require-param-type",
305
- "jsdoc/require-property-type",
306
- "jsdoc/require-returns-type",
307
- "jsdoc/require-template"
308
- ]);
309
- const stylisticRules = [
310
- "jsdoc/check-alignment",
311
- "jsdoc/check-line-alignment",
312
- "jsdoc/lines-before-block",
313
- "jsdoc/multiline-blocks",
314
- "jsdoc/no-multi-asterisks",
315
- "jsdoc/require-asterisk-prefix",
316
- ["jsdoc/require-hyphen-before-param-description", "never"],
317
- "jsdoc/tag-lines"
318
- ];
319
- const createStylisticTypeScriptRuleset = createStandaloneRulesetFactory(stylisticRules);
320
- const createStylisticTypeScriptFlavorRuleset = createStandaloneRulesetFactory(stylisticRules);
321
- /* c8 ignore next 3 -- TS */
322
- if (!plugin.configs) throw new Error("TypeScript guard");
323
- plugin.configs.recommended = createRecommendedRuleset("warn");
324
- plugin.configs["recommended-error"] = createRecommendedRuleset("error");
325
- plugin.configs["recommended-typescript"] = createRecommendedTypeScriptRuleset("warn");
326
- plugin.configs["recommended-typescript-error"] = createRecommendedTypeScriptRuleset("error");
327
- plugin.configs["recommended-typescript-flavor"] = createRecommendedTypeScriptFlavorRuleset("warn");
328
- plugin.configs["recommended-typescript-flavor-error"] = createRecommendedTypeScriptFlavorRuleset("error");
329
- plugin.configs["flat/recommended"] = createRecommendedRuleset("warn", "flat/recommended");
330
- plugin.configs["flat/recommended-error"] = createRecommendedRuleset("error", "flat/recommended-error");
331
- plugin.configs["flat/recommended-typescript"] = createRecommendedTypeScriptRuleset("warn", "flat/recommended-typescript");
332
- plugin.configs["flat/recommended-typescript-error"] = createRecommendedTypeScriptRuleset("error", "flat/recommended-typescript-error");
333
- plugin.configs["flat/recommended-typescript-flavor"] = createRecommendedTypeScriptFlavorRuleset("warn", "flat/recommended-typescript-flavor");
334
- plugin.configs["flat/recommended-typescript-flavor-error"] = createRecommendedTypeScriptFlavorRuleset("error", "flat/recommended-typescript-flavor-error");
335
- plugin.configs["flat/contents-typescript"] = createContentsTypescriptRuleset("warn", "flat/contents-typescript");
336
- plugin.configs["flat/contents-typescript-error"] = createContentsTypescriptRuleset("error", "flat/contents-typescript-error");
337
- plugin.configs["flat/contents-typescript-flavor"] = createContentsTypescriptFlavorRuleset("warn", "flat/contents-typescript-flavor");
338
- plugin.configs["flat/contents-typescript-flavor-error"] = createContentsTypescriptFlavorRuleset("error", "flat/contents-typescript-error-flavor");
339
- plugin.configs["flat/logical-typescript"] = createLogicalTypescriptRuleset("warn", "flat/logical-typescript");
340
- plugin.configs["flat/logical-typescript-error"] = createLogicalTypescriptRuleset("error", "flat/logical-typescript-error");
341
- plugin.configs["flat/logical-typescript-flavor"] = createLogicalTypescriptFlavorRuleset("warn", "flat/logical-typescript-flavor");
342
- plugin.configs["flat/logical-typescript-flavor-error"] = createLogicalTypescriptFlavorRuleset("error", "flat/logical-typescript-error-flavor");
343
- plugin.configs["flat/requirements-typescript"] = createRequirementsTypeScriptRuleset("warn", "flat/requirements-typescript");
344
- plugin.configs["flat/requirements-typescript-error"] = createRequirementsTypeScriptRuleset("error", "flat/requirements-typescript-error");
345
- plugin.configs["flat/requirements-typescript-flavor"] = createRequirementsTypeScriptFlavorRuleset("warn", "flat/requirements-typescript-flavor");
346
- plugin.configs["flat/requirements-typescript-flavor-error"] = createRequirementsTypeScriptFlavorRuleset("error", "flat/requirements-typescript-error-flavor");
347
- plugin.configs["flat/stylistic-typescript"] = createStylisticTypeScriptRuleset("warn", "flat/stylistic-typescript");
348
- plugin.configs["flat/stylistic-typescript-error"] = createStylisticTypeScriptRuleset("error", "flat/stylistic-typescript-error");
349
- plugin.configs["flat/stylistic-typescript-flavor"] = createStylisticTypeScriptFlavorRuleset("warn", "flat/stylistic-typescript-flavor");
350
- plugin.configs["flat/stylistic-typescript-flavor-error"] = createStylisticTypeScriptFlavorRuleset("error", "flat/stylistic-typescript-error-flavor");
351
- plugin.configs.examples = [{
352
- files: ["**/*.js"],
353
- name: "jsdoc/examples/processor",
354
- plugins: { examples: require_getJsdocProcessorPlugin.getJsdocProcessorPlugin() },
355
- processor: "examples/examples"
356
- }, {
357
- files: ["**/*.md/*.js"],
358
- name: "jsdoc/examples/rules",
359
- rules: {
360
- "eol-last": 0,
361
- "import/no-unresolved": 0,
362
- "import/unambiguous": 0,
363
- "jsdoc/require-file-overview": 0,
364
- "jsdoc/require-jsdoc": 0,
365
- "no-console": 0,
366
- "no-multiple-empty-lines": 0,
367
- "no-undef": 0,
368
- "no-unused-vars": 0,
369
- "node/no-missing-import": 0,
370
- "node/no-missing-require": 0,
371
- "padded-blocks": 0
372
- }
373
- }];
374
- plugin.configs["default-expressions"] = [{
375
- files: ["**/*.js"],
376
- name: "jsdoc/default-expressions/processor",
377
- plugins: { examples: require_getJsdocProcessorPlugin.getJsdocProcessorPlugin({
378
- checkDefaults: true,
379
- checkParams: true,
380
- checkProperties: true
381
- }) },
382
- processor: "examples/examples"
383
- }, {
384
- files: [
385
- "**/*.jsdoc-defaults",
386
- "**/*.jsdoc-params",
387
- "**/*.jsdoc-properties"
388
- ],
389
- name: "jsdoc/default-expressions/rules",
390
- rules: {
391
- ...plugin.configs.examples[1].rules,
392
- "chai-friendly/no-unused-expressions": 0,
393
- "no-empty-function": 0,
394
- "no-new": 0,
395
- "no-unused-expressions": 0,
396
- quotes: ["error", "double"],
397
- semi: ["error", "never"],
398
- strict: 0
399
- }
400
- }];
401
- plugin.configs["examples-and-default-expressions"] = [
402
- {
403
- name: "jsdoc/examples-and-default-expressions",
404
- plugins: { examples: require_getJsdocProcessorPlugin.getJsdocProcessorPlugin({
405
- checkDefaults: true,
406
- checkParams: true,
407
- checkProperties: true
408
- }) }
409
- },
410
- ...plugin.configs.examples.map((config) => {
411
- return {
412
- ...config,
413
- plugins: {}
414
- };
415
- }),
416
- ...plugin.configs["default-expressions"].map((config) => {
417
- return {
418
- ...config,
419
- plugins: {}
420
- };
421
- })
422
- ];
423
- var plugin_default = plugin;
424
-
425
- //#endregion
426
- exports.default = plugin_default;
427
- //# sourceMappingURL=plugin.cjs.map