@herb-tools/linter 0.7.4 → 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.
Files changed (44) hide show
  1. package/README.md +2 -2
  2. package/dist/herb-lint.js +116 -42
  3. package/dist/herb-lint.js.map +1 -1
  4. package/dist/index.cjs +47 -8
  5. package/dist/index.cjs.map +1 -1
  6. package/dist/index.js +47 -10
  7. package/dist/index.js.map +1 -1
  8. package/dist/package.json +5 -5
  9. package/dist/src/cli/argument-parser.js +4 -2
  10. package/dist/src/cli/argument-parser.js.map +1 -1
  11. package/dist/src/cli.js +2 -1
  12. package/dist/src/cli.js.map +1 -1
  13. package/dist/src/default-rules.js +4 -0
  14. package/dist/src/default-rules.js.map +1 -1
  15. package/dist/src/rules/erb-comment-syntax.js +19 -0
  16. package/dist/src/rules/erb-comment-syntax.js.map +1 -0
  17. package/dist/src/rules/erb-require-whitespace-inside-tags.js +1 -9
  18. package/dist/src/rules/erb-require-whitespace-inside-tags.js.map +1 -1
  19. package/dist/src/rules/erb-right-trim.js +28 -0
  20. package/dist/src/rules/erb-right-trim.js.map +1 -0
  21. package/dist/src/rules/index.js +2 -0
  22. package/dist/src/rules/index.js.map +1 -1
  23. package/dist/src/rules/rule-utils.js.map +1 -1
  24. package/dist/tsconfig.tsbuildinfo +1 -1
  25. package/dist/types/rules/erb-comment-syntax.d.ts +7 -0
  26. package/dist/types/rules/erb-require-whitespace-inside-tags.d.ts +1 -1
  27. package/dist/types/rules/erb-right-trim.d.ts +7 -0
  28. package/dist/types/rules/index.d.ts +2 -0
  29. package/dist/types/src/rules/erb-comment-syntax.d.ts +7 -0
  30. package/dist/types/src/rules/erb-require-whitespace-inside-tags.d.ts +1 -1
  31. package/dist/types/src/rules/erb-right-trim.d.ts +7 -0
  32. package/dist/types/src/rules/index.d.ts +2 -0
  33. package/docs/rules/README.md +3 -1
  34. package/docs/rules/erb-comment-syntax.md +44 -0
  35. package/docs/rules/erb-right-trim.md +57 -0
  36. package/package.json +5 -5
  37. package/src/cli/argument-parser.ts +4 -2
  38. package/src/cli.ts +3 -1
  39. package/src/default-rules.ts +4 -0
  40. package/src/rules/erb-comment-syntax.ts +30 -0
  41. package/src/rules/erb-require-whitespace-inside-tags.ts +4 -12
  42. package/src/rules/erb-right-trim.ts +44 -0
  43. package/src/rules/index.ts +2 -0
  44. 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
- visitChildNodes(node) {
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;