eslint-plugin-jsdoc 53.0.1 → 54.1.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 +2007 -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 +391 -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 +559 -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 +41 -57
  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 +2542 -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 +545 -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 +744 -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,299 +0,0 @@
1
- import iterateJsdoc from "../iterateJsdoc.js";
2
- import { parse, stringify, traverse, tryParse } from "@es-joy/jsdoccomment";
3
-
4
- //#region src/rules/checkTypes.js
5
- const strictNativeTypes = [
6
- "undefined",
7
- "null",
8
- "boolean",
9
- "number",
10
- "bigint",
11
- "string",
12
- "symbol",
13
- "object",
14
- "Array",
15
- "Function",
16
- "Date",
17
- "RegExp"
18
- ];
19
- /**
20
- * Adjusts the parent type node `meta` for generic matches (or type node
21
- * `type` for `JsdocTypeAny`) and sets the type node `value`.
22
- * @param {string} type The actual type
23
- * @param {string} preferred The preferred type
24
- * @param {boolean} isGenericMatch
25
- * @param {string} typeNodeName
26
- * @param {import('jsdoc-type-pratt-parser').NonRootResult} node
27
- * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
28
- * @returns {void}
29
- */
30
- const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {
31
- let ret = preferred;
32
- if (isGenericMatch) {
33
- const parentMeta = parentNode.meta;
34
- if (preferred === "[]") {
35
- parentMeta.brackets = "square";
36
- parentMeta.dot = false;
37
- ret = "Array";
38
- } else {
39
- const dotBracketEnd = preferred.match(/\.(?:<>)?$/v);
40
- if (dotBracketEnd) {
41
- parentMeta.brackets = "angle";
42
- parentMeta.dot = true;
43
- ret = preferred.slice(0, -dotBracketEnd[0].length);
44
- } else {
45
- const bracketEnd = preferred.endsWith("<>");
46
- if (bracketEnd) {
47
- parentMeta.brackets = "angle";
48
- parentMeta.dot = false;
49
- ret = preferred.slice(0, -2);
50
- } else if (parentMeta?.brackets === "square" && (typeNodeName === "[]" || typeNodeName === "Array")) {
51
- parentMeta.brackets = "angle";
52
- parentMeta.dot = false;
53
- }
54
- }
55
- }
56
- } else if (type === "JsdocTypeAny") node.type = "JsdocTypeName";
57
- /** @type {import('jsdoc-type-pratt-parser').NameResult} */ node.value = ret.replace(/(?:\.|<>|\.<>|\[\])$/v, "");
58
- if (!ret)
59
- /** @type {import('jsdoc-type-pratt-parser').NameResult} */ node.value = typeNodeName;
60
- };
61
- /**
62
- * @param {boolean} [upperCase]
63
- * @returns {string}
64
- */
65
- const getMessage = (upperCase) => {
66
- return "Use object shorthand or index signatures instead of `" + (upperCase ? "O" : "o") + "bject`, e.g., `{[key: string]: string}`";
67
- };
68
- var checkTypes_default = iterateJsdoc(({ context, jsdocNode, report, settings, sourceCode, utils }) => {
69
- const jsdocTagsWithPossibleType = utils.filterTags((tag) => {
70
- return Boolean(utils.tagMightHaveTypePosition(tag.tag));
71
- });
72
- const { mode, preferredTypes: preferredTypesOriginal, structuredTags } = settings;
73
- const injectObjectPreferredTypes = !("Object" in preferredTypesOriginal || "object" in preferredTypesOriginal || "object.<>" in preferredTypesOriginal || "Object.<>" in preferredTypesOriginal || "object<>" in preferredTypesOriginal);
74
- /**
75
- * @type {{
76
- * message: string,
77
- * replacement: false
78
- * }}
79
- */
80
- const info = {
81
- message: getMessage(),
82
- replacement: false
83
- };
84
- /**
85
- * @type {{
86
- * message: string,
87
- * replacement: false
88
- * }}
89
- */
90
- const infoUC = {
91
- message: getMessage(true),
92
- replacement: false
93
- };
94
- /** @type {import('../iterateJsdoc.js').PreferredTypes} */
95
- const typeToInject = mode === "typescript" ? {
96
- Object: "object",
97
- "object.<>": info,
98
- "Object.<>": infoUC,
99
- "object<>": info,
100
- "Object<>": infoUC
101
- } : {
102
- Object: "object",
103
- "object.<>": "Object<>",
104
- "Object.<>": "Object<>",
105
- "object<>": "Object<>"
106
- };
107
- /** @type {import('../iterateJsdoc.js').PreferredTypes} */
108
- const preferredTypes = {
109
- ...injectObjectPreferredTypes ? typeToInject : {},
110
- ...preferredTypesOriginal
111
- };
112
- const { exemptTagContexts = [], noDefaults, unifyParentAndChildTypeChecks } = context.options[0] || {};
113
- /**
114
- * Gets information about the preferred type: whether there is a matching
115
- * preferred type, what the type is, and whether it is a match to a generic.
116
- * @param {string} _type Not currently in use
117
- * @param {string} typeNodeName
118
- * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
119
- * @param {string|undefined} property
120
- * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}
121
- */
122
- const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {
123
- let hasMatchingPreferredType = false;
124
- let isGenericMatch = false;
125
- let typeName = typeNodeName;
126
- const isNameOfGeneric = parentNode !== void 0 && parentNode.type === "JsdocTypeGeneric" && property === "left";
127
- if (unifyParentAndChildTypeChecks || isNameOfGeneric) {
128
- const brackets = parentNode?.meta?.brackets;
129
- const dot = parentNode?.meta?.dot;
130
- if (brackets === "angle") {
131
- const checkPostFixes = dot ? [".", ".<>"] : ["<>"];
132
- isGenericMatch = checkPostFixes.some((checkPostFix) => {
133
- if (preferredTypes?.[typeNodeName + checkPostFix] !== void 0) {
134
- typeName += checkPostFix;
135
- return true;
136
- }
137
- return false;
138
- });
139
- }
140
- if (!isGenericMatch && property && parentNode.type === "JsdocTypeGeneric") {
141
- const checkPostFixes = dot ? [".", ".<>"] : [brackets === "angle" ? "<>" : "[]"];
142
- isGenericMatch = checkPostFixes.some((checkPostFix) => {
143
- if (preferredTypes?.[checkPostFix] !== void 0) {
144
- typeName = checkPostFix;
145
- return true;
146
- }
147
- return false;
148
- });
149
- }
150
- }
151
- const directNameMatch = preferredTypes?.[typeNodeName] !== void 0 && !Object.values(preferredTypes).includes(typeNodeName);
152
- const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;
153
- isGenericMatch = isGenericMatch || Boolean(unifiedSyntaxParentMatch);
154
- hasMatchingPreferredType = isGenericMatch || directNameMatch && !property;
155
- return [
156
- hasMatchingPreferredType,
157
- typeName,
158
- isGenericMatch
159
- ];
160
- };
161
- /**
162
- * Iterates strict types to see if any should be added to `invalidTypes` (and
163
- * the the relevant strict type returned as the new preferred type).
164
- * @param {string} typeNodeName
165
- * @param {string|undefined} preferred
166
- * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
167
- * @param {(string|false|undefined)[][]} invalidTypes
168
- * @returns {string|undefined} The `preferred` type string, optionally changed
169
- */
170
- const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {
171
- let changedPreferred = preferred;
172
- for (const strictNativeType of strictNativeTypes) {
173
- if (strictNativeType === "object" && (!preferredTypes?.[typeNodeName] || parentNode?.elements?.length && parentNode?.left?.type === "JsdocTypeName" && parentNode?.left?.value === "Object")) continue;
174
- if (strictNativeType !== typeNodeName && strictNativeType.toLowerCase() === typeNodeName.toLowerCase() && (!preferredTypes || preferredTypes?.[strictNativeType] === void 0)) {
175
- changedPreferred = strictNativeType;
176
- invalidTypes.push([typeNodeName, changedPreferred]);
177
- break;
178
- }
179
- }
180
- return changedPreferred;
181
- };
182
- /**
183
- * Collect invalid type info.
184
- * @param {string} type
185
- * @param {string} value
186
- * @param {string} tagName
187
- * @param {string} nameInTag
188
- * @param {number} idx
189
- * @param {string|undefined} property
190
- * @param {import('jsdoc-type-pratt-parser').NonRootResult} node
191
- * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode
192
- * @param {(string|false|undefined)[][]} invalidTypes
193
- * @returns {void}
194
- */
195
- const getInvalidTypes = (type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes) => {
196
- let typeNodeName = type === "JsdocTypeAny" ? "*" : value;
197
- const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);
198
- let preferred;
199
- let types;
200
- if (hasMatchingPreferredType) {
201
- const preferredSetting = preferredTypes[typeName];
202
- typeNodeName = typeName === "[]" ? typeName : typeNodeName;
203
- if (!preferredSetting) invalidTypes.push([typeNodeName]);
204
- else if (typeof preferredSetting === "string") {
205
- preferred = preferredSetting;
206
- invalidTypes.push([typeNodeName, preferred]);
207
- } else if (preferredSetting && typeof preferredSetting === "object") {
208
- const nextItem = preferredSetting.skipRootChecking && jsdocTagsWithPossibleType[idx + 1];
209
- if (!nextItem || !nextItem.name.startsWith(`${nameInTag}.`)) {
210
- preferred = preferredSetting.replacement;
211
- invalidTypes.push([
212
- typeNodeName,
213
- preferred,
214
- preferredSetting.message
215
- ]);
216
- }
217
- } else {
218
- utils.reportSettings("Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.");
219
- return;
220
- }
221
- } else if (Object.entries(structuredTags).some(([tag, { type: typs }]) => {
222
- types = typs;
223
- return tag === tagName && Array.isArray(types) && !types.includes(typeNodeName);
224
- })) invalidTypes.push([typeNodeName, types]);
225
- else if (!noDefaults && type === "JsdocTypeName") preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);
226
- if (preferred) adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);
227
- };
228
- for (const [idx, jsdocTag] of jsdocTagsWithPossibleType.entries()) {
229
- /** @type {(string|false|undefined)[][]} */
230
- const invalidTypes = [];
231
- let typeAst;
232
- try {
233
- typeAst = mode === "permissive" ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);
234
- } catch {
235
- continue;
236
- }
237
- const { name: nameInTag, tag: tagName } = jsdocTag;
238
- traverse(typeAst, (node, parentNode, property) => {
239
- const { type, value } = node;
240
- if (!["JsdocTypeAny", "JsdocTypeName"].includes(type)) return;
241
- getInvalidTypes(type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes);
242
- });
243
- if (invalidTypes.length) {
244
- const fixedType = stringify(typeAst);
245
- /**
246
- * @type {import('eslint').Rule.ReportFixer}
247
- */
248
- const fix = (fixer) => {
249
- return fixer.replaceText(jsdocNode, sourceCode.getText(jsdocNode).replace(`{${jsdocTag.type}}`, `{${fixedType}}`));
250
- };
251
- for (const [badType, preferredType = "", msg] of invalidTypes) {
252
- const tagValue = jsdocTag.name ? ` "${jsdocTag.name}"` : "";
253
- if (exemptTagContexts.some(({ tag, types }) => {
254
- return tag === tagName && (types === true || types.includes(jsdocTag.type));
255
- })) continue;
256
- report(msg || `Invalid JSDoc @${tagName}${tagValue} type "${badType}"` + (preferredType ? "; " : ".") + (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ""), preferredType ? fix : null, jsdocTag, msg ? {
257
- tagName,
258
- tagValue
259
- } : void 0);
260
- }
261
- }
262
- }
263
- }, {
264
- iterateAllJsdocs: true,
265
- meta: {
266
- docs: {
267
- description: "Reports invalid types.",
268
- url: "https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-types.md#repos-sticky-header"
269
- },
270
- fixable: "code",
271
- schema: [{
272
- additionalProperties: false,
273
- properties: {
274
- exemptTagContexts: {
275
- items: {
276
- additionalProperties: false,
277
- properties: {
278
- tag: { type: "string" },
279
- types: { oneOf: [{ type: "boolean" }, {
280
- items: { type: "string" },
281
- type: "array"
282
- }] }
283
- },
284
- type: "object"
285
- },
286
- type: "array"
287
- },
288
- noDefaults: { type: "boolean" },
289
- unifyParentAndChildTypeChecks: { type: "boolean" }
290
- },
291
- type: "object"
292
- }],
293
- type: "suggestion"
294
- }
295
- });
296
-
297
- //#endregion
298
- export { checkTypes_default as default };
299
- //# sourceMappingURL=checkTypes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkTypes.js","names":[],"sources":["../../src/rules/checkTypes.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse,\n stringify,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\n/**\n * Adjusts the parent type node `meta` for generic matches (or type node\n * `type` for `JsdocTypeAny`) and sets the type node `value`.\n * @param {string} type The actual type\n * @param {string} preferred The preferred type\n * @param {boolean} isGenericMatch\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser').NonRootResult} node\n * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode\n * @returns {void}\n */\nconst adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n const parentMeta = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (\n parentNode\n ).meta;\n if (preferred === '[]') {\n parentMeta.brackets = 'square';\n parentMeta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/v);\n if (dotBracketEnd) {\n parentMeta.brackets = 'angle';\n parentMeta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentMeta.brackets = 'angle';\n parentMeta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentMeta?.brackets === 'square' &&\n (typeNodeName === '[]' || typeNodeName === 'Array')\n ) {\n parentMeta.brackets = 'angle';\n parentMeta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n node\n ).value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (\n node\n ).value = typeNodeName;\n }\n};\n\n/**\n * @param {boolean} [upperCase]\n * @returns {string}\n */\nconst getMessage = (upperCase) => {\n return 'Use object shorthand or index signatures instead of ' +\n '`' + (upperCase ? 'O' : 'o') + 'bject`, e.g., `{[key: string]: string}`';\n};\n\nexport default iterateJsdoc(({\n context,\n jsdocNode,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return Boolean(utils.tagMightHaveTypePosition(tag.tag));\n });\n\n const\n /**\n * @type {{\n * preferredTypes: import('../iterateJsdoc.js').PreferredTypes,\n * structuredTags: import('../iterateJsdoc.js').StructuredTags,\n * mode: import('../jsdocUtils.js').ParserMode\n * }}\n */\n {\n mode,\n preferredTypes: preferredTypesOriginal,\n structuredTags,\n } = settings;\n\n const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal ||\n 'object' in preferredTypesOriginal ||\n 'object.<>' in preferredTypesOriginal ||\n 'Object.<>' in preferredTypesOriginal ||\n 'object<>' in preferredTypesOriginal);\n\n /**\n * @type {{\n * message: string,\n * replacement: false\n * }}\n */\n const info = {\n message: getMessage(),\n replacement: false,\n };\n\n /**\n * @type {{\n * message: string,\n * replacement: false\n * }}\n */\n const infoUC = {\n message: getMessage(true),\n replacement: false,\n };\n\n /** @type {import('../iterateJsdoc.js').PreferredTypes} */\n const typeToInject = mode === 'typescript' ?\n {\n Object: 'object',\n 'object.<>': info,\n 'Object.<>': infoUC,\n 'object<>': info,\n 'Object<>': infoUC,\n } :\n {\n Object: 'object',\n 'object.<>': 'Object<>',\n 'Object.<>': 'Object<>',\n 'object<>': 'Object<>',\n };\n\n /** @type {import('../iterateJsdoc.js').PreferredTypes} */\n const preferredTypes = {\n ...injectObjectPreferredTypes ?\n typeToInject :\n {},\n ...preferredTypesOriginal,\n };\n\n const\n /**\n * @type {{\n * noDefaults: boolean,\n * unifyParentAndChildTypeChecks: boolean,\n * exemptTagContexts: ({\n * tag: string,\n * types: true|string[]\n * })[]\n * }}\n */ {\n exemptTagContexts = [],\n noDefaults,\n unifyParentAndChildTypeChecks,\n } = context.options[0] || {};\n\n /**\n * Gets information about the preferred type: whether there is a matching\n * preferred type, what the type is, and whether it is a match to a generic.\n * @param {string} _type Not currently in use\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode\n * @param {string|undefined} property\n * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}\n */\n const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {\n let hasMatchingPreferredType = false;\n let isGenericMatch = false;\n let typeName = typeNodeName;\n\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (\n parentNode\n )?.meta?.brackets;\n const dot = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (\n parentNode\n )?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[typeNodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (\n !isGenericMatch && property &&\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult} */ (\n parentNode\n ).type === 'JsdocTypeGeneric'\n ) {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[typeNodeName] !== undefined &&\n !Object.values(preferredTypes).includes(typeNodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || Boolean(unifiedSyntaxParentMatch);\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n /**\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n * @param {string} typeNodeName\n * @param {string|undefined} preferred\n * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode\n * @param {(string|false|undefined)[][]} invalidTypes\n * @returns {string|undefined} The `preferred` type string, optionally changed\n */\n const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n strictNativeType === 'object' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (\n parentNode\n )?.elements?.length && (\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (\n parentNode\n )?.left?.type === 'JsdocTypeName' &&\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (parentNode)?.left?.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n };\n\n /**\n * Collect invalid type info.\n * @param {string} type\n * @param {string} value\n * @param {string} tagName\n * @param {string} nameInTag\n * @param {number} idx\n * @param {string|undefined} property\n * @param {import('jsdoc-type-pratt-parser').NonRootResult} node\n * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode\n * @param {(string|false|undefined)[][]} invalidTypes\n * @returns {void}\n */\n const getInvalidTypes = (type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes) => {\n let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n typeNodeName = typeName === '[]' ? typeName : typeNodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n typeNodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n typeNodeName, preferred,\n ]);\n } else if (preferredSetting && typeof preferredSetting === 'object') {\n const nextItem = preferredSetting.skipRootChecking && jsdocTagsWithPossibleType[idx + 1];\n\n if (!nextItem || !nextItem.name.startsWith(`${nameInTag}.`)) {\n preferred = preferredSetting.replacement;\n invalidTypes.push([\n typeNodeName,\n preferred,\n preferredSetting.message,\n ]);\n }\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(typeNodeName);\n })) {\n invalidTypes.push([\n typeNodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);\n }\n };\n\n for (const [\n idx,\n jsdocTag,\n ] of jsdocTagsWithPossibleType.entries()) {\n /** @type {(string|false|undefined)[][]} */\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const {\n name: nameInTag,\n tag: tagName,\n } = jsdocTag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult}\n */ (node);\n if (![\n 'JsdocTypeAny', 'JsdocTypeName',\n ].includes(type)) {\n return;\n }\n\n getInvalidTypes(type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes);\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n /**\n * @type {import('eslint').Rule.ReportFixer}\n */\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n for (const [\n badType,\n preferredType = '',\n msg,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n msg ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n msg ? {\n tagName,\n tagValue,\n } : undefined,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-types.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;AAQA,MAAM,oBAAoB;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;;;;;;;;;;;;AAaD,MAAM,cAAc,CAAC,MAAM,WAAW,gBAAgB,cAAc,MAAM,eAAe;CACvF,IAAI,MAAM;AACV,KAAI,gBAAgB;EAClB,MAAM,aACJ,WACA;AACF,MAAI,cAAc,MAAM;GACtB,WAAW,WAAW;GACtB,WAAW,MAAM;GACjB,MAAM;EACP,OAAM;GACL,MAAM,gBAAgB,UAAU,MAAM,cAAc;AACpD,OAAI,eAAe;IACjB,WAAW,WAAW;IACtB,WAAW,MAAM;IACjB,MAAM,UAAU,MAAM,GAAG,CAAC,cAAc,GAAG,OAAO;GACnD,OAAM;IACL,MAAM,aAAa,UAAU,SAAS,KAAK;AAC3C,QAAI,YAAY;KACd,WAAW,WAAW;KACtB,WAAW,MAAM;KACjB,MAAM,UAAU,MAAM,GAAG,GAAG;IAC7B,WACC,YAAY,aAAa,aACxB,iBAAiB,QAAQ,iBAAiB,UAC3C;KACA,WAAW,WAAW;KACtB,WAAW,MAAM;IAClB;GACF;EACF;CACF,WAAU,SAAS,gBAClB,KAAK,OAAO;6DAIZ,KACA,QAAQ,IAAI,QAAQ,yBAAyB,GAAG;AAGlD,KAAI,CAAC;6DAED,KACA,QAAQ;AAEb;;;;;AAMD,MAAM,aAAa,CAAC,cAAc;AAChC,QAAO,2DACA,YAAY,MAAM,OAAO;AACjC;AAED,yBAAe,aAAa,CAAC,EAC3B,SACA,WACA,QACA,UACA,YACA,OACD,KAAK;CACJ,MAAM,4BAA4B,MAAM,WAAW,CAAC,QAAQ;AAC1D,SAAO,QAAQ,MAAM,yBAAyB,IAAI,IAAI,CAAC;CACxD,EAAC;CAEF,MAQE,EACE,MACA,gBAAgB,wBAChB,gBACD,GAAG;CAEN,MAAM,6BAA6B,EAAE,YAAY,0BAC/C,YAAY,0BACZ,eAAe,0BACf,eAAe,0BACf,cAAc;;;;;;;CAQhB,MAAM,OAAO;EACX,SAAS,YAAY;EACrB,aAAa;CACd;;;;;;;CAQD,MAAM,SAAS;EACb,SAAS,WAAW,KAAK;EACzB,aAAa;CACd;;CAGD,MAAM,eAAe,SAAS,eAC5B;EACE,QAAQ;EACR,aAAa;EACb,aAAa;EACb,YAAY;EACZ,YAAY;CACb,IACD;EACE,QAAQ;EACR,aAAa;EACb,aAAa;EACb,YAAY;CACb;;CAGH,MAAM,iBAAiB;EACrB,GAAG,6BACD,eACA,CAAE;EACJ,GAAG;CACJ;CAED,MAUM,EACF,oBAAoB,CAAE,GACtB,YACA,+BACD,GAAG,QAAQ,QAAQ,MAAM,CAAE;;;;;;;;;;CAW9B,MAAM,uBAAuB,CAAC,OAAO,cAAc,YAAY,aAAa;EAC1E,IAAI,2BAA2B;EAC/B,IAAI,iBAAiB;EACrB,IAAI,WAAW;EAEf,MAAM,kBAAkB,eAAe,UAAa,WAAW,SAAS,sBAAsB,aAAa;AAC3G,MAAI,iCAAiC,iBAAiB;GACpD,MAAM,WACJ,YACC,MAAM;GACT,MAAM,MACJ,YACC,MAAM;AAET,OAAI,aAAa,SAAS;IACxB,MAAM,iBAAiB,MAAM,CAC3B,KAAK,KACN,IAAG,CACF,IACD;IACD,iBAAiB,eAAe,KAAK,CAAC,iBAAiB;AACrD,SAAI,iBAAiB,eAAe,kBAAkB,QAAW;MAC/D,YAAY;AAEZ,aAAO;KACR;AAED,YAAO;IACR,EAAC;GACH;AAED,OACE,CAAC,kBAAkB,YAEjB,WACA,SAAS,oBACX;IACA,MAAM,iBAAiB,MAAM,CAC3B,KAAK,KACN,IAAG,CACF,aAAa,UAAU,OAAO,IAC/B;IAED,iBAAiB,eAAe,KAAK,CAAC,iBAAiB;AACrD,SAAI,iBAAiB,kBAAkB,QAAW;MAChD,WAAW;AAEX,aAAO;KACR;AAED,YAAO;IACR,EAAC;GACH;EACF;EAED,MAAM,kBAAkB,iBAAiB,kBAAkB,UACzD,CAAC,OAAO,OAAO,eAAe,CAAC,SAAS,aAAa;EACvD,MAAM,2BAA2B,YAAY,mBAAmB;EAChE,iBAAiB,kBAAkB,QAAQ,yBAAyB;EAEpE,2BAA2B,kBACzB,mBAAmB,CAAC;AAEtB,SAAO;GACL;GAA0B;GAAU;EACrC;CACF;;;;;;;;;;CAWD,MAAM,mBAAmB,CAAC,cAAc,WAAW,YAAY,iBAAiB;EAC9E,IAAI,mBAAmB;AACvB,OAAK,MAAM,oBAAoB,mBAAmB;AAChD,OACE,qBAAqB,aAInB,CAAC,iBAAiB,iBAShB,YACC,UAAU,UAKT,YACC,MAAM,SAAS,mBAIjB,YAAa,MAAM,UAAU,UAIlC;AAGF,OAAI,qBAAqB,gBACvB,iBAAiB,aAAa,KAAK,aAAa,aAAa,KAG5D,CAAC,kBAAkB,iBAAiB,sBAAsB,SAC3D;IACA,mBAAmB;IACnB,aAAa,KAAK,CAChB,cAAc,gBACf,EAAC;AACF;GACD;EACF;AAED,SAAO;CACR;;;;;;;;;;;;;;CAeD,MAAM,kBAAkB,CAAC,MAAM,OAAO,SAAS,WAAW,KAAK,UAAU,MAAM,YAAY,iBAAiB;EAC1G,IAAI,eAAe,SAAS,iBAAiB,MAAM;EAEnD,MAAM,CACJ,0BACA,UACA,eACD,GAAG,qBAAqB,MAAM,cAAc,YAAY,SAAS;EAElE,IAAI;EACJ,IAAI;AACJ,MAAI,0BAA0B;GAC5B,MAAM,mBAAmB,eAAe;GACxC,eAAe,aAAa,OAAO,WAAW;AAE9C,OAAI,CAAC,kBACH,aAAa,KAAK,CAChB,YACD,EAAC;YACO,OAAO,qBAAqB,UAAU;IAC/C,YAAY;IACZ,aAAa,KAAK,CAChB,cAAc,SACf,EAAC;GACH,WAAU,oBAAoB,OAAO,qBAAqB,UAAU;IACnE,MAAM,WAAW,iBAAiB,oBAAoB,0BAA0B,MAAM;AAEtF,QAAI,CAAC,YAAY,CAAC,SAAS,KAAK,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE;KAC3D,YAAY,iBAAiB;KAC7B,aAAa,KAAK;MAChB;MACA;MACA,iBAAiB;KAClB,EAAC;IACH;GACF,OAAM;IACL,MAAM,eACJ,yFACD;AAED;GACD;EACF,WAAU,OAAO,QAAQ,eAAe,CAAC,KAAK,CAAC,CAC9C,KACA,EACE,MAAM,MACP,CACF,KAAK;GACJ,QAAQ;AAER,UAAO,QAAQ,WACb,MAAM,QAAQ,MAAM,IACpB,CAAC,MAAM,SAAS,aAAa;EAChC,EAAC,EACA,aAAa,KAAK,CAChB,cAAc,KACf,EAAC;WACO,CAAC,cAAc,SAAS,iBACjC,YAAY,iBAAiB,cAAc,WAAW,YAAY,aAAa;AAIjF,MAAI,WACF,YAAY,MAAM,WAAW,gBAAgB,cAAc,MAAM,WAAW;CAE/E;AAED,MAAK,MAAM,CACT,KACA,SACD,IAAI,0BAA0B,SAAS,EAAE;;EAExC,MAAM,eAAe,CAAE;EACvB,IAAI;AAEJ,MAAI;GACF,UAAU,SAAS,eAAe,SAAS,SAAS,KAAK,GAAG,MAAM,SAAS,MAAM,KAAK;EACvF,QAAO;AACN;EACD;EAED,MAAM,EACJ,MAAM,WACN,KAAK,SACN,GAAG;EAEJ,SAAS,SAAS,CAAC,MAAM,YAAY,aAAa;GAChD,MAAM,EACJ,MACA,OACD,GAGM;AACP,OAAI,CAAC,CACH,gBAAgB,eACjB,EAAC,SAAS,KAAK,CACd;GAGF,gBAAgB,MAAM,OAAO,SAAS,WAAW,KAAK,UAAU,MAAM,YAAY,aAAa;EAChG,EAAC;AAEF,MAAI,aAAa,QAAQ;GACvB,MAAM,YAAY,UAAU,QAAQ;;;;GAKpC,MAAM,MAAM,CAAC,UAAU;AACrB,WAAO,MAAM,YACX,WACA,WAAW,QAAQ,UAAU,CAAC,QAC5B,CAAC,CAAC,EAAE,SAAS,KAAK,CAAC,CAAC,EACpB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CACjB,CACF;GACF;AAED,QAAK,MAAM,CACT,SACA,gBAAgB,IAChB,IACD,IAAI,cAAc;IACjB,MAAM,WAAW,SAAS,OAAO,CAAC,EAAE,EAAE,SAAS,KAAK,CAAC,CAAC,GAAG;AACzD,QAAI,kBAAkB,KAAK,CAAC,EAC1B,KACA,OACD,KAAK;AACJ,YAAO,QAAQ,YACZ,UAAU,QAAQ,MAAM,SAAS,SAAS,KAAK;IACnD,EAAC,CACA;IAGF,OACE,OACE,CAAC,eAAe,EAAE,UAAU,SAAS,OAAO,EAAE,QAAQ,CAAC,CAAC,IACvD,gBAAgB,OAAO,QACvB,gBAAgB,CAAC,QAAQ,EAAE,KAAK,UAAU,cAAc,CAAC,CAAC,CAAC,GAAG,KACjE,gBAAgB,MAAM,MACtB,UACA,MAAM;KACJ;KACA;IACD,IAAG,OACL;GACF;EACF;CACF;AACF,GAAE;CACD,kBAAkB;CAClB,MAAM;EACJ,MAAM;GACJ,aAAa;GACb,KAAK;EACN;EACD,SAAS;EACT,QAAQ,CACN;GACE,sBAAsB;GACtB,YAAY;IACV,mBAAmB;KACjB,OAAO;MACL,sBAAsB;MACtB,YAAY;OACV,KAAK,EACH,MAAM,SACP;OACD,OAAO,EACL,OAAO,CACL,EACE,MAAM,UACP,GACD;QACE,OAAO,EACL,MAAM,SACP;QACD,MAAM;OACP,CACF,EACF;MACF;MACD,MAAM;KACP;KACD,MAAM;IACP;IACD,YAAY,EACV,MAAM,UACP;IACD,+BAA+B,EAC7B,MAAM,UACP;GACF;GACD,MAAM;EACP,CACF;EACD,MAAM;CACP;AACF,EAAC"}
@@ -1,103 +0,0 @@
1
- import iterateJsdoc from "../iterateJsdoc.js";
2
- import semver from "semver";
3
- import { parseImportsExports } from "parse-imports-exports";
4
- import spdxExpressionParse from "spdx-expression-parse";
5
-
6
- //#region src/rules/checkValues.js
7
- const allowedKinds = new Set([
8
- "class",
9
- "constant",
10
- "event",
11
- "external",
12
- "file",
13
- "function",
14
- "member",
15
- "mixin",
16
- "module",
17
- "namespace",
18
- "typedef"
19
- ]);
20
- var checkValues_default = iterateJsdoc(({ context, report, settings, utils }) => {
21
- const options = context.options[0] || {};
22
- const { allowedAuthors = null, allowedLicenses = null, licensePattern = "/([^\n\r]*)/gv", numericOnlyVariation = false } = options;
23
- utils.forEachPreferredTag("version", (jsdocParameter, targetTagName) => {
24
- const version = utils.getTagDescription(jsdocParameter).trim();
25
- if (!version) report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter);
26
- else if (!semver.valid(version)) report(`Invalid JSDoc @${targetTagName}: "${utils.getTagDescription(jsdocParameter)}".`, null, jsdocParameter);
27
- });
28
- utils.forEachPreferredTag("kind", (jsdocParameter, targetTagName) => {
29
- const kind = utils.getTagDescription(jsdocParameter).trim();
30
- if (!kind) report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter);
31
- else if (!allowedKinds.has(kind)) report(`Invalid JSDoc @${targetTagName}: "${utils.getTagDescription(jsdocParameter)}"; must be one of: ${[...allowedKinds].join(", ")}.`, null, jsdocParameter);
32
- });
33
- if (numericOnlyVariation) utils.forEachPreferredTag("variation", (jsdocParameter, targetTagName) => {
34
- const variation = utils.getTagDescription(jsdocParameter).trim();
35
- if (!variation) report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter);
36
- else if (!Number.isInteger(Number(variation)) || Number(variation) <= 0) report(`Invalid JSDoc @${targetTagName}: "${utils.getTagDescription(jsdocParameter)}".`, null, jsdocParameter);
37
- });
38
- utils.forEachPreferredTag("since", (jsdocParameter, targetTagName) => {
39
- const version = utils.getTagDescription(jsdocParameter).trim();
40
- if (!version) report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter);
41
- else if (!semver.valid(version)) report(`Invalid JSDoc @${targetTagName}: "${utils.getTagDescription(jsdocParameter)}".`, null, jsdocParameter);
42
- });
43
- utils.forEachPreferredTag("license", (jsdocParameter, targetTagName) => {
44
- const licenseRegex = utils.getRegexFromString(licensePattern, "g");
45
- const matches = utils.getTagDescription(jsdocParameter).matchAll(licenseRegex);
46
- let positiveMatch = false;
47
- for (const match of matches) {
48
- const license = match[1] || match[0];
49
- if (license) positiveMatch = true;
50
- if (!license.trim()) {
51
- if (positiveMatch) return;
52
- report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter);
53
- } else if (allowedLicenses) {
54
- if (allowedLicenses !== true && !allowedLicenses.includes(license)) report(`Invalid JSDoc @${targetTagName}: "${license}"; expected one of ${allowedLicenses.join(", ")}.`, null, jsdocParameter);
55
- } else try {
56
- spdxExpressionParse(license);
57
- } catch {
58
- report(`Invalid JSDoc @${targetTagName}: "${license}"; expected SPDX expression: https://spdx.org/licenses/.`, null, jsdocParameter);
59
- }
60
- }
61
- });
62
- if (settings.mode === "typescript") utils.forEachPreferredTag("import", (tag) => {
63
- const { description, name, type } = tag;
64
- const typePart = type ? `{${type}} ` : "";
65
- const imprt = "import " + (description ? `${typePart}${name} ${description}` : `${typePart}${name}`);
66
- const importsExports = parseImportsExports(imprt.trim());
67
- if (importsExports.errors) report("Bad @import tag", null, tag);
68
- });
69
- utils.forEachPreferredTag("author", (jsdocParameter, targetTagName) => {
70
- const author = utils.getTagDescription(jsdocParameter).trim();
71
- if (!author) report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter);
72
- else if (allowedAuthors && !allowedAuthors.includes(author)) report(`Invalid JSDoc @${targetTagName}: "${utils.getTagDescription(jsdocParameter)}"; expected one of ${allowedAuthors.join(", ")}.`, null, jsdocParameter);
73
- });
74
- }, {
75
- iterateAllJsdocs: true,
76
- meta: {
77
- docs: {
78
- description: "This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`.",
79
- url: "https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-values.md#repos-sticky-header"
80
- },
81
- schema: [{
82
- additionalProperties: false,
83
- properties: {
84
- allowedAuthors: {
85
- items: { type: "string" },
86
- type: "array"
87
- },
88
- allowedLicenses: { anyOf: [{
89
- items: { type: "string" },
90
- type: "array"
91
- }, { type: "boolean" }] },
92
- licensePattern: { type: "string" },
93
- numericOnlyVariation: { type: "boolean" }
94
- },
95
- type: "object"
96
- }],
97
- type: "suggestion"
98
- }
99
- });
100
-
101
- //#endregion
102
- export { checkValues_default as default };
103
- //# sourceMappingURL=checkValues.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkValues.js","names":[],"sources":["../../src/rules/checkValues.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\nimport semver from 'semver';\nimport spdxExpressionParse from 'spdx-expression-parse';\n\nconst allowedKinds = new Set([\n 'class',\n 'constant',\n 'event',\n 'external',\n 'file',\n 'function',\n 'member',\n 'mixin',\n 'module',\n 'namespace',\n 'typedef',\n]);\n\nexport default iterateJsdoc(({\n context,\n report,\n settings,\n utils,\n}) => {\n const options = context.options[0] || {};\n const {\n allowedAuthors = null,\n allowedLicenses = null,\n licensePattern = '/([^\\n\\r]*)/gv',\n numericOnlyVariation = false,\n } = options;\n\n utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n\n utils.forEachPreferredTag('kind', (jsdocParameter, targetTagName) => {\n const kind = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!kind) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!allowedKinds.has(kind)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; ` +\n `must be one of: ${[\n ...allowedKinds,\n ].join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n\n if (numericOnlyVariation) {\n utils.forEachPreferredTag('variation', (jsdocParameter, targetTagName) => {\n const variation = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!variation) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (\n !Number.isInteger(Number(variation)) ||\n Number(variation) <= 0\n ) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('since', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n utils.forEachPreferredTag('license', (jsdocParameter, targetTagName) => {\n const licenseRegex = utils.getRegexFromString(licensePattern, 'g');\n const matches = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).matchAll(licenseRegex);\n let positiveMatch = false;\n for (const match of matches) {\n const license = match[1] || match[0];\n if (license) {\n positiveMatch = true;\n }\n\n if (!license.trim()) {\n // Avoid reporting again as empty match\n if (positiveMatch) {\n return;\n }\n\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedLicenses) {\n if (allowedLicenses !== true && !allowedLicenses.includes(license)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected one of ${allowedLicenses.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n } else {\n try {\n spdxExpressionParse(license);\n } catch {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected SPDX expression: https://spdx.org/licenses/.`,\n null,\n jsdocParameter,\n );\n }\n }\n }\n });\n\n if (settings.mode === 'typescript') {\n utils.forEachPreferredTag('import', (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 if (importsExports.errors) {\n report(\n 'Bad @import tag',\n null,\n tag,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('author', (jsdocParameter, targetTagName) => {\n const author = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!author) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedAuthors && !allowedAuthors.includes(author)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; expected one of ${allowedAuthors.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-values.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedAuthors: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n allowedLicenses: {\n anyOf: [\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n {\n type: 'boolean',\n },\n ],\n },\n licensePattern: {\n type: 'string',\n },\n numericOnlyVariation: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}