@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,588 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _iterateJsdoc = _interopRequireWildcard(require("../iterateJsdoc.cjs"));
8
+ var _jsdoccomment = require("@es-joy/jsdoccomment");
9
+ var _parseImportsExports = require("parse-imports-exports");
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
+ const extraTypes = ['null', 'undefined', 'void', 'string', 'boolean', 'object', 'function', 'symbol', 'number', 'bigint', 'NaN', 'Infinity', 'any', '*', 'never', 'unknown', 'const', 'this', 'true', 'false', 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl'];
12
+ const globalTypes = ['globalThis', 'global', 'window', 'self'];
13
+ const typescriptGlobals = [
14
+ // https://www.typescriptlang.org/docs/handbook/utility-types.html
15
+ 'Awaited', 'Partial', 'Required', 'Readonly', 'Record', 'Pick', 'Omit', 'Exclude', 'Extract', 'NonNullable', 'Parameters', 'ConstructorParameters', 'ReturnType', 'InstanceType', 'ThisParameterType', 'OmitThisParameter', 'ThisType', 'Uppercase', 'Lowercase', 'Capitalize', 'Uncapitalize'];
16
+
17
+ /**
18
+ * @param {string|false|undefined} [str]
19
+ * @returns {undefined|string|false}
20
+ */
21
+ const stripPseudoTypes = str => {
22
+ return str && str.replace(/(?:\.|<>|\.<>|\[\])$/v, '');
23
+ };
24
+ var _default = exports.default = (0, _iterateJsdoc.default)(({
25
+ context,
26
+ node,
27
+ report,
28
+ settings,
29
+ sourceCode,
30
+ state,
31
+ utils
32
+ }) => {
33
+ /** @type {string[]} */
34
+ const foundTypedefValues = [];
35
+ const {
36
+ scopeManager
37
+ } = sourceCode;
38
+
39
+ // When is this ever `null`?
40
+ const globalScope = /** @type {import('eslint').Scope.Scope} */
41
+ scopeManager.globalScope;
42
+ const
43
+ /**
44
+ * @type {{
45
+ * checkUsedTypedefs: boolean
46
+ * definedTypes: string[],
47
+ * disableReporting: boolean,
48
+ * markVariablesAsUsed: boolean,
49
+ * }}
50
+ */
51
+ {
52
+ checkUsedTypedefs = false,
53
+ definedTypes = [],
54
+ disableReporting = false,
55
+ markVariablesAsUsed = true
56
+ } = context.options[0] || {};
57
+
58
+ /** @type {(string|undefined)[]} */
59
+ let definedPreferredTypes = [];
60
+ const {
61
+ mode,
62
+ preferredTypes,
63
+ structuredTags
64
+ } = settings;
65
+ if (Object.keys(preferredTypes).length) {
66
+ definedPreferredTypes = /** @type {string[]} */Object.values(preferredTypes).map(preferredType => {
67
+ if (typeof preferredType === 'string') {
68
+ // May become an empty string but will be filtered out below
69
+ return stripPseudoTypes(preferredType);
70
+ }
71
+ if (!preferredType) {
72
+ return undefined;
73
+ }
74
+ if (typeof preferredType !== 'object') {
75
+ utils.reportSettings('Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.');
76
+ }
77
+ return stripPseudoTypes(preferredType.replacement);
78
+ }).filter(Boolean);
79
+ }
80
+ const allComments = sourceCode.getAllComments();
81
+ const comments = allComments.filter(comment => {
82
+ return /^\*(?!\*)/v.test(comment.value);
83
+ }).map(commentNode => {
84
+ return (0, _iterateJsdoc.parseComment)(commentNode, '');
85
+ });
86
+ const globals = allComments.filter(comment => {
87
+ return /^\s*globals/v.test(comment.value);
88
+ }).flatMap(commentNode => {
89
+ return commentNode.value.replace(/^\s*globals/v, '').trim().split(/,\s*/v);
90
+ }).concat(Object.keys(context.languageOptions.globals ?? []));
91
+ const typedefs = comments.flatMap(doc => {
92
+ return doc.tags.filter(({
93
+ tag
94
+ }) => {
95
+ return utils.isNameOrNamepathDefiningTag(tag) && !['arg', 'argument', 'param', 'prop', 'property'].includes(tag);
96
+ });
97
+ });
98
+ const typedefDeclarations = typedefs.map(tag => {
99
+ return tag.name;
100
+ });
101
+ const importTags = settings.mode === 'typescript' ? (/** @type {string[]} */comments.flatMap(doc => {
102
+ return doc.tags.filter(({
103
+ tag
104
+ }) => {
105
+ return tag === 'import';
106
+ });
107
+ }).flatMap(tag => {
108
+ const {
109
+ description,
110
+ name,
111
+ type
112
+ } = tag;
113
+ const typePart = type ? `{${type}} ` : '';
114
+ const imprt = 'import ' + (description ? `${typePart}${name} ${description}` : `${typePart}${name}`);
115
+ const importsExports = (0, _parseImportsExports.parseImportsExports)(imprt.trim());
116
+ const types = [];
117
+ const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];
118
+ if (namedImports) {
119
+ if (namedImports.default) {
120
+ types.push(namedImports.default);
121
+ }
122
+ if (namedImports.names) {
123
+ types.push(...Object.keys(namedImports.names));
124
+ }
125
+ }
126
+ const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];
127
+ if (namespaceImports) {
128
+ if (namespaceImports.namespace) {
129
+ types.push(namespaceImports.namespace);
130
+ }
131
+ if (namespaceImports.default) {
132
+ types.push(namespaceImports.default);
133
+ }
134
+ }
135
+ return types;
136
+ }).filter(Boolean)) : [];
137
+ const ancestorNodes = [];
138
+ let currentNode = node;
139
+ // No need for Program node?
140
+ while (currentNode?.parent) {
141
+ ancestorNodes.push(currentNode);
142
+ currentNode = currentNode.parent;
143
+ }
144
+
145
+ /**
146
+ * @param {import('eslint').Rule.Node} ancestorNode
147
+ * @returns {import('comment-parser').Spec[]}
148
+ */
149
+ const getTemplateTags = function (ancestorNode) {
150
+ const commentNode = (0, _jsdoccomment.getJSDocComment)(sourceCode, ancestorNode, settings);
151
+ if (!commentNode) {
152
+ return [];
153
+ }
154
+ const jsdc = (0, _iterateJsdoc.parseComment)(commentNode, '');
155
+ return jsdc.tags.filter(tag => {
156
+ return tag.tag === 'template';
157
+ });
158
+ };
159
+
160
+ // `currentScope` may be `null` or `Program`, so in such a case,
161
+ // we look to present tags instead
162
+ const templateTags = ancestorNodes.length ? ancestorNodes.flatMap(ancestorNode => {
163
+ return getTemplateTags(ancestorNode);
164
+ }) :
165
+ // We err on the side of being too aggressive; checking only
166
+ // present tags is not sufficient
167
+ comments.flatMap(doc => {
168
+ return doc.tags.filter(({
169
+ tag
170
+ }) => {
171
+ return tag === 'template';
172
+ });
173
+ });
174
+ const closureGenericTypes = templateTags.flatMap(tag => {
175
+ return utils.parseClosureTemplateTag(tag);
176
+ });
177
+
178
+ // In modules, including Node, there is a global scope at top with the
179
+ // Program scope inside
180
+ const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';
181
+
182
+ /**
183
+ * @param {import("eslint").Scope.Scope | null} scope
184
+ * @returns {Set<string>}
185
+ */
186
+ const getValidRuntimeIdentifiers = scope => {
187
+ const result = new Set();
188
+ let scp = scope;
189
+ while (scp) {
190
+ for (const {
191
+ name
192
+ } of scp.variables) {
193
+ result.add(name);
194
+ }
195
+ scp = scp.upper;
196
+ }
197
+ return result;
198
+ };
199
+
200
+ /**
201
+ * Recursively extracts types from a namespace declaration.
202
+ * @param {string} prefix - The namespace prefix (e.g., "MyNamespace" or "Outer.Inner").
203
+ * @param {import('@typescript-eslint/types').TSESTree.TSModuleDeclaration} moduleDeclaration - The module declaration node.
204
+ * @returns {string[]} Array of fully qualified type names.
205
+ */
206
+ const getNamespaceTypes = (prefix, moduleDeclaration) => {
207
+ /* c8 ignore next 3 -- Guard for ambient modules without body. */
208
+ if (!moduleDeclaration.body || moduleDeclaration.body.type !== 'TSModuleBlock') {
209
+ return [];
210
+ }
211
+ return moduleDeclaration.body.body.flatMap(item => {
212
+ /** @type {import('@typescript-eslint/types').TSESTree.ProgramStatement | import('@typescript-eslint/types').TSESTree.NamedExportDeclarations | null} */
213
+ let declaration = item;
214
+ if (item.type === 'ExportNamedDeclaration' && item.declaration) {
215
+ declaration = item.declaration;
216
+ }
217
+ if (declaration.type === 'TSTypeAliasDeclaration' || declaration.type === 'ClassDeclaration') {
218
+ /* c8 ignore next 4 -- Guard for anonymous class declarations. */
219
+ if (!declaration.id) {
220
+ return [];
221
+ }
222
+ return [`${prefix}.${declaration.id.name}`];
223
+ }
224
+ if (declaration.type === 'TSInterfaceDeclaration') {
225
+ return [`${prefix}.${declaration.id.name}`, ...declaration.body.body.map(prop => {
226
+ // Only `TSPropertySignature` and `TSMethodSignature` have 'key'.
227
+ if (prop.type !== 'TSPropertySignature' && prop.type !== 'TSMethodSignature') {
228
+ return '';
229
+ }
230
+
231
+ // Key can be computed or a literal, only handle Identifier.
232
+ if (prop.key.type !== 'Identifier') {
233
+ return '';
234
+ }
235
+ const propName = prop.key.name;
236
+ /* c8 ignore next -- `propName` is always truthy for Identifiers. */
237
+ return propName ? `${prefix}.${declaration.id.name}.${propName}` : '';
238
+ }).filter(Boolean)];
239
+ }
240
+
241
+ // Handle nested namespaces.
242
+ if (declaration.type === 'TSModuleDeclaration') {
243
+ /* c8 ignore next -- Nested string-literal modules aren't valid TS syntax. */
244
+ const nestedName = declaration.id?.type === 'Identifier' ? declaration.id.name : '';
245
+ /* c8 ignore next 3 -- Guard. */
246
+ if (!nestedName) {
247
+ return [];
248
+ }
249
+ return [`${prefix}.${nestedName}`, ...getNamespaceTypes(`${prefix}.${nestedName}`, declaration)];
250
+ }
251
+
252
+ // Fallback for unhandled declaration types (e.g., TSEnumDeclaration, FunctionDeclaration, etc.).
253
+ return [];
254
+ });
255
+ };
256
+
257
+ /**
258
+ * We treat imports differently as we can't introspect their children.
259
+ * @type {string[]}
260
+ */
261
+ const imports = [];
262
+
263
+ /** @type {Set<string>} */
264
+ const closedTypes = new Set();
265
+ const allDefinedTypes = new Set(globalScope.variables.map(({
266
+ name
267
+ }) => {
268
+ return name;
269
+ })
270
+
271
+ // If the file is a module, concat the variables from the module scope.
272
+ .concat(cjsOrESMScope ? globalScope.childScopes.flatMap(({
273
+ variables
274
+ }) => {
275
+ return variables;
276
+ }).flatMap(({
277
+ identifiers,
278
+ name
279
+ }) => {
280
+ const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */identifiers?.[0]?.parent;
281
+ switch (globalItem?.type) {
282
+ case 'ClassDeclaration':
283
+ closedTypes.add(name);
284
+ return [name, ...globalItem.body.body.map(item => {
285
+ const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */(/** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */item?.key)?.name;
286
+ /* c8 ignore next 3 -- Guard */
287
+ if (!property) {
288
+ return '';
289
+ }
290
+ return `${name}.${property}`;
291
+ }).filter(Boolean)];
292
+ case 'ImportDefaultSpecifier':
293
+ case 'ImportNamespaceSpecifier':
294
+ case 'ImportSpecifier':
295
+ imports.push(name);
296
+ break;
297
+ case 'TSInterfaceDeclaration':
298
+ return [name, ...globalItem.body.body.map(item => {
299
+ const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */(/** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */item?.key)?.name;
300
+ /* c8 ignore next 3 -- Guard */
301
+ if (!property) {
302
+ return '';
303
+ }
304
+ return `${name}.${property}`;
305
+ }).filter(Boolean)];
306
+ case 'TSModuleDeclaration':
307
+ closedTypes.add(name);
308
+ return [name, ...getNamespaceTypes(name, globalItem)];
309
+ case 'VariableDeclarator':
310
+ if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */(/** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */globalItem?.init?.callee)?.name === 'require') {
311
+ imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */globalItem.id.name);
312
+ break;
313
+ }
314
+
315
+ // Module scope names are also defined
316
+ return [name];
317
+ }
318
+ return [name];
319
+ /* c8 ignore next */
320
+ }) : []).concat(extraTypes).concat(typedefDeclarations).concat(importTags).concat(definedTypes).concat(/** @type {string[]} */definedPreferredTypes).concat((() => {
321
+ // Other methods are not in scope, but we need them, and we grab them here
322
+ if (node?.type === 'MethodDefinition') {
323
+ return /** @type {import('estree').ClassBody} */node.parent.body.flatMap(methodOrProp => {
324
+ if (methodOrProp.type === 'MethodDefinition') {
325
+ // eslint-disable-next-line unicorn/no-lonely-if -- Pattern
326
+ if (methodOrProp.key.type === 'Identifier') {
327
+ return [methodOrProp.key.name, `${ /** @type {import('estree').ClassDeclaration} */node.parent?.parent?.id?.name}.${methodOrProp.key.name}`];
328
+ }
329
+ }
330
+ if (methodOrProp.type === 'PropertyDefinition') {
331
+ // eslint-disable-next-line unicorn/no-lonely-if -- Pattern
332
+ if (methodOrProp.key.type === 'Identifier') {
333
+ return [methodOrProp.key.name, `${ /** @type {import('estree').ClassDeclaration} */node.parent?.parent?.id?.name}.${methodOrProp.key.name}`];
334
+ }
335
+ }
336
+ /* c8 ignore next 2 -- Not yet built */
337
+
338
+ return '';
339
+ }).filter(Boolean);
340
+ }
341
+ return [];
342
+ })()).concat((() => {
343
+ // Detect static property assignments like `MyClass.Prop = ...`
344
+ const programBody = /** @type {import('@typescript-eslint/types').TSESTree.Program} */sourceCode.ast.body;
345
+ return programBody.flatMap(statement => {
346
+ if (statement.type === 'ExpressionStatement' && statement.expression.type === 'AssignmentExpression' && statement.expression.left.type === 'MemberExpression' && statement.expression.left.object.type === 'Identifier' && statement.expression.left.property.type === 'Identifier' && closedTypes.has(statement.expression.left.object.name)) {
347
+ return [`${statement.expression.left.object.name}.${statement.expression.left.property.name}`];
348
+ }
349
+ return [];
350
+ });
351
+ })()).concat(...getValidRuntimeIdentifiers(node && (sourceCode.getScope && /* c8 ignore next 3 */
352
+ sourceCode.getScope(node) ||
353
+ // @ts-expect-error ESLint 8
354
+ context.getScope()))).concat(settings.mode === 'jsdoc' ? [] : [...(settings.mode === 'typescript' ? typescriptGlobals : []), ...closureGenericTypes]));
355
+
356
+ /**
357
+ * @typedef {{
358
+ * parsedType: import('jsdoc-type-pratt-parser').RootResult;
359
+ * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {
360
+ * line?: import('../iterateJsdoc.js').Integer
361
+ * }
362
+ * }} TypeAndTagInfo
363
+ */
364
+
365
+ /**
366
+ * @param {string} propertyName
367
+ * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {
368
+ * name?: string,
369
+ * type?: string,
370
+ * line?: import('../iterateJsdoc.js').Integer
371
+ * })|import('comment-parser').Spec & {
372
+ * namepathOrURL?: string
373
+ * }
374
+ * ) => undefined|TypeAndTagInfo}
375
+ */
376
+ const tagToParsedType = propertyName => {
377
+ return tag => {
378
+ try {
379
+ const potentialType = tag[(/** @type {"type"|"name"|"namepathOrURL"} */propertyName)];
380
+ return {
381
+ parsedType: mode === 'permissive' ? (0, _jsdoccomment.tryParse)(/** @type {string} */potentialType) : (0, _jsdoccomment.parse)(/** @type {string} */potentialType, mode),
382
+ tag
383
+ };
384
+ } catch {
385
+ return undefined;
386
+ }
387
+ };
388
+ };
389
+ const typeTags = utils.filterTags(({
390
+ tag
391
+ }) => {
392
+ return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');
393
+ }).map(tagToParsedType('type'));
394
+ const namepathReferencingTags = utils.filterTags(({
395
+ tag
396
+ }) => {
397
+ return utils.isNamepathReferencingTag(tag);
398
+ }).map(tagToParsedType('name'));
399
+ const namepathOrUrlReferencingTags = utils.filterAllTags(({
400
+ tag
401
+ }) => {
402
+ return utils.isNamepathOrUrlReferencingTag(tag);
403
+ }).map(tagToParsedType('namepathOrURL'));
404
+ const definedNamesAndNamepaths = new Set(utils.filterTags(({
405
+ tag
406
+ }) => {
407
+ return utils.isNameOrNamepathDefiningTag(tag);
408
+ }).map(({
409
+ name
410
+ }) => {
411
+ return name;
412
+ }));
413
+ const tagsWithTypes = /** @type {TypeAndTagInfo[]} */[...typeTags, ...namepathReferencingTags, ...namepathOrUrlReferencingTags
414
+ // Remove types which failed to parse
415
+ ].filter(Boolean);
416
+ for (const {
417
+ parsedType,
418
+ tag
419
+ } of tagsWithTypes) {
420
+ // eslint-disable-next-line complexity -- Refactor
421
+ (0, _jsdoccomment.traverse)(parsedType, (nde, parentNode) => {
422
+ /**
423
+ * @type {import('jsdoc-type-pratt-parser').NameResult & {
424
+ * _parent?: import('jsdoc-type-pratt-parser').NonRootResult
425
+ * }}
426
+ */
427
+ // eslint-disable-next-line canonical/id-match -- Avoid clashes
428
+ nde._parent = parentNode;
429
+ const {
430
+ type,
431
+ value
432
+ } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */nde;
433
+ let val = value;
434
+
435
+ /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */
436
+ let currNode = nde;
437
+ do {
438
+ currNode =
439
+ /**
440
+ * @type {import('jsdoc-type-pratt-parser').NameResult & {
441
+ * _parent?: import('jsdoc-type-pratt-parser').NonRootResult
442
+ * }}
443
+ */
444
+ currNode._parent;
445
+ if (
446
+ // Avoid appending for imports and globals since we don't want to
447
+ // check their properties which may or may not exist
448
+ !imports.includes(val) && !globals.includes(val) && !importTags.includes(val) && !extraTypes.includes(val) && !typedefDeclarations.includes(val) && !globalTypes.includes(val) && currNode && 'right' in currNode && currNode.right?.type === 'JsdocTypeProperty') {
449
+ val = val + '.' + currNode.right.value;
450
+ }
451
+ } while (currNode?.type === 'JsdocTypeNamePath');
452
+ if (type === 'JsdocTypeName') {
453
+ const structuredTypes = structuredTags[tag.tag]?.type;
454
+ const rootNamespace = val.split('.')[0];
455
+ const isNamespaceValid = (definedTypes.includes(rootNamespace) || allDefinedTypes.has(rootNamespace)) && !closedTypes.has(rootNamespace);
456
+ if (!allDefinedTypes.has(val) && !definedNamesAndNamepaths.has(val) && (!Array.isArray(structuredTypes) || !structuredTypes.includes(val)) && !isNamespaceValid) {
457
+ const parent =
458
+ /**
459
+ * @type {import('jsdoc-type-pratt-parser').RootResult & {
460
+ * _parent?: import('jsdoc-type-pratt-parser').NonRootResult
461
+ * }}
462
+ */
463
+ nde._parent;
464
+ if (parent?.type === 'JsdocTypeTypeParameter') {
465
+ return;
466
+ }
467
+ if (parent?.type === 'JsdocTypeFunction' && /** @type {import('jsdoc-type-pratt-parser').FunctionResult} */
468
+ parent?.typeParameters?.some(typeParam => {
469
+ return value === typeParam.name.value;
470
+ })) {
471
+ return;
472
+ }
473
+ if (parent?.type === 'JsdocTypeInfer' && value === parent.element.value) {
474
+ allDefinedTypes.add(value);
475
+ return;
476
+ }
477
+ if (!disableReporting) {
478
+ report(`The type '${val}' is undefined.`, null, tag);
479
+ }
480
+ } else if (markVariablesAsUsed && !extraTypes.includes(val)) {
481
+ if (sourceCode.markVariableAsUsed) {
482
+ sourceCode.markVariableAsUsed(val);
483
+ /* c8 ignore next 4 */
484
+ } else {
485
+ // @ts-expect-error ESLint 8
486
+ context.markVariableAsUsed(val);
487
+ }
488
+ }
489
+ if (checkUsedTypedefs && typedefDeclarations.includes(val)) {
490
+ foundTypedefValues.push(val);
491
+ }
492
+ }
493
+ });
494
+ }
495
+ state.foundTypedefValues = foundTypedefValues;
496
+ }, {
497
+ // We use this method rather than checking at end of handler above because
498
+ // in that case, it is invoked too many times and would thus report errors
499
+ // too many times.
500
+ exit({
501
+ context,
502
+ state,
503
+ utils
504
+ }) {
505
+ const {
506
+ checkUsedTypedefs = false
507
+ } = context.options[0] || {};
508
+ if (!checkUsedTypedefs) {
509
+ return;
510
+ }
511
+ const allComments = context.sourceCode.getAllComments();
512
+ const comments = allComments.filter(comment => {
513
+ return /^\*(?!\*)/v.test(comment.value);
514
+ }).map(commentNode => {
515
+ return {
516
+ doc: (0, _iterateJsdoc.parseComment)(commentNode, ''),
517
+ loc: commentNode.loc
518
+ };
519
+ });
520
+ const typedefs = comments.flatMap(({
521
+ doc,
522
+ loc
523
+ }) => {
524
+ const tags = doc.tags.filter(({
525
+ tag
526
+ }) => {
527
+ return utils.isNameOrNamepathDefiningTag(tag);
528
+ });
529
+ if (!tags.length) {
530
+ return [];
531
+ }
532
+ return {
533
+ loc,
534
+ tags
535
+ };
536
+ });
537
+ for (const typedef of typedefs) {
538
+ if (!state.foundTypedefValues.includes(typedef.tags[0].name)) {
539
+ context.report({
540
+ loc: (/** @type {import('@eslint/core').SourceLocation} */typedef.loc),
541
+ message: 'This typedef was not used within the file'
542
+ });
543
+ }
544
+ }
545
+ },
546
+ iterateAllJsdocs: true,
547
+ meta: {
548
+ docs: {
549
+ description: 'Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`.',
550
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header'
551
+ },
552
+ schema: [{
553
+ additionalProperties: false,
554
+ properties: {
555
+ checkUsedTypedefs: {
556
+ description: 'Whether to check typedefs for use within the file',
557
+ type: 'boolean'
558
+ },
559
+ definedTypes: {
560
+ description: `This array can be populated to indicate other types which
561
+ are automatically considered as defined (in addition to globals, etc.).
562
+ Defaults to an empty array.`,
563
+ items: {
564
+ type: 'string'
565
+ },
566
+ type: 'array'
567
+ },
568
+ disableReporting: {
569
+ description: `Whether to disable reporting of errors. Defaults to
570
+ \`false\`. This may be set to \`true\` in order to take advantage of only
571
+ marking defined variables as used or checking used typedefs.`,
572
+ type: 'boolean'
573
+ },
574
+ markVariablesAsUsed: {
575
+ description: `Whether to mark variables as used for the purposes
576
+ of the \`no-unused-vars\` rule when they are not found to be undefined.
577
+ Defaults to \`true\`. May be set to \`false\` to enforce a practice of not
578
+ importing types unless used in code.`,
579
+ type: 'boolean'
580
+ }
581
+ },
582
+ type: 'object'
583
+ }],
584
+ type: 'suggestion'
585
+ }
586
+ });
587
+ module.exports = exports.default;
588
+ //# sourceMappingURL=noUndefinedTypes.cjs.map