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
@@ -0,0 +1,969 @@
1
+ /**
2
+ * @typedef {Map<string, Map<string, (string|boolean)>>} TagStructure
3
+ */
4
+ /**
5
+ * @param {import('./jsdocUtils.js').ParserMode} mode
6
+ * @returns {TagStructure}
7
+ */
8
+ const getDefaultTagStructureForMode = (mode) => {
9
+ const isJsdoc = mode === 'jsdoc';
10
+ const isClosure = mode === 'closure';
11
+ const isTypescript = mode === 'typescript';
12
+ const isPermissive = mode === 'permissive';
13
+
14
+ const isJsdocOrPermissive = isJsdoc || isPermissive;
15
+ const isJsdocOrTypescript = isJsdoc || isTypescript;
16
+ const isTypescriptOrClosure = isTypescript || isClosure;
17
+ const isClosureOrPermissive = isClosure || isPermissive;
18
+ const isJsdocTypescriptOrPermissive = isJsdocOrTypescript || isPermissive;
19
+
20
+ // Properties:
21
+ // `namepathRole` - 'namepath-referencing'|'namepath-defining'|'namepath-or-url-referencing'|'text'|false
22
+ // `typeAllowed` - boolean
23
+ // `nameRequired` - boolean
24
+ // `typeRequired` - boolean
25
+ // `typeOrNameRequired` - boolean
26
+
27
+ // All of `typeAllowed` have a signature with "type" except for
28
+ // `augments`/`extends` ("namepath")
29
+ // `param`/`arg`/`argument` (no signature)
30
+ // `property`/`prop` (no signature)
31
+ // `modifies` (undocumented)
32
+
33
+ // None of the `namepathRole: 'namepath-defining'` show as having curly
34
+ // brackets for their name/namepath
35
+
36
+ // Among `namepath-defining` and `namepath-referencing`, these do not seem
37
+ // to allow curly brackets in their doc signature or examples (`modifies`
38
+ // references namepaths within its type brackets and `param` is
39
+ // name-defining but not namepath-defining, so not part of these groups)
40
+
41
+ // Todo: Should support special processing for "name" as distinct from
42
+ // "namepath" (e.g., param can't define a namepath)
43
+
44
+ // Todo: Should support a `tutorialID` type (for `@tutorial` block and
45
+ // inline)
46
+
47
+ /**
48
+ * @type {TagStructure}
49
+ */
50
+ return new Map([
51
+ [
52
+ 'alias', new Map(/** @type {[string, string|boolean][]} */ ([
53
+ // Signature seems to require a "namepath" (and no counter-examples)
54
+ [
55
+ 'namepathRole', 'namepath-defining',
56
+ ],
57
+
58
+ // "namepath"
59
+ [
60
+ 'typeOrNameRequired', true,
61
+ ],
62
+ ])),
63
+ ],
64
+
65
+ [
66
+ 'arg', new Map(/** @type {[string, string|boolean][]} */ ([
67
+ [
68
+ 'namepathRole', 'namepath-defining',
69
+ ],
70
+
71
+ // See `param`
72
+ [
73
+ 'nameRequired', true,
74
+ ],
75
+
76
+ // Has no formal signature in the docs but shows curly brackets
77
+ // in the examples
78
+ [
79
+ 'typeAllowed', true,
80
+ ],
81
+ ])),
82
+ ],
83
+
84
+ [
85
+ 'argument', new Map(/** @type {[string, string|boolean][]} */ ([
86
+ [
87
+ 'namepathRole', 'namepath-defining',
88
+ ],
89
+
90
+ // See `param`
91
+ [
92
+ 'nameRequired', true,
93
+ ],
94
+
95
+ // Has no formal signature in the docs but shows curly brackets
96
+ // in the examples
97
+ [
98
+ 'typeAllowed', true,
99
+ ],
100
+ ])),
101
+ ],
102
+
103
+ [
104
+ 'augments', new Map(/** @type {[string, string|boolean][]} */ ([
105
+ // Signature seems to require a "namepath" (and no counter-examples)
106
+ [
107
+ 'namepathRole', 'namepath-referencing',
108
+ ],
109
+
110
+ // Does not show curly brackets in either the signature or examples
111
+ [
112
+ 'typeAllowed', true,
113
+ ],
114
+
115
+ // "namepath"
116
+ [
117
+ 'typeOrNameRequired', true,
118
+ ],
119
+ ])),
120
+ ],
121
+
122
+ [
123
+ 'borrows', new Map(/** @type {[string, string|boolean][]} */ ([
124
+ // `borrows` has a different format, however, so needs special parsing;
125
+ // seems to require both, and as "namepath"'s
126
+ [
127
+ 'namepathRole', 'namepath-referencing',
128
+ ],
129
+
130
+ // "namepath"
131
+ [
132
+ 'typeOrNameRequired', true,
133
+ ],
134
+ ])),
135
+ ],
136
+
137
+ [
138
+ 'callback', new Map(/** @type {[string, string|boolean][]} */ ([
139
+ // Seems to require a "namepath" in the signature (with no
140
+ // counter-examples); TypeScript does not enforce but seems
141
+ // problematic as not attached so presumably not useable without it
142
+ [
143
+ 'namepathRole', 'namepath-defining',
144
+ ],
145
+
146
+ // "namepath"
147
+ [
148
+ 'nameRequired', true,
149
+ ],
150
+ ])),
151
+ ],
152
+
153
+ [
154
+ 'class', new Map(/** @type {[string, string|boolean][]} */ ([
155
+ // Not in use, but should be this value if using to power `empty-tags`
156
+ [
157
+ 'nameAllowed', true,
158
+ ],
159
+
160
+ // Allows for "name"'s in signature, but indicated as optional
161
+ [
162
+ 'namepathRole', 'namepath-defining',
163
+ ],
164
+
165
+ [
166
+ 'typeAllowed', true,
167
+ ],
168
+ ])),
169
+ ],
170
+
171
+ [
172
+ 'const', new Map(/** @type {[string, string|boolean][]} */ ([
173
+ // Allows for "name"'s in signature, but indicated as optional
174
+ [
175
+ 'namepathRole', 'namepath-defining',
176
+ ],
177
+
178
+ [
179
+ 'typeAllowed', true,
180
+ ],
181
+ ])),
182
+ ],
183
+ [
184
+ 'constant', new Map(/** @type {[string, string|boolean][]} */ ([
185
+ // Allows for "name"'s in signature, but indicated as optional
186
+ [
187
+ 'namepathRole', 'namepath-defining',
188
+ ],
189
+
190
+ [
191
+ 'typeAllowed', true,
192
+ ],
193
+ ])),
194
+ ],
195
+ [
196
+ 'constructor', new Map(/** @type {[string, string|boolean][]} */ ([
197
+ // Allows for "name"'s in signature, but indicated as optional
198
+ [
199
+ 'namepathRole', 'namepath-defining',
200
+ ],
201
+
202
+ [
203
+ 'typeAllowed', true,
204
+ ],
205
+ ])),
206
+ ],
207
+
208
+ [
209
+ 'constructs', new Map(/** @type {[string, string|boolean][]} */ ([
210
+ // Allows for "name"'s in signature, but indicated as optional
211
+ [
212
+ 'namepathRole', 'namepath-defining',
213
+ ],
214
+
215
+ [
216
+ 'nameRequired', false,
217
+ ],
218
+
219
+ [
220
+ 'typeAllowed', false,
221
+ ],
222
+ ])),
223
+ ],
224
+
225
+ [
226
+ 'define', new Map(/** @type {[string, string|boolean][]} */ ([
227
+ [
228
+ 'typeRequired', isClosure,
229
+ ],
230
+ ])),
231
+ ],
232
+
233
+ [
234
+ 'emits', new Map(/** @type {[string, string|boolean][]} */ ([
235
+ // Signature seems to require a "name" (of an event) and no counter-examples
236
+ [
237
+ 'namepathRole', 'namepath-referencing',
238
+ ],
239
+
240
+ [
241
+ 'nameRequired', true,
242
+ ],
243
+
244
+ [
245
+ 'typeAllowed', false,
246
+ ],
247
+ ])),
248
+ ],
249
+
250
+ [
251
+ 'enum', new Map(/** @type {[string, string|boolean][]} */ ([
252
+ // Has example showing curly brackets but not in doc signature
253
+ [
254
+ 'typeAllowed', true,
255
+ ],
256
+ ])),
257
+ ],
258
+
259
+ [
260
+ 'event', new Map(/** @type {[string, string|boolean][]} */ ([
261
+ // Appears to require a "name" in its signature, albeit somewhat
262
+ // different from other "name"'s (including as described
263
+ // at https://jsdoc.app/about-namepaths.html )
264
+ [
265
+ 'namepathRole', 'namepath-defining',
266
+ ],
267
+
268
+ // The doc signature of `event` seems to require a "name"
269
+ [
270
+ 'nameRequired', true,
271
+ ],
272
+ ])),
273
+ ],
274
+
275
+ [
276
+ 'exception', new Map(/** @type {[string, string|boolean][]} */ ([
277
+ // Shows curly brackets in the signature and in the examples
278
+ [
279
+ 'typeAllowed', true,
280
+ ],
281
+ ])),
282
+ ],
283
+
284
+ // Closure
285
+ [
286
+ 'export', new Map(/** @type {[string, string|boolean][]} */ ([
287
+ [
288
+ 'typeAllowed', isClosureOrPermissive,
289
+ ],
290
+ ])),
291
+ ],
292
+
293
+ [
294
+ 'exports', new Map(/** @type {[string, string|boolean][]} */ ([
295
+ [
296
+ 'namepathRole', 'namepath-defining',
297
+ ],
298
+
299
+ [
300
+ 'nameRequired', isJsdoc,
301
+ ],
302
+
303
+ [
304
+ 'typeAllowed', isClosureOrPermissive,
305
+ ],
306
+ ])),
307
+ ],
308
+
309
+ [
310
+ 'extends', new Map(/** @type {[string, string|boolean][]} */ ([
311
+ // Signature seems to require a "namepath" (and no counter-examples)
312
+ [
313
+ 'namepathRole', 'namepath-referencing',
314
+ ],
315
+
316
+ [
317
+ 'nameRequired', isJsdoc,
318
+ ],
319
+
320
+ // Does not show curly brackets in either the signature or examples
321
+ [
322
+ 'typeAllowed', isTypescriptOrClosure || isPermissive,
323
+ ],
324
+
325
+ // "namepath"
326
+ [
327
+ 'typeOrNameRequired', isTypescriptOrClosure || isPermissive,
328
+ ],
329
+ ])),
330
+ ],
331
+
332
+ [
333
+ 'external', new Map(/** @type {[string, string|boolean][]} */ ([
334
+ // Appears to require a "name" in its signature, albeit somewhat
335
+ // different from other "name"'s (including as described
336
+ // at https://jsdoc.app/about-namepaths.html )
337
+ [
338
+ 'namepathRole', 'namepath-defining',
339
+ ],
340
+
341
+ // "name" (and a special syntax for the `external` name)
342
+ [
343
+ 'nameRequired', true,
344
+ ],
345
+
346
+ [
347
+ 'typeAllowed', false,
348
+ ],
349
+ ])),
350
+ ],
351
+
352
+ [
353
+ 'fires', new Map(/** @type {[string, string|boolean][]} */ ([
354
+ // Signature seems to require a "name" (of an event) and no
355
+ // counter-examples
356
+ [
357
+ 'namepathRole', 'namepath-referencing',
358
+ ],
359
+
360
+ [
361
+ 'nameRequired', true,
362
+ ],
363
+
364
+ [
365
+ 'typeAllowed', false,
366
+ ],
367
+ ])),
368
+ ],
369
+
370
+ [
371
+ 'func', new Map(/** @type {[string, string|boolean][]} */ ([
372
+ // Allows for "name"'s in signature, but indicated as optional
373
+ [
374
+ 'namepathRole', 'namepath-defining',
375
+ ],
376
+ ])),
377
+ ],
378
+ [
379
+ 'function', new Map(/** @type {[string, string|boolean][]} */ ([
380
+ // Allows for "name"'s in signature, but indicated as optional
381
+ [
382
+ 'namepathRole', 'namepath-defining',
383
+ ],
384
+
385
+ [
386
+ 'nameRequired', false,
387
+ ],
388
+
389
+ [
390
+ 'typeAllowed', false,
391
+ ],
392
+ ])),
393
+ ],
394
+
395
+ [
396
+ 'host', new Map(/** @type {[string, string|boolean][]} */ ([
397
+ // Appears to require a "name" in its signature, albeit somewhat
398
+ // different from other "name"'s (including as described
399
+ // at https://jsdoc.app/about-namepaths.html )
400
+ [
401
+ 'namepathRole', 'namepath-defining',
402
+ ],
403
+
404
+ // See `external`
405
+ [
406
+ 'nameRequired', true,
407
+ ],
408
+
409
+ [
410
+ 'typeAllowed', false,
411
+ ],
412
+ ])),
413
+ ],
414
+
415
+ [
416
+ 'implements', new Map(/** @type {[string, string|boolean][]} */ ([
417
+ // Shows curly brackets in the doc signature and examples
418
+ // "typeExpression"
419
+ [
420
+ 'typeRequired', true,
421
+ ],
422
+ ])),
423
+ ],
424
+
425
+ [
426
+ 'interface', new Map(/** @type {[string, string|boolean][]} */ ([
427
+ // Not in use, but should be this value if using to power `empty-tags`
428
+ [
429
+ 'nameAllowed', isClosure,
430
+ ],
431
+
432
+ // Allows for "name" in signature, but indicates as optional
433
+ [
434
+ 'namepathRole',
435
+ isJsdocTypescriptOrPermissive ? 'namepath-defining' : false,
436
+ ],
437
+
438
+ [
439
+ 'typeAllowed', false,
440
+ ],
441
+ ])),
442
+ ],
443
+
444
+ [
445
+ 'internal', new Map(/** @type {[string, string|boolean][]} */ ([
446
+ // Not in use, but should be this value if using to power `empty-tags`
447
+ [
448
+ 'nameAllowed', false,
449
+ ],
450
+ // https://www.typescriptlang.org/tsconfig/#stripInternal
451
+ [
452
+ 'namepathRole', false,
453
+ ],
454
+ ])),
455
+ ],
456
+
457
+ [
458
+ 'lends', new Map(/** @type {[string, string|boolean][]} */ ([
459
+ // Signature seems to require a "namepath" (and no counter-examples)
460
+ [
461
+ 'namepathRole', 'namepath-referencing',
462
+ ],
463
+
464
+ // "namepath"
465
+ [
466
+ 'typeOrNameRequired', true,
467
+ ],
468
+ ])),
469
+ ],
470
+
471
+ [
472
+ 'link', new Map(/** @type {[string, string|boolean][]} */ ([
473
+ // Signature seems to require a namepath OR URL and might be checked as such.
474
+ [
475
+ 'namepathRole', 'namepath-or-url-referencing',
476
+ ],
477
+
478
+ ])),
479
+ ],
480
+
481
+ [
482
+ 'linkcode', new Map(/** @type {[string, string|boolean][]} */ ([
483
+ // Synonym for "link"
484
+ // Signature seems to require a namepath OR URL and might be checked as such.
485
+ [
486
+ 'namepathRole', 'namepath-or-url-referencing',
487
+ ],
488
+ ])),
489
+ ],
490
+
491
+ [
492
+ 'linkplain', new Map(/** @type {[string, string|boolean][]} */ ([
493
+ // Synonym for "link"
494
+ // Signature seems to require a namepath OR URL and might be checked as such.
495
+ [
496
+ 'namepathRole', 'namepath-or-url-referencing',
497
+ ],
498
+ ])),
499
+ ],
500
+
501
+ [
502
+ 'listens', new Map(/** @type {[string, string|boolean][]} */ ([
503
+ // Signature seems to require a "name" (of an event) and no
504
+ // counter-examples
505
+ [
506
+ 'namepathRole', 'namepath-referencing',
507
+ ],
508
+
509
+ [
510
+ 'nameRequired', true,
511
+ ],
512
+
513
+ [
514
+ 'typeAllowed', false,
515
+ ],
516
+ ])),
517
+ ],
518
+
519
+ [
520
+ 'member', new Map(/** @type {[string, string|boolean][]} */ ([
521
+ // Allows for "name"'s in signature, but indicated as optional
522
+ [
523
+ 'namepathRole', 'namepath-defining',
524
+ ],
525
+
526
+ // Has example showing curly brackets but not in doc signature
527
+ [
528
+ 'typeAllowed', true,
529
+ ],
530
+ ])),
531
+ ],
532
+
533
+ [
534
+ 'memberof!', new Map(/** @type {[string, string|boolean][]} */ ([
535
+ // Signature seems to require a "namepath" (and no counter-examples),
536
+ // though it allows an incomplete namepath ending with connecting symbol
537
+ [
538
+ 'namepathRole', 'namepath-referencing',
539
+ ],
540
+
541
+ // "namepath"
542
+ [
543
+ 'typeOrNameRequired', true,
544
+ ],
545
+ ])),
546
+ ],
547
+ [
548
+ 'memberof', new Map(/** @type {[string, string|boolean][]} */ ([
549
+ // Signature seems to require a "namepath" (and no counter-examples),
550
+ // though it allows an incomplete namepath ending with connecting symbol
551
+ [
552
+ 'namepathRole', 'namepath-referencing',
553
+ ],
554
+
555
+ // "namepath"
556
+ [
557
+ 'typeOrNameRequired', true,
558
+ ],
559
+ ])),
560
+ ],
561
+
562
+ [
563
+ 'method', new Map(/** @type {[string, string|boolean][]} */ ([
564
+ // Allows for "name"'s in signature, but indicated as optional
565
+ [
566
+ 'namepathRole', 'namepath-defining',
567
+ ],
568
+ ])),
569
+ ],
570
+ [
571
+ 'mixes', new Map(/** @type {[string, string|boolean][]} */ ([
572
+ // Signature seems to require a "OtherObjectPath" with no
573
+ // counter-examples
574
+ [
575
+ 'namepathRole', 'namepath-referencing',
576
+ ],
577
+
578
+ // "OtherObjectPath"
579
+ [
580
+ 'typeOrNameRequired', true,
581
+ ],
582
+ ])),
583
+ ],
584
+
585
+ [
586
+ 'mixin', new Map(/** @type {[string, string|boolean][]} */ ([
587
+ // Allows for "name"'s in signature, but indicated as optional
588
+ [
589
+ 'namepathRole', 'namepath-defining',
590
+ ],
591
+
592
+ [
593
+ 'nameRequired', false,
594
+ ],
595
+
596
+ [
597
+ 'typeAllowed', false,
598
+ ],
599
+ ])),
600
+ ],
601
+
602
+ [
603
+ 'modifies', new Map(/** @type {[string, string|boolean][]} */ ([
604
+ // Has no documentation, but test example has curly brackets, and
605
+ // "name" would be suggested rather than "namepath" based on example;
606
+ // not sure if name is required
607
+ [
608
+ 'typeAllowed', true,
609
+ ],
610
+ ])),
611
+ ],
612
+
613
+ [
614
+ 'module', new Map(/** @type {[string, string|boolean][]} */ ([
615
+ // Optional "name" and no curly brackets
616
+ // this block impacts `no-undefined-types` and `valid-types` (search for
617
+ // "isNamepathDefiningTag|tagMightHaveNamepath|tagMightHaveEitherTypeOrNamePosition")
618
+ [
619
+ 'namepathRole', isJsdoc ? 'namepath-defining' : 'text',
620
+ ],
621
+
622
+ // Shows the signature with curly brackets but not in the example
623
+ [
624
+ 'typeAllowed', true,
625
+ ],
626
+ ])),
627
+ ],
628
+
629
+ [
630
+ 'name', new Map(/** @type {[string, string|boolean][]} */ ([
631
+ // Seems to require a "namepath" in the signature (with no
632
+ // counter-examples)
633
+ [
634
+ 'namepathRole', 'namepath-defining',
635
+ ],
636
+
637
+ // "namepath"
638
+ [
639
+ 'nameRequired', true,
640
+ ],
641
+
642
+ // "namepath"
643
+ [
644
+ 'typeOrNameRequired', true,
645
+ ],
646
+ ])),
647
+ ],
648
+
649
+ [
650
+ 'namespace', new Map(/** @type {[string, string|boolean][]} */ ([
651
+ // Allows for "name"'s in signature, but indicated as optional
652
+ [
653
+ 'namepathRole', 'namepath-defining',
654
+ ],
655
+
656
+ // Shows the signature with curly brackets but not in the example
657
+ [
658
+ 'typeAllowed', true,
659
+ ],
660
+ ])),
661
+ ],
662
+ [
663
+ 'package', new Map(/** @type {[string, string|boolean][]} */ ([
664
+ // Shows the signature with curly brackets but not in the example
665
+ // "typeExpression"
666
+ [
667
+ 'typeAllowed', isClosureOrPermissive,
668
+ ],
669
+ ])),
670
+ ],
671
+
672
+ [
673
+ 'param', new Map(/** @type {[string, string|boolean][]} */ ([
674
+ [
675
+ 'namepathRole', 'namepath-defining',
676
+ ],
677
+
678
+ // Though no signature provided requiring, per
679
+ // https://jsdoc.app/tags-param.html:
680
+ // "The @param tag requires you to specify the name of the parameter you
681
+ // are documenting."
682
+ [
683
+ 'nameRequired', true,
684
+ ],
685
+
686
+ // Has no formal signature in the docs but shows curly brackets
687
+ // in the examples
688
+ [
689
+ 'typeAllowed', true,
690
+ ],
691
+ ])),
692
+ ],
693
+
694
+ [
695
+ 'private', new Map(/** @type {[string, string|boolean][]} */ ([
696
+ // Shows the signature with curly brackets but not in the example
697
+ // "typeExpression"
698
+ [
699
+ 'typeAllowed', isClosureOrPermissive,
700
+ ],
701
+ ])),
702
+ ],
703
+
704
+ [
705
+ 'prop', new Map(/** @type {[string, string|boolean][]} */ ([
706
+ [
707
+ 'namepathRole', 'namepath-defining',
708
+ ],
709
+
710
+ // See `property`
711
+ [
712
+ 'nameRequired', true,
713
+ ],
714
+
715
+ // Has no formal signature in the docs but shows curly brackets
716
+ // in the examples
717
+ [
718
+ 'typeAllowed', true,
719
+ ],
720
+ ])),
721
+ ],
722
+
723
+ [
724
+ 'property', new Map(/** @type {[string, string|boolean][]} */ ([
725
+ [
726
+ 'namepathRole', 'namepath-defining',
727
+ ],
728
+
729
+ // No docs indicate required, but since parallel to `param`, we treat as
730
+ // such:
731
+ [
732
+ 'nameRequired', true,
733
+ ],
734
+
735
+ // Has no formal signature in the docs but shows curly brackets
736
+ // in the examples
737
+ [
738
+ 'typeAllowed', true,
739
+ ],
740
+ ])),
741
+ ],
742
+
743
+ [
744
+ 'protected', new Map(/** @type {[string, string|boolean][]} */ ([
745
+ // Shows the signature with curly brackets but not in the example
746
+ // "typeExpression"
747
+ [
748
+ 'typeAllowed', isClosureOrPermissive,
749
+ ],
750
+ ])),
751
+ ],
752
+
753
+ [
754
+ 'public', new Map(/** @type {[string, string|boolean][]} */ ([
755
+ // Does not show a signature nor show curly brackets in the example
756
+ [
757
+ 'typeAllowed', isClosureOrPermissive,
758
+ ],
759
+ ])),
760
+ ],
761
+
762
+ [
763
+ 'requires', new Map(/** @type {[string, string|boolean][]} */ ([
764
+ // <someModuleName>
765
+ [
766
+ 'namepathRole', 'namepath-referencing',
767
+ ],
768
+
769
+ [
770
+ 'nameRequired', true,
771
+ ],
772
+
773
+ [
774
+ 'typeAllowed', false,
775
+ ],
776
+ ])),
777
+ ],
778
+
779
+ [
780
+ 'return', new Map(/** @type {[string, string|boolean][]} */ ([
781
+ // Shows curly brackets in the signature and in the examples
782
+ [
783
+ 'typeAllowed', true,
784
+ ],
785
+ ])),
786
+ ],
787
+ [
788
+ 'returns', new Map(/** @type {[string, string|boolean][]} */ ([
789
+ // Shows curly brackets in the signature and in the examples
790
+ [
791
+ 'typeAllowed', true,
792
+ ],
793
+ ])),
794
+ ],
795
+
796
+ [
797
+ 'satisfies', new Map(/** @type {[string, string|boolean][]} */ ([
798
+ // Shows curly brackets in the doc signature and examples
799
+ [
800
+ 'typeRequired', true,
801
+ ],
802
+ ])),
803
+ ],
804
+
805
+ [
806
+ 'see', new Map(/** @type {[string, string|boolean][]} */ ([
807
+ // Signature allows for "namepath" or text, so user must configure to
808
+ // 'namepath-referencing' to enforce checks
809
+ [
810
+ 'namepathRole', 'text',
811
+ ],
812
+ ])),
813
+ ],
814
+
815
+ [
816
+ 'static', new Map(/** @type {[string, string|boolean][]} */ ([
817
+ // Does not show a signature nor show curly brackets in the example
818
+ [
819
+ 'typeAllowed', isClosureOrPermissive,
820
+ ],
821
+ ])),
822
+ ],
823
+
824
+ [
825
+ 'suppress', new Map(/** @type {[string, string|boolean][]} */ ([
826
+ [
827
+ 'namepathRole', !isClosure,
828
+ ],
829
+ [
830
+ 'typeRequired', isClosure,
831
+ ],
832
+ ])),
833
+ ],
834
+
835
+ [
836
+ 'template', new Map(/** @type {[string, string|boolean][]} */ ([
837
+ [
838
+ 'namepathRole', isJsdoc ? 'text' : 'namepath-referencing',
839
+ ],
840
+
841
+ [
842
+ 'nameRequired', !isJsdoc,
843
+ ],
844
+
845
+ // Though defines `namepathRole: 'namepath-defining'` in a sense, it is
846
+ // not parseable in the same way for template (e.g., allowing commas),
847
+ // so not adding
848
+ [
849
+ 'typeAllowed', isTypescriptOrClosure || isPermissive,
850
+ ],
851
+ ])),
852
+ ],
853
+
854
+ [
855
+ 'this', new Map(/** @type {[string, string|boolean][]} */ ([
856
+ // Signature seems to require a "namepath" (and no counter-examples)
857
+ // Not used with namepath in Closure/TypeScript, however
858
+ [
859
+ 'namepathRole', isJsdoc ? 'namepath-referencing' : false,
860
+ ],
861
+
862
+ // namepath
863
+ [
864
+ 'typeOrNameRequired', isJsdoc,
865
+ ],
866
+
867
+ [
868
+ 'typeRequired', isTypescriptOrClosure,
869
+ ],
870
+ ])),
871
+ ],
872
+
873
+ [
874
+ 'throws', new Map(/** @type {[string, string|boolean][]} */ ([
875
+ // Shows curly brackets in the signature and in the examples
876
+ [
877
+ 'typeAllowed', true,
878
+ ],
879
+ ])),
880
+ ],
881
+
882
+ [
883
+ 'tutorial', new Map(/** @type {[string, string|boolean][]} */ ([
884
+ // (a tutorial ID)
885
+ [
886
+ 'nameRequired', true,
887
+ ],
888
+
889
+ [
890
+ 'typeAllowed', false,
891
+ ],
892
+ ])),
893
+ ],
894
+
895
+ [
896
+ 'type', new Map(/** @type {[string, string|boolean][]} */ ([
897
+ // Shows curly brackets in the doc signature and examples
898
+ // "typeName"
899
+ [
900
+ 'typeRequired', true,
901
+ ],
902
+ ])),
903
+ ],
904
+
905
+ [
906
+ 'typedef', new Map(/** @type {[string, string|boolean][]} */ ([
907
+ // Seems to require a "namepath" in the signature (with no
908
+ // counter-examples)
909
+ [
910
+ 'namepathRole', 'namepath-defining',
911
+ ],
912
+
913
+ // TypeScript may allow it to be dropped if followed by @property or @member;
914
+ // also shown as missing in Closure
915
+ // "namepath"
916
+ [
917
+ 'nameRequired', isJsdocOrPermissive,
918
+ ],
919
+
920
+ // Is not `typeRequired` for TypeScript because it gives an error:
921
+ // JSDoc '@typedef' tag should either have a type annotation or be followed by '@property' or '@member' tags.
922
+
923
+ // Has example showing curly brackets but not in doc signature
924
+ [
925
+ 'typeAllowed', true,
926
+ ],
927
+
928
+ // TypeScript may allow it to be dropped if followed by @property or @member
929
+ // "namepath"
930
+ [
931
+ 'typeOrNameRequired', !isTypescript,
932
+ ],
933
+ ])),
934
+ ],
935
+
936
+ [
937
+ 'var', new Map(/** @type {[string, string|boolean][]} */ ([
938
+ // Allows for "name"'s in signature, but indicated as optional
939
+ [
940
+ 'namepathRole', 'namepath-defining',
941
+ ],
942
+
943
+ // Has example showing curly brackets but not in doc signature
944
+ [
945
+ 'typeAllowed', true,
946
+ ],
947
+ ])),
948
+ ],
949
+
950
+ [
951
+ 'yield', new Map(/** @type {[string, string|boolean][]} */ ([
952
+ // Shows curly brackets in the signature and in the examples
953
+ [
954
+ 'typeAllowed', true,
955
+ ],
956
+ ])),
957
+ ],
958
+ [
959
+ 'yields', new Map(/** @type {[string, string|boolean][]} */ ([
960
+ // Shows curly brackets in the signature and in the examples
961
+ [
962
+ 'typeAllowed', true,
963
+ ],
964
+ ])),
965
+ ],
966
+ ]);
967
+ };
968
+
969
+ export default getDefaultTagStructureForMode;