eslint-plugin-jsdoc 52.0.4 → 53.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/dist/WarnSettings.cjs +18 -35
  2. package/dist/WarnSettings.cjs.map +1 -1
  3. package/dist/WarnSettings.js +20 -0
  4. package/dist/WarnSettings.js.map +1 -0
  5. package/dist/_virtual/rolldown_runtime.cjs +32 -0
  6. package/dist/_virtual/rolldown_runtime.js +11 -0
  7. package/dist/alignTransform.cjs +224 -305
  8. package/dist/alignTransform.cjs.map +1 -1
  9. package/dist/alignTransform.js +241 -0
  10. package/dist/alignTransform.js.map +1 -0
  11. package/dist/defaultTagOrder.cjs +132 -43
  12. package/dist/defaultTagOrder.cjs.map +1 -1
  13. package/dist/defaultTagOrder.js +134 -0
  14. package/dist/defaultTagOrder.js.map +1 -0
  15. package/dist/exportParser.cjs +478 -696
  16. package/dist/exportParser.cjs.map +1 -1
  17. package/dist/exportParser.js +518 -0
  18. package/dist/exportParser.js.map +1 -0
  19. package/dist/getDefaultTagStructureForMode.cjs +184 -288
  20. package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
  21. package/dist/getDefaultTagStructureForMode.js +188 -0
  22. package/dist/getDefaultTagStructureForMode.js.map +1 -0
  23. package/dist/getJsdocProcessorPlugin.cjs +364 -550
  24. package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
  25. package/dist/getJsdocProcessorPlugin.d.cts +70 -0
  26. package/dist/getJsdocProcessorPlugin.d.cts.map +1 -0
  27. package/dist/getJsdocProcessorPlugin.d.ts +68 -65
  28. package/dist/getJsdocProcessorPlugin.d.ts.map +1 -1
  29. package/dist/getJsdocProcessorPlugin.js +383 -0
  30. package/dist/getJsdocProcessorPlugin.js.map +1 -0
  31. package/dist/index.cjs +2 -410
  32. package/dist/index.d.cts +2 -0
  33. package/dist/index.d.ts +2 -17
  34. package/dist/index.js +3 -0
  35. package/dist/iterateJsdoc.cjs +1528 -1988
  36. package/dist/iterateJsdoc.cjs.map +1 -1
  37. package/dist/iterateJsdoc.d.cts +471 -0
  38. package/dist/iterateJsdoc.d.cts.map +1 -0
  39. package/dist/iterateJsdoc.d.ts +358 -349
  40. package/dist/iterateJsdoc.d.ts.map +1 -1
  41. package/dist/iterateJsdoc.js +1617 -0
  42. package/dist/iterateJsdoc.js.map +1 -0
  43. package/dist/jsdocUtils.cjs +1009 -1376
  44. package/dist/jsdocUtils.cjs.map +1 -1
  45. package/dist/jsdocUtils.js +1123 -0
  46. package/dist/jsdocUtils.js.map +1 -0
  47. package/dist/plugin.cjs +427 -0
  48. package/dist/plugin.cjs.map +1 -0
  49. package/dist/plugin.js +427 -0
  50. package/dist/plugin.js.map +1 -0
  51. package/dist/rules/checkAccess.cjs +29 -36
  52. package/dist/rules/checkAccess.cjs.map +1 -1
  53. package/dist/rules/checkAccess.js +33 -0
  54. package/dist/rules/checkAccess.js.map +1 -0
  55. package/dist/rules/checkAlignment.cjs +41 -54
  56. package/dist/rules/checkAlignment.cjs.map +1 -1
  57. package/dist/rules/checkAlignment.js +47 -0
  58. package/dist/rules/checkAlignment.js.map +1 -0
  59. package/dist/rules/checkExamples.cjs +327 -484
  60. package/dist/rules/checkExamples.cjs.map +1 -1
  61. package/dist/rules/checkExamples.js +348 -0
  62. package/dist/rules/checkExamples.js.map +1 -0
  63. package/dist/rules/checkIndentation.cjs +50 -65
  64. package/dist/rules/checkIndentation.cjs.map +1 -1
  65. package/dist/rules/checkIndentation.js +59 -0
  66. package/dist/rules/checkIndentation.js.map +1 -0
  67. package/dist/rules/checkLineAlignment.cjs +220 -311
  68. package/dist/rules/checkLineAlignment.cjs.map +1 -1
  69. package/dist/rules/checkLineAlignment.js +229 -0
  70. package/dist/rules/checkLineAlignment.js.map +1 -0
  71. package/dist/rules/checkParamNames.cjs +227 -335
  72. package/dist/rules/checkParamNames.cjs.map +1 -1
  73. package/dist/rules/checkParamNames.js +237 -0
  74. package/dist/rules/checkParamNames.js.map +1 -0
  75. package/dist/rules/checkPropertyNames.cjs +78 -106
  76. package/dist/rules/checkPropertyNames.cjs.map +1 -1
  77. package/dist/rules/checkPropertyNames.js +88 -0
  78. package/dist/rules/checkPropertyNames.js.map +1 -0
  79. package/dist/rules/checkSyntax.cjs +21 -34
  80. package/dist/rules/checkSyntax.cjs.map +1 -1
  81. package/dist/rules/checkSyntax.js +25 -0
  82. package/dist/rules/checkSyntax.js.map +1 -0
  83. package/dist/rules/checkTagNames.cjs +188 -210
  84. package/dist/rules/checkTagNames.cjs.map +1 -1
  85. package/dist/rules/checkTagNames.js +191 -0
  86. package/dist/rules/checkTagNames.js.map +1 -0
  87. package/dist/rules/checkTemplateNames.cjs +121 -178
  88. package/dist/rules/checkTemplateNames.cjs.map +1 -1
  89. package/dist/rules/checkTemplateNames.js +124 -0
  90. package/dist/rules/checkTemplateNames.js.map +1 -0
  91. package/dist/rules/checkTypes.cjs +291 -385
  92. package/dist/rules/checkTypes.cjs.map +1 -1
  93. package/dist/rules/checkTypes.js +299 -0
  94. package/dist/rules/checkTypes.js.map +1 -0
  95. package/dist/rules/checkValues.cjs +100 -146
  96. package/dist/rules/checkValues.cjs.map +1 -1
  97. package/dist/rules/checkValues.js +103 -0
  98. package/dist/rules/checkValues.js.map +1 -0
  99. package/dist/rules/convertToJsdocComments.cjs +228 -306
  100. package/dist/rules/convertToJsdocComments.cjs.map +1 -1
  101. package/dist/rules/convertToJsdocComments.js +231 -0
  102. package/dist/rules/convertToJsdocComments.js.map +1 -0
  103. package/dist/rules/emptyTags.cjs +62 -72
  104. package/dist/rules/emptyTags.cjs.map +1 -1
  105. package/dist/rules/emptyTags.js +67 -0
  106. package/dist/rules/emptyTags.js.map +1 -0
  107. package/dist/rules/implementsOnClasses.cjs +36 -56
  108. package/dist/rules/implementsOnClasses.cjs.map +1 -1
  109. package/dist/rules/implementsOnClasses.js +40 -0
  110. package/dist/rules/implementsOnClasses.js.map +1 -0
  111. package/dist/rules/importsAsDependencies.cjs +62 -99
  112. package/dist/rules/importsAsDependencies.cjs.map +1 -1
  113. package/dist/rules/importsAsDependencies.js +68 -0
  114. package/dist/rules/importsAsDependencies.js.map +1 -0
  115. package/dist/rules/informativeDocs.cjs +105 -142
  116. package/dist/rules/informativeDocs.cjs.map +1 -1
  117. package/dist/rules/informativeDocs.js +110 -0
  118. package/dist/rules/informativeDocs.js.map +1 -0
  119. package/dist/rules/linesBeforeBlock.cjs +70 -105
  120. package/dist/rules/linesBeforeBlock.cjs.map +1 -1
  121. package/dist/rules/linesBeforeBlock.js +75 -0
  122. package/dist/rules/linesBeforeBlock.js.map +1 -0
  123. package/dist/rules/matchDescription.cjs +160 -222
  124. package/dist/rules/matchDescription.cjs.map +1 -1
  125. package/dist/rules/matchDescription.js +167 -0
  126. package/dist/rules/matchDescription.js.map +1 -0
  127. package/dist/rules/matchName.cjs +73 -128
  128. package/dist/rules/matchName.cjs.map +1 -1
  129. package/dist/rules/matchName.js +77 -0
  130. package/dist/rules/matchName.js.map +1 -0
  131. package/dist/rules/multilineBlocks.cjs +235 -352
  132. package/dist/rules/multilineBlocks.cjs.map +1 -1
  133. package/dist/rules/multilineBlocks.js +245 -0
  134. package/dist/rules/multilineBlocks.js.map +1 -0
  135. package/dist/rules/noBadBlocks.cjs +63 -86
  136. package/dist/rules/noBadBlocks.cjs.map +1 -1
  137. package/dist/rules/noBadBlocks.js +68 -0
  138. package/dist/rules/noBadBlocks.js.map +1 -0
  139. package/dist/rules/noBlankBlockDescriptions.cjs +35 -57
  140. package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
  141. package/dist/rules/noBlankBlockDescriptions.js +41 -0
  142. package/dist/rules/noBlankBlockDescriptions.js.map +1 -0
  143. package/dist/rules/noBlankBlocks.cjs +26 -48
  144. package/dist/rules/noBlankBlocks.cjs.map +1 -1
  145. package/dist/rules/noBlankBlocks.js +30 -0
  146. package/dist/rules/noBlankBlocks.js.map +1 -0
  147. package/dist/rules/noDefaults.cjs +52 -79
  148. package/dist/rules/noDefaults.cjs.map +1 -1
  149. package/dist/rules/noDefaults.js +56 -0
  150. package/dist/rules/noDefaults.js.map +1 -0
  151. package/dist/rules/noMissingSyntax.cjs +115 -165
  152. package/dist/rules/noMissingSyntax.cjs.map +1 -1
  153. package/dist/rules/noMissingSyntax.js +126 -0
  154. package/dist/rules/noMissingSyntax.js.map +1 -0
  155. package/dist/rules/noMultiAsterisks.cjs +48 -89
  156. package/dist/rules/noMultiAsterisks.cjs.map +1 -1
  157. package/dist/rules/noMultiAsterisks.js +58 -0
  158. package/dist/rules/noMultiAsterisks.js.map +1 -0
  159. package/dist/rules/noRestrictedSyntax.cjs +45 -79
  160. package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
  161. package/dist/rules/noRestrictedSyntax.js +49 -0
  162. package/dist/rules/noRestrictedSyntax.js.map +1 -0
  163. package/dist/rules/noTypes.cjs +59 -80
  164. package/dist/rules/noTypes.cjs.map +1 -1
  165. package/dist/rules/noTypes.js +65 -0
  166. package/dist/rules/noTypes.js.map +1 -0
  167. package/dist/rules/noUndefinedTypes.cjs +297 -388
  168. package/dist/rules/noUndefinedTypes.cjs.map +1 -1
  169. package/dist/rules/noUndefinedTypes.js +303 -0
  170. package/dist/rules/noUndefinedTypes.js.map +1 -0
  171. package/dist/rules/requireAsteriskPrefix.cjs +108 -159
  172. package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
  173. package/dist/rules/requireAsteriskPrefix.js +112 -0
  174. package/dist/rules/requireAsteriskPrefix.js.map +1 -0
  175. package/dist/rules/requireDescription.cjs +89 -129
  176. package/dist/rules/requireDescription.cjs.map +1 -1
  177. package/dist/rules/requireDescription.js +95 -0
  178. package/dist/rules/requireDescription.js.map +1 -0
  179. package/dist/rules/requireDescriptionCompleteSentence.cjs +201 -262
  180. package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
  181. package/dist/rules/requireDescriptionCompleteSentence.js +220 -0
  182. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -0
  183. package/dist/rules/requireExample.cjs +73 -104
  184. package/dist/rules/requireExample.cjs.map +1 -1
  185. package/dist/rules/requireExample.js +77 -0
  186. package/dist/rules/requireExample.js.map +1 -0
  187. package/dist/rules/requireFileOverview.cjs +75 -129
  188. package/dist/rules/requireFileOverview.cjs.map +1 -1
  189. package/dist/rules/requireFileOverview.js +81 -0
  190. package/dist/rules/requireFileOverview.js.map +1 -0
  191. package/dist/rules/requireHyphenBeforeParamDescription.cjs +85 -133
  192. package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
  193. package/dist/rules/requireHyphenBeforeParamDescription.js +89 -0
  194. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -0
  195. package/dist/rules/requireJsdoc.cjs +384 -557
  196. package/dist/rules/requireJsdoc.cjs.map +1 -1
  197. package/dist/rules/requireJsdoc.js +404 -0
  198. package/dist/rules/requireJsdoc.js.map +1 -0
  199. package/dist/rules/requireParam.cjs +336 -526
  200. package/dist/rules/requireParam.cjs.map +1 -1
  201. package/dist/rules/requireParam.js +344 -0
  202. package/dist/rules/requireParam.js.map +1 -0
  203. package/dist/rules/requireParamDescription.cjs +55 -80
  204. package/dist/rules/requireParamDescription.cjs.map +1 -1
  205. package/dist/rules/requireParamDescription.js +59 -0
  206. package/dist/rules/requireParamDescription.js.map +1 -0
  207. package/dist/rules/requireParamName.cjs +32 -50
  208. package/dist/rules/requireParamName.cjs.map +1 -1
  209. package/dist/rules/requireParamName.js +36 -0
  210. package/dist/rules/requireParamName.js.map +1 -0
  211. package/dist/rules/requireParamType.cjs +55 -80
  212. package/dist/rules/requireParamType.cjs.map +1 -1
  213. package/dist/rules/requireParamType.js +59 -0
  214. package/dist/rules/requireParamType.js.map +1 -0
  215. package/dist/rules/requireProperty.cjs +31 -42
  216. package/dist/rules/requireProperty.cjs.map +1 -1
  217. package/dist/rules/requireProperty.js +35 -0
  218. package/dist/rules/requireProperty.js.map +1 -0
  219. package/dist/rules/requirePropertyDescription.cjs +17 -25
  220. package/dist/rules/requirePropertyDescription.cjs.map +1 -1
  221. package/dist/rules/requirePropertyDescription.js +21 -0
  222. package/dist/rules/requirePropertyDescription.js.map +1 -0
  223. package/dist/rules/requirePropertyName.cjs +17 -25
  224. package/dist/rules/requirePropertyName.cjs.map +1 -1
  225. package/dist/rules/requirePropertyName.js +21 -0
  226. package/dist/rules/requirePropertyName.js.map +1 -0
  227. package/dist/rules/requirePropertyType.cjs +17 -25
  228. package/dist/rules/requirePropertyType.cjs.map +1 -1
  229. package/dist/rules/requirePropertyType.js +21 -0
  230. package/dist/rules/requirePropertyType.js.map +1 -0
  231. package/dist/rules/requireReturns.cjs +125 -203
  232. package/dist/rules/requireReturns.cjs.map +1 -1
  233. package/dist/rules/requireReturns.js +131 -0
  234. package/dist/rules/requireReturns.js.map +1 -0
  235. package/dist/rules/requireReturnsCheck.cjs +60 -103
  236. package/dist/rules/requireReturnsCheck.cjs.map +1 -1
  237. package/dist/rules/requireReturnsCheck.js +66 -0
  238. package/dist/rules/requireReturnsCheck.js.map +1 -0
  239. package/dist/rules/requireReturnsDescription.cjs +39 -54
  240. package/dist/rules/requireReturnsDescription.cjs.map +1 -1
  241. package/dist/rules/requireReturnsDescription.js +43 -0
  242. package/dist/rules/requireReturnsDescription.js.map +1 -0
  243. package/dist/rules/requireReturnsType.cjs +32 -50
  244. package/dist/rules/requireReturnsType.cjs.map +1 -1
  245. package/dist/rules/requireReturnsType.js +36 -0
  246. package/dist/rules/requireReturnsType.js.map +1 -0
  247. package/dist/rules/requireTemplate.cjs +119 -178
  248. package/dist/rules/requireTemplate.cjs.map +1 -1
  249. package/dist/rules/requireTemplate.js +122 -0
  250. package/dist/rules/requireTemplate.js.map +1 -0
  251. package/dist/rules/requireThrows.cjs +61 -95
  252. package/dist/rules/requireThrows.cjs.map +1 -1
  253. package/dist/rules/requireThrows.js +67 -0
  254. package/dist/rules/requireThrows.js.map +1 -0
  255. package/dist/rules/requireYields.cjs +106 -166
  256. package/dist/rules/requireYields.cjs.map +1 -1
  257. package/dist/rules/requireYields.js +115 -0
  258. package/dist/rules/requireYields.js.map +1 -0
  259. package/dist/rules/requireYieldsCheck.cjs +96 -152
  260. package/dist/rules/requireYieldsCheck.cjs.map +1 -1
  261. package/dist/rules/requireYieldsCheck.js +105 -0
  262. package/dist/rules/requireYieldsCheck.js.map +1 -0
  263. package/dist/rules/sortTags.cjs +258 -444
  264. package/dist/rules/sortTags.cjs.map +1 -1
  265. package/dist/rules/sortTags.js +262 -0
  266. package/dist/rules/sortTags.js.map +1 -0
  267. package/dist/rules/tagLines.cjs +179 -266
  268. package/dist/rules/tagLines.cjs.map +1 -1
  269. package/dist/rules/tagLines.js +183 -0
  270. package/dist/rules/tagLines.js.map +1 -0
  271. package/dist/rules/textEscaping.cjs +92 -127
  272. package/dist/rules/textEscaping.cjs.map +1 -1
  273. package/dist/rules/textEscaping.js +102 -0
  274. package/dist/rules/textEscaping.js.map +1 -0
  275. package/dist/rules/validTypes.cjs +252 -265
  276. package/dist/rules/validTypes.cjs.map +1 -1
  277. package/dist/rules/validTypes.js +259 -0
  278. package/dist/rules/validTypes.js.map +1 -0
  279. package/dist/tagNames.cjs +134 -170
  280. package/dist/tagNames.cjs.map +1 -1
  281. package/dist/tagNames.js +144 -0
  282. package/dist/tagNames.js.map +1 -0
  283. package/dist/utils/hasReturnValue.cjs +246 -474
  284. package/dist/utils/hasReturnValue.cjs.map +1 -1
  285. package/dist/utils/hasReturnValue.js +265 -0
  286. package/dist/utils/hasReturnValue.js.map +1 -0
  287. package/package.json +40 -24
  288. package/dist/generateRule.cjs +0 -242
  289. package/dist/generateRule.cjs.map +0 -1
  290. package/dist/index.cjs.map +0 -1
  291. package/dist/index.d.ts.map +0 -1
  292. package/src/WarnSettings.js +0 -34
  293. package/src/alignTransform.js +0 -358
  294. package/src/defaultTagOrder.js +0 -169
  295. package/src/exportParser.js +0 -978
  296. package/src/getDefaultTagStructureForMode.js +0 -969
  297. package/src/getJsdocProcessorPlugin.js +0 -672
  298. package/src/index.js +0 -530
  299. package/src/iterateJsdoc.js +0 -2518
  300. package/src/jsdocUtils.js +0 -1896
  301. package/src/rules/checkAccess.js +0 -45
  302. package/src/rules/checkAlignment.js +0 -63
  303. package/src/rules/checkExamples.js +0 -589
  304. package/src/rules/checkIndentation.js +0 -75
  305. package/src/rules/checkLineAlignment.js +0 -372
  306. package/src/rules/checkParamNames.js +0 -474
  307. package/src/rules/checkPropertyNames.js +0 -152
  308. package/src/rules/checkSyntax.js +0 -30
  309. package/src/rules/checkTagNames.js +0 -314
  310. package/src/rules/checkTemplateNames.js +0 -204
  311. package/src/rules/checkTypes.js +0 -535
  312. package/src/rules/checkValues.js +0 -248
  313. package/src/rules/convertToJsdocComments.js +0 -398
  314. package/src/rules/emptyTags.js +0 -98
  315. package/src/rules/implementsOnClasses.js +0 -64
  316. package/src/rules/importsAsDependencies.js +0 -133
  317. package/src/rules/informativeDocs.js +0 -189
  318. package/src/rules/linesBeforeBlock.js +0 -134
  319. package/src/rules/matchDescription.js +0 -286
  320. package/src/rules/matchName.js +0 -151
  321. package/src/rules/multilineBlocks.js +0 -493
  322. package/src/rules/noBadBlocks.js +0 -119
  323. package/src/rules/noBlankBlockDescriptions.js +0 -69
  324. package/src/rules/noBlankBlocks.js +0 -53
  325. package/src/rules/noDefaults.js +0 -85
  326. package/src/rules/noMissingSyntax.js +0 -195
  327. package/src/rules/noMultiAsterisks.js +0 -134
  328. package/src/rules/noRestrictedSyntax.js +0 -91
  329. package/src/rules/noTypes.js +0 -93
  330. package/src/rules/noUndefinedTypes.js +0 -543
  331. package/src/rules/requireAsteriskPrefix.js +0 -190
  332. package/src/rules/requireDescription.js +0 -161
  333. package/src/rules/requireDescriptionCompleteSentence.js +0 -335
  334. package/src/rules/requireExample.js +0 -118
  335. package/src/rules/requireFileOverview.js +0 -154
  336. package/src/rules/requireHyphenBeforeParamDescription.js +0 -176
  337. package/src/rules/requireJsdoc.js +0 -743
  338. package/src/rules/requireParam.js +0 -602
  339. package/src/rules/requireParamDescription.js +0 -89
  340. package/src/rules/requireParamName.js +0 -55
  341. package/src/rules/requireParamType.js +0 -89
  342. package/src/rules/requireProperty.js +0 -48
  343. package/src/rules/requirePropertyDescription.js +0 -25
  344. package/src/rules/requirePropertyName.js +0 -25
  345. package/src/rules/requirePropertyType.js +0 -25
  346. package/src/rules/requireReturns.js +0 -238
  347. package/src/rules/requireReturnsCheck.js +0 -145
  348. package/src/rules/requireReturnsDescription.js +0 -59
  349. package/src/rules/requireReturnsType.js +0 -51
  350. package/src/rules/requireTemplate.js +0 -201
  351. package/src/rules/requireThrows.js +0 -111
  352. package/src/rules/requireYields.js +0 -216
  353. package/src/rules/requireYieldsCheck.js +0 -208
  354. package/src/rules/sortTags.js +0 -558
  355. package/src/rules/tagLines.js +0 -359
  356. package/src/rules/textEscaping.js +0 -154
  357. package/src/rules/validTypes.js +0 -401
  358. package/src/tagNames.js +0 -238
  359. package/src/utils/hasReturnValue.js +0 -572
