eslint-plugin-jsdoc 53.0.1 → 54.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/dist/WarnSettings.cjs +35 -18
  2. package/dist/WarnSettings.cjs.map +1 -1
  3. package/dist/alignTransform.cjs +305 -224
  4. package/dist/alignTransform.cjs.map +1 -1
  5. package/dist/defaultTagOrder.cjs +43 -132
  6. package/dist/defaultTagOrder.cjs.map +1 -1
  7. package/dist/exportParser.cjs +696 -478
  8. package/dist/exportParser.cjs.map +1 -1
  9. package/dist/generateRule.cjs +242 -0
  10. package/dist/generateRule.cjs.map +1 -0
  11. package/dist/getDefaultTagStructureForMode.cjs +288 -184
  12. package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
  13. package/dist/getJsdocProcessorPlugin.cjs +550 -364
  14. package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
  15. package/dist/getJsdocProcessorPlugin.d.ts +65 -68
  16. package/dist/getJsdocProcessorPlugin.d.ts.map +1 -1
  17. package/dist/index.cjs +410 -2
  18. package/dist/index.cjs.map +1 -0
  19. package/dist/index.d.ts +17 -2
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/iterateJsdoc.cjs +2005 -1539
  22. package/dist/iterateJsdoc.cjs.map +1 -1
  23. package/dist/iterateJsdoc.d.ts +350 -359
  24. package/dist/iterateJsdoc.d.ts.map +1 -1
  25. package/dist/jsdocUtils.cjs +1376 -1009
  26. package/dist/jsdocUtils.cjs.map +1 -1
  27. package/dist/rules/checkAccess.cjs +36 -29
  28. package/dist/rules/checkAccess.cjs.map +1 -1
  29. package/dist/rules/checkAlignment.cjs +54 -41
  30. package/dist/rules/checkAlignment.cjs.map +1 -1
  31. package/dist/rules/checkExamples.cjs +484 -327
  32. package/dist/rules/checkExamples.cjs.map +1 -1
  33. package/dist/rules/checkIndentation.cjs +65 -50
  34. package/dist/rules/checkIndentation.cjs.map +1 -1
  35. package/dist/rules/checkLineAlignment.cjs +311 -220
  36. package/dist/rules/checkLineAlignment.cjs.map +1 -1
  37. package/dist/rules/checkParamNames.cjs +335 -227
  38. package/dist/rules/checkParamNames.cjs.map +1 -1
  39. package/dist/rules/checkPropertyNames.cjs +106 -78
  40. package/dist/rules/checkPropertyNames.cjs.map +1 -1
  41. package/dist/rules/checkSyntax.cjs +34 -21
  42. package/dist/rules/checkSyntax.cjs.map +1 -1
  43. package/dist/rules/checkTagNames.cjs +210 -188
  44. package/dist/rules/checkTagNames.cjs.map +1 -1
  45. package/dist/rules/checkTemplateNames.cjs +178 -121
  46. package/dist/rules/checkTemplateNames.cjs.map +1 -1
  47. package/dist/rules/checkTypes.cjs +385 -291
  48. package/dist/rules/checkTypes.cjs.map +1 -1
  49. package/dist/rules/checkValues.cjs +146 -100
  50. package/dist/rules/checkValues.cjs.map +1 -1
  51. package/dist/rules/convertToJsdocComments.cjs +306 -228
  52. package/dist/rules/convertToJsdocComments.cjs.map +1 -1
  53. package/dist/rules/emptyTags.cjs +72 -62
  54. package/dist/rules/emptyTags.cjs.map +1 -1
  55. package/dist/rules/implementsOnClasses.cjs +56 -36
  56. package/dist/rules/implementsOnClasses.cjs.map +1 -1
  57. package/dist/rules/importsAsDependencies.cjs +99 -62
  58. package/dist/rules/importsAsDependencies.cjs.map +1 -1
  59. package/dist/rules/informativeDocs.cjs +142 -105
  60. package/dist/rules/informativeDocs.cjs.map +1 -1
  61. package/dist/rules/linesBeforeBlock.cjs +105 -70
  62. package/dist/rules/linesBeforeBlock.cjs.map +1 -1
  63. package/dist/rules/matchDescription.cjs +222 -160
  64. package/dist/rules/matchDescription.cjs.map +1 -1
  65. package/dist/rules/matchName.cjs +128 -73
  66. package/dist/rules/matchName.cjs.map +1 -1
  67. package/dist/rules/multilineBlocks.cjs +352 -235
  68. package/dist/rules/multilineBlocks.cjs.map +1 -1
  69. package/dist/rules/noBadBlocks.cjs +86 -63
  70. package/dist/rules/noBadBlocks.cjs.map +1 -1
  71. package/dist/rules/noBlankBlockDescriptions.cjs +57 -35
  72. package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
  73. package/dist/rules/noBlankBlocks.cjs +48 -26
  74. package/dist/rules/noBlankBlocks.cjs.map +1 -1
  75. package/dist/rules/noDefaults.cjs +79 -52
  76. package/dist/rules/noDefaults.cjs.map +1 -1
  77. package/dist/rules/noMissingSyntax.cjs +165 -115
  78. package/dist/rules/noMissingSyntax.cjs.map +1 -1
  79. package/dist/rules/noMultiAsterisks.cjs +89 -48
  80. package/dist/rules/noMultiAsterisks.cjs.map +1 -1
  81. package/dist/rules/noRestrictedSyntax.cjs +79 -45
  82. package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
  83. package/dist/rules/noTypes.cjs +80 -59
  84. package/dist/rules/noTypes.cjs.map +1 -1
  85. package/dist/rules/noUndefinedTypes.cjs +388 -297
  86. package/dist/rules/noUndefinedTypes.cjs.map +1 -1
  87. package/dist/rules/requireAsteriskPrefix.cjs +159 -108
  88. package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
  89. package/dist/rules/requireDescription.cjs +129 -89
  90. package/dist/rules/requireDescription.cjs.map +1 -1
  91. package/dist/rules/requireDescriptionCompleteSentence.cjs +262 -201
  92. package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
  93. package/dist/rules/requireExample.cjs +104 -73
  94. package/dist/rules/requireExample.cjs.map +1 -1
  95. package/dist/rules/requireFileOverview.cjs +129 -75
  96. package/dist/rules/requireFileOverview.cjs.map +1 -1
  97. package/dist/rules/requireHyphenBeforeParamDescription.cjs +133 -85
  98. package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
  99. package/dist/rules/requireJsdoc.cjs +557 -384
  100. package/dist/rules/requireJsdoc.cjs.map +1 -1
  101. package/dist/rules/requireParam.cjs +526 -336
  102. package/dist/rules/requireParam.cjs.map +1 -1
  103. package/dist/rules/requireParamDescription.cjs +80 -55
  104. package/dist/rules/requireParamDescription.cjs.map +1 -1
  105. package/dist/rules/requireParamName.cjs +50 -32
  106. package/dist/rules/requireParamName.cjs.map +1 -1
  107. package/dist/rules/requireParamType.cjs +80 -55
  108. package/dist/rules/requireParamType.cjs.map +1 -1
  109. package/dist/rules/requireProperty.cjs +42 -31
  110. package/dist/rules/requireProperty.cjs.map +1 -1
  111. package/dist/rules/requirePropertyDescription.cjs +25 -17
  112. package/dist/rules/requirePropertyDescription.cjs.map +1 -1
  113. package/dist/rules/requirePropertyName.cjs +25 -17
  114. package/dist/rules/requirePropertyName.cjs.map +1 -1
  115. package/dist/rules/requirePropertyType.cjs +25 -17
  116. package/dist/rules/requirePropertyType.cjs.map +1 -1
  117. package/dist/rules/requireReturns.cjs +203 -125
  118. package/dist/rules/requireReturns.cjs.map +1 -1
  119. package/dist/rules/requireReturnsCheck.cjs +103 -60
  120. package/dist/rules/requireReturnsCheck.cjs.map +1 -1
  121. package/dist/rules/requireReturnsDescription.cjs +54 -39
  122. package/dist/rules/requireReturnsDescription.cjs.map +1 -1
  123. package/dist/rules/requireReturnsType.cjs +50 -32
  124. package/dist/rules/requireReturnsType.cjs.map +1 -1
  125. package/dist/rules/requireTemplate.cjs +178 -119
  126. package/dist/rules/requireTemplate.cjs.map +1 -1
  127. package/dist/rules/requireThrows.cjs +95 -61
  128. package/dist/rules/requireThrows.cjs.map +1 -1
  129. package/dist/rules/requireYields.cjs +166 -106
  130. package/dist/rules/requireYields.cjs.map +1 -1
  131. package/dist/rules/requireYieldsCheck.cjs +152 -96
  132. package/dist/rules/requireYieldsCheck.cjs.map +1 -1
  133. package/dist/rules/sortTags.cjs +444 -258
  134. package/dist/rules/sortTags.cjs.map +1 -1
  135. package/dist/rules/tagLines.cjs +266 -179
  136. package/dist/rules/tagLines.cjs.map +1 -1
  137. package/dist/rules/textEscaping.cjs +127 -92
  138. package/dist/rules/textEscaping.cjs.map +1 -1
  139. package/dist/rules/validTypes.cjs +265 -252
  140. package/dist/rules/validTypes.cjs.map +1 -1
  141. package/dist/tagNames.cjs +170 -134
  142. package/dist/tagNames.cjs.map +1 -1
  143. package/dist/utils/hasReturnValue.cjs +474 -246
  144. package/dist/utils/hasReturnValue.cjs.map +1 -1
  145. package/package.json +24 -40
  146. package/src/WarnSettings.js +34 -0
  147. package/src/alignTransform.js +358 -0
  148. package/src/defaultTagOrder.js +169 -0
  149. package/src/exportParser.js +978 -0
  150. package/src/getDefaultTagStructureForMode.js +969 -0
  151. package/src/getJsdocProcessorPlugin.js +672 -0
  152. package/src/index.js +530 -0
  153. package/src/iterateJsdoc.js +2541 -0
  154. package/src/jsdocUtils.js +1896 -0
  155. package/src/rules/checkAccess.js +45 -0
  156. package/src/rules/checkAlignment.js +63 -0
  157. package/src/rules/checkExamples.js +589 -0
  158. package/src/rules/checkIndentation.js +75 -0
  159. package/src/rules/checkLineAlignment.js +372 -0
  160. package/src/rules/checkParamNames.js +474 -0
  161. package/src/rules/checkPropertyNames.js +152 -0
  162. package/src/rules/checkSyntax.js +30 -0
  163. package/src/rules/checkTagNames.js +314 -0
  164. package/src/rules/checkTemplateNames.js +204 -0
  165. package/src/rules/checkTypes.js +535 -0
  166. package/src/rules/checkValues.js +248 -0
  167. package/src/rules/convertToJsdocComments.js +398 -0
  168. package/src/rules/emptyTags.js +98 -0
  169. package/src/rules/implementsOnClasses.js +64 -0
  170. package/src/rules/importsAsDependencies.js +133 -0
  171. package/src/rules/informativeDocs.js +189 -0
  172. package/src/rules/linesBeforeBlock.js +134 -0
  173. package/src/rules/matchDescription.js +286 -0
  174. package/src/rules/matchName.js +151 -0
  175. package/src/rules/multilineBlocks.js +493 -0
  176. package/src/rules/noBadBlocks.js +119 -0
  177. package/src/rules/noBlankBlockDescriptions.js +69 -0
  178. package/src/rules/noBlankBlocks.js +53 -0
  179. package/src/rules/noDefaults.js +85 -0
  180. package/src/rules/noMissingSyntax.js +195 -0
  181. package/src/rules/noMultiAsterisks.js +134 -0
  182. package/src/rules/noRestrictedSyntax.js +91 -0
  183. package/src/rules/noTypes.js +93 -0
  184. package/src/rules/noUndefinedTypes.js +543 -0
  185. package/src/rules/requireAsteriskPrefix.js +190 -0
  186. package/src/rules/requireDescription.js +161 -0
  187. package/src/rules/requireDescriptionCompleteSentence.js +335 -0
  188. package/src/rules/requireExample.js +118 -0
  189. package/src/rules/requireFileOverview.js +154 -0
  190. package/src/rules/requireHyphenBeforeParamDescription.js +176 -0
  191. package/src/rules/requireJsdoc.js +743 -0
  192. package/src/rules/requireParam.js +602 -0
  193. package/src/rules/requireParamDescription.js +89 -0
  194. package/src/rules/requireParamName.js +55 -0
  195. package/src/rules/requireParamType.js +89 -0
  196. package/src/rules/requireProperty.js +48 -0
  197. package/src/rules/requirePropertyDescription.js +25 -0
  198. package/src/rules/requirePropertyName.js +25 -0
  199. package/src/rules/requirePropertyType.js +25 -0
  200. package/src/rules/requireReturns.js +238 -0
  201. package/src/rules/requireReturnsCheck.js +145 -0
  202. package/src/rules/requireReturnsDescription.js +59 -0
  203. package/src/rules/requireReturnsType.js +51 -0
  204. package/src/rules/requireTemplate.js +201 -0
  205. package/src/rules/requireThrows.js +111 -0
  206. package/src/rules/requireYields.js +216 -0
  207. package/src/rules/requireYieldsCheck.js +208 -0
  208. package/src/rules/sortTags.js +558 -0
  209. package/src/rules/tagLines.js +359 -0
  210. package/src/rules/textEscaping.js +154 -0
  211. package/src/rules/validTypes.js +401 -0
  212. package/src/tagNames.js +238 -0
  213. package/src/utils/hasReturnValue.js +572 -0
  214. package/dist/WarnSettings.js +0 -20
  215. package/dist/WarnSettings.js.map +0 -1
  216. package/dist/_virtual/rolldown_runtime.cjs +0 -32
  217. package/dist/_virtual/rolldown_runtime.js +0 -11
  218. package/dist/alignTransform.js +0 -241
  219. package/dist/alignTransform.js.map +0 -1
  220. package/dist/defaultTagOrder.js +0 -134
  221. package/dist/defaultTagOrder.js.map +0 -1
  222. package/dist/exportParser.js +0 -518
  223. package/dist/exportParser.js.map +0 -1
  224. package/dist/getDefaultTagStructureForMode.js +0 -188
  225. package/dist/getDefaultTagStructureForMode.js.map +0 -1
  226. package/dist/getJsdocProcessorPlugin.d.cts +0 -70
  227. package/dist/getJsdocProcessorPlugin.d.cts.map +0 -1
  228. package/dist/getJsdocProcessorPlugin.js +0 -383
  229. package/dist/getJsdocProcessorPlugin.js.map +0 -1
  230. package/dist/index.d.cts +0 -2
  231. package/dist/index.js +0 -3
  232. package/dist/iterateJsdoc.d.cts +0 -472
  233. package/dist/iterateJsdoc.d.cts.map +0 -1
  234. package/dist/iterateJsdoc.js +0 -1628
  235. package/dist/iterateJsdoc.js.map +0 -1
  236. package/dist/jsdocUtils.js +0 -1123
  237. package/dist/jsdocUtils.js.map +0 -1
  238. package/dist/plugin.cjs +0 -427
  239. package/dist/plugin.cjs.map +0 -1
  240. package/dist/plugin.js +0 -427
  241. package/dist/plugin.js.map +0 -1
  242. package/dist/rules/checkAccess.js +0 -33
  243. package/dist/rules/checkAccess.js.map +0 -1
  244. package/dist/rules/checkAlignment.js +0 -47
  245. package/dist/rules/checkAlignment.js.map +0 -1
  246. package/dist/rules/checkExamples.js +0 -348
  247. package/dist/rules/checkExamples.js.map +0 -1
  248. package/dist/rules/checkIndentation.js +0 -59
  249. package/dist/rules/checkIndentation.js.map +0 -1
  250. package/dist/rules/checkLineAlignment.js +0 -229
  251. package/dist/rules/checkLineAlignment.js.map +0 -1
  252. package/dist/rules/checkParamNames.js +0 -237
  253. package/dist/rules/checkParamNames.js.map +0 -1
  254. package/dist/rules/checkPropertyNames.js +0 -88
  255. package/dist/rules/checkPropertyNames.js.map +0 -1
  256. package/dist/rules/checkSyntax.js +0 -25
  257. package/dist/rules/checkSyntax.js.map +0 -1
  258. package/dist/rules/checkTagNames.js +0 -191
  259. package/dist/rules/checkTagNames.js.map +0 -1
  260. package/dist/rules/checkTemplateNames.js +0 -124
  261. package/dist/rules/checkTemplateNames.js.map +0 -1
  262. package/dist/rules/checkTypes.js +0 -299
  263. package/dist/rules/checkTypes.js.map +0 -1
  264. package/dist/rules/checkValues.js +0 -103
  265. package/dist/rules/checkValues.js.map +0 -1
  266. package/dist/rules/convertToJsdocComments.js +0 -231
  267. package/dist/rules/convertToJsdocComments.js.map +0 -1
  268. package/dist/rules/emptyTags.js +0 -67
  269. package/dist/rules/emptyTags.js.map +0 -1
  270. package/dist/rules/implementsOnClasses.js +0 -40
  271. package/dist/rules/implementsOnClasses.js.map +0 -1
  272. package/dist/rules/importsAsDependencies.js +0 -68
  273. package/dist/rules/importsAsDependencies.js.map +0 -1
  274. package/dist/rules/informativeDocs.js +0 -110
  275. package/dist/rules/informativeDocs.js.map +0 -1
  276. package/dist/rules/linesBeforeBlock.js +0 -75
  277. package/dist/rules/linesBeforeBlock.js.map +0 -1
  278. package/dist/rules/matchDescription.js +0 -167
  279. package/dist/rules/matchDescription.js.map +0 -1
  280. package/dist/rules/matchName.js +0 -77
  281. package/dist/rules/matchName.js.map +0 -1
  282. package/dist/rules/multilineBlocks.js +0 -245
  283. package/dist/rules/multilineBlocks.js.map +0 -1
  284. package/dist/rules/noBadBlocks.js +0 -68
  285. package/dist/rules/noBadBlocks.js.map +0 -1
  286. package/dist/rules/noBlankBlockDescriptions.js +0 -41
  287. package/dist/rules/noBlankBlockDescriptions.js.map +0 -1
  288. package/dist/rules/noBlankBlocks.js +0 -30
  289. package/dist/rules/noBlankBlocks.js.map +0 -1
  290. package/dist/rules/noDefaults.js +0 -56
  291. package/dist/rules/noDefaults.js.map +0 -1
  292. package/dist/rules/noMissingSyntax.js +0 -126
  293. package/dist/rules/noMissingSyntax.js.map +0 -1
  294. package/dist/rules/noMultiAsterisks.js +0 -58
  295. package/dist/rules/noMultiAsterisks.js.map +0 -1
  296. package/dist/rules/noRestrictedSyntax.js +0 -49
  297. package/dist/rules/noRestrictedSyntax.js.map +0 -1
  298. package/dist/rules/noTypes.js +0 -65
  299. package/dist/rules/noTypes.js.map +0 -1
  300. package/dist/rules/noUndefinedTypes.js +0 -303
  301. package/dist/rules/noUndefinedTypes.js.map +0 -1
  302. package/dist/rules/requireAsteriskPrefix.js +0 -112
  303. package/dist/rules/requireAsteriskPrefix.js.map +0 -1
  304. package/dist/rules/requireDescription.js +0 -95
  305. package/dist/rules/requireDescription.js.map +0 -1
  306. package/dist/rules/requireDescriptionCompleteSentence.js +0 -220
  307. package/dist/rules/requireDescriptionCompleteSentence.js.map +0 -1
  308. package/dist/rules/requireExample.js +0 -77
  309. package/dist/rules/requireExample.js.map +0 -1
  310. package/dist/rules/requireFileOverview.js +0 -81
  311. package/dist/rules/requireFileOverview.js.map +0 -1
  312. package/dist/rules/requireHyphenBeforeParamDescription.js +0 -89
  313. package/dist/rules/requireHyphenBeforeParamDescription.js.map +0 -1
  314. package/dist/rules/requireJsdoc.js +0 -404
  315. package/dist/rules/requireJsdoc.js.map +0 -1
  316. package/dist/rules/requireParam.js +0 -344
  317. package/dist/rules/requireParam.js.map +0 -1
  318. package/dist/rules/requireParamDescription.js +0 -59
  319. package/dist/rules/requireParamDescription.js.map +0 -1
  320. package/dist/rules/requireParamName.js +0 -36
  321. package/dist/rules/requireParamName.js.map +0 -1
  322. package/dist/rules/requireParamType.js +0 -59
  323. package/dist/rules/requireParamType.js.map +0 -1
  324. package/dist/rules/requireProperty.js +0 -35
  325. package/dist/rules/requireProperty.js.map +0 -1
  326. package/dist/rules/requirePropertyDescription.js +0 -21
  327. package/dist/rules/requirePropertyDescription.js.map +0 -1
  328. package/dist/rules/requirePropertyName.js +0 -21
  329. package/dist/rules/requirePropertyName.js.map +0 -1
  330. package/dist/rules/requirePropertyType.js +0 -21
  331. package/dist/rules/requirePropertyType.js.map +0 -1
  332. package/dist/rules/requireReturns.js +0 -131
  333. package/dist/rules/requireReturns.js.map +0 -1
  334. package/dist/rules/requireReturnsCheck.js +0 -66
  335. package/dist/rules/requireReturnsCheck.js.map +0 -1
  336. package/dist/rules/requireReturnsDescription.js +0 -43
  337. package/dist/rules/requireReturnsDescription.js.map +0 -1
  338. package/dist/rules/requireReturnsType.js +0 -36
  339. package/dist/rules/requireReturnsType.js.map +0 -1
  340. package/dist/rules/requireTemplate.js +0 -122
  341. package/dist/rules/requireTemplate.js.map +0 -1
  342. package/dist/rules/requireThrows.js +0 -67
  343. package/dist/rules/requireThrows.js.map +0 -1
  344. package/dist/rules/requireYields.js +0 -115
  345. package/dist/rules/requireYields.js.map +0 -1
  346. package/dist/rules/requireYieldsCheck.js +0 -105
  347. package/dist/rules/requireYieldsCheck.js.map +0 -1
  348. package/dist/rules/sortTags.js +0 -262
  349. package/dist/rules/sortTags.js.map +0 -1
  350. package/dist/rules/tagLines.js +0 -183
  351. package/dist/rules/tagLines.js.map +0 -1
  352. package/dist/rules/textEscaping.js +0 -102
  353. package/dist/rules/textEscaping.js.map +0 -1
  354. package/dist/rules/validTypes.js +0 -259
  355. package/dist/rules/validTypes.js.map +0 -1
  356. package/dist/tagNames.js +0 -144
  357. package/dist/tagNames.js.map +0 -1
  358. package/dist/utils/hasReturnValue.js +0 -265
  359. package/dist/utils/hasReturnValue.js.map +0 -1
