eslint-plugin-jsdoc 52.0.1 → 52.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/dist/WarnSettings.cjs +18 -35
  2. package/dist/WarnSettings.cjs.map +1 -1
  3. package/dist/WarnSettings.js +20 -0
  4. package/dist/WarnSettings.js.map +1 -0
  5. package/dist/_virtual/rolldown_runtime.cjs +32 -0
  6. package/dist/_virtual/rolldown_runtime.js +11 -0
  7. package/dist/alignTransform.cjs +224 -305
  8. package/dist/alignTransform.cjs.map +1 -1
  9. package/dist/alignTransform.js +241 -0
  10. package/dist/alignTransform.js.map +1 -0
  11. package/dist/defaultTagOrder.cjs +132 -43
  12. package/dist/defaultTagOrder.cjs.map +1 -1
  13. package/dist/defaultTagOrder.js +134 -0
  14. package/dist/defaultTagOrder.js.map +1 -0
  15. package/dist/exportParser.cjs +478 -696
  16. package/dist/exportParser.cjs.map +1 -1
  17. package/dist/exportParser.js +518 -0
  18. package/dist/exportParser.js.map +1 -0
  19. package/dist/getDefaultTagStructureForMode.cjs +184 -288
  20. package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
  21. package/dist/getDefaultTagStructureForMode.js +188 -0
  22. package/dist/getDefaultTagStructureForMode.js.map +1 -0
  23. package/dist/getJsdocProcessorPlugin.cjs +365 -532
  24. package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
  25. package/dist/getJsdocProcessorPlugin.d.cts +70 -0
  26. package/dist/getJsdocProcessorPlugin.d.cts.map +1 -0
  27. package/dist/getJsdocProcessorPlugin.d.ts +68 -90
  28. package/dist/getJsdocProcessorPlugin.d.ts.map +1 -1
  29. package/dist/getJsdocProcessorPlugin.js +383 -0
  30. package/dist/getJsdocProcessorPlugin.js.map +1 -0
  31. package/dist/index.cjs +398 -383
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.d.cts +22 -0
  34. package/dist/index.d.cts.map +1 -0
  35. package/dist/index.d.ts +11 -6
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +425 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/iterateJsdoc.cjs +1528 -1988
  40. package/dist/iterateJsdoc.cjs.map +1 -1
  41. package/dist/iterateJsdoc.d.cts +471 -0
  42. package/dist/iterateJsdoc.d.cts.map +1 -0
  43. package/dist/iterateJsdoc.d.ts +358 -349
  44. package/dist/iterateJsdoc.d.ts.map +1 -1
  45. package/dist/iterateJsdoc.js +1617 -0
  46. package/dist/iterateJsdoc.js.map +1 -0
  47. package/dist/jsdocUtils.cjs +1009 -1376
  48. package/dist/jsdocUtils.cjs.map +1 -1
  49. package/dist/jsdocUtils.js +1123 -0
  50. package/dist/jsdocUtils.js.map +1 -0
  51. package/dist/rules/checkAccess.cjs +29 -36
  52. package/dist/rules/checkAccess.cjs.map +1 -1
  53. package/dist/rules/checkAccess.js +33 -0
  54. package/dist/rules/checkAccess.js.map +1 -0
  55. package/dist/rules/checkAlignment.cjs +41 -54
  56. package/dist/rules/checkAlignment.cjs.map +1 -1
  57. package/dist/rules/checkAlignment.js +47 -0
  58. package/dist/rules/checkAlignment.js.map +1 -0
  59. package/dist/rules/checkExamples.cjs +327 -484
  60. package/dist/rules/checkExamples.cjs.map +1 -1
  61. package/dist/rules/checkExamples.js +348 -0
  62. package/dist/rules/checkExamples.js.map +1 -0
  63. package/dist/rules/checkIndentation.cjs +50 -65
  64. package/dist/rules/checkIndentation.cjs.map +1 -1
  65. package/dist/rules/checkIndentation.js +59 -0
  66. package/dist/rules/checkIndentation.js.map +1 -0
  67. package/dist/rules/checkLineAlignment.cjs +220 -311
  68. package/dist/rules/checkLineAlignment.cjs.map +1 -1
  69. package/dist/rules/checkLineAlignment.js +229 -0
  70. package/dist/rules/checkLineAlignment.js.map +1 -0
  71. package/dist/rules/checkParamNames.cjs +227 -335
  72. package/dist/rules/checkParamNames.cjs.map +1 -1
  73. package/dist/rules/checkParamNames.js +237 -0
  74. package/dist/rules/checkParamNames.js.map +1 -0
  75. package/dist/rules/checkPropertyNames.cjs +78 -106
  76. package/dist/rules/checkPropertyNames.cjs.map +1 -1
  77. package/dist/rules/checkPropertyNames.js +88 -0
  78. package/dist/rules/checkPropertyNames.js.map +1 -0
  79. package/dist/rules/checkSyntax.cjs +21 -34
  80. package/dist/rules/checkSyntax.cjs.map +1 -1
  81. package/dist/rules/checkSyntax.js +25 -0
  82. package/dist/rules/checkSyntax.js.map +1 -0
  83. package/dist/rules/checkTagNames.cjs +188 -210
  84. package/dist/rules/checkTagNames.cjs.map +1 -1
  85. package/dist/rules/checkTagNames.js +191 -0
  86. package/dist/rules/checkTagNames.js.map +1 -0
  87. package/dist/rules/checkTemplateNames.cjs +121 -178
  88. package/dist/rules/checkTemplateNames.cjs.map +1 -1
  89. package/dist/rules/checkTemplateNames.js +124 -0
  90. package/dist/rules/checkTemplateNames.js.map +1 -0
  91. package/dist/rules/checkTypes.cjs +291 -385
  92. package/dist/rules/checkTypes.cjs.map +1 -1
  93. package/dist/rules/checkTypes.js +299 -0
  94. package/dist/rules/checkTypes.js.map +1 -0
  95. package/dist/rules/checkValues.cjs +100 -146
  96. package/dist/rules/checkValues.cjs.map +1 -1
  97. package/dist/rules/checkValues.js +103 -0
  98. package/dist/rules/checkValues.js.map +1 -0
  99. package/dist/rules/convertToJsdocComments.cjs +228 -306
  100. package/dist/rules/convertToJsdocComments.cjs.map +1 -1
  101. package/dist/rules/convertToJsdocComments.js +231 -0
  102. package/dist/rules/convertToJsdocComments.js.map +1 -0
  103. package/dist/rules/emptyTags.cjs +62 -72
  104. package/dist/rules/emptyTags.cjs.map +1 -1
  105. package/dist/rules/emptyTags.js +67 -0
  106. package/dist/rules/emptyTags.js.map +1 -0
  107. package/dist/rules/implementsOnClasses.cjs +36 -56
  108. package/dist/rules/implementsOnClasses.cjs.map +1 -1
  109. package/dist/rules/implementsOnClasses.js +40 -0
  110. package/dist/rules/implementsOnClasses.js.map +1 -0
  111. package/dist/rules/importsAsDependencies.cjs +62 -99
  112. package/dist/rules/importsAsDependencies.cjs.map +1 -1
  113. package/dist/rules/importsAsDependencies.js +68 -0
  114. package/dist/rules/importsAsDependencies.js.map +1 -0
  115. package/dist/rules/informativeDocs.cjs +105 -142
  116. package/dist/rules/informativeDocs.cjs.map +1 -1
  117. package/dist/rules/informativeDocs.js +110 -0
  118. package/dist/rules/informativeDocs.js.map +1 -0
  119. package/dist/rules/linesBeforeBlock.cjs +70 -105
  120. package/dist/rules/linesBeforeBlock.cjs.map +1 -1
  121. package/dist/rules/linesBeforeBlock.js +75 -0
  122. package/dist/rules/linesBeforeBlock.js.map +1 -0
  123. package/dist/rules/matchDescription.cjs +160 -222
  124. package/dist/rules/matchDescription.cjs.map +1 -1
  125. package/dist/rules/matchDescription.js +167 -0
  126. package/dist/rules/matchDescription.js.map +1 -0
  127. package/dist/rules/matchName.cjs +73 -128
  128. package/dist/rules/matchName.cjs.map +1 -1
  129. package/dist/rules/matchName.js +77 -0
  130. package/dist/rules/matchName.js.map +1 -0
  131. package/dist/rules/multilineBlocks.cjs +235 -352
  132. package/dist/rules/multilineBlocks.cjs.map +1 -1
  133. package/dist/rules/multilineBlocks.js +245 -0
  134. package/dist/rules/multilineBlocks.js.map +1 -0
  135. package/dist/rules/noBadBlocks.cjs +63 -86
  136. package/dist/rules/noBadBlocks.cjs.map +1 -1
  137. package/dist/rules/noBadBlocks.js +68 -0
  138. package/dist/rules/noBadBlocks.js.map +1 -0
  139. package/dist/rules/noBlankBlockDescriptions.cjs +35 -57
  140. package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
  141. package/dist/rules/noBlankBlockDescriptions.js +41 -0
  142. package/dist/rules/noBlankBlockDescriptions.js.map +1 -0
  143. package/dist/rules/noBlankBlocks.cjs +26 -48
  144. package/dist/rules/noBlankBlocks.cjs.map +1 -1
  145. package/dist/rules/noBlankBlocks.js +30 -0
  146. package/dist/rules/noBlankBlocks.js.map +1 -0
  147. package/dist/rules/noDefaults.cjs +52 -79
  148. package/dist/rules/noDefaults.cjs.map +1 -1
  149. package/dist/rules/noDefaults.js +56 -0
  150. package/dist/rules/noDefaults.js.map +1 -0
  151. package/dist/rules/noMissingSyntax.cjs +115 -165
  152. package/dist/rules/noMissingSyntax.cjs.map +1 -1
  153. package/dist/rules/noMissingSyntax.js +126 -0
  154. package/dist/rules/noMissingSyntax.js.map +1 -0
  155. package/dist/rules/noMultiAsterisks.cjs +48 -89
  156. package/dist/rules/noMultiAsterisks.cjs.map +1 -1
  157. package/dist/rules/noMultiAsterisks.js +58 -0
  158. package/dist/rules/noMultiAsterisks.js.map +1 -0
  159. package/dist/rules/noRestrictedSyntax.cjs +45 -79
  160. package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
  161. package/dist/rules/noRestrictedSyntax.js +49 -0
  162. package/dist/rules/noRestrictedSyntax.js.map +1 -0
  163. package/dist/rules/noTypes.cjs +59 -80
  164. package/dist/rules/noTypes.cjs.map +1 -1
  165. package/dist/rules/noTypes.js +65 -0
  166. package/dist/rules/noTypes.js.map +1 -0
  167. package/dist/rules/noUndefinedTypes.cjs +297 -388
  168. package/dist/rules/noUndefinedTypes.cjs.map +1 -1
  169. package/dist/rules/noUndefinedTypes.js +303 -0
  170. package/dist/rules/noUndefinedTypes.js.map +1 -0
  171. package/dist/rules/requireAsteriskPrefix.cjs +108 -159
  172. package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
  173. package/dist/rules/requireAsteriskPrefix.js +112 -0
  174. package/dist/rules/requireAsteriskPrefix.js.map +1 -0
  175. package/dist/rules/requireDescription.cjs +89 -129
  176. package/dist/rules/requireDescription.cjs.map +1 -1
  177. package/dist/rules/requireDescription.js +95 -0
  178. package/dist/rules/requireDescription.js.map +1 -0
  179. package/dist/rules/requireDescriptionCompleteSentence.cjs +201 -262
  180. package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
  181. package/dist/rules/requireDescriptionCompleteSentence.js +220 -0
  182. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -0
  183. package/dist/rules/requireExample.cjs +73 -104
  184. package/dist/rules/requireExample.cjs.map +1 -1
  185. package/dist/rules/requireExample.js +77 -0
  186. package/dist/rules/requireExample.js.map +1 -0
  187. package/dist/rules/requireFileOverview.cjs +75 -129
  188. package/dist/rules/requireFileOverview.cjs.map +1 -1
  189. package/dist/rules/requireFileOverview.js +81 -0
  190. package/dist/rules/requireFileOverview.js.map +1 -0
  191. package/dist/rules/requireHyphenBeforeParamDescription.cjs +85 -133
  192. package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
  193. package/dist/rules/requireHyphenBeforeParamDescription.js +89 -0
  194. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -0
  195. package/dist/rules/requireJsdoc.cjs +384 -557
  196. package/dist/rules/requireJsdoc.cjs.map +1 -1
  197. package/dist/rules/requireJsdoc.js +404 -0
  198. package/dist/rules/requireJsdoc.js.map +1 -0
  199. package/dist/rules/requireParam.cjs +336 -526
  200. package/dist/rules/requireParam.cjs.map +1 -1
  201. package/dist/rules/requireParam.js +344 -0
  202. package/dist/rules/requireParam.js.map +1 -0
  203. package/dist/rules/requireParamDescription.cjs +55 -80
  204. package/dist/rules/requireParamDescription.cjs.map +1 -1
  205. package/dist/rules/requireParamDescription.js +59 -0
  206. package/dist/rules/requireParamDescription.js.map +1 -0
  207. package/dist/rules/requireParamName.cjs +32 -50
  208. package/dist/rules/requireParamName.cjs.map +1 -1
  209. package/dist/rules/requireParamName.js +36 -0
  210. package/dist/rules/requireParamName.js.map +1 -0
  211. package/dist/rules/requireParamType.cjs +55 -80
  212. package/dist/rules/requireParamType.cjs.map +1 -1
  213. package/dist/rules/requireParamType.js +59 -0
  214. package/dist/rules/requireParamType.js.map +1 -0
  215. package/dist/rules/requireProperty.cjs +31 -42
  216. package/dist/rules/requireProperty.cjs.map +1 -1
  217. package/dist/rules/requireProperty.js +35 -0
  218. package/dist/rules/requireProperty.js.map +1 -0
  219. package/dist/rules/requirePropertyDescription.cjs +17 -25
  220. package/dist/rules/requirePropertyDescription.cjs.map +1 -1
  221. package/dist/rules/requirePropertyDescription.js +21 -0
  222. package/dist/rules/requirePropertyDescription.js.map +1 -0
  223. package/dist/rules/requirePropertyName.cjs +17 -25
  224. package/dist/rules/requirePropertyName.cjs.map +1 -1
  225. package/dist/rules/requirePropertyName.js +21 -0
  226. package/dist/rules/requirePropertyName.js.map +1 -0
  227. package/dist/rules/requirePropertyType.cjs +17 -25
  228. package/dist/rules/requirePropertyType.cjs.map +1 -1
  229. package/dist/rules/requirePropertyType.js +21 -0
  230. package/dist/rules/requirePropertyType.js.map +1 -0
  231. package/dist/rules/requireReturns.cjs +125 -203
  232. package/dist/rules/requireReturns.cjs.map +1 -1
  233. package/dist/rules/requireReturns.js +131 -0
  234. package/dist/rules/requireReturns.js.map +1 -0
  235. package/dist/rules/requireReturnsCheck.cjs +60 -103
  236. package/dist/rules/requireReturnsCheck.cjs.map +1 -1
  237. package/dist/rules/requireReturnsCheck.js +66 -0
  238. package/dist/rules/requireReturnsCheck.js.map +1 -0
  239. package/dist/rules/requireReturnsDescription.cjs +39 -54
  240. package/dist/rules/requireReturnsDescription.cjs.map +1 -1
  241. package/dist/rules/requireReturnsDescription.js +43 -0
  242. package/dist/rules/requireReturnsDescription.js.map +1 -0
  243. package/dist/rules/requireReturnsType.cjs +32 -50
  244. package/dist/rules/requireReturnsType.cjs.map +1 -1
  245. package/dist/rules/requireReturnsType.js +36 -0
  246. package/dist/rules/requireReturnsType.js.map +1 -0
  247. package/dist/rules/requireTemplate.cjs +119 -178
  248. package/dist/rules/requireTemplate.cjs.map +1 -1
  249. package/dist/rules/requireTemplate.js +122 -0
  250. package/dist/rules/requireTemplate.js.map +1 -0
  251. package/dist/rules/requireThrows.cjs +61 -95
  252. package/dist/rules/requireThrows.cjs.map +1 -1
  253. package/dist/rules/requireThrows.js +67 -0
  254. package/dist/rules/requireThrows.js.map +1 -0
  255. package/dist/rules/requireYields.cjs +106 -166
  256. package/dist/rules/requireYields.cjs.map +1 -1
  257. package/dist/rules/requireYields.js +115 -0
  258. package/dist/rules/requireYields.js.map +1 -0
  259. package/dist/rules/requireYieldsCheck.cjs +96 -152
  260. package/dist/rules/requireYieldsCheck.cjs.map +1 -1
  261. package/dist/rules/requireYieldsCheck.js +105 -0
  262. package/dist/rules/requireYieldsCheck.js.map +1 -0
  263. package/dist/rules/sortTags.cjs +258 -444
  264. package/dist/rules/sortTags.cjs.map +1 -1
  265. package/dist/rules/sortTags.js +262 -0
  266. package/dist/rules/sortTags.js.map +1 -0
  267. package/dist/rules/tagLines.cjs +179 -266
  268. package/dist/rules/tagLines.cjs.map +1 -1
  269. package/dist/rules/tagLines.js +183 -0
  270. package/dist/rules/tagLines.js.map +1 -0
  271. package/dist/rules/textEscaping.cjs +92 -127
  272. package/dist/rules/textEscaping.cjs.map +1 -1
  273. package/dist/rules/textEscaping.js +102 -0
  274. package/dist/rules/textEscaping.js.map +1 -0
  275. package/dist/rules/validTypes.cjs +252 -265
  276. package/dist/rules/validTypes.cjs.map +1 -1
  277. package/dist/rules/validTypes.js +259 -0
  278. package/dist/rules/validTypes.js.map +1 -0
  279. package/dist/tagNames.cjs +134 -170
  280. package/dist/tagNames.cjs.map +1 -1
  281. package/dist/tagNames.js +144 -0
  282. package/dist/tagNames.js.map +1 -0
  283. package/dist/utils/hasReturnValue.cjs +246 -474
  284. package/dist/utils/hasReturnValue.cjs.map +1 -1
  285. package/dist/utils/hasReturnValue.js +265 -0
  286. package/dist/utils/hasReturnValue.js.map +1 -0
  287. package/package.json +48 -38
  288. package/dist/generateRule.cjs +0 -242
  289. package/dist/generateRule.cjs.map +0 -1
  290. package/src/WarnSettings.js +0 -34
  291. package/src/alignTransform.js +0 -358
  292. package/src/defaultTagOrder.js +0 -169
  293. package/src/exportParser.js +0 -978
  294. package/src/getDefaultTagStructureForMode.js +0 -969
  295. package/src/getJsdocProcessorPlugin.js +0 -652
  296. package/src/index.js +0 -530
  297. package/src/iterateJsdoc.js +0 -2518
  298. package/src/jsdocUtils.js +0 -1896
  299. package/src/rules/checkAccess.js +0 -45
  300. package/src/rules/checkAlignment.js +0 -63
  301. package/src/rules/checkExamples.js +0 -589
  302. package/src/rules/checkIndentation.js +0 -75
  303. package/src/rules/checkLineAlignment.js +0 -372
  304. package/src/rules/checkParamNames.js +0 -474
  305. package/src/rules/checkPropertyNames.js +0 -152
  306. package/src/rules/checkSyntax.js +0 -30
  307. package/src/rules/checkTagNames.js +0 -314
  308. package/src/rules/checkTemplateNames.js +0 -204
  309. package/src/rules/checkTypes.js +0 -535
  310. package/src/rules/checkValues.js +0 -248
  311. package/src/rules/convertToJsdocComments.js +0 -398
  312. package/src/rules/emptyTags.js +0 -98
  313. package/src/rules/implementsOnClasses.js +0 -64
  314. package/src/rules/importsAsDependencies.js +0 -133
  315. package/src/rules/informativeDocs.js +0 -189
  316. package/src/rules/linesBeforeBlock.js +0 -134
  317. package/src/rules/matchDescription.js +0 -286
  318. package/src/rules/matchName.js +0 -151
  319. package/src/rules/multilineBlocks.js +0 -493
  320. package/src/rules/noBadBlocks.js +0 -119
  321. package/src/rules/noBlankBlockDescriptions.js +0 -69
  322. package/src/rules/noBlankBlocks.js +0 -53
  323. package/src/rules/noDefaults.js +0 -85
  324. package/src/rules/noMissingSyntax.js +0 -195
  325. package/src/rules/noMultiAsterisks.js +0 -134
  326. package/src/rules/noRestrictedSyntax.js +0 -91
  327. package/src/rules/noTypes.js +0 -93
  328. package/src/rules/noUndefinedTypes.js +0 -543
  329. package/src/rules/requireAsteriskPrefix.js +0 -190
  330. package/src/rules/requireDescription.js +0 -161
  331. package/src/rules/requireDescriptionCompleteSentence.js +0 -335
  332. package/src/rules/requireExample.js +0 -118
  333. package/src/rules/requireFileOverview.js +0 -154
  334. package/src/rules/requireHyphenBeforeParamDescription.js +0 -176
  335. package/src/rules/requireJsdoc.js +0 -743
  336. package/src/rules/requireParam.js +0 -602
  337. package/src/rules/requireParamDescription.js +0 -89
  338. package/src/rules/requireParamName.js +0 -55
  339. package/src/rules/requireParamType.js +0 -89
  340. package/src/rules/requireProperty.js +0 -48
  341. package/src/rules/requirePropertyDescription.js +0 -25
  342. package/src/rules/requirePropertyName.js +0 -25
  343. package/src/rules/requirePropertyType.js +0 -25
  344. package/src/rules/requireReturns.js +0 -238
  345. package/src/rules/requireReturnsCheck.js +0 -145
  346. package/src/rules/requireReturnsDescription.js +0 -59
  347. package/src/rules/requireReturnsType.js +0 -51
  348. package/src/rules/requireTemplate.js +0 -201
  349. package/src/rules/requireThrows.js +0 -111
  350. package/src/rules/requireYields.js +0 -216
  351. package/src/rules/requireYieldsCheck.js +0 -208
  352. package/src/rules/sortTags.js +0 -558
  353. package/src/rules/tagLines.js +0 -359
  354. package/src/rules/textEscaping.js +0 -154
  355. package/src/rules/validTypes.js +0 -401
  356. package/src/tagNames.js +0 -238
  357. package/src/utils/hasReturnValue.js +0 -572