@@ -1 +1 @@
1
- {"version":3,"file":"noUndefinedTypes.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","allComments","getAllComments","comments","comment","test","value","commentNode","parseComment","globals","flatMap","trim","split","concat","languageOptions","typedefDeclarations","doc","tags","tag","isNamepathDefiningTag","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","imports","allDefinedTypes","identifiers","globalItem","body","item","property","key","init","callee","id","methodOrProp","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","includes","right","structuredTypes","Array","isArray","markVariableAsUsed","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean\n * }}\n */ {\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*\\s/v).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/v).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/v, '').trim().split(/,\\s*/v);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefDeclarations = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdoc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).flatMap(({\n identifiers,\n name,\n }) => {\n const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (\n identifiers?.[0]\n )?.parent;\n switch (globalItem?.type) {\n case 'ClassDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n imports.push(name);\n break;\n case 'TSInterfaceDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'VariableDeclarator':\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (\n globalItem?.init\n )?.callee)?.name === 'require'\n ) {\n imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n globalItem.id\n ).name);\n break;\n }\n\n return [];\n }\n\n return [\n name,\n ];\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 2 */\n sourceCode.getScope(node)) ||\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !extraTypes.includes(val) &&\n !typedefDeclarations.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty') {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))\n ) {\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 3 */\n } else {\n context.markVariableAsUsed(val);\n }\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n type: 'boolean',\n },\n markVariablesAsUsed: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"noUndefinedTypes.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean\n * }}\n */ {\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*\\s/v).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/v).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/v, '').trim().split(/,\\s*/v);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefDeclarations = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdoc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).flatMap(({\n identifiers,\n name,\n }) => {\n const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (\n identifiers?.[0]\n )?.parent;\n switch (globalItem?.type) {\n case 'ClassDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n imports.push(name);\n break;\n case 'TSInterfaceDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'VariableDeclarator':\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (\n globalItem?.init\n )?.callee)?.name === 'require'\n ) {\n imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n globalItem.id\n ).name);\n break;\n }\n\n return [];\n }\n\n return [\n name,\n ];\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 2 */\n sourceCode.getScope(node)) ||\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !extraTypes.includes(val) &&\n !typedefDeclarations.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty') {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))\n ) {\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 3 */\n } else {\n context.markVariableAsUsed(val);\n }\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n type: 'boolean',\n },\n markVariablesAsUsed: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -0,0 +1,303 @@
1
+ import iterateJsdoc, { parseComment } from "../iterateJsdoc.js";
2
+ import { getJSDocComment, parse, traverse, tryParse } from "@es-joy/jsdoccomment";
3
+ import { parseImportsExports } from "parse-imports-exports";
4
+
5
+ //#region src/rules/noUndefinedTypes.js
6
+ const extraTypes = [
7
+ "null",
8
+ "undefined",
9
+ "void",
10
+ "string",
11
+ "boolean",
12
+ "object",
13
+ "function",
14
+ "symbol",
15
+ "number",
16
+ "bigint",
17
+ "NaN",
18
+ "Infinity",
19
+ "any",
20
+ "*",
21
+ "never",
22
+ "unknown",
23
+ "const",
24
+ "this",
25
+ "true",
26
+ "false",
27
+ "Array",
28
+ "Object",
29
+ "RegExp",
30
+ "Date",
31
+ "Function",
32
+ "Intl"
33
+ ];
34
+ const typescriptGlobals = [
35
+ "Awaited",
36
+ "Partial",
37
+ "Required",
38
+ "Readonly",
39
+ "Record",
40
+ "Pick",
41
+ "Omit",
42
+ "Exclude",
43
+ "Extract",
44
+ "NonNullable",
45
+ "Parameters",
46
+ "ConstructorParameters",
47
+ "ReturnType",
48
+ "InstanceType",
49
+ "ThisParameterType",
50
+ "OmitThisParameter",
51
+ "ThisType",
52
+ "Uppercase",
53
+ "Lowercase",
54
+ "Capitalize",
55
+ "Uncapitalize"
56
+ ];
57
+ /**
58
+ * @param {string|false|undefined} [str]
59
+ * @returns {undefined|string|false}
60
+ */
61
+ const stripPseudoTypes = (str) => {
62
+ return str && str.replace(/(?:\.|<>|\.<>|\[\])$/v, "");
63
+ };
64
+ var noUndefinedTypes_default = iterateJsdoc(({ context, node, report, settings, sourceCode, utils }) => {
65
+ const { scopeManager } = sourceCode;
66
+ const globalScope = scopeManager.globalScope;
67
+ const { definedTypes = [], disableReporting = false, markVariablesAsUsed = true } = context.options[0] || {};
68
+ /** @type {(string|undefined)[]} */
69
+ let definedPreferredTypes = [];
70
+ const { mode, preferredTypes, structuredTags } = settings;
71
+ if (Object.keys(preferredTypes).length) definedPreferredTypes = Object.values(preferredTypes).map((preferredType) => {
72
+ if (typeof preferredType === "string") return stripPseudoTypes(preferredType);
73
+ if (!preferredType) return void 0;
74
+ if (typeof preferredType !== "object") utils.reportSettings("Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.");
75
+ return stripPseudoTypes(preferredType.replacement);
76
+ }).filter(Boolean);
77
+ const allComments = sourceCode.getAllComments();
78
+ const comments = allComments.filter((comment) => {
79
+ return /^\*\s/v.test(comment.value);
80
+ }).map((commentNode) => {
81
+ return parseComment(commentNode, "");
82
+ });
83
+ const globals = allComments.filter((comment) => {
84
+ return /^\s*globals/v.test(comment.value);
85
+ }).flatMap((commentNode) => {
86
+ return commentNode.value.replace(/^\s*globals/v, "").trim().split(/,\s*/v);
87
+ }).concat(Object.keys(context.languageOptions.globals ?? []));
88
+ const typedefDeclarations = comments.flatMap((doc) => {
89
+ return doc.tags.filter(({ tag }) => {
90
+ return utils.isNamepathDefiningTag(tag);
91
+ });
92
+ }).map((tag) => {
93
+ return tag.name;
94
+ });
95
+ const importTags = settings.mode === "typescript" ? comments.flatMap((doc) => {
96
+ return doc.tags.filter(({ tag }) => {
97
+ return tag === "import";
98
+ });
99
+ }).flatMap((tag) => {
100
+ const { description, name, type } = tag;
101
+ const typePart = type ? `{${type}} ` : "";
102
+ const imprt = "import " + (description ? `${typePart}${name} ${description}` : `${typePart}${name}`);
103
+ const importsExports = parseImportsExports(imprt.trim());
104
+ const types = [];
105
+ const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];
106
+ if (namedImports) {
107
+ if (namedImports.default) types.push(namedImports.default);
108
+ if (namedImports.names) types.push(...Object.keys(namedImports.names));
109
+ }
110
+ const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];
111
+ if (namespaceImports) {
112
+ if (namespaceImports.namespace) types.push(namespaceImports.namespace);
113
+ if (namespaceImports.default) types.push(namespaceImports.default);
114
+ }
115
+ return types;
116
+ }).filter(Boolean) : [];
117
+ const ancestorNodes = [];
118
+ let currentNode = node;
119
+ while (currentNode?.parent) {
120
+ ancestorNodes.push(currentNode);
121
+ currentNode = currentNode.parent;
122
+ }
123
+ /**
124
+ * @param {import('eslint').Rule.Node} ancestorNode
125
+ * @returns {import('comment-parser').Spec[]}
126
+ */
127
+ const getTemplateTags = function(ancestorNode) {
128
+ const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);
129
+ if (!commentNode) return [];
130
+ const jsdoc = parseComment(commentNode, "");
131
+ return jsdoc.tags.filter((tag) => {
132
+ return tag.tag === "template";
133
+ });
134
+ };
135
+ const templateTags = ancestorNodes.length ? ancestorNodes.flatMap((ancestorNode) => {
136
+ return getTemplateTags(ancestorNode);
137
+ }) : utils.getPresentTags(["template"]);
138
+ const closureGenericTypes = templateTags.flatMap((tag) => {
139
+ return utils.parseClosureTemplateTag(tag);
140
+ });
141
+ const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === "Program";
142
+ /**
143
+ * @param {import("eslint").Scope.Scope | null} scope
144
+ * @returns {Set<string>}
145
+ */
146
+ const getValidRuntimeIdentifiers = (scope) => {
147
+ const result = /* @__PURE__ */ new Set();
148
+ let scp = scope;
149
+ while (scp) {
150
+ for (const { name } of scp.variables) result.add(name);
151
+ scp = scp.upper;
152
+ }
153
+ return result;
154
+ };
155
+ /**
156
+ * We treat imports differently as we can't introspect their children.
157
+ * @type {string[]}
158
+ */
159
+ const imports = [];
160
+ const allDefinedTypes = new Set(globalScope.variables.map(({ name }) => {
161
+ return name;
162
+ }).concat(cjsOrESMScope ? globalScope.childScopes.flatMap(({ variables }) => {
163
+ return variables;
164
+ }).flatMap(({ identifiers, name }) => {
165
+ const globalItem = (identifiers?.[0])?.parent;
166
+ switch (globalItem?.type) {
167
+ case "ClassDeclaration": return [name, ...globalItem.body.body.map((item) => {
168
+ const property = (item?.key)?.name;
169
+ /* c8 ignore next 3 -- Guard */
170
+ if (!property) return "";
171
+ return `${name}.${property}`;
172
+ }).filter(Boolean)];
173
+ case "ImportDefaultSpecifier":
174
+ case "ImportNamespaceSpecifier":
175
+ case "ImportSpecifier":
176
+ imports.push(name);
177
+ break;
178
+ case "TSInterfaceDeclaration": return [name, ...globalItem.body.body.map((item) => {
179
+ const property = (item?.key)?.name;
180
+ /* c8 ignore next 3 -- Guard */
181
+ if (!property) return "";
182
+ return `${name}.${property}`;
183
+ }).filter(Boolean)];
184
+ case "VariableDeclarator":
185
+ if (((globalItem?.init)?.callee)?.name === "require") {
186
+ imports.push(
187
+ /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */
188
+ globalItem.id.name
189
+ );
190
+ break;
191
+ }
192
+ return [];
193
+ }
194
+ return [name];
195
+ /* c8 ignore next */
196
+ }) : []).concat(extraTypes).concat(typedefDeclarations).concat(importTags).concat(definedTypes).concat(definedPreferredTypes).concat((() => {
197
+ if (node?.type === "MethodDefinition") return node.parent.body.flatMap((methodOrProp) => {
198
+ if (methodOrProp.type === "MethodDefinition") {
199
+ if (methodOrProp.key.type === "Identifier") return [methodOrProp.key.name, `${(node.parent?.parent)?.id?.name}.${methodOrProp.key.name}`];
200
+ }
201
+ if (methodOrProp.type === "PropertyDefinition") {
202
+ if (methodOrProp.key.type === "Identifier") return [methodOrProp.key.name, `${(node.parent?.parent)?.id?.name}.${methodOrProp.key.name}`];
203
+ }
204
+ /* c8 ignore next 2 -- Not yet built */
205
+ return "";
206
+ }).filter(Boolean);
207
+ return [];
208
+ })()).concat(...getValidRuntimeIdentifiers(node && (sourceCode.getScope && sourceCode.getScope(node) || context.getScope()))).concat(settings.mode === "jsdoc" ? [] : [...settings.mode === "typescript" ? typescriptGlobals : [], ...closureGenericTypes]));
209
+ /**
210
+ * @typedef {{
211
+ * parsedType: import('jsdoc-type-pratt-parser').RootResult;
212
+ * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {
213
+ * line?: import('../iterateJsdoc.js').Integer
214
+ * }
215
+ * }} TypeAndTagInfo
216
+ */
217
+ /**
218
+ * @param {string} propertyName
219
+ * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {
220
+ * name?: string,
221
+ * type?: string,
222
+ * line?: import('../iterateJsdoc.js').Integer
223
+ * })|import('comment-parser').Spec & {
224
+ * namepathOrURL?: string
225
+ * }
226
+ * ) => undefined|TypeAndTagInfo}
227
+ */
228
+ const tagToParsedType = (propertyName) => {
229
+ return (tag) => {
230
+ try {
231
+ const potentialType = tag[propertyName];
232
+ return {
233
+ parsedType: mode === "permissive" ? tryParse(potentialType) : parse(potentialType, mode),
234
+ tag
235
+ };
236
+ } catch {
237
+ return void 0;
238
+ }
239
+ };
240
+ };
241
+ const typeTags = utils.filterTags(({ tag }) => {
242
+ return tag !== "import" && utils.tagMightHaveTypePosition(tag) && (tag !== "suppress" || settings.mode !== "closure");
243
+ }).map(tagToParsedType("type"));
244
+ const namepathReferencingTags = utils.filterTags(({ tag }) => {
245
+ return utils.isNamepathReferencingTag(tag);
246
+ }).map(tagToParsedType("name"));
247
+ const namepathOrUrlReferencingTags = utils.filterAllTags(({ tag }) => {
248
+ return utils.isNamepathOrUrlReferencingTag(tag);
249
+ }).map(tagToParsedType("namepathOrURL"));
250
+ const tagsWithTypes = [
251
+ ...typeTags,
252
+ ...namepathReferencingTags,
253
+ ...namepathOrUrlReferencingTags
254
+ ].filter(Boolean);
255
+ for (const { parsedType, tag } of tagsWithTypes) traverse(parsedType, (nde, parentNode) => {
256
+ /**
257
+ * @type {import('jsdoc-type-pratt-parser').NameResult & {
258
+ * _parent?: import('jsdoc-type-pratt-parser').NonRootResult
259
+ * }}
260
+ */
261
+ nde._parent = parentNode;
262
+ const { type, value } = nde;
263
+ let val = value;
264
+ /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */
265
+ let currNode = nde;
266
+ do {
267
+ currNode = currNode._parent;
268
+ if (!imports.includes(val) && !globals.includes(val) && !importTags.includes(val) && !extraTypes.includes(val) && !typedefDeclarations.includes(val) && currNode && "right" in currNode && currNode.right?.type === "JsdocTypeProperty") val = val + "." + currNode.right.value;
269
+ } while (currNode?.type === "JsdocTypeNamePath");
270
+ if (type === "JsdocTypeName") {
271
+ const structuredTypes = structuredTags[tag.tag]?.type;
272
+ if (!allDefinedTypes.has(val) && (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))) {
273
+ if (!disableReporting) report(`The type '${val}' is undefined.`, null, tag);
274
+ } else if (markVariablesAsUsed && !extraTypes.includes(val)) if (sourceCode.markVariableAsUsed) sourceCode.markVariableAsUsed(val);
275
+ else context.markVariableAsUsed(val);
276
+ }
277
+ });
278
+ }, {
279
+ iterateAllJsdocs: true,
280
+ meta: {
281
+ docs: {
282
+ description: "Checks that types in jsdoc comments are defined.",
283
+ url: "https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header"
284
+ },
285
+ schema: [{
286
+ additionalProperties: false,
287
+ properties: {
288
+ definedTypes: {
289
+ items: { type: "string" },
290
+ type: "array"
291
+ },
292
+ disableReporting: { type: "boolean" },
293
+ markVariablesAsUsed: { type: "boolean" }
294
+ },
295
+ type: "object"
296
+ }],
297
+ type: "suggestion"
298
+ }
299
+ });
300
+
301
+ //#endregion
302
+ export { noUndefinedTypes_default as default };
303
+ //# sourceMappingURL=noUndefinedTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noUndefinedTypes.js","names":["tryParseType","parseType"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean\n * }}\n */ {\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*\\s/v).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/v).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/v, '').trim().split(/,\\s*/v);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefDeclarations = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdoc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).flatMap(({\n identifiers,\n name,\n }) => {\n const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (\n identifiers?.[0]\n )?.parent;\n switch (globalItem?.type) {\n case 'ClassDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n imports.push(name);\n break;\n case 'TSInterfaceDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'VariableDeclarator':\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (\n globalItem?.init\n )?.callee)?.name === 'require'\n ) {\n imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n globalItem.id\n ).name);\n break;\n }\n\n return [];\n }\n\n return [\n name,\n ];\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 2 */\n sourceCode.getScope(node)) ||\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !extraTypes.includes(val) &&\n !typedefDeclarations.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty') {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))\n ) {\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 3 */\n } else {\n context.markVariableAsUsed(val);\n }\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n type: 'boolean',\n },\n markVariablesAsUsed: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}