@@ -1,300 +1,394 @@
1
- const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
- const require_iterateJsdoc = require('../iterateJsdoc.cjs');
3
- const __es_joy_jsdoccomment = require_rolldown_runtime.__toESM(require("@es-joy/jsdoccomment"));
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
+ var _jsdoccomment = require("@es-joy/jsdoccomment");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ const strictNativeTypes = ['undefined', 'null', 'boolean', 'number', 'bigint', 'string', 'symbol', 'object', 'Array', 'Function', 'Date', 'RegExp'];
4
11
 
5
- //#region src/rules/checkTypes.js
6
- const strictNativeTypes = [
7
- "undefined",
8
- "null",
9
- "boolean",
10
- "number",
11
- "bigint",
12
- "string",
13
- "symbol",
14
- "object",
15
- "Array",
16
- "Function",
17
- "Date",
18
- "RegExp"
19
- ];
20
12
  /**
21
- * Adjusts the parent type node `meta` for generic matches (or type node
22
- * `type` for `JsdocTypeAny`) and sets the type node `value`.
23
- * @param {string} type The actual type
24
- * @param {string} preferred The preferred type
25
- * @param {boolean} isGenericMatch
26
- * @param {string} typeNodeName
27
- * @param {import('jsdoc-type-pratt-parser').NonRootResult} node
28
- * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
29
- * @returns {void}
30
- */
13
+ * Adjusts the parent type node `meta` for generic matches (or type node
14
+ * `type` for `JsdocTypeAny`) and sets the type node `value`.
15
+ * @param {string} type The actual type
16
+ * @param {string} preferred The preferred type
17
+ * @param {boolean} isGenericMatch
18
+ * @param {string} typeNodeName
19
+ * @param {import('jsdoc-type-pratt-parser').NonRootResult} node
20
+ * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
21
+ * @returns {void}
22
+ */
31
23
  const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {
32
- let ret = preferred;
33
- if (isGenericMatch) {
34
- const parentMeta = parentNode.meta;
35
- if (preferred === "[]") {
36
- parentMeta.brackets = "square";
37
- parentMeta.dot = false;
38
- ret = "Array";
39
- } else {
40
- const dotBracketEnd = preferred.match(/\.(?:<>)?$/v);
41
- if (dotBracketEnd) {
42
- parentMeta.brackets = "angle";
43
- parentMeta.dot = true;
44
- ret = preferred.slice(0, -dotBracketEnd[0].length);
45
- } else {
46
- const bracketEnd = preferred.endsWith("<>");
47
- if (bracketEnd) {
48
- parentMeta.brackets = "angle";
49
- parentMeta.dot = false;
50
- ret = preferred.slice(0, -2);
51
- } else if (parentMeta?.brackets === "square" && (typeNodeName === "[]" || typeNodeName === "Array")) {
52
- parentMeta.brackets = "angle";
53
- parentMeta.dot = false;
54
- }
55
- }
56
- }
57
- } else if (type === "JsdocTypeAny") node.type = "JsdocTypeName";
58
- /** @type {import('jsdoc-type-pratt-parser').NameResult} */ node.value = ret.replace(/(?:\.|<>|\.<>|\[\])$/v, "");
59
- if (!ret)
60
- /** @type {import('jsdoc-type-pratt-parser').NameResult} */ node.value = typeNodeName;
24
+ let ret = preferred;
25
+ if (isGenericMatch) {
26
+ const parentMeta = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */parentNode.meta;
27
+ if (preferred === '[]') {
28
+ parentMeta.brackets = 'square';
29
+ parentMeta.dot = false;
30
+ ret = 'Array';
31
+ } else {
32
+ const dotBracketEnd = preferred.match(/\.(?:<>)?$/v);
33
+ if (dotBracketEnd) {
34
+ parentMeta.brackets = 'angle';
35
+ parentMeta.dot = true;
36
+ ret = preferred.slice(0, -dotBracketEnd[0].length);
37
+ } else {
38
+ const bracketEnd = preferred.endsWith('<>');
39
+ if (bracketEnd) {
40
+ parentMeta.brackets = 'angle';
41
+ parentMeta.dot = false;
42
+ ret = preferred.slice(0, -2);
43
+ } else if (parentMeta?.brackets === 'square' && (typeNodeName === '[]' || typeNodeName === 'Array')) {
44
+ parentMeta.brackets = 'angle';
45
+ parentMeta.dot = false;
46
+ }
47
+ }
48
+ }
49
+ } else if (type === 'JsdocTypeAny') {
50
+ node.type = 'JsdocTypeName';
51
+ }
52
+
53
+ /** @type {import('jsdoc-type-pratt-parser').NameResult} */
54
+ node.value = ret.replace(/(?:\.|<>|\.<>|\[\])$/v, '');
55
+
56
+ // For bare pseudo-types like `<>`
57
+ if (!ret) {
58
+ /** @type {import('jsdoc-type-pratt-parser').NameResult} */node.value = typeNodeName;
59
+ }
61
60
  };
