@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,973 @@
1
+ import {
2
+ findJSDocComment,
3
+ } from '@es-joy/jsdoccomment';
4
+ import debugModule from 'debug';
5
+
6
+ const debug = debugModule('requireExportJsdoc');
7
+
8
+ /**
9
+ * @typedef {{
10
+ * value: string
11
+ * }} ValueObject
12
+ */
13
+
14
+ /**
15
+ * @typedef {{
16
+ * type?: string,
17
+ * value?: ValueObject|import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node,
18
+ * props: {
19
+ * [key: string]: CreatedNode|null,
20
+ * },
21
+ * special?: true,
22
+ * globalVars?: CreatedNode,
23
+ * exported?: boolean,
24
+ * ANONYMOUS_DEFAULT?: import('eslint').Rule.Node
25
+ * }} CreatedNode
26
+ */
27
+
28
+ /**
29
+ * @returns {CreatedNode}
30
+ */
31
+ const createNode = function () {
32
+ return {
33
+ props: {},
34
+ };
35
+ };
36
+
37
+ /**
38
+ * @param {CreatedNode|null} symbol
39
+ * @returns {string|null}
40
+ */
41
+ const getSymbolValue = function (symbol) {
42
+ /* c8 ignore next 3 */
43
+ if (!symbol) {
44
+ return null;
45
+ }
46
+
47
+ /* c8 ignore else */
48
+ if (symbol.type === 'literal') {
49
+ return /** @type {ValueObject} */ (symbol.value).value;
50
+ }
51
+ /* c8 ignore next 2 */
52
+ // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8
53
+ return null;
54
+ };
55
+
56
+ /**
57
+ *
58
+ * @param {import('estree').Identifier} node
59
+ * @param {CreatedNode} globals
60
+ * @param {CreatedNode} scope
61
+ * @param {SymbolOptions} opts
62
+ * @returns {CreatedNode|null}
63
+ */
64
+ const getIdentifier = function (node, globals, scope, opts) {
65
+ if (opts.simpleIdentifier) {
66
+ // Type is Identier for noncomputed properties
67
+ const identifierLiteral = createNode();
68
+ identifierLiteral.type = 'literal';
69
+ identifierLiteral.value = {
70
+ value: node.name,
71
+ };
72
+
73
+ return identifierLiteral;
74
+ }
75
+
76
+ /* c8 ignore next */
77
+ const block = scope || globals;
78
+
79
+ // As scopes are not currently supported, they are not traversed upwards recursively
80
+ if (block.props[node.name]) {
81
+ return block.props[node.name];
82
+ }
83
+
84
+ // Seems this will only be entered once scopes added and entered
85
+ /* c8 ignore next 3 */
86
+ if (globals.props[node.name]) {
87
+ return globals.props[node.name];
88
+ }
89
+
90
+ return null;
91
+ };
92
+
93
+ /**
94
+ * @callback CreateSymbol
95
+ * @param {import('eslint').Rule.Node|null} node
96
+ * @param {CreatedNode} globals
97
+ * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null} value
98
+ * @param {CreatedNode} [scope]
99
+ * @param {boolean|SymbolOptions} [isGlobal]
100
+ * @returns {CreatedNode|null}
101
+ */
102
+
103
+ /** @type {CreateSymbol} */
104
+ let createSymbol; // eslint-disable-line prefer-const
105
+
106
+ /**
107
+ * @typedef {{
108
+ * simpleIdentifier?: boolean
109
+ * }} SymbolOptions
110
+ */
111
+
112
+ /**
113
+ *
114
+ * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node
115
+ * @param {CreatedNode} globals
116
+ * @param {CreatedNode} scope
117
+ * @param {SymbolOptions} [opt]
118
+ * @returns {CreatedNode|null}
119
+ */
120
+ const getSymbol = function (node, globals, scope, opt) {
121
+ const opts = opt || {};
122
+ /* c8 ignore next */
123
+ switch (node.type) {
124
+ /* c8 ignore next 4 -- No longer needed? */
125
+ case 'ArrowFunctionExpression':
126
+
127
+ // Fallthrough
128
+ case 'ClassDeclaration':
129
+
130
+ case 'FunctionDeclaration':
131
+
132
+ case 'FunctionExpression':
133
+ case 'TSEnumDeclaration':
134
+ case 'TSInterfaceDeclaration':
135
+ case 'TSTypeAliasDeclaration': {
136
+ const val = createNode();
137
+ val.props.prototype = createNode();
138
+ val.props.prototype.type = 'object';
139
+ val.type = 'object';
140
+ val.value = node;
141
+
142
+ return val;
143
+ }
144
+
145
+ case 'AssignmentExpression': {
146
+ return createSymbol(
147
+ /** @type {import('eslint').Rule.Node} */
148
+ (node.left),
149
+ globals,
150
+ /** @type {import('eslint').Rule.Node} */
151
+ (node.right),
152
+ scope,
153
+ opts,
154
+ );
155
+ }
156
+
157
+ case 'ClassBody': {
158
+ const val = createNode();
159
+ for (const method of node.body) {
160
+ // StaticBlock
161
+ if (!('key' in method)) {
162
+ continue;
163
+ }
164
+
165
+ val.props[
166
+ /** @type {import('estree').Identifier} */ (
167
+ /** @type {import('estree').MethodDefinition} */ (
168
+ method
169
+ ).key
170
+ ).name
171
+ ] = createNode();
172
+ /** @type {{[key: string]: CreatedNode}} */ (val.props)[
173
+ /** @type {import('estree').Identifier} */ (
174
+ /** @type {import('estree').MethodDefinition} */ (
175
+ method
176
+ ).key
177
+ ).name
178
+ ].type = 'object';
179
+ /** @type {{[key: string]: CreatedNode}} */ (val.props)[
180
+ /** @type {import('estree').Identifier} */ (
181
+ /** @type {import('estree').MethodDefinition} */ (
182
+ method
183
+ ).key
184
+ ).name
185
+ ].value = /** @type {import('eslint').Rule.Node} */ (
186
+ /** @type {import('estree').MethodDefinition} */ (method).value
187
+ );
188
+ }
189
+
190
+ val.type = 'object';
191
+ val.value = node.parent;
192
+
193
+ return val;
194
+ }
195
+
196
+ case 'ClassExpression': {
197
+ return getSymbol(
198
+ /** @type {import('eslint').Rule.Node} */
199
+ (node.body),
200
+ globals,
201
+ scope,
202
+ opts,
203
+ );
204
+ }
205
+
206
+ case 'Identifier': {
207
+ return getIdentifier(node, globals, scope, opts);
208
+ }
209
+
210
+ case 'Literal': {
211
+ const val = createNode();
212
+ val.type = 'literal';
213
+ val.value = node;
214
+
215
+ return val;
216
+ }
217
+
218
+ case 'MemberExpression': {
219
+ const obj = getSymbol(
220
+ /** @type {import('eslint').Rule.Node} */
221
+ (node.object),
222
+ globals,
223
+ scope,
224
+ opts,
225
+ );
226
+ const propertySymbol = getSymbol(
227
+ /** @type {import('eslint').Rule.Node} */
228
+ (node.property),
229
+ globals,
230
+ scope,
231
+ {
232
+ simpleIdentifier: !node.computed,
233
+ },
234
+ );
235
+ const propertyValue = getSymbolValue(propertySymbol);
236
+
237
+ /* c8 ignore else */
238
+ if (obj && propertyValue && obj.props[propertyValue]) {
239
+ const block = obj.props[propertyValue];
240
+
241
+ return block;
242
+ }
243
+ /* c8 ignore next 11 */
244
+ /*
245
+ if (opts.createMissingProps && propertyValue) {
246
+ obj.props[propertyValue] = createNode();
247
+
248
+ return obj.props[propertyValue];
249
+ }
250
+ */
251
+ // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8
252
+ debug(`MemberExpression: Missing property ${
253
+ /** @type {import('estree').PrivateIdentifier} */ (node.property).name
254
+ }`);
255
+ /* c8 ignore next 2 */
256
+ return null;
257
+ }
258
+
259
+ case 'ObjectExpression': {
260
+ const val = createNode();
261
+ val.type = 'object';
262
+ for (const prop of node.properties) {
263
+ if ([
264
+ // @babel/eslint-parser
265
+ 'ExperimentalSpreadProperty',
266
+
267
+ // typescript-eslint, espree, acorn, etc.
268
+ 'SpreadElement',
269
+ ].includes(prop.type)) {
270
+ continue;
271
+ }
272
+
273
+ const propVal = getSymbol(
274
+ /** @type {import('eslint').Rule.Node} */ (
275
+ /** @type {import('estree').Property} */
276
+ (prop).value
277
+ ),
278
+ globals,
279
+ scope,
280
+ opts,
281
+ );
282
+ /* c8 ignore next 8 */
283
+ if (propVal) {
284
+ val.props[
285
+ /** @type {import('estree').PrivateIdentifier} */
286
+ (
287
+ /** @type {import('estree').Property} */ (prop).key
288
+ ).name
289
+ ] = propVal;
290
+ }
291
+ }
292
+
293
+ return val;
294
+ }
295
+ }
296
+ /* c8 ignore next 2 */
297
+ // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8
298
+ return null;
299
+ };
300
+
301
+ /**
302
+ *
303
+ * @param {CreatedNode} block
304
+ * @param {string} name
305
+ * @param {CreatedNode|null} value
306
+ * @param {CreatedNode} globals
307
+ * @param {boolean|SymbolOptions|undefined} isGlobal
308
+ * @returns {void}
309
+ */
310
+ const createBlockSymbol = function (block, name, value, globals, isGlobal) {
311
+ block.props[name] = value;
312
+ if (isGlobal && globals.props.window && globals.props.window.special) {
313
+ globals.props.window.props[name] = value;
314
+ }
315
+ };
316
+
317
+ createSymbol = function (node, globals, value, scope, isGlobal) {
318
+ const block = scope || globals;
319
+ /* c8 ignore next 3 */
320
+ if (!node) {
321
+ return null;
322
+ }
323
+
324
+ let symbol;
325
+ switch (node.type) {
326
+ case 'ClassDeclaration':
327
+ /* c8 ignore next */
328
+ // @ts-expect-error TS OK
329
+ // Fall through
330
+ case 'FunctionDeclaration': case 'TSEnumDeclaration':
331
+ /* c8 ignore next */
332
+ // @ts-expect-error TS OK
333
+ // Fall through
334
+ case 'TSInterfaceDeclaration': case 'TSTypeAliasDeclaration': {
335
+ const nde = /** @type {import('estree').ClassDeclaration} */ (node);
336
+ /* c8 ignore else */
337
+ if (nde.id && nde.id.type === 'Identifier') {
338
+ return createSymbol(
339
+ /** @type {import('eslint').Rule.Node} */ (nde.id),
340
+ globals,
341
+ node,
342
+ globals,
343
+ );
344
+ }
345
+ /* c8 ignore next 3 */
346
+ // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8
347
+ break;
348
+ }
349
+
350
+ case 'Identifier': {
351
+ const nde = /** @type {import('estree').Identifier} */ (node);
352
+ if (value) {
353
+ const valueSymbol = getSymbol(value, globals, block);
354
+ /* c8 ignore else */
355
+ if (valueSymbol) {
356
+ createBlockSymbol(block, nde.name, valueSymbol, globals, isGlobal);
357
+
358
+ return block.props[nde.name];
359
+ }
360
+ /* c8 ignore next 2 */
361
+ // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8
362
+ debug('Identifier: Missing value symbol for %s', nde.name);
363
+ } else {
364
+ createBlockSymbol(block, nde.name, createNode(), globals, isGlobal);
365
+
366
+ return block.props[nde.name];
367
+ }
368
+ /* c8 ignore next 3 */
369
+ // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8
370
+ break;
371
+ }
372
+
373
+ case 'MemberExpression': {
374
+ const nde = /** @type {import('estree').MemberExpression} */ (node);
375
+ symbol = getSymbol(
376
+ /** @type {import('eslint').Rule.Node} */ (nde.object), globals, block,
377
+ );
378
+
379
+ const propertySymbol = getSymbol(
380
+ /** @type {import('eslint').Rule.Node} */ (nde.property),
381
+ globals,
382
+ block,
383
+ {
384
+ simpleIdentifier: !nde.computed,
385
+ },
386
+ );
387
+ const propertyValue = getSymbolValue(propertySymbol);
388
+ if (symbol && propertyValue) {
389
+ createBlockSymbol(symbol, propertyValue, getSymbol(
390
+ /** @type {import('eslint').Rule.Node} */
391
+ (value), globals, block,
392
+ ), globals, isGlobal);
393
+ return symbol.props[propertyValue];
394
+ }
395
+
396
+ debug(
397
+ 'MemberExpression: Missing symbol: %s',
398
+ /** @type {import('estree').Identifier} */ (
399
+ nde.property
400
+ ).name,
401
+ );
402
+ break;
403
+ }
404
+ }
405
+
406
+ return null;
407
+ };
408
+
409
+ /**
410
+ * Creates variables from variable definitions
411
+ * @param {import('eslint').Rule.Node} node
412
+ * @param {CreatedNode} globals
413
+ * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts
414
+ * @returns {void}
415
+ */
416
+ const initVariables = function (node, globals, opts) {
417
+ switch (node.type) {
418
+ case 'ExportNamedDeclaration': {
419
+ if (node.declaration) {
420
+ initVariables(
421
+ /** @type {import('eslint').Rule.Node} */
422
+ (node.declaration),
423
+ globals,
424
+ opts,
425
+ );
426
+ }
427
+
428
+ break;
429
+ }
430
+
431
+ case 'ExpressionStatement': {
432
+ initVariables(
433
+ /** @type {import('eslint').Rule.Node} */
434
+ (node.expression),
435
+ globals,
436
+ opts,
437
+ );
438
+ break;
439
+ }
440
+
441
+ case 'Program': {
442
+ for (const childNode of node.body) {
443
+ initVariables(
444
+ /** @type {import('eslint').Rule.Node} */
445
+ (childNode),
446
+ globals,
447
+ opts,
448
+ );
449
+ }
450
+
451
+ break;
452
+ }
453
+
454
+ case 'VariableDeclaration': {
455
+ for (const declaration of node.declarations) {
456
+ // let and const
457
+ const symbol = createSymbol(
458
+ /** @type {import('eslint').Rule.Node} */
459
+ (declaration.id),
460
+ globals,
461
+ null,
462
+ globals,
463
+ );
464
+ if (opts.initWindow && node.kind === 'var' && globals.props.window) {
465
+ // If var, also add to window
466
+ globals.props.window.props[
467
+ /** @type {import('estree').Identifier} */
468
+ (declaration.id).name
469
+ ] = symbol;
470
+ }
471
+ }
472
+
473
+ break;
474
+ }
475
+ }
476
+ };
477
+
478
+ /**
479
+ * Populates variable maps using AST
480
+ * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node
481
+ * @param {CreatedNode} globals
482
+ * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt
483
+ * @param {true} [isExport]
484
+ * @returns {boolean}
485
+ */
486
+ const mapVariables = function (node, globals, opt, isExport) {
487
+ /* c8 ignore next */
488
+ const opts = opt || {};
489
+ /* c8 ignore next */
490
+ switch (node.type) {
491
+ case 'AssignmentExpression': {
492
+ createSymbol(
493
+ /** @type {import('eslint').Rule.Node} */
494
+ (node.left),
495
+ globals,
496
+ /** @type {import('eslint').Rule.Node} */
497
+ (node.right),
498
+ );
499
+ break;
500
+ }
501
+
502
+ case 'ClassDeclaration': {
503
+ createSymbol(
504
+ /** @type {import('eslint').Rule.Node|null} */ (node.id),
505
+ globals,
506
+ /** @type {import('eslint').Rule.Node} */ (node.body),
507
+ globals,
508
+ );
509
+ break;
510
+ }
511
+
512
+ case 'ExportDefaultDeclaration': {
513
+ const symbol = createSymbol(
514
+ /** @type {import('eslint').Rule.Node} */
515
+ (node.declaration),
516
+ globals,
517
+ /** @type {import('eslint').Rule.Node} */
518
+ (node.declaration),
519
+ );
520
+ if (symbol) {
521
+ symbol.exported = true;
522
+ /* c8 ignore next 6 */
523
+ } else {
524
+ // if (!node.id) {
525
+ globals.ANONYMOUS_DEFAULT = /** @type {import('eslint').Rule.Node} */ (
526
+ node.declaration
527
+ );
528
+ }
529
+
530
+ break;
531
+ }
532
+
533
+ case 'ExportNamedDeclaration': {
534
+ if (node.declaration) {
535
+ if (node.declaration.type === 'VariableDeclaration') {
536
+ mapVariables(
537
+ /** @type {import('eslint').Rule.Node} */
538
+ (node.declaration),
539
+ globals,
540
+ opts,
541
+ true,
542
+ );
543
+ } else {
544
+ const symbol = createSymbol(
545
+ /** @type {import('eslint').Rule.Node} */
546
+ (node.declaration),
547
+ globals,
548
+ /** @type {import('eslint').Rule.Node} */
549
+ (node.declaration),
550
+ );
551
+ /* c8 ignore next 3 */
552
+ if (symbol) {
553
+ symbol.exported = true;
554
+ }
555
+ }
556
+ }
557
+
558
+ for (const specifier of node.specifiers) {
559
+ mapVariables(
560
+ /** @type {import('eslint').Rule.Node} */
561
+ (specifier),
562
+ globals,
563
+ opts,
564
+ );
565
+ }
566
+
567
+ break;
568
+ }
569
+
570
+ case 'ExportSpecifier': {
571
+ const symbol = getSymbol(
572
+ /** @type {import('eslint').Rule.Node} */
573
+ (node.local),
574
+ globals,
575
+ globals,
576
+ );
577
+ /* c8 ignore next 3 */
578
+ if (symbol) {
579
+ symbol.exported = true;
580
+ }
581
+
582
+ break;
583
+ }
584
+
585
+ case 'ExpressionStatement': {
586
+ mapVariables(
587
+ /** @type {import('eslint').Rule.Node} */
588
+ (node.expression),
589
+ globals,
590
+ opts,
591
+ );
592
+ break;
593
+ }
594
+
595
+ case 'FunctionDeclaration':
596
+
597
+ case 'TSTypeAliasDeclaration': {
598
+ /* c8 ignore next 10 */
599
+ if (/** @type {import('estree').Identifier} */ (node.id).type === 'Identifier') {
600
+ createSymbol(
601
+ /** @type {import('eslint').Rule.Node} */
602
+ (node.id),
603
+ globals,
604
+ node,
605
+ globals,
606
+ true,
607
+ );
608
+ }
609
+
610
+ break;
611
+ }
612
+
613
+ case 'Program': {
614
+ if (opts.ancestorsOnly) {
615
+ return false;
616
+ }
617
+
618
+ for (const childNode of node.body) {
619
+ mapVariables(
620
+ /** @type {import('eslint').Rule.Node} */
621
+ (childNode),
622
+ globals,
623
+ opts,
624
+ );
625
+ }
626
+
627
+ break;
628
+ }
629
+
630
+ case 'VariableDeclaration': {
631
+ for (const declaration of node.declarations) {
632
+ const isGlobal = Boolean(opts.initWindow && node.kind === 'var' && globals.props.window);
633
+ const symbol = createSymbol(
634
+ /** @type {import('eslint').Rule.Node} */
635
+ (declaration.id),
636
+ globals,
637
+ /** @type {import('eslint').Rule.Node} */
638
+ (declaration.init),
639
+ globals,
640
+ isGlobal,
641
+ );
642
+ if (symbol && isExport) {
643
+ symbol.exported = true;
644
+ }
645
+ }
646
+
647
+ break;
648
+ }
649
+
650
+ default: {
651
+ /* c8 ignore next */
652
+ return false;
653
+ }
654
+ }
655
+
656
+ return true;
657
+ };
658
+
659
+ /**
660
+ *
661
+ * @param {import('eslint').Rule.Node} node
662
+ * @param {CreatedNode|ValueObject|string|undefined|
663
+ * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} block
664
+ * @param {(CreatedNode|ValueObject|string|
665
+ * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node)[]} [cache]
666
+ * @returns {boolean}
667
+ */
668
+ const findNode = function (node, block, cache) {
669
+ let blockCache = cache || [];
670
+ if (!block || blockCache.includes(block)) {
671
+ return false;
672
+ }
673
+
674
+ blockCache = blockCache.slice();
675
+ blockCache.push(block);
676
+
677
+ if (
678
+ typeof block === 'object' &&
679
+ 'type' in block &&
680
+ (block.type === 'object' || block.type === 'MethodDefinition') &&
681
+ block.value === node
682
+ ) {
683
+ return true;
684
+ }
685
+
686
+ if (typeof block !== 'object') {
687
+ return false;
688
+ }
689
+
690
+ const props = ('props' in block && block.props) || ('body' in block && block.body);
691
+ for (const propval of Object.values(props || {})) {
692
+ if (Array.isArray(propval)) {
693
+ /* c8 ignore next 5 */
694
+ if (propval.some((val) => {
695
+ return findNode(node, val, blockCache);
696
+ })) {
697
+ return true;
698
+ }
699
+ } else if (findNode(node, propval, blockCache)) {
700
+ return true;
701
+ }
702
+ }
703
+
704
+ return false;
705
+ };
706
+
707
+ const exportTypes = new Set([
708
+ 'ExportDefaultDeclaration', 'ExportNamedDeclaration',
709
+ ]);
710
+ const ignorableNestedTypes = new Set([
711
+ 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression',
712
+ ]);
713
+
714
+ /**
715
+ * @param {import('eslint').Rule.Node} nde
716
+ * @returns {import('eslint').Rule.Node|false}
717
+ */
718
+ const getExportAncestor = function (nde) {
719
+ /** @type {import('eslint').Rule.Node|null} */
720
+ let node = nde;
721
+ let idx = 0;
722
+ const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);
723
+ while (node) {
724
+ // Ignore functions nested more deeply than say `export default function () {}`
725
+ if (idx >= 2 && ignorableIfDeep) {
726
+ break;
727
+ }
728
+
729
+ if (exportTypes.has(node.type)) {
730
+ return node;
731
+ }
732
+
733
+ node = node.parent;
734
+ idx++;
735
+ }
736
+
737
+ return false;
738
+ };
739
+
740
+ const canBeExportedByAncestorType = new Set([
741
+ 'ClassProperty',
742
+ 'Method',
743
+ 'PropertyDefinition',
744
+ 'TSMethodSignature',
745
+ 'TSPropertySignature',
746
+ ]);
747
+
748
+ const canExportChildrenType = new Set([
749
+ 'ClassBody',
750
+ 'ClassDeclaration',
751
+ 'ClassDefinition',
752
+ 'ClassExpression',
753
+ 'Program',
754
+ 'TSInterfaceBody',
755
+ 'TSInterfaceDeclaration',
756
+ 'TSTypeAliasDeclaration',
757
+ 'TSTypeLiteral',
758
+ 'TSTypeParameterInstantiation',
759
+ 'TSTypeReference',
760
+ ]);
761
+
762
+ /**
763
+ * @param {import('eslint').Rule.Node} nde
764
+ * @returns {false|import('eslint').Rule.Node}
765
+ */
766
+ const isExportByAncestor = function (nde) {
767
+ if (!canBeExportedByAncestorType.has(nde.type)) {
768
+ return false;
769
+ }
770
+
771
+ let node = nde.parent;
772
+ while (node) {
773
+ if (exportTypes.has(node.type)) {
774
+ return node;
775
+ }
776
+
777
+ if (!canExportChildrenType.has(node.type)) {
778
+ return false;
779
+ }
780
+
781
+ node = node.parent;
782
+ }
783
+
784
+ return false;
785
+ };
786
+
787
+ /**
788
+ *
789
+ * @param {CreatedNode} block
790
+ * @param {import('eslint').Rule.Node} node
791
+ * @param {CreatedNode[]} [cache] Currently unused
792
+ * @returns {boolean}
793
+ */
794
+ const findExportedNode = function (block, node, cache) {
795
+ /* c8 ignore next 3 */
796
+ if (block === null) {
797
+ return false;
798
+ }
799
+
800
+ const blockCache = cache || [];
801
+ const {
802
+ props,
803
+ } = block;
804
+ for (const propval of Object.values(props)) {
805
+ const pval = /** @type {CreatedNode} */ (propval);
806
+ blockCache.push(pval);
807
+ if (pval.exported && (node === pval.value || findNode(node, pval.value))) {
808
+ return true;
809
+ }
810
+
811
+ // No need to check `propval` for exported nodes as ESM
812
+ // exports are only global
813
+ }
814
+
815
+ return false;
816
+ };
817
+
818
+ /**
819
+ *
820
+ * @param {import('eslint').Rule.Node} node
821
+ * @param {CreatedNode} globals
822
+ * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt
823
+ * @returns {boolean}
824
+ */
825
+ const isNodeExported = function (node, globals, opt) {
826
+ const moduleExports = globals.props.module?.props?.exports;
827
+ if (
828
+ opt.initModuleExports && moduleExports && findNode(node, moduleExports)
829
+ ) {
830
+ return true;
831
+ }
832
+
833
+ if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {
834
+ return true;
835
+ }
836
+
837
+ if (opt.esm && findExportedNode(globals, node)) {
838
+ return true;
839
+ }
840
+
841
+ return false;
842
+ };
843
+
844
+ /**
845
+ *
846
+ * @param {import('eslint').Rule.Node} node
847
+ * @param {CreatedNode} globalVars
848
+ * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts
849
+ * @returns {boolean}
850
+ */
851
+ const parseRecursive = function (node, globalVars, opts) {
852
+ // Iterate from top using recursion - stop at first processed node from top
853
+ if (node.parent && parseRecursive(node.parent, globalVars, opts)) {
854
+ return true;
855
+ }
856
+
857
+ return mapVariables(node, globalVars, opts);
858
+ };
859
+
860
+ /**
861
+ *
862
+ * @param {import('eslint').Rule.Node} ast
863
+ * @param {import('eslint').Rule.Node} node
864
+ * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt
865
+ * @returns {CreatedNode}
866
+ */
867
+ const parse = function (ast, node, opt) {
868
+ /* c8 ignore next 6 */
869
+ const opts = opt || {
870
+ ancestorsOnly: false,
871
+ esm: true,
872
+ initModuleExports: true,
873
+ initWindow: true,
874
+ };
875
+
876
+ const globalVars = createNode();
877
+ if (opts.initModuleExports) {
878
+ globalVars.props.module = createNode();
879
+ globalVars.props.module.props.exports = createNode();
880
+ globalVars.props.exports = globalVars.props.module.props.exports;
881
+ }
882
+
883
+ if (opts.initWindow) {
884
+ globalVars.props.window = createNode();
885
+ globalVars.props.window.special = true;
886
+ }
887
+
888
+ if (opts.ancestorsOnly) {
889
+ parseRecursive(node, globalVars, opts);
890
+ } else {
891
+ initVariables(ast, globalVars, opts);
892
+ mapVariables(ast, globalVars, opts);
893
+ }
894
+
895
+ return {
896
+ globalVars,
897
+ props: {},
898
+ };
899
+ };
900
+
901
+ const accessibilityNodes = new Set([
902
+ 'MethodDefinition',
903
+ 'PropertyDefinition',
904
+ ]);
905
+
906
+ /**
907
+ *
908
+ * @param {import('eslint').Rule.Node} node
909
+ * @returns {boolean}
910
+ */
911
+ const isPrivate = (node) => {
912
+ return accessibilityNodes.has(node.type) &&
913
+ (
914
+ 'accessibility' in node &&
915
+ node.accessibility !== 'public' && node.accessibility !== undefined
916
+ ) ||
917
+ 'key' in node &&
918
+ node.key.type === 'PrivateIdentifier';
919
+ };
920
+
921
+ /**
922
+ *
923
+ * @param {import('eslint').Rule.Node} node
924
+ * @param {import('eslint').SourceCode} sourceCode
925
+ * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt
926
+ * @param {import('./iterateJsdoc.js').Settings} settings
927
+ * @returns {boolean}
928
+ */
929
+ const isUncommentedExport = function (node, sourceCode, opt, settings) {
930
+ // console.log({node});
931
+ // Optimize with ancestor check for esm
932
+ if (opt.esm) {
933
+ if (isPrivate(node) ||
934
+ node.parent && isPrivate(node.parent)) {
935
+ return false;
936
+ }
937
+
938
+ const exportNode = getExportAncestor(node);
939
+
940
+ // Is export node comment
941
+ if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {
942
+ return true;
943
+ }
944
+
945
+ /**
946
+ * Some typescript types are not in variable map, but inherit exported (interface property and method)
947
+ */
948
+ if (
949
+ isExportByAncestor(node) &&
950
+ !findJSDocComment(node, sourceCode, settings)
951
+ ) {
952
+ return true;
953
+ }
954
+ }
955
+
956
+ const ast = /** @type {unknown} */ (sourceCode.ast);
957
+
958
+ const parseResult = parse(
959
+ /** @type {import('eslint').Rule.Node} */
960
+ (ast),
961
+ node,
962
+ opt,
963
+ );
964
+
965
+ return isNodeExported(
966
+ node, /** @type {CreatedNode} */ (parseResult.globalVars), opt,
967
+ );
968
+ };
969
+
970
+ export default {
971
+ isUncommentedExport,
972
+ parse,
973
+ };