@rcrsr/rill 0.2.1 → 0.2.2
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.
|
@@ -4,22 +4,29 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { ValidationRule } from '../types.js';
|
|
6
6
|
/**
|
|
7
|
-
* Validates that
|
|
7
|
+
* Validates that variables captured in loop bodies aren't referenced in conditions.
|
|
8
8
|
*
|
|
9
9
|
* In while and do-while loops, $ serves as the accumulator across iterations.
|
|
10
|
-
* Variables captured inside the loop body exist only within that iteration
|
|
10
|
+
* Variables captured inside the loop body exist only within that iteration, so
|
|
11
|
+
* referencing them in the loop condition is a logic error - the condition will
|
|
12
|
+
* always see undefined (or the outer scope variable if one exists).
|
|
11
13
|
*
|
|
12
|
-
*
|
|
14
|
+
* Error pattern (captured variable in condition):
|
|
15
|
+
* 0 -> ($x < 5) @ { # $x is undefined in condition
|
|
16
|
+
* $ :> $x
|
|
17
|
+
* $x + 1
|
|
18
|
+
* }
|
|
19
|
+
*
|
|
20
|
+
* Correct pattern ($ as accumulator):
|
|
13
21
|
* 0 -> ($ < 5) @ { $ + 1 }
|
|
14
22
|
*
|
|
15
|
-
*
|
|
23
|
+
* Also correct (capture only used within iteration):
|
|
16
24
|
* 0 -> ($ < 5) @ {
|
|
17
|
-
* $ :> $x
|
|
25
|
+
* $ :> $x
|
|
26
|
+
* log($x) # $x only used in body, not condition
|
|
18
27
|
* $x + 1
|
|
19
28
|
* }
|
|
20
29
|
*
|
|
21
|
-
* This is stylistic - both work, but $ is clearer for accumulation.
|
|
22
|
-
*
|
|
23
30
|
* References:
|
|
24
31
|
* - docs/16_conventions.md:151-171
|
|
25
32
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loops.d.ts","sourceRoot":"","sources":["../../../src/check/rules/loops.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"loops.d.ts","sourceRoot":"","sources":["../../../src/check/rules/loops.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,aAAa,CAAC;AAmLrB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAyC9B,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe,EAAE,cA2B7B,CAAC;AAMF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,QAAQ,EAAE,cAmCtB,CAAC"}
|
|
@@ -7,50 +7,114 @@ import { extractContextLine } from './helpers.js';
|
|
|
7
7
|
// HELPER FUNCTIONS
|
|
8
8
|
// ============================================================
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
* Returns true if any captures are found in the body.
|
|
10
|
+
* Collect all variable captures (:> $name) in the given AST node.
|
|
12
11
|
*/
|
|
13
|
-
function
|
|
12
|
+
function collectCaptures(node, names) {
|
|
14
13
|
switch (node.type) {
|
|
15
14
|
case 'Capture':
|
|
16
|
-
|
|
15
|
+
names.push(`$${node.name}`);
|
|
16
|
+
return;
|
|
17
17
|
case 'Block':
|
|
18
|
-
|
|
18
|
+
node.statements.forEach((stmt) => collectCaptures(stmt, names));
|
|
19
|
+
return;
|
|
19
20
|
case 'Statement':
|
|
20
|
-
|
|
21
|
+
collectCaptures(node.expression, names);
|
|
22
|
+
return;
|
|
21
23
|
case 'AnnotatedStatement':
|
|
22
|
-
|
|
24
|
+
collectCaptures(node.statement, names);
|
|
25
|
+
return;
|
|
23
26
|
case 'PipeChain':
|
|
24
|
-
|
|
25
|
-
return true;
|
|
27
|
+
node.pipes.forEach((pipe) => collectCaptures(pipe, names));
|
|
26
28
|
if (node.terminator && node.terminator.type === 'Capture')
|
|
27
|
-
|
|
28
|
-
return
|
|
29
|
+
collectCaptures(node.terminator, names);
|
|
30
|
+
return;
|
|
29
31
|
case 'PostfixExpr':
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return
|
|
32
|
+
collectCaptures(node.primary, names);
|
|
33
|
+
node.methods.forEach((method) => collectCaptures(method, names));
|
|
34
|
+
return;
|
|
33
35
|
case 'BinaryExpr':
|
|
34
|
-
|
|
36
|
+
collectCaptures(node.left, names);
|
|
37
|
+
collectCaptures(node.right, names);
|
|
38
|
+
return;
|
|
35
39
|
case 'UnaryExpr':
|
|
36
|
-
|
|
40
|
+
collectCaptures(node.operand, names);
|
|
41
|
+
return;
|
|
37
42
|
case 'GroupedExpr':
|
|
38
|
-
|
|
43
|
+
collectCaptures(node.expression, names);
|
|
44
|
+
return;
|
|
39
45
|
case 'Conditional':
|
|
40
|
-
if (node.input
|
|
41
|
-
|
|
42
|
-
if (node.condition
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
if (node.input)
|
|
47
|
+
collectCaptures(node.input, names);
|
|
48
|
+
if (node.condition)
|
|
49
|
+
collectCaptures(node.condition, names);
|
|
50
|
+
collectCaptures(node.thenBranch, names);
|
|
51
|
+
if (node.elseBranch)
|
|
52
|
+
collectCaptures(node.elseBranch, names);
|
|
53
|
+
return;
|
|
54
|
+
case 'WhileLoop':
|
|
55
|
+
case 'DoWhileLoop':
|
|
56
|
+
collectCaptures(node.body, names);
|
|
57
|
+
return;
|
|
58
|
+
default:
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Collect all variable references ($name) in the given AST node.
|
|
64
|
+
*/
|
|
65
|
+
function collectVariableReferences(node, names) {
|
|
66
|
+
switch (node.type) {
|
|
67
|
+
case 'Variable':
|
|
68
|
+
// Add the variable name if it's not the pipe variable ($)
|
|
69
|
+
if (!node.isPipeVar && node.name) {
|
|
70
|
+
names.push(`$${node.name}`);
|
|
71
|
+
}
|
|
72
|
+
return;
|
|
73
|
+
case 'Block':
|
|
74
|
+
node.statements.forEach((stmt) => collectVariableReferences(stmt, names));
|
|
75
|
+
return;
|
|
76
|
+
case 'Statement':
|
|
77
|
+
collectVariableReferences(node.expression, names);
|
|
78
|
+
return;
|
|
79
|
+
case 'AnnotatedStatement':
|
|
80
|
+
collectVariableReferences(node.statement, names);
|
|
81
|
+
return;
|
|
82
|
+
case 'PipeChain':
|
|
83
|
+
collectVariableReferences(node.head, names);
|
|
84
|
+
node.pipes.forEach((pipe) => collectVariableReferences(pipe, names));
|
|
85
|
+
if (node.terminator)
|
|
86
|
+
collectVariableReferences(node.terminator, names);
|
|
87
|
+
return;
|
|
88
|
+
case 'PostfixExpr':
|
|
89
|
+
collectVariableReferences(node.primary, names);
|
|
90
|
+
node.methods.forEach((method) => collectVariableReferences(method, names));
|
|
91
|
+
return;
|
|
92
|
+
case 'BinaryExpr':
|
|
93
|
+
collectVariableReferences(node.left, names);
|
|
94
|
+
collectVariableReferences(node.right, names);
|
|
95
|
+
return;
|
|
96
|
+
case 'UnaryExpr':
|
|
97
|
+
collectVariableReferences(node.operand, names);
|
|
98
|
+
return;
|
|
99
|
+
case 'GroupedExpr':
|
|
100
|
+
collectVariableReferences(node.expression, names);
|
|
101
|
+
return;
|
|
102
|
+
case 'Conditional':
|
|
103
|
+
if (node.input)
|
|
104
|
+
collectVariableReferences(node.input, names);
|
|
105
|
+
if (node.condition)
|
|
106
|
+
collectVariableReferences(node.condition, names);
|
|
107
|
+
collectVariableReferences(node.thenBranch, names);
|
|
108
|
+
if (node.elseBranch)
|
|
109
|
+
collectVariableReferences(node.elseBranch, names);
|
|
110
|
+
return;
|
|
49
111
|
case 'WhileLoop':
|
|
50
112
|
case 'DoWhileLoop':
|
|
51
|
-
|
|
113
|
+
collectVariableReferences(node.condition, names);
|
|
114
|
+
collectVariableReferences(node.body, names);
|
|
115
|
+
return;
|
|
52
116
|
default:
|
|
53
|
-
return
|
|
117
|
+
return;
|
|
54
118
|
}
|
|
55
119
|
}
|
|
56
120
|
/**
|
|
@@ -81,22 +145,29 @@ function callsRetryFunction(node) {
|
|
|
81
145
|
// LOOP_ACCUMULATOR RULE
|
|
82
146
|
// ============================================================
|
|
83
147
|
/**
|
|
84
|
-
* Validates that
|
|
148
|
+
* Validates that variables captured in loop bodies aren't referenced in conditions.
|
|
85
149
|
*
|
|
86
150
|
* In while and do-while loops, $ serves as the accumulator across iterations.
|
|
87
|
-
* Variables captured inside the loop body exist only within that iteration
|
|
151
|
+
* Variables captured inside the loop body exist only within that iteration, so
|
|
152
|
+
* referencing them in the loop condition is a logic error - the condition will
|
|
153
|
+
* always see undefined (or the outer scope variable if one exists).
|
|
88
154
|
*
|
|
89
|
-
*
|
|
155
|
+
* Error pattern (captured variable in condition):
|
|
156
|
+
* 0 -> ($x < 5) @ { # $x is undefined in condition
|
|
157
|
+
* $ :> $x
|
|
158
|
+
* $x + 1
|
|
159
|
+
* }
|
|
160
|
+
*
|
|
161
|
+
* Correct pattern ($ as accumulator):
|
|
90
162
|
* 0 -> ($ < 5) @ { $ + 1 }
|
|
91
163
|
*
|
|
92
|
-
*
|
|
164
|
+
* Also correct (capture only used within iteration):
|
|
93
165
|
* 0 -> ($ < 5) @ {
|
|
94
|
-
* $ :> $x
|
|
166
|
+
* $ :> $x
|
|
167
|
+
* log($x) # $x only used in body, not condition
|
|
95
168
|
* $x + 1
|
|
96
169
|
* }
|
|
97
170
|
*
|
|
98
|
-
* This is stylistic - both work, but $ is clearer for accumulation.
|
|
99
|
-
*
|
|
100
171
|
* References:
|
|
101
172
|
* - docs/16_conventions.md:151-171
|
|
102
173
|
*/
|
|
@@ -107,14 +178,26 @@ export const LOOP_ACCUMULATOR = {
|
|
|
107
178
|
nodeTypes: ['WhileLoop', 'DoWhileLoop'],
|
|
108
179
|
validate(node, context) {
|
|
109
180
|
const loop = node;
|
|
110
|
-
//
|
|
111
|
-
|
|
181
|
+
// Collect all variable captures in loop body
|
|
182
|
+
const capturedNames = [];
|
|
183
|
+
collectCaptures(loop.body, capturedNames);
|
|
184
|
+
if (capturedNames.length === 0) {
|
|
185
|
+
return []; // No captures, no problem
|
|
186
|
+
}
|
|
187
|
+
// Collect all variable references in loop condition
|
|
188
|
+
const conditionRefs = [];
|
|
189
|
+
collectVariableReferences(loop.condition, conditionRefs);
|
|
190
|
+
// Find captures that are referenced in the condition
|
|
191
|
+
const capturedSet = new Set(capturedNames);
|
|
192
|
+
const problematicVars = conditionRefs.filter((ref) => capturedSet.has(ref));
|
|
193
|
+
if (problematicVars.length > 0) {
|
|
194
|
+
const vars = [...new Set(problematicVars)].join(', ');
|
|
112
195
|
return [
|
|
113
196
|
{
|
|
114
197
|
location: node.span.start,
|
|
115
198
|
severity: 'info',
|
|
116
199
|
code: 'LOOP_ACCUMULATOR',
|
|
117
|
-
message:
|
|
200
|
+
message: `${vars} captured in loop body but referenced in condition; loop body variables reset each iteration`,
|
|
118
201
|
context: extractContextLine(node.span.start.line, context.source),
|
|
119
202
|
fix: null, // Complex fix - requires refactoring loop body
|
|
120
203
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loops.js","sourceRoot":"","sources":["../../../src/check/rules/loops.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,+DAA+D;AAC/D,mBAAmB;AACnB,+DAA+D;AAE/D
|
|
1
|
+
{"version":3,"file":"loops.js","sourceRoot":"","sources":["../../../src/check/rules/loops.ts"],"names":[],"mappings":"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"}
|