61
+
62
62
  /**
63
- * @param {boolean} [upperCase]
64
- * @returns {string}
65
- */
66
- const getMessage = (upperCase) => {
67
- return "Use object shorthand or index signatures instead of `" + (upperCase ? "O" : "o") + "bject`, e.g., `{[key: string]: string}`";
63
+ * @param {boolean} [upperCase]
64
+ * @returns {string}
65
+ */
66
+ const getMessage = upperCase => {
67
+ return 'Use object shorthand or index signatures instead of ' + '`' + (upperCase ? 'O' : 'o') + 'bject`, e.g., `{[key: string]: string}`';
68
68
  };
69
- var checkTypes_default = require_iterateJsdoc.default(({ context, jsdocNode, report, settings, sourceCode, utils }) => {
70
- const jsdocTagsWithPossibleType = utils.filterTags((tag) => {
71
- return Boolean(utils.tagMightHaveTypePosition(tag.tag));
72
- });
73
- const { mode, preferredTypes: preferredTypesOriginal, structuredTags } = settings;
74
- const injectObjectPreferredTypes = !("Object" in preferredTypesOriginal || "object" in preferredTypesOriginal || "object.<>" in preferredTypesOriginal || "Object.<>" in preferredTypesOriginal || "object<>" in preferredTypesOriginal);
75
- /**
76
- * @type {{
77
- * message: string,
78
- * replacement: false
79
- * }}
80
- */
81
- const info = {
82
- message: getMessage(),
83
- replacement: false
84
- };
85
- /**
86
- * @type {{
87
- * message: string,
88
- * replacement: false
89
- * }}
90
- */
91
- const infoUC = {
92
- message: getMessage(true),
93
- replacement: false
94
- };
95
- /** @type {import('../iterateJsdoc.js').PreferredTypes} */
96
- const typeToInject = mode === "typescript" ? {
97
- Object: "object",
98
- "object.<>": info,
99
- "Object.<>": infoUC,
100
- "object<>": info,
101
- "Object<>": infoUC
102
- } : {
103
- Object: "object",
104
- "object.<>": "Object<>",
105
- "Object.<>": "Object<>",
106
- "object<>": "Object<>"
107
- };
108
- /** @type {import('../iterateJsdoc.js').PreferredTypes} */
109
- const preferredTypes = {
110
- ...injectObjectPreferredTypes ? typeToInject : {},
111
- ...preferredTypesOriginal
112
- };
113
- const { exemptTagContexts = [], noDefaults, unifyParentAndChildTypeChecks } = context.options[0] || {};
114
- /**
115
- * Gets information about the preferred type: whether there is a matching
116
- * preferred type, what the type is, and whether it is a match to a generic.
117
- * @param {string} _type Not currently in use
118
- * @param {string} typeNodeName
119
- * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
120
- * @param {string|undefined} property
121
- * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}
122
- */
123
- const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {
124
- let hasMatchingPreferredType = false;
125
- let isGenericMatch = false;
126
- let typeName = typeNodeName;
127
- const isNameOfGeneric = parentNode !== void 0 && parentNode.type === "JsdocTypeGeneric" && property === "left";
128
- if (unifyParentAndChildTypeChecks || isNameOfGeneric) {
129
- const brackets = parentNode?.meta?.brackets;
130
- const dot = parentNode?.meta?.dot;
131
- if (brackets === "angle") {
132
- const checkPostFixes = dot ? [".", ".<>"] : ["<>"];
133
- isGenericMatch = checkPostFixes.some((checkPostFix) => {
134
- if (preferredTypes?.[typeNodeName + checkPostFix] !== void 0) {
135
- typeName += checkPostFix;
136
- return true;
137
- }
138
- return false;
139
- });
140
- }
141
- if (!isGenericMatch && property && parentNode.type === "JsdocTypeGeneric") {
142
- const checkPostFixes = dot ? [".", ".<>"] : [brackets === "angle" ? "<>" : "[]"];
143
- isGenericMatch = checkPostFixes.some((checkPostFix) => {
144
- if (preferredTypes?.[checkPostFix] !== void 0) {
145
- typeName = checkPostFix;
146
- return true;
147
- }
148
- return false;
149
- });
150
- }
151
- }
152
- const directNameMatch = preferredTypes?.[typeNodeName] !== void 0 && !Object.values(preferredTypes).includes(typeNodeName);
153
- const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;
154
- isGenericMatch = isGenericMatch || Boolean(unifiedSyntaxParentMatch);
155
- hasMatchingPreferredType = isGenericMatch || directNameMatch && !property;
156
- return [
157
- hasMatchingPreferredType,
158
- typeName,
159
- isGenericMatch
160
- ];
161
- };
162
- /**
163
- * Iterates strict types to see if any should be added to `invalidTypes` (and
164
- * the the relevant strict type returned as the new preferred type).
165
- * @param {string} typeNodeName
166
- * @param {string|undefined} preferred
167
- * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
168
- * @param {(string|false|undefined)[][]} invalidTypes
169
- * @returns {string|undefined} The `preferred` type string, optionally changed
170
- */
171
- const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {
172
- let changedPreferred = preferred;
173
- for (const strictNativeType of strictNativeTypes) {
174
- if (strictNativeType === "object" && (!preferredTypes?.[typeNodeName] || parentNode?.elements?.length && parentNode?.left?.type === "JsdocTypeName" && parentNode?.left?.value === "Object")) continue;
175
- if (strictNativeType !== typeNodeName && strictNativeType.toLowerCase() === typeNodeName.toLowerCase() && (!preferredTypes || preferredTypes?.[strictNativeType] === void 0)) {
176
- changedPreferred = strictNativeType;
177
- invalidTypes.push([typeNodeName, changedPreferred]);
178
- break;
179
- }
180
- }
181
- return changedPreferred;
182
- };
183
- /**
184
- * Collect invalid type info.
185
- * @param {string} type
186
- * @param {string} value
187
- * @param {string} tagName
188
- * @param {string} nameInTag
189
- * @param {number} idx
190
- * @param {string|undefined} property
191
- * @param {import('jsdoc-type-pratt-parser').NonRootResult} node
192
- * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
193
- * @param {(string|false|undefined)[][]} invalidTypes
194
- * @returns {void}
195
- */
196
- const getInvalidTypes = (type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes) => {
197
- let typeNodeName = type === "JsdocTypeAny" ? "*" : value;
198
- const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);
199
- let preferred;
200
- let types;
201
- if (hasMatchingPreferredType) {
202
- const preferredSetting = preferredTypes[typeName];
203
- typeNodeName = typeName === "[]" ? typeName : typeNodeName;
204
- if (!preferredSetting) invalidTypes.push([typeNodeName]);
205
- else if (typeof preferredSetting === "string") {
206
- preferred = preferredSetting;
207
- invalidTypes.push([typeNodeName, preferred]);
208
- } else if (preferredSetting && typeof preferredSetting === "object") {
209
- const nextItem = preferredSetting.skipRootChecking && jsdocTagsWithPossibleType[idx + 1];
210
- if (!nextItem || !nextItem.name.startsWith(`${nameInTag}.`)) {
211
- preferred = preferredSetting.replacement;
212
- invalidTypes.push([
213
- typeNodeName,
214
- preferred,
215
- preferredSetting.message
216
- ]);
217
- }
218
- } else {
219
- utils.reportSettings("Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.");
220
- return;
221
- }
222
- } else if (Object.entries(structuredTags).some(([tag, { type: typs }]) => {
223
- types = typs;
224
- return tag === tagName && Array.isArray(types) && !types.includes(typeNodeName);
225
- })) invalidTypes.push([typeNodeName, types]);
226
- else if (!noDefaults && type === "JsdocTypeName") preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);
227
- if (preferred) adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);
228
- };
229
- for (const [idx, jsdocTag] of jsdocTagsWithPossibleType.entries()) {
230
- /** @type {(string|false|undefined)[][]} */
231
- const invalidTypes = [];
232
- let typeAst;
233
- try {
234
- typeAst = mode === "permissive" ? (0, __es_joy_jsdoccomment.tryParse)(jsdocTag.type) : (0, __es_joy_jsdoccomment.parse)(jsdocTag.type, mode);
235
- } catch {
236
- continue;
237
- }
238
- const { name: nameInTag, tag: tagName } = jsdocTag;
239
- (0, __es_joy_jsdoccomment.traverse)(typeAst, (node, parentNode, property) => {
240
- const { type, value } = node;
241
- if (!["JsdocTypeAny", "JsdocTypeName"].includes(type)) return;
242
- getInvalidTypes(type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes);
243
- });
244
- if (invalidTypes.length) {
245
- const fixedType = (0, __es_joy_jsdoccomment.stringify)(typeAst);
246
- /**
247
- * @type {import('eslint').Rule.ReportFixer}
248
- */
249
- const fix = (fixer) => {
250
- return fixer.replaceText(jsdocNode, sourceCode.getText(jsdocNode).replace(`{${jsdocTag.type}}`, `{${fixedType}}`));
251
- };
252
- for (const [badType, preferredType = "", msg] of invalidTypes) {
253
- const tagValue = jsdocTag.name ? ` "${jsdocTag.name}"` : "";
254
- if (exemptTagContexts.some(({ tag, types }) => {
255
- return tag === tagName && (types === true || types.includes(jsdocTag.type));
256
- })) continue;
257
- report(msg || `Invalid JSDoc @${tagName}${tagValue} type "${badType}"` + (preferredType ? "; " : ".") + (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ""), preferredType ? fix : null, jsdocTag, msg ? {
258
- tagName,
259
- tagValue
260
- } : void 0);
261
- }
262
- }
263
- }
69
+ var _default = exports.default = (0, _iterateJsdoc.default)(({
70
+ context,
71
+ jsdocNode,
72
+ report,
73
+ settings,
74
+ sourceCode,
75
+ utils
76
+ }) => {
77
+ const jsdocTagsWithPossibleType = utils.filterTags(tag => {
78
+ return Boolean(utils.tagMightHaveTypePosition(tag.tag));
79
+ });
80
+ const
81
+ /**
82
+ * @type {{
83
+ * preferredTypes: import('../iterateJsdoc.js').PreferredTypes,
84
+ * structuredTags: import('../iterateJsdoc.js').StructuredTags,
85
+ * mode: import('../jsdocUtils.js').ParserMode
86
+ * }}
87
+ */
88
+ {
89
+ mode,
90
+ preferredTypes: preferredTypesOriginal,
91
+ structuredTags
92
+ } = settings;
93
+ const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal || 'object' in preferredTypesOriginal || 'object.<>' in preferredTypesOriginal || 'Object.<>' in preferredTypesOriginal || 'object<>' in preferredTypesOriginal);
94
+
95
+ /**
96
+ * @type {{
97
+ * message: string,
98
+ * replacement: false
99
+ * }}
100
+ */
101
+ const info = {
102
+ message: getMessage(),
103
+ replacement: false
104
+ };
105
+
106
+ /**
107
+ * @type {{
108
+ * message: string,
109
+ * replacement: false
110
+ * }}
111
+ */
112
+ const infoUC = {
113
+ message: getMessage(true),
114
+ replacement: false
115
+ };
116
+
117
+ /** @type {import('../iterateJsdoc.js').PreferredTypes} */
118
+ const typeToInject = mode === 'typescript' ? {
119
+ Object: 'object',
120
+ 'object.<>': info,
121
+ 'Object.<>': infoUC,
122
+ 'object<>': info,
123
+ 'Object<>': infoUC
124
+ } : {
125
+ Object: 'object',
126
+ 'object.<>': 'Object<>',
127
+ 'Object.<>': 'Object<>',
128
+ 'object<>': 'Object<>'
129
+ };
130
+
131
+ /** @type {import('../iterateJsdoc.js').PreferredTypes} */
132
+ const preferredTypes = {
133
+ ...(injectObjectPreferredTypes ? typeToInject : {}),
134
+ ...preferredTypesOriginal
135
+ };
136
+ const
137
+ /**
138
+ * @type {{
139
+ * noDefaults: boolean,
140
+ * unifyParentAndChildTypeChecks: boolean,
141
+ * exemptTagContexts: ({
142
+ * tag: string,
143
+ * types: true|string[]
144
+ * })[]
145
+ * }}
146
+ */
147
+ {
148
+ exemptTagContexts = [],
149
+ noDefaults,
150
+ unifyParentAndChildTypeChecks
151
+ } = context.options[0] || {};
152
+
153
+ /**
154
+ * Gets information about the preferred type: whether there is a matching
155
+ * preferred type, what the type is, and whether it is a match to a generic.
156
+ * @param {string} _type Not currently in use
157
+ * @param {string} typeNodeName
158
+ * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
159
+ * @param {string|undefined} property
160
+ * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}
161
+ */
162
+ const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {
163
+ let hasMatchingPreferredType = false;
164
+ let isGenericMatch = false;
165
+ let typeName = typeNodeName;
166
+ const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';
167
+ if (unifyParentAndChildTypeChecks || isNameOfGeneric) {
168
+ const brackets = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */parentNode?.meta?.brackets;
169
+ const dot = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */parentNode?.meta?.dot;
170
+ if (brackets === 'angle') {
171
+ const checkPostFixes = dot ? ['.', '.<>'] : ['<>'];
172
+ isGenericMatch = checkPostFixes.some(checkPostFix => {
173
+ if (preferredTypes?.[typeNodeName + checkPostFix] !== undefined) {
174
+ typeName += checkPostFix;
175
+ return true;
176
+ }
177
+ return false;
178
+ });
179
+ }
180
+ if (!isGenericMatch && property && /** @type {import('jsdoc-type-pratt-parser').NonRootResult} */parentNode.type === 'JsdocTypeGeneric') {
181
+ const checkPostFixes = dot ? ['.', '.<>'] : [brackets === 'angle' ? '<>' : '[]'];
182
+ isGenericMatch = checkPostFixes.some(checkPostFix => {
183
+ if (preferredTypes?.[checkPostFix] !== undefined) {
184
+ typeName = checkPostFix;
185
+ return true;
186
+ }
187
+ return false;
188
+ });
189
+ }
190
+ }
191
+ const directNameMatch = preferredTypes?.[typeNodeName] !== undefined && !Object.values(preferredTypes).includes(typeNodeName);
192
+ const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;
193
+ isGenericMatch = isGenericMatch || Boolean(unifiedSyntaxParentMatch);
194
+ hasMatchingPreferredType = isGenericMatch || directNameMatch && !property;
195
+ return [hasMatchingPreferredType, typeName, isGenericMatch];
196
+ };
197
+
198
+ /**
199
+ * Iterates strict types to see if any should be added to `invalidTypes` (and
200
+ * the the relevant strict type returned as the new preferred type).
201
+ * @param {string} typeNodeName
202
+ * @param {string|undefined} preferred
203
+ * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
204
+ * @param {(string|false|undefined)[][]} invalidTypes
205
+ * @returns {string|undefined} The `preferred` type string, optionally changed
206
+ */
207
+ const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {
208
+ let changedPreferred = preferred;
209
+ for (const strictNativeType of strictNativeTypes) {
210
+ if (strictNativeType === 'object' && (
211
+ // This is not set to remap with exact type match (e.g.,
212
+ // `object: 'Object'`), so can ignore (including if circular)
213
+ !preferredTypes?.[typeNodeName] ||
214
+ // Although present on `preferredTypes` for remapping, this is a
215
+ // parent object without a parent match (and not
216
+ // `unifyParentAndChildTypeChecks`) and we don't want
217
+ // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555
218
+ /**
219
+ * @type {import('jsdoc-type-pratt-parser').GenericResult}
220
+ */
221
+ parentNode?.elements?.length && (
222
+ /**
223
+ * @type {import('jsdoc-type-pratt-parser').GenericResult}
224
+ */
225
+ parentNode?.left?.type === 'JsdocTypeName' &&
226
+ /**
227
+ * @type {import('jsdoc-type-pratt-parser').GenericResult}
228
+ */
229
+ parentNode?.left?.value === 'Object'))) {
230
+ continue;
231
+ }
232
+ if (strictNativeType !== typeNodeName && strictNativeType.toLowerCase() === typeNodeName.toLowerCase() && (
233
+ // Don't report if user has own map for a strict native type
234
+ !preferredTypes || preferredTypes?.[strictNativeType] === undefined)) {
235
+ changedPreferred = strictNativeType;
236
+ invalidTypes.push([typeNodeName, changedPreferred]);
237
+ break;
238
+ }
239
+ }
240
+ return changedPreferred;
241
+ };
242
+
243
+ /**
244
+ * Collect invalid type info.
245
+ * @param {string} type
246
+ * @param {string} value
247
+ * @param {string} tagName
248
+ * @param {string} nameInTag
249
+ * @param {number} idx
250
+ * @param {string|undefined} property
251
+ * @param {import('jsdoc-type-pratt-parser').NonRootResult} node
252
+ * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
253
+ * @param {(string|false|undefined)[][]} invalidTypes
254
+ * @returns {void}
255
+ */
256
+ const getInvalidTypes = (type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes) => {
257
+ let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;
258
+ const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);
259
+ let preferred;
260
+ let types;
261
+ if (hasMatchingPreferredType) {
262
+ const preferredSetting = preferredTypes[typeName];
263
+ typeNodeName = typeName === '[]' ? typeName : typeNodeName;
264
+ if (!preferredSetting) {
265
+ invalidTypes.push([typeNodeName]);
266
+ } else if (typeof preferredSetting === 'string') {
267
+ preferred = preferredSetting;
268
+ invalidTypes.push([typeNodeName, preferred]);
269
+ } else if (preferredSetting && typeof preferredSetting === 'object') {
270
+ const nextItem = preferredSetting.skipRootChecking && jsdocTagsWithPossibleType[idx + 1];
271
+ if (!nextItem || !nextItem.name.startsWith(`${nameInTag}.`)) {
272
+ preferred = preferredSetting.replacement;
273
+ invalidTypes.push([typeNodeName, preferred, preferredSetting.message]);
274
+ }
275
+ } else {
276
+ utils.reportSettings('Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.');
277
+ return;
278
+ }
279
+ } else if (Object.entries(structuredTags).some(([tag, {
280
+ type: typs
281
+ }]) => {
282
+ types = typs;
283
+ return tag === tagName && Array.isArray(types) && !types.includes(typeNodeName);
284
+ })) {
285
+ invalidTypes.push([typeNodeName, types]);
286
+ } else if (!noDefaults && type === 'JsdocTypeName') {
287
+ preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);
288
+ }
289
+
290
+ // For fixer
291
+ if (preferred) {
292
+ adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);
293
+ }
294
+ };
295
+ for (const [idx, jsdocTag] of jsdocTagsWithPossibleType.entries()) {
296
+ /** @type {(string|false|undefined)[][]} */
297
+ const invalidTypes = [];
298
+ let typeAst;
299
+ try {
300
+ typeAst = mode === 'permissive' ? (0, _jsdoccomment.tryParse)(jsdocTag.type) : (0, _jsdoccomment.parse)(jsdocTag.type, mode);
301
+ } catch {
302
+ continue;
303
+ }
304
+ const {
305
+ name: nameInTag,
306
+ tag: tagName
307
+ } = jsdocTag;
308
+ (0, _jsdoccomment.traverse)(typeAst, (node, parentNode, property) => {
309
+ const {
310
+ type,
311
+ value
312
+ } =
313
+ /**
314
+ * @type {import('jsdoc-type-pratt-parser').NameResult}
315
+ */
316
+ node;
317
+ if (!['JsdocTypeAny', 'JsdocTypeName'].includes(type)) {
318
+ return;
319
+ }
320
+ getInvalidTypes(type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes);
321
+ });
322
+ if (invalidTypes.length) {
323
+ const fixedType = (0, _jsdoccomment.stringify)(typeAst);
324
+
325
+ /**
326
+ * @type {import('eslint').Rule.ReportFixer}
327
+ */
328
+ const fix = fixer => {
329
+ return fixer.replaceText(jsdocNode, sourceCode.getText(jsdocNode).replace(`{${jsdocTag.type}}`, `{${fixedType}}`));
330
+ };
331
+ for (const [badType, preferredType = '', msg] of invalidTypes) {
332
+ const tagValue = jsdocTag.name ? ` "${jsdocTag.name}"` : '';
333
+ if (exemptTagContexts.some(({
334
+ tag,
335
+ types
336
+ }) => {
337
+ return tag === tagName && (types === true || types.includes(jsdocTag.type));
338
+ })) {
339
+ continue;
340
+ }
341
+ report(msg || `Invalid JSDoc @${tagName}${tagValue} type "${badType}"` + (preferredType ? '; ' : '.') + (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''), preferredType ? fix : null, jsdocTag, msg ? {
342
+ tagName,
343
+ tagValue
344
+ } : undefined);
345
+ }
346
+ }
347
+ }
264
348
  }, {
265
- iterateAllJsdocs: true,
266
- meta: {
267
- docs: {
268
- description: "Reports invalid types.",
269
- url: "https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-types.md#repos-sticky-header"
270
- },
271
- fixable: "code",
272
- schema: [{
273
- additionalProperties: false,
274
- properties: {
275
- exemptTagContexts: {
276
- items: {
277
- additionalProperties: false,
278
- properties: {
279
- tag: { type: "string" },
280
- types: { oneOf: [{ type: "boolean" }, {
281
- items: { type: "string" },
282
- type: "array"
283
- }] }
284
- },
285
- type: "object"
286
- },
287
- type: "array"
288
- },
289
- noDefaults: { type: "boolean" },
290
- unifyParentAndChildTypeChecks: { type: "boolean" }
291
- },
292
- type: "object"
293
- }],
294
- type: "suggestion"
295
- }
349
+ iterateAllJsdocs: true,
350
+ meta: {
351
+ docs: {
352
+ description: 'Reports invalid types.',
353
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-types.md#repos-sticky-header'
354
+ },
355
+ fixable: 'code',
356
+ schema: [{
357
+ additionalProperties: false,
358
+ properties: {
359
+ exemptTagContexts: {
360
+ items: {
361
+ additionalProperties: false,
362
+ properties: {
363
+ tag: {
364
+ type: 'string'
365
+ },
366
+ types: {
367
+ oneOf: [{
368
+ type: 'boolean'
369
+ }, {
370
+ items: {
371
+ type: 'string'
372
+ },
373
+ type: 'array'
374
+ }]
375
+ }
376
+ },
377
+ type: 'object'
378
+ },
379
+ type: 'array'
380
+ },
381
+ noDefaults: {
382
+ type: 'boolean'
383
+ },
384
+ unifyParentAndChildTypeChecks: {
385
+ type: 'boolean'
386
+ }
387
+ },
388
+ type: 'object'
389
+ }],
390
+ type: 'suggestion'
391
+ }
296
392
  });
297
-
298
- //#endregion
299
- exports.default = checkTypes_default;
393
+ module.exports = exports.default;
300
394
  //# sourceMappingURL=checkTypes.cjs.map