eslint-plugin-jsdoc 52.0.3 → 52.0.4

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 (357) 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 +383 -398
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.ts +6 -11
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/iterateJsdoc.cjs +1988 -1528
  22. package/dist/iterateJsdoc.cjs.map +1 -1
  23. package/dist/iterateJsdoc.d.ts +349 -358
  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 +2518 -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 -22
  231. package/dist/index.d.cts.map +0 -1
  232. package/dist/index.js +0 -425
  233. package/dist/index.js.map +0 -1
  234. package/dist/iterateJsdoc.d.cts +0 -471
  235. package/dist/iterateJsdoc.d.cts.map +0 -1
  236. package/dist/iterateJsdoc.js +0 -1617
  237. package/dist/iterateJsdoc.js.map +0 -1
  238. package/dist/jsdocUtils.js +0 -1123
  239. package/dist/jsdocUtils.js.map +0 -1
  240. package/dist/rules/checkAccess.js +0 -33
  241. package/dist/rules/checkAccess.js.map +0 -1
  242. package/dist/rules/checkAlignment.js +0 -47
  243. package/dist/rules/checkAlignment.js.map +0 -1
  244. package/dist/rules/checkExamples.js +0 -348
  245. package/dist/rules/checkExamples.js.map +0 -1
  246. package/dist/rules/checkIndentation.js +0 -59
  247. package/dist/rules/checkIndentation.js.map +0 -1
  248. package/dist/rules/checkLineAlignment.js +0 -229
  249. package/dist/rules/checkLineAlignment.js.map +0 -1
  250. package/dist/rules/checkParamNames.js +0 -237
  251. package/dist/rules/checkParamNames.js.map +0 -1
  252. package/dist/rules/checkPropertyNames.js +0 -88
  253. package/dist/rules/checkPropertyNames.js.map +0 -1
  254. package/dist/rules/checkSyntax.js +0 -25
  255. package/dist/rules/checkSyntax.js.map +0 -1
  256. package/dist/rules/checkTagNames.js +0 -191
  257. package/dist/rules/checkTagNames.js.map +0 -1
  258. package/dist/rules/checkTemplateNames.js +0 -124
  259. package/dist/rules/checkTemplateNames.js.map +0 -1
  260. package/dist/rules/checkTypes.js +0 -299
  261. package/dist/rules/checkTypes.js.map +0 -1
  262. package/dist/rules/checkValues.js +0 -103
  263. package/dist/rules/checkValues.js.map +0 -1
  264. package/dist/rules/convertToJsdocComments.js +0 -231
  265. package/dist/rules/convertToJsdocComments.js.map +0 -1
  266. package/dist/rules/emptyTags.js +0 -67
  267. package/dist/rules/emptyTags.js.map +0 -1
  268. package/dist/rules/implementsOnClasses.js +0 -40
  269. package/dist/rules/implementsOnClasses.js.map +0 -1
  270. package/dist/rules/importsAsDependencies.js +0 -68
  271. package/dist/rules/importsAsDependencies.js.map +0 -1
  272. package/dist/rules/informativeDocs.js +0 -110
  273. package/dist/rules/informativeDocs.js.map +0 -1
  274. package/dist/rules/linesBeforeBlock.js +0 -75
  275. package/dist/rules/linesBeforeBlock.js.map +0 -1
  276. package/dist/rules/matchDescription.js +0 -167
  277. package/dist/rules/matchDescription.js.map +0 -1
  278. package/dist/rules/matchName.js +0 -77
  279. package/dist/rules/matchName.js.map +0 -1
  280. package/dist/rules/multilineBlocks.js +0 -245
  281. package/dist/rules/multilineBlocks.js.map +0 -1
  282. package/dist/rules/noBadBlocks.js +0 -68
  283. package/dist/rules/noBadBlocks.js.map +0 -1
  284. package/dist/rules/noBlankBlockDescriptions.js +0 -41
  285. package/dist/rules/noBlankBlockDescriptions.js.map +0 -1
  286. package/dist/rules/noBlankBlocks.js +0 -30
  287. package/dist/rules/noBlankBlocks.js.map +0 -1
  288. package/dist/rules/noDefaults.js +0 -56
  289. package/dist/rules/noDefaults.js.map +0 -1
  290. package/dist/rules/noMissingSyntax.js +0 -126
  291. package/dist/rules/noMissingSyntax.js.map +0 -1
  292. package/dist/rules/noMultiAsterisks.js +0 -58
  293. package/dist/rules/noMultiAsterisks.js.map +0 -1
  294. package/dist/rules/noRestrictedSyntax.js +0 -49
  295. package/dist/rules/noRestrictedSyntax.js.map +0 -1
  296. package/dist/rules/noTypes.js +0 -65
  297. package/dist/rules/noTypes.js.map +0 -1
  298. package/dist/rules/noUndefinedTypes.js +0 -303
  299. package/dist/rules/noUndefinedTypes.js.map +0 -1
  300. package/dist/rules/requireAsteriskPrefix.js +0 -112
  301. package/dist/rules/requireAsteriskPrefix.js.map +0 -1
  302. package/dist/rules/requireDescription.js +0 -95
  303. package/dist/rules/requireDescription.js.map +0 -1
  304. package/dist/rules/requireDescriptionCompleteSentence.js +0 -220
  305. package/dist/rules/requireDescriptionCompleteSentence.js.map +0 -1
  306. package/dist/rules/requireExample.js +0 -77
  307. package/dist/rules/requireExample.js.map +0 -1
  308. package/dist/rules/requireFileOverview.js +0 -81
  309. package/dist/rules/requireFileOverview.js.map +0 -1
  310. package/dist/rules/requireHyphenBeforeParamDescription.js +0 -89
  311. package/dist/rules/requireHyphenBeforeParamDescription.js.map +0 -1
  312. package/dist/rules/requireJsdoc.js +0 -404
  313. package/dist/rules/requireJsdoc.js.map +0 -1
  314. package/dist/rules/requireParam.js +0 -344
  315. package/dist/rules/requireParam.js.map +0 -1
  316. package/dist/rules/requireParamDescription.js +0 -59
  317. package/dist/rules/requireParamDescription.js.map +0 -1
  318. package/dist/rules/requireParamName.js +0 -36
  319. package/dist/rules/requireParamName.js.map +0 -1
  320. package/dist/rules/requireParamType.js +0 -59
  321. package/dist/rules/requireParamType.js.map +0 -1
  322. package/dist/rules/requireProperty.js +0 -35
  323. package/dist/rules/requireProperty.js.map +0 -1
  324. package/dist/rules/requirePropertyDescription.js +0 -21
  325. package/dist/rules/requirePropertyDescription.js.map +0 -1
  326. package/dist/rules/requirePropertyName.js +0 -21
  327. package/dist/rules/requirePropertyName.js.map +0 -1
  328. package/dist/rules/requirePropertyType.js +0 -21
  329. package/dist/rules/requirePropertyType.js.map +0 -1
  330. package/dist/rules/requireReturns.js +0 -131
  331. package/dist/rules/requireReturns.js.map +0 -1
  332. package/dist/rules/requireReturnsCheck.js +0 -66
  333. package/dist/rules/requireReturnsCheck.js.map +0 -1
  334. package/dist/rules/requireReturnsDescription.js +0 -43
  335. package/dist/rules/requireReturnsDescription.js.map +0 -1
  336. package/dist/rules/requireReturnsType.js +0 -36
  337. package/dist/rules/requireReturnsType.js.map +0 -1
  338. package/dist/rules/requireTemplate.js +0 -122
  339. package/dist/rules/requireTemplate.js.map +0 -1
  340. package/dist/rules/requireThrows.js +0 -67
  341. package/dist/rules/requireThrows.js.map +0 -1
  342. package/dist/rules/requireYields.js +0 -115
  343. package/dist/rules/requireYields.js.map +0 -1
  344. package/dist/rules/requireYieldsCheck.js +0 -105
  345. package/dist/rules/requireYieldsCheck.js.map +0 -1
  346. package/dist/rules/sortTags.js +0 -262
  347. package/dist/rules/sortTags.js.map +0 -1
  348. package/dist/rules/tagLines.js +0 -183
  349. package/dist/rules/tagLines.js.map +0 -1
  350. package/dist/rules/textEscaping.js +0 -102
  351. package/dist/rules/textEscaping.js.map +0 -1
  352. package/dist/rules/validTypes.js +0 -259
  353. package/dist/rules/validTypes.js.map +0 -1
  354. package/dist/tagNames.js +0 -144
  355. package/dist/tagNames.js.map +0 -1
  356. package/dist/utils/hasReturnValue.js +0 -265
  357. 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