@herb-tools/linter 0.4.2 → 0.5.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 (202) hide show
  1. package/README.md +221 -10
  2. package/dist/herb-lint.js +817 -292
  3. package/dist/herb-lint.js.map +1 -1
  4. package/dist/index.cjs +360 -81
  5. package/dist/index.cjs.map +1 -1
  6. package/dist/index.js +355 -83
  7. package/dist/index.js.map +1 -1
  8. package/dist/package.json +4 -4
  9. package/dist/src/cli/argument-parser.js +28 -18
  10. package/dist/src/cli/argument-parser.js.map +1 -1
  11. package/dist/src/cli/file-processor.js +21 -17
  12. package/dist/src/cli/file-processor.js.map +1 -1
  13. package/dist/src/cli/formatters/detailed-formatter.js +9 -9
  14. package/dist/src/cli/formatters/detailed-formatter.js.map +1 -1
  15. package/dist/src/cli/formatters/github-actions-formatter.js +50 -0
  16. package/dist/src/cli/formatters/github-actions-formatter.js.map +1 -0
  17. package/dist/src/cli/formatters/index.js +2 -0
  18. package/dist/src/cli/formatters/index.js.map +1 -1
  19. package/dist/src/cli/formatters/json-formatter.js +58 -0
  20. package/dist/src/cli/formatters/json-formatter.js.map +1 -0
  21. package/dist/src/cli/formatters/simple-formatter.js +15 -15
  22. package/dist/src/cli/formatters/simple-formatter.js.map +1 -1
  23. package/dist/src/cli/output-manager.js +120 -0
  24. package/dist/src/cli/output-manager.js.map +1 -0
  25. package/dist/src/cli/summary-reporter.js +22 -22
  26. package/dist/src/cli/summary-reporter.js.map +1 -1
  27. package/dist/src/cli.js +41 -26
  28. package/dist/src/cli.js.map +1 -1
  29. package/dist/src/default-rules.js +8 -0
  30. package/dist/src/default-rules.js.map +1 -1
  31. package/dist/src/linter.js +37 -6
  32. package/dist/src/linter.js.map +1 -1
  33. package/dist/src/rules/erb-no-empty-tags.js +5 -4
  34. package/dist/src/rules/erb-no-empty-tags.js.map +1 -1
  35. package/dist/src/rules/erb-no-output-control-flow.js +5 -4
  36. package/dist/src/rules/erb-no-output-control-flow.js.map +1 -1
  37. package/dist/src/rules/erb-prefer-image-tag-helper.js +93 -0
  38. package/dist/src/rules/erb-prefer-image-tag-helper.js.map +1 -0
  39. package/dist/src/rules/erb-require-whitespace-inside-tags.js +5 -4
  40. package/dist/src/rules/erb-require-whitespace-inside-tags.js.map +1 -1
  41. package/dist/src/rules/erb-requires-trailing-newline.js +22 -0
  42. package/dist/src/rules/erb-requires-trailing-newline.js.map +1 -0
  43. package/dist/src/rules/html-anchor-require-href.js +5 -4
  44. package/dist/src/rules/html-anchor-require-href.js.map +1 -1
  45. package/dist/src/rules/html-aria-attribute-must-be-valid.js +5 -4
  46. package/dist/src/rules/html-aria-attribute-must-be-valid.js.map +1 -1
  47. package/dist/src/rules/html-aria-level-must-be-valid.js +27 -0
  48. package/dist/src/rules/html-aria-level-must-be-valid.js.map +1 -0
  49. package/dist/src/rules/html-aria-role-heading-requires-level.js +5 -4
  50. package/dist/src/rules/html-aria-role-heading-requires-level.js.map +1 -1
  51. package/dist/src/rules/html-aria-role-must-be-valid.js +5 -4
  52. package/dist/src/rules/html-aria-role-must-be-valid.js.map +1 -1
  53. package/dist/src/rules/html-attribute-double-quotes.js +5 -4
  54. package/dist/src/rules/html-attribute-double-quotes.js.map +1 -1
  55. package/dist/src/rules/html-attribute-values-require-quotes.js +5 -4
  56. package/dist/src/rules/html-attribute-values-require-quotes.js.map +1 -1
  57. package/dist/src/rules/html-boolean-attributes-no-value.js +5 -4
  58. package/dist/src/rules/html-boolean-attributes-no-value.js.map +1 -1
  59. package/dist/src/rules/html-img-require-alt.js +5 -4
  60. package/dist/src/rules/html-img-require-alt.js.map +1 -1
  61. package/dist/src/rules/html-no-block-inside-inline.js +7 -6
  62. package/dist/src/rules/html-no-block-inside-inline.js.map +1 -1
  63. package/dist/src/rules/html-no-duplicate-attributes.js +5 -4
  64. package/dist/src/rules/html-no-duplicate-attributes.js.map +1 -1
  65. package/dist/src/rules/html-no-duplicate-ids.js +5 -4
  66. package/dist/src/rules/html-no-duplicate-ids.js.map +1 -1
  67. package/dist/src/rules/html-no-empty-headings.js +5 -4
  68. package/dist/src/rules/html-no-empty-headings.js.map +1 -1
  69. package/dist/src/rules/html-no-nested-links.js +5 -4
  70. package/dist/src/rules/html-no-nested-links.js.map +1 -1
  71. package/dist/src/rules/html-tag-name-lowercase.js +5 -4
  72. package/dist/src/rules/html-tag-name-lowercase.js.map +1 -1
  73. package/dist/src/rules/index.js +3 -0
  74. package/dist/src/rules/index.js.map +1 -1
  75. package/dist/src/rules/parser-no-errors.js +18 -0
  76. package/dist/src/rules/parser-no-errors.js.map +1 -0
  77. package/dist/src/rules/rule-utils.js +125 -2
  78. package/dist/src/rules/rule-utils.js.map +1 -1
  79. package/dist/src/rules/svg-tag-name-capitalization.js +5 -4
  80. package/dist/src/rules/svg-tag-name-capitalization.js.map +1 -1
  81. package/dist/src/types.js +15 -1
  82. package/dist/src/types.js.map +1 -1
  83. package/dist/tsconfig.tsbuildinfo +1 -1
  84. package/dist/types/cli/argument-parser.d.ts +2 -1
  85. package/dist/types/cli/file-processor.d.ts +6 -5
  86. package/dist/types/cli/formatters/base-formatter.d.ts +2 -2
  87. package/dist/types/cli/formatters/detailed-formatter.d.ts +2 -2
  88. package/dist/types/cli/formatters/github-actions-formatter.d.ts +12 -0
  89. package/dist/types/cli/formatters/index.d.ts +2 -0
  90. package/dist/types/cli/formatters/json-formatter.d.ts +42 -0
  91. package/dist/types/cli/formatters/simple-formatter.d.ts +2 -2
  92. package/dist/types/cli/output-manager.d.ts +31 -0
  93. package/dist/types/cli/summary-reporter.d.ts +3 -3
  94. package/dist/types/cli.d.ts +3 -1
  95. package/dist/types/linter.d.ts +20 -5
  96. package/dist/types/rules/erb-no-empty-tags.d.ts +5 -4
  97. package/dist/types/rules/erb-no-output-control-flow.d.ts +5 -4
  98. package/dist/types/rules/erb-prefer-image-tag-helper.d.ts +7 -0
  99. package/dist/types/rules/erb-require-whitespace-inside-tags.d.ts +5 -4
  100. package/dist/types/rules/erb-requires-trailing-newline.d.ts +6 -0
  101. package/dist/types/rules/html-anchor-require-href.d.ts +5 -4
  102. package/dist/types/rules/html-aria-attribute-must-be-valid.d.ts +5 -4
  103. package/dist/types/rules/html-aria-level-must-be-valid.d.ts +7 -0
  104. package/dist/types/rules/html-aria-role-heading-requires-level.d.ts +5 -4
  105. package/dist/types/rules/html-aria-role-must-be-valid.d.ts +5 -4
  106. package/dist/types/rules/html-attribute-double-quotes.d.ts +5 -4
  107. package/dist/types/rules/html-attribute-values-require-quotes.d.ts +5 -4
  108. package/dist/types/rules/html-boolean-attributes-no-value.d.ts +5 -4
  109. package/dist/types/rules/html-img-require-alt.d.ts +5 -4
  110. package/dist/types/rules/html-no-block-inside-inline.d.ts +5 -4
  111. package/dist/types/rules/html-no-duplicate-attributes.d.ts +5 -4
  112. package/dist/types/rules/html-no-duplicate-ids.d.ts +5 -4
  113. package/dist/types/rules/html-no-empty-headings.d.ts +5 -4
  114. package/dist/types/rules/html-no-nested-links.d.ts +5 -4
  115. package/dist/types/rules/html-tag-name-lowercase.d.ts +5 -4
  116. package/dist/types/rules/index.d.ts +3 -0
  117. package/dist/types/rules/parser-no-errors.d.ts +8 -0
  118. package/dist/types/rules/rule-utils.d.ts +73 -4
  119. package/dist/types/rules/svg-tag-name-capitalization.d.ts +5 -4
  120. package/dist/types/src/cli/argument-parser.d.ts +2 -1
  121. package/dist/types/src/cli/file-processor.d.ts +6 -5
  122. package/dist/types/src/cli/formatters/base-formatter.d.ts +2 -2
  123. package/dist/types/src/cli/formatters/detailed-formatter.d.ts +2 -2
  124. package/dist/types/src/cli/formatters/github-actions-formatter.d.ts +12 -0
  125. package/dist/types/src/cli/formatters/index.d.ts +2 -0
  126. package/dist/types/src/cli/formatters/json-formatter.d.ts +42 -0
  127. package/dist/types/src/cli/formatters/simple-formatter.d.ts +2 -2
  128. package/dist/types/src/cli/output-manager.d.ts +31 -0
  129. package/dist/types/src/cli/summary-reporter.d.ts +3 -3
  130. package/dist/types/src/cli.d.ts +3 -1
  131. package/dist/types/src/linter.d.ts +20 -5
  132. package/dist/types/src/rules/erb-no-empty-tags.d.ts +5 -4
  133. package/dist/types/src/rules/erb-no-output-control-flow.d.ts +5 -4
  134. package/dist/types/src/rules/erb-prefer-image-tag-helper.d.ts +7 -0
  135. package/dist/types/src/rules/erb-require-whitespace-inside-tags.d.ts +5 -4
  136. package/dist/types/src/rules/erb-requires-trailing-newline.d.ts +6 -0
  137. package/dist/types/src/rules/html-anchor-require-href.d.ts +5 -4
  138. package/dist/types/src/rules/html-aria-attribute-must-be-valid.d.ts +5 -4
  139. package/dist/types/src/rules/html-aria-level-must-be-valid.d.ts +7 -0
  140. package/dist/types/src/rules/html-aria-role-heading-requires-level.d.ts +5 -4
  141. package/dist/types/src/rules/html-aria-role-must-be-valid.d.ts +5 -4
  142. package/dist/types/src/rules/html-attribute-double-quotes.d.ts +5 -4
  143. package/dist/types/src/rules/html-attribute-values-require-quotes.d.ts +5 -4
  144. package/dist/types/src/rules/html-boolean-attributes-no-value.d.ts +5 -4
  145. package/dist/types/src/rules/html-img-require-alt.d.ts +5 -4
  146. package/dist/types/src/rules/html-no-block-inside-inline.d.ts +5 -4
  147. package/dist/types/src/rules/html-no-duplicate-attributes.d.ts +5 -4
  148. package/dist/types/src/rules/html-no-duplicate-ids.d.ts +5 -4
  149. package/dist/types/src/rules/html-no-empty-headings.d.ts +5 -4
  150. package/dist/types/src/rules/html-no-nested-links.d.ts +5 -4
  151. package/dist/types/src/rules/html-tag-name-lowercase.d.ts +5 -4
  152. package/dist/types/src/rules/index.d.ts +3 -0
  153. package/dist/types/src/rules/parser-no-errors.d.ts +8 -0
  154. package/dist/types/src/rules/rule-utils.d.ts +73 -4
  155. package/dist/types/src/rules/svg-tag-name-capitalization.d.ts +5 -4
  156. package/dist/types/src/types.d.ts +50 -7
  157. package/dist/types/types.d.ts +50 -7
  158. package/docs/rules/README.md +5 -1
  159. package/docs/rules/erb-prefer-image-tag-helper.md +65 -0
  160. package/docs/rules/erb-requires-trailing-newline.md +37 -0
  161. package/docs/rules/html-anchor-require-href.md +1 -1
  162. package/docs/rules/html-aria-level-must-be-valid.md +37 -0
  163. package/docs/rules/parser-no-errors.md +84 -0
  164. package/package.json +4 -4
  165. package/src/cli/argument-parser.ts +33 -19
  166. package/src/cli/file-processor.ts +27 -21
  167. package/src/cli/formatters/base-formatter.ts +2 -2
  168. package/src/cli/formatters/detailed-formatter.ts +9 -9
  169. package/src/cli/formatters/github-actions-formatter.ts +70 -0
  170. package/src/cli/formatters/index.ts +2 -0
  171. package/src/cli/formatters/json-formatter.ts +107 -0
  172. package/src/cli/formatters/simple-formatter.ts +15 -15
  173. package/src/cli/output-manager.ts +143 -0
  174. package/src/cli/summary-reporter.ts +24 -24
  175. package/src/cli.ts +48 -31
  176. package/src/default-rules.ts +8 -0
  177. package/src/linter.ts +42 -8
  178. package/src/rules/erb-no-empty-tags.ts +7 -6
  179. package/src/rules/erb-no-output-control-flow.ts +8 -6
  180. package/src/rules/erb-prefer-image-tag-helper.ts +124 -0
  181. package/src/rules/erb-require-whitespace-inside-tags.ts +7 -6
  182. package/src/rules/erb-requires-trailing-newline.ts +29 -0
  183. package/src/rules/html-anchor-require-href.ts +7 -6
  184. package/src/rules/html-aria-attribute-must-be-valid.ts +7 -7
  185. package/src/rules/html-aria-level-must-be-valid.ts +42 -0
  186. package/src/rules/html-aria-role-heading-requires-level.ts +7 -6
  187. package/src/rules/html-aria-role-must-be-valid.ts +7 -6
  188. package/src/rules/html-attribute-double-quotes.ts +7 -6
  189. package/src/rules/html-attribute-values-require-quotes.ts +7 -6
  190. package/src/rules/html-boolean-attributes-no-value.ts +7 -6
  191. package/src/rules/html-img-require-alt.ts +7 -6
  192. package/src/rules/html-no-block-inside-inline.ts +9 -8
  193. package/src/rules/html-no-duplicate-attributes.ts +7 -6
  194. package/src/rules/html-no-duplicate-ids.ts +7 -7
  195. package/src/rules/html-no-empty-headings.ts +7 -6
  196. package/src/rules/html-no-nested-links.ts +7 -6
  197. package/src/rules/html-tag-name-lowercase.ts +7 -6
  198. package/src/rules/index.ts +3 -0
  199. package/src/rules/parser-no-errors.ts +25 -0
  200. package/src/rules/rule-utils.ts +156 -4
  201. package/src/rules/svg-tag-name-capitalization.ts +7 -6
  202. package/src/types.ts +61 -7
