@herb-tools/linter 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/README.md +16 -4
  2. package/dist/herb-lint.js +557 -122
  3. package/dist/herb-lint.js.map +1 -1
  4. package/dist/index.cjs +454 -67
  5. package/dist/index.cjs.map +1 -1
  6. package/dist/index.js +448 -69
  7. package/dist/index.js.map +1 -1
  8. package/dist/package.json +4 -4
  9. package/dist/src/cli/file-processor.js +2 -4
  10. package/dist/src/cli/file-processor.js.map +1 -1
  11. package/dist/src/default-rules.js +8 -0
  12. package/dist/src/default-rules.js.map +1 -1
  13. package/dist/src/linter.js +37 -6
  14. package/dist/src/linter.js.map +1 -1
  15. package/dist/src/rules/erb-no-empty-tags.js +4 -3
  16. package/dist/src/rules/erb-no-empty-tags.js.map +1 -1
  17. package/dist/src/rules/erb-no-output-control-flow.js +4 -3
  18. package/dist/src/rules/erb-no-output-control-flow.js.map +1 -1
  19. package/dist/src/rules/erb-prefer-image-tag-helper.js +93 -0
  20. package/dist/src/rules/erb-prefer-image-tag-helper.js.map +1 -0
  21. package/dist/src/rules/erb-require-whitespace-inside-tags.js +22 -5
  22. package/dist/src/rules/erb-require-whitespace-inside-tags.js.map +1 -1
  23. package/dist/src/rules/erb-requires-trailing-newline.js +22 -0
  24. package/dist/src/rules/erb-requires-trailing-newline.js.map +1 -0
  25. package/dist/src/rules/html-anchor-require-href.js +4 -3
  26. package/dist/src/rules/html-anchor-require-href.js.map +1 -1
  27. package/dist/src/rules/html-aria-attribute-must-be-valid.js +4 -3
  28. package/dist/src/rules/html-aria-attribute-must-be-valid.js.map +1 -1
  29. package/dist/src/rules/html-aria-level-must-be-valid.js +27 -0
  30. package/dist/src/rules/html-aria-level-must-be-valid.js.map +1 -0
  31. package/dist/src/rules/html-aria-role-heading-requires-level.js +4 -3
  32. package/dist/src/rules/html-aria-role-heading-requires-level.js.map +1 -1
  33. package/dist/src/rules/html-aria-role-must-be-valid.js +4 -3
  34. package/dist/src/rules/html-aria-role-must-be-valid.js.map +1 -1
  35. package/dist/src/rules/html-attribute-double-quotes.js +4 -3
  36. package/dist/src/rules/html-attribute-double-quotes.js.map +1 -1
  37. package/dist/src/rules/html-attribute-values-require-quotes.js +4 -3
  38. package/dist/src/rules/html-attribute-values-require-quotes.js.map +1 -1
  39. package/dist/src/rules/html-boolean-attributes-no-value.js +4 -3
  40. package/dist/src/rules/html-boolean-attributes-no-value.js.map +1 -1
  41. package/dist/src/rules/html-img-require-alt.js +4 -3
  42. package/dist/src/rules/html-img-require-alt.js.map +1 -1
  43. package/dist/src/rules/html-no-block-inside-inline.js +4 -3
  44. package/dist/src/rules/html-no-block-inside-inline.js.map +1 -1
  45. package/dist/src/rules/html-no-duplicate-attributes.js +4 -3
  46. package/dist/src/rules/html-no-duplicate-attributes.js.map +1 -1
  47. package/dist/src/rules/html-no-duplicate-ids.js +4 -3
  48. package/dist/src/rules/html-no-duplicate-ids.js.map +1 -1
  49. package/dist/src/rules/html-no-empty-headings.js +4 -3
  50. package/dist/src/rules/html-no-empty-headings.js.map +1 -1
  51. package/dist/src/rules/html-no-nested-links.js +4 -3
  52. package/dist/src/rules/html-no-nested-links.js.map +1 -1
  53. package/dist/src/rules/html-tag-name-lowercase.js +21 -11
  54. package/dist/src/rules/html-tag-name-lowercase.js.map +1 -1
  55. package/dist/src/rules/index.js +4 -0
  56. package/dist/src/rules/index.js.map +1 -1
  57. package/dist/src/rules/rule-utils.js +168 -2
  58. package/dist/src/rules/rule-utils.js.map +1 -1
  59. package/dist/src/rules/svg-tag-name-capitalization.js +58 -0
  60. package/dist/src/rules/svg-tag-name-capitalization.js.map +1 -0
  61. package/dist/src/types.js +15 -1
  62. package/dist/src/types.js.map +1 -1
  63. package/dist/tsconfig.tsbuildinfo +1 -1
  64. package/dist/types/linter.d.ts +20 -5
  65. package/dist/types/rules/erb-no-empty-tags.d.ts +4 -3
  66. package/dist/types/rules/erb-no-output-control-flow.d.ts +4 -3
  67. package/dist/types/rules/erb-prefer-image-tag-helper.d.ts +7 -0
  68. package/dist/types/rules/erb-require-whitespace-inside-tags.d.ts +4 -3
  69. package/dist/types/rules/erb-requires-trailing-newline.d.ts +6 -0
  70. package/dist/types/rules/html-anchor-require-href.d.ts +4 -3
  71. package/dist/types/rules/html-aria-attribute-must-be-valid.d.ts +4 -3
  72. package/dist/types/rules/html-aria-level-must-be-valid.d.ts +7 -0
  73. package/dist/types/rules/html-aria-role-heading-requires-level.d.ts +4 -3
  74. package/dist/types/rules/html-aria-role-must-be-valid.d.ts +4 -3
  75. package/dist/types/rules/html-attribute-double-quotes.d.ts +4 -3
  76. package/dist/types/rules/html-attribute-values-require-quotes.d.ts +4 -3
  77. package/dist/types/rules/html-boolean-attributes-no-value.d.ts +4 -3
  78. package/dist/types/rules/html-img-require-alt.d.ts +4 -3
  79. package/dist/types/rules/html-no-block-inside-inline.d.ts +4 -3
  80. package/dist/types/rules/html-no-duplicate-attributes.d.ts +4 -3
  81. package/dist/types/rules/html-no-duplicate-ids.d.ts +4 -3
  82. package/dist/types/rules/html-no-empty-headings.d.ts +4 -3
  83. package/dist/types/rules/html-no-nested-links.d.ts +4 -3
  84. package/dist/types/rules/html-tag-name-lowercase.d.ts +4 -3
  85. package/dist/types/rules/index.d.ts +4 -0
  86. package/dist/types/rules/rule-utils.d.ts +82 -4
  87. package/dist/types/rules/svg-tag-name-capitalization.d.ts +7 -0
  88. package/dist/types/src/linter.d.ts +20 -5
  89. package/dist/types/src/rules/erb-no-empty-tags.d.ts +4 -3
  90. package/dist/types/src/rules/erb-no-output-control-flow.d.ts +4 -3
  91. package/dist/types/src/rules/erb-prefer-image-tag-helper.d.ts +7 -0
  92. package/dist/types/src/rules/erb-require-whitespace-inside-tags.d.ts +4 -3
  93. package/dist/types/src/rules/erb-requires-trailing-newline.d.ts +6 -0
  94. package/dist/types/src/rules/html-anchor-require-href.d.ts +4 -3
  95. package/dist/types/src/rules/html-aria-attribute-must-be-valid.d.ts +4 -3
  96. package/dist/types/src/rules/html-aria-level-must-be-valid.d.ts +7 -0
  97. package/dist/types/src/rules/html-aria-role-heading-requires-level.d.ts +4 -3
  98. package/dist/types/src/rules/html-aria-role-must-be-valid.d.ts +4 -3
  99. package/dist/types/src/rules/html-attribute-double-quotes.d.ts +4 -3
  100. package/dist/types/src/rules/html-attribute-values-require-quotes.d.ts +4 -3
  101. package/dist/types/src/rules/html-boolean-attributes-no-value.d.ts +4 -3
  102. package/dist/types/src/rules/html-img-require-alt.d.ts +4 -3
  103. package/dist/types/src/rules/html-no-block-inside-inline.d.ts +4 -3
  104. package/dist/types/src/rules/html-no-duplicate-attributes.d.ts +4 -3
  105. package/dist/types/src/rules/html-no-duplicate-ids.d.ts +4 -3
  106. package/dist/types/src/rules/html-no-empty-headings.d.ts +4 -3
  107. package/dist/types/src/rules/html-no-nested-links.d.ts +4 -3
  108. package/dist/types/src/rules/html-tag-name-lowercase.d.ts +4 -3
  109. package/dist/types/src/rules/index.d.ts +4 -0
  110. package/dist/types/src/rules/rule-utils.d.ts +82 -4
  111. package/dist/types/src/rules/svg-tag-name-capitalization.d.ts +7 -0
  112. package/dist/types/src/types.d.ts +49 -6
  113. package/dist/types/types.d.ts +49 -6
  114. package/docs/rules/README.md +5 -1
  115. package/docs/rules/erb-prefer-image-tag-helper.md +65 -0
  116. package/docs/rules/erb-requires-trailing-newline.md +37 -0
  117. package/docs/rules/html-anchor-require-href.md +1 -1
  118. package/docs/rules/html-aria-level-must-be-valid.md +37 -0
  119. package/docs/rules/svg-tag-name-capitalization.md +57 -0
  120. package/package.json +4 -4
  121. package/src/cli/file-processor.ts +2 -4
  122. package/src/default-rules.ts +8 -0
  123. package/src/linter.ts +42 -8
  124. package/src/rules/erb-no-empty-tags.ts +5 -4
  125. package/src/rules/erb-no-output-control-flow.ts +6 -4
  126. package/src/rules/erb-prefer-image-tag-helper.ts +124 -0
  127. package/src/rules/erb-require-whitespace-inside-tags.ts +38 -6
  128. package/src/rules/erb-requires-trailing-newline.ts +27 -0
  129. package/src/rules/html-anchor-require-href.ts +5 -4
  130. package/src/rules/html-aria-attribute-must-be-valid.ts +5 -5
  131. package/src/rules/html-aria-level-must-be-valid.ts +42 -0
  132. package/src/rules/html-aria-role-heading-requires-level.ts +5 -4
  133. package/src/rules/html-aria-role-must-be-valid.ts +5 -4
  134. package/src/rules/html-attribute-double-quotes.ts +5 -4
  135. package/src/rules/html-attribute-values-require-quotes.ts +5 -4
  136. package/src/rules/html-boolean-attributes-no-value.ts +5 -4
  137. package/src/rules/html-img-require-alt.ts +5 -4
  138. package/src/rules/html-no-block-inside-inline.ts +5 -4
  139. package/src/rules/html-no-duplicate-attributes.ts +5 -4
  140. package/src/rules/html-no-duplicate-ids.ts +5 -5
  141. package/src/rules/html-no-empty-headings.ts +5 -4
  142. package/src/rules/html-no-nested-links.ts +5 -4
  143. package/src/rules/html-tag-name-lowercase.ts +29 -13
  144. package/src/rules/index.ts +4 -0
  145. package/src/rules/rule-utils.ts +203 -4
  146. package/src/rules/svg-tag-name-capitalization.ts +74 -0
  147. package/src/types.ts +60 -6
