codelaw-rules-html 0.2.0__py3-none-any.whl

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 (107) hide show
  1. codelaw_rules_html/LICENSE +23 -0
  2. codelaw_rules_html/NOTICE +24 -0
  3. codelaw_rules_html/README.md +167 -0
  4. codelaw_rules_html/codelaw-pack.toml +6 -0
  5. codelaw_rules_html/corpus.toml +76 -0
  6. codelaw_rules_html/data/html/elements.json +4892 -0
  7. codelaw_rules_html/data/html/entities.json +1 -0
  8. codelaw_rules_html/data/html/input-attributes.json +227 -0
  9. codelaw_rules_html/presets/html/a11y.toml +29 -0
  10. codelaw_rules_html/presets/html/conventions.toml +6 -0
  11. codelaw_rules_html/presets/html/document.toml +8 -0
  12. codelaw_rules_html/presets/html/recommended.toml +67 -0
  13. codelaw_rules_html/rules/html/area-alt.md +48 -0
  14. codelaw_rules_html/rules/html/aria-hidden-body.md +39 -0
  15. codelaw_rules_html/rules/html/aria-label-misuse.md +42 -0
  16. codelaw_rules_html/rules/html/attribute-allowed-values.cases.md +31 -0
  17. codelaw_rules_html/rules/html/attribute-allowed-values.md +41 -0
  18. codelaw_rules_html/rules/html/attribute-misuse.md +39 -0
  19. codelaw_rules_html/rules/html/autocomplete-password.md +41 -0
  20. codelaw_rules_html/rules/html/button-type.cases.md +28 -0
  21. codelaw_rules_html/rules/html/button-type.md +35 -0
  22. codelaw_rules_html/rules/html/close-attr.md +33 -0
  23. codelaw_rules_html/rules/html/close-order.cases.md +38 -0
  24. codelaw_rules_html/rules/html/close-order.md +47 -0
  25. codelaw_rules_html/rules/html/deprecated.md +39 -0
  26. codelaw_rules_html/rules/html/doctype-html.md +36 -0
  27. codelaw_rules_html/rules/html/element-name.cases.md +21 -0
  28. codelaw_rules_html/rules/html/element-name.md +42 -0
  29. codelaw_rules_html/rules/html/element-permitted-content.cases.md +54 -0
  30. codelaw_rules_html/rules/html/element-permitted-content.md +45 -0
  31. codelaw_rules_html/rules/html/element-permitted-occurrences.md +45 -0
  32. codelaw_rules_html/rules/html/element-permitted-order.md +44 -0
  33. codelaw_rules_html/rules/html/element-permitted-parent.cases.md +11 -0
  34. codelaw_rules_html/rules/html/element-permitted-parent.md +43 -0
  35. codelaw_rules_html/rules/html/element-required-ancestor.md +45 -0
  36. codelaw_rules_html/rules/html/element-required-attributes.md +44 -0
  37. codelaw_rules_html/rules/html/element-required-content.cases.md +23 -0
  38. codelaw_rules_html/rules/html/element-required-content.md +43 -0
  39. codelaw_rules_html/rules/html/empty-heading.md +40 -0
  40. codelaw_rules_html/rules/html/empty-title.md +39 -0
  41. codelaw_rules_html/rules/html/fieldset-legend.md +44 -0
  42. codelaw_rules_html/rules/html/form-dup-name.cases.md +38 -0
  43. codelaw_rules_html/rules/html/form-dup-name.md +48 -0
  44. codelaw_rules_html/rules/html/form-submit.md +44 -0
  45. codelaw_rules_html/rules/html/heading-level.cases.md +26 -0
  46. codelaw_rules_html/rules/html/heading-level.md +44 -0
  47. codelaw_rules_html/rules/html/hidden-focusable.cases.md +23 -0
  48. codelaw_rules_html/rules/html/hidden-focusable.md +40 -0
  49. codelaw_rules_html/rules/html/img-alt.cases.md +22 -0
  50. codelaw_rules_html/rules/html/img-alt.md +44 -0
  51. codelaw_rules_html/rules/html/img-title.md +40 -0
  52. codelaw_rules_html/rules/html/input-attributes.md +34 -0
  53. codelaw_rules_html/rules/html/input-image-alt.md +39 -0
  54. codelaw_rules_html/rules/html/input-missing-label.md +40 -0
  55. codelaw_rules_html/rules/html/link-text.md +39 -0
  56. codelaw_rules_html/rules/html/long-title.md +40 -0
  57. codelaw_rules_html/rules/html/map-dup-name.md +40 -0
  58. codelaw_rules_html/rules/html/map-id-name.md +38 -0
  59. codelaw_rules_html/rules/html/meta-refresh.md +42 -0
  60. codelaw_rules_html/rules/html/missing-doctype.cases.md +24 -0
  61. codelaw_rules_html/rules/html/missing-doctype.md +43 -0
  62. codelaw_rules_html/rules/html/multiple-labeled-controls.md +40 -0
  63. codelaw_rules_html/rules/html/no-abstract-role.md +39 -0
  64. codelaw_rules_html/rules/html/no-autoplay.md +37 -0
  65. codelaw_rules_html/rules/html/no-conditional-comment.md +39 -0
  66. codelaw_rules_html/rules/html/no-deprecated-attr.md +39 -0
  67. codelaw_rules_html/rules/html/no-dup-attr.md +37 -0
  68. codelaw_rules_html/rules/html/no-dup-class.md +33 -0
  69. codelaw_rules_html/rules/html/no-duplicate-id.cases.md +23 -0
  70. codelaw_rules_html/rules/html/no-duplicate-id.md +42 -0
  71. codelaw_rules_html/rules/html/no-implicit-close.cases.md +38 -0
  72. codelaw_rules_html/rules/html/no-implicit-close.md +40 -0
  73. codelaw_rules_html/rules/html/no-implicit-input-type.md +34 -0
  74. codelaw_rules_html/rules/html/no-inline-script.md +42 -0
  75. codelaw_rules_html/rules/html/no-inline-style.cases.md +12 -0
  76. codelaw_rules_html/rules/html/no-inline-style.md +42 -0
  77. codelaw_rules_html/rules/html/no-missing-references.md +39 -0
  78. codelaw_rules_html/rules/html/no-multiple-main.md +40 -0
  79. codelaw_rules_html/rules/html/no-raw-characters.cases.md +84 -0
  80. codelaw_rules_html/rules/html/no-raw-characters.md +35 -0
  81. codelaw_rules_html/rules/html/no-redundant-aria-label.md +36 -0
  82. codelaw_rules_html/rules/html/no-redundant-for.md +34 -0
  83. codelaw_rules_html/rules/html/no-redundant-role.md +42 -0
  84. codelaw_rules_html/rules/html/no-utf8-bom.md +45 -0
  85. codelaw_rules_html/rules/html/prefer-button.md +39 -0
  86. codelaw_rules_html/rules/html/prefer-native-element.md +40 -0
  87. codelaw_rules_html/rules/html/prefer-tbody.md +41 -0
  88. codelaw_rules_html/rules/html/require-sri.md +41 -0
  89. codelaw_rules_html/rules/html/script-element.md +36 -0
  90. codelaw_rules_html/rules/html/script-type.md +33 -0
  91. codelaw_rules_html/rules/html/target-blank-rel.cases.md +35 -0
  92. codelaw_rules_html/rules/html/target-blank-rel.md +32 -0
  93. codelaw_rules_html/rules/html/tel-non-breaking.md +37 -0
  94. codelaw_rules_html/rules/html/text-content.md +39 -0
  95. codelaw_rules_html/rules/html/th-scope.md +47 -0
  96. codelaw_rules_html/rules/html/unique-landmark.md +41 -0
  97. codelaw_rules_html/rules/html/unrecognized-char-ref.cases.md +41 -0
  98. codelaw_rules_html/rules/html/unrecognized-char-ref.md +42 -0
  99. codelaw_rules_html/rules/html/valid-autocomplete.cases.md +42 -0
  100. codelaw_rules_html/rules/html/valid-autocomplete.md +42 -0
  101. codelaw_rules_html/rules/html/valid-for.md +40 -0
  102. codelaw_rules_html/rules/html/valid-id.md +40 -0
  103. codelaw_rules_html/rules/html/void-content.md +34 -0
  104. codelaw_rules_html-0.2.0.dist-info/METADATA +177 -0
  105. codelaw_rules_html-0.2.0.dist-info/RECORD +107 -0
  106. codelaw_rules_html-0.2.0.dist-info/WHEEL +4 -0
  107. codelaw_rules_html-0.2.0.dist-info/licenses/LICENSE +23 -0
