@herb-tools/linter 0.7.4 → 0.8.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 (395) hide show
  1. package/README.md +253 -13
  2. package/dist/herb-lint.js +26087 -3414
  3. package/dist/herb-lint.js.map +1 -1
  4. package/dist/index.cjs +5783 -1568
  5. package/dist/index.cjs.map +1 -1
  6. package/dist/index.js +5749 -1569
  7. package/dist/index.js.map +1 -1
  8. package/dist/loader.cjs +17010 -0
  9. package/dist/loader.cjs.map +1 -0
  10. package/dist/loader.js +16879 -0
  11. package/dist/loader.js.map +1 -0
  12. package/dist/package.json +13 -5
  13. package/dist/src/cli/argument-parser.js +42 -35
  14. package/dist/src/cli/argument-parser.js.map +1 -1
  15. package/dist/src/cli/file-processor.js +124 -23
  16. package/dist/src/cli/file-processor.js.map +1 -1
  17. package/dist/src/cli/formatters/detailed-formatter.js +18 -3
  18. package/dist/src/cli/formatters/detailed-formatter.js.map +1 -1
  19. package/dist/src/cli/formatters/github-actions-formatter.js +15 -1
  20. package/dist/src/cli/formatters/github-actions-formatter.js.map +1 -1
  21. package/dist/src/cli/formatters/json-formatter.js +3 -0
  22. package/dist/src/cli/formatters/json-formatter.js.map +1 -1
  23. package/dist/src/cli/formatters/simple-formatter.js +20 -7
  24. package/dist/src/cli/formatters/simple-formatter.js.map +1 -1
  25. package/dist/src/cli/output-manager.js +22 -3
  26. package/dist/src/cli/output-manager.js.map +1 -1
  27. package/dist/src/cli/summary-reporter.js +26 -3
  28. package/dist/src/cli/summary-reporter.js.map +1 -1
  29. package/dist/src/cli.js +109 -43
  30. package/dist/src/cli.js.map +1 -1
  31. package/dist/src/custom-rule-loader.js +139 -0
  32. package/dist/src/custom-rule-loader.js.map +1 -0
  33. package/dist/src/herb-disable-comment-utils.js +129 -0
  34. package/dist/src/herb-disable-comment-utils.js.map +1 -0
  35. package/dist/src/index.js +1 -0
  36. package/dist/src/index.js.map +1 -1
  37. package/dist/src/linter.js +369 -34
  38. package/dist/src/linter.js.map +1 -1
  39. package/dist/src/loader.js +17 -0
  40. package/dist/src/loader.js.map +1 -0
  41. package/dist/src/rules/erb-comment-syntax.js +48 -0
  42. package/dist/src/rules/erb-comment-syntax.js.map +1 -0
  43. package/dist/src/rules/erb-no-case-node-children.js +52 -0
  44. package/dist/src/rules/erb-no-case-node-children.js.map +1 -0
  45. package/dist/src/rules/erb-no-empty-tags.js +7 -1
  46. package/dist/src/rules/erb-no-empty-tags.js.map +1 -1
  47. package/dist/src/rules/erb-no-extra-newline.js +65 -0
  48. package/dist/src/rules/erb-no-extra-newline.js.map +1 -0
  49. package/dist/src/rules/erb-no-extra-whitespace-inside-tags.js +95 -0
  50. package/dist/src/rules/erb-no-extra-whitespace-inside-tags.js.map +1 -0
  51. package/dist/src/rules/erb-no-output-control-flow.js +7 -1
  52. package/dist/src/rules/erb-no-output-control-flow.js.map +1 -1
  53. package/dist/src/rules/erb-no-silent-tag-in-attribute-name.js +7 -1
  54. package/dist/src/rules/erb-no-silent-tag-in-attribute-name.js.map +1 -1
  55. package/dist/src/rules/erb-prefer-image-tag-helper.js +7 -1
  56. package/dist/src/rules/erb-prefer-image-tag-helper.js.map +1 -1
  57. package/dist/src/rules/erb-require-trailing-newline.js +35 -0
  58. package/dist/src/rules/erb-require-trailing-newline.js.map +1 -0
  59. package/dist/src/rules/erb-require-whitespace-inside-tags.js +70 -20
  60. package/dist/src/rules/erb-require-whitespace-inside-tags.js.map +1 -1
  61. package/dist/src/rules/erb-right-trim.js +45 -0
  62. package/dist/src/rules/erb-right-trim.js.map +1 -0
  63. package/dist/src/rules/herb-disable-comment-base.js +51 -0
  64. package/dist/src/rules/herb-disable-comment-base.js.map +1 -0
  65. package/dist/src/rules/herb-disable-comment-malformed.js +51 -0
  66. package/dist/src/rules/herb-disable-comment-malformed.js.map +1 -0
  67. package/dist/src/rules/herb-disable-comment-missing-rules.js +29 -0
  68. package/dist/src/rules/herb-disable-comment-missing-rules.js.map +1 -0
  69. package/dist/src/rules/herb-disable-comment-no-duplicate-rules.js +32 -0
  70. package/dist/src/rules/herb-disable-comment-no-duplicate-rules.js.map +1 -0
  71. package/dist/src/rules/herb-disable-comment-no-redundant-all.js +31 -0
  72. package/dist/src/rules/herb-disable-comment-no-redundant-all.js.map +1 -0
  73. package/dist/src/rules/herb-disable-comment-unnecessary.js +65 -0
  74. package/dist/src/rules/herb-disable-comment-unnecessary.js.map +1 -0
  75. package/dist/src/rules/herb-disable-comment-valid-rule-name.js +44 -0
  76. package/dist/src/rules/herb-disable-comment-valid-rule-name.js.map +1 -0
  77. package/dist/src/rules/html-anchor-require-href.js +7 -1
  78. package/dist/src/rules/html-anchor-require-href.js.map +1 -1
  79. package/dist/src/rules/html-aria-attribute-must-be-valid.js +7 -1
  80. package/dist/src/rules/html-aria-attribute-must-be-valid.js.map +1 -1
  81. package/dist/src/rules/html-aria-label-is-well-formatted.js +9 -3
  82. package/dist/src/rules/html-aria-label-is-well-formatted.js.map +1 -1
  83. package/dist/src/rules/html-aria-level-must-be-valid.js +6 -0
  84. package/dist/src/rules/html-aria-level-must-be-valid.js.map +1 -1
  85. package/dist/src/rules/html-aria-role-heading-requires-level.js +7 -1
  86. package/dist/src/rules/html-aria-role-heading-requires-level.js.map +1 -1
  87. package/dist/src/rules/html-aria-role-must-be-valid.js +7 -1
  88. package/dist/src/rules/html-aria-role-must-be-valid.js.map +1 -1
  89. package/dist/src/rules/html-attribute-double-quotes.js +29 -2
  90. package/dist/src/rules/html-attribute-double-quotes.js.map +1 -1
  91. package/dist/src/rules/html-attribute-equals-spacing.js +18 -2
  92. package/dist/src/rules/html-attribute-equals-spacing.js.map +1 -1
  93. package/dist/src/rules/html-attribute-values-require-quotes.js +39 -3
  94. package/dist/src/rules/html-attribute-values-require-quotes.js.map +1 -1
  95. package/dist/src/rules/html-avoid-both-disabled-and-aria-disabled.js +7 -1
  96. package/dist/src/rules/html-avoid-both-disabled-and-aria-disabled.js.map +1 -1
  97. package/dist/src/rules/html-body-only-elements.js +46 -0
  98. package/dist/src/rules/html-body-only-elements.js.map +1 -0
  99. package/dist/src/rules/html-boolean-attributes-no-value.js +18 -1
  100. package/dist/src/rules/html-boolean-attributes-no-value.js.map +1 -1
  101. package/dist/src/rules/html-head-only-elements.js +51 -0
  102. package/dist/src/rules/html-head-only-elements.js.map +1 -0
  103. package/dist/src/rules/html-iframe-has-title.js +8 -2
  104. package/dist/src/rules/html-iframe-has-title.js.map +1 -1
  105. package/dist/src/rules/html-img-require-alt.js +7 -1
  106. package/dist/src/rules/html-img-require-alt.js.map +1 -1
  107. package/dist/src/rules/html-input-require-autocomplete.js +70 -0
  108. package/dist/src/rules/html-input-require-autocomplete.js.map +1 -0
  109. package/dist/src/rules/html-navigation-has-label.js +7 -1
  110. package/dist/src/rules/html-navigation-has-label.js.map +1 -1
  111. package/dist/src/rules/html-no-aria-hidden-on-focusable.js +7 -1
  112. package/dist/src/rules/html-no-aria-hidden-on-focusable.js.map +1 -1
  113. package/dist/src/rules/html-no-block-inside-inline.js +7 -1
  114. package/dist/src/rules/html-no-block-inside-inline.js.map +1 -1
  115. package/dist/src/rules/html-no-duplicate-attributes.js +7 -1
  116. package/dist/src/rules/html-no-duplicate-attributes.js.map +1 -1
  117. package/dist/src/rules/html-no-duplicate-ids.js +9 -3
  118. package/dist/src/rules/html-no-duplicate-ids.js.map +1 -1
  119. package/dist/src/rules/html-no-duplicate-meta-names.js +136 -0
  120. package/dist/src/rules/html-no-duplicate-meta-names.js.map +1 -0
  121. package/dist/src/rules/html-no-empty-attributes.js +45 -7
  122. package/dist/src/rules/html-no-empty-attributes.js.map +1 -1
  123. package/dist/src/rules/html-no-empty-headings.js +7 -6
  124. package/dist/src/rules/html-no-empty-headings.js.map +1 -1
  125. package/dist/src/rules/html-no-nested-links.js +7 -1
  126. package/dist/src/rules/html-no-nested-links.js.map +1 -1
  127. package/dist/src/rules/html-no-positive-tab-index.js +7 -1
  128. package/dist/src/rules/html-no-positive-tab-index.js.map +1 -1
  129. package/dist/src/rules/html-no-self-closing.js +48 -3
  130. package/dist/src/rules/html-no-self-closing.js.map +1 -1
  131. package/dist/src/rules/html-no-space-in-tag.js +173 -0
  132. package/dist/src/rules/html-no-space-in-tag.js.map +1 -0
  133. package/dist/src/rules/html-no-title-attribute.js +7 -1
  134. package/dist/src/rules/html-no-title-attribute.js.map +1 -1
  135. package/dist/src/rules/html-no-underscores-in-attribute-names.js +7 -1
  136. package/dist/src/rules/html-no-underscores-in-attribute-names.js.map +1 -1
  137. package/dist/src/rules/html-tag-name-lowercase.js +23 -5
  138. package/dist/src/rules/html-tag-name-lowercase.js.map +1 -1
  139. package/dist/src/rules/index.js +20 -2
  140. package/dist/src/rules/index.js.map +1 -1
  141. package/dist/src/rules/parser-no-errors.js +6 -0
  142. package/dist/src/rules/parser-no-errors.js.map +1 -1
  143. package/dist/src/rules/rule-utils.js +211 -31
  144. package/dist/src/rules/rule-utils.js.map +1 -1
  145. package/dist/src/rules/svg-tag-name-capitalization.js +22 -2
  146. package/dist/src/rules/svg-tag-name-capitalization.js.map +1 -1
  147. package/dist/src/{default-rules.js → rules.js} +46 -14
  148. package/dist/src/rules.js.map +1 -0
  149. package/dist/src/types.js +34 -1
  150. package/dist/src/types.js.map +1 -1
  151. package/dist/tsconfig.tsbuildinfo +1 -1
  152. package/dist/types/cli/argument-parser.d.ts +8 -2
  153. package/dist/types/cli/file-processor.d.ts +15 -0
  154. package/dist/types/cli/formatters/json-formatter.d.ts +6 -0
  155. package/dist/types/cli/formatters/simple-formatter.d.ts +1 -0
  156. package/dist/types/cli/summary-reporter.d.ts +6 -0
  157. package/dist/types/cli.d.ts +9 -4
  158. package/dist/types/custom-rule-loader.d.ts +62 -0
  159. package/dist/types/herb-disable-comment-utils.d.ts +69 -0
  160. package/dist/types/index.d.ts +1 -0
  161. package/dist/types/linter.d.ts +99 -3
  162. package/dist/types/loader.d.ts +20 -0
  163. package/dist/types/rules/erb-comment-syntax.d.ts +14 -0
  164. package/dist/types/rules/erb-no-case-node-children.d.ts +8 -0
  165. package/dist/types/rules/erb-no-empty-tags.d.ts +3 -2
  166. package/dist/types/rules/erb-no-extra-newline.d.ts +14 -0
  167. package/dist/types/rules/erb-no-extra-whitespace-inside-tags.d.ts +18 -0
  168. package/dist/types/rules/erb-no-output-control-flow.d.ts +3 -2
  169. package/dist/types/rules/erb-no-silent-tag-in-attribute-name.d.ts +3 -2
  170. package/dist/types/rules/erb-prefer-image-tag-helper.d.ts +3 -2
  171. package/dist/types/rules/erb-require-trailing-newline.d.ts +9 -0
  172. package/dist/types/rules/erb-require-whitespace-inside-tags.d.ts +16 -5
  173. package/dist/types/rules/erb-right-trim.d.ts +14 -0
  174. package/dist/types/rules/herb-disable-comment-base.d.ts +37 -0
  175. package/dist/types/rules/herb-disable-comment-malformed.d.ts +8 -0
  176. package/dist/types/rules/herb-disable-comment-missing-rules.d.ts +8 -0
  177. package/dist/types/rules/herb-disable-comment-no-duplicate-rules.d.ts +8 -0
  178. package/dist/types/rules/herb-disable-comment-no-redundant-all.d.ts +8 -0
  179. package/dist/types/rules/herb-disable-comment-unnecessary.d.ts +8 -0
  180. package/dist/types/rules/herb-disable-comment-valid-rule-name.d.ts +8 -0
  181. package/dist/types/rules/html-anchor-require-href.d.ts +3 -2
  182. package/dist/types/rules/html-aria-attribute-must-be-valid.d.ts +3 -2
  183. package/dist/types/rules/html-aria-label-is-well-formatted.d.ts +3 -2
  184. package/dist/types/rules/html-aria-level-must-be-valid.d.ts +3 -2
  185. package/dist/types/rules/html-aria-role-heading-requires-level.d.ts +3 -2
  186. package/dist/types/rules/html-aria-role-must-be-valid.d.ts +3 -2
  187. package/dist/types/rules/html-attribute-double-quotes.d.ts +13 -5
  188. package/dist/types/rules/html-attribute-equals-spacing.d.ts +12 -5
  189. package/dist/types/rules/html-attribute-values-require-quotes.d.ts +13 -5
  190. package/dist/types/rules/html-avoid-both-disabled-and-aria-disabled.d.ts +3 -2
  191. package/dist/types/rules/html-body-only-elements.d.ts +9 -0
  192. package/dist/types/rules/html-boolean-attributes-no-value.d.ts +12 -5
  193. package/dist/types/rules/html-head-only-elements.d.ts +9 -0
  194. package/dist/types/rules/html-iframe-has-title.d.ts +3 -2
  195. package/dist/types/rules/html-img-require-alt.d.ts +3 -2
  196. package/dist/types/rules/html-input-require-autocomplete.d.ts +8 -0
  197. package/dist/types/rules/html-navigation-has-label.d.ts +3 -2
  198. package/dist/types/rules/html-no-aria-hidden-on-focusable.d.ts +3 -2
  199. package/dist/types/rules/html-no-block-inside-inline.d.ts +3 -2
  200. package/dist/types/rules/html-no-duplicate-attributes.d.ts +3 -2
  201. package/dist/types/rules/html-no-duplicate-ids.d.ts +3 -2
  202. package/dist/types/rules/html-no-duplicate-meta-names.d.ts +9 -0
  203. package/dist/types/rules/html-no-empty-attributes.d.ts +3 -2
  204. package/dist/types/rules/html-no-empty-headings.d.ts +3 -2
  205. package/dist/types/rules/html-no-nested-links.d.ts +3 -2
  206. package/dist/types/rules/html-no-positive-tab-index.d.ts +3 -2
  207. package/dist/types/rules/html-no-self-closing.d.ts +14 -5
  208. package/dist/types/rules/html-no-space-in-tag.d.ts +16 -0
  209. package/dist/types/rules/html-no-title-attribute.d.ts +3 -2
  210. package/dist/types/rules/html-no-underscores-in-attribute-names.d.ts +3 -2
  211. package/dist/types/rules/html-tag-name-lowercase.d.ts +16 -6
  212. package/dist/types/rules/index.d.ts +20 -2
  213. package/dist/types/rules/parser-no-errors.d.ts +2 -1
  214. package/dist/types/rules/rule-utils.d.ts +72 -25
  215. package/dist/types/rules/svg-tag-name-capitalization.d.ts +13 -4
  216. package/dist/types/rules.d.ts +2 -0
  217. package/dist/types/src/cli/argument-parser.d.ts +8 -2
  218. package/dist/types/src/cli/file-processor.d.ts +15 -0
  219. package/dist/types/src/cli/formatters/json-formatter.d.ts +6 -0
  220. package/dist/types/src/cli/formatters/simple-formatter.d.ts +1 -0
  221. package/dist/types/src/cli/summary-reporter.d.ts +6 -0
  222. package/dist/types/src/cli.d.ts +9 -4
  223. package/dist/types/src/custom-rule-loader.d.ts +62 -0
  224. package/dist/types/src/herb-disable-comment-utils.d.ts +69 -0
  225. package/dist/types/src/index.d.ts +1 -0
  226. package/dist/types/src/linter.d.ts +99 -3
  227. package/dist/types/src/loader.d.ts +20 -0
  228. package/dist/types/src/rules/erb-comment-syntax.d.ts +14 -0
  229. package/dist/types/src/rules/erb-no-case-node-children.d.ts +8 -0
  230. package/dist/types/src/rules/erb-no-empty-tags.d.ts +3 -2
  231. package/dist/types/src/rules/erb-no-extra-newline.d.ts +14 -0
  232. package/dist/types/src/rules/erb-no-extra-whitespace-inside-tags.d.ts +18 -0
  233. package/dist/types/src/rules/erb-no-output-control-flow.d.ts +3 -2
  234. package/dist/types/src/rules/erb-no-silent-tag-in-attribute-name.d.ts +3 -2
  235. package/dist/types/src/rules/erb-prefer-image-tag-helper.d.ts +3 -2
  236. package/dist/types/src/rules/erb-require-trailing-newline.d.ts +9 -0
  237. package/dist/types/src/rules/erb-require-whitespace-inside-tags.d.ts +16 -5
  238. package/dist/types/src/rules/erb-right-trim.d.ts +14 -0
  239. package/dist/types/src/rules/herb-disable-comment-base.d.ts +37 -0
  240. package/dist/types/src/rules/herb-disable-comment-malformed.d.ts +8 -0
  241. package/dist/types/src/rules/herb-disable-comment-missing-rules.d.ts +8 -0
  242. package/dist/types/src/rules/herb-disable-comment-no-duplicate-rules.d.ts +8 -0
  243. package/dist/types/src/rules/herb-disable-comment-no-redundant-all.d.ts +8 -0
  244. package/dist/types/src/rules/herb-disable-comment-unnecessary.d.ts +8 -0
  245. package/dist/types/src/rules/herb-disable-comment-valid-rule-name.d.ts +8 -0
  246. package/dist/types/src/rules/html-anchor-require-href.d.ts +3 -2
  247. package/dist/types/src/rules/html-aria-attribute-must-be-valid.d.ts +3 -2
  248. package/dist/types/src/rules/html-aria-label-is-well-formatted.d.ts +3 -2
  249. package/dist/types/src/rules/html-aria-level-must-be-valid.d.ts +3 -2
  250. package/dist/types/src/rules/html-aria-role-heading-requires-level.d.ts +3 -2
  251. package/dist/types/src/rules/html-aria-role-must-be-valid.d.ts +3 -2
  252. package/dist/types/src/rules/html-attribute-double-quotes.d.ts +13 -5
  253. package/dist/types/src/rules/html-attribute-equals-spacing.d.ts +12 -5
  254. package/dist/types/src/rules/html-attribute-values-require-quotes.d.ts +13 -5
  255. package/dist/types/src/rules/html-avoid-both-disabled-and-aria-disabled.d.ts +3 -2
  256. package/dist/types/src/rules/html-body-only-elements.d.ts +9 -0
  257. package/dist/types/src/rules/html-boolean-attributes-no-value.d.ts +12 -5
  258. package/dist/types/src/rules/html-head-only-elements.d.ts +9 -0
  259. package/dist/types/src/rules/html-iframe-has-title.d.ts +3 -2
  260. package/dist/types/src/rules/html-img-require-alt.d.ts +3 -2
  261. package/dist/types/src/rules/html-input-require-autocomplete.d.ts +8 -0
  262. package/dist/types/src/rules/html-navigation-has-label.d.ts +3 -2
  263. package/dist/types/src/rules/html-no-aria-hidden-on-focusable.d.ts +3 -2
  264. package/dist/types/src/rules/html-no-block-inside-inline.d.ts +3 -2
  265. package/dist/types/src/rules/html-no-duplicate-attributes.d.ts +3 -2
  266. package/dist/types/src/rules/html-no-duplicate-ids.d.ts +3 -2
  267. package/dist/types/src/rules/html-no-duplicate-meta-names.d.ts +9 -0
  268. package/dist/types/src/rules/html-no-empty-attributes.d.ts +3 -2
  269. package/dist/types/src/rules/html-no-empty-headings.d.ts +3 -2
  270. package/dist/types/src/rules/html-no-nested-links.d.ts +3 -2
  271. package/dist/types/src/rules/html-no-positive-tab-index.d.ts +3 -2
  272. package/dist/types/src/rules/html-no-self-closing.d.ts +14 -5
  273. package/dist/types/src/rules/html-no-space-in-tag.d.ts +16 -0
  274. package/dist/types/src/rules/html-no-title-attribute.d.ts +3 -2
  275. package/dist/types/src/rules/html-no-underscores-in-attribute-names.d.ts +3 -2
  276. package/dist/types/src/rules/html-tag-name-lowercase.d.ts +16 -6
  277. package/dist/types/src/rules/index.d.ts +20 -2
  278. package/dist/types/src/rules/parser-no-errors.d.ts +2 -1
  279. package/dist/types/src/rules/rule-utils.d.ts +72 -25
  280. package/dist/types/src/rules/svg-tag-name-capitalization.d.ts +13 -4
  281. package/dist/types/src/rules.d.ts +2 -0
  282. package/dist/types/src/types.d.ts +102 -11
  283. package/dist/types/types.d.ts +102 -11
  284. package/docs/rules/README.md +19 -3
  285. package/docs/rules/erb-comment-syntax.md +44 -0
  286. package/docs/rules/erb-no-case-node-children.md +50 -0
  287. package/docs/rules/erb-no-extra-newline.md +74 -0
  288. package/docs/rules/erb-no-extra-whitespace-inside-tags.md +39 -0
  289. package/docs/rules/{erb-requires-trailing-newline.md → erb-require-trailing-newline.md} +1 -1
  290. package/docs/rules/erb-right-trim.md +52 -0
  291. package/docs/rules/herb-disable-comment-malformed.md +45 -0
  292. package/docs/rules/herb-disable-comment-missing-rules.md +60 -0
  293. package/docs/rules/herb-disable-comment-no-duplicate-rules.md +49 -0
  294. package/docs/rules/herb-disable-comment-no-redundant-all.md +53 -0
  295. package/docs/rules/herb-disable-comment-unnecessary.md +44 -0
  296. package/docs/rules/herb-disable-comment-valid-rule-name.md +41 -0
  297. package/docs/rules/html-aria-attribute-must-be-valid.md +2 -5
  298. package/docs/rules/html-aria-label-is-well-formatted.md +1 -1
  299. package/docs/rules/html-attribute-double-quotes.md +2 -2
  300. package/docs/rules/html-attribute-equals-spacing.md +2 -2
  301. package/docs/rules/html-attribute-values-require-quotes.md +3 -3
  302. package/docs/rules/html-avoid-both-disabled-and-aria-disabled.md +2 -2
  303. package/docs/rules/html-body-only-elements.md +99 -0
  304. package/docs/rules/html-boolean-attributes-no-value.md +2 -2
  305. package/docs/rules/html-head-only-elements.md +81 -0
  306. package/docs/rules/html-input-require-autocomplete.md +64 -0
  307. package/docs/rules/html-no-aria-hidden-on-focusable.md +2 -2
  308. package/docs/rules/html-no-duplicate-attributes.md +2 -2
  309. package/docs/rules/html-no-duplicate-meta-names.md +64 -0
  310. package/docs/rules/html-no-empty-attributes.md +3 -3
  311. package/docs/rules/html-no-empty-headings.md +4 -26
  312. package/docs/rules/html-no-positive-tab-index.md +1 -2
  313. package/docs/rules/html-no-self-closing.md +17 -2
  314. package/docs/rules/html-no-space-in-tag.md +66 -0
  315. package/docs/rules/html-no-title-attribute.md +2 -2
  316. package/docs/rules/html-no-underscores-in-attribute-names.md +2 -2
  317. package/docs/rules/html-tag-name-lowercase.md +2 -2
  318. package/package.json +13 -5
  319. package/src/cli/argument-parser.ts +50 -39
  320. package/src/cli/file-processor.ts +159 -28
  321. package/src/cli/formatters/detailed-formatter.ts +21 -3
  322. package/src/cli/formatters/github-actions-formatter.ts +17 -1
  323. package/src/cli/formatters/json-formatter.ts +9 -0
  324. package/src/cli/formatters/simple-formatter.ts +24 -8
  325. package/src/cli/output-manager.ts +23 -3
  326. package/src/cli/summary-reporter.ts +40 -3
  327. package/src/cli.ts +137 -52
  328. package/src/custom-rule-loader.ts +189 -0
  329. package/src/herb-disable-comment-utils.ts +175 -0
  330. package/src/index.ts +2 -0
  331. package/src/linter.ts +501 -36
  332. package/src/loader.ts +30 -0
  333. package/src/rules/erb-comment-syntax.ts +73 -0
  334. package/src/rules/erb-no-case-node-children.ts +68 -0
  335. package/src/rules/erb-no-empty-tags.ts +9 -3
  336. package/src/rules/erb-no-extra-newline.ts +91 -0
  337. package/src/rules/erb-no-extra-whitespace-inside-tags.ts +147 -0
  338. package/src/rules/erb-no-output-control-flow.ts +9 -3
  339. package/src/rules/erb-no-silent-tag-in-attribute-name.ts +9 -3
  340. package/src/rules/erb-prefer-image-tag-helper.ts +9 -3
  341. package/src/rules/erb-require-trailing-newline.ts +47 -0
  342. package/src/rules/erb-require-whitespace-inside-tags.ts +96 -26
  343. package/src/rules/erb-right-trim.ts +67 -0
  344. package/src/rules/herb-disable-comment-base.ts +76 -0
  345. package/src/rules/herb-disable-comment-malformed.ts +66 -0
  346. package/src/rules/herb-disable-comment-missing-rules.ts +41 -0
  347. package/src/rules/herb-disable-comment-no-duplicate-rules.ts +46 -0
  348. package/src/rules/herb-disable-comment-no-redundant-all.ts +40 -0
  349. package/src/rules/herb-disable-comment-unnecessary.ts +103 -0
  350. package/src/rules/herb-disable-comment-valid-rule-name.ts +62 -0
  351. package/src/rules/html-anchor-require-href.ts +9 -3
  352. package/src/rules/html-aria-attribute-must-be-valid.ts +9 -3
  353. package/src/rules/html-aria-label-is-well-formatted.ts +9 -5
  354. package/src/rules/html-aria-level-must-be-valid.ts +9 -2
  355. package/src/rules/html-aria-role-heading-requires-level.ts +9 -3
  356. package/src/rules/html-aria-role-must-be-valid.ts +9 -3
  357. package/src/rules/html-attribute-double-quotes.ts +42 -8
  358. package/src/rules/html-attribute-equals-spacing.ts +31 -7
  359. package/src/rules/html-attribute-values-require-quotes.ts +56 -10
  360. package/src/rules/html-avoid-both-disabled-and-aria-disabled.ts +9 -3
  361. package/src/rules/html-body-only-elements.ts +60 -0
  362. package/src/rules/html-boolean-attributes-no-value.ts +31 -6
  363. package/src/rules/html-head-only-elements.ts +65 -0
  364. package/src/rules/html-iframe-has-title.ts +9 -4
  365. package/src/rules/html-img-require-alt.ts +10 -4
  366. package/src/rules/html-input-require-autocomplete.ts +85 -0
  367. package/src/rules/html-navigation-has-label.ts +9 -3
  368. package/src/rules/html-no-aria-hidden-on-focusable.ts +9 -3
  369. package/src/rules/html-no-block-inside-inline.ts +9 -3
  370. package/src/rules/html-no-duplicate-attributes.ts +9 -3
  371. package/src/rules/html-no-duplicate-ids.ts +11 -7
  372. package/src/rules/html-no-duplicate-meta-names.ts +188 -0
  373. package/src/rules/html-no-empty-attributes.ts +58 -10
  374. package/src/rules/html-no-empty-headings.ts +10 -8
  375. package/src/rules/html-no-nested-links.ts +10 -4
  376. package/src/rules/html-no-positive-tab-index.ts +9 -3
  377. package/src/rules/html-no-self-closing.ts +69 -9
  378. package/src/rules/html-no-space-in-tag.ts +221 -0
  379. package/src/rules/html-no-title-attribute.ts +9 -3
  380. package/src/rules/html-no-underscores-in-attribute-names.ts +12 -4
  381. package/src/rules/html-tag-name-lowercase.ts +41 -10
  382. package/src/rules/index.ts +24 -2
  383. package/src/rules/parser-no-errors.ts +8 -1
  384. package/src/rules/rule-utils.ts +250 -44
  385. package/src/rules/svg-tag-name-capitalization.ts +39 -6
  386. package/src/{default-rules.ts → rules.ts} +53 -13
  387. package/src/types.ts +133 -15
  388. package/dist/src/default-rules.js.map +0 -1
  389. package/dist/src/rules/erb-requires-trailing-newline.js +0 -22
  390. package/dist/src/rules/erb-requires-trailing-newline.js.map +0 -1
  391. package/dist/types/default-rules.d.ts +0 -2
  392. package/dist/types/rules/erb-requires-trailing-newline.d.ts +0 -6
  393. package/dist/types/src/default-rules.d.ts +0 -2
  394. package/dist/types/src/rules/erb-requires-trailing-newline.d.ts +0 -6
  395. package/src/rules/erb-requires-trailing-newline.ts +0 -29
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herb-tools/linter",
3
- "version": "0.7.4",
3
+ "version": "0.8.0",
4
4
  "description": "HTML+ERB linter for validating HTML structure and enforcing best practices",
