@herb-tools/linter 0.6.0 → 0.6.1

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.
@@ -1,18 +1,143 @@
1
1
  import { ParserRule } from "../types";
2
- import { AttributeVisitorMixin } from "./rule-utils";
3
- class NoDuplicateIdsVisitor extends AttributeVisitorMixin {
2
+ import { ControlFlowTrackingVisitor, ControlFlowType } from "./rule-utils";
3
+ import { LiteralNode } from "@herb-tools/core";
4
+ import { Printer, IdentityPrinter } from "@herb-tools/printer";
5
+ import { hasERBOutput, getValidatableStaticContent, isEffectivelyStatic, isNode, getStaticAttributeName, isERBOutputNode } from "@herb-tools/core";
6
+ class OutputPrinter extends Printer {
7
+ visitLiteralNode(node) {
8
+ this.write(IdentityPrinter.print(node));
9
+ }
10
+ visitERBContentNode(node) {
11
+ if (isERBOutputNode(node)) {
12
+ this.write(IdentityPrinter.print(node));
13
+ }
14
+ }
15
+ }
16
+ class NoDuplicateIdsVisitor extends ControlFlowTrackingVisitor {
4
17
  documentIds = new Set();
5
- checkStaticAttributeStaticValue({ attributeName, attributeValue, attributeNode }) {
6
- if (attributeName.toLowerCase() !== "id")
18
+ currentBranchIds = new Set();
19
+ controlFlowIds = new Set();
20
+ visitHTMLAttributeNode(node) {
21
+ this.checkAttribute(node);
22
+ }
23
+ onEnterControlFlow(_controlFlowType, wasAlreadyInControlFlow) {
24
+ const stateToRestore = {
25
+ previousBranchIds: this.currentBranchIds,
26
+ previousControlFlowIds: this.controlFlowIds
27
+ };
28
+ this.currentBranchIds = new Set();
29
+ if (!wasAlreadyInControlFlow) {
30
+ this.controlFlowIds = new Set();
31
+ }
32
+ return stateToRestore;
33
+ }
34
+ onExitControlFlow(controlFlowType, wasAlreadyInControlFlow, stateToRestore) {
35
+ if (controlFlowType === ControlFlowType.CONDITIONAL && !wasAlreadyInControlFlow) {
36
+ this.controlFlowIds.forEach(id => this.documentIds.add(id));
37
+ }
38
+ this.currentBranchIds = stateToRestore.previousBranchIds;
39
+ this.controlFlowIds = stateToRestore.previousControlFlowIds;
40
+ }
41
+ onEnterBranch() {
42
+ const stateToRestore = {
43
+ previousBranchIds: this.currentBranchIds
44
+ };
45
+ if (this.isInControlFlow) {
46
+ this.currentBranchIds = new Set();
47
+ }
48
+ return stateToRestore;
49
+ }
50
+ onExitBranch(_stateToRestore) { }
51
+ checkAttribute(attributeNode) {
52
+ if (!this.isIdAttribute(attributeNode))
7
53
  return;
8
- if (!attributeValue)
54
+ const idValue = this.extractIdValue(attributeNode);
55
+ if (!idValue)
9
56
  return;
10
- const id = attributeValue.trim();
11
- if (this.documentIds.has(id)) {
12
- this.addOffense(`Duplicate ID \`${id}\` found. IDs must be unique within a document.`, attributeNode.location, "error");
57
+ if (this.isWhitespaceOnlyId(idValue.identifier))
13
58
  return;
59
+ this.processIdDuplicate(idValue, attributeNode);
60
+ }
61
+ isIdAttribute(attributeNode) {
62
+ if (!attributeNode.name?.children || !attributeNode.value)
63
+ return false;
64
+ return getStaticAttributeName(attributeNode.name) === "id";
65
+ }
66
+ extractIdValue(attributeNode) {
67
+ const valueNodes = attributeNode.value?.children || [];
68
+ if (hasERBOutput(valueNodes) && this.isInControlFlow && this.currentControlFlowType === ControlFlowType.LOOP) {
69
+ return null;
14
70
  }
15
- this.documentIds.add(id);
71
+ const identifier = isEffectivelyStatic(valueNodes) ? getValidatableStaticContent(valueNodes) : OutputPrinter.print(valueNodes);
72
+ if (!identifier)
73
+ return null;
74
+ return { identifier, shouldTrackDuplicates: true };
75
+ }
76
+ isWhitespaceOnlyId(identifier) {
77
+ return identifier !== '' && identifier.trim() === '';
78
+ }
79
+ processIdDuplicate(idValue, attributeNode) {
80
+ const { identifier, shouldTrackDuplicates } = idValue;
81
+ if (!shouldTrackDuplicates)
82
+ return;
83
+ if (this.isInControlFlow) {
84
+ this.handleControlFlowId(identifier, attributeNode);
85
+ }
86
+ else {
87
+ this.handleGlobalId(identifier, attributeNode);
88
+ }
89
+ }
90
+ handleControlFlowId(identifier, attributeNode) {
91
+ if (this.currentControlFlowType === ControlFlowType.LOOP) {
92
+ this.handleLoopId(identifier, attributeNode);
93
+ }
94
+ else {
95
+ this.handleConditionalId(identifier, attributeNode);
96
+ }
97
+ this.currentBranchIds.add(identifier);
98
+ }
99
+ handleLoopId(identifier, attributeNode) {
100
+ const isStaticId = this.isStaticId(attributeNode);
101
+ if (isStaticId) {
102
+ this.addDuplicateIdOffense(identifier, attributeNode.location);
103
+ return;
104
+ }
105
+ if (this.currentBranchIds.has(identifier)) {
106
+ this.addSameLoopIterationOffense(identifier, attributeNode.location);
107
+ }
108
+ }
109
+ handleConditionalId(identifier, attributeNode) {
110
+ if (this.currentBranchIds.has(identifier)) {
111
+ this.addSameBranchOffense(identifier, attributeNode.location);
112
+ return;
113
+ }
114
+ if (this.documentIds.has(identifier)) {
115
+ this.addDuplicateIdOffense(identifier, attributeNode.location);
116
+ return;
117
+ }
118
+ this.controlFlowIds.add(identifier);
119
+ }
120
+ handleGlobalId(identifier, attributeNode) {
121
+ if (this.documentIds.has(identifier)) {
122
+ this.addDuplicateIdOffense(identifier, attributeNode.location);
123
+ return;
124
+ }
125
+ this.documentIds.add(identifier);
126
+ }
127
+ isStaticId(attributeNode) {
128
+ const valueNodes = attributeNode.value.children;
129
+ const isCompletelyStatic = valueNodes.every(child => isNode(child, LiteralNode));
130
+ const isEffectivelyStaticValue = isEffectivelyStatic(valueNodes);
131
+ return isCompletelyStatic || isEffectivelyStaticValue;
132
+ }
133
+ addDuplicateIdOffense(identifier, location) {
134
+ this.addOffense(`Duplicate ID \`${identifier}\` found. IDs must be unique within a document.`, location, "error");
135
+ }
136
+ addSameLoopIterationOffense(identifier, location) {
137
+ this.addOffense(`Duplicate ID \`${identifier}\` found within the same loop iteration. IDs must be unique within the same loop iteration.`, location, "error");
138
+ }
139
+ addSameBranchOffense(identifier, location) {
140
+ this.addOffense(`Duplicate ID \`${identifier}\` found within the same control flow branch. IDs must be unique within the same control flow branch.`, location, "error");
16
141
  }
17
142
  }
18
143
  export class HTMLNoDuplicateIdsRule extends ParserRule {
@@ -1 +1 @@
1
- {"version":3,"file":"html-no-duplicate-ids.js","sourceRoot":"","sources":["../../../src/rules/html-no-duplicate-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,qBAAqB,EAAoC,MAAM,cAAc,CAAA;AAKtF,MAAM,qBAAsB,SAAQ,qBAAqB;IAC/C,WAAW,GAAgB,IAAI,GAAG,EAAU,CAAA;IAE1C,+BAA+B,CAAC,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAoC;QAC1H,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,IAAI;YAAE,OAAM;QAChD,IAAI,CAAC,cAAc;YAAE,OAAM;QAE3B,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE,CAAA;QAEhC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CACb,kBAAkB,EAAE,iDAAiD,EACrE,aAAa,CAAC,QAAQ,EACtB,OAAO,CACR,CAAA;YAED,OAAM;QACR,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,UAAU;IACpD,IAAI,GAAG,uBAAuB,CAAA;IAE9B,KAAK,CAAC,MAAmB,EAAE,OAA8B;QACvD,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAE7D,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAE3B,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"html-no-duplicate-ids.js","sourceRoot":"","sources":["../../../src/rules/html-no-duplicate-ids.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,21 @@
1
1
  import { ParserRule } from "../types.js";
2
- import { BaseRuleVisitor, getTagName, isVoidElement } from "./rule-utils.js";
2
+ import { BaseRuleVisitor, isVoidElement } from "./rule-utils.js";
3
+ import { getTagName } from "@herb-tools/core";
3
4
  class NoSelfClosingVisitor extends BaseRuleVisitor {
5
+ visitHTMLElementNode(node) {
6
+ if (getTagName(node) === "svg") {
7
+ this.visit(node.open_tag);
8
+ }
9
+ else {
10
+ this.visitChildNodes(node);
11
+ }
12
+ }
4
13
  visitHTMLOpenTagNode(node) {
5
14
  if (node.tag_closing?.value === "/>") {
6
15
  const tagName = getTagName(node);
7
- const shouldBeVoid = tagName ? isVoidElement(tagName) : false;
8
- const instead = shouldBeVoid ? `Use \`<${tagName}>\` instead.` : `Use \`<${tagName}></${tagName}>\` instead.`;
9
- this.addOffense(`Self-closing syntax \`<${tagName} />\` is not allowed in HTML. ${instead}`, node.location, "error");
16
+ const instead = isVoidElement(tagName) ? `<${tagName}>` : `<${tagName}></${tagName}>`;
17
+ this.addOffense(`Use \`${instead}\` instead of self-closing \`<${tagName} />\` for HTML compatibility.`, node.location, "error");
10
18
  }
11
- super.visitHTMLOpenTagNode(node);
12
19
  }
13
20
  }
14
21
  export class HTMLNoSelfClosingRule extends ParserRule {
@@ -1 +1 @@
1
- {"version":3,"file":"html-no-self-closing.js","sourceRoot":"","sources":["../../../src/rules/html-no-self-closing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAK5E,MAAM,oBAAqB,SAAQ,eAAe;IAChD,oBAAoB,CAAC,IAAqB;QACxC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;YAEhC,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;YAC7D,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,OAAO,cAAc,CAAC,CAAC,CAAC,UAAU,OAAO,MAAM,OAAO,cAAc,CAAA;YAE7G,IAAI,CAAC,UAAU,CACb,0BAA0B,OAAO,iCAAiC,OAAO,EAAE,EAC3E,IAAI,CAAC,QAAQ,EACb,OAAO,CACR,CAAA;QACH,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,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAE5D,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAE3B,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"html-no-self-closing.js","sourceRoot":"","sources":["../../../src/rules/html-no-self-closing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAK7C,MAAM,oBAAqB,SAAQ,eAAe;IAChD,oBAAoB,CAAC,IAAqB;QACxC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,IAAqB;QACxC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;YAChC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,MAAM,OAAO,GAAG,CAAA;YAErF,IAAI,CAAC,UAAU,CACb,SAAS,OAAO,iCAAiC,OAAO,+BAA+B,EACvF,IAAI,CAAC,QAAQ,EACb,OAAO,CACR,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IACnD,IAAI,GAAG,sBAAsB,CAAA;IAE7B,KAAK,CAAC,MAAmB,EAAE,OAA8B;QACvD,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAE5D,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAE3B,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;CACF"}
@@ -1,5 +1,10 @@
1
1
  import { Visitor, Position, Location, getStaticAttributeName, hasDynamicAttributeName as hasNodeDynamicAttributeName, getCombinedAttributeName, hasERBOutput, getStaticContentFromNodes, hasStaticContent, isEffectivelyStatic, getValidatableStaticContent } from "@herb-tools/core";
2
2
  import { DEFAULT_LINT_CONTEXT } from "../types.js";
3
+ export var ControlFlowType;
4
+ (function (ControlFlowType) {
5
+ ControlFlowType[ControlFlowType["CONDITIONAL"] = 0] = "CONDITIONAL";
6
+ ControlFlowType[ControlFlowType["LOOP"] = 1] = "LOOP";
7
+ })(ControlFlowType || (ControlFlowType = {}));
3
8
  /**
4
9
  * Base visitor class that provides common functionality for rule visitors
5
10
  */
@@ -32,6 +37,70 @@ export class BaseRuleVisitor extends Visitor {
32
37
  this.offenses.push(this.createOffense(message, location, severity));
33
38
  }
34
39
  }
40
+ /**
41
+ * Mixin that adds control flow tracking capabilities to rule visitors
42
+ * This allows rules to track state across different control flow structures
43
+ * like if/else branches, loops, etc.
44
+ *
45
+ * @template TControlFlowState - Type for state passed between onEnterControlFlow and onExitControlFlow
46
+ * @template TBranchState - Type for state passed between onEnterBranch and onExitBranch
47
+ */
48
+ export class ControlFlowTrackingVisitor extends BaseRuleVisitor {
49
+ isInControlFlow = false;
50
+ currentControlFlowType = null;
51
+ /**
52
+ * Handle visiting a control flow node with proper scope management
53
+ */
54
+ handleControlFlowNode(node, controlFlowType, visitChildren) {
55
+ const wasInControlFlow = this.isInControlFlow;
56
+ const previousControlFlowType = this.currentControlFlowType;
57
+ this.isInControlFlow = true;
58
+ this.currentControlFlowType = controlFlowType;
59
+ const stateToRestore = this.onEnterControlFlow(controlFlowType, wasInControlFlow);
60
+ visitChildren();
61
+ this.onExitControlFlow(controlFlowType, wasInControlFlow, stateToRestore);
62
+ this.isInControlFlow = wasInControlFlow;
63
+ this.currentControlFlowType = previousControlFlowType;
64
+ }
65
+ /**
66
+ * Handle visiting a branch node (like else, when) with proper scope management
67
+ */
68
+ startNewBranch(visitChildren) {
69
+ const stateToRestore = this.onEnterBranch();
70
+ visitChildren();
71
+ this.onExitBranch(stateToRestore);
72
+ }
73
+ visitERBIfNode(node) {
74
+ this.handleControlFlowNode(node, ControlFlowType.CONDITIONAL, () => super.visitERBIfNode(node));
75
+ }
76
+ visitERBUnlessNode(node) {
77
+ this.handleControlFlowNode(node, ControlFlowType.CONDITIONAL, () => super.visitERBUnlessNode(node));
78
+ }
79
+ visitERBCaseNode(node) {
80
+ this.handleControlFlowNode(node, ControlFlowType.CONDITIONAL, () => super.visitERBCaseNode(node));
81
+ }
82
+ visitERBCaseMatchNode(node) {
83
+ this.handleControlFlowNode(node, ControlFlowType.CONDITIONAL, () => super.visitERBCaseMatchNode(node));
84
+ }
85
+ visitERBWhileNode(node) {
86
+ this.handleControlFlowNode(node, ControlFlowType.LOOP, () => super.visitERBWhileNode(node));
87
+ }
88
+ visitERBForNode(node) {
89
+ this.handleControlFlowNode(node, ControlFlowType.LOOP, () => super.visitERBForNode(node));
90
+ }
91
+ visitERBUntilNode(node) {
92
+ this.handleControlFlowNode(node, ControlFlowType.LOOP, () => super.visitERBUntilNode(node));
93
+ }
94
+ visitERBBlockNode(node) {
95
+ this.handleControlFlowNode(node, ControlFlowType.CONDITIONAL, () => super.visitERBBlockNode(node));
96
+ }
97
+ visitERBElseNode(node) {
98
+ this.startNewBranch(() => super.visitERBElseNode(node));
99
+ }
100
+ visitERBWhenNode(node) {
101
+ this.startNewBranch(() => super.visitERBWhenNode(node));
102
+ }
103
+ }
35
104
  /**
36
105
  * Gets attributes from an HTMLOpenTagNode
37
106
  */
@@ -1 +1 @@
1
- {"version":3,"file":"rule-utils.js","sourceRoot":"","sources":["../../../src/rules/rule-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule-utils.js","sourceRoot":"","sources":["../../../src/rules/rule-utils.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,11 @@
1
1
  import { Visitor, Location } from "@herb-tools/core";
2
2
  import type { HTMLAttributeNode, HTMLAttributeValueNode, HTMLOpenTagNode, LexResult, Token, Node } from "@herb-tools/core";
3
+ import type * as Nodes from "@herb-tools/core";
3
4
  import type { LintOffense, LintSeverity, LintContext } from "../types.js";
5
+ export declare enum ControlFlowType {
6
+ CONDITIONAL = 0,
7
+ LOOP = 1
8
+ }
4
9
  /**
5
10
  * Base visitor class that provides common functionality for rule visitors
6
11
  */
@@ -18,6 +23,40 @@ export declare abstract class BaseRuleVisitor extends Visitor {
18
23
  */
19
24
  protected addOffense(message: string, location: Location, severity?: LintSeverity): void;
20
25
  }
26
+ /**
27
+ * Mixin that adds control flow tracking capabilities to rule visitors
28
+ * This allows rules to track state across different control flow structures
29
+ * like if/else branches, loops, etc.
30
+ *
31
+ * @template TControlFlowState - Type for state passed between onEnterControlFlow and onExitControlFlow
32
+ * @template TBranchState - Type for state passed between onEnterBranch and onExitBranch
33
+ */
34
+ export declare abstract class ControlFlowTrackingVisitor<TControlFlowState = any, TBranchState = any> extends BaseRuleVisitor {
35
+ protected isInControlFlow: boolean;
36
+ protected currentControlFlowType: ControlFlowType | null;
37
+ /**
38
+ * Handle visiting a control flow node with proper scope management
39
+ */
40
+ protected handleControlFlowNode(node: Node, controlFlowType: ControlFlowType, visitChildren: () => void): void;
41
+ /**
42
+ * Handle visiting a branch node (like else, when) with proper scope management
43
+ */
44
+ protected startNewBranch(visitChildren: () => void): void;
45
+ visitERBIfNode(node: Nodes.ERBIfNode): void;
46
+ visitERBUnlessNode(node: Nodes.ERBUnlessNode): void;
47
+ visitERBCaseNode(node: Nodes.ERBCaseNode): void;
48
+ visitERBCaseMatchNode(node: Nodes.ERBCaseMatchNode): void;
49
+ visitERBWhileNode(node: Nodes.ERBWhileNode): void;
50
+ visitERBForNode(node: Nodes.ERBForNode): void;
51
+ visitERBUntilNode(node: Nodes.ERBUntilNode): void;
52
+ visitERBBlockNode(node: Nodes.ERBBlockNode): void;
53
+ visitERBElseNode(node: Nodes.ERBElseNode): void;
54
+ visitERBWhenNode(node: Nodes.ERBWhenNode): void;
55
+ protected abstract onEnterControlFlow(controlFlowType: ControlFlowType, wasAlreadyInControlFlow: boolean): TControlFlowState;
56
+ protected abstract onExitControlFlow(controlFlowType: ControlFlowType, wasAlreadyInControlFlow: boolean, stateToRestore: TControlFlowState): void;
57
+ protected abstract onEnterBranch(): TBranchState;
58
+ protected abstract onExitBranch(stateToRestore: TBranchState): void;
59
+ }
21
60
  /**
22
61
  * Gets attributes from an HTMLOpenTagNode
23
62
  */
@@ -1,6 +1,11 @@
1
1
  import { Visitor, Location } from "@herb-tools/core";
2
2
  import type { HTMLAttributeNode, HTMLAttributeValueNode, HTMLOpenTagNode, LexResult, Token, Node } from "@herb-tools/core";
3
+ import type * as Nodes from "@herb-tools/core";
3
4
  import type { LintOffense, LintSeverity, LintContext } from "../types.js";
5
+ export declare enum ControlFlowType {
6
+ CONDITIONAL = 0,
7
+ LOOP = 1
8
+ }
4
9
  /**
5
10
  * Base visitor class that provides common functionality for rule visitors
6
11
  */
@@ -18,6 +23,40 @@ export declare abstract class BaseRuleVisitor extends Visitor {
18
23
  */
19
24
  protected addOffense(message: string, location: Location, severity?: LintSeverity): void;
20
25
  }
26
+ /**
27
+ * Mixin that adds control flow tracking capabilities to rule visitors
28
+ * This allows rules to track state across different control flow structures
29
+ * like if/else branches, loops, etc.
30
+ *
31
+ * @template TControlFlowState - Type for state passed between onEnterControlFlow and onExitControlFlow
32
+ * @template TBranchState - Type for state passed between onEnterBranch and onExitBranch
33
+ */
34
+ export declare abstract class ControlFlowTrackingVisitor<TControlFlowState = any, TBranchState = any> extends BaseRuleVisitor {
35
+ protected isInControlFlow: boolean;
36
+ protected currentControlFlowType: ControlFlowType | null;
37
+ /**
38
+ * Handle visiting a control flow node with proper scope management
39
+ */
40
+ protected handleControlFlowNode(node: Node, controlFlowType: ControlFlowType, visitChildren: () => void): void;
41
+ /**
42
+ * Handle visiting a branch node (like else, when) with proper scope management
43
+ */
44
+ protected startNewBranch(visitChildren: () => void): void;
45
+ visitERBIfNode(node: Nodes.ERBIfNode): void;
46
+ visitERBUnlessNode(node: Nodes.ERBUnlessNode): void;
47
+ visitERBCaseNode(node: Nodes.ERBCaseNode): void;
48
+ visitERBCaseMatchNode(node: Nodes.ERBCaseMatchNode): void;
49
+ visitERBWhileNode(node: Nodes.ERBWhileNode): void;
50
+ visitERBForNode(node: Nodes.ERBForNode): void;
51
+ visitERBUntilNode(node: Nodes.ERBUntilNode): void;
52
+ visitERBBlockNode(node: Nodes.ERBBlockNode): void;
53
+ visitERBElseNode(node: Nodes.ERBElseNode): void;
54
+ visitERBWhenNode(node: Nodes.ERBWhenNode): void;
55
+ protected abstract onEnterControlFlow(controlFlowType: ControlFlowType, wasAlreadyInControlFlow: boolean): TControlFlowState;
56
+ protected abstract onExitControlFlow(controlFlowType: ControlFlowType, wasAlreadyInControlFlow: boolean, stateToRestore: TControlFlowState): void;
57
+ protected abstract onEnterBranch(): TBranchState;
58
+ protected abstract onExitBranch(stateToRestore: TBranchState): void;
59
+ }
21
60
  /**
22
61
  * Gets attributes from an HTMLOpenTagNode
23
62
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herb-tools/linter",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "HTML+ERB linter for validating HTML structure and enforcing best practices",
5
5
  "license": "MIT",
6
6
  "homepage": "https://herb-tools.dev",
@@ -33,9 +33,10 @@
33
33
  }
34
34
  },
35
35
  "dependencies": {
36
- "@herb-tools/core": "0.6.0",
37
- "@herb-tools/highlighter": "0.6.0",
38
- "@herb-tools/node-wasm": "0.6.0",
36
+ "@herb-tools/core": "0.6.1",
37
+ "@herb-tools/highlighter": "0.6.1",
38
+ "@herb-tools/node-wasm": "0.6.1",
39
+ "@herb-tools/printer": "0.6.1",
39
40
  "glob": "^11.0.3"
40
41
  },
41
42
  "files": [