@@ -1,4 +1,5 @@
1
1
  import { BaseRuleVisitor, getTagName } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class NestedLinkVisitor extends BaseRuleVisitor {
3
4
  linkStack = [];
4
5
  checkNestedLink(openTag) {
@@ -34,11 +35,11 @@ class NestedLinkVisitor extends BaseRuleVisitor {
34
35
  super.visitHTMLOpenTagNode(node);
35
36
  }
36
37
  }
37
- export class HTMLNoNestedLinksRule {
38
+ export class HTMLNoNestedLinksRule extends ParserRule {
38
39
  name = "html-no-nested-links";
39
- check(node) {
40
- const visitor = new NestedLinkVisitor(this.name);
41
- visitor.visit(node);
40
+ check(result, context) {
41
+ const visitor = new NestedLinkVisitor(this.name, context);
42
+ visitor.visit(result.value);
42
43
  return visitor.offenses;
43
44
  }
44
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-no-nested-links.js","sourceRoot":"","sources":["../../../src/rules/html-no-nested-links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAK7D,MAAM,iBAAkB,SAAQ,eAAe;IACrC,SAAS,GAAsB,EAAE,CAAA;IAEjC,eAAe,CAAC,OAAwB;QAC9C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,CACb,0EAA0E,EAC1E,OAAO,CAAC,QAAS,CAAC,QAAQ,EAC1B,OAAO,CACR,CAAA;YAED,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,oBAAoB,CAAC,IAAqB;QACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YACtE,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAChC,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAA2B,CAAA;QAChD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;QAEnC,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YACpB,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAChC,OAAM;QACR,CAAC;QAED,wDAAwD;QACxD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QAE7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5B,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAA;IACtB,CAAC;IAED,iFAAiF;IACjF,oBAAoB,CAAC,IAAqB;QACxC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhC,IAAI,OAAO,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;QAED,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;CACF;AAED,MAAM,OAAO,qBAAqB;IAChC,IAAI,GAAG,sBAAsB,CAAA;IAE7B,KAAK,CAAC,IAAU;QACd,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"html-no-nested-links.js","sourceRoot":"","sources":["../../../src/rules/html-no-nested-links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,iBAAkB,SAAQ,eAAe;IACrC,SAAS,GAAsB,EAAE,CAAA;IAEjC,eAAe,CAAC,OAAwB;QAC9C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,CACb,0EAA0E,EAC1E,OAAO,CAAC,QAAS,CAAC,QAAQ,EAC1B,OAAO,CACR,CAAA;YAED,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,oBAAoB,CAAC,IAAqB;QACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YACtE,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAChC,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAA2B,CAAA;QAChD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;QAEnC,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YACpB,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAChC,OAAM;QACR,CAAC;QAED,wDAAwD;QACxD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QAE7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5B,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAA;IACtB,CAAC;IAED,iFAAiF;IACjF,oBAAoB,CAAC,IAAqB;QACxC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhC,IAAI,OAAO,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;QAED,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IACnD,IAAI,GAAG,sBAAsB,CAAA;IAE7B,KAAK,CAAC,MAAmB,EAAE,OAA8B;QACvD,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACzD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { BaseRuleVisitor } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class TagNameLowercaseVisitor extends BaseRuleVisitor {
3
4
  visitHTMLElementNode(node) {
4
5
  const tagName = node.tag_name?.value;
@@ -37,11 +38,11 @@ class TagNameLowercaseVisitor extends BaseRuleVisitor {
37
38
  }
38
39
  }
39
40
  }
40
- export class HTMLTagNameLowercaseRule {
41
+ export class HTMLTagNameLowercaseRule extends ParserRule {
41
42
  name = "html-tag-name-lowercase";
42
- check(node) {
43
- const visitor = new TagNameLowercaseVisitor(this.name);
44
- visitor.visit(node);
43
+ check(result, context) {
44
+ const visitor = new TagNameLowercaseVisitor(this.name, context);
45
+ visitor.visit(result.value);
45
46
  return visitor.offenses;
46
47
  }
47
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-tag-name-lowercase.js","sourceRoot":"","sources":["../../../src/rules/html-tag-name-lowercase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAKjD,MAAM,uBAAwB,SAAQ,eAAe;IACnD,oBAAoB,CAAC,IAAqB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAA2B,CAAC,CAAA;QACrD,CAAC;QAED,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACvD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAA6B,CAAC,CAAA;YACvD,CAAC;YAED,OAAM;QACR,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAE1B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAA6B,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAED,yBAAyB,CAAC,IAA0B;QAClD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAEO,YAAY,CAAC,IAA+D;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;QAE9C,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACjC,IAAI,IAAI,GAAW,IAAI,CAAC,IAAI,CAAA;YAE5B,IAAI,IAAI,CAAC,IAAI,IAAI,wBAAwB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC3D,IAAI,IAAI,CAAC,IAAI,IAAI,yBAAyB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC5D,IAAI,IAAI,CAAC,IAAI,IAAI,8BAA8B;gBAAE,IAAI,GAAG,cAAc,CAAA;YAEtE,IAAI,CAAC,UAAU,CACb,GAAG,IAAI,eAAe,OAAO,iCAAiC,gBAAgB,aAAa,EAC3F,IAAI,CAAC,QAAS,CAAC,QAAQ,EACvB,OAAO,CACR,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,wBAAwB;IACnC,IAAI,GAAG,yBAAyB,CAAA;IAEhC,KAAK,CAAC,IAAU;QACd,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"html-tag-name-lowercase.js","sourceRoot":"","sources":["../../../src/rules/html-tag-name-lowercase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,uBAAwB,SAAQ,eAAe;IACnD,oBAAoB,CAAC,IAAqB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAA2B,CAAC,CAAA;QACrD,CAAC;QAED,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACvD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAA6B,CAAC,CAAA;YACvD,CAAC;YAED,OAAM;QACR,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAE1B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAA6B,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAED,yBAAyB,CAAC,IAA0B;QAClD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAEO,YAAY,CAAC,IAA+D;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;QAE9C,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACjC,IAAI,IAAI,GAAW,IAAI,CAAC,IAAI,CAAA;YAE5B,IAAI,IAAI,CAAC,IAAI,IAAI,wBAAwB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC3D,IAAI,IAAI,CAAC,IAAI,IAAI,yBAAyB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC5D,IAAI,IAAI,CAAC,IAAI,IAAI,8BAA8B;gBAAE,IAAI,GAAG,cAAc,CAAA;YAEtE,IAAI,CAAC,UAAU,CACb,GAAG,IAAI,eAAe,OAAO,iCAAiC,gBAAgB,aAAa,EAC3F,IAAI,CAAC,QAAS,CAAC,QAAQ,EACvB,OAAO,CACR,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,UAAU;IACtD,IAAI,GAAG,yBAAyB,CAAA;IAEhC,KAAK,CAAC,MAAmB,EAAE,OAA8B;QACvD,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC/D,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
@@ -1,6 +1,9 @@
1
1
  export * from "./erb-no-empty-tags.js";
2
2
  export * from "./erb-no-output-control-flow.js";
3
+ export * from "./erb-prefer-image-tag-helper.js";
4
+ export * from "./erb-requires-trailing-newline.js";
3
5
  export * from "./html-anchor-require-href.js";
6
+ export * from "./html-aria-level-must-be-valid.js";
4
7
  export * from "./html-aria-role-heading-requires-level.js";
5
8
  export * from "./html-aria-role-must-be-valid.js";
6
9
  export * from "./html-attribute-double-quotes.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4CAA4C,CAAA;AAC1D,cAAc,mCAAmC,CAAA;AACjD,cAAc,mCAAmC,CAAA;AACjD,cAAc,2CAA2C,CAAA;AACzD,cAAc,uCAAuC,CAAA;AACrD,cAAc,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,cAAc,mCAAmC,CAAA;AACjD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,kCAAkC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,kCAAkC,CAAA;AAChD,cAAc,oCAAoC,CAAA;AAClD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,oCAAoC,CAAA;AAClD,cAAc,4CAA4C,CAAA;AAC1D,cAAc,mCAAmC,CAAA;AACjD,cAAc,mCAAmC,CAAA;AACjD,cAAc,2CAA2C,CAAA;AACzD,cAAc,uCAAuC,CAAA;AACrD,cAAc,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,cAAc,mCAAmC,CAAA;AACjD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,kCAAkC,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { ParserRule } from "../types.js";
2
+ export class ParserNoErrorsRule extends ParserRule {
3
+ name = "parser-no-errors";
4
+ check(result) {
5
+ return result.recursiveErrors().map(error => this.herbErrorToLintOffense(error));
6
+ }
7
+ herbErrorToLintOffense(error) {
8
+ return {
9
+ message: `${error.message} (\`${error.type}\`)`,
10
+ location: error.location,
11
+ severity: error.severity,
12
+ rule: this.name,
13
+ code: this.name,
14
+ source: "linter"
15
+ };
16
+ }
17
+ }
18
+ //# sourceMappingURL=parser-no-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-no-errors.js","sourceRoot":"","sources":["../../../src/rules/parser-no-errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAKxC,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,IAAI,GAAG,kBAAkB,CAAA;IAEzB,KAAK,CAAC,MAAmB;QACvB,OAAO,MAAM,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAC1C,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CACnC,CAAA;IACH,CAAC;IAEO,sBAAsB,CAAC,KAAgB;QAC7C,OAAO;YACL,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK;YAC/C,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,QAAQ;SACjB,CAAA;IACH,CAAC;CACF"}
@@ -1,13 +1,16 @@
1
- import { Visitor } from "@herb-tools/core";
1
+ import { Visitor, Position, Location } from "@herb-tools/core";
2
+ import { DEFAULT_LINT_CONTEXT } from "../types.js";
2
3
  /**
3
4
  * Base visitor class that provides common functionality for rule visitors
4
5
  */
5
6
  export class BaseRuleVisitor extends Visitor {
6
7
  offenses = [];
7
8
  ruleName;
8
- constructor(ruleName) {
9
+ context;
10
+ constructor(ruleName, context) {
9
11
  super();
10
12
  this.ruleName = ruleName;
13
+ this.context = { ...DEFAULT_LINT_CONTEXT, ...context };
11
14
  }
12
15
  /**
13
16
  * Helper method to create a lint offense
@@ -250,6 +253,19 @@ export const ARIA_ATTRIBUTES = new Set([
250
253
  'aria-valuenow',
251
254
  'aria-valuetext',
252
255
  ]);
256
+ /**
257
+ * Helper function to create a location at the end of the source with a 1-character range
258
+ */
259
+ export function createEndOfFileLocation(source) {
260
+ const lines = source.split('\n');
261
+ const lastLineNumber = lines.length;
262
+ const lastLine = lines[lines.length - 1];
263
+ const lastColumnNumber = lastLine.length;
264
+ const startColumn = lastColumnNumber > 0 ? lastColumnNumber - 1 : 0;
265
+ const start = new Position(lastLineNumber, startColumn);
266
+ const end = new Position(lastLineNumber, lastColumnNumber);
267
+ return new Location(start, end);
268
+ }
253
269
  /**
254
270
  * Checks if an element is inline
255
271
  */
@@ -274,6 +290,9 @@ export function isBooleanAttribute(attributeName) {
274
290
  * and attribute iteration logic. Provides simplified interface with extracted attribute info.
275
291
  */
276
292
  export class AttributeVisitorMixin extends BaseRuleVisitor {
293
+ constructor(ruleName, context) {
294
+ super(ruleName, context);
295
+ }
277
296
  visitHTMLOpenTagNode(node) {
278
297
  this.checkAttributesOnNode(node);
279
298
  super.visitHTMLOpenTagNode(node);
@@ -313,4 +332,108 @@ export function forEachAttribute(node, callback) {
313
332
  }
314
333
  }
315
334
  }
335
+ /**
336
+ * Base lexer visitor class that provides common functionality for lexer-based rule visitors
337
+ */
338
+ export class BaseLexerRuleVisitor {
339
+ offenses = [];
340
+ ruleName;
341
+ context;
342
+ constructor(ruleName, context) {
343
+ this.ruleName = ruleName;
344
+ this.context = { ...DEFAULT_LINT_CONTEXT, ...context };
345
+ }
346
+ /**
347
+ * Helper method to create a lint offense for lexer rules
348
+ */
349
+ createOffense(message, location, severity = "error") {
350
+ return {
351
+ rule: this.ruleName,
352
+ code: this.ruleName,
353
+ source: "Herb Linter",
354
+ message,
355
+ location,
356
+ severity,
357
+ };
358
+ }
359
+ /**
360
+ * Helper method to add an offense to the offenses array
361
+ */
362
+ addOffense(message, location, severity = "error") {
363
+ this.offenses.push(this.createOffense(message, location, severity));
364
+ }
365
+ /**
366
+ * Main entry point for lexer rule visitors
367
+ * @param lexResult - The lexer result containing tokens and source
368
+ */
369
+ visit(lexResult) {
370
+ this.visitTokens(lexResult.value.tokens);
371
+ }
372
+ /**
373
+ * Visit all tokens
374
+ * Override this method to implement token-level checks
375
+ */
376
+ visitTokens(tokens) {
377
+ for (const token of tokens) {
378
+ this.visitToken(token);
379
+ }
380
+ }
381
+ /**
382
+ * Visit individual tokens
383
+ * Override this method to implement per-token checks
384
+ */
385
+ visitToken(_token) {
386
+ // Default implementation does nothing
387
+ }
388
+ }
389
+ /**
390
+ * Base source visitor class that provides common functionality for source-based rule visitors
391
+ */
392
+ export class BaseSourceRuleVisitor {
393
+ offenses = [];
394
+ ruleName;
395
+ context;
396
+ constructor(ruleName, context) {
397
+ this.ruleName = ruleName;
398
+ this.context = { ...DEFAULT_LINT_CONTEXT, ...context };
399
+ }
400
+ /**
401
+ * Helper method to create a lint offense for source rules
402
+ */
403
+ createOffense(message, location, severity = "error") {
404
+ return {
405
+ rule: this.ruleName, // Type assertion for compatibility
406
+ code: this.ruleName,
407
+ source: "Herb Linter",
408
+ message,
409
+ location,
410
+ severity,
411
+ };
412
+ }
413
+ /**
414
+ * Helper method to add an offense to the offenses array
415
+ */
416
+ addOffense(message, location, severity = "error") {
417
+ this.offenses.push(this.createOffense(message, location, severity));
418
+ }
419
+ /**
420
+ * Main entry point for source rule visitors
421
+ * @param source - The raw source code
422
+ */
423
+ visit(source) {
424
+ this.visitSource(source);
425
+ }
426
+ /**
427
+ * Helper method to create a location for a specific position in the source
428
+ */
429
+ createLocationAt(source, position) {
430
+ const beforePosition = source.substring(0, position);
431
+ const lines = beforePosition.split('\n');
432
+ const line = lines.length;
433
+ const column = lines[lines.length - 1].length + 1;
434
+ const start = new Position(line, column);
435
+ const end = new Position(line, column);
436
+ return new Location(start, end);
437
+ }
438
+ }
316
439
  //# sourceMappingURL=rule-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rule-utils.js","sourceRoot":"","sources":["../../../src/rules/rule-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule-utils.js","sourceRoot":"","sources":["../../../src/rules/rule-utils.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { BaseRuleVisitor, SVG_CAMEL_CASE_ELEMENTS, SVG_LOWERCASE_TO_CAMELCASE } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class SVGTagNameCapitalizationVisitor extends BaseRuleVisitor {
3
4
  insideSVG = false;
4
5
  visitHTMLElementNode(node) {
@@ -46,11 +47,11 @@ class SVGTagNameCapitalizationVisitor extends BaseRuleVisitor {
46
47
  }
47
48
  }
48
49
  }
49
- export class SVGTagNameCapitalizationRule {
50
+ export class SVGTagNameCapitalizationRule extends ParserRule {
50
51
  name = "svg-tag-name-capitalization";
51
- check(node) {
52
- const visitor = new SVGTagNameCapitalizationVisitor(this.name);
53
- visitor.visit(node);
52
+ check(result, context) {
53
+ const visitor = new SVGTagNameCapitalizationVisitor(this.name, context);
54
+ visitor.visit(result.value);
54
55
  return visitor.offenses;
55
56
  }
56
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"svg-tag-name-capitalization.js","sourceRoot":"","sources":["../../../src/rules/svg-tag-name-capitalization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA;AAKtG,MAAM,+BAAgC,SAAQ,eAAe;IACnD,SAAS,GAAG,KAAK,CAAA;IAEzB,oBAAoB,CAAC,IAAqB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACvD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAA;YACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;YAC1B,IAAI,CAAC,SAAS,GAAG,YAAY,CAAA;YAC7B,OAAM;QACR,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAA2B,CAAC,CAAA;YACrD,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAA6B,CAAC,CAAA;YACvD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,yBAAyB,CAAC,IAA0B;QAClD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAEO,YAAY,CAAC,IAA+D;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,IAAI,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAM;QAEhD,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;QAC9C,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QAEzE,IAAI,gBAAgB,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACrD,IAAI,IAAI,GAAW,IAAI,CAAC,IAAI,CAAA;YAE5B,IAAI,IAAI,CAAC,IAAI,IAAI,wBAAwB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC3D,IAAI,IAAI,CAAC,IAAI,IAAI,yBAAyB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC5D,IAAI,IAAI,CAAC,IAAI,IAAI,8BAA8B;gBAAE,IAAI,GAAG,cAAc,CAAA;YAEtE,IAAI,CAAC,UAAU,CACb,GAAG,IAAI,mBAAmB,OAAO,8CAA8C,gBAAgB,aAAa,EAC5G,IAAI,CAAC,QAAS,CAAC,QAAQ,EACvB,OAAO,CACR,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,4BAA4B;IACvC,IAAI,GAAG,6BAA6B,CAAA;IAEpC,KAAK,CAAC,IAAU;QACd,MAAM,OAAO,GAAG,IAAI,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"svg-tag-name-capitalization.js","sourceRoot":"","sources":["../../../src/rules/svg-tag-name-capitalization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA;AAEtG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,+BAAgC,SAAQ,eAAe;IACnD,SAAS,GAAG,KAAK,CAAA;IAEzB,oBAAoB,CAAC,IAAqB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACvD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAA;YACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;YAC1B,IAAI,CAAC,SAAS,GAAG,YAAY,CAAA;YAC7B,OAAM;QACR,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAA2B,CAAC,CAAA;YACrD,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAA6B,CAAC,CAAA;YACvD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,yBAAyB,CAAC,IAA0B;QAClD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAEO,YAAY,CAAC,IAA+D;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,IAAI,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAM;QAEhD,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;QAC9C,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QAEzE,IAAI,gBAAgB,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACrD,IAAI,IAAI,GAAW,IAAI,CAAC,IAAI,CAAA;YAE5B,IAAI,IAAI,CAAC,IAAI,IAAI,wBAAwB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC3D,IAAI,IAAI,CAAC,IAAI,IAAI,yBAAyB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC5D,IAAI,IAAI,CAAC,IAAI,IAAI,8BAA8B;gBAAE,IAAI,GAAG,cAAc,CAAA;YAEtE,IAAI,CAAC,UAAU,CACb,GAAG,IAAI,mBAAmB,OAAO,8CAA8C,gBAAgB,aAAa,EAC5G,IAAI,CAAC,QAAS,CAAC,QAAQ,EACvB,OAAO,CACR,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,UAAU;IAC1D,IAAI,GAAG,6BAA6B,CAAA;IAEpC,KAAK,CAAC,MAAmB,EAAE,OAA8B;QACvD,MAAM,OAAO,GAAG,IAAI,+BAA+B,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACvE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
package/dist/src/types.js CHANGED
@@ -1,2 +1,16 @@
1
- export {};
1
+ export class ParserRule {
2
+ static type = "parser";
3
+ }
4
+ export class LexerRule {
5
+ static type = "lexer";
6
+ }
7
+ /**
8
+ * Default context object with all keys defined but set to undefined
9
+ */
10
+ export const DEFAULT_LINT_CONTEXT = {
11
+ fileName: undefined
12
+ };
13
+ export class SourceRule {
14
+ static type = "source";
15
+ }
2
16
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAsBA,MAAM,OAAgB,UAAU;IAC9B,MAAM,CAAC,IAAI,GAAG,QAAiB,CAAA;;AAKjC,MAAM,OAAgB,SAAS;IAC7B,MAAM,CAAC,IAAI,GAAG,OAAgB,CAAA;;AAkBhC;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,QAAQ,EAAE,SAAS;CACX,CAAA;AAEV,MAAM,OAAgB,UAAU;IAC9B,MAAM,CAAC,IAAI,GAAG,QAAiB,CAAA"}
@@ -1 +1 @@
1
- {"root":["../src/cli.ts","../src/default-rules.ts","../src/herb-lint.ts","../src/index.ts","../src/linter.ts","../src/types.ts","../src/cli/argument-parser.ts","../src/cli/file-processor.ts","../src/cli/index.ts","../src/cli/summary-reporter.ts","../src/cli/formatters/base-formatter.ts","../src/cli/formatters/detailed-formatter.ts","../src/cli/formatters/index.ts","../src/cli/formatters/simple-formatter.ts","../src/rules/erb-no-empty-tags.ts","../src/rules/erb-no-output-control-flow.ts","../src/rules/erb-require-whitespace-inside-tags.ts","../src/rules/html-anchor-require-href.ts","../src/rules/html-aria-attribute-must-be-valid.ts","../src/rules/html-aria-role-heading-requires-level.ts","../src/rules/html-aria-role-must-be-valid.ts","../src/rules/html-attribute-double-quotes.ts","../src/rules/html-attribute-values-require-quotes.ts","../src/rules/html-boolean-attributes-no-value.ts","../src/rules/html-img-require-alt.ts","../src/rules/html-no-block-inside-inline.ts","../src/rules/html-no-duplicate-attributes.ts","../src/rules/html-no-duplicate-ids.ts","../src/rules/html-no-empty-headings.ts","../src/rules/html-no-nested-links.ts","../src/rules/html-tag-name-lowercase.ts","../src/rules/index.ts","../src/rules/rule-utils.ts","../src/rules/svg-tag-name-capitalization.ts"],"version":"5.8.3"}
1
+ {"root":["../src/cli.ts","../src/default-rules.ts","../src/herb-lint.ts","../src/index.ts","../src/linter.ts","../src/types.ts","../src/cli/argument-parser.ts","../src/cli/file-processor.ts","../src/cli/index.ts","../src/cli/output-manager.ts","../src/cli/summary-reporter.ts","../src/cli/formatters/base-formatter.ts","../src/cli/formatters/detailed-formatter.ts","../src/cli/formatters/github-actions-formatter.ts","../src/cli/formatters/index.ts","../src/cli/formatters/json-formatter.ts","../src/cli/formatters/simple-formatter.ts","../src/rules/erb-no-empty-tags.ts","../src/rules/erb-no-output-control-flow.ts","../src/rules/erb-prefer-image-tag-helper.ts","../src/rules/erb-require-whitespace-inside-tags.ts","../src/rules/erb-requires-trailing-newline.ts","../src/rules/html-anchor-require-href.ts","../src/rules/html-aria-attribute-must-be-valid.ts","../src/rules/html-aria-level-must-be-valid.ts","../src/rules/html-aria-role-heading-requires-level.ts","../src/rules/html-aria-role-must-be-valid.ts","../src/rules/html-attribute-double-quotes.ts","../src/rules/html-attribute-values-require-quotes.ts","../src/rules/html-boolean-attributes-no-value.ts","../src/rules/html-img-require-alt.ts","../src/rules/html-no-block-inside-inline.ts","../src/rules/html-no-duplicate-attributes.ts","../src/rules/html-no-duplicate-ids.ts","../src/rules/html-no-empty-headings.ts","../src/rules/html-no-nested-links.ts","../src/rules/html-tag-name-lowercase.ts","../src/rules/index.ts","../src/rules/parser-no-errors.ts","../src/rules/rule-utils.ts","../src/rules/svg-tag-name-capitalization.ts"],"version":"5.8.3"}
@@ -1,7 +1,8 @@
1
1
  import type { ThemeInput } from "@herb-tools/highlighter";
2
+ export type FormatOption = "simple" | "detailed" | "json" | "github";
2
3
  export interface ParsedArguments {
3
4
  pattern: string;
4
- formatOption: 'simple' | 'detailed';
5
+ formatOption: FormatOption;
5
6
  showTiming: boolean;
6
7
  theme: ThemeInput;
7
8
  wrapLines: boolean;
@@ -1,21 +1,22 @@
1
1
  import type { Diagnostic } from "@herb-tools/core";
2
+ import type { FormatOption } from "./argument-parser.js";
2
3
  export interface ProcessedFile {
3
4
  filename: string;
4
- diagnostic: Diagnostic;
5
+ offense: Diagnostic;
5
6
  content: string;
6
7
  }
7
8
  export interface ProcessingResult {
8
9
  totalErrors: number;
9
10
  totalWarnings: number;
10
- filesWithIssues: number;
11
+ filesWithOffenses: number;
11
12
  ruleCount: number;
12
- allDiagnostics: ProcessedFile[];
13
- ruleViolations: Map<string, {
13
+ allOffenses: ProcessedFile[];
14
+ ruleOffenses: Map<string, {
14
15
  count: number;
15
16
  files: Set<string>;
16
17
  }>;
17
18
  }
18
19
  export declare class FileProcessor {
19
20
  private linter;
20
- processFiles(files: string[]): Promise<ProcessingResult>;
21
+ processFiles(files: string[], formatOption?: FormatOption): Promise<ProcessingResult>;
21
22
  }
@@ -1,6 +1,6 @@
1
1
  import type { Diagnostic } from "@herb-tools/core";
2
2
  import type { ProcessedFile } from "../file-processor.js";
3
3
  export declare abstract class BaseFormatter {
4
- abstract format(allDiagnostics: ProcessedFile[], isSingleFile?: boolean): Promise<void>;
5
- abstract formatFile(filename: string, diagnostics: Diagnostic[]): void;
4
+ abstract format(allOffenses: ProcessedFile[], isSingleFile?: boolean): Promise<void>;
5
+ abstract formatFile(filename: string, offenses: Diagnostic[]): void;
6
6
  }
@@ -8,6 +8,6 @@ export declare class DetailedFormatter extends BaseFormatter {
8
8
  private wrapLines;
9
9
  private truncateLines;
10
10
  constructor(theme?: ThemeInput, wrapLines?: boolean, truncateLines?: boolean);
11
- format(allDiagnostics: ProcessedFile[], isSingleFile?: boolean): Promise<void>;
12
- formatFile(_filename: string, _diagnostics: Diagnostic[]): void;
11
+ format(allOffenses: ProcessedFile[], isSingleFile?: boolean): Promise<void>;
12
+ formatFile(_filename: string, _offenses: Diagnostic[]): void;
13
13
  }
@@ -0,0 +1,12 @@
1
+ import { BaseFormatter } from "./base-formatter.js";
2
+ import type { Diagnostic } from "@herb-tools/core";
3
+ import type { ProcessedFile } from "../file-processor.js";
4
+ export declare class GitHubActionsFormatter extends BaseFormatter {
5
+ private static readonly MESSAGE_ESCAPE_MAP;
6
+ private static readonly PARAM_ESCAPE_MAP;
7
+ format(allDiagnostics: ProcessedFile[]): Promise<void>;
8
+ formatFile(filename: string, diagnostics: Diagnostic[]): void;
9
+ private formatDiagnostic;
10
+ private escapeMessage;
11
+ private escapeParam;
12
+ }
@@ -1,3 +1,5 @@
1
1
  export { BaseFormatter } from "./base-formatter.js";
2
2
  export { SimpleFormatter } from "./simple-formatter.js";
3
3
  export { DetailedFormatter } from "./detailed-formatter.js";
4
+ export { JSONFormatter, type JSONOutput } from "./json-formatter.js";
5
+ export { GitHubActionsFormatter } from "./github-actions-formatter.js";
@@ -0,0 +1,42 @@
1
+ import { BaseFormatter } from "./base-formatter.js";
2
+ import type { Diagnostic, SerializedDiagnostic } from "@herb-tools/core";
3
+ import type { ProcessedFile } from "../file-processor.js";
4
+ interface JSONOffense extends SerializedDiagnostic {
5
+ filename: string;
6
+ }
7
+ interface JSONSummary {
8
+ filesChecked: number;
9
+ filesWithOffenses: number;
10
+ totalErrors: number;
11
+ totalWarnings: number;
12
+ totalOffenses: number;
13
+ ruleCount: number;
14
+ }
15
+ interface JSONTiming {
16
+ startTime: string;
17
+ duration: number;
18
+ }
19
+ export interface JSONOutput {
20
+ offenses: JSONOffense[];
21
+ summary: JSONSummary | null;
22
+ timing: JSONTiming | null;
23
+ completed: boolean;
24
+ clean: boolean | null;
25
+ message: string | null;
26
+ }
27
+ interface JSONFormatOptions {
28
+ files: string[];
29
+ totalErrors: number;
30
+ totalWarnings: number;
31
+ filesWithOffenses: number;
32
+ ruleCount: number;
33
+ startTime: number;
34
+ startDate: Date;
35
+ showTiming: boolean;
36
+ }
37
+ export declare class JSONFormatter extends BaseFormatter {
38
+ format(allOffenses: ProcessedFile[]): Promise<void>;
39
+ formatWithSummary(allOffenses: ProcessedFile[], options: JSONFormatOptions): Promise<void>;
40
+ formatFile(_filename: string, _offenses: Diagnostic[]): void;
41
+ }
42
+ export {};
@@ -2,6 +2,6 @@ import { BaseFormatter } from "./base-formatter.js";
2
2
  import type { Diagnostic } from "@herb-tools/core";
3
3
  import type { ProcessedFile } from "../file-processor.js";
4
4
  export declare class SimpleFormatter extends BaseFormatter {
5
- format(allDiagnostics: ProcessedFile[]): Promise<void>;
6
- formatFile(filename: string, diagnostics: Diagnostic[]): void;
5
+ format(allOffenses: ProcessedFile[]): Promise<void>;
6
+ formatFile(filename: string, offenses: Diagnostic[]): void;
7
7
  }
@@ -0,0 +1,31 @@
1
+ import type { ThemeInput } from "@herb-tools/highlighter";
2
+ import type { FormatOption } from "./argument-parser.js";
3
+ import type { ProcessingResult } from "./file-processor.js";
4
+ interface OutputOptions {
5
+ formatOption: FormatOption;
6
+ theme: ThemeInput;
7
+ wrapLines: boolean;
8
+ truncateLines: boolean;
9
+ showTiming: boolean;
10
+ startTime: number;
11
+ startDate: Date;
12
+ }
13
+ interface LintResults extends ProcessingResult {
14
+ files: string[];
15
+ }
16
+ export declare class OutputManager {
17
+ private summaryReporter;
18
+ /**
19
+ * Output successful lint results
20
+ */
21
+ outputResults(results: LintResults, options: OutputOptions): Promise<void>;
22
+ /**
23
+ * Output informational message (like "no files found")
24
+ */
25
+ outputInfo(message: string, options: OutputOptions): void;
26
+ /**
27
+ * Output error message
28
+ */
29
+ outputError(message: string, options: OutputOptions): void;
30
+ }
31
+ export {};
@@ -2,12 +2,12 @@ export interface SummaryData {
2
2
  files: string[];
3
3
  totalErrors: number;
4
4
  totalWarnings: number;
5
- filesWithViolations: number;
5
+ filesWithOffenses: number;
6
6
  ruleCount: number;
7
7
  startTime: number;
8
8
  startDate: Date;
9
9
  showTiming: boolean;
10
- ruleViolations: Map<string, {
10
+ ruleOffenses: Map<string, {
11
11
  count: number;
12
12
  files: Set<string>;
13
13
  }>;
@@ -15,7 +15,7 @@ export interface SummaryData {
15
15
  export declare class SummaryReporter {
16
16
  private pluralize;
17
17
  displaySummary(data: SummaryData): void;
18
- displayMostViolatedRules(ruleViolations: Map<string, {
18
+ displayMostViolatedRules(ruleOffenses: Map<string, {
19
19
  count: number;
20
20
  files: Set<string>;
21
21
  }>, limit?: number): void;
@@ -1,6 +1,8 @@
1
1
  export declare class CLI {
2
2
  private argumentParser;
3
3
  private fileProcessor;
4
- private summaryReporter;
4
+ private outputManager;
5
+ private exitWithError;
6
+ private exitWithInfo;
5
7
  run(): Promise<void>;
6
8
  }
@@ -1,18 +1,33 @@
1
- import type { RuleClass, LintResult } from "./types.js";
2
- import type { DocumentNode } from "@herb-tools/core";
1
+ import type { RuleClass, LintResult, LintContext } from "./types.js";
2
+ import type { HerbBackend } from "@herb-tools/core";
3
3
  export declare class Linter {
4
4
  private rules;
5
+ private herb;
5
6
  private offenses;
6
7
  /**
7
8
  * Creates a new Linter instance.
8
- * @param rules - Array of rule classes (not instances) to use. If not provided, uses default rules.
9
+ * @param herb - The Herb backend instance for parsing and lexing
10
+ * @param rules - Array of rule classes (Parser/AST or Lexer) to use. If not provided, uses default rules.
9
11
  */
10
- constructor(rules?: RuleClass[]);
12
+ constructor(herb: HerbBackend, rules?: RuleClass[]);
11
13
  /**
12
14
  * Returns the default set of rule classes used by the linter.
13
15
  * @returns Array of rule classes
14
16
  */
15
17
  private getDefaultRules;
16
18
  getRuleCount(): number;
17
- lint(document: DocumentNode): LintResult;
19
+ /**
20
+ * Type guard to check if a rule is a LexerRule
21
+ */
22
+ private isLexerRule;
23
+ /**
24
+ * Type guard to check if a rule is a SourceRule
25
+ */
26
+ private isSourceRule;
27
+ /**
28
+ * Lint source code using Parser/AST, Lexer, and Source rules.
29
+ * @param source - The source code to lint
30
+ * @param context - Optional context for linting (e.g., fileName for distinguishing files vs snippets)
31
+ */
32
+ lint(source: string, context?: Partial<LintContext>): LintResult;
18
33
  }
@@ -1,6 +1,7 @@
1
- import type { Rule, LintOffense } from "../types.js";
2
- import type { Node } from "@herb-tools/core";
3
- export declare class ERBNoEmptyTagsRule implements Rule {
1
+ import { ParserRule } from "../types.js";
2
+ import type { LintOffense, LintContext } from "../types.js";
3
+ import type { ParseResult } from "@herb-tools/core";
4
+ export declare class ERBNoEmptyTagsRule extends ParserRule {
4
5
  name: string;
5
- check(node: Node): LintOffense[];
6
+ check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
6
7
  }