@herb-tools/linter 0.4.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +216 -19
- package/dist/herb-lint.js +420 -205
- package/dist/herb-lint.js.map +1 -1
- package/dist/index.cjs +61 -43
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +61 -43
- package/dist/index.js.map +1 -1
- package/dist/package.json +4 -4
- package/dist/src/cli/argument-parser.js +28 -18
- 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 +2 -0
- package/dist/src/default-rules.js.map +1 -1
- package/dist/src/linter.js +1 -1
- 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-prefer-image-tag-helper.js +2 -2
- 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 +2 -2
- package/dist/src/rules/html-aria-attribute-must-be-valid.js.map +1 -1
- package/dist/src/rules/html-aria-level-must-be-valid.js +2 -2
- 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 +2 -2
- 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 +2 -2
- package/dist/src/rules/html-aria-role-must-be-valid.js.map +1 -1
- package/dist/src/rules/html-attribute-double-quotes.js +2 -2
- package/dist/src/rules/html-attribute-double-quotes.js.map +1 -1
- package/dist/src/rules/html-attribute-values-require-quotes.js +2 -2
- package/dist/src/rules/html-attribute-values-require-quotes.js.map +1 -1
- package/dist/src/rules/html-boolean-attributes-no-value.js +2 -2
- package/dist/src/rules/html-boolean-attributes-no-value.js.map +1 -1
- package/dist/src/rules/html-img-require-alt.js +2 -2
- package/dist/src/rules/html-img-require-alt.js.map +1 -1
- 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 +2 -2
- package/dist/src/rules/html-no-duplicate-attributes.js.map +1 -1
- package/dist/src/rules/html-no-duplicate-ids.js +2 -2
- package/dist/src/rules/html-no-duplicate-ids.js.map +1 -1
- package/dist/src/rules/html-no-empty-headings.js +2 -2
- 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-tag-name-lowercase.js +2 -2
- package/dist/src/rules/html-tag-name-lowercase.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/svg-tag-name-capitalization.js +2 -2
- package/dist/src/rules/svg-tag-name-capitalization.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/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-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-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-values-require-quotes.d.ts +2 -2
- package/dist/types/rules/html-boolean-attributes-no-value.d.ts +2 -2
- package/dist/types/rules/html-img-require-alt.d.ts +2 -2
- 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-tag-name-lowercase.d.ts +2 -2
- package/dist/types/rules/parser-no-errors.d.ts +8 -0
- 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-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-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-values-require-quotes.d.ts +2 -2
- package/dist/types/src/rules/html-boolean-attributes-no-value.d.ts +2 -2
- package/dist/types/src/rules/html-img-require-alt.d.ts +2 -2
- 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-tag-name-lowercase.d.ts +2 -2
- package/dist/types/src/rules/parser-no-errors.d.ts +8 -0
- package/dist/types/src/rules/svg-tag-name-capitalization.d.ts +2 -2
- package/dist/types/src/types.d.ts +3 -3
- package/dist/types/types.d.ts +3 -3
- package/docs/rules/README.md +1 -0
- package/docs/rules/parser-no-errors.md +84 -0
- package/package.json +4 -4
- package/src/cli/argument-parser.ts +33 -19
- 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 +2 -0
- package/src/linter.ts +1 -1
- 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-prefer-image-tag-helper.ts +3 -3
- 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 +3 -3
- package/src/rules/html-aria-level-must-be-valid.ts +3 -3
- package/src/rules/html-aria-role-heading-requires-level.ts +3 -3
- package/src/rules/html-aria-role-must-be-valid.ts +3 -3
- package/src/rules/html-attribute-double-quotes.ts +3 -3
- package/src/rules/html-attribute-values-require-quotes.ts +3 -3
- package/src/rules/html-boolean-attributes-no-value.ts +3 -3
- package/src/rules/html-img-require-alt.ts +3 -3
- package/src/rules/html-no-block-inside-inline.ts +5 -5
- package/src/rules/html-no-duplicate-attributes.ts +3 -3
- package/src/rules/html-no-duplicate-ids.ts +3 -3
- package/src/rules/html-no-empty-headings.ts +3 -3
- package/src/rules/html-no-nested-links.ts +3 -3
- package/src/rules/html-tag-name-lowercase.ts +3 -3
- package/src/rules/parser-no-errors.ts +25 -0
- package/src/rules/svg-tag-name-capitalization.ts +3 -3
- package/src/types.ts +3 -3
|
@@ -37,9 +37,9 @@ class NestedLinkVisitor extends BaseRuleVisitor {
|
|
|
37
37
|
}
|
|
38
38
|
export class HTMLNoNestedLinksRule extends ParserRule {
|
|
39
39
|
name = "html-no-nested-links";
|
|
40
|
-
check(
|
|
40
|
+
check(result, context) {
|
|
41
41
|
const visitor = new NestedLinkVisitor(this.name, context);
|
|
42
|
-
visitor.visit(
|
|
42
|
+
visitor.visit(result.value);
|
|
43
43
|
return visitor.offenses;
|
|
44
44
|
}
|
|
45
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-no-nested-links.js","sourceRoot":"","sources":["../../../src/rules/html-no-nested-links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;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,
|
|
1
|
+
{"version":3,"file":"html-no-nested-links.js","sourceRoot":"","sources":["../../../src/rules/html-no-nested-links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,iBAAkB,SAAQ,eAAe;IACrC,SAAS,GAAsB,EAAE,CAAA;IAEjC,eAAe,CAAC,OAAwB;QAC9C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,CACb,0EAA0E,EAC1E,OAAO,CAAC,QAAS,CAAC,QAAQ,EAC1B,OAAO,CACR,CAAA;YAED,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,oBAAoB,CAAC,IAAqB;QACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YACtE,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAChC,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAA2B,CAAA;QAChD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;QAEnC,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YACpB,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAChC,OAAM;QACR,CAAC;QAED,wDAAwD;QACxD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QAE7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5B,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAA;IACtB,CAAC;IAED,iFAAiF;IACjF,oBAAoB,CAAC,IAAqB;QACxC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhC,IAAI,OAAO,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;QAED,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IACnD,IAAI,GAAG,sBAAsB,CAAA;IAE7B,KAAK,CAAC,MAAmB,EAAE,OAA8B;QACvD,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACzD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
|
|
@@ -40,9 +40,9 @@ class TagNameLowercaseVisitor extends BaseRuleVisitor {
|
|
|
40
40
|
}
|
|
41
41
|
export class HTMLTagNameLowercaseRule extends ParserRule {
|
|
42
42
|
name = "html-tag-name-lowercase";
|
|
43
|
-
check(
|
|
43
|
+
check(result, context) {
|
|
44
44
|
const visitor = new TagNameLowercaseVisitor(this.name, context);
|
|
45
|
-
visitor.visit(
|
|
45
|
+
visitor.visit(result.value);
|
|
46
46
|
return visitor.offenses;
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-tag-name-lowercase.js","sourceRoot":"","sources":["../../../src/rules/html-tag-name-lowercase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;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,
|
|
1
|
+
{"version":3,"file":"html-tag-name-lowercase.js","sourceRoot":"","sources":["../../../src/rules/html-tag-name-lowercase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,uBAAwB,SAAQ,eAAe;IACnD,oBAAoB,CAAC,IAAqB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAA2B,CAAC,CAAA;QACrD,CAAC;QAED,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACvD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAA6B,CAAC,CAAA;YACvD,CAAC;YAED,OAAM;QACR,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAE1B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAA6B,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAED,yBAAyB,CAAC,IAA0B;QAClD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAEO,YAAY,CAAC,IAA+D;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;QAE9C,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACjC,IAAI,IAAI,GAAW,IAAI,CAAC,IAAI,CAAA;YAE5B,IAAI,IAAI,CAAC,IAAI,IAAI,wBAAwB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC3D,IAAI,IAAI,CAAC,IAAI,IAAI,yBAAyB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC5D,IAAI,IAAI,CAAC,IAAI,IAAI,8BAA8B;gBAAE,IAAI,GAAG,cAAc,CAAA;YAEtE,IAAI,CAAC,UAAU,CACb,GAAG,IAAI,eAAe,OAAO,iCAAiC,gBAAgB,aAAa,EAC3F,IAAI,CAAC,QAAS,CAAC,QAAQ,EACvB,OAAO,CACR,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,UAAU;IACtD,IAAI,GAAG,yBAAyB,CAAA;IAEhC,KAAK,CAAC,MAAmB,EAAE,OAA8B;QACvD,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC/D,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ParserRule } from "../types.js";
|
|
2
|
+
export class ParserNoErrorsRule extends ParserRule {
|
|
3
|
+
name = "parser-no-errors";
|
|
4
|
+
check(result) {
|
|
5
|
+
return result.recursiveErrors().map(error => this.herbErrorToLintOffense(error));
|
|
6
|
+
}
|
|
7
|
+
herbErrorToLintOffense(error) {
|
|
8
|
+
return {
|
|
9
|
+
message: `${error.message} (\`${error.type}\`)`,
|
|
10
|
+
location: error.location,
|
|
11
|
+
severity: error.severity,
|
|
12
|
+
rule: this.name,
|
|
13
|
+
code: this.name,
|
|
14
|
+
source: "linter"
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=parser-no-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-no-errors.js","sourceRoot":"","sources":["../../../src/rules/parser-no-errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAKxC,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,IAAI,GAAG,kBAAkB,CAAA;IAEzB,KAAK,CAAC,MAAmB;QACvB,OAAO,MAAM,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAC1C,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CACnC,CAAA;IACH,CAAC;IAEO,sBAAsB,CAAC,KAAgB;QAC7C,OAAO;YACL,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK;YAC/C,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,QAAQ;SACjB,CAAA;IACH,CAAC;CACF"}
|
|
@@ -49,9 +49,9 @@ class SVGTagNameCapitalizationVisitor extends BaseRuleVisitor {
|
|
|
49
49
|
}
|
|
50
50
|
export class SVGTagNameCapitalizationRule extends ParserRule {
|
|
51
51
|
name = "svg-tag-name-capitalization";
|
|
52
|
-
check(
|
|
52
|
+
check(result, context) {
|
|
53
53
|
const visitor = new SVGTagNameCapitalizationVisitor(this.name, context);
|
|
54
|
-
visitor.visit(
|
|
54
|
+
visitor.visit(result.value);
|
|
55
55
|
return visitor.offenses;
|
|
56
56
|
}
|
|
57
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg-tag-name-capitalization.js","sourceRoot":"","sources":["../../../src/rules/svg-tag-name-capitalization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA;AAEtG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,+BAAgC,SAAQ,eAAe;IACnD,SAAS,GAAG,KAAK,CAAA;IAEzB,oBAAoB,CAAC,IAAqB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACvD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAA;YACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;YAC1B,IAAI,CAAC,SAAS,GAAG,YAAY,CAAA;YAC7B,OAAM;QACR,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAA2B,CAAC,CAAA;YACrD,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAA6B,CAAC,CAAA;YACvD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,yBAAyB,CAAC,IAA0B;QAClD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAEO,YAAY,CAAC,IAA+D;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,IAAI,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAM;QAEhD,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;QAC9C,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QAEzE,IAAI,gBAAgB,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACrD,IAAI,IAAI,GAAW,IAAI,CAAC,IAAI,CAAA;YAE5B,IAAI,IAAI,CAAC,IAAI,IAAI,wBAAwB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC3D,IAAI,IAAI,CAAC,IAAI,IAAI,yBAAyB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC5D,IAAI,IAAI,CAAC,IAAI,IAAI,8BAA8B;gBAAE,IAAI,GAAG,cAAc,CAAA;YAEtE,IAAI,CAAC,UAAU,CACb,GAAG,IAAI,mBAAmB,OAAO,8CAA8C,gBAAgB,aAAa,EAC5G,IAAI,CAAC,QAAS,CAAC,QAAQ,EACvB,OAAO,CACR,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,UAAU;IAC1D,IAAI,GAAG,6BAA6B,CAAA;IAEpC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"svg-tag-name-capitalization.js","sourceRoot":"","sources":["../../../src/rules/svg-tag-name-capitalization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA;AAEtG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,+BAAgC,SAAQ,eAAe;IACnD,SAAS,GAAG,KAAK,CAAA;IAEzB,oBAAoB,CAAC,IAAqB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACvD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAA;YACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;YAC1B,IAAI,CAAC,SAAS,GAAG,YAAY,CAAA;YAC7B,OAAM;QACR,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAA2B,CAAC,CAAA;YACrD,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAA6B,CAAC,CAAA;YACvD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,yBAAyB,CAAC,IAA0B;QAClD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAEO,YAAY,CAAC,IAA+D;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAA;QAEpC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,IAAI,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAM;QAEhD,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;QAC9C,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QAEzE,IAAI,gBAAgB,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACrD,IAAI,IAAI,GAAW,IAAI,CAAC,IAAI,CAAA;YAE5B,IAAI,IAAI,CAAC,IAAI,IAAI,wBAAwB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC3D,IAAI,IAAI,CAAC,IAAI,IAAI,yBAAyB;gBAAE,IAAI,GAAG,SAAS,CAAA;YAC5D,IAAI,IAAI,CAAC,IAAI,IAAI,8BAA8B;gBAAE,IAAI,GAAG,cAAc,CAAA;YAEtE,IAAI,CAAC,UAAU,CACb,GAAG,IAAI,mBAAmB,OAAO,8CAA8C,gBAAgB,aAAa,EAC5G,IAAI,CAAC,QAAS,CAAC,QAAQ,EACvB,OAAO,CACR,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,UAAU;IAC1D,IAAI,GAAG,6BAA6B,CAAA;IAEpC,KAAK,CAAC,MAAmB,EAAE,OAA8B;QACvD,MAAM,OAAO,GAAG,IAAI,+BAA+B,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACvE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/cli.ts","../src/default-rules.ts","../src/herb-lint.ts","../src/index.ts","../src/linter.ts","../src/types.ts","../src/cli/argument-parser.ts","../src/cli/file-processor.ts","../src/cli/index.ts","../src/cli/summary-reporter.ts","../src/cli/formatters/base-formatter.ts","../src/cli/formatters/detailed-formatter.ts","../src/cli/formatters/index.ts","../src/cli/formatters/simple-formatter.ts","../src/rules/erb-no-empty-tags.ts","../src/rules/erb-no-output-control-flow.ts","../src/rules/erb-prefer-image-tag-helper.ts","../src/rules/erb-require-whitespace-inside-tags.ts","../src/rules/erb-requires-trailing-newline.ts","../src/rules/html-anchor-require-href.ts","../src/rules/html-aria-attribute-must-be-valid.ts","../src/rules/html-aria-level-must-be-valid.ts","../src/rules/html-aria-role-heading-requires-level.ts","../src/rules/html-aria-role-must-be-valid.ts","../src/rules/html-attribute-double-quotes.ts","../src/rules/html-attribute-values-require-quotes.ts","../src/rules/html-boolean-attributes-no-value.ts","../src/rules/html-img-require-alt.ts","../src/rules/html-no-block-inside-inline.ts","../src/rules/html-no-duplicate-attributes.ts","../src/rules/html-no-duplicate-ids.ts","../src/rules/html-no-empty-headings.ts","../src/rules/html-no-nested-links.ts","../src/rules/html-tag-name-lowercase.ts","../src/rules/index.ts","../src/rules/rule-utils.ts","../src/rules/svg-tag-name-capitalization.ts"],"version":"5.8.3"}
|
|
1
|
+
{"root":["../src/cli.ts","../src/default-rules.ts","../src/herb-lint.ts","../src/index.ts","../src/linter.ts","../src/types.ts","../src/cli/argument-parser.ts","../src/cli/file-processor.ts","../src/cli/index.ts","../src/cli/output-manager.ts","../src/cli/summary-reporter.ts","../src/cli/formatters/base-formatter.ts","../src/cli/formatters/detailed-formatter.ts","../src/cli/formatters/github-actions-formatter.ts","../src/cli/formatters/index.ts","../src/cli/formatters/json-formatter.ts","../src/cli/formatters/simple-formatter.ts","../src/rules/erb-no-empty-tags.ts","../src/rules/erb-no-output-control-flow.ts","../src/rules/erb-prefer-image-tag-helper.ts","../src/rules/erb-require-whitespace-inside-tags.ts","../src/rules/erb-requires-trailing-newline.ts","../src/rules/html-anchor-require-href.ts","../src/rules/html-aria-attribute-must-be-valid.ts","../src/rules/html-aria-level-must-be-valid.ts","../src/rules/html-aria-role-heading-requires-level.ts","../src/rules/html-aria-role-must-be-valid.ts","../src/rules/html-attribute-double-quotes.ts","../src/rules/html-attribute-values-require-quotes.ts","../src/rules/html-boolean-attributes-no-value.ts","../src/rules/html-img-require-alt.ts","../src/rules/html-no-block-inside-inline.ts","../src/rules/html-no-duplicate-attributes.ts","../src/rules/html-no-duplicate-ids.ts","../src/rules/html-no-empty-headings.ts","../src/rules/html-no-nested-links.ts","../src/rules/html-tag-name-lowercase.ts","../src/rules/index.ts","../src/rules/parser-no-errors.ts","../src/rules/rule-utils.ts","../src/rules/svg-tag-name-capitalization.ts"],"version":"5.8.3"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ThemeInput } from "@herb-tools/highlighter";
|
|
2
|
+
export type FormatOption = "simple" | "detailed" | "json" | "github";
|
|
2
3
|
export interface ParsedArguments {
|
|
3
4
|
pattern: string;
|
|
4
|
-
formatOption:
|
|
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/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
|
}
|
|
@@ -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
|
}
|
|
@@ -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
|
}
|
|
@@ -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
|
}
|
|
@@ -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
|
}
|
|
@@ -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
|
}
|
|
@@ -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
|
}
|
|
@@ -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 HTMLNoEmptyHeadingsRule 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 HTMLNoNestedLinksRule 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 HTMLTagNameLowercaseRule extends ParserRule {
|
|
5
5
|
name: string;
|
|
6
|
-
check(
|
|
6
|
+
check(result: ParseResult, context?: Partial<LintContext>): LintOffense[];
|
|
7
7
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ParserRule } from "../types.js";
|
|
2
|
+
import type { LintOffense } from "../types.js";
|
|
3
|
+
import type { ParseResult } from "@herb-tools/core";
|
|
4
|
+
export declare class ParserNoErrorsRule extends ParserRule {
|
|
5
|
+
name: string;
|
|
6
|
+
check(result: ParseResult): LintOffense[];
|
|
7
|
+
private herbErrorToLintOffense;
|
|
8
|
+
}
|
|
@@ -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
|
+
}
|