@@ -0,0 +1,177 @@
1
+ Metadata-Version: 2.4
2
+ Name: codelaw-rules-html
3
+ Version: 0.2.0
4
+ Summary: codelaw's rules for HTML (SR-RULE-PACKS)
5
+ License-Expression: MIT
6
+ License-File: LICENSE
7
+ Project-URL: Repository, https://github.com/arpitarya/codelaw
8
+ Requires-Python: >=3.11
9
+ Description-Content-Type: text/markdown
10
+
11
+ # @codelaw/rules-html · codelaw-rules-html
12
+
13
+ codelaw's rules for HTML — one of the first-party rule packs
14
+ ([SR-RULE-PACKS](../../records/0101_rule-packs.md)). The same files ship on npm
15
+ as `@codelaw/rules-html` and on PyPI as `codelaw-rules-html`.
16
+
17
+ ```toml
18
+ # codelaw.toml
19
+ extends = ["codelaw:html/recommended"]
20
+ preview = true # every rule is `preview` until a corpus run promotes it
21
+ ```
22
+
23
+ ## Presets
24
+
25
+ <!-- docs-sync:presets -->
26
+
27
+ | preset | rules | ported from |
28
+ |---|---|---|
29
+ | `html/recommended` | 64 | html-validate 11.16.4 `html-validate:recommended`, without its layout rules and without the cosmetic rules its `prettier` and `browser` presets switch off (see below) |
30
+ | `html/a11y` | 26 | html-validate 11.16.4 `html-validate:a11y`: every rule it turns on |
31
+ | `html/document` | 5 | html-validate 11.16.4 `html-validate:document`: checks that only make sense for a complete page |
32
+ | `html/conventions` | 3 | opt-in: the starter rule `html/target-blank-rel`, and HTMLHint's `inline-style-disabled` and `inline-script-disabled` |
33
+
34
+ <!-- /docs-sync:presets -->
35
+
36
+ `html/a11y` is a subset of `html/recommended`, as upstream; turn it on alone
37
+ for an accessibility-only check. `html/document` adds to `html/recommended`.
38
+
39
+ Every rule is **reimplemented**, not vendored: the checks, messages and docs are
40
+ written fresh, and each rule's `ported_from:` names the source rule. Every rule
41
+ is a `native:` rule, sharing one model of the document
42
+ (`crates/codelaw-native/src/html_dom.rs`): tree-sitter-html knows only a few of
43
+ HTML's implied end tags, so the model rebuilds the element tree the way a
44
+ browser (and html-validate) does, from the element table in `data/`.
45
+
46
+ Fix classes: 10 `auto`, 11 `suggest`, 51 `manual`.
47
+
48
+ ## Rules
49
+
50
+ | rule | fix | ported from | presets |
51
+ |---|---|---|---|
52
+ | `html/area-alt` | manual | html-validate/area-alt | recommended, a11y |
53
+ | `html/aria-hidden-body` | suggest | html-validate/aria-hidden-body | recommended, a11y |
54
+ | `html/aria-label-misuse` | manual | html-validate/aria-label-misuse | recommended, a11y |
55
+ | `html/attribute-allowed-values` | manual | html-validate/attribute-allowed-values, htmlhint/src-not-empty | recommended |
56
+ | `html/attribute-misuse` | manual | html-validate/attribute-misuse | recommended |
57
+ | `html/autocomplete-password` | manual | html-validate/autocomplete-password | recommended |
58
+ | `html/button-type` | suggest | html-validate/no-implicit-button-type, htmlhint/button-type-require | recommended, a11y |
59
+ | `html/close-attr` | auto | html-validate/close-attr | recommended |
60
+ | `html/close-order` | manual | html-validate/close-order, htmlhint/tag-pair | recommended |
61
+ | `html/deprecated` | manual | html-validate/deprecated, htmlhint/tag-no-obsolete | recommended |
62
+ | `html/doctype-html` | suggest | html-validate/doctype-html, htmlhint/doctype-html5 | recommended |
63
+ | `html/element-name` | manual | html-validate/element-name | recommended |
64
+ | `html/element-permitted-content` | manual | html-validate/element-permitted-content | recommended |
65
+ | `html/element-permitted-occurrences` | manual | html-validate/element-permitted-occurrences | recommended |
66
+ | `html/element-permitted-order` | manual | html-validate/element-permitted-order | recommended |
67
+ | `html/element-permitted-parent` | manual | html-validate/element-permitted-parent | recommended |
68
+ | `html/element-required-ancestor` | manual | html-validate/element-required-ancestor | recommended |
69
+ | `html/element-required-attributes` | manual | html-validate/element-required-attributes, htmlhint/html-lang-require | recommended |
70
+ | `html/element-required-content` | manual | html-validate/element-required-content, htmlhint/title-require | recommended |
71
+ | `html/empty-heading` | manual | html-validate/empty-heading | recommended, a11y |
72
+ | `html/empty-title` | manual | html-validate/empty-title | recommended, a11y |
73
+ | `html/fieldset-legend` | manual | html-validate/wcag/h71 | recommended, a11y |
74
+ | `html/form-dup-name` | manual | html-validate/form-dup-name | recommended |
75
+ | `html/form-submit` | manual | html-validate/wcag/h32 | recommended, a11y |
76
+ | `html/hidden-focusable` | manual | html-validate/hidden-focusable | recommended, a11y |
77
+ | `html/img-alt` | manual | html-validate/wcag/h37, htmlhint/alt-require | recommended, a11y |
78
+ | `html/img-title` | manual | html-validate/wcag/h67 | recommended, a11y |
79
+ | `html/input-attributes` | suggest | html-validate/input-attributes | recommended |
80
+ | `html/input-image-alt` | manual | html-validate/wcag/h36 | recommended, a11y |
81
+ | `html/link-text` | manual | html-validate/wcag/h30 | recommended, a11y |
82
+ | `html/long-title` | manual | html-validate/long-title | recommended |
83
+ | `html/map-dup-name` | manual | html-validate/map-dup-name | recommended |
84
+ | `html/map-id-name` | manual | html-validate/map-id-name | recommended |
85
+ | `html/meta-refresh` | manual | html-validate/meta-refresh | recommended, a11y |
86
+ | `html/multiple-labeled-controls` | manual | html-validate/multiple-labeled-controls | recommended, a11y |
87
+ | `html/no-abstract-role` | manual | html-validate/no-abstract-role | recommended, a11y |
88
+ | `html/no-autoplay` | suggest | html-validate/no-autoplay | recommended, a11y |
89
+ | `html/no-conditional-comment` | manual | html-validate/no-conditional-comment | recommended |
90
+ | `html/no-deprecated-attr` | manual | html-validate/no-deprecated-attr | recommended |
91
+ | `html/no-dup-attr` | auto | html-validate/no-dup-attr, htmlhint/attr-no-duplication | recommended |
92
+ | `html/no-dup-class` | auto | html-validate/no-dup-class | recommended |
93
+ | `html/no-duplicate-id` | manual | html-validate/no-dup-id, htmlhint/id-unique | recommended, a11y |
94
+ | `html/no-implicit-close` | suggest | html-validate/no-implicit-close | recommended |
95
+ | `html/no-implicit-input-type` | suggest | html-validate/no-implicit-input-type | recommended |
96
+ | `html/no-multiple-main` | manual | html-validate/no-multiple-main | recommended |
97
+ | `html/no-utf8-bom` | manual | html-validate/no-utf8-bom | recommended |
98
+ | `html/no-raw-characters` | auto | html-validate/no-raw-characters, htmlhint/spec-char-escape | recommended |
99
+ | `html/no-redundant-aria-label` | auto | html-validate/no-redundant-aria-label | recommended, a11y |
100
+ | `html/no-redundant-for` | auto | html-validate/no-redundant-for | recommended, a11y |
101
+ | `html/no-redundant-role` | auto | html-validate/no-redundant-role | recommended, a11y |
102
+ | `html/prefer-button` | manual | html-validate/prefer-button | recommended |
103
+ | `html/prefer-native-element` | manual | html-validate/prefer-native-element | recommended, a11y |
104
+ | `html/prefer-tbody` | auto | html-validate/prefer-tbody | recommended |
105
+ | `html/script-element` | suggest | html-validate/script-element | recommended |
106
+ | `html/script-type` | auto | html-validate/script-type | recommended |
107
+ | `html/tel-non-breaking` | suggest | html-validate/tel-non-breaking | recommended |
108
+ | `html/text-content` | manual | html-validate/text-content | recommended, a11y |
109
+ | `html/th-scope` | manual | html-validate/wcag/h63 | recommended, a11y |
110
+ | `html/unique-landmark` | manual | html-validate/unique-landmark | recommended, a11y |
111
+ | `html/unrecognized-char-ref` | manual | html-validate/unrecognized-char-ref | recommended |
112
+ | `html/valid-autocomplete` | manual | html-validate/valid-autocomplete | recommended, a11y |
113
+ | `html/valid-for` | manual | html-validate/valid-for | recommended |
114
+ | `html/valid-id` | manual | html-validate/valid-id | recommended |
115
+ | `html/void-content` | suggest | html-validate/void-content | recommended |
116
+ | `html/heading-level` | manual | html-validate/heading-level | document |
117
+ | `html/input-missing-label` | manual | html-validate/input-missing-label, htmlhint/input-requires-label | document |
118
+ | `html/missing-doctype` | suggest | html-validate/missing-doctype | document |
119
+ | `html/no-missing-references` | manual | html-validate/no-missing-references | document |
120
+ | `html/require-sri` | manual | html-validate/require-sri | document |
121
+ | `html/target-blank-rel` | auto | — (starter rule) | conventions |
122
+ | `html/no-inline-style` | manual | html-validate/no-inline-style, htmlhint/inline-style-disabled | conventions |
123
+ | `html/no-inline-script` | manual | htmlhint/inline-script-disabled | conventions |
124
+
125
+ The four starter-catalogue rules ([SR-RULE-PACKS](../../records/0101_rule-packs.md)
126
+ decision 8): `html/img-alt` (↔ `wcag/h37`), `html/no-duplicate-id` (↔ `no-dup-id`)
127
+ and `html/button-type` (↔ `no-implicit-button-type`) match html-validate rules
128
+ and sit in `html/recommended`; `html/target-blank-rel` matches none and forms
129
+ `html/conventions`. The other ported rules keep html-validate's names, except
130
+ its WCAG technique rules, which are named for what they check
131
+ (`wcag/h30` → `html/link-text`, `h32` → `form-submit`, `h36` → `input-image-alt`,
132
+ `h63` → `th-scope`, `h67` → `img-title`, `h71` → `fieldset-legend`).
133
+
134
+ ## Not ported, and why
135
+
136
+ | upstream rule | why |
137
+ |---|---|
138
+ | html-validate `attr-case`, `element-case` | never: layout — case-only style belongs to the formatter |
139
+ | html-validate `attr-delimiter`, `attr-spacing`, `no-trailing-whitespace` | never: layout — whitespace belongs to the formatter |
140
+ | html-validate `attr-quotes`, `doctype-style` | never: layout — quoting and the doctype's case belong to the formatter (also switched off by its `prettier` preset) |
141
+ | html-validate `attribute-boolean-style`, `attribute-empty-style`, `void-style`, `no-self-closing` | never: cosmetic — how `disabled`, `alt=""` and void tags are spelled is the formatter's call (switched off by its `browser` and `prettier` presets) |
142
+ | html-validate `deprecated-rule`, `no-unused-disable` | about html-validate's own configuration and inline directives; codelaw reports its own |
143
+ | html-validate `svg-focusable` | switched off in every upstream preset (it only matters for Internet Explorer) |
144
+ | html-validate `no-inline-style` in `recommended` | moved to the opt-in `html/conventions`: its `browser` preset switches it off, and it is a style policy, not a correctness check |
145
+ | HTMLHint `attr-lowercase`, `tagname-lowercase`, `attr-value-double-quotes`, `attr-value-single-quotes`, `attr-whitespace`, `attr-no-unnecessary-whitespace`, `space-tab-mixed-disabled`, `tag-self-close`, `empty-tag-not-self-closed`, `attr-sorted` | never: layout |
146
+ | HTMLHint `head-script-disabled`, `script-disabled`, `style-disabled`, `id-class-ad-disabled`, `id-class-value`, `href-abs-or-rel`, `attr-unsafe-chars`, `attr-value-not-empty`, `attr-value-no-duplication`, `tagname-specialchars`, `tags-check` | house policy without a correctness reason, or covered by a ported rule (`tags-check` by the content-model rules, `tagname-specialchars` by `html/element-name`) |
147
+ | HTMLHint `h1-require`, `main-require`, `meta-charset-require`, `meta-description-require`, `meta-viewport-require`, `link-rel-canonical-require`, `frame-title-require`, `form-method-require` | page-level SEO or policy checks html-validate's presets don't have; candidates for a later `html/strict` |
148
+
149
+ ## How the ports differ
150
+
151
+ | rule | difference |
152
+ |---|---|
153
+ | all | the document model is rebuilt from tree-sitter-html's tokens with html-validate's implied-end-tag and implied-element rules; markup tree-sitter can't parse at all (a raw `<` in text) is treated as text |
154
+ | all | attribute values holding template code (`{{ }}`, `<% %>`, `${ }`, `{% %}`) are treated as unknown and not checked, as html-validate does for its framework transforms |
155
+ | `html/element-permitted-content` | obsolete elements are left to `html/deprecated` instead of being reported again wherever they appear |
156
+ | `html/close-order` | reports unclosed elements and stray end tags; html-validate also reports the end tag that closed past them, which repeats the first finding |
157
+ | `html/missing-doctype` | only files with an `<html>` element are checked; fragments and partials are not documents |
158
+ | `html/no-implicit-close` | the `suggest` fix writes the end tag after the element's last content |
159
+ | `html/prefer-tbody` | the fix wraps the rows when they are next to each other; otherwise the rule only reports |
160
+ | `html/heading-level` | sectioning roots are matched by tag or `[attr="value"]` selectors only |
161
+ | `html/require-sri` | no `include`/`exclude` URL options yet |
162
+ | `html/no-utf8-bom` | `manual`: the mark is in the file's bytes, outside the text a fix edits; only the file itself is checked, not an HTML region of another file |
163
+
164
+ ## Data
165
+
166
+ | table | source |
167
+ |---|---|
168
+ | `data/html/elements.json` | html-validate 11.16.4's `html5` element metadata (MIT): content categories, content models, permitted parents and order, required and deprecated attributes, attribute value enumerations, implied end tags, ARIA implicit roles. Its JavaScript callbacks are rewritten as JSON conditions (`{"attr": "href"}`, `{"ancestor": ["map"]}`, `{"if": …, "then": …, "else": …}`) that `html_dom.rs` evaluates. |
169
+ | `data/html/entities.json` | the named character references html-validate 11.16.4 ships (MIT), following the WHATWG table |
170
+ | `data/html/input-attributes.json` | which `<input>` types each attribute applies to, from html-validate 11.16.4's `input-attributes` rule (MIT) |
171
+
172
+ See `NOTICE`.
173
+
174
+ ## Upstream versions
175
+
176
+ - html-validate **11.16.4** (MIT) — presets `recommended`, `a11y`, `document`, `prettier`, `browser`; rule docs at https://html-validate.org/rules/.
177
+ - HTMLHint **1.9.2** (MIT) — cross-checked for rules html-validate lacks.
@@ -0,0 +1,107 @@
1
+ codelaw_rules_html/LICENSE,sha256=_R8NFLyGiKUo7mPzbUGbqg3hdEKYhaTsIgBGXqtFfa8,1097
2
+ codelaw_rules_html/NOTICE,sha256=gzARoZCfwW1tfFVfMTaRB2ImT2xw9nBeNRHKI1Qa_zE,1324
3
+ codelaw_rules_html/README.md,sha256=dNkr4vuZIwXVOpQqaDpvzrJi0aGmyea4XE37_olx34U,13388
4
+ codelaw_rules_html/codelaw-pack.toml,sha256=sxCFlwgvzr_Y99ak4pbr2wL_cvira2NkkhhaprKtz34,228
5
+ codelaw_rules_html/corpus.toml,sha256=f-D0M1K3CHPq9ghCBM1F7Klhjqf-wJmQmOhYNeR8Mpw,2123
6
+ codelaw_rules_html/data/html/elements.json,sha256=R9APNpRuGi4r8wYCOAHRaYORSIthvuBoQqRqrUl_yWI,75862
7
+ codelaw_rules_html/data/html/entities.json,sha256=XrmjJvW8eXi-moq-qaROvbGurOF2v-M7uKO0Dcw3PxU,25567
8
+ codelaw_rules_html/data/html/input-attributes.json,sha256=f2zcMulOiFechvvFiLKuJkphHeb3LcB0oMPuWFZ7zE4,2745
9
+ codelaw_rules_html/presets/html/a11y.toml,sha256=xPwhMYA0oBh5apSx9aVRM5GT7sN3Zpge4xHe04nIajQ,947
10
+ codelaw_rules_html/presets/html/conventions.toml,sha256=lDfXpd99_limmmmKw1M7jwLcEFuIBc-cvaeKOSKSlE0,216
11
+ codelaw_rules_html/presets/html/document.toml,sha256=Yht-JguLBQHwygsjYQ6fioTQmi7UEEW2zesbA-5FS70,289
12
+ codelaw_rules_html/presets/html/recommended.toml,sha256=VMUs7YAsRaDtCR7-RXzEIYrZ9fJKuQwkBSuntPLad7s,2303
13
+ codelaw_rules_html/rules/html/area-alt.md,sha256=I3Zu_OjWQj1XxNEwEFKSdD9TPCFrMia9qn2DaASiRR4,1119
14
+ codelaw_rules_html/rules/html/aria-hidden-body.md,sha256=A03URCW9FYjhGoYxi9kHGQdJ4UbONeG7yLDQCNY2cMg,629
15
+ codelaw_rules_html/rules/html/aria-label-misuse.md,sha256=nXb37sbkfC6a5bTtuXA3IEpT68oPJK-I_vnXDnERsOo,1243
16
+ codelaw_rules_html/rules/html/attribute-allowed-values.cases.md,sha256=GsPfkWOmlUicOBObL5ZwhS55EMjOEjgDItIqWVp2dAs,392
17
+ codelaw_rules_html/rules/html/attribute-allowed-values.md,sha256=os3ZsCbLq9qw6mgW9iAbKp6fhFae3GSyr4vR8YL7uq4,1031
18
+ codelaw_rules_html/rules/html/attribute-misuse.md,sha256=fNufWrRTZXWRhS1Fg5Sa7eVOnYge4CnoYWn5GgmoMpo,970
19
+ codelaw_rules_html/rules/html/autocomplete-password.md,sha256=AwCtFirrwi5x7hcrsrIttpyBdKvvcfcISLbdORWJvV8,1057
20
+ codelaw_rules_html/rules/html/button-type.cases.md,sha256=8CI8Ow0F3FNELHf1wg8eD6mpzd7b9wXdOkJJzPAGBnA,373
21
+ codelaw_rules_html/rules/html/button-type.md,sha256=pXexkPYSo1VYX_1ZxCOIcAVk3Go4JkSpssbYzvZVrfw,740
22
+ codelaw_rules_html/rules/html/close-attr.md,sha256=yHVd6jwIqqWXW7RKnPHvo6y9DmU2m6h-gKIKugemW5Q,458
23
+ codelaw_rules_html/rules/html/close-order.cases.md,sha256=szryivNBr2KwW_Ue7mo9CqY6H-JrWlUvi_ks5yRQ-Yc,413
24
+ codelaw_rules_html/rules/html/close-order.md,sha256=tuVqHsM-vMv6IGj88LGI0W8v0QC0AgDaqt2wxCP9EdQ,1012
25
+ codelaw_rules_html/rules/html/deprecated.md,sha256=bqDlLLGFcG7aXk3ppIuKBxvVM0Q5hzNDUYZtYVgstbU,811
26
+ codelaw_rules_html/rules/html/doctype-html.md,sha256=fWlTvrSXz-xS08OXvB39MJsIJpqgTRAxUkyRhR-NUPI,696
27
+ codelaw_rules_html/rules/html/element-name.cases.md,sha256=LmAU_ozwljtbtSkCvq-MAcMCqmRc93OBnrxy3-WwaYU,276
28
+ codelaw_rules_html/rules/html/element-name.md,sha256=A0OnM4KMg3N5bnoNLsDE2z8_NRrEyLmLjZleNuWCfjU,1016
29
+ codelaw_rules_html/rules/html/element-permitted-content.cases.md,sha256=ymXH6amdwTJODBfgqueAY69yjN9TMWJm2cS-vXd-doc,759
30
+ codelaw_rules_html/rules/html/element-permitted-content.md,sha256=XXKaAxwcGSinbY32tRWHPxYGZQE-qSh2rZWu-Mqqw5o,1272
31
+ codelaw_rules_html/rules/html/element-permitted-occurrences.md,sha256=yEnYJxQqpTkcvSJyvPZ_aZxaS0g7p-ZgUXWlxzn_oHA,884
32
+ codelaw_rules_html/rules/html/element-permitted-order.md,sha256=oUqxsQiMfuF1mcT_uQrRbF9BtVeFgzZ5WlWnj5yO7MM,939
33
+ codelaw_rules_html/rules/html/element-permitted-parent.cases.md,sha256=9mzAS4j3I7eYpqA5cxXaVi159SmvHb5nUTYZ2Q1spRs,137
34
+ codelaw_rules_html/rules/html/element-permitted-parent.md,sha256=b0NOwMeswbRhc70tCbdI9-j1KT7_kyx7DKulsYItyuQ,863
35
+ codelaw_rules_html/rules/html/element-required-ancestor.md,sha256=EVDC9gNvYAMKOfw-1QJZQN8FILDviq5_h71mDsU3zHs,863
36
+ codelaw_rules_html/rules/html/element-required-attributes.md,sha256=v4VQ3A25nP62FKznVLTmyWnBfVeYRz-bVMFy7xfO6lw,1013
37
+ codelaw_rules_html/rules/html/element-required-content.cases.md,sha256=wLIc-P30g5NR-jZde-hxSdk6E1-hQrwSKz6FwhyY0ZY,305
38
+ codelaw_rules_html/rules/html/element-required-content.md,sha256=R2mOW6WR0lav5F0ndVdtMKOA9BouFYxnUzl-G9iWlJg,877
39
+ codelaw_rules_html/rules/html/empty-heading.md,sha256=tt_jponJ7epRlgun_wEhLr0sTUeV5i8WTAEGKIhgwXk,663
40
+ codelaw_rules_html/rules/html/empty-title.md,sha256=WvDC1CDSZInKtHYvUzurYNaygvO6FH9WVON1hIj1w-k,572
41
+ codelaw_rules_html/rules/html/fieldset-legend.md,sha256=_Gl8voBrxwUS16txdpMQE_Kc_nM6qI6qmB5R3qQdRiY,775
42
+ codelaw_rules_html/rules/html/form-dup-name.cases.md,sha256=cMrRWIKNDsyRjORx7ymwKV6gF-aAR5sSQo8yanrZqGU,513
43
+ codelaw_rules_html/rules/html/form-dup-name.md,sha256=DDrGfIaY5hVFF953ZCzq7kuSuCjCzBjiO9R6QzPJ_3M,1267
44
+ codelaw_rules_html/rules/html/form-submit.md,sha256=CHAL55mHmBz_OjPRRCaqH1V7YCRwtC9UP_Iyy3GB9vs,846
45
+ codelaw_rules_html/rules/html/heading-level.cases.md,sha256=BMAcZ_r7RWYM19A_Jw4T-lvXh6KeXMsPWiVXq3Em0xQ,320
46
+ codelaw_rules_html/rules/html/heading-level.md,sha256=lAt_HT3fVcrABNYvad3kd0vFa11wkukpVguK5fSSn_g,1246
47
+ codelaw_rules_html/rules/html/hidden-focusable.cases.md,sha256=ETCTuAKk7XcQsFTxwwssqTZ-dMwZAhe9WWBzdVh70Eo,318
48
+ codelaw_rules_html/rules/html/hidden-focusable.md,sha256=4NXOZrxbXbAnNo_h-8itQEFTWeLU8FmM8uaY6aTKyp8,978
49
+ codelaw_rules_html/rules/html/img-alt.cases.md,sha256=qoS4SAyn5S3pfH_Egj243WRXVs78cKKPg-rc3XHQ6bc,285
50
+ codelaw_rules_html/rules/html/img-alt.md,sha256=KQZ_Dvrbm4hsqPiT8-pBbuJNWweMkMRefDErYP_qF6k,1067
51
+ codelaw_rules_html/rules/html/img-title.md,sha256=Xs94ljB35z5lULMM38owFD47B5B7JAN9xZ8HkhFhufE,769
52
+ codelaw_rules_html/rules/html/input-attributes.md,sha256=hlJbqu4PMTXiUpLVPKC9tFtXFIMbWUdjkJDTuDD0GA4,692
53
+ codelaw_rules_html/rules/html/input-image-alt.md,sha256=-3Xx6YBtVhoN0OwawH-Luz0J24vzX6SYRGSmKRHPf7M,625
54
+ codelaw_rules_html/rules/html/input-missing-label.md,sha256=dADNXm_63RHV_gMJpGbPbu8KKpKs-eI6Ko7-dAKeevI,874
55
+ codelaw_rules_html/rules/html/link-text.md,sha256=NWilxvR68GKAUP7FDW0WucmElvwPBGoC7BQww-atClE,690
56
+ codelaw_rules_html/rules/html/long-title.md,sha256=ERmZUzHfkTNU_LqlDBSEirt4EETklyVFpJjj_pjGmS0,773
57
+ codelaw_rules_html/rules/html/map-dup-name.md,sha256=vY6_uGquBk5uaPSbgHj_29132po3HPolBh17ucjj0_U,661
58
+ codelaw_rules_html/rules/html/map-id-name.md,sha256=GbdudrtdXdctsEiJdt5KRnc0dpXaFzDu7wC_pa0rdRs,704
59
+ codelaw_rules_html/rules/html/meta-refresh.md,sha256=84zlUzwIYd7seRWn-XUaxpQVouJem8dw-8aiOEn0N44,981
60
+ codelaw_rules_html/rules/html/missing-doctype.cases.md,sha256=7uFlS-41DsF0qbsPwC9-k7F5sOnGVAgl-SUbuFQWFDQ,252
61
+ codelaw_rules_html/rules/html/missing-doctype.md,sha256=iQ_Uwo5yoabic9Pyobfn7EG0zWSayGG3A60ifY9ApKc,780
62
+ codelaw_rules_html/rules/html/multiple-labeled-controls.md,sha256=l0EupPs6iFrsxFFoG7r0S4DlnEc6CwWcIlqUbd0-Pg4,823
63
+ codelaw_rules_html/rules/html/no-abstract-role.md,sha256=JJVtzb3BraUfYoFaMKRHankTZtCLAcd3h1cBmv0naz4,771
64
+ codelaw_rules_html/rules/html/no-autoplay.md,sha256=1XkEV_NYMze0XptBd3C5TBQmF7jG3MLdERFUAnh019o,734
65
+ codelaw_rules_html/rules/html/no-conditional-comment.md,sha256=oiNtaGg4PRaYxQe5kRe7zFHbBhklIcnNJ6MMQaKBTlc,802
66
+ codelaw_rules_html/rules/html/no-deprecated-attr.md,sha256=rinzohTWKJZVfCckNk2XPMTAkM2WNhCQYhrqdK-iJDc,861
67
+ codelaw_rules_html/rules/html/no-dup-attr.md,sha256=6LOC3uTCIv9eO3PqCFIVuBeavSGkapMYiNGuIp55AhY,716
68
+ codelaw_rules_html/rules/html/no-dup-class.md,sha256=39MIjKu0rVxJGAS2NNti6I452TGfNPh1AWvHIqqV0KQ,442
69
+ codelaw_rules_html/rules/html/no-duplicate-id.cases.md,sha256=mj--BgCR4Pue6VTYn4VAF9hYekjv9udv08muP7C6kpQ,310
70
+ codelaw_rules_html/rules/html/no-duplicate-id.md,sha256=K_c5_WDIyygAe6M50Tz3E_gft50L5H9SUl5FcNysibg,903
71
+ codelaw_rules_html/rules/html/no-implicit-close.cases.md,sha256=LVpeQo9g-8M2gfUgnBBEkKmLfZnTSPajLPL1X0yCZf0,457
72
+ codelaw_rules_html/rules/html/no-implicit-close.md,sha256=ugXA76t2cuGnCdToeoeeQNfQ3jKZTGmjlDPBgArwMnk,750
73
+ codelaw_rules_html/rules/html/no-implicit-input-type.md,sha256=GWwnaUyoZfHmkJBd8OYpUjeJoESNKeohGbzhlVeNXMY,602
74
+ codelaw_rules_html/rules/html/no-inline-script.md,sha256=GjwfV8E2hon2n5Rk0YzRmJfQC-5Xa_FVsi36V2oRDmM,946
75
+ codelaw_rules_html/rules/html/no-inline-style.cases.md,sha256=xx7DwufkwzP8XwKc892HFnykbfyChUPIota-U_eZFTI,191
76
+ codelaw_rules_html/rules/html/no-inline-style.md,sha256=MOfzVyQH_CSs8PwP1-sC7HmVPe_XvnXACRKXjrrOqi4,1066
77
+ codelaw_rules_html/rules/html/no-missing-references.md,sha256=OpsM6JlAYngtLrGjrh6ugpQg8e9ilrFkhW0NY5Lz8CI,896
78
+ codelaw_rules_html/rules/html/no-multiple-main.md,sha256=J3FyhRX_M4M_8mu-msZUe0_j9sF6T2Wk2zKWsV5yTqQ,747
79
+ codelaw_rules_html/rules/html/no-raw-characters.cases.md,sha256=N-5XWgf0Y9WtirEuBuTimsWMLPU6YSSMckXn8GhSaV4,988
80
+ codelaw_rules_html/rules/html/no-raw-characters.md,sha256=jSsjWCGfA9MzQgyZyAByrByReOBJoyPvhvZmIu5U83s,740
81
+ codelaw_rules_html/rules/html/no-redundant-aria-label.md,sha256=KVf1_et_qNSBEzjrFaYV50lnAawcfEZm97Q9MLaqhE4,668
82
+ codelaw_rules_html/rules/html/no-redundant-for.md,sha256=7aIZGtYtpNAMnYnPhCTZWLQW-54-_zOEyx4KcKi05yw,581
83
+ codelaw_rules_html/rules/html/no-redundant-role.md,sha256=J49mt7umZKGB3Y2eETvc7_19G2eASmYqWqqoChVtndY,792
84
+ codelaw_rules_html/rules/html/no-utf8-bom.md,sha256=jA_HaG5jRkfPzBDllqx-ZvCTgRb9e5NC9cINJ1dLsU8,1186
85
+ codelaw_rules_html/rules/html/prefer-button.md,sha256=XequpDhFYJMMU825vFM-jdLKlBh0OyR7CoRK2s2KYcc,800
86
+ codelaw_rules_html/rules/html/prefer-native-element.md,sha256=y3xMZmiay1BFg2qkmSJvifh0tN77Bh1k4RygTOosVEg,887
87
+ codelaw_rules_html/rules/html/prefer-tbody.md,sha256=xJ3PwfQ138VEs36uebz4p79L341GvtywxVwPBoWLLJI,719
88
+ codelaw_rules_html/rules/html/require-sri.md,sha256=3YuSg6flvoGqf2lbnXztq58alvsfVYXNA7BwLvj94TQ,1157
89
+ codelaw_rules_html/rules/html/script-element.md,sha256=jTdMSGqod6Gut58oNgalRB65nM2ecWZHz4m-nKr1FhQ,688
90
+ codelaw_rules_html/rules/html/script-type.md,sha256=vpIBtzeteH1CAdwTd0K4v1krQfvJV9Y6cCN_RRgkpFY,566
91
+ codelaw_rules_html/rules/html/target-blank-rel.cases.md,sha256=qWuLFtAsAD-uily0qJ-4PbsXX-i5XICwxrzApalzAU0,498
92
+ codelaw_rules_html/rules/html/target-blank-rel.md,sha256=qtTWi69zfD6j1TEOru3sipRA74kmwSclOsz106Aolhg,664
93
+ codelaw_rules_html/rules/html/tel-non-breaking.md,sha256=VRgcu7OT5oW_g7FkhBd9rUR74eIIcj84uZ3JWP_7szE,827
94
+ codelaw_rules_html/rules/html/text-content.md,sha256=dDMviiGPEpTg3GGvbAnIXQaNaUVnHUrfuwuP986bp-4,753
95
+ codelaw_rules_html/rules/html/th-scope.md,sha256=XVutTeQghL_Al-py9E3YaDprnN1NUKAREBirSpgjxTU,1040
96
+ codelaw_rules_html/rules/html/unique-landmark.md,sha256=iQn7CbR7xk9y2w6QlArhutsy7GvZSkpmL_EpyVbFKyU,891
97
+ codelaw_rules_html/rules/html/unrecognized-char-ref.cases.md,sha256=75Dj92d0pkKAPL4Pr5aiYMRtK_0AkU_k0rqtReOHJoM,493
98
+ codelaw_rules_html/rules/html/unrecognized-char-ref.md,sha256=pcF6OEVmswmW7Hc_kVPeCPcQ7pqL8GewOMhkTy-nMJs,975
99
+ codelaw_rules_html/rules/html/valid-autocomplete.cases.md,sha256=SQOZzaMeEupZrj_YN1P6pVZbbdUqrklbxP4G7ofoaUc,692
100
+ codelaw_rules_html/rules/html/valid-autocomplete.md,sha256=0wNvR0SkbMdxDHnHJyZ5nwoRIeoUo3mOoRMLPZe5ZWk,1082
101
+ codelaw_rules_html/rules/html/valid-for.md,sha256=Gh-2VJIxf3syL82xCRpeIZEZ6DPVqkpx89g-UUdYgDI,802
102
+ codelaw_rules_html/rules/html/valid-id.md,sha256=wE3DoCbuRVcEd7fVc8oe3uhkcDsnylAZ-F0rLnJf3fQ,818
103
+ codelaw_rules_html/rules/html/void-content.md,sha256=iUWssvhpRxSlxRmTHVSHPszfjE-b1KeqPB_tk03wyFQ,650
104
+ codelaw_rules_html-0.2.0.dist-info/METADATA,sha256=kxe1o4_XWEkfzFxYaOmWazAgaAgUiE_4OJTR2v8-1Iw,13673
105
+ codelaw_rules_html-0.2.0.dist-info/WHEEL,sha256=iL940CG79gUG1gJG0fuOXtdNe75u1bVsFzkAeObStpM,97
106
+ codelaw_rules_html-0.2.0.dist-info/licenses/LICENSE,sha256=_R8NFLyGiKUo7mPzbUGbqg3hdEKYhaTsIgBGXqtFfa8,1097
107
+ codelaw_rules_html-0.2.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: codelaw scripts/package.py
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,23 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Arpit Arya
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ SPDX-License-Identifier: MIT