@@ -1,323 +1,242 @@
1
- "use strict";
1
+ const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
2
+ const comment_parser = require_rolldown_runtime.__toESM(require("comment-parser"));
2
3
 
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _commentParser = require("comment-parser");
4
+ //#region src/alignTransform.js
8
5
  /**
9
- * Transform based on https://github.com/syavorsky/comment-parser/blob/master/src/transforms/align.ts
10
- *
11
- * It contains some customizations to align based on the tags, and some custom options.
12
- */
13
-
6
+ * @typedef {{
7
+ * hasNoTypes: boolean,
8
+ * maxNamedTagLength: import('./iterateJsdoc.js').Integer,
9
+ * maxUnnamedTagLength: import('./iterateJsdoc.js').Integer
10
+ * }} TypelessInfo
11
+ */
12
+ const { rewireSource } = comment_parser.util;
14
13
  /**
15
- * @typedef {{
16
- * hasNoTypes: boolean,
17
- * maxNamedTagLength: import('./iterateJsdoc.js').Integer,
18
- * maxUnnamedTagLength: import('./iterateJsdoc.js').Integer
19
- * }} TypelessInfo
20
- */
21
-
22
- const {
23
- rewireSource
24
- } = _commentParser.util;
25
-
26
- /**
27
- * @typedef {{
28
- * name: import('./iterateJsdoc.js').Integer,
29
- * start: import('./iterateJsdoc.js').Integer,
30
- * tag: import('./iterateJsdoc.js').Integer,
31
- * type: import('./iterateJsdoc.js').Integer
32
- * }} Width
33
- */
34
-
14
+ * @typedef {{
15
+ * name: import('./iterateJsdoc.js').Integer,
16
+ * start: import('./iterateJsdoc.js').Integer,
17
+ * tag: import('./iterateJsdoc.js').Integer,
18
+ * type: import('./iterateJsdoc.js').Integer
19
+ * }} Width
20
+ */
35
21
  /** @type {Width} */