5
5
  "license": "MIT",
6
6
  "homepage": "https://herb-tools.dev",
@@ -36,13 +36,21 @@
36
36
  "types": "./dist/types/src/cli.d.ts",
37
37
  "require": "./dist/src/cli.js",
38
38
  "default": "./dist/src/cli.js"
39
+ },
40
+ "./loader": {
41
+ "types": "./dist/types/loader.d.ts",
42
+ "import": "./dist/loader.js",
43
+ "require": "./dist/loader.cjs",
44
+ "default": "./dist/loader.js"
39
45
  }
40
46
  },
41
47
  "dependencies": {
42
- "@herb-tools/core": "0.7.4",
43
- "@herb-tools/highlighter": "0.7.4",
44
- "@herb-tools/node-wasm": "0.7.4",
45
- "@herb-tools/printer": "0.7.4",
48
+ "@herb-tools/config": "0.8.0",
49
+ "@herb-tools/core": "0.8.0",
50
+ "@herb-tools/highlighter": "0.8.0",
51
+ "@herb-tools/node-wasm": "0.8.0",
52
+ "@herb-tools/printer": "0.8.0",
53
+ "@herb-tools/rewriter": "0.8.0",
46
54
  "glob": "^11.0.3"
47
55
  },
48
56
  "files": [
@@ -1,32 +1,35 @@
1
1
  import dedent from "dedent";
2
2
  import { parseArgs } from "util";
3
- import { statSync } from "fs";
4
- import { join } from "path";
5
3
  import { Herb } from "@herb-tools/node-wasm";
6
4
  import { THEME_NAMES, DEFAULT_THEME } from "@herb-tools/highlighter";
7
- import { name, version } from "../../package.json";
5
+ import { name, version, dependencies } from "../../package.json";
8
6
  export class ArgumentParser {
9
7
  usage = dedent `
10
- Usage: herb-lint [file|glob-pattern|directory] [options]
8
+ Usage: herb-lint [files|directories|glob-patterns...] [options]
11
9
 
12
10
  Arguments:
13
- file Single file to lint
14
- glob-pattern Files to lint (defaults to **/*.html.erb)
15
- directory Directory to lint (automatically appends **/*.html.erb)
11
+ files Files, directories, or glob patterns to lint (defaults to configured extensions in .herb.yml)
12
+ Multiple arguments are supported (e.g., herb-lint file1.erb file2.erb dir/ "**/*.erb")
16
13
 
17
14
  Options:
18
- -h, --help show help
19
- -v, --version show version
20
- --format output format (simple|detailed|json) [default: detailed]
21
- --simple use simple output format (shortcut for --format simple)
22
- --json use JSON output format (shortcut for --format json)
23
- --github enable GitHub Actions annotations (combines with --format)
24
- --no-github disable GitHub Actions annotations (even in GitHub Actions environment)
25
- --theme syntax highlighting theme (${THEME_NAMES.join("|")}) or path to custom theme file [default: ${DEFAULT_THEME}]
26
- --no-color disable colored output
27
- --no-timing hide timing information
28
- --no-wrap-lines disable line wrapping
29
- --truncate-lines enable line truncation (mutually exclusive with line wrapping)
15
+ -h, --help show help
16
+ -v, --version show version
17
+ --init create a .herb.yml configuration file in the current directory
18
+ -c, --config-file <path> explicitly specify path to .herb.yml config file
19
+ --force force linting even if disabled in .herb.yml
20
+ --fix automatically fix auto-correctable offenses
21
+ --ignore-disable-comments report offenses even when suppressed with <%# herb:disable %> comments
22
+ --format output format (simple|detailed|json) [default: detailed]
23
+ --simple use simple output format (shortcut for --format simple)
24
+ --json use JSON output format (shortcut for --format json)
25
+ --github enable GitHub Actions annotations (combines with --format)
26
+ --no-github disable GitHub Actions annotations (even in GitHub Actions environment)
27
+ --no-custom-rules disable loading custom rules from project (custom rules are loaded by default from .herb/rules/**/*.{mjs,js})
28
+ --theme syntax highlighting theme (${THEME_NAMES.join("|")}) or path to custom theme file [default: ${DEFAULT_THEME}]
29
+ --no-color disable colored output
30
+ --no-timing hide timing information
31
+ --no-wrap-lines disable line wrapping
32
+ --truncate-lines enable line truncation (mutually exclusive with line wrapping)
30
33
  `;
31
34
  parse(argv) {
32
35
  const { values, positionals } = parseArgs({
@@ -34,6 +37,11 @@ export class ArgumentParser {
34
37
  options: {
35
38
  help: { type: "boolean", short: "h" },
36
39
  version: { type: "boolean", short: "v" },
40
+ init: { type: "boolean" },
41
+ "config-file": { type: "string", short: "c" },
42
+ force: { type: "boolean" },
43
+ fix: { type: "boolean" },
44
+ "ignore-disable-comments": { type: "boolean" },
37
45
  format: { type: "string" },
38
46
  simple: { type: "boolean" },
39
47
  json: { type: "boolean" },
@@ -43,7 +51,8 @@ export class ArgumentParser {
43
51
  "no-color": { type: "boolean" },
44
52
  "no-timing": { type: "boolean" },
45
53
  "no-wrap-lines": { type: "boolean" },
46
- "truncate-lines": { type: "boolean" }
54
+ "truncate-lines": { type: "boolean" },
55
+ "no-custom-rules": { type: "boolean" }
47
56
  },
48
57
  allowPositionals: true
49
58
  });
@@ -53,7 +62,9 @@ export class ArgumentParser {
53
62
  }
54
63
  if (values.version) {
55
64
  console.log("Versions:");
56
- console.log(` ${name}@${version}, ${Herb.version}`.split(", ").join("\n "));
65
+ console.log(` ${name}@${version}`);
66
+ console.log(` @herb-tools/printer@${dependencies["@herb-tools/printer"]}`);
67
+ console.log(` ${Herb.version}`.split(", ").join("\n "));
57
68
  process.exit(0);
58
69
  }
59
70
  const isGitHubActions = process.env.GITHUB_ACTIONS === "true";
@@ -87,21 +98,17 @@ export class ArgumentParser {
87
98
  process.exit(1);
88
99
  }
89
100
  const theme = values.theme || DEFAULT_THEME;
90
- const pattern = this.getFilePattern(positionals);
91
- return { pattern, formatOption, showTiming, theme, wrapLines, truncateLines, useGitHubActions };
101
+ const patterns = this.getFilePatterns(positionals);
102
+ const fix = values.fix || false;
103
+ const force = !!values.force;
104
+ const ignoreDisableComments = values["ignore-disable-comments"] || false;
105
+ const configFile = values["config-file"];
106
+ const init = values.init || false;
107
+ const loadCustomRules = !values["no-custom-rules"];
108
+ return { patterns, configFile, formatOption, showTiming, theme, wrapLines, truncateLines, useGitHubActions, fix, ignoreDisableComments, force, init, loadCustomRules };
92
109
  }
93
- getFilePattern(positionals) {
94
- let pattern = positionals.length > 0 ? positionals[0] : "**/*.html.erb";
95
- try {
96
- const stat = statSync(pattern);
97
- if (stat.isDirectory()) {
98
- pattern = join(pattern, "**/*.html.erb");
99
- }
100
- }
101
- catch {
102
- // Not a file/directory, treat as glob pattern
103
- }
104
- return pattern;
110
+ getFilePatterns(positionals) {
111
+ return positionals;
105
112
  }
106
113
  }
107
114
  //# sourceMappingURL=argument-parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"argument-parser.js","sourceRoot":"","sources":["../../../src/cli/argument-parser.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAGpE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAclD,MAAM,OAAO,cAAc;IACR,KAAK,GAAG,MAAM,CAAA;;;;;;;;;;;;;;;;oDAgBmB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,4CAA4C,aAAa;;;;;GAK/H,CAAA;IAED,KAAK,CAAC,IAAc;QAClB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;YACxC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACnB,OAAO,EAAE;gBACP,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;gBACrC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;gBACxC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBACzB,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC3B,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAChC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC/B,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAChC,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBACpC,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;aACtC;YACD,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;YAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,CAAA;QAE7D,IAAI,YAAY,GAAiB,UAAU,CAAA;QAC3C,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;YAC9G,YAAY,GAAG,MAAM,CAAC,MAAM,CAAA;QAC9B,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,YAAY,GAAG,QAAQ,CAAA;QACzB,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,YAAY,GAAG,MAAM,CAAA;QACvB,CAAC;QAED,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAEnF,IAAI,gBAAgB,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,oHAAoH,CAAC,CAAA;YACnI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAA;QAC5B,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAEvC,IAAI,SAAS,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;QACxC,IAAI,aAAa,GAAG,KAAK,CAAA;QAEzB,IAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC7B,aAAa,GAAG,IAAI,CAAA;YACpB,SAAS,GAAG,KAAK,CAAA;QACnB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACzD,OAAO,CAAC,KAAK,CAAC,+GAA+G,CAAC,CAAA;YAC9H,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,aAAa,CAAA;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAEhD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAA;IACjG,CAAC;IAEO,cAAc,CAAC,WAAqB;QAC1C,IAAI,OAAO,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAA;QAEvE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;YAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;CACF"}
1
+ {"version":3,"file":"argument-parser.js","sourceRoot":"","sources":["../../../src/cli/argument-parser.ts"],"names":[],"mappings":"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"}
@@ -1,50 +1,129 @@
1
- import { readFileSync } from "fs";
2
- import { resolve } from "path";
3
1
  import { Herb } from "@herb-tools/node-wasm";
4
2
  import { Linter } from "../linter.js";
3
+ import { loadCustomRules } from "../loader.js";
4
+ import { readFileSync, writeFileSync } from "fs";
5
+ import { resolve } from "path";
5
6
  import { colorize } from "@herb-tools/highlighter";
6
7
  export class FileProcessor {
7
8
  linter = null;
9
+ customRulesLoaded = false;
10
+ isRuleAutocorrectable(ruleName) {
11
+ if (!this.linter)
12
+ return false;
13
+ const RuleClass = this.linter.rules.find((rule) => {
14
+ const instance = new rule();
15
+ return instance.name === ruleName;
16
+ });
17
+ if (!RuleClass)
18
+ return false;
19
+ return RuleClass.autocorrectable === true;
20
+ }
8
21
  async processFiles(files, formatOption = 'detailed', context) {
9
22
  let totalErrors = 0;
10
23
  let totalWarnings = 0;
24
+ let totalInfo = 0;
25
+ let totalHints = 0;
26
+ let totalIgnored = 0;
27
+ let totalWouldBeIgnored = 0;
11
28
  let filesWithOffenses = 0;
29
+ let filesFixed = 0;
12
30
  let ruleCount = 0;
13
31
  const allOffenses = [];
14
32
  const ruleOffenses = new Map();
15
- for (const filename of files) {
16
- const filePath = context?.projectPath ? resolve(context.projectPath, filename) : resolve(filename);
17
- const content = readFileSync(filePath, "utf-8");
18
- const parseResult = Herb.parse(content);
19
- if (parseResult.errors.length > 0) {
20
- if (formatOption !== 'json') {
21
- console.error(`${colorize(filename, "cyan")} - ${colorize("Parse errors:", "brightRed")}`);
22
- for (const error of parseResult.errors) {
23
- console.error(` ${colorize("✗", "brightRed")} ${error.message}`);
33
+ if (!this.linter) {
34
+ let customRules = undefined;
35
+ let customRuleInfo = [];
36
+ let customRuleWarnings = [];
37
+ if (context?.loadCustomRules && !this.customRulesLoaded) {
38
+ try {
39
+ const result = await loadCustomRules({
40
+ baseDir: context.projectPath,
41
+ silent: formatOption === 'json'
42
+ });
43
+ customRules = result.rules;
44
+ customRuleInfo = result.ruleInfo;
45
+ customRuleWarnings = result.warnings;
46
+ this.customRulesLoaded = true;
47
+ if (customRules.length > 0 && formatOption !== 'json') {
48
+ const ruleText = customRules.length === 1 ? 'rule' : 'rules';
49
+ console.log(colorize(`\nLoaded ${customRules.length} custom ${ruleText}:`, "green"));
50
+ for (const { name, path } of customRuleInfo) {
51
+ const relativePath = context.projectPath ? path.replace(context.projectPath + '/', '') : path;
52
+ console.log(colorize(` • ${name}`, "cyan") + colorize(` (${relativePath})`, "dim"));
53
+ }
54
+ if (customRuleWarnings.length > 0) {
55
+ console.log();
56
+ for (const warning of customRuleWarnings) {
57
+ console.warn(colorize(` ⚠ ${warning}`, "yellow"));
58
+ }
59
+ }
60
+ console.log();
24
61
  }
25
62
  }
26
- for (const error of parseResult.errors) {
27
- allOffenses.push({ filename, offense: error, content });
63
+ catch (error) {
64
+ if (formatOption !== 'json') {
65
+ console.warn(colorize(`Warning: Failed to load custom rules: ${error}`, "yellow"));
66
+ }
28
67
  }
29
- totalErrors++;
30
- filesWithOffenses++;
31
- continue;
32
- }
33
- if (!this.linter) {
34
- this.linter = new Linter(Herb);
35
68
  }
36
- const lintResult = this.linter.lint(content, { fileName: filename });
69
+ this.linter = Linter.from(Herb, context?.config, customRules);
70
+ }
71
+ for (const filename of files) {
72
+ const filePath = context?.projectPath ? resolve(context.projectPath, filename) : resolve(filename);
73
+ let content = readFileSync(filePath, "utf-8");
74
+ const lintResult = this.linter.lint(content, {
75
+ fileName: filename,
76
+ ignoreDisableComments: context?.ignoreDisableComments
77
+ });
37
78
  if (ruleCount === 0) {
38
79
  ruleCount = this.linter.getRuleCount();
39
80
  }
40
- if (lintResult.offenses.length === 0) {
81
+ if (context?.fix && lintResult.offenses.length > 0) {
82
+ const autofixResult = this.linter.autofix(content, {
83
+ fileName: filename,
84
+ ignoreDisableComments: context?.ignoreDisableComments
85
+ });
86
+ if (autofixResult.fixed.length > 0) {
87
+ writeFileSync(filePath, autofixResult.source, "utf-8");
88
+ filesFixed++;
89
+ if (formatOption !== 'json') {
90
+ console.log(`${colorize("✓", "brightGreen")} ${colorize(filename, "cyan")} - ${colorize(`Fixed ${autofixResult.fixed.length} offense(s)`, "green")}`);
91
+ }
92
+ }
93
+ content = autofixResult.source;
94
+ for (const offense of autofixResult.unfixed) {
95
+ allOffenses.push({
96
+ filename,
97
+ offense: offense,
98
+ content,
99
+ autocorrectable: this.isRuleAutocorrectable(offense.rule)
100
+ });
101
+ const ruleData = ruleOffenses.get(offense.rule) || { count: 0, files: new Set() };
102
+ ruleData.count++;
103
+ ruleData.files.add(filename);
104
+ ruleOffenses.set(offense.rule, ruleData);
105
+ }
106
+ if (autofixResult.unfixed.length > 0) {
107
+ totalErrors += autofixResult.unfixed.filter(offense => offense.severity === "error").length;
108
+ totalWarnings += autofixResult.unfixed.filter(offense => offense.severity === "warning").length;
109
+ totalInfo += autofixResult.unfixed.filter(offense => offense.severity === "info").length;
110
+ totalHints += autofixResult.unfixed.filter(offense => offense.severity === "hint").length;
111
+ filesWithOffenses++;
112
+ }
113
+ }
114
+ else if (lintResult.offenses.length === 0) {
41
115
  if (files.length === 1 && formatOption !== 'json') {
42
116
  console.log(`${colorize("✓", "brightGreen")} ${colorize(filename, "cyan")} - ${colorize("No issues found", "green")}`);
43
117
  }
44
118
  }
45
119
  else {
46
120
  for (const offense of lintResult.offenses) {
47
- allOffenses.push({ filename, offense: offense, content });
121
+ allOffenses.push({
122
+ filename,
123
+ offense: offense,
124
+ content,
125
+ autocorrectable: this.isRuleAutocorrectable(offense.rule)
126
+ });
48
127
  const ruleData = ruleOffenses.get(offense.rule) || { count: 0, files: new Set() };
49
128
  ruleData.count++;
50
129
  ruleData.files.add(filename);
@@ -52,10 +131,32 @@ export class FileProcessor {
52
131
  }
53
132
  totalErrors += lintResult.errors;
54
133
  totalWarnings += lintResult.warnings;
134
+ totalInfo += lintResult.offenses.filter(o => o.severity === "info").length;
135
+ totalHints += lintResult.offenses.filter(o => o.severity === "hint").length;
55
136
  filesWithOffenses++;
56
137
  }
138
+ totalIgnored += lintResult.ignored;
139
+ if (lintResult.wouldBeIgnored) {
140
+ totalWouldBeIgnored += lintResult.wouldBeIgnored;
141
+ }
142
+ }
143
+ const result = {
144
+ totalErrors,
145
+ totalWarnings,
146
+ totalInfo,
147
+ totalHints,
148
+ totalIgnored,
149
+ filesWithOffenses,
150
+ filesFixed,
151
+ ruleCount,
152
+ allOffenses,
153
+ ruleOffenses,
154
+ context
155
+ };
156
+ if (totalWouldBeIgnored > 0) {
157
+ result.totalWouldBeIgnored = totalWouldBeIgnored;
57
158
  }
58
- return { totalErrors, totalWarnings, filesWithOffenses, ruleCount, allOffenses, ruleOffenses, context };
159
+ return result;
59
160
  }
60
161
  }
61
162
  //# sourceMappingURL=file-processor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-processor.js","sourceRoot":"","sources":["../../../src/cli/file-processor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-processor.js","sourceRoot":"","sources":["../../../src/cli/file-processor.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,15 @@ export class DetailedFormatter extends BaseFormatter {
21
21
  }
22
22
  if (isSingleFile) {
23
23
  const { filename, content } = allOffenses[0];
24
- const diagnostics = allOffenses.map(item => item.offense);
24
+ const diagnostics = allOffenses.map(item => {
25
+ if (item.autocorrectable && item.offense.code) {
26
+ return {
27
+ ...item.offense,
28
+ message: `${item.offense.message} ${colorize(colorize("[Correctable]", "green"), "bold")}`
29
+ };
30
+ }
31
+ return item.offense;
32
+ });
25
33
  const highlighted = this.highlighter.highlight(filename, content, {
26
34
  diagnostics: diagnostics,
27
35
  splitDiagnostics: true,
@@ -34,8 +42,15 @@ export class DetailedFormatter extends BaseFormatter {
34
42
  else {
35
43
  const totalMessageCount = allOffenses.length;
36
44
  for (let i = 0; i < allOffenses.length; i++) {
37
- const { filename, offense, content } = allOffenses[i];
38
- const formatted = this.highlighter.highlightDiagnostic(filename, offense, content, {
45
+ const { filename, offense, content, autocorrectable } = allOffenses[i];
46
+ let modifiedOffense = offense;
47
+ if (autocorrectable && offense.code) {
48
+ modifiedOffense = {
49
+ ...offense,
50
+ message: `${offense.message} ${colorize(colorize("[Correctable]", "green"), "bold")}`
51
+ };
52
+ }
53
+ const formatted = this.highlighter.highlightDiagnostic(filename, modifiedOffense, content, {
39
54
  contextLines: 2,
40
55
  wrapLines: this.wrapLines,
41
56
  truncateLines: this.truncateLines
@@ -1 +1 @@
1
- {"version":3,"file":"detailed-formatter.js","sourceRoot":"","sources":["../../../../src/cli/formatters/detailed-formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detailed-formatter.js","sourceRoot":"","sources":["../../../../src/cli/formatters/detailed-formatter.ts"],"names":[],"mappings":"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"}
@@ -65,7 +65,21 @@ export class GitHubActionsFormatter extends BaseFormatter {
65
65
  // ::{level} file={file},line={line},col={col},title={title}::{message}
66
66
  //
67
67
  formatDiagnostic(filename, diagnostic, codePreview = "") {
68
- const level = diagnostic.severity === "error" ? "error" : "warning";
68
+ let level;
69
+ switch (diagnostic.severity) {
70
+ case "error":
71
+ level = "error";
72
+ break;
73
+ case "warning":
74
+ level = "warning";
75
+ break;
76
+ case "info":
77
+ case "hint":
78
+ level = "notice";
79
+ break;
80
+ default:
81
+ level = "warning";
82
+ }
69
83
  const { line, column } = diagnostic.location.start;
70
84
  const escapedFilename = this.escapeParam(filename);
71
85
  let message = diagnostic.message;
@@ -1 +1 @@
1
- {"version":3,"file":"github-actions-formatter.js","sourceRoot":"","sources":["../../../../src/cli/formatters/github-actions-formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github-actions-formatter.js","sourceRoot":"","sources":["../../../../src/cli/formatters/github-actions-formatter.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,9 @@ export class JSONFormatter extends BaseFormatter {
33
33
  filesWithOffenses: options.filesWithOffenses,
34
34
  totalErrors: options.totalErrors,
35
35
  totalWarnings: options.totalWarnings,
36
+ totalInfo: options.totalInfo,
37
+ totalHints: options.totalHints,
38
+ totalIgnored: options.totalIgnored,
36
39
  totalOffenses: options.totalErrors + options.totalWarnings,
37
40
  ruleCount: options.ruleCount
38
41
  };
@@ -1 +1 @@
1
- {"version":3,"file":"json-formatter.js","sourceRoot":"","sources":["../../../../src/cli/formatters/json-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AA2CnD,MAAM,OAAO,aAAc,SAAQ,aAAa;IAC9C,KAAK,CAAC,MAAM,CAAC,WAA4B;QACvC,MAAM,YAAY,GAAkB,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9E,QAAQ;YACR,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE;YACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC,CAAA;QAEH,MAAM,MAAM,GAAe;YACzB,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,YAAY,CAAC,MAAM,KAAK,CAAC;YAChC,OAAO,EAAE,IAAI;SACd,CAAA;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAA4B,EAAE,OAA0B;QAC9E,MAAM,YAAY,GAAkB,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9E,QAAQ;YACR,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE;YACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC,CAAA;QAEH,MAAM,OAAO,GAAgB;YAC3B,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAClC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,aAAa,EAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,aAAa;YAC1D,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAA;QAED,MAAM,MAAM,GAAe;YACzB,QAAQ,EAAE,YAAY;YACtB,OAAO;YACP,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,OAAO,CAAC,WAAW,KAAK,CAAC,IAAI,OAAO,CAAC,aAAa,KAAK,CAAC;YAC/D,OAAO,EAAE,IAAI;SACd,CAAA;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAA;QAC/C,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YACnC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;YAC1C,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC,CAAC,IAAI,CAAA;QAER,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,UAAU,CAAC,SAAiB,EAAE,SAAuB;QACnD,gEAAgE;IAClE,CAAC;CACF"}
1
+ {"version":3,"file":"json-formatter.js","sourceRoot":"","sources":["../../../../src/cli/formatters/json-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAiDnD,MAAM,OAAO,aAAc,SAAQ,aAAa;IAC9C,KAAK,CAAC,MAAM,CAAC,WAA4B;QACvC,MAAM,YAAY,GAAkB,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9E,QAAQ;YACR,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE;YACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC,CAAA;QAEH,MAAM,MAAM,GAAe;YACzB,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,YAAY,CAAC,MAAM,KAAK,CAAC;YAChC,OAAO,EAAE,IAAI;SACd,CAAA;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAA4B,EAAE,OAA0B;QAC9E,MAAM,YAAY,GAAkB,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9E,QAAQ;YACR,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE;YACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC,CAAA;QAEH,MAAM,OAAO,GAAgB;YAC3B,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAClC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,aAAa,EAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,aAAa;YAC1D,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAA;QAED,MAAM,MAAM,GAAe;YACzB,QAAQ,EAAE,YAAY;YACtB,OAAO;YACP,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,OAAO,CAAC,WAAW,KAAK,CAAC,IAAI,OAAO,CAAC,aAAa,KAAK,CAAC;YAC/D,OAAO,EAAE,IAAI;SACd,CAAA;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAA;QAC/C,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YACnC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;YAC1C,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC,CAAC,IAAI,CAAA;QAER,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,UAAU,CAAC,SAAiB,EAAE,SAAuB;QACnD,gEAAgE;IAClE,CAAC;CACF"}
@@ -5,14 +5,14 @@ export class SimpleFormatter extends BaseFormatter {
5
5
  if (allOffenses.length === 0)
6
6
  return;
7
7
  const groupedOffenses = new Map();
8
- for (const { filename, offense } of allOffenses) {
9
- const offenses = groupedOffenses.get(filename) || [];
10
- offenses.push(offense);
11
- groupedOffenses.set(filename, offenses);
8
+ for (const processedFile of allOffenses) {
9
+ const offenses = groupedOffenses.get(processedFile.filename) || [];
10
+ offenses.push(processedFile);
11
+ groupedOffenses.set(processedFile.filename, offenses);
12
12
  }
13
- for (const [filename, offenses] of groupedOffenses) {
13
+ for (const [filename, processedFiles] of groupedOffenses) {
14
14
  console.log("");
15
- this.formatFile(filename, offenses);
15
+ this.formatFileProcessed(filename, processedFiles);
16
16
  }
17
17
  }
18
18
  formatFile(filename, offenses) {
@@ -22,10 +22,23 @@ export class SimpleFormatter extends BaseFormatter {
22
22
  const severity = isError ? colorize("✗", "brightRed") : colorize("⚠", "brightYellow");
23
23
  const rule = colorize(`(${offense.code})`, "blue");
24
24
  const locationString = `${offense.location.start.line}:${offense.location.start.column}`;
25
- const paddedLocation = locationString.padEnd(4); // Pad to 4 characters for alignment
25
+ const paddedLocation = locationString.padEnd(4);
26
26
  console.log(` ${colorize(paddedLocation, "gray")} ${severity} ${offense.message} ${rule}`);
27
27
  }
28
28
  console.log("");
29
29
  }
30
+ formatFileProcessed(filename, processedFiles) {
31
+ console.log(`${colorize(filename, "cyan")}:`);
32
+ for (const { offense, autocorrectable } of processedFiles) {
33
+ const isError = offense.severity === "error";
34
+ const severity = isError ? colorize("✗", "brightRed") : colorize("⚠", "brightYellow");
35
+ const rule = colorize(`(${offense.code})`, "blue");
36
+ const locationString = `${offense.location.start.line}:${offense.location.start.column}`;
37
+ const paddedLocation = locationString.padEnd(4);
38
+ const correctable = autocorrectable ? colorize(colorize(" [Correctable]", "green"), "bold") : "";
39
+ console.log(` ${colorize(paddedLocation, "gray")} ${severity} ${offense.message} ${rule}${correctable}`);
40
+ }
41
+ console.log("");
42
+ }
30
43
  }
31
44
  //# sourceMappingURL=simple-formatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"simple-formatter.js","sourceRoot":"","sources":["../../../../src/cli/formatters/simple-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAKnD,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAChD,KAAK,CAAC,MAAM,CAAC,WAA4B;QACvC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAEpC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAwB,CAAA;QAEvD,KAAK,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;YACpD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACtB,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACzC,CAAC;QAED,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED,UAAU,CAAC,QAAgB,EAAE,QAAsB;QACjD,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QAE7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;YAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;YACrF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,EAAE,MAAM,CAAC,CAAA;YAClD,MAAM,cAAc,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;YACxF,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAC,oCAAoC;YAEpF,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,QAAQ,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,CAAA;QAC7F,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;CACF"}
1
+ {"version":3,"file":"simple-formatter.js","sourceRoot":"","sources":["../../../../src/cli/formatters/simple-formatter.ts"],"names":[],"mappings":"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"}