@herb-tools/linter 0.4.3 → 0.6.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.
- package/README.md +216 -19
- package/dist/herb-lint.js +5559 -1860
- package/dist/herb-lint.js.map +1 -1
- package/dist/index.cjs +722 -187
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +714 -189
- package/dist/index.js.map +1 -1
- package/dist/package.json +4 -4
- package/dist/src/cli/argument-parser.js +28 -22
- package/dist/src/cli/argument-parser.js.map +1 -1
- package/dist/src/cli/file-processor.js +19 -13
- package/dist/src/cli/file-processor.js.map +1 -1
- package/dist/src/cli/formatters/detailed-formatter.js +9 -9
- package/dist/src/cli/formatters/detailed-formatter.js.map +1 -1
- package/dist/src/cli/formatters/github-actions-formatter.js +50 -0
- package/dist/src/cli/formatters/github-actions-formatter.js.map +1 -0
- package/dist/src/cli/formatters/index.js +2 -0
- package/dist/src/cli/formatters/index.js.map +1 -1
- package/dist/src/cli/formatters/json-formatter.js +58 -0
- package/dist/src/cli/formatters/json-formatter.js.map +1 -0
- package/dist/src/cli/formatters/simple-formatter.js +15 -15
- package/dist/src/cli/formatters/simple-formatter.js.map +1 -1
- package/dist/src/cli/output-manager.js +120 -0
- package/dist/src/cli/output-manager.js.map +1 -0
- package/dist/src/cli/summary-reporter.js +22 -22
- package/dist/src/cli/summary-reporter.js.map +1 -1
- package/dist/src/cli.js +41 -26
- package/dist/src/cli.js.map +1 -1
- package/dist/src/default-rules.js +22 -0
- package/dist/src/default-rules.js.map +1 -1
- package/dist/src/linter.js +29 -4
- package/dist/src/linter.js.map +1 -1
- package/dist/src/rules/erb-no-empty-tags.js +2 -2
- package/dist/src/rules/erb-no-empty-tags.js.map +1 -1
- package/dist/src/rules/erb-no-output-control-flow.js +2 -2
- package/dist/src/rules/erb-no-output-control-flow.js.map +1 -1
- package/dist/src/rules/erb-no-silent-tag-in-attribute-name.js +26 -0
- package/dist/src/rules/erb-no-silent-tag-in-attribute-name.js.map +1 -0
- package/dist/src/rules/erb-prefer-image-tag-helper.js +2 -6
- package/dist/src/rules/erb-prefer-image-tag-helper.js.map +1 -1
- package/dist/src/rules/erb-require-whitespace-inside-tags.js +2 -2
- package/dist/src/rules/erb-require-whitespace-inside-tags.js.map +1 -1
- package/dist/src/rules/erb-requires-trailing-newline.js.map +1 -1
- package/dist/src/rules/html-anchor-require-href.js +2 -2
- package/dist/src/rules/html-anchor-require-href.js.map +1 -1
- package/dist/src/rules/html-aria-attribute-must-be-valid.js +13 -12
- package/dist/src/rules/html-aria-attribute-must-be-valid.js.map +1 -1
- package/dist/src/rules/html-aria-label-is-well-formatted.js +33 -0
- package/dist/src/rules/html-aria-label-is-well-formatted.js.map +1 -0
- package/dist/src/rules/html-aria-level-must-be-valid.js +28 -6
- package/dist/src/rules/html-aria-level-must-be-valid.js.map +1 -1
- package/dist/src/rules/html-aria-role-heading-requires-level.js +9 -15
- package/dist/src/rules/html-aria-role-heading-requires-level.js.map +1 -1
- package/dist/src/rules/html-aria-role-must-be-valid.js +5 -5
- package/dist/src/rules/html-aria-role-must-be-valid.js.map +1 -1
- package/dist/src/rules/html-attribute-double-quotes.js +16 -6
- package/dist/src/rules/html-attribute-double-quotes.js.map +1 -1
- package/dist/src/rules/html-attribute-equals-spacing.js +24 -0
- package/dist/src/rules/html-attribute-equals-spacing.js.map +1 -0
- package/dist/src/rules/html-attribute-values-require-quotes.js +21 -10
- package/dist/src/rules/html-attribute-values-require-quotes.js.map +1 -1
- package/dist/src/rules/html-avoid-both-disabled-and-aria-disabled.js +47 -0
- package/dist/src/rules/html-avoid-both-disabled-and-aria-disabled.js.map +1 -0
- package/dist/src/rules/html-boolean-attributes-no-value.js +11 -4
- package/dist/src/rules/html-boolean-attributes-no-value.js.map +1 -1
- package/dist/src/rules/html-iframe-has-title.js +39 -0
- package/dist/src/rules/html-iframe-has-title.js.map +1 -0
- package/dist/src/rules/html-img-require-alt.js +2 -6
- package/dist/src/rules/html-img-require-alt.js.map +1 -1
- package/dist/src/rules/html-navigation-has-label.js +43 -0
- package/dist/src/rules/html-navigation-has-label.js.map +1 -0
- package/dist/src/rules/html-no-aria-hidden-on-focusable.js +67 -0
- package/dist/src/rules/html-no-aria-hidden-on-focusable.js.map +1 -0
- package/dist/src/rules/html-no-block-inside-inline.js +4 -4
- package/dist/src/rules/html-no-block-inside-inline.js.map +1 -1
- package/dist/src/rules/html-no-duplicate-attributes.js +24 -27
- package/dist/src/rules/html-no-duplicate-attributes.js.map +1 -1
- package/dist/src/rules/html-no-duplicate-ids.js +4 -4
- package/dist/src/rules/html-no-duplicate-ids.js.map +1 -1
- package/dist/src/rules/html-no-empty-headings.js +2 -23
- package/dist/src/rules/html-no-empty-headings.js.map +1 -1
- package/dist/src/rules/html-no-nested-links.js +2 -2
- package/dist/src/rules/html-no-nested-links.js.map +1 -1
- package/dist/src/rules/html-no-positive-tab-index.js +21 -0
- package/dist/src/rules/html-no-positive-tab-index.js.map +1 -0
- package/dist/src/rules/html-no-self-closing.js +22 -0
- package/dist/src/rules/html-no-self-closing.js.map +1 -0
- package/dist/src/rules/html-no-title-attribute.js +27 -0
- package/dist/src/rules/html-no-title-attribute.js.map +1 -0
- package/dist/src/rules/html-tag-name-lowercase.js +37 -25
- package/dist/src/rules/html-tag-name-lowercase.js.map +1 -1
- package/dist/src/rules/index.js +10 -0
- package/dist/src/rules/index.js.map +1 -1
- package/dist/src/rules/parser-no-errors.js +18 -0
- package/dist/src/rules/parser-no-errors.js.map +1 -0
- package/dist/src/rules/rule-utils.js +176 -22
- package/dist/src/rules/rule-utils.js.map +1 -1
- package/dist/src/rules/svg-tag-name-capitalization.js +2 -10
- package/dist/src/rules/svg-tag-name-capitalization.js.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/cli/argument-parser.d.ts +2 -1
- package/dist/types/cli/file-processor.d.ts +6 -5
- package/dist/types/cli/formatters/base-formatter.d.ts +2 -2
- package/dist/types/cli/formatters/detailed-formatter.d.ts +2 -2
- package/dist/types/cli/formatters/github-actions-formatter.d.ts +12 -0
- package/dist/types/cli/formatters/index.d.ts +2 -0
- package/dist/types/cli/formatters/json-formatter.d.ts +42 -0
- package/dist/types/cli/formatters/simple-formatter.d.ts +2 -2
- package/dist/types/cli/index.d.ts +4 -0
- package/dist/types/cli/output-manager.d.ts +31 -0
- package/dist/types/cli/summary-reporter.d.ts +3 -3
- package/dist/types/cli.d.ts +3 -1
- package/dist/types/rules/erb-no-empty-tags.d.ts +2 -2
- package/dist/types/rules/erb-no-output-control-flow.d.ts +2 -2
- package/dist/types/rules/erb-no-silent-tag-in-attribute-name.d.ts +7 -0
- package/dist/types/rules/erb-prefer-image-tag-helper.d.ts +2 -2
- package/dist/types/rules/erb-require-whitespace-inside-tags.d.ts +2 -2
- package/dist/types/rules/html-anchor-require-href.d.ts +2 -2
- package/dist/types/rules/html-aria-attribute-must-be-valid.d.ts +2 -2
- package/dist/types/rules/html-aria-label-is-well-formatted.d.ts +7 -0
- package/dist/types/rules/html-aria-level-must-be-valid.d.ts +2 -2
- package/dist/types/rules/html-aria-role-heading-requires-level.d.ts +2 -2
- package/dist/types/rules/html-aria-role-must-be-valid.d.ts +2 -2
- package/dist/types/rules/html-attribute-double-quotes.d.ts +2 -2
- package/dist/types/rules/html-attribute-equals-spacing.d.ts +7 -0
- package/dist/types/rules/html-attribute-values-require-quotes.d.ts +2 -2
- package/dist/types/rules/html-avoid-both-disabled-and-aria-disabled.d.ts +7 -0
- package/dist/types/rules/html-boolean-attributes-no-value.d.ts +2 -2
- package/dist/types/rules/html-iframe-has-title.d.ts +7 -0
- package/dist/types/rules/html-img-require-alt.d.ts +2 -2
- package/dist/types/rules/html-navigation-has-label.d.ts +7 -0
- package/dist/types/rules/html-no-aria-hidden-on-focusable.d.ts +7 -0
- package/dist/types/rules/html-no-block-inside-inline.d.ts +2 -2
- package/dist/types/rules/html-no-duplicate-attributes.d.ts +2 -2
- package/dist/types/rules/html-no-duplicate-ids.d.ts +2 -2
- package/dist/types/rules/html-no-empty-headings.d.ts +2 -2
- package/dist/types/rules/html-no-nested-links.d.ts +2 -2
- package/dist/types/rules/html-no-positive-tab-index.d.ts +7 -0
- package/dist/types/rules/html-no-self-closing.d.ts +7 -0
- package/dist/types/rules/html-no-title-attribute.d.ts +7 -0
- package/dist/types/rules/html-tag-name-lowercase.d.ts +3 -2
- package/dist/types/rules/index.d.ts +10 -0
- package/dist/types/rules/parser-no-errors.d.ts +8 -0
- package/dist/types/rules/rule-utils.d.ts +107 -13
- package/dist/types/rules/svg-tag-name-capitalization.d.ts +2 -2
- package/dist/types/src/cli/argument-parser.d.ts +2 -1
- package/dist/types/src/cli/file-processor.d.ts +6 -5
- package/dist/types/src/cli/formatters/base-formatter.d.ts +2 -2
- package/dist/types/src/cli/formatters/detailed-formatter.d.ts +2 -2
- package/dist/types/src/cli/formatters/github-actions-formatter.d.ts +12 -0
- package/dist/types/src/cli/formatters/index.d.ts +2 -0
- package/dist/types/src/cli/formatters/json-formatter.d.ts +42 -0
- package/dist/types/src/cli/formatters/simple-formatter.d.ts +2 -2
- package/dist/types/src/cli/output-manager.d.ts +31 -0
- package/dist/types/src/cli/summary-reporter.d.ts +3 -3
- package/dist/types/src/cli.d.ts +3 -1
- package/dist/types/src/rules/erb-no-empty-tags.d.ts +2 -2
- package/dist/types/src/rules/erb-no-output-control-flow.d.ts +2 -2
- package/dist/types/src/rules/erb-no-silent-tag-in-attribute-name.d.ts +7 -0
- package/dist/types/src/rules/erb-prefer-image-tag-helper.d.ts +2 -2
- package/dist/types/src/rules/erb-require-whitespace-inside-tags.d.ts +2 -2
- package/dist/types/src/rules/html-anchor-require-href.d.ts +2 -2
- package/dist/types/src/rules/html-aria-attribute-must-be-valid.d.ts +2 -2
- package/dist/types/src/rules/html-aria-label-is-well-formatted.d.ts +7 -0
- package/dist/types/src/rules/html-aria-level-must-be-valid.d.ts +2 -2
- package/dist/types/src/rules/html-aria-role-heading-requires-level.d.ts +2 -2
- package/dist/types/src/rules/html-aria-role-must-be-valid.d.ts +2 -2
- package/dist/types/src/rules/html-attribute-double-quotes.d.ts +2 -2
- package/dist/types/src/rules/html-attribute-equals-spacing.d.ts +7 -0
- package/dist/types/src/rules/html-attribute-values-require-quotes.d.ts +2 -2
- package/dist/types/src/rules/html-avoid-both-disabled-and-aria-disabled.d.ts +7 -0
- package/dist/types/src/rules/html-boolean-attributes-no-value.d.ts +2 -2
- package/dist/types/src/rules/html-iframe-has-title.d.ts +7 -0
- package/dist/types/src/rules/html-img-require-alt.d.ts +2 -2
- package/dist/types/src/rules/html-navigation-has-label.d.ts +7 -0
- package/dist/types/src/rules/html-no-aria-hidden-on-focusable.d.ts +7 -0
- package/dist/types/src/rules/html-no-block-inside-inline.d.ts +2 -2
- package/dist/types/src/rules/html-no-duplicate-attributes.d.ts +2 -2
- package/dist/types/src/rules/html-no-duplicate-ids.d.ts +2 -2
- package/dist/types/src/rules/html-no-empty-headings.d.ts +2 -2
- package/dist/types/src/rules/html-no-nested-links.d.ts +2 -2
- package/dist/types/src/rules/html-no-positive-tab-index.d.ts +7 -0
- package/dist/types/src/rules/html-no-self-closing.d.ts +7 -0
- package/dist/types/src/rules/html-no-title-attribute.d.ts +7 -0
- package/dist/types/src/rules/html-tag-name-lowercase.d.ts +3 -2
- package/dist/types/src/rules/index.d.ts +10 -0
- package/dist/types/src/rules/parser-no-errors.d.ts +8 -0
- package/dist/types/src/rules/rule-utils.d.ts +107 -13
- package/dist/types/src/rules/svg-tag-name-capitalization.d.ts +2 -2
- package/dist/types/src/types.d.ts +27 -3
- package/dist/types/types.d.ts +27 -3
- package/docs/rules/README.md +13 -2
- package/docs/rules/erb-no-silent-tag-in-attribute-name.md +34 -0
- package/docs/rules/html-aria-label-is-well-formatted.md +49 -0
- package/docs/rules/html-attribute-equals-spacing.md +35 -0
- package/docs/rules/html-avoid-both-disabled-and-aria-disabled.md +48 -0
- package/docs/rules/html-iframe-has-title.md +43 -0
- package/docs/rules/html-navigation-has-label.md +61 -0
- package/docs/rules/html-no-aria-hidden-on-focusable.md +54 -0
- package/docs/rules/html-no-positive-tab-index.md +55 -0
- package/docs/rules/html-no-self-closing.md +65 -0
- package/docs/rules/html-no-title-attribute.md +69 -0
- package/docs/rules/html-tag-name-lowercase.md +16 -3
- package/docs/rules/parser-no-errors.md +84 -0
- package/package.json +4 -4
- package/src/cli/argument-parser.ts +33 -24
- package/src/cli/file-processor.ts +25 -17
- package/src/cli/formatters/base-formatter.ts +2 -2
- package/src/cli/formatters/detailed-formatter.ts +9 -9
- package/src/cli/formatters/github-actions-formatter.ts +70 -0
- package/src/cli/formatters/index.ts +2 -0
- package/src/cli/formatters/json-formatter.ts +107 -0
- package/src/cli/formatters/simple-formatter.ts +15 -15
- package/src/cli/output-manager.ts +143 -0
- package/src/cli/summary-reporter.ts +24 -24
- package/src/cli.ts +48 -31
- package/src/default-rules.ts +22 -0
- package/src/linter.ts +30 -4
- package/src/rules/erb-no-empty-tags.ts +3 -3
- package/src/rules/erb-no-output-control-flow.ts +3 -3
- package/src/rules/erb-no-silent-tag-in-attribute-name.ts +40 -0
- package/src/rules/erb-prefer-image-tag-helper.ts +4 -9
- package/src/rules/erb-require-whitespace-inside-tags.ts +3 -3
- package/src/rules/erb-requires-trailing-newline.ts +2 -0
- package/src/rules/html-anchor-require-href.ts +3 -3
- package/src/rules/html-aria-attribute-must-be-valid.ts +29 -33
- package/src/rules/html-aria-label-is-well-formatted.ts +59 -0
- package/src/rules/html-aria-level-must-be-valid.ts +40 -7
- package/src/rules/html-aria-role-heading-requires-level.ts +18 -30
- package/src/rules/html-aria-role-must-be-valid.ts +7 -7
- package/src/rules/html-attribute-double-quotes.ts +23 -8
- package/src/rules/html-attribute-equals-spacing.ts +41 -0
- package/src/rules/html-attribute-values-require-quotes.ts +32 -12
- package/src/rules/html-avoid-both-disabled-and-aria-disabled.ts +66 -0
- package/src/rules/html-boolean-attributes-no-value.ts +19 -6
- package/src/rules/html-iframe-has-title.ts +62 -0
- package/src/rules/html-img-require-alt.ts +4 -9
- package/src/rules/html-navigation-has-label.ts +64 -0
- package/src/rules/html-no-aria-hidden-on-focusable.ts +90 -0
- package/src/rules/html-no-block-inside-inline.ts +5 -5
- package/src/rules/html-no-duplicate-attributes.ts +30 -30
- package/src/rules/html-no-duplicate-ids.ts +6 -5
- package/src/rules/html-no-empty-headings.ts +4 -33
- package/src/rules/html-no-nested-links.ts +3 -3
- package/src/rules/html-no-positive-tab-index.ts +33 -0
- package/src/rules/html-no-self-closing.ts +36 -0
- package/src/rules/html-no-title-attribute.ts +42 -0
- package/src/rules/html-tag-name-lowercase.ts +44 -31
- package/src/rules/index.ts +10 -0
- package/src/rules/parser-no-errors.ts +25 -0
- package/src/rules/rule-utils.ts +260 -39
- package/src/rules/svg-tag-name-capitalization.ts +4 -11
- package/src/types.ts +30 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Visitor, Location } from "@herb-tools/core";
|
|
2
|
-
import type { HTMLAttributeNode,
|
|
2
|
+
import type { HTMLAttributeNode, HTMLAttributeValueNode, HTMLOpenTagNode, LexResult, Token, Node } from "@herb-tools/core";
|
|
3
3
|
import type { LintOffense, LintSeverity, LintContext } from "../types.js";
|
|
4
4
|
/**
|
|
5
5
|
* Base visitor class that provides common functionality for rule visitors
|
|
@@ -19,17 +19,52 @@ export declare abstract class BaseRuleVisitor extends Visitor {
|
|
|
19
19
|
protected addOffense(message: string, location: Location, severity?: LintSeverity): void;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
* Gets attributes from
|
|
22
|
+
* Gets attributes from an HTMLOpenTagNode
|
|
23
23
|
*/
|
|
24
|
-
export declare function getAttributes(node: HTMLOpenTagNode
|
|
24
|
+
export declare function getAttributes(node: HTMLOpenTagNode): HTMLAttributeNode[];
|
|
25
25
|
/**
|
|
26
26
|
* Gets the tag name from an HTML tag node (lowercased)
|
|
27
27
|
*/
|
|
28
|
-
export declare function getTagName(node: HTMLOpenTagNode
|
|
28
|
+
export declare function getTagName(node: HTMLOpenTagNode): string | null;
|
|
29
29
|
/**
|
|
30
30
|
* Gets the attribute name from an HTMLAttributeNode (lowercased)
|
|
31
|
+
* Returns null if the attribute name contains dynamic content (ERB)
|
|
31
32
|
*/
|
|
32
33
|
export declare function getAttributeName(attributeNode: HTMLAttributeNode): string | null;
|
|
34
|
+
/**
|
|
35
|
+
* Checks if an attribute has a dynamic (ERB-containing) name
|
|
36
|
+
*/
|
|
37
|
+
export declare function hasDynamicAttributeName(attributeNode: HTMLAttributeNode): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Gets the combined string representation of an attribute name (for debugging)
|
|
40
|
+
* This includes both static content and ERB syntax
|
|
41
|
+
*/
|
|
42
|
+
export declare function getCombinedAttributeNameString(attributeNode: HTMLAttributeNode): string;
|
|
43
|
+
/**
|
|
44
|
+
* Checks if an attribute value contains only static content (no ERB)
|
|
45
|
+
*/
|
|
46
|
+
export declare function hasStaticAttributeValue(attributeNode: HTMLAttributeNode): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Checks if an attribute value contains dynamic content (ERB)
|
|
49
|
+
*/
|
|
50
|
+
export declare function hasDynamicAttributeValue(attributeNode: HTMLAttributeNode): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Gets the static string value of an attribute (returns null if it contains ERB)
|
|
53
|
+
*/
|
|
54
|
+
export declare function getStaticAttributeValue(attributeNode: HTMLAttributeNode): string | null;
|
|
55
|
+
/**
|
|
56
|
+
* Gets the value nodes array for dynamic inspection
|
|
57
|
+
*/
|
|
58
|
+
export declare function getAttributeValueNodes(attributeNode: HTMLAttributeNode): Node[];
|
|
59
|
+
/**
|
|
60
|
+
* Checks if an attribute value contains any static content (for validation purposes)
|
|
61
|
+
*/
|
|
62
|
+
export declare function hasStaticAttributeValueContent(attributeNode: HTMLAttributeNode): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Gets the static content of an attribute value (all literal parts combined)
|
|
65
|
+
* Returns the concatenated literal content, or null if no literal nodes exist
|
|
66
|
+
*/
|
|
67
|
+
export declare function getStaticAttributeValueContent(attributeNode: HTMLAttributeNode): string | null;
|
|
33
68
|
/**
|
|
34
69
|
* Gets the attribute value content from an HTMLAttributeValueNode
|
|
35
70
|
*/
|
|
@@ -41,20 +76,25 @@ export declare function hasAttributeValue(attributeNode: HTMLAttributeNode): boo
|
|
|
41
76
|
/**
|
|
42
77
|
* Gets the quote type used for an attribute value
|
|
43
78
|
*/
|
|
44
|
-
export declare function getAttributeValueQuoteType(
|
|
79
|
+
export declare function getAttributeValueQuoteType(nodeOrAttribute: HTMLAttributeNode | HTMLAttributeValueNode): "single" | "double" | "none" | null;
|
|
45
80
|
/**
|
|
46
81
|
* Finds an attribute by name in a list of attributes
|
|
47
82
|
*/
|
|
48
|
-
export declare function findAttributeByName(attributes:
|
|
83
|
+
export declare function findAttributeByName(attributes: Node[], attributeName: string): HTMLAttributeNode | null;
|
|
49
84
|
/**
|
|
50
85
|
* Checks if a tag has a specific attribute
|
|
51
86
|
*/
|
|
52
|
-
export declare function hasAttribute(node: HTMLOpenTagNode
|
|
87
|
+
export declare function hasAttribute(node: HTMLOpenTagNode, attributeName: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Checks if a tag has a specific attribute
|
|
90
|
+
*/
|
|
91
|
+
export declare function getAttribute(node: HTMLOpenTagNode, attributeName: string): HTMLAttributeNode | null;
|
|
53
92
|
/**
|
|
54
93
|
* Common HTML element categorization
|
|
55
94
|
*/
|
|
56
95
|
export declare const HTML_INLINE_ELEMENTS: Set<string>;
|
|
57
96
|
export declare const HTML_BLOCK_ELEMENTS: Set<string>;
|
|
97
|
+
export declare const HTML_VOID_ELEMENTS: Set<string>;
|
|
58
98
|
export declare const HTML_BOOLEAN_ATTRIBUTES: Set<string>;
|
|
59
99
|
export declare const HEADING_TAGS: Set<string>;
|
|
60
100
|
/**
|
|
@@ -67,6 +107,37 @@ export declare const SVG_CAMEL_CASE_ELEMENTS: Set<string>;
|
|
|
67
107
|
*/
|
|
68
108
|
export declare const SVG_LOWERCASE_TO_CAMELCASE: Map<string, string>;
|
|
69
109
|
export declare const VALID_ARIA_ROLES: Set<string>;
|
|
110
|
+
/**
|
|
111
|
+
* Parameter types for AttributeVisitorMixin methods
|
|
112
|
+
*/
|
|
113
|
+
export interface StaticAttributeStaticValueParams {
|
|
114
|
+
attributeName: string;
|
|
115
|
+
attributeValue: string;
|
|
116
|
+
attributeNode: HTMLAttributeNode;
|
|
117
|
+
parentNode: HTMLOpenTagNode;
|
|
118
|
+
}
|
|
119
|
+
export interface StaticAttributeDynamicValueParams {
|
|
120
|
+
attributeName: string;
|
|
121
|
+
valueNodes: Node[];
|
|
122
|
+
attributeNode: HTMLAttributeNode;
|
|
123
|
+
parentNode: HTMLOpenTagNode;
|
|
124
|
+
combinedValue?: string | null;
|
|
125
|
+
}
|
|
126
|
+
export interface DynamicAttributeStaticValueParams {
|
|
127
|
+
nameNodes: Node[];
|
|
128
|
+
attributeValue: string;
|
|
129
|
+
attributeNode: HTMLAttributeNode;
|
|
130
|
+
parentNode: HTMLOpenTagNode;
|
|
131
|
+
combinedName?: string;
|
|
132
|
+
}
|
|
133
|
+
export interface DynamicAttributeDynamicValueParams {
|
|
134
|
+
nameNodes: Node[];
|
|
135
|
+
valueNodes: Node[];
|
|
136
|
+
attributeNode: HTMLAttributeNode;
|
|
137
|
+
parentNode: HTMLOpenTagNode;
|
|
138
|
+
combinedName?: string;
|
|
139
|
+
combinedValue?: string | null;
|
|
140
|
+
}
|
|
70
141
|
export declare const ARIA_ATTRIBUTES: Set<string>;
|
|
71
142
|
/**
|
|
72
143
|
* Helper function to create a location at the end of the source with a 1-character range
|
|
@@ -80,21 +151,44 @@ export declare function isInlineElement(tagName: string): boolean;
|
|
|
80
151
|
* Checks if an element is block-level
|
|
81
152
|
*/
|
|
82
153
|
export declare function isBlockElement(tagName: string): boolean;
|
|
154
|
+
/**
|
|
155
|
+
* Checks if an element is a void element
|
|
156
|
+
*/
|
|
157
|
+
export declare function isVoidElement(tagName: string): boolean;
|
|
83
158
|
/**
|
|
84
159
|
* Checks if an attribute is a boolean attribute
|
|
85
160
|
*/
|
|
86
161
|
export declare function isBooleanAttribute(attributeName: string): boolean;
|
|
87
162
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
163
|
+
* Attribute visitor that provides granular processing based on both
|
|
164
|
+
* attribute name type (static/dynamic) and value type (static/dynamic)
|
|
165
|
+
*
|
|
166
|
+
* This gives you 4 distinct methods to override:
|
|
167
|
+
* - checkStaticAttributeStaticValue() - name="class" value="foo"
|
|
168
|
+
* - checkStaticAttributeDynamicValue() - name="class" value="<%= css_class %>"
|
|
169
|
+
* - checkDynamicAttributeStaticValue() - name="data-<%= key %>" value="foo"
|
|
170
|
+
* - checkDynamicAttributeDynamicValue() - name="data-<%= key %>" value="<%= value %>"
|
|
91
171
|
*/
|
|
92
172
|
export declare abstract class AttributeVisitorMixin extends BaseRuleVisitor {
|
|
93
173
|
constructor(ruleName: string, context?: Partial<LintContext>);
|
|
94
174
|
visitHTMLOpenTagNode(node: HTMLOpenTagNode): void;
|
|
95
|
-
visitHTMLSelfCloseTagNode(node: HTMLSelfCloseTagNode): void;
|
|
96
175
|
private checkAttributesOnNode;
|
|
97
|
-
|
|
176
|
+
/**
|
|
177
|
+
* Static attribute name with static value: class="container"
|
|
178
|
+
*/
|
|
179
|
+
protected checkStaticAttributeStaticValue(params: StaticAttributeStaticValueParams): void;
|
|
180
|
+
/**
|
|
181
|
+
* Static attribute name with dynamic value: class="<%= css_class %>"
|
|
182
|
+
*/
|
|
183
|
+
protected checkStaticAttributeDynamicValue(params: StaticAttributeDynamicValueParams): void;
|
|
184
|
+
/**
|
|
185
|
+
* Dynamic attribute name with static value: data-<%= key %>="foo"
|
|
186
|
+
*/
|
|
187
|
+
protected checkDynamicAttributeStaticValue(params: DynamicAttributeStaticValueParams): void;
|
|
188
|
+
/**
|
|
189
|
+
* Dynamic attribute name with dynamic value: data-<%= key %>="<%= value %>"
|
|
190
|
+
*/
|
|
191
|
+
protected checkDynamicAttributeDynamicValue(params: DynamicAttributeDynamicValueParams): void;
|
|
98
192
|
}
|
|
99
193
|
/**
|
|
100
194
|
* Checks if an attribute value is quoted
|
|
@@ -103,7 +197,7 @@ export declare function isAttributeValueQuoted(attributeNode: HTMLAttributeNode)
|
|
|
103
197
|
/**
|
|
104
198
|
* Iterates over all attributes of a tag node, calling the callback for each attribute
|
|
105
199
|
*/
|
|
106
|
-
export declare function forEachAttribute(node: HTMLOpenTagNode
|
|
200
|
+
export declare function forEachAttribute(node: HTMLOpenTagNode, callback: (attributeNode: HTMLAttributeNode) => void): void;
|
|
107
201
|
/**
|
|
108
202
|
* Base lexer visitor class that provides common functionality for lexer-based rule visitors
|
|
109
203
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class SVGTagNameCapitalizationRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -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:
|
|
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
|
-
|
|
5
|
+
offense: Diagnostic;
|
|
5
6
|
content: string;
|
|
6
7
|
}
|
|
7
8
|
export interface ProcessingResult {
|
|
8
9
|
totalErrors: number;
|
|
9
10
|
totalWarnings: number;
|
|
10
|
-
|
|
11
|
+
filesWithOffenses: number;
|
|
11
12
|
ruleCount: number;
|
|
12
|
-
|
|
13
|
-
|
|
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(
|
|
5
|
-
abstract formatFile(filename: string,
|
|
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(
|
|
12
|
-
formatFile(_filename: string,
|
|
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(
|
|
6
|
-
formatFile(filename: string,
|
|
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
|
-
|
|
5
|
+
filesWithOffenses: number;
|
|
6
6
|
ruleCount: number;
|
|
7
7
|
startTime: number;
|
|
8
8
|
startDate: Date;
|
|
9
9
|
showTiming: boolean;
|
|
10
|
-
|
|
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(
|
|
18
|
+
displayMostViolatedRules(ruleOffenses: Map<string, {
|
|
19
19
|
count: number;
|
|
20
20
|
files: Set<string>;
|
|
21
21
|
}>, limit?: number): void;
|
package/dist/types/src/cli.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class ERBNoEmptyTagsRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
2
2
|
import { ParserRule } from "../types.js";
|
|
3
3
|
import type { LintOffense, LintContext } from "../types.js";
|
|
4
4
|
export declare class ERBNoOutputControlFlowRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
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 ERBNoSilentTagInAttributeNameRule extends ParserRule {
|
|
5
|
+
name: string;
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class ERBPreferImageTagHelperRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
2
2
|
import { ParserRule } from "../types.js";
|
|
3
3
|
import type { LintOffense, LintContext } from "../types.js";
|
|
4
4
|
export declare class ERBRequireWhitespaceRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class HTMLAnchorRequireHrefRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class HTMLAriaAttributeMustBeValid extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
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 HTMLAriaLabelIsWellFormattedRule extends ParserRule {
|
|
5
|
+
name: string;
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class HTMLAriaLevelMustBeValidRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class HTMLAriaRoleHeadingRequiresLevelRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class HTMLAriaRoleMustBeValidRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class HTMLAttributeDoubleQuotesRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
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 HTMLAttributeEqualsSpacingRule extends ParserRule {
|
|
5
|
+
name: string;
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class HTMLAttributeValuesRequireQuotesRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
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 HTMLAvoidBothDisabledAndAriaDisabledRule extends ParserRule {
|
|
5
|
+
name: string;
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class HTMLBooleanAttributesNoValueRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
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 HTMLIframeHasTitleRule extends ParserRule {
|
|
5
|
+
name: string;
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class HTMLImgRequireAltRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
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 HTMLNavigationHasLabelRule extends ParserRule {
|
|
5
|
+
name: string;
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
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 HTMLNoAriaHiddenOnFocusableRule extends ParserRule {
|
|
5
|
+
name: string;
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class HTMLNoBlockInsideInlineRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types.js";
|
|
2
2
|
import type { LintOffense, LintContext } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
4
|
export declare class HTMLNoDuplicateAttributesRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParserRule } from "../types";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
3
3
|
import type { LintOffense, LintContext } from "../types";
|
|
4
4
|
export declare class HTMLNoDuplicateIdsRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|