36
22
  const zeroWidth = {
37
- name: 0,
38
- start: 0,
39
- tag: 0,
40
- type: 0
23
+ name: 0,
24
+ start: 0,
25
+ tag: 0,
26
+ type: 0
41
27
  };
42
-
43
28
  /**
44
- * @param {string[]} tags
45
- * @param {import('./iterateJsdoc.js').Integer} index
46
- * @param {import('comment-parser').Line[]} source
47
- * @returns {boolean}
48
- */
29
+ * @param {string[]} tags
30
+ * @param {import('./iterateJsdoc.js').Integer} index
31
+ * @param {import('comment-parser').Line[]} source
32
+ * @returns {boolean}
33
+ */
49
34
  const shouldAlign = (tags, index, source) => {
50
- const tag = source[index].tokens.tag.replace('@', '');
51
- const includesTag = tags.includes(tag);
52
- if (includesTag) {
53
- return true;
54
- }
55
- if (tag !== '') {
56
- return false;
57
- }
58
- for (let iterator = index; iterator >= 0; iterator--) {
59
- const previousTag = source[iterator].tokens.tag.replace('@', '');
60
- if (previousTag !== '') {
61
- if (tags.includes(previousTag)) {
62
- return true;
63
- }
64
- return false;
65
- }
66
- }
67
- return true;
35
+ const tag = source[index].tokens.tag.replace("@", "");
36
+ const includesTag = tags.includes(tag);
37
+ if (includesTag) return true;
38
+ if (tag !== "") return false;
39
+ for (let iterator = index; iterator >= 0; iterator--) {
40
+ const previousTag = source[iterator].tokens.tag.replace("@", "");
41
+ if (previousTag !== "") {
42
+ if (tags.includes(previousTag)) return true;
43
+ return false;
44
+ }
45
+ }
46
+ return true;
68
47
  };
