@rcrsr/rill 0.1.0 → 0.2.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 +16 -8
- package/dist/check/config.d.ts +20 -0
- package/dist/check/config.d.ts.map +1 -0
- package/dist/check/config.js +151 -0
- package/dist/check/config.js.map +1 -0
- package/dist/check/fixer.d.ts +39 -0
- package/dist/check/fixer.d.ts.map +1 -0
- package/dist/check/fixer.js +119 -0
- package/dist/check/fixer.js.map +1 -0
- package/dist/check/index.d.ts +10 -0
- package/dist/check/index.d.ts.map +1 -0
- package/dist/check/index.js +21 -0
- package/dist/check/index.js.map +1 -0
- package/dist/check/rules/anti-patterns.d.ts +65 -0
- package/dist/check/rules/anti-patterns.d.ts.map +1 -0
- package/dist/check/rules/anti-patterns.js +427 -0
- package/dist/check/rules/anti-patterns.js.map +1 -0
- package/dist/check/rules/closures.d.ts +66 -0
- package/dist/check/rules/closures.d.ts.map +1 -0
- package/dist/check/rules/closures.js +373 -0
- package/dist/check/rules/closures.js.map +1 -0
- package/dist/check/rules/collections.d.ts +90 -0
- package/dist/check/rules/collections.d.ts.map +1 -0
- package/dist/check/rules/collections.js +373 -0
- package/dist/check/rules/collections.js.map +1 -0
- package/dist/check/rules/conditionals.d.ts +41 -0
- package/dist/check/rules/conditionals.d.ts.map +1 -0
- package/dist/check/rules/conditionals.js +106 -0
- package/dist/check/rules/conditionals.js.map +1 -0
- package/dist/check/rules/flow.d.ts +46 -0
- package/dist/check/rules/flow.d.ts.map +1 -0
- package/dist/check/rules/flow.js +206 -0
- package/dist/check/rules/flow.js.map +1 -0
- package/dist/check/rules/formatting.d.ts +133 -0
- package/dist/check/rules/formatting.d.ts.map +1 -0
- package/dist/check/rules/formatting.js +639 -0
- package/dist/check/rules/formatting.js.map +1 -0
- package/dist/check/rules/helpers.d.ts +26 -0
- package/dist/check/rules/helpers.d.ts.map +1 -0
- package/dist/check/rules/helpers.js +66 -0
- package/dist/check/rules/helpers.js.map +1 -0
- package/dist/check/rules/index.d.ts +21 -0
- package/dist/check/rules/index.d.ts.map +1 -0
- package/dist/check/rules/index.js +78 -0
- package/dist/check/rules/index.js.map +1 -0
- package/dist/check/rules/loops.d.ts +70 -0
- package/dist/check/rules/loops.d.ts.map +1 -0
- package/dist/check/rules/loops.js +227 -0
- package/dist/check/rules/loops.js.map +1 -0
- package/dist/check/rules/naming.d.ts +21 -0
- package/dist/check/rules/naming.d.ts.map +1 -0
- package/dist/check/rules/naming.js +167 -0
- package/dist/check/rules/naming.js.map +1 -0
- package/dist/check/rules/strings.d.ts +28 -0
- package/dist/check/rules/strings.d.ts.map +1 -0
- package/dist/check/rules/strings.js +80 -0
- package/dist/check/rules/strings.js.map +1 -0
- package/dist/check/rules/types.d.ts +41 -0
- package/dist/check/rules/types.d.ts.map +1 -0
- package/dist/check/rules/types.js +162 -0
- package/dist/check/rules/types.js.map +1 -0
- package/dist/check/types.d.ts +106 -0
- package/dist/check/types.d.ts.map +1 -0
- package/dist/check/types.js +6 -0
- package/dist/check/types.js.map +1 -0
- package/dist/check/validator.d.ts +18 -0
- package/dist/check/validator.d.ts.map +1 -0
- package/dist/check/validator.js +88 -0
- package/dist/check/validator.js.map +1 -0
- package/dist/check/visitor.d.ts +33 -0
- package/dist/check/visitor.d.ts.map +1 -0
- package/dist/check/visitor.js +243 -0
- package/dist/check/visitor.js.map +1 -0
- package/dist/cli-check.d.ts +43 -0
- package/dist/cli-check.d.ts.map +1 -0
- package/dist/cli-check.js +356 -0
- package/dist/cli-check.js.map +1 -0
- package/dist/cli-eval.d.ts +15 -0
- package/dist/cli-eval.d.ts.map +1 -0
- package/dist/cli-eval.js +120 -0
- package/dist/cli-eval.js.map +1 -0
- package/dist/cli-exec.d.ts +49 -0
- package/dist/cli-exec.d.ts.map +1 -0
- package/dist/cli-exec.js +191 -0
- package/dist/cli-exec.js.map +1 -0
- package/dist/cli-module-loader.d.ts +19 -0
- package/dist/cli-module-loader.d.ts.map +1 -0
- package/dist/cli-module-loader.js +83 -0
- package/dist/cli-module-loader.js.map +1 -0
- package/dist/cli-shared.d.ts +36 -0
- package/dist/cli-shared.d.ts.map +1 -0
- package/dist/cli-shared.js +101 -0
- package/dist/cli-shared.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -11
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lexer/readers.d.ts +1 -1
- package/dist/lexer/readers.d.ts.map +1 -1
- package/dist/lexer/readers.js +62 -32
- package/dist/lexer/readers.js.map +1 -1
- package/dist/lexer/tokenizer.d.ts.map +1 -1
- package/dist/lexer/tokenizer.js +5 -6
- package/dist/lexer/tokenizer.js.map +1 -1
- package/dist/parser/index.js +1 -1
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/parser-expr.js +23 -5
- package/dist/parser/parser-expr.js.map +1 -1
- package/dist/parser/parser-functions.d.ts +2 -2
- package/dist/parser/parser-functions.d.ts.map +1 -1
- package/dist/parser/parser-functions.js +2 -1
- package/dist/parser/parser-functions.js.map +1 -1
- package/dist/parser/parser-literals.js +2 -2
- package/dist/parser/parser-literals.js.map +1 -1
- package/dist/parser/parser-script.js +9 -7
- package/dist/parser/parser-script.js.map +1 -1
- package/dist/parser/parser-variables.js +4 -3
- package/dist/parser/parser-variables.js.map +1 -1
- package/dist/runtime/core/callable.d.ts +5 -6
- package/dist/runtime/core/callable.d.ts.map +1 -1
- package/dist/runtime/core/callable.js.map +1 -1
- package/dist/runtime/core/context.d.ts.map +1 -1
- package/dist/runtime/core/context.js +19 -32
- package/dist/runtime/core/context.js.map +1 -1
- package/dist/runtime/core/equals.js +1 -1
- package/dist/runtime/core/equals.js.map +1 -1
- package/dist/runtime/core/eval/evaluator.d.ts +78 -0
- package/dist/runtime/core/eval/evaluator.d.ts.map +1 -1
- package/dist/runtime/core/eval/evaluator.js +78 -0
- package/dist/runtime/core/eval/evaluator.js.map +1 -1
- package/dist/runtime/core/eval/mixins/closures.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/closures.js +9 -1
- package/dist/runtime/core/eval/mixins/closures.js.map +1 -1
- package/dist/runtime/core/eval/mixins/variables.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/variables.js +143 -2
- package/dist/runtime/core/eval/mixins/variables.js.map +1 -1
- package/dist/runtime/core/types.d.ts +15 -2
- package/dist/runtime/core/types.d.ts.map +1 -1
- package/dist/runtime/core/types.js.map +1 -1
- package/dist/runtime/ext/extensions.d.ts +51 -0
- package/dist/runtime/ext/extensions.d.ts.map +1 -0
- package/dist/runtime/ext/extensions.js +67 -0
- package/dist/runtime/ext/extensions.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/types.d.ts +8 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -4
- package/dist/types.js.map +1 -1
- package/docs/00_INDEX.md +1 -0
- package/docs/01_guide.md +3 -3
- package/docs/02_types.md +8 -10
- package/docs/03_variables.md +10 -0
- package/docs/04_operators.md +3 -3
- package/docs/05_control-flow.md +21 -0
- package/docs/07_collections.md +2 -0
- package/docs/10_parsing.md +9 -9
- package/docs/11_reference.md +1 -1
- package/docs/12_examples.md +36 -62
- package/docs/14_host-integration.md +116 -111
- package/docs/15_grammar.ebnf +1 -5
- package/docs/16_conventions.md +3 -4
- package/docs/17_cli-tools.md +184 -0
- package/docs/99_llm-reference.txt +46 -5
- package/package.json +13 -4
- package/dist/demo.d.ts +0 -6
- package/dist/demo.d.ts.map +0 -1
- package/dist/demo.js +0 -121
- package/dist/demo.js.map +0 -1
- package/dist/lexer.d.ts +0 -19
- package/dist/lexer.d.ts.map +0 -1
- package/dist/lexer.js +0 -344
- package/dist/lexer.js.map +0 -1
- package/dist/parser/arithmetic.d.ts +0 -16
- package/dist/parser/arithmetic.d.ts.map +0 -1
- package/dist/parser/arithmetic.js +0 -128
- package/dist/parser/arithmetic.js.map +0 -1
- package/dist/parser/boolean.d.ts +0 -15
- package/dist/parser/boolean.d.ts.map +0 -1
- package/dist/parser/boolean.js +0 -20
- package/dist/parser/boolean.js.map +0 -1
- package/dist/parser/control-flow.d.ts +0 -56
- package/dist/parser/control-flow.d.ts.map +0 -1
- package/dist/parser/control-flow.js +0 -167
- package/dist/parser/control-flow.js.map +0 -1
- package/dist/parser/expressions.d.ts +0 -23
- package/dist/parser/expressions.d.ts.map +0 -1
- package/dist/parser/expressions.js +0 -950
- package/dist/parser/expressions.js.map +0 -1
- package/dist/parser/extraction.d.ts +0 -48
- package/dist/parser/extraction.d.ts.map +0 -1
- package/dist/parser/extraction.js +0 -279
- package/dist/parser/extraction.js.map +0 -1
- package/dist/parser/functions.d.ts +0 -20
- package/dist/parser/functions.d.ts.map +0 -1
- package/dist/parser/functions.js +0 -96
- package/dist/parser/functions.js.map +0 -1
- package/dist/parser/literals.d.ts +0 -37
- package/dist/parser/literals.d.ts.map +0 -1
- package/dist/parser/literals.js +0 -373
- package/dist/parser/literals.js.map +0 -1
- package/dist/parser/script.d.ts +0 -14
- package/dist/parser/script.d.ts.map +0 -1
- package/dist/parser/script.js +0 -196
- package/dist/parser/script.js.map +0 -1
- package/dist/parser/variables.d.ts +0 -10
- package/dist/parser/variables.d.ts.map +0 -1
- package/dist/parser/variables.js +0 -215
- package/dist/parser/variables.js.map +0 -1
- package/dist/runtime/ast-equals.d.ts +0 -13
- package/dist/runtime/ast-equals.d.ts.map +0 -1
- package/dist/runtime/ast-equals.js +0 -447
- package/dist/runtime/ast-equals.js.map +0 -1
- package/dist/runtime/builtins.d.ts +0 -13
- package/dist/runtime/builtins.d.ts.map +0 -1
- package/dist/runtime/builtins.js +0 -180
- package/dist/runtime/builtins.js.map +0 -1
- package/dist/runtime/callable.d.ts +0 -88
- package/dist/runtime/callable.d.ts.map +0 -1
- package/dist/runtime/callable.js +0 -98
- package/dist/runtime/callable.js.map +0 -1
- package/dist/runtime/context.d.ts +0 -13
- package/dist/runtime/context.d.ts.map +0 -1
- package/dist/runtime/context.js +0 -73
- package/dist/runtime/context.js.map +0 -1
- package/dist/runtime/core/evaluate.d.ts +0 -42
- package/dist/runtime/core/evaluate.d.ts.map +0 -1
- package/dist/runtime/core/evaluate.debug.js +0 -1251
- package/dist/runtime/core/evaluate.js +0 -1913
- package/dist/runtime/core/evaluate.js.map +0 -1
- package/dist/runtime/evaluate.d.ts +0 -32
- package/dist/runtime/evaluate.d.ts.map +0 -1
- package/dist/runtime/evaluate.js +0 -1111
- package/dist/runtime/evaluate.js.map +0 -1
- package/dist/runtime/execute.d.ts +0 -26
- package/dist/runtime/execute.d.ts.map +0 -1
- package/dist/runtime/execute.js +0 -121
- package/dist/runtime/execute.js.map +0 -1
- package/dist/runtime/signals.d.ts +0 -19
- package/dist/runtime/signals.d.ts.map +0 -1
- package/dist/runtime/signals.js +0 -26
- package/dist/runtime/signals.js.map +0 -1
- package/dist/runtime/types.d.ts +0 -169
- package/dist/runtime/types.d.ts.map +0 -1
- package/dist/runtime/types.js +0 -50
- package/dist/runtime/types.js.map +0 -1
- package/dist/runtime/values.d.ts +0 -50
- package/dist/runtime/values.d.ts.map +0 -1
- package/dist/runtime/values.js +0 -209
- package/dist/runtime/values.js.map +0 -1
- package/dist/runtime.d.ts +0 -254
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -2014
- package/dist/runtime.js.map +0 -1
|
@@ -0,0 +1,639 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatting Rules
|
|
3
|
+
* Enforces style conventions from docs/16_conventions.md:465-662.
|
|
4
|
+
*/
|
|
5
|
+
import { extractContextLine, isBareReference } from './helpers.js';
|
|
6
|
+
// ============================================================
|
|
7
|
+
// SPACING_OPERATOR RULE
|
|
8
|
+
// ============================================================
|
|
9
|
+
/**
|
|
10
|
+
* Enforces space on both sides of operators.
|
|
11
|
+
* Operators like +, -, ->, :>, ==, etc. should have spaces on both sides.
|
|
12
|
+
*
|
|
13
|
+
* Detection:
|
|
14
|
+
* - Extract operator text from source using source spans
|
|
15
|
+
* - Check if space exists before/after operator
|
|
16
|
+
*
|
|
17
|
+
* References:
|
|
18
|
+
* - docs/16_conventions.md:467-482
|
|
19
|
+
*/
|
|
20
|
+
export const SPACING_OPERATOR = {
|
|
21
|
+
code: 'SPACING_OPERATOR',
|
|
22
|
+
category: 'formatting',
|
|
23
|
+
severity: 'info',
|
|
24
|
+
nodeTypes: ['BinaryExpr', 'PipeChain', 'Capture'],
|
|
25
|
+
validate(node, context) {
|
|
26
|
+
const diagnostics = [];
|
|
27
|
+
if (node.type === 'BinaryExpr') {
|
|
28
|
+
const binaryNode = node;
|
|
29
|
+
const operator = binaryNode.op;
|
|
30
|
+
// Check spacing around operator in source
|
|
31
|
+
const violation = checkOperatorSpacing(operator, binaryNode.span, context.source);
|
|
32
|
+
if (violation) {
|
|
33
|
+
diagnostics.push({
|
|
34
|
+
location: binaryNode.span.start,
|
|
35
|
+
severity: 'info',
|
|
36
|
+
code: 'SPACING_OPERATOR',
|
|
37
|
+
message: `Operator '${operator}' should have spaces on both sides`,
|
|
38
|
+
context: extractContextLine(binaryNode.span.start.line, context.source),
|
|
39
|
+
fix: null, // Complex to fix without AST reconstruction
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (node.type === 'PipeChain') {
|
|
44
|
+
const pipeNode = node;
|
|
45
|
+
// Check -> operators between pipes
|
|
46
|
+
const violation = checkPipeSpacing(pipeNode.span, context.source);
|
|
47
|
+
if (violation) {
|
|
48
|
+
diagnostics.push({
|
|
49
|
+
location: pipeNode.span.start,
|
|
50
|
+
severity: 'info',
|
|
51
|
+
code: 'SPACING_OPERATOR',
|
|
52
|
+
message: "Pipe operator '->' should have spaces on both sides",
|
|
53
|
+
context: extractContextLine(pipeNode.span.start.line, context.source),
|
|
54
|
+
fix: null,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (node.type === 'Capture') {
|
|
59
|
+
const captureNode = node;
|
|
60
|
+
// Check :> operator
|
|
61
|
+
const violation = checkCaptureSpacing(captureNode.span, context.source);
|
|
62
|
+
if (violation) {
|
|
63
|
+
diagnostics.push({
|
|
64
|
+
location: captureNode.span.start,
|
|
65
|
+
severity: 'info',
|
|
66
|
+
code: 'SPACING_OPERATOR',
|
|
67
|
+
message: "Capture operator ':>' should have spaces on both sides",
|
|
68
|
+
context: extractContextLine(captureNode.span.start.line, context.source),
|
|
69
|
+
fix: null,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return diagnostics;
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Check if operator has proper spacing in source.
|
|
78
|
+
*/
|
|
79
|
+
function checkOperatorSpacing(operator, span, source) {
|
|
80
|
+
const text = extractSpanText(span, source);
|
|
81
|
+
// Look for operator without spaces
|
|
82
|
+
const patterns = [
|
|
83
|
+
new RegExp(`\\S${escapeRegex(operator)}`), // No space before
|
|
84
|
+
new RegExp(`${escapeRegex(operator)}\\S`), // No space after
|
|
85
|
+
];
|
|
86
|
+
return patterns.some((pattern) => pattern.test(text));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Check pipe operator spacing.
|
|
90
|
+
*/
|
|
91
|
+
function checkPipeSpacing(span, source) {
|
|
92
|
+
const text = extractSpanText(span, source);
|
|
93
|
+
// Check for -> without spaces
|
|
94
|
+
return /\S->/.test(text) || /->[\S&&[^\s]]/.test(text);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Check capture operator spacing.
|
|
98
|
+
*/
|
|
99
|
+
function checkCaptureSpacing(span, source) {
|
|
100
|
+
const text = extractSpanText(span, source);
|
|
101
|
+
// Check for :> without spaces
|
|
102
|
+
return /\S:>/.test(text) || /:>\S/.test(text);
|
|
103
|
+
}
|
|
104
|
+
// ============================================================
|
|
105
|
+
// SPACING_BRACES RULE
|
|
106
|
+
// ============================================================
|
|
107
|
+
/**
|
|
108
|
+
* Enforces space after { and before } in blocks.
|
|
109
|
+
* Braces for blocks, closures, etc. should have internal spacing.
|
|
110
|
+
*
|
|
111
|
+
* Detection:
|
|
112
|
+
* - Extract brace content from source
|
|
113
|
+
* - Check if opening { has space after, closing } has space before
|
|
114
|
+
*
|
|
115
|
+
* References:
|
|
116
|
+
* - docs/16_conventions.md:497-508
|
|
117
|
+
*/
|
|
118
|
+
export const SPACING_BRACES = {
|
|
119
|
+
code: 'SPACING_BRACES',
|
|
120
|
+
category: 'formatting',
|
|
121
|
+
severity: 'info',
|
|
122
|
+
nodeTypes: ['Block', 'Closure'],
|
|
123
|
+
validate(node, context) {
|
|
124
|
+
const diagnostics = [];
|
|
125
|
+
const span = node.span;
|
|
126
|
+
// Extract source text for the node
|
|
127
|
+
const text = extractSpanText(span, context.source);
|
|
128
|
+
// Check for opening brace without space after
|
|
129
|
+
if (/\{[^\s]/.test(text) && !text.includes('{\n')) {
|
|
130
|
+
diagnostics.push({
|
|
131
|
+
location: span.start,
|
|
132
|
+
severity: 'info',
|
|
133
|
+
code: 'SPACING_BRACES',
|
|
134
|
+
message: 'Space required after opening brace {',
|
|
135
|
+
context: extractContextLine(span.start.line, context.source),
|
|
136
|
+
fix: null,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
// Check for closing brace without space before
|
|
140
|
+
if (/[^\s]\}/.test(text) && !text.includes('\n}')) {
|
|
141
|
+
diagnostics.push({
|
|
142
|
+
location: span.start,
|
|
143
|
+
severity: 'info',
|
|
144
|
+
code: 'SPACING_BRACES',
|
|
145
|
+
message: 'Space required before closing brace }',
|
|
146
|
+
context: extractContextLine(span.start.line, context.source),
|
|
147
|
+
fix: null,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
return diagnostics;
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
// ============================================================
|
|
154
|
+
// SPACING_BRACKETS RULE
|
|
155
|
+
// ============================================================
|
|
156
|
+
/**
|
|
157
|
+
* Enforces no inner spaces for indexing brackets.
|
|
158
|
+
* Array/dict indexing should use $list[0] not $list[ 0 ].
|
|
159
|
+
*
|
|
160
|
+
* Detection:
|
|
161
|
+
* - PostfixExpr nodes with index access
|
|
162
|
+
* - Check for spaces inside brackets
|
|
163
|
+
*
|
|
164
|
+
* References:
|
|
165
|
+
* - docs/16_conventions.md:526-535
|
|
166
|
+
*/
|
|
167
|
+
export const SPACING_BRACKETS = {
|
|
168
|
+
code: 'SPACING_BRACKETS',
|
|
169
|
+
category: 'formatting',
|
|
170
|
+
severity: 'info',
|
|
171
|
+
nodeTypes: ['PostfixExpr'],
|
|
172
|
+
validate(node, context) {
|
|
173
|
+
const diagnostics = [];
|
|
174
|
+
const postfixNode = node;
|
|
175
|
+
// Only process if primary is a Variable (contains accessChain)
|
|
176
|
+
if (postfixNode.primary.type !== 'Variable') {
|
|
177
|
+
return diagnostics;
|
|
178
|
+
}
|
|
179
|
+
const variableNode = postfixNode.primary;
|
|
180
|
+
// Check each BracketAccess in the accessChain
|
|
181
|
+
for (const access of variableNode.accessChain) {
|
|
182
|
+
// Skip non-bracket accesses
|
|
183
|
+
if (!('accessKind' in access) || access.accessKind !== 'bracket') {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
const bracketAccess = access;
|
|
187
|
+
// EC-3: Skip if span is missing (graceful handling)
|
|
188
|
+
if (!bracketAccess.span) {
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
// EC-4: Skip if span coordinates are invalid (graceful handling)
|
|
192
|
+
if (!bracketAccess.span.start ||
|
|
193
|
+
!bracketAccess.span.end ||
|
|
194
|
+
bracketAccess.span.start.line < 1 ||
|
|
195
|
+
bracketAccess.span.end.line < 1 ||
|
|
196
|
+
bracketAccess.span.start.column < 1 ||
|
|
197
|
+
bracketAccess.span.end.column < 1) {
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
// Extract text from bracket span
|
|
201
|
+
const text = extractSpanText(bracketAccess.span, context.source);
|
|
202
|
+
// Check for space after opening bracket: /\[\s/
|
|
203
|
+
// Check for space before closing bracket: /\s\]/
|
|
204
|
+
const hasSpaceAfterOpen = /\[\s/.test(text);
|
|
205
|
+
const hasSpaceBeforeClose = /\s\]/.test(text);
|
|
206
|
+
if (hasSpaceAfterOpen || hasSpaceBeforeClose) {
|
|
207
|
+
// Extract content between brackets for error message
|
|
208
|
+
const content = text.substring(1, text.length - 1).trim();
|
|
209
|
+
diagnostics.push({
|
|
210
|
+
location: bracketAccess.span.start,
|
|
211
|
+
severity: 'info',
|
|
212
|
+
code: 'SPACING_BRACKETS',
|
|
213
|
+
message: `No spaces inside brackets: remove spaces around ${content}`,
|
|
214
|
+
context: extractContextLine(bracketAccess.span.start.line, context.source),
|
|
215
|
+
fix: null,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return diagnostics;
|
|
220
|
+
},
|
|
221
|
+
fix(node, context) {
|
|
222
|
+
const postfixNode = node;
|
|
223
|
+
// Only process if primary is a Variable (contains accessChain)
|
|
224
|
+
if (postfixNode.primary.type !== 'Variable') {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
const variableNode = postfixNode.primary;
|
|
228
|
+
// Find the first BracketAccess with spacing violation
|
|
229
|
+
for (const access of variableNode.accessChain) {
|
|
230
|
+
// Skip non-bracket accesses
|
|
231
|
+
if (!('accessKind' in access) || access.accessKind !== 'bracket') {
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
const bracketAccess = access;
|
|
235
|
+
// Skip if span is missing or invalid
|
|
236
|
+
if (!bracketAccess.span ||
|
|
237
|
+
!bracketAccess.span.start ||
|
|
238
|
+
!bracketAccess.span.end ||
|
|
239
|
+
bracketAccess.span.start.line < 1 ||
|
|
240
|
+
bracketAccess.span.end.line < 1 ||
|
|
241
|
+
bracketAccess.span.start.column < 1 ||
|
|
242
|
+
bracketAccess.span.end.column < 1) {
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
// Extract text from bracket span
|
|
246
|
+
const text = extractSpanText(bracketAccess.span, context.source);
|
|
247
|
+
// Check for spacing violations
|
|
248
|
+
const hasSpaceAfterOpen = /\[\s/.test(text);
|
|
249
|
+
const hasSpaceBeforeClose = /\s\]/.test(text);
|
|
250
|
+
if (hasSpaceAfterOpen || hasSpaceBeforeClose) {
|
|
251
|
+
// Build replacement text by removing inner spaces
|
|
252
|
+
// Replace [ followed by whitespace with [
|
|
253
|
+
// Replace whitespace followed by ] with ]
|
|
254
|
+
const replacement = text.replace(/\[\s+/g, '[').replace(/\s+\]/g, ']');
|
|
255
|
+
return {
|
|
256
|
+
description: 'Remove spaces inside brackets',
|
|
257
|
+
applicable: true,
|
|
258
|
+
range: bracketAccess.span,
|
|
259
|
+
replacement,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// No fixable violation found
|
|
264
|
+
return null;
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
// ============================================================
|
|
268
|
+
// SPACING_CLOSURE RULE
|
|
269
|
+
// ============================================================
|
|
270
|
+
/**
|
|
271
|
+
* Enforces no space before pipe, space after in closures.
|
|
272
|
+
* Closure parameters: |x| not | x |.
|
|
273
|
+
*
|
|
274
|
+
* Detection:
|
|
275
|
+
* - Extract closure parameter section from source
|
|
276
|
+
* - Check spacing around pipes
|
|
277
|
+
*
|
|
278
|
+
* References:
|
|
279
|
+
* - docs/16_conventions.md:549-560
|
|
280
|
+
*/
|
|
281
|
+
export const SPACING_CLOSURE = {
|
|
282
|
+
code: 'SPACING_CLOSURE',
|
|
283
|
+
category: 'formatting',
|
|
284
|
+
severity: 'info',
|
|
285
|
+
nodeTypes: ['Closure'],
|
|
286
|
+
validate(node, context) {
|
|
287
|
+
const diagnostics = [];
|
|
288
|
+
const closureNode = node;
|
|
289
|
+
const text = extractSpanText(closureNode.span, context.source);
|
|
290
|
+
// Check for space before opening pipe
|
|
291
|
+
if (/\s\|/.test(text.substring(0, text.indexOf('|') + 1))) {
|
|
292
|
+
diagnostics.push({
|
|
293
|
+
location: closureNode.span.start,
|
|
294
|
+
severity: 'info',
|
|
295
|
+
code: 'SPACING_CLOSURE',
|
|
296
|
+
message: 'No space before opening pipe in closure parameters',
|
|
297
|
+
context: extractContextLine(closureNode.span.start.line, context.source),
|
|
298
|
+
fix: null,
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
// Check for missing space after params (only if params exist)
|
|
302
|
+
if (closureNode.params.length > 0) {
|
|
303
|
+
// Look for pattern |params|( or |params|{ without space
|
|
304
|
+
const afterPipeIdx = text.lastIndexOf('|', text.indexOf('{') || text.indexOf('('));
|
|
305
|
+
if (afterPipeIdx !== -1) {
|
|
306
|
+
const afterPipe = text.substring(afterPipeIdx + 1, afterPipeIdx + 2);
|
|
307
|
+
if (afterPipe &&
|
|
308
|
+
/[^\s]/.test(afterPipe) &&
|
|
309
|
+
afterPipe !== '{' &&
|
|
310
|
+
afterPipe !== '(') {
|
|
311
|
+
// This is complex - skip for now as it requires better parsing
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return diagnostics;
|
|
316
|
+
},
|
|
317
|
+
};
|
|
318
|
+
// ============================================================
|
|
319
|
+
// INDENT_CONTINUATION RULE
|
|
320
|
+
// ============================================================
|
|
321
|
+
/**
|
|
322
|
+
* Enforces 2-space indent for continued lines.
|
|
323
|
+
* Pipe chains should indent continuation lines by 2 spaces.
|
|
324
|
+
*
|
|
325
|
+
* Detection:
|
|
326
|
+
* - Multi-line pipe chains
|
|
327
|
+
* - Check indentation of continuation lines
|
|
328
|
+
*
|
|
329
|
+
* References:
|
|
330
|
+
* - docs/16_conventions.md:636-662
|
|
331
|
+
*/
|
|
332
|
+
export const INDENT_CONTINUATION = {
|
|
333
|
+
code: 'INDENT_CONTINUATION',
|
|
334
|
+
category: 'formatting',
|
|
335
|
+
severity: 'info',
|
|
336
|
+
nodeTypes: ['PipeChain'],
|
|
337
|
+
validate(node, context) {
|
|
338
|
+
const diagnostics = [];
|
|
339
|
+
const pipeNode = node;
|
|
340
|
+
// EC-5: Single-line chain - Return []
|
|
341
|
+
if (pipeNode.span.start.line === pipeNode.span.end.line) {
|
|
342
|
+
return [];
|
|
343
|
+
}
|
|
344
|
+
// Extract full text and check continuation indentation
|
|
345
|
+
const text = extractSpanText(pipeNode.span, context.source);
|
|
346
|
+
const lines = text.split('\n');
|
|
347
|
+
// KNOWN LIMITATION: This rule validates multi-line pipe chains where the pipe
|
|
348
|
+
// operator (`->`) and its target appear on the same line. The parser requires
|
|
349
|
+
// pipe targets to be on the same line as the `->` operator, so patterns like
|
|
350
|
+
// `value ->\n .method()` are invalid. See tests/language/statement-boundaries.test.ts:211-215
|
|
351
|
+
// for authoritative language behavior.
|
|
352
|
+
if (lines.length > 1) {
|
|
353
|
+
// Check each continuation line (skip first line which establishes baseline)
|
|
354
|
+
for (let i = 1; i < lines.length; i++) {
|
|
355
|
+
const line = lines[i];
|
|
356
|
+
// EC-6: Empty continuation line - Skip line
|
|
357
|
+
if (!line)
|
|
358
|
+
continue;
|
|
359
|
+
const indent = line.match(/^(\s*)/)?.[1] || '';
|
|
360
|
+
// Continuation = line starting with -> (after whitespace)
|
|
361
|
+
// Should have at least 2 spaces for continuation
|
|
362
|
+
if (line.trim().startsWith('->') && indent.length < 2) {
|
|
363
|
+
diagnostics.push({
|
|
364
|
+
location: {
|
|
365
|
+
line: pipeNode.span.start.line + i,
|
|
366
|
+
column: 1,
|
|
367
|
+
offset: 0,
|
|
368
|
+
},
|
|
369
|
+
severity: 'info',
|
|
370
|
+
code: 'INDENT_CONTINUATION',
|
|
371
|
+
message: 'Continuation lines should be indented by 2 spaces',
|
|
372
|
+
context: line.trim(),
|
|
373
|
+
fix: null,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return diagnostics;
|
|
379
|
+
},
|
|
380
|
+
};
|
|
381
|
+
// ============================================================
|
|
382
|
+
// IMPLICIT_DOLLAR_METHOD RULE
|
|
383
|
+
// ============================================================
|
|
384
|
+
/**
|
|
385
|
+
* Detect explicit $.method() patterns replaceable with .method.
|
|
386
|
+
*
|
|
387
|
+
* Flags method calls where the receiver is a bare $ (pipe variable).
|
|
388
|
+
* The implicit form .method is preferred when $ represents the current
|
|
389
|
+
* piped value (e.g., in blocks, closures, conditionals).
|
|
390
|
+
*
|
|
391
|
+
* Detection:
|
|
392
|
+
* - MethodCallNode with non-null receiverSpan
|
|
393
|
+
* - Receiver is bare $ (zero-width or single-char span)
|
|
394
|
+
* - Method call is first in chain (receiverSpan.end.offset <= 1)
|
|
395
|
+
*
|
|
396
|
+
* Note: Cannot use isBareReference() helper here because MethodCallNode.receiverSpan
|
|
397
|
+
* is a SourceSpan (position range), not an ExpressionNode. The helper requires
|
|
398
|
+
* an AST node to traverse. Instead, we detect bare $ by checking:
|
|
399
|
+
* 1. receiverSpan is zero-width (start == end) or single-char
|
|
400
|
+
* 2. Character at offset is '$'
|
|
401
|
+
* 3. Next character is '.' (not a variable name continuation)
|
|
402
|
+
*
|
|
403
|
+
* Examples:
|
|
404
|
+
* - $.upper() -> .upper
|
|
405
|
+
* - $.len -> .len
|
|
406
|
+
* - $.trim().upper() -> First method flagged, second is chained (not bare $)
|
|
407
|
+
*
|
|
408
|
+
* Not flagged:
|
|
409
|
+
* - .upper (receiverSpan is null)
|
|
410
|
+
* - $var.method() (receiverSpan is not bare $)
|
|
411
|
+
* - $.trim().upper() second method (receiverSpan covers $.trim())
|
|
412
|
+
*
|
|
413
|
+
* References:
|
|
414
|
+
* - docs/16_conventions.md:587-598
|
|
415
|
+
*/
|
|
416
|
+
export const IMPLICIT_DOLLAR_METHOD = {
|
|
417
|
+
code: 'IMPLICIT_DOLLAR_METHOD',
|
|
418
|
+
category: 'formatting',
|
|
419
|
+
severity: 'info',
|
|
420
|
+
nodeTypes: ['MethodCall'],
|
|
421
|
+
validate(node, context) {
|
|
422
|
+
const methodNode = node;
|
|
423
|
+
// EC-7: No receiverSpan means implicit receiver (already correct form)
|
|
424
|
+
if (methodNode.receiverSpan === null) {
|
|
425
|
+
return [];
|
|
426
|
+
}
|
|
427
|
+
// Detect bare $ receiver by analyzing the receiverSpan
|
|
428
|
+
// For bare $, the span is either:
|
|
429
|
+
// 1. Zero-width (start.offset == end.offset) at the $ character
|
|
430
|
+
// 2. Single-char span covering just $
|
|
431
|
+
const receiverSpan = methodNode.receiverSpan;
|
|
432
|
+
const spanLength = receiverSpan.end.offset - receiverSpan.start.offset;
|
|
433
|
+
// EC-8: Receiver is not bare $ if span is longer than 1 character
|
|
434
|
+
// This filters out chains like $.trim().upper() where second method
|
|
435
|
+
// has receiverSpan covering "$.trim()."
|
|
436
|
+
if (spanLength > 1) {
|
|
437
|
+
return [];
|
|
438
|
+
}
|
|
439
|
+
// Check that the character at the span is '$' and not part of a variable name
|
|
440
|
+
const offset = receiverSpan.start.offset;
|
|
441
|
+
const charAtOffset = context.source[offset];
|
|
442
|
+
const nextChar = context.source[offset + 1];
|
|
443
|
+
// Must be '$' followed by '.' (method call)
|
|
444
|
+
// This distinguishes $.method() from $var.method()
|
|
445
|
+
if (charAtOffset !== '$' || nextChar !== '.') {
|
|
446
|
+
return [];
|
|
447
|
+
}
|
|
448
|
+
// Generate diagnostic for bare $ receiver
|
|
449
|
+
const suggestedCode = methodNode.args.length === 0
|
|
450
|
+
? `.${methodNode.name}`
|
|
451
|
+
: `.${methodNode.name}()`;
|
|
452
|
+
return [
|
|
453
|
+
{
|
|
454
|
+
code: 'IMPLICIT_DOLLAR_METHOD',
|
|
455
|
+
message: `Prefer implicit '${suggestedCode}' over explicit '$.${methodNode.name}()'`,
|
|
456
|
+
severity: 'info',
|
|
457
|
+
location: {
|
|
458
|
+
line: methodNode.span.start.line,
|
|
459
|
+
column: methodNode.span.start.column,
|
|
460
|
+
offset: methodNode.span.start.offset,
|
|
461
|
+
},
|
|
462
|
+
context: extractContextLine(methodNode.span.start.line, context.source),
|
|
463
|
+
fix: null,
|
|
464
|
+
},
|
|
465
|
+
];
|
|
466
|
+
},
|
|
467
|
+
};
|
|
468
|
+
// ============================================================
|
|
469
|
+
// IMPLICIT_DOLLAR_FUNCTION RULE
|
|
470
|
+
// ============================================================
|
|
471
|
+
/**
|
|
472
|
+
* Prefer foo over foo($) for global function calls.
|
|
473
|
+
* When single argument is bare $, prefer implicit form.
|
|
474
|
+
*
|
|
475
|
+
* Detection:
|
|
476
|
+
* - HostCall with single argument that is bare $
|
|
477
|
+
*
|
|
478
|
+
* References:
|
|
479
|
+
* - docs/16_conventions.md:599-607
|
|
480
|
+
*/
|
|
481
|
+
export const IMPLICIT_DOLLAR_FUNCTION = {
|
|
482
|
+
code: 'IMPLICIT_DOLLAR_FUNCTION',
|
|
483
|
+
category: 'formatting',
|
|
484
|
+
severity: 'info',
|
|
485
|
+
nodeTypes: ['HostCall'],
|
|
486
|
+
validate(node, context) {
|
|
487
|
+
const hostCallNode = node;
|
|
488
|
+
// EC-9: Zero args - Return []
|
|
489
|
+
if (hostCallNode.args.length === 0) {
|
|
490
|
+
return [];
|
|
491
|
+
}
|
|
492
|
+
// EC-10: Multiple args - Return []
|
|
493
|
+
if (hostCallNode.args.length > 1) {
|
|
494
|
+
return [];
|
|
495
|
+
}
|
|
496
|
+
// EC-11: Single arg not bare $ - Return []
|
|
497
|
+
const singleArg = hostCallNode.args[0];
|
|
498
|
+
if (!isBareReference(singleArg)) {
|
|
499
|
+
return [];
|
|
500
|
+
}
|
|
501
|
+
// Generate diagnostic for bare $ argument
|
|
502
|
+
return [
|
|
503
|
+
{
|
|
504
|
+
code: 'IMPLICIT_DOLLAR_FUNCTION',
|
|
505
|
+
message: `Prefer pipe syntax '-> ${hostCallNode.name}' over explicit '${hostCallNode.name}($)'`,
|
|
506
|
+
severity: 'info',
|
|
507
|
+
location: {
|
|
508
|
+
line: hostCallNode.span.start.line,
|
|
509
|
+
column: hostCallNode.span.start.column,
|
|
510
|
+
offset: hostCallNode.span.start.offset,
|
|
511
|
+
},
|
|
512
|
+
context: extractContextLine(hostCallNode.span.start.line, context.source),
|
|
513
|
+
fix: null,
|
|
514
|
+
},
|
|
515
|
+
];
|
|
516
|
+
},
|
|
517
|
+
};
|
|
518
|
+
// ============================================================
|
|
519
|
+
// IMPLICIT_DOLLAR_CLOSURE RULE
|
|
520
|
+
// ============================================================
|
|
521
|
+
/**
|
|
522
|
+
* Prefer $fn over $fn($) for closure invocation.
|
|
523
|
+
* When single argument is bare $, prefer implicit form.
|
|
524
|
+
*
|
|
525
|
+
* Detection:
|
|
526
|
+
* - ClosureCall with single argument that is bare $
|
|
527
|
+
*
|
|
528
|
+
* References:
|
|
529
|
+
* - docs/16_conventions.md:608-615
|
|
530
|
+
*/
|
|
531
|
+
export const IMPLICIT_DOLLAR_CLOSURE = {
|
|
532
|
+
code: 'IMPLICIT_DOLLAR_CLOSURE',
|
|
533
|
+
category: 'formatting',
|
|
534
|
+
severity: 'info',
|
|
535
|
+
nodeTypes: ['ClosureCall'],
|
|
536
|
+
validate(node, context) {
|
|
537
|
+
const closureCallNode = node;
|
|
538
|
+
// EC-12: Zero args - Return []
|
|
539
|
+
if (closureCallNode.args.length === 0) {
|
|
540
|
+
return [];
|
|
541
|
+
}
|
|
542
|
+
// EC-13: Multiple args - Return []
|
|
543
|
+
if (closureCallNode.args.length > 1) {
|
|
544
|
+
return [];
|
|
545
|
+
}
|
|
546
|
+
// EC-14: Single arg not bare $ - Return []
|
|
547
|
+
const singleArg = closureCallNode.args[0];
|
|
548
|
+
if (!isBareReference(singleArg)) {
|
|
549
|
+
return [];
|
|
550
|
+
}
|
|
551
|
+
// Build closure name with access chain for display
|
|
552
|
+
const closureName = closureCallNode.accessChain.length > 0
|
|
553
|
+
? `$${closureCallNode.name}.${closureCallNode.accessChain.join('.')}`
|
|
554
|
+
: `$${closureCallNode.name}`;
|
|
555
|
+
// Generate diagnostic for bare $ argument
|
|
556
|
+
return [
|
|
557
|
+
{
|
|
558
|
+
code: 'IMPLICIT_DOLLAR_CLOSURE',
|
|
559
|
+
message: `Prefer pipe syntax '-> ${closureName}' over explicit '${closureName}($)'`,
|
|
560
|
+
severity: 'info',
|
|
561
|
+
location: {
|
|
562
|
+
line: closureCallNode.span.start.line,
|
|
563
|
+
column: closureCallNode.span.start.column,
|
|
564
|
+
offset: closureCallNode.span.start.offset,
|
|
565
|
+
},
|
|
566
|
+
context: extractContextLine(closureCallNode.span.start.line, context.source),
|
|
567
|
+
fix: null,
|
|
568
|
+
},
|
|
569
|
+
];
|
|
570
|
+
},
|
|
571
|
+
};
|
|
572
|
+
// ============================================================
|
|
573
|
+
// THROWAWAY_CAPTURE RULE
|
|
574
|
+
// ============================================================
|
|
575
|
+
/**
|
|
576
|
+
* Warns on capture-only-to-continue patterns.
|
|
577
|
+
* Capturing a value just to use it immediately in the next line is unnecessary.
|
|
578
|
+
*
|
|
579
|
+
* Detection:
|
|
580
|
+
* - Capture node followed by immediate use of that variable only
|
|
581
|
+
* - Variable not referenced later in the script
|
|
582
|
+
*
|
|
583
|
+
* References:
|
|
584
|
+
* - docs/16_conventions.md:617-634
|
|
585
|
+
*/
|
|
586
|
+
export const THROWAWAY_CAPTURE = {
|
|
587
|
+
code: 'THROWAWAY_CAPTURE',
|
|
588
|
+
category: 'formatting',
|
|
589
|
+
severity: 'info',
|
|
590
|
+
nodeTypes: ['Capture'],
|
|
591
|
+
validate(_node, _context) {
|
|
592
|
+
// [DEBT] Stubbed - Requires full script analysis across statement boundaries
|
|
593
|
+
// Must track: 1) All captures 2) All variable references 3) Single-use detection
|
|
594
|
+
return [];
|
|
595
|
+
},
|
|
596
|
+
};
|
|
597
|
+
// ============================================================
|
|
598
|
+
// HELPER FUNCTIONS
|
|
599
|
+
// ============================================================
|
|
600
|
+
/**
|
|
601
|
+
* Extract text from source using span coordinates.
|
|
602
|
+
*/
|
|
603
|
+
function extractSpanText(span, source) {
|
|
604
|
+
const lines = source.split('\n');
|
|
605
|
+
if (span.start.line === span.end.line) {
|
|
606
|
+
// Single line
|
|
607
|
+
const line = lines[span.start.line - 1];
|
|
608
|
+
if (!line)
|
|
609
|
+
return '';
|
|
610
|
+
return line.substring(span.start.column - 1, span.end.column - 1);
|
|
611
|
+
}
|
|
612
|
+
// Multi-line
|
|
613
|
+
const result = [];
|
|
614
|
+
for (let i = span.start.line - 1; i < span.end.line; i++) {
|
|
615
|
+
const line = lines[i];
|
|
616
|
+
if (!line)
|
|
617
|
+
continue;
|
|
618
|
+
if (i === span.start.line - 1) {
|
|
619
|
+
// First line: from start column to end
|
|
620
|
+
result.push(line.substring(span.start.column - 1));
|
|
621
|
+
}
|
|
622
|
+
else if (i === span.end.line - 1) {
|
|
623
|
+
// Last line: from start to end column
|
|
624
|
+
result.push(line.substring(0, span.end.column - 1));
|
|
625
|
+
}
|
|
626
|
+
else {
|
|
627
|
+
// Middle lines: full line
|
|
628
|
+
result.push(line);
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
return result.join('\n');
|
|
632
|
+
}
|
|
633
|
+
/**
|
|
634
|
+
* Escape special regex characters.
|
|
635
|
+
*/
|
|
636
|
+
function escapeRegex(str) {
|
|
637
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
638
|
+
}
|
|
639
|
+
//# sourceMappingURL=formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../../src/check/rules/formatting.ts"],"names":[],"mappings":"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"}
|