@@ -1,4 +1,5 @@
1
1
  import { ARIA_ATTRIBUTES, AttributeVisitorMixin, } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class AriaAttributeMustBeValid extends AttributeVisitorMixin {
3
4
  checkAttribute(attributeName, _attributeValue, attributeNode, _parentNode) {
4
5
  if (!attributeName.startsWith("aria-"))
@@ -13,10 +14,10 @@ class AriaAttributeMustBeValid extends AttributeVisitorMixin {
13
14
  }
14
15
  }
15
16
  }
16
- export class HTMLAriaAttributeMustBeValid {
17
+ export class HTMLAriaAttributeMustBeValid extends ParserRule {
17
18
  name = "html-aria-attribute-must-be-valid";
18
- check(node) {
19
- const visitor = new AriaAttributeMustBeValid(this.name);
19
+ check(node, context) {
20
+ const visitor = new AriaAttributeMustBeValid(this.name, context);
20
21
  visitor.visit(node);
21
22
  return visitor.offenses;
22
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-aria-attribute-must-be-valid.js","sourceRoot":"","sources":["../../../src/rules/html-aria-attribute-must-be-valid.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAUzB,MAAM,wBAAyB,SAAQ,qBAAqB;IAC1D,cAAc,CACZ,aAAqB,EACrB,eAA8B,EAC9B,aAAgC,EAChC,WAAmD;QAEnD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO;QAE/C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,EAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,OAAO,EAAE,mBAAmB,aAAa,0FAA0F;gBACnI,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,IAAI,EAAE,IAAI,CAAC,QAAQ;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,4BAA4B;IACvC,IAAI,GAAG,mCAAmC,CAAC;IAE3C,KAAK,CAAC,IAAU;QACd,MAAM,OAAO,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC1B,CAAC;CACF"}
1
+ {"version":3,"file":"html-aria-attribute-must-be-valid.js","sourceRoot":"","sources":["../../../src/rules/html-aria-attribute-must-be-valid.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AASzC,MAAM,wBAAyB,SAAQ,qBAAqB;IAC1D,cAAc,CACZ,aAAqB,EACrB,eAA8B,EAC9B,aAAgC,EAChC,WAAmD;QAEnD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO;QAE/C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,EAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,OAAO,EAAE,mBAAmB,aAAa,0FAA0F;gBACnI,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,IAAI,EAAE,IAAI,CAAC,QAAQ;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,UAAU;IAC1D,IAAI,GAAG,mCAAmC,CAAC;IAE3C,KAAK,CAAC,IAAU,EAAE,OAA8B;QAC9C,MAAM,OAAO,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC1B,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import { AttributeVisitorMixin } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
3
+ class HTMLAriaLevelMustBeValidVisitor extends AttributeVisitorMixin {
4
+ checkAttribute(attributeName, attributeValue, attributeNode, _parentNode) {
5
+ if (attributeName !== "aria-level")
6
+ return;
7
+ if (attributeValue !== null && attributeValue.includes("<%"))
8
+ return;
9
+ if (attributeValue === null || attributeValue === "") {
10
+ this.addOffense(`The \`aria-level\` attribute must be an integer between 1 and 6, got an empty value.`, attributeNode.location);
11
+ return;
12
+ }
13
+ const number = parseInt(attributeValue);
14
+ if (isNaN(number) || number < 1 || number > 6 || attributeValue !== number.toString()) {
15
+ this.addOffense(`The \`aria-level\` attribute must be an integer between 1 and 6, got \`${attributeValue}\`.`, attributeNode.location);
16
+ }
17
+ }
18
+ }
19
+ export class HTMLAriaLevelMustBeValidRule extends ParserRule {
20
+ name = "html-aria-level-must-be-valid";
21
+ check(node, context) {
22
+ const visitor = new HTMLAriaLevelMustBeValidVisitor(this.name, context);
23
+ visitor.visit(node);
24
+ return visitor.offenses;
25
+ }
26
+ }
27
+ //# sourceMappingURL=html-aria-level-must-be-valid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-aria-level-must-be-valid.js","sourceRoot":"","sources":["../../../src/rules/html-aria-level-must-be-valid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAKxC,MAAM,+BAAgC,SAAQ,qBAAqB;IACvD,cAAc,CAAC,aAAqB,EAAE,cAA6B,EAAE,aAAgC,EAAE,WAAmD;QAClK,IAAI,aAAa,KAAK,YAAY;YAAE,OAAM;QAC1C,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAM;QAEpE,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;YACrD,IAAI,CAAC,UAAU,CACb,sFAAsF,EACtF,aAAa,CAAC,QAAQ,CACvB,CAAA;YAED,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA;QAEvC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,cAAc,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;YACtF,IAAI,CAAC,UAAU,CACb,0EAA0E,cAAc,KAAK,EAC7F,aAAa,CAAC,QAAQ,CACvB,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,UAAU;IAC1D,IAAI,GAAG,+BAA+B,CAAA;IAEtC,KAAK,CAAC,IAAU,EAAE,OAA8B;QAC9C,MAAM,OAAO,GAAG,IAAI,+BAA+B,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAEvE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAEnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { AttributeVisitorMixin, getAttributeName, getAttributes } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class AriaRoleHeadingRequiresLevel extends AttributeVisitorMixin {
3
4
  // We want to check 2 attributes here:
4
5
  // 1. role="heading"
@@ -15,10 +16,10 @@ class AriaRoleHeadingRequiresLevel extends AttributeVisitorMixin {
15
16
  }
16
17
  }
17
18
  }
18
- export class HTMLAriaRoleHeadingRequiresLevelRule {
19
+ export class HTMLAriaRoleHeadingRequiresLevelRule extends ParserRule {
19
20
  name = "html-aria-role-heading-requires-level";
20
- check(node) {
21
- const visitor = new AriaRoleHeadingRequiresLevel(this.name);
21
+ check(node, context) {
22
+ const visitor = new AriaRoleHeadingRequiresLevel(this.name, context);
22
23
  visitor.visit(node);
23
24
  return visitor.offenses;
24
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-aria-role-heading-requires-level.js","sourceRoot":"","sources":["../../../src/rules/html-aria-role-heading-requires-level.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAKxF,MAAM,4BAA6B,SAAQ,qBAAqB;IAE9D,sCAAsC;IACtC,oBAAoB;IACpB,0DAA0D;IAC1D,cAAc,CACZ,aAAqB,EACrB,cAA6B,EAC7B,aAAgC,EAChC,UAAkD;QAGlD,IAAI,CAAC,CAAC,aAAa,KAAK,MAAM,IAAI,cAAc,KAAK,SAAS,CAAC,EAAE,CAAC;YAChE,OAAM;QACR,CAAC;QAED,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;QAE/C,4DAA4D;QAC5D,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,CAAA;QACzF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,IAAI,CAAC,UAAU,CACb,wEAAwE,EACxE,aAAa,CAAC,QAAQ,EACtB,OAAO,CACR,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,oCAAoC;IAC/C,IAAI,GAAG,uCAAuC,CAAA;IAE9C,KAAK,CAAC,IAAU;QACd,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"html-aria-role-heading-requires-level.js","sourceRoot":"","sources":["../../../src/rules/html-aria-role-heading-requires-level.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAExF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,4BAA6B,SAAQ,qBAAqB;IAE9D,sCAAsC;IACtC,oBAAoB;IACpB,0DAA0D;IAC1D,cAAc,CACZ,aAAqB,EACrB,cAA6B,EAC7B,aAAgC,EAChC,UAAkD;QAGlD,IAAI,CAAC,CAAC,aAAa,KAAK,MAAM,IAAI,cAAc,KAAK,SAAS,CAAC,EAAE,CAAC;YAChE,OAAM;QACR,CAAC;QAED,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;QAE/C,4DAA4D;QAC5D,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,CAAA;QACzF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,IAAI,CAAC,UAAU,CACb,wEAAwE,EACxE,aAAa,CAAC,QAAQ,EACtB,OAAO,CACR,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,oCAAqC,SAAQ,UAAU;IAClE,IAAI,GAAG,uCAAuC,CAAA;IAE9C,KAAK,CAAC,IAAU,EAAE,OAA8B;QAC9C,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACpE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { AttributeVisitorMixin, VALID_ARIA_ROLES } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class AriaRoleMustBeValid extends AttributeVisitorMixin {
3
4
  checkAttribute(attributeName, attributeValue, attributeNode) {
4
5
  if (attributeName !== "role")
@@ -10,10 +11,10 @@ class AriaRoleMustBeValid extends AttributeVisitorMixin {
10
11
  this.addOffense(`The \`role\` attribute must be a valid ARIA role. Role \`${attributeValue}\` is not recognized.`, attributeNode.location, "error");
11
12
  }
12
13
  }
13
- export class HTMLAriaRoleMustBeValidRule {
14
+ export class HTMLAriaRoleMustBeValidRule extends ParserRule {
14
15
  name = "html-aria-role-must-be-valid";
15
- check(node) {
16
- const visitor = new AriaRoleMustBeValid(this.name);
16
+ check(node, context) {
17
+ const visitor = new AriaRoleMustBeValid(this.name, context);
17
18
  visitor.visit(node);
18
19
  return visitor.offenses;
19
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-aria-role-must-be-valid.js","sourceRoot":"","sources":["../../../src/rules/html-aria-role-must-be-valid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAKzE,MAAM,mBAAoB,SAAQ,qBAAqB;IACrD,cAAc,CAAC,aAAqB,EAAE,cAA6B,EAAE,aAAgC;QACnG,IAAI,aAAa,KAAK,MAAM;YAAE,OAAM;QACpC,IAAI,cAAc,KAAK,IAAI;YAAE,OAAM;QACnC,IAAI,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC;YAAE,OAAM;QAEhD,IAAI,CAAC,UAAU,CACb,4DAA4D,cAAc,uBAAuB,EACjG,aAAa,CAAC,QAAQ,EACtB,OAAO,CACR,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,2BAA2B;IACtC,IAAI,GAAG,8BAA8B,CAAA;IAErC,KAAK,CAAC,IAAU;QACd,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAElD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAEnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"html-aria-role-must-be-valid.js","sourceRoot":"","sources":["../../../src/rules/html-aria-role-must-be-valid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEzE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,mBAAoB,SAAQ,qBAAqB;IACrD,cAAc,CAAC,aAAqB,EAAE,cAA6B,EAAE,aAAgC;QACnG,IAAI,aAAa,KAAK,MAAM;YAAE,OAAM;QACpC,IAAI,cAAc,KAAK,IAAI;YAAE,OAAM;QACnC,IAAI,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC;YAAE,OAAM;QAEhD,IAAI,CAAC,UAAU,CACb,4DAA4D,cAAc,uBAAuB,EACjG,aAAa,CAAC,QAAQ,EACtB,OAAO,CACR,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,2BAA4B,SAAQ,UAAU;IACzD,IAAI,GAAG,8BAA8B,CAAA;IAErC,KAAK,CAAC,IAAU,EAAE,OAA8B;QAC9C,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAE3D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAEnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { AttributeVisitorMixin, getAttributeValueQuoteType, hasAttributeValue } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class AttributeDoubleQuotesVisitor extends AttributeVisitorMixin {
3
4
  checkAttribute(attributeName, attributeValue, attributeNode) {
4
5
  if (!hasAttributeValue(attributeNode))
@@ -10,10 +11,10 @@ class AttributeDoubleQuotesVisitor extends AttributeVisitorMixin {
10
11
  this.addOffense(`Attribute \`${attributeName}\` uses single quotes. Prefer double quotes for HTML attribute values: \`${attributeName}="value"\`.`, attributeNode.value.location, "warning");
11
12
  }
12
13
  }
13
- export class HTMLAttributeDoubleQuotesRule {
14
+ export class HTMLAttributeDoubleQuotesRule extends ParserRule {
14
15
  name = "html-attribute-double-quotes";
15
- check(node) {
16
- const visitor = new AttributeDoubleQuotesVisitor(this.name);
16
+ check(node, context) {
17
+ const visitor = new AttributeDoubleQuotesVisitor(this.name, context);
17
18
  visitor.visit(node);
18
19
  return visitor.offenses;
19
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-attribute-double-quotes.js","sourceRoot":"","sources":["../../../src/rules/html-attribute-double-quotes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAKtG,MAAM,4BAA6B,SAAQ,qBAAqB;IACpD,cAAc,CAAC,aAAqB,EAAE,cAA6B,EAAE,aAAgC;QAC7G,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;YAAE,OAAM;QAC7C,IAAI,0BAA0B,CAAC,aAAa,CAAC,KAAK,QAAQ;YAAE,OAAM;QAClE,IAAI,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAM,CAAC,6DAA6D;QAEvG,IAAI,CAAC,UAAU,CACb,eAAe,aAAa,4EAA4E,aAAa,aAAa,EAClI,aAAa,CAAC,KAAM,CAAC,QAAQ,EAC7B,SAAS,CACV,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,6BAA6B;IACxC,IAAI,GAAG,8BAA8B,CAAA;IAErC,KAAK,CAAC,IAAU;QACd,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"html-attribute-double-quotes.js","sourceRoot":"","sources":["../../../src/rules/html-attribute-double-quotes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEtG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,4BAA6B,SAAQ,qBAAqB;IACpD,cAAc,CAAC,aAAqB,EAAE,cAA6B,EAAE,aAAgC;QAC7G,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;YAAE,OAAM;QAC7C,IAAI,0BAA0B,CAAC,aAAa,CAAC,KAAK,QAAQ;YAAE,OAAM;QAClE,IAAI,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAM,CAAC,6DAA6D;QAEvG,IAAI,CAAC,UAAU,CACb,eAAe,aAAa,4EAA4E,aAAa,aAAa,EAClI,aAAa,CAAC,KAAM,CAAC,QAAQ,EAC7B,SAAS,CACV,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,6BAA8B,SAAQ,UAAU;IAC3D,IAAI,GAAG,8BAA8B,CAAA;IAErC,KAAK,CAAC,IAAU,EAAE,OAA8B;QAC9C,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACpE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { AttributeVisitorMixin } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class AttributeValuesRequireQuotesVisitor extends AttributeVisitorMixin {
3
4
  checkAttribute(attributeName, _attributeValue, attributeNode) {
4
5
  if (attributeNode.value?.type !== "AST_HTML_ATTRIBUTE_VALUE_NODE")
@@ -11,10 +12,10 @@ class AttributeValuesRequireQuotesVisitor extends AttributeVisitorMixin {
11
12
  `Attribute value should be quoted: \`${attributeName}="value"\`. Always wrap attribute values in quotes.`, valueNode.location, "error");
12
13
  }
13
14
  }
14
- export class HTMLAttributeValuesRequireQuotesRule {
15
+ export class HTMLAttributeValuesRequireQuotesRule extends ParserRule {
15
16
  name = "html-attribute-values-require-quotes";
16
- check(node) {
17
- const visitor = new AttributeValuesRequireQuotesVisitor(this.name);
17
+ check(node, context) {
18
+ const visitor = new AttributeValuesRequireQuotesVisitor(this.name, context);
18
19
  visitor.visit(node);
19
20
  return visitor.offenses;
20
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-attribute-values-require-quotes.js","sourceRoot":"","sources":["../../../src/rules/html-attribute-values-require-quotes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAKvD,MAAM,mCAAoC,SAAQ,qBAAqB;IAC3D,cAAc,CAAC,aAAqB,EAAE,eAA8B,EAAE,aAAgC;QAC9G,IAAI,aAAa,CAAC,KAAK,EAAE,IAAI,KAAK,+BAA+B;YAAE,OAAM;QAEzE,MAAM,SAAS,GAAG,aAAa,CAAC,KAA+B,CAAA;QAC/D,IAAI,SAAS,CAAC,MAAM;YAAE,OAAM;QAE5B,IAAI,CAAC,UAAU;QACb,gDAAgD;QAChD,uCAAuC,aAAa,qDAAqD,EACzG,SAAS,CAAC,QAAQ,EAClB,OAAO,CACR,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,oCAAoC;IAC/C,IAAI,GAAG,sCAAsC,CAAA;IAE7C,KAAK,CAAC,IAAU;QACd,MAAM,OAAO,GAAG,IAAI,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"html-attribute-values-require-quotes.js","sourceRoot":"","sources":["../../../src/rules/html-attribute-values-require-quotes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,mCAAoC,SAAQ,qBAAqB;IAC3D,cAAc,CAAC,aAAqB,EAAE,eAA8B,EAAE,aAAgC;QAC9G,IAAI,aAAa,CAAC,KAAK,EAAE,IAAI,KAAK,+BAA+B;YAAE,OAAM;QAEzE,MAAM,SAAS,GAAG,aAAa,CAAC,KAA+B,CAAA;QAC/D,IAAI,SAAS,CAAC,MAAM;YAAE,OAAM;QAE5B,IAAI,CAAC,UAAU;QACb,gDAAgD;QAChD,uCAAuC,aAAa,qDAAqD,EACzG,SAAS,CAAC,QAAQ,EAClB,OAAO,CACR,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,oCAAqC,SAAQ,UAAU;IAClE,IAAI,GAAG,sCAAsC,CAAA;IAE7C,KAAK,CAAC,IAAU,EAAE,OAA8B;QAC9C,MAAM,OAAO,GAAG,IAAI,mCAAmC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC3E,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { AttributeVisitorMixin, isBooleanAttribute, hasAttributeValue } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class BooleanAttributesNoValueVisitor extends AttributeVisitorMixin {
3
4
  checkAttribute(attributeName, _attributeValue, attributeNode) {
4
5
  if (!isBooleanAttribute(attributeName))
@@ -8,10 +9,10 @@ class BooleanAttributesNoValueVisitor extends AttributeVisitorMixin {
8
9
  this.addOffense(`Boolean attribute \`${attributeName}\` should not have a value. Use \`${attributeName}\` instead of \`${attributeName}="${attributeName}"\`.`, attributeNode.value.location, "error");
9
10
  }
10
11
  }
11
- export class HTMLBooleanAttributesNoValueRule {
12
+ export class HTMLBooleanAttributesNoValueRule extends ParserRule {
12
13
  name = "html-boolean-attributes-no-value";
13
- check(node) {
14
- const visitor = new BooleanAttributesNoValueVisitor(this.name);
14
+ check(node, context) {
15
+ const visitor = new BooleanAttributesNoValueVisitor(this.name, context);
15
16
  visitor.visit(node);
16
17
  return visitor.offenses;
17
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-boolean-attributes-no-value.js","sourceRoot":"","sources":["../../../src/rules/html-boolean-attributes-no-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAK9F,MAAM,+BAAgC,SAAQ,qBAAqB;IACvD,cAAc,CAAC,aAAqB,EAAE,eAA8B,EAAE,aAAgC;QAC9G,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;YAAE,OAAM;QAC9C,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;YAAE,OAAM;QAE7C,IAAI,CAAC,UAAU,CACb,uBAAuB,aAAa,qCAAqC,aAAa,mBAAmB,aAAa,KAAK,aAAa,MAAM,EAC9I,aAAa,CAAC,KAAM,CAAC,QAAQ,EAC7B,OAAO,CACR,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,gCAAgC;IAC3C,IAAI,GAAG,kCAAkC,CAAA;IAEzC,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":"html-boolean-attributes-no-value.js","sourceRoot":"","sources":["../../../src/rules/html-boolean-attributes-no-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAE9F,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,+BAAgC,SAAQ,qBAAqB;IACvD,cAAc,CAAC,aAAqB,EAAE,eAA8B,EAAE,aAAgC;QAC9G,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;YAAE,OAAM;QAC9C,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;YAAE,OAAM;QAE7C,IAAI,CAAC,UAAU,CACb,uBAAuB,aAAa,qCAAqC,aAAa,mBAAmB,aAAa,KAAK,aAAa,MAAM,EAC9I,aAAa,CAAC,KAAM,CAAC,QAAQ,EAC7B,OAAO,CACR,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,gCAAiC,SAAQ,UAAU;IAC9D,IAAI,GAAG,kCAAkC,CAAA;IAEzC,KAAK,CAAC,IAAU,EAAE,OAA8B;QAC9C,MAAM,OAAO,GAAG,IAAI,+BAA+B,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACvE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { BaseRuleVisitor, getTagName, hasAttribute } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class ImgRequireAltVisitor extends BaseRuleVisitor {
3
4
  visitHTMLOpenTagNode(node) {
4
5
  this.checkImgTag(node);
@@ -18,10 +19,10 @@ class ImgRequireAltVisitor extends BaseRuleVisitor {
18
19
  }
19
20
  }
20
21
  }
21
- export class HTMLImgRequireAltRule {
22
+ export class HTMLImgRequireAltRule extends ParserRule {
22
23
  name = "html-img-require-alt";
23
- check(node) {
24
- const visitor = new ImgRequireAltVisitor(this.name);
24
+ check(node, context) {
25
+ const visitor = new ImgRequireAltVisitor(this.name, context);
25
26
  visitor.visit(node);
26
27
  return visitor.offenses;
27
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-img-require-alt.js","sourceRoot":"","sources":["../../../src/rules/html-img-require-alt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAK3E,MAAM,oBAAqB,SAAQ,eAAe;IAChD,oBAAoB,CAAC,IAAqB;QACxC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACtB,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,yBAAyB,CAAC,IAA0B;QAClD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACtB,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;IAEO,WAAW,CAAC,IAA4C;QAC9D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhC,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,OAAM;QACR,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,CACb,oIAAoI,EACpI,IAAI,CAAC,QAAS,CAAC,QAAQ,EACvB,OAAO,CACR,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,qBAAqB;IAChC,IAAI,GAAG,sBAAsB,CAAA;IAE7B,KAAK,CAAC,IAAU;QACd,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"html-img-require-alt.js","sourceRoot":"","sources":["../../../src/rules/html-img-require-alt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,oBAAqB,SAAQ,eAAe;IAChD,oBAAoB,CAAC,IAAqB;QACxC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACtB,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,yBAAyB,CAAC,IAA0B;QAClD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACtB,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;IAEO,WAAW,CAAC,IAA4C;QAC9D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhC,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,OAAM;QACR,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,CACb,oIAAoI,EACpI,IAAI,CAAC,QAAS,CAAC,QAAQ,EACvB,OAAO,CACR,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IACnD,IAAI,GAAG,sBAAsB,CAAA;IAE7B,KAAK,CAAC,IAAU,EAAE,OAA8B;QAC9C,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC5D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { BaseRuleVisitor, isInlineElement, isBlockElement } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class BlockInsideInlineVisitor extends BaseRuleVisitor {
3
4
  inlineStack = [];
4
5
  isValidHTMLOpenTag(node) {
@@ -48,10 +49,10 @@ class BlockInsideInlineVisitor extends BaseRuleVisitor {
48
49
  this.visitBlockElement(node);
49
50
  }
50
51
  }
51
- export class HTMLNoBlockInsideInlineRule {
52
+ export class HTMLNoBlockInsideInlineRule extends ParserRule {
52
53
  name = "html-no-block-inside-inline";
53
- check(node) {
54
- const visitor = new BlockInsideInlineVisitor(this.name);
54
+ check(node, context) {
55
+ const visitor = new BlockInsideInlineVisitor(this.name, context);
55
56
  visitor.visit(node);
56
57
  return visitor.offenses;
57
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-no-block-inside-inline.js","sourceRoot":"","sources":["../../../src/rules/html-no-block-inside-inline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html-no-block-inside-inline.js","sourceRoot":"","sources":["../../../src/rules/html-no-block-inside-inline.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { BaseRuleVisitor, forEachAttribute } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class NoDuplicateAttributesVisitor extends BaseRuleVisitor {
3
4
  visitHTMLOpenTagNode(node) {
4
5
  this.checkDuplicateAttributes(node);
@@ -32,10 +33,10 @@ class NoDuplicateAttributesVisitor extends BaseRuleVisitor {
32
33
  }
33
34
  }
34
35
  }
35
- export class HTMLNoDuplicateAttributesRule {
36
+ export class HTMLNoDuplicateAttributesRule extends ParserRule {
36
37
  name = "html-no-duplicate-attributes";
37
- check(node) {
38
- const visitor = new NoDuplicateAttributesVisitor(this.name);
38
+ check(node, context) {
39
+ const visitor = new NoDuplicateAttributesVisitor(this.name, context);
39
40
  visitor.visit(node);
40
41
  return visitor.offenses;
41
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-no-duplicate-attributes.js","sourceRoot":"","sources":["../../../src/rules/html-no-duplicate-attributes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAKnE,MAAM,4BAA6B,SAAQ,eAAe;IACxD,oBAAoB,CAAC,IAAqB;QACxC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAA;QACnC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,yBAAyB,CAAC,IAA0B;QAClD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAA;QACnC,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;IAEO,wBAAwB,CAAC,IAA4C;QAC3E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAmC,CAAA;QAEjE,gBAAgB,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,EAAE;YACvC,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,KAAK,8BAA8B;gBAAE,OAAM;YAEvE,MAAM,QAAQ,GAAG,aAAa,CAAC,IAA6B,CAAA;YAC5D,IAAI,CAAC,QAAQ,CAAC,IAAI;gBAAE,OAAM;YAE1B,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA,CAAC,uCAAuC;YAE/F,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBACvC,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;YACvC,CAAC;YAED,cAAc,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,KAAK,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,cAAc,EAAE,CAAC;YACxD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;oBAE7B,IAAI,CAAC,UAAU,CACb,yBAAyB,aAAa,mDAAmD,EACzF,QAAQ,CAAC,QAAQ,EACjB,OAAO,CACR,CAAA;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,6BAA6B;IACxC,IAAI,GAAG,8BAA8B,CAAA;IAErC,KAAK,CAAC,IAAU;QACd,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"html-no-duplicate-attributes.js","sourceRoot":"","sources":["../../../src/rules/html-no-duplicate-attributes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,4BAA6B,SAAQ,eAAe;IACxD,oBAAoB,CAAC,IAAqB;QACxC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAA;QACnC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,yBAAyB,CAAC,IAA0B;QAClD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAA;QACnC,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;IAEO,wBAAwB,CAAC,IAA4C;QAC3E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAmC,CAAA;QAEjE,gBAAgB,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,EAAE;YACvC,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,KAAK,8BAA8B;gBAAE,OAAM;YAEvE,MAAM,QAAQ,GAAG,aAAa,CAAC,IAA6B,CAAA;YAC5D,IAAI,CAAC,QAAQ,CAAC,IAAI;gBAAE,OAAM;YAE1B,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA,CAAC,uCAAuC;YAE/F,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBACvC,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;YACvC,CAAC;YAED,cAAc,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,KAAK,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,cAAc,EAAE,CAAC;YACxD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;oBAE7B,IAAI,CAAC,UAAU,CACb,yBAAyB,aAAa,mDAAmD,EACzF,QAAQ,CAAC,QAAQ,EACjB,OAAO,CACR,CAAA;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,6BAA8B,SAAQ,UAAU;IAC3D,IAAI,GAAG,8BAA8B,CAAA;IAErC,KAAK,CAAC,IAAU,EAAE,OAA8B;QAC9C,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACpE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { AttributeVisitorMixin } from "./rule-utils";
2
+ import { ParserRule } from "../types";
2
3
  class NoDuplicateIdsVisitor extends AttributeVisitorMixin {
3
4
  documentIds = new Set();
4
5
  checkAttribute(attributeName, attributeValue, attributeNode) {
@@ -14,10 +15,10 @@ class NoDuplicateIdsVisitor extends AttributeVisitorMixin {
14
15
  this.documentIds.add(id);
15
16
  }
16
17
  }
17
- export class HTMLNoDuplicateIdsRule {
18
+ export class HTMLNoDuplicateIdsRule extends ParserRule {
18
19
  name = "html-no-duplicate-ids";
19
- check(node) {
20
- const visitor = new NoDuplicateIdsVisitor(this.name);
20
+ check(node, context) {
21
+ const visitor = new NoDuplicateIdsVisitor(this.name, context);
21
22
  visitor.visit(node);
22
23
  return visitor.offenses;
23
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-no-duplicate-ids.js","sourceRoot":"","sources":["../../../src/rules/html-no-duplicate-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAKpD,MAAM,qBAAsB,SAAQ,qBAAqB;IAC/C,WAAW,GAAgB,IAAI,GAAG,EAAU,CAAA;IAE1C,cAAc,CAAC,aAAqB,EAAE,cAA6B,EAAE,aAAmB;QAChG,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,IAAI;YAAE,OAAM;QAChD,IAAI,CAAC,cAAc;YAAE,OAAM;QAE3B,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE,CAAA;QAEhC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CACb,kBAAkB,EAAE,iDAAiD,EACrE,aAAa,CAAC,QAAQ,EACtB,OAAO,CACR,CAAA;YAED,OAAM;QACR,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,sBAAsB;IACjC,IAAI,GAAG,uBAAuB,CAAA;IAE9B,KAAK,CAAC,IAAU;QACd,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEpD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAEnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"html-no-duplicate-ids.js","sourceRoot":"","sources":["../../../src/rules/html-no-duplicate-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAIrC,MAAM,qBAAsB,SAAQ,qBAAqB;IAC/C,WAAW,GAAgB,IAAI,GAAG,EAAU,CAAA;IAE1C,cAAc,CAAC,aAAqB,EAAE,cAA6B,EAAE,aAAmB;QAChG,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,IAAI;YAAE,OAAM;QAChD,IAAI,CAAC,cAAc;YAAE,OAAM;QAE3B,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE,CAAA;QAEhC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CACb,kBAAkB,EAAE,iDAAiD,EACrE,aAAa,CAAC,QAAQ,EACtB,OAAO,CACR,CAAA;YAED,OAAM;QACR,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,UAAU;IACpD,IAAI,GAAG,uBAAuB,CAAA;IAE9B,KAAK,CAAC,IAAU,EAAE,OAA8B;QAC9C,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAE7D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAEnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { BaseRuleVisitor, getTagName, getAttributes, findAttributeByName, getAttributeValue, HEADING_TAGS } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class NoEmptyHeadingsVisitor extends BaseRuleVisitor {
3
4
  visitHTMLElementNode(node) {
4
5
  this.checkHeadingElement(node);
@@ -137,10 +138,10 @@ class NoEmptyHeadingsVisitor extends BaseRuleVisitor {
137
138
  return false;
138
139
  }
139
140
  }
140
- export class HTMLNoEmptyHeadingsRule {
141
+ export class HTMLNoEmptyHeadingsRule extends ParserRule {
141
142
  name = "html-no-empty-headings";
142
- check(node) {
143
- const visitor = new NoEmptyHeadingsVisitor(this.name);
143
+ check(node, context) {
144
+ const visitor = new NoEmptyHeadingsVisitor(this.name, context);
144
145
  visitor.visit(node);
145
146
  return visitor.offenses;
146
147
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-no-empty-headings.js","sourceRoot":"","sources":["../../../src/rules/html-no-empty-headings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAKlI,MAAM,sBAAuB,SAAQ,eAAe;IAClD,oBAAoB,CAAC,IAAqB;QACxC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAC9B,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,yBAAyB,CAAC,IAA0B;QAClD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAA;QAClC,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;IAEO,mBAAmB,CAAC,IAAqB;QAC/C,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YACtE,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAA2B,CAAA;QAChD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;QAEnC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAM;QACR,CAAC;QAED,MAAM,iBAAiB,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACnD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QAElD,IAAI,CAAC,iBAAiB,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,OAAM;QACR,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,kBAAkB,GAAG,iBAAiB;gBAC1C,CAAC,CAAC,MAAM,OAAO,KAAK;gBACpB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAA;YAErC,IAAI,CAAC,UAAU,CACb,mBAAmB,kBAAkB,iFAAiF,EACtH,IAAI,CAAC,QAAQ,EACb,OAAO,CACR,CAAA;QACH,CAAC;IACH,CAAC;IAEO,uBAAuB,CAAC,IAA0B;QACxD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAM;QACR,CAAC;QAED,qEAAqE;QACrE,MAAM,iBAAiB,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACnD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAE/C,IAAI,CAAC,iBAAiB,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,OAAM;QACR,CAAC;QAED,yCAAyC;QACzC,MAAM,kBAAkB,GAAG,iBAAiB;YAC1C,CAAC,CAAC,MAAM,OAAO,KAAK;YACpB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAA;QAErC,IAAI,CAAC,UAAU,CACb,mBAAmB,kBAAkB,iFAAiF,EACtH,IAAI,CAAC,QAAS,CAAC,QAAQ,EACvB,OAAO,CACR,CAAA;IACH,CAAC;IAEO,cAAc,CAAC,IAAqB;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,0DAA0D;QAC1D,IAAI,oBAAoB,GAAG,KAAK,CAAA;QAEhC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACtC,MAAM,WAAW,GAAG,KAAoB,CAAA;gBAExC,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1C,oBAAoB,GAAG,IAAI,CAAA;oBAC3B,MAAK;gBACP,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,KAAqB,CAAA;gBAEtC,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvC,oBAAoB,GAAG,IAAI,CAAA;oBAC3B,MAAK;gBACP,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;gBAClD,MAAM,WAAW,GAAG,KAAwB,CAAA;gBAE5C,+DAA+D;gBAC/D,IAAI,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC1C,oBAAoB,GAAG,IAAI,CAAA;oBAC3B,MAAK;gBACP,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,6FAA6F;gBAC7F,oBAAoB,GAAG,IAAI,CAAA;gBAC3B,MAAK;YACP,CAAC;QACH,CAAC;QAED,OAAO,CAAC,oBAAoB,CAAA;IAC9B,CAAC;IAEO,cAAc,CAAC,IAA4C;QACjE,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,aAAa,GAAG,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAE7D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,SAAS,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAA;QAClD,OAAO,SAAS,KAAK,SAAS,CAAA;IAChC,CAAC;IAEO,mBAAmB,CAAC,IAAqB;QAC/C,8CAA8C;QAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YACtE,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAA2B,CAAA;QAChD,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QACzC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;QAE1E,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,CAAA;YAE9D,IAAI,eAAe,KAAK,MAAM,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,KAAK,CAAA;QACd,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACtC,MAAM,WAAW,GAAG,KAAoB,CAAA;gBACxC,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1C,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,KAAqB,CAAA;gBACtC,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvC,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;gBAClD,MAAM,WAAW,GAAG,KAAwB,CAAA;gBAC5C,IAAI,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC1C,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,6FAA6F;gBAC7F,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;CACF;AAED,MAAM,OAAO,uBAAuB;IAClC,IAAI,GAAG,wBAAwB,CAAA;IAE/B,KAAK,CAAC,IAAU;QACd,MAAM,OAAO,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"html-no-empty-headings.js","sourceRoot":"","sources":["../../../src/rules/html-no-empty-headings.ts"],"names":[],"mappings":"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"}
@@ -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,10 +35,10 @@ 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);
40
+ check(node, context) {
41
+ const visitor = new NestedLinkVisitor(this.name, context);
41
42
  visitor.visit(node);
42
43
  return visitor.offenses;
43
44
  }
@@ -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,IAAU,EAAE,OAA8B;QAC9C,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACzD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
@@ -1,12 +1,21 @@
1
1
  import { BaseRuleVisitor } from "./rule-utils.js";
2
+ import { ParserRule } from "../types.js";
2
3
  class TagNameLowercaseVisitor extends BaseRuleVisitor {
3
- visitHTMLOpenTagNode(node) {
4
- this.checkTagName(node);
5
- this.visitChildNodes(node);
6
- }
7
- visitHTMLCloseTagNode(node) {
8
- this.checkTagName(node);
4
+ visitHTMLElementNode(node) {
5
+ const tagName = node.tag_name?.value;
6
+ if (node.open_tag) {
7
+ this.checkTagName(node.open_tag);
8
+ }
9
+ if (tagName && ["svg"].includes(tagName.toLowerCase())) {
10
+ if (node.close_tag) {
11
+ this.checkTagName(node.close_tag);
12
+ }
13
+ return;
14
+ }
9
15
  this.visitChildNodes(node);
16
+ if (node.close_tag) {
17
+ this.checkTagName(node.close_tag);
18
+ }
10
19
  }
11
20
  visitHTMLSelfCloseTagNode(node) {
12
21
  this.checkTagName(node);
@@ -16,7 +25,8 @@ class TagNameLowercaseVisitor extends BaseRuleVisitor {
16
25
  const tagName = node.tag_name?.value;
17
26
  if (!tagName)
18
27
  return;
19
- if (tagName !== tagName.toLowerCase()) {
28
+ const lowercaseTagName = tagName.toLowerCase();
29
+ if (tagName !== lowercaseTagName) {
20
30
  let type = node.type;
21
31
  if (node.type == "AST_HTML_OPEN_TAG_NODE")
22
32
  type = "Opening";
@@ -24,14 +34,14 @@ class TagNameLowercaseVisitor extends BaseRuleVisitor {
24
34
  type = "Closing";
25
35
  if (node.type == "AST_HTML_SELF_CLOSE_TAG_NODE")
26
36
  type = "Self-closing";
27
- this.addOffense(`${type} tag name \`${tagName}\` should be lowercase. Use \`${tagName.toLowerCase()}\` instead.`, node.tag_name.location, "error");
37
+ this.addOffense(`${type} tag name \`${tagName}\` should be lowercase. Use \`${lowercaseTagName}\` instead.`, node.tag_name.location, "error");
28
38
  }
29
39
  }
30
40
  }
31
- export class HTMLTagNameLowercaseRule {
41
+ export class HTMLTagNameLowercaseRule extends ParserRule {
32
42
  name = "html-tag-name-lowercase";
33
- check(node) {
34
- const visitor = new TagNameLowercaseVisitor(this.name);
43
+ check(node, context) {
44
+ const visitor = new TagNameLowercaseVisitor(this.name, context);
35
45
  visitor.visit(node);
36
46
  return visitor.offenses;
37
47
  }
@@ -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,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,qBAAqB,CAAC,IAAsB;QAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,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;QACpC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,IAAI,OAAO,KAAK,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YACtC,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,OAAO,CAAC,WAAW,EAAE,aAAa,EAChG,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,IAAU,EAAE,OAA8B;QAC9C,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC/D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,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";
@@ -13,4 +16,5 @@ export * from "./html-no-duplicate-ids.js";
13
16
  export * from "./html-no-empty-headings.js";
14
17
  export * from "./html-no-nested-links.js";
15
18
  export * from "./html-tag-name-lowercase.js";
19
+ export * from "./svg-tag-name-capitalization.js";
16
20
  //# sourceMappingURL=index.js.map
@@ -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"}
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"}