69
-
70
48
  /**
71
- * @param {string[]} tags
72
- * @returns {(
73
- * width: Width,
74
- * line: {
75
- * tokens: import('comment-parser').Tokens
76
- * },
77
- * index: import('./iterateJsdoc.js').Integer,
78
- * source: import('comment-parser').Line[]
79
- * ) => Width}
80
- */
81
- const getWidth = tags => {
82
- return (width, {
83
- tokens
84
- }, index, source) => {
85
- if (!shouldAlign(tags, index, source)) {
86
- return width;
87
- }
88
- return {
89
- name: Math.max(width.name, tokens.name.length),
90
- start: tokens.delimiter === '/**' ? tokens.start.length : width.start,
91
- tag: Math.max(width.tag, tokens.tag.length),
92
- type: Math.max(width.type, tokens.type.length)
93
- };
94
- };
49
+ * @param {string[]} tags
50
+ * @returns {(
51
+ * width: Width,
52
+ * line: {
53
+ * tokens: import('comment-parser').Tokens
54
+ * },
55
+ * index: import('./iterateJsdoc.js').Integer,
56
+ * source: import('comment-parser').Line[]
57
+ * ) => Width}
58
+ */
59
+ const getWidth = (tags) => {
60
+ return (width, { tokens }, index, source) => {
61
+ if (!shouldAlign(tags, index, source)) return width;
62
+ return {
63
+ name: Math.max(width.name, tokens.name.length),
64
+ start: tokens.delimiter === "/**" ? tokens.start.length : width.start,
65
+ tag: Math.max(width.tag, tokens.tag.length),
66
+ type: Math.max(width.type, tokens.type.length)
67
+ };
68
+ };
95
69
  };
96
-
97
70
  /**
98
- * @param {{
99
- * description: string;
100
- * tags: import('comment-parser').Spec[];
101
- * problems: import('comment-parser').Problem[];
102
- * }} fields
103
- * @returns {TypelessInfo}
104
- */
105
- const getTypelessInfo = fields => {
106
- const hasNoTypes = fields.tags.every(({
107
- type
108
- }) => {
109
- return !type;
110
- });
111
- const maxNamedTagLength = Math.max(...fields.tags.map(({
112
- name,
113
- tag
114
- }) => {
115
- return name.length === 0 ? -1 : tag.length;
116
- }).filter(length => {
117
- return length !== -1;
118
- })) + 1;
119
- const maxUnnamedTagLength = Math.max(...fields.tags.map(({
120
- name,
121
- tag
122
- }) => {
123
- return name.length === 0 ? tag.length : -1;
124
- }).filter(length => {
125
- return length !== -1;
126
- })) + 1;
127
- return {
128
- hasNoTypes,
129
- maxNamedTagLength,
130
- maxUnnamedTagLength
131
- };
71
+ * @param {{
72
+ * description: string;
73
+ * tags: import('comment-parser').Spec[];
74
+ * problems: import('comment-parser').Problem[];
75
+ * }} fields
76
+ * @returns {TypelessInfo}
77
+ */
78
+ const getTypelessInfo = (fields) => {
79
+ const hasNoTypes = fields.tags.every(({ type }) => {
80
+ return !type;
81
+ });
82
+ const maxNamedTagLength = Math.max(...fields.tags.map(({ name, tag }) => {
83
+ return name.length === 0 ? -1 : tag.length;
84
+ }).filter((length) => {
85
+ return length !== -1;
86
+ })) + 1;
87
+ const maxUnnamedTagLength = Math.max(...fields.tags.map(({ name, tag }) => {
88
+ return name.length === 0 ? tag.length : -1;
89
+ }).filter((length) => {
90
+ return length !== -1;
91
+ })) + 1;
92
+ return {
93
+ hasNoTypes,
94
+ maxNamedTagLength,
95
+ maxUnnamedTagLength
96
+ };
132
97
  };
133
-
134
98
  /**
135
- * @param {import('./iterateJsdoc.js').Integer} len
136
- * @returns {string}
137
- */
138
- const space = len => {
139
- return ''.padStart(len, ' ');
99
+ * @param {import('./iterateJsdoc.js').Integer} len
100
+ * @returns {string}
101
+ */
102
+ const space = (len) => {
103
+ return "".padStart(len, " ");
140
104
  };
141
-
142
105
  /**
143
- * @param {{
144
- * customSpacings: import('../src/rules/checkLineAlignment.js').CustomSpacings,
145
- * tags: string[],
146
- * indent: string,
147
- * preserveMainDescriptionPostDelimiter: boolean,
148
- * wrapIndent: string,
149
- * disableWrapIndent: boolean,
150
- * }} cfg
151
- * @returns {(
152
- * block: import('comment-parser').Block
153
- * ) => import('comment-parser').Block}
154
- */
155
- const alignTransform = ({
156
- customSpacings,
157
- disableWrapIndent,
158
- indent,
159
- preserveMainDescriptionPostDelimiter,
160
- tags,
161
- wrapIndent
162
- }) => {
163
- let intoTags = false;
164
- /** @type {Width} */
165
- let width;
166
-
167
- /**
168
- * @param {import('comment-parser').Tokens} tokens
169
- * @param {TypelessInfo} typelessInfo
170
- * @returns {import('comment-parser').Tokens}
171
- */
172
- const alignTokens = (tokens, typelessInfo) => {
173
- const nothingAfter = {
174
- delim: false,
175
- name: false,
176
- tag: false,
177
- type: false
178
- };
179
- if (tokens.description === '') {
180
- nothingAfter.name = true;
181
- tokens.postName = '';
182
- if (tokens.name === '') {
183
- nothingAfter.type = true;
184
- tokens.postType = '';
185
- if (tokens.type === '') {
186
- nothingAfter.tag = true;
187
- tokens.postTag = '';
188
-
189
- /* c8 ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */
190
- if (tokens.tag === '') {
191
- nothingAfter.delim = true;
192
- }
193
- }
194
- }
195
- }
196
- let untypedNameAdjustment = 0;
197
- let untypedTypeAdjustment = 0;
198
- if (typelessInfo.hasNoTypes) {
199
- nothingAfter.tag = true;
200
- tokens.postTag = '';
201
- if (tokens.name === '') {
202
- untypedNameAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;
203
- } else {
204
- untypedNameAdjustment = typelessInfo.maxNamedTagLength > typelessInfo.maxUnnamedTagLength ? 0 : Math.max(0, typelessInfo.maxUnnamedTagLength - (tokens.tag.length + tokens.name.length + 1));
205
- untypedTypeAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;
206
- }
207
- }
208
-
209
- // Todo: Avoid fixing alignment of blocks with multiline wrapping of type
210
- if (tokens.tag === '' && tokens.type) {
211
- return tokens;
212
- }
213
- const spacings = {
214
- postDelimiter: customSpacings?.postDelimiter || 1,
215
- postName: customSpacings?.postName || 1,
216
- postTag: customSpacings?.postTag || 1,
217
- postType: customSpacings?.postType || 1
218
- };
219
- tokens.postDelimiter = nothingAfter.delim ? '' : space(spacings.postDelimiter);
220
- if (!nothingAfter.tag) {
221
- tokens.postTag = space(width.tag - tokens.tag.length + spacings.postTag);
222
- }
223
- if (!nothingAfter.type) {
224
- tokens.postType = space(width.type - tokens.type.length + spacings.postType + untypedTypeAdjustment);
225
- }
226
- if (!nothingAfter.name) {
227
- // If post name is empty for all lines (name width 0), don't add post name spacing.
228
- tokens.postName = width.name === 0 ? '' : space(width.name - tokens.name.length + spacings.postName + untypedNameAdjustment);
229
- }
230
- return tokens;
231
- };
232
-
233
- /**
234
- * @param {import('comment-parser').Line} line
235
- * @param {import('./iterateJsdoc.js').Integer} index
236
- * @param {import('comment-parser').Line[]} source
237
- * @param {TypelessInfo} typelessInfo
238
- * @param {string|false} indentTag
239
- * @returns {import('comment-parser').Line}
240
- */
241
- const update = (line, index, source, typelessInfo, indentTag) => {
242
- /** @type {import('comment-parser').Tokens} */
243
- const tokens = {
244
- ...line.tokens
245
- };
246
- if (tokens.tag !== '') {
247
- intoTags = true;
248
- }
249
- const isEmpty = tokens.tag === '' && tokens.name === '' && tokens.type === '' && tokens.description === '';
250
-
251
- // dangling '*/'
252
- if (tokens.end === '*/' && isEmpty) {
253
- tokens.start = indent + ' ';
254
- return {
255
- ...line,
256
- tokens
257
- };
258
- }
259
- switch (tokens.delimiter) {
260
- case '*':
261
- tokens.start = indent + ' ';
262
- break;
263
- case '/**':
264
- tokens.start = indent;
265
- break;
266
- default:
267
- tokens.delimiter = '';
268
-
269
- // compensate delimiter
270
- tokens.start = indent + ' ';
271
- }
272
- if (!intoTags) {
273
- if (tokens.description === '') {
274
- tokens.postDelimiter = '';
275
- } else if (!preserveMainDescriptionPostDelimiter) {
276
- tokens.postDelimiter = ' ';
277
- }
278
- return {
279
- ...line,
280
- tokens
281
- };
282
- }
283
- const postHyphenSpacing = customSpacings?.postHyphen ?? 1;
284
- const hyphenSpacing = /^\s*-\s+/v;
285
- tokens.description = tokens.description.replace(hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '));
286
-
287
- // Not align.
288
- if (shouldAlign(tags, index, source)) {
289
- alignTokens(tokens, typelessInfo);
290
- if (!disableWrapIndent && indentTag) {
291
- tokens.postDelimiter += wrapIndent;
292
- }
293
- }
294
- return {
295
- ...line,
296
- tokens
297
- };
298
- };
299
- return ({
300
- source,
301
- ...fields
302
- }) => {
303
- width = source.reduce(getWidth(tags), {
304
- ...zeroWidth
305
- });
306
- const typelessInfo = getTypelessInfo(fields);
307
- let tagIndentMode = false;
308
- return rewireSource({
309
- ...fields,
310
- source: source.map((line, index) => {
311
- const indentTag = !disableWrapIndent && tagIndentMode && !line.tokens.tag && line.tokens.description;
312
- const ret = update(line, index, source, typelessInfo, indentTag);
313
- if (!disableWrapIndent && line.tokens.tag) {
314
- tagIndentMode = true;
315
- }
316
- return ret;
317
- })
318
- });
319
- };
106
+ * @param {{
107
+ * customSpacings: import('../src/rules/checkLineAlignment.js').CustomSpacings,
108
+ * tags: string[],
109
+ * indent: string,
110
+ * preserveMainDescriptionPostDelimiter: boolean,
111
+ * wrapIndent: string,
112
+ * disableWrapIndent: boolean,
113
+ * }} cfg
114
+ * @returns {(
115
+ * block: import('comment-parser').Block
116
+ * ) => import('comment-parser').Block}
117
+ */
118
+ const alignTransform = ({ customSpacings, disableWrapIndent, indent, preserveMainDescriptionPostDelimiter, tags, wrapIndent }) => {
119
+ let intoTags = false;
120
+ /** @type {Width} */
121
+ let width;
122
+ /**
123
+ * @param {import('comment-parser').Tokens} tokens
124
+ * @param {TypelessInfo} typelessInfo
125
+ * @returns {import('comment-parser').Tokens}
126
+ */
127
+ const alignTokens = (tokens, typelessInfo) => {
128
+ const nothingAfter = {
129
+ delim: false,
130
+ name: false,
131
+ tag: false,
132
+ type: false
133
+ };
134
+ if (tokens.description === "") {
135
+ nothingAfter.name = true;
136
+ tokens.postName = "";
137
+ if (tokens.name === "") {
138
+ nothingAfter.type = true;
139
+ tokens.postType = "";
140
+ if (tokens.type === "") {
141
+ nothingAfter.tag = true;
142
+ tokens.postTag = "";
143
+ /* c8 ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */
144
+ if (tokens.tag === "") nothingAfter.delim = true;
145
+ }
146
+ }
147
+ }
148
+ let untypedNameAdjustment = 0;
149
+ let untypedTypeAdjustment = 0;
150
+ if (typelessInfo.hasNoTypes) {
151
+ nothingAfter.tag = true;
152
+ tokens.postTag = "";
153
+ if (tokens.name === "") untypedNameAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;
154
+ else {
155
+ untypedNameAdjustment = typelessInfo.maxNamedTagLength > typelessInfo.maxUnnamedTagLength ? 0 : Math.max(0, typelessInfo.maxUnnamedTagLength - (tokens.tag.length + tokens.name.length + 1));
156
+ untypedTypeAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;
157
+ }
158
+ }
159
+ if (tokens.tag === "" && tokens.type) return tokens;
160
+ const spacings = {
161
+ postDelimiter: customSpacings?.postDelimiter || 1,
162
+ postName: customSpacings?.postName || 1,
163
+ postTag: customSpacings?.postTag || 1,
164
+ postType: customSpacings?.postType || 1
165
+ };
166
+ tokens.postDelimiter = nothingAfter.delim ? "" : space(spacings.postDelimiter);
167
+ if (!nothingAfter.tag) tokens.postTag = space(width.tag - tokens.tag.length + spacings.postTag);
168
+ if (!nothingAfter.type) tokens.postType = space(width.type - tokens.type.length + spacings.postType + untypedTypeAdjustment);
169
+ if (!nothingAfter.name) tokens.postName = width.name === 0 ? "" : space(width.name - tokens.name.length + spacings.postName + untypedNameAdjustment);
170
+ return tokens;
171
+ };
172
+ /**
173
+ * @param {import('comment-parser').Line} line
174
+ * @param {import('./iterateJsdoc.js').Integer} index
175
+ * @param {import('comment-parser').Line[]} source
176
+ * @param {TypelessInfo} typelessInfo
177
+ * @param {string|false} indentTag
178
+ * @returns {import('comment-parser').Line}
179
+ */
180
+ const update = (line, index, source, typelessInfo, indentTag) => {
181
+ /** @type {import('comment-parser').Tokens} */
182
+ const tokens = { ...line.tokens };
183
+ if (tokens.tag !== "") intoTags = true;
184
+ const isEmpty = tokens.tag === "" && tokens.name === "" && tokens.type === "" && tokens.description === "";
185
+ if (tokens.end === "*/" && isEmpty) {
186
+ tokens.start = indent + " ";
187
+ return {
188
+ ...line,
189
+ tokens
190
+ };
191
+ }
192
+ switch (tokens.delimiter) {
193
+ case "*":
194
+ tokens.start = indent + " ";
195
+ break;
196
+ case "/**":
197
+ tokens.start = indent;
198
+ break;
199
+ default:
200
+ tokens.delimiter = "";
201
+ tokens.start = indent + " ";
202
+ }
203
+ if (!intoTags) {
204
+ if (tokens.description === "") tokens.postDelimiter = "";
205
+ else if (!preserveMainDescriptionPostDelimiter) tokens.postDelimiter = " ";
206
+ return {
207
+ ...line,
208
+ tokens
209
+ };
210
+ }
211
+ const postHyphenSpacing = customSpacings?.postHyphen ?? 1;
212
+ const hyphenSpacing = /^\s*-\s+/v;
213
+ tokens.description = tokens.description.replace(hyphenSpacing, "-" + "".padStart(postHyphenSpacing, " "));
214
+ if (shouldAlign(tags, index, source)) {
215
+ alignTokens(tokens, typelessInfo);
216
+ if (!disableWrapIndent && indentTag) tokens.postDelimiter += wrapIndent;
217
+ }
218
+ return {
219
+ ...line,
220
+ tokens
221
+ };
222
+ };
223
+ return ({ source,...fields }) => {
224
+ width = source.reduce(getWidth(tags), { ...zeroWidth });
225
+ const typelessInfo = getTypelessInfo(fields);
226
+ let tagIndentMode = false;
227
+ return rewireSource({
228
+ ...fields,
229
+ source: source.map((line, index) => {
230
+ const indentTag = !disableWrapIndent && tagIndentMode && !line.tokens.tag && line.tokens.description;
231
+ const ret = update(line, index, source, typelessInfo, indentTag);
232
+ if (!disableWrapIndent && line.tokens.tag) tagIndentMode = true;
233
+ return ret;
234
+ })
235
+ });
236
+ };
320
237
  };
321
- var _default = exports.default = alignTransform;
322
- module.exports = exports.default;
238
+ var alignTransform_default = alignTransform;
239
+
240
+ //#endregion
241
+ exports.default = alignTransform_default;
323
242
  //# sourceMappingURL=alignTransform.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"alignTransform.cjs","names":["_commentParser","require","rewireSource","util","zeroWidth","name","start","tag","type","shouldAlign","tags","index","source","tokens","replace","includesTag","includes","iterator","previousTag","getWidth","width","Math","max","length","delimiter","getTypelessInfo","fields","hasNoTypes","every","maxNamedTagLength","map","filter","maxUnnamedTagLength","space","len","padStart","alignTransform","customSpacings","disableWrapIndent","indent","preserveMainDescriptionPostDelimiter","wrapIndent","intoTags","alignTokens","typelessInfo","nothingAfter","delim","description","postName","postType","postTag","untypedNameAdjustment","untypedTypeAdjustment","spacings","postDelimiter","update","line","indentTag","isEmpty","end","postHyphenSpacing","postHyphen","hyphenSpacing","reduce","tagIndentMode","ret","_default","exports","default","module"],"sources":["../src/alignTransform.js"],"sourcesContent":["/**\n * Transform based on https://github.com/syavorsky/comment-parser/blob/master/src/transforms/align.ts\n *\n * It contains some customizations to align based on the tags, and some custom options.\n */\n\nimport {\n // `comment-parser/primitives` export\n util,\n} from 'comment-parser';\n\n/**\n * @typedef {{\n * hasNoTypes: boolean,\n * maxNamedTagLength: import('./iterateJsdoc.js').Integer,\n * maxUnnamedTagLength: import('./iterateJsdoc.js').Integer\n * }} TypelessInfo\n */\n\nconst {\n rewireSource,\n} = util;\n\n/**\n * @typedef {{\n * name: import('./iterateJsdoc.js').Integer,\n * start: import('./iterateJsdoc.js').Integer,\n * tag: import('./iterateJsdoc.js').Integer,\n * type: import('./iterateJsdoc.js').Integer\n * }} Width\n */\n\n/** @type {Width} */\nconst zeroWidth = {\n name: 0,\n start: 0,\n tag: 0,\n type: 0,\n};\n\n/**\n * @param {string[]} tags\n * @param {import('./iterateJsdoc.js').Integer} index\n * @param {import('comment-parser').Line[]} source\n * @returns {boolean}\n */\nconst shouldAlign = (tags, index, source) => {\n const tag = source[index].tokens.tag.replace('@', '');\n const includesTag = tags.includes(tag);\n\n if (includesTag) {\n return true;\n }\n\n if (tag !== '') {\n return false;\n }\n\n for (let iterator = index; iterator >= 0; iterator--) {\n const previousTag = source[iterator].tokens.tag.replace('@', '');\n\n if (previousTag !== '') {\n if (tags.includes(previousTag)) {\n return true;\n }\n\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @param {string[]} tags\n * @returns {(\n * width: Width,\n * line: {\n * tokens: import('comment-parser').Tokens\n * },\n * index: import('./iterateJsdoc.js').Integer,\n * source: import('comment-parser').Line[]\n * ) => Width}\n */\nconst getWidth = (tags) => {\n return (width, {\n tokens,\n }, index, source) => {\n if (!shouldAlign(tags, index, source)) {\n return width;\n }\n\n return {\n name: Math.max(width.name, tokens.name.length),\n start: tokens.delimiter === '/**' ? tokens.start.length : width.start,\n tag: Math.max(width.tag, tokens.tag.length),\n type: Math.max(width.type, tokens.type.length),\n };\n };\n};\n\n/**\n * @param {{\n * description: string;\n * tags: import('comment-parser').Spec[];\n * problems: import('comment-parser').Problem[];\n * }} fields\n * @returns {TypelessInfo}\n */\nconst getTypelessInfo = (fields) => {\n const hasNoTypes = fields.tags.every(({\n type,\n }) => {\n return !type;\n });\n const maxNamedTagLength = Math.max(...fields.tags.map(({\n name,\n tag,\n }) => {\n return name.length === 0 ? -1 : tag.length;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n const maxUnnamedTagLength = Math.max(...fields.tags.map(({\n name,\n tag,\n }) => {\n return name.length === 0 ? tag.length : -1;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n return {\n hasNoTypes,\n maxNamedTagLength,\n maxUnnamedTagLength,\n };\n};\n\n/**\n * @param {import('./iterateJsdoc.js').Integer} len\n * @returns {string}\n */\nconst space = (len) => {\n return ''.padStart(len, ' ');\n};\n\n/**\n * @param {{\n * customSpacings: import('../src/rules/checkLineAlignment.js').CustomSpacings,\n * tags: string[],\n * indent: string,\n * preserveMainDescriptionPostDelimiter: boolean,\n * wrapIndent: string,\n * disableWrapIndent: boolean,\n * }} cfg\n * @returns {(\n * block: import('comment-parser').Block\n * ) => import('comment-parser').Block}\n */\nconst alignTransform = ({\n customSpacings,\n disableWrapIndent,\n indent,\n preserveMainDescriptionPostDelimiter,\n tags,\n wrapIndent,\n}) => {\n let intoTags = false;\n /** @type {Width} */\n let width;\n\n /**\n * @param {import('comment-parser').Tokens} tokens\n * @param {TypelessInfo} typelessInfo\n * @returns {import('comment-parser').Tokens}\n */\n const alignTokens = (tokens, typelessInfo) => {\n const nothingAfter = {\n delim: false,\n name: false,\n tag: false,\n type: false,\n };\n\n if (tokens.description === '') {\n nothingAfter.name = true;\n tokens.postName = '';\n\n if (tokens.name === '') {\n nothingAfter.type = true;\n tokens.postType = '';\n\n if (tokens.type === '') {\n nothingAfter.tag = true;\n tokens.postTag = '';\n\n /* c8 ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */\n if (tokens.tag === '') {\n nothingAfter.delim = true;\n }\n }\n }\n }\n\n let untypedNameAdjustment = 0;\n let untypedTypeAdjustment = 0;\n if (typelessInfo.hasNoTypes) {\n nothingAfter.tag = true;\n tokens.postTag = '';\n if (tokens.name === '') {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n } else {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength > typelessInfo.maxUnnamedTagLength ? 0 :\n Math.max(0, typelessInfo.maxUnnamedTagLength - (tokens.tag.length + tokens.name.length + 1));\n untypedTypeAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n }\n }\n\n // Todo: Avoid fixing alignment of blocks with multiline wrapping of type\n if (tokens.tag === '' && tokens.type) {\n return tokens;\n }\n\n const spacings = {\n postDelimiter: customSpacings?.postDelimiter || 1,\n postName: customSpacings?.postName || 1,\n postTag: customSpacings?.postTag || 1,\n postType: customSpacings?.postType || 1,\n };\n\n tokens.postDelimiter = nothingAfter.delim ? '' : space(spacings.postDelimiter);\n\n if (!nothingAfter.tag) {\n tokens.postTag = space(width.tag - tokens.tag.length + spacings.postTag);\n }\n\n if (!nothingAfter.type) {\n tokens.postType = space(width.type - tokens.type.length + spacings.postType + untypedTypeAdjustment);\n }\n\n if (!nothingAfter.name) {\n // If post name is empty for all lines (name width 0), don't add post name spacing.\n tokens.postName = width.name === 0 ? '' : space(width.name - tokens.name.length + spacings.postName + untypedNameAdjustment);\n }\n\n return tokens;\n };\n\n /**\n * @param {import('comment-parser').Line} line\n * @param {import('./iterateJsdoc.js').Integer} index\n * @param {import('comment-parser').Line[]} source\n * @param {TypelessInfo} typelessInfo\n * @param {string|false} indentTag\n * @returns {import('comment-parser').Line}\n */\n const update = (line, index, source, typelessInfo, indentTag) => {\n /** @type {import('comment-parser').Tokens} */\n const tokens = {\n ...line.tokens,\n };\n\n if (tokens.tag !== '') {\n intoTags = true;\n }\n\n const isEmpty =\n tokens.tag === '' &&\n tokens.name === '' &&\n tokens.type === '' &&\n tokens.description === '';\n\n // dangling '*/'\n if (tokens.end === '*/' && isEmpty) {\n tokens.start = indent + ' ';\n\n return {\n ...line,\n tokens,\n };\n }\n\n switch (tokens.delimiter) {\n case '*':\n tokens.start = indent + ' ';\n break;\n case '/**':\n tokens.start = indent;\n break;\n default:\n tokens.delimiter = '';\n\n // compensate delimiter\n tokens.start = indent + ' ';\n }\n\n if (!intoTags) {\n if (tokens.description === '') {\n tokens.postDelimiter = '';\n } else if (!preserveMainDescriptionPostDelimiter) {\n tokens.postDelimiter = ' ';\n }\n\n return {\n ...line,\n tokens,\n };\n }\n\n const postHyphenSpacing = customSpacings?.postHyphen ?? 1;\n const hyphenSpacing = /^\\s*-\\s+/v;\n tokens.description = tokens.description.replace(\n hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '),\n );\n\n // Not align.\n if (shouldAlign(tags, index, source)) {\n alignTokens(tokens, typelessInfo);\n if (!disableWrapIndent && indentTag) {\n tokens.postDelimiter += wrapIndent;\n }\n }\n\n return {\n ...line,\n tokens,\n };\n };\n\n return ({\n source,\n ...fields\n }) => {\n width = source.reduce(getWidth(tags), {\n ...zeroWidth,\n });\n\n const typelessInfo = getTypelessInfo(fields);\n\n let tagIndentMode = false;\n\n return rewireSource({\n ...fields,\n source: source.map((line, index) => {\n const indentTag = !disableWrapIndent && tagIndentMode && !line.tokens.tag && line.tokens.description;\n const ret = update(line, index, source, typelessInfo, indentTag);\n\n if (!disableWrapIndent && line.tokens.tag) {\n tagIndentMode = true;\n }\n\n return ret;\n }),\n });\n };\n};\n\nexport default alignTransform;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"alignTransform.cjs","names":["util"],"sources":["../src/alignTransform.js"],"sourcesContent":["/**\n * Transform based on https://github.com/syavorsky/comment-parser/blob/master/src/transforms/align.ts\n *\n * It contains some customizations to align based on the tags, and some custom options.\n */\n\nimport {\n // `comment-parser/primitives` export\n util,\n} from 'comment-parser';\n\n/**\n * @typedef {{\n * hasNoTypes: boolean,\n * maxNamedTagLength: import('./iterateJsdoc.js').Integer,\n * maxUnnamedTagLength: import('./iterateJsdoc.js').Integer\n * }} TypelessInfo\n */\n\nconst {\n rewireSource,\n} = util;\n\n/**\n * @typedef {{\n * name: import('./iterateJsdoc.js').Integer,\n * start: import('./iterateJsdoc.js').Integer,\n * tag: import('./iterateJsdoc.js').Integer,\n * type: import('./iterateJsdoc.js').Integer\n * }} Width\n */\n\n/** @type {Width} */\nconst zeroWidth = {\n name: 0,\n start: 0,\n tag: 0,\n type: 0,\n};\n\n/**\n * @param {string[]} tags\n * @param {import('./iterateJsdoc.js').Integer} index\n * @param {import('comment-parser').Line[]} source\n * @returns {boolean}\n */\nconst shouldAlign = (tags, index, source) => {\n const tag = source[index].tokens.tag.replace('@', '');\n const includesTag = tags.includes(tag);\n\n if (includesTag) {\n return true;\n }\n\n if (tag !== '') {\n return false;\n }\n\n for (let iterator = index; iterator >= 0; iterator--) {\n const previousTag = source[iterator].tokens.tag.replace('@', '');\n\n if (previousTag !== '') {\n if (tags.includes(previousTag)) {\n return true;\n }\n\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @param {string[]} tags\n * @returns {(\n * width: Width,\n * line: {\n * tokens: import('comment-parser').Tokens\n * },\n * index: import('./iterateJsdoc.js').Integer,\n * source: import('comment-parser').Line[]\n * ) => Width}\n */\nconst getWidth = (tags) => {\n return (width, {\n tokens,\n }, index, source) => {\n if (!shouldAlign(tags, index, source)) {\n return width;\n }\n\n return {\n name: Math.max(width.name, tokens.name.length),\n start: tokens.delimiter === '/**' ? tokens.start.length : width.start,\n tag: Math.max(width.tag, tokens.tag.length),\n type: Math.max(width.type, tokens.type.length),\n };\n };\n};\n\n/**\n * @param {{\n * description: string;\n * tags: import('comment-parser').Spec[];\n * problems: import('comment-parser').Problem[];\n * }} fields\n * @returns {TypelessInfo}\n */\nconst getTypelessInfo = (fields) => {\n const hasNoTypes = fields.tags.every(({\n type,\n }) => {\n return !type;\n });\n const maxNamedTagLength = Math.max(...fields.tags.map(({\n name,\n tag,\n }) => {\n return name.length === 0 ? -1 : tag.length;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n const maxUnnamedTagLength = Math.max(...fields.tags.map(({\n name,\n tag,\n }) => {\n return name.length === 0 ? tag.length : -1;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n return {\n hasNoTypes,\n maxNamedTagLength,\n maxUnnamedTagLength,\n };\n};\n\n/**\n * @param {import('./iterateJsdoc.js').Integer} len\n * @returns {string}\n */\nconst space = (len) => {\n return ''.padStart(len, ' ');\n};\n\n/**\n * @param {{\n * customSpacings: import('../src/rules/checkLineAlignment.js').CustomSpacings,\n * tags: string[],\n * indent: string,\n * preserveMainDescriptionPostDelimiter: boolean,\n * wrapIndent: string,\n * disableWrapIndent: boolean,\n * }} cfg\n * @returns {(\n * block: import('comment-parser').Block\n * ) => import('comment-parser').Block}\n */\nconst alignTransform = ({\n customSpacings,\n disableWrapIndent,\n indent,\n preserveMainDescriptionPostDelimiter,\n tags,\n wrapIndent,\n}) => {\n let intoTags = false;\n /** @type {Width} */\n let width;\n\n /**\n * @param {import('comment-parser').Tokens} tokens\n * @param {TypelessInfo} typelessInfo\n * @returns {import('comment-parser').Tokens}\n */\n const alignTokens = (tokens, typelessInfo) => {\n const nothingAfter = {\n delim: false,\n name: false,\n tag: false,\n type: false,\n };\n\n if (tokens.description === '') {\n nothingAfter.name = true;\n tokens.postName = '';\n\n if (tokens.name === '') {\n nothingAfter.type = true;\n tokens.postType = '';\n\n if (tokens.type === '') {\n nothingAfter.tag = true;\n tokens.postTag = '';\n\n /* c8 ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */\n if (tokens.tag === '') {\n nothingAfter.delim = true;\n }\n }\n }\n }\n\n let untypedNameAdjustment = 0;\n let untypedTypeAdjustment = 0;\n if (typelessInfo.hasNoTypes) {\n nothingAfter.tag = true;\n tokens.postTag = '';\n if (tokens.name === '') {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n } else {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength > typelessInfo.maxUnnamedTagLength ? 0 :\n Math.max(0, typelessInfo.maxUnnamedTagLength - (tokens.tag.length + tokens.name.length + 1));\n untypedTypeAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n }\n }\n\n // Todo: Avoid fixing alignment of blocks with multiline wrapping of type\n if (tokens.tag === '' && tokens.type) {\n return tokens;\n }\n\n const spacings = {\n postDelimiter: customSpacings?.postDelimiter || 1,\n postName: customSpacings?.postName || 1,\n postTag: customSpacings?.postTag || 1,\n postType: customSpacings?.postType || 1,\n };\n\n tokens.postDelimiter = nothingAfter.delim ? '' : space(spacings.postDelimiter);\n\n if (!nothingAfter.tag) {\n tokens.postTag = space(width.tag - tokens.tag.length + spacings.postTag);\n }\n\n if (!nothingAfter.type) {\n tokens.postType = space(width.type - tokens.type.length + spacings.postType + untypedTypeAdjustment);\n }\n\n if (!nothingAfter.name) {\n // If post name is empty for all lines (name width 0), don't add post name spacing.\n tokens.postName = width.name === 0 ? '' : space(width.name - tokens.name.length + spacings.postName + untypedNameAdjustment);\n }\n\n return tokens;\n };\n\n /**\n * @param {import('comment-parser').Line} line\n * @param {import('./iterateJsdoc.js').Integer} index\n * @param {import('comment-parser').Line[]} source\n * @param {TypelessInfo} typelessInfo\n * @param {string|false} indentTag\n * @returns {import('comment-parser').Line}\n */\n const update = (line, index, source, typelessInfo, indentTag) => {\n /** @type {import('comment-parser').Tokens} */\n const tokens = {\n ...line.tokens,\n };\n\n if (tokens.tag !== '') {\n intoTags = true;\n }\n\n const isEmpty =\n tokens.tag === '' &&\n tokens.name === '' &&\n tokens.type === '' &&\n tokens.description === '';\n\n // dangling '*/'\n if (tokens.end === '*/' && isEmpty) {\n tokens.start = indent + ' ';\n\n return {\n ...line,\n tokens,\n };\n }\n\n switch (tokens.delimiter) {\n case '*':\n tokens.start = indent + ' ';\n break;\n case '/**':\n tokens.start = indent;\n break;\n default:\n tokens.delimiter = '';\n\n // compensate delimiter\n tokens.start = indent + ' ';\n }\n\n if (!intoTags) {\n if (tokens.description === '') {\n tokens.postDelimiter = '';\n } else if (!preserveMainDescriptionPostDelimiter) {\n tokens.postDelimiter = ' ';\n }\n\n return {\n ...line,\n tokens,\n };\n }\n\n const postHyphenSpacing = customSpacings?.postHyphen ?? 1;\n const hyphenSpacing = /^\\s*-\\s+/v;\n tokens.description = tokens.description.replace(\n hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '),\n );\n\n // Not align.\n if (shouldAlign(tags, index, source)) {\n alignTokens(tokens, typelessInfo);\n if (!disableWrapIndent && indentTag) {\n tokens.postDelimiter += wrapIndent;\n }\n }\n\n return {\n ...line,\n tokens,\n };\n };\n\n return ({\n source,\n ...fields\n }) => {\n width = source.reduce(getWidth(tags), {\n ...zeroWidth,\n });\n\n const typelessInfo = getTypelessInfo(fields);\n\n let tagIndentMode = false;\n\n return rewireSource({\n ...fields,\n source: source.map((line, index) => {\n const indentTag = !disableWrapIndent && tagIndentMode && !line.tokens.tag && line.tokens.description;\n const ret = update(line, index, source, typelessInfo, indentTag);\n\n if (!disableWrapIndent && line.tokens.tag) {\n tagIndentMode = true;\n }\n\n return ret;\n }),\n });\n };\n};\n\nexport default alignTransform;\n"],"mappings":"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"}