@herb-tools/linter 0.7.3 → 0.7.5
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 +2 -2
- package/dist/herb-lint.js +116 -42
- package/dist/herb-lint.js.map +1 -1
- package/dist/index.cjs +47 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +47 -10
- package/dist/index.js.map +1 -1
- package/dist/package.json +5 -5
- package/dist/src/cli/argument-parser.js +4 -2
- package/dist/src/cli/argument-parser.js.map +1 -1
- package/dist/src/cli.js +2 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/default-rules.js +4 -0
- package/dist/src/default-rules.js.map +1 -1
- package/dist/src/rules/erb-comment-syntax.js +19 -0
- package/dist/src/rules/erb-comment-syntax.js.map +1 -0
- package/dist/src/rules/erb-require-whitespace-inside-tags.js +1 -9
- package/dist/src/rules/erb-require-whitespace-inside-tags.js.map +1 -1
- package/dist/src/rules/erb-right-trim.js +28 -0
- package/dist/src/rules/erb-right-trim.js.map +1 -0
- package/dist/src/rules/index.js +2 -0
- package/dist/src/rules/index.js.map +1 -1
- package/dist/src/rules/rule-utils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/rules/erb-comment-syntax.d.ts +7 -0
- package/dist/types/rules/erb-require-whitespace-inside-tags.d.ts +1 -1
- package/dist/types/rules/erb-right-trim.d.ts +7 -0
- package/dist/types/rules/index.d.ts +2 -0
- package/dist/types/src/rules/erb-comment-syntax.d.ts +7 -0
- package/dist/types/src/rules/erb-require-whitespace-inside-tags.d.ts +1 -1
- package/dist/types/src/rules/erb-right-trim.d.ts +7 -0
- package/dist/types/src/rules/index.d.ts +2 -0
- package/docs/rules/README.md +3 -1
- package/docs/rules/erb-comment-syntax.md +44 -0
- package/docs/rules/erb-right-trim.md +57 -0
- package/package.json +5 -5
- package/src/cli/argument-parser.ts +4 -2
- package/src/cli.ts +3 -1
- package/src/default-rules.ts +4 -0
- package/src/rules/erb-comment-syntax.ts +30 -0
- package/src/rules/erb-require-whitespace-inside-tags.ts +4 -12
- package/src/rules/erb-right-trim.ts +44 -0
- package/src/rules/index.ts +2 -0
- package/src/rules/rule-utils.ts +2 -2
package/dist/index.cjs
CHANGED
|
@@ -682,6 +682,23 @@ class BaseSourceRuleVisitor {
|
|
|
682
682
|
}
|
|
683
683
|
}
|
|
684
684
|
|
|
685
|
+
class ERBCommentSyntaxVisitor extends BaseRuleVisitor {
|
|
686
|
+
visitERBContentNode(node) {
|
|
687
|
+
if (node.content?.value.startsWith(" #")) {
|
|
688
|
+
const openingTag = node.tag_opening?.value;
|
|
689
|
+
this.addOffense(`Use \`<%#\` instead of \`${openingTag} #\`. Ruby comments immediately after ERB tags can cause parsing issues.`, node.location);
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
class ERBCommentSyntax extends ParserRule {
|
|
694
|
+
name = "erb-comment-syntax";
|
|
695
|
+
check(result, context) {
|
|
696
|
+
const visitor = new ERBCommentSyntaxVisitor(this.name, context);
|
|
697
|
+
visitor.visit(result.value);
|
|
698
|
+
return visitor.offenses;
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
|
|
685
702
|
class ERBNoEmptyTagsVisitor extends BaseRuleVisitor {
|
|
686
703
|
visitERBContentNode(node) {
|
|
687
704
|
this.visitChildNodes(node);
|
|
@@ -1533,14 +1550,7 @@ class ERBRequiresTrailingNewlineRule extends SourceRule {
|
|
|
1533
1550
|
}
|
|
1534
1551
|
|
|
1535
1552
|
class RequireWhitespaceInsideTags extends BaseRuleVisitor {
|
|
1536
|
-
|
|
1537
|
-
this.checkWhitespace(node);
|
|
1538
|
-
super.visitChildNodes(node);
|
|
1539
|
-
}
|
|
1540
|
-
checkWhitespace(node) {
|
|
1541
|
-
if (!core.isERBNode(node)) {
|
|
1542
|
-
return;
|
|
1543
|
-
}
|
|
1553
|
+
visitERBNode(node) {
|
|
1544
1554
|
const openTag = node.tag_opening;
|
|
1545
1555
|
const closeTag = node.tag_closing;
|
|
1546
1556
|
const content = node.content;
|
|
@@ -2649,7 +2659,33 @@ class HTMLNoUnderscoresInAttributeNamesRule extends ParserRule {
|
|
|
2649
2659
|
}
|
|
2650
2660
|
}
|
|
2651
2661
|
|
|
2662
|
+
class ERBRightTrimVisitor extends BaseRuleVisitor {
|
|
2663
|
+
visitERBNode(node) {
|
|
2664
|
+
if (!node.tag_closing)
|
|
2665
|
+
return;
|
|
2666
|
+
const trimClosing = node.tag_closing.value;
|
|
2667
|
+
if (trimClosing !== "=%>" && trimClosing !== "-%>")
|
|
2668
|
+
return;
|
|
2669
|
+
if (!core.isERBOutputNode(node)) {
|
|
2670
|
+
this.addOffense(`Right-trimming with \`${trimClosing}\` has no effect on non-output ERB tags. Use \`%>\` instead`, node.tag_closing.location);
|
|
2671
|
+
return;
|
|
2672
|
+
}
|
|
2673
|
+
if (trimClosing === "=%>") {
|
|
2674
|
+
this.addOffense("Use `-%>` instead of `=%>` for right-trimming. The `=%>` syntax is obscure and not well-supported in most ERB engines", node.tag_closing.location);
|
|
2675
|
+
}
|
|
2676
|
+
}
|
|
2677
|
+
}
|
|
2678
|
+
class ERBRightTrimRule extends ParserRule {
|
|
2679
|
+
name = "erb-right-trim";
|
|
2680
|
+
check(result, context) {
|
|
2681
|
+
const visitor = new ERBRightTrimVisitor(this.name, context);
|
|
2682
|
+
visitor.visit(result.value);
|
|
2683
|
+
return visitor.offenses;
|
|
2684
|
+
}
|
|
2685
|
+
}
|
|
2686
|
+
|
|
2652
2687
|
const defaultRules = [
|
|
2688
|
+
ERBCommentSyntax,
|
|
2653
2689
|
ERBNoEmptyTagsRule,
|
|
2654
2690
|
ERBNoOutputControlFlowRule,
|
|
2655
2691
|
ERBNoSilentTagInAttributeNameRule,
|
|
@@ -2684,6 +2720,7 @@ const defaultRules = [
|
|
|
2684
2720
|
ParserNoErrorsRule,
|
|
2685
2721
|
SVGTagNameCapitalizationRule,
|
|
2686
2722
|
HTMLNoUnderscoresInAttributeNamesRule,
|
|
2723
|
+
ERBRightTrimRule,
|
|
2687
2724
|
];
|
|
2688
2725
|
|
|
2689
2726
|
class Linter {
|
|
@@ -2911,11 +2948,13 @@ exports.BaseRuleVisitor = BaseRuleVisitor;
|
|
|
2911
2948
|
exports.BaseSourceRuleVisitor = BaseSourceRuleVisitor;
|
|
2912
2949
|
exports.ControlFlowTrackingVisitor = ControlFlowTrackingVisitor;
|
|
2913
2950
|
exports.DEFAULT_LINT_CONTEXT = DEFAULT_LINT_CONTEXT;
|
|
2951
|
+
exports.ERBCommentSyntax = ERBCommentSyntax;
|
|
2914
2952
|
exports.ERBNoEmptyTagsRule = ERBNoEmptyTagsRule;
|
|
2915
2953
|
exports.ERBNoOutputControlFlowRule = ERBNoOutputControlFlowRule;
|
|
2916
2954
|
exports.ERBNoSilentTagInAttributeNameRule = ERBNoSilentTagInAttributeNameRule;
|
|
2917
2955
|
exports.ERBPreferImageTagHelperRule = ERBPreferImageTagHelperRule;
|
|
2918
2956
|
exports.ERBRequiresTrailingNewlineRule = ERBRequiresTrailingNewlineRule;
|
|
2957
|
+
exports.ERBRightTrimRule = ERBRightTrimRule;
|
|
2919
2958
|
exports.HEADING_TAGS = HEADING_TAGS;
|
|
2920
2959
|
exports.HTMLAnchorRequireHrefRule = HTMLAnchorRequireHrefRule;
|
|
2921
2960
|
exports.HTMLAriaLabelIsWellFormattedRule = HTMLAriaLabelIsWellFormattedRule;
|