@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,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Script Validator
|
|
3
|
+
* Orchestrates validation by traversing AST and invoking enabled rules.
|
|
4
|
+
*/
|
|
5
|
+
import { visitNode } from './visitor.js';
|
|
6
|
+
import { VALIDATION_RULES } from './rules/index.js';
|
|
7
|
+
// ============================================================
|
|
8
|
+
// VALIDATION ORCHESTRATOR
|
|
9
|
+
// ============================================================
|
|
10
|
+
/**
|
|
11
|
+
* Validate script AST against all enabled rules.
|
|
12
|
+
* Traverses AST using visitor pattern, invoking enabled rules for matching nodes.
|
|
13
|
+
* Returns diagnostics sorted by line number, then column.
|
|
14
|
+
*
|
|
15
|
+
* @param ast - Parsed script AST to validate
|
|
16
|
+
* @param source - Original source text for context extraction
|
|
17
|
+
* @param config - Configuration determining which rules are active
|
|
18
|
+
* @returns Array of diagnostics sorted by location
|
|
19
|
+
*/
|
|
20
|
+
export function validateScript(ast, source, config) {
|
|
21
|
+
// Create validation context
|
|
22
|
+
const context = {
|
|
23
|
+
source,
|
|
24
|
+
ast,
|
|
25
|
+
config,
|
|
26
|
+
diagnostics: [],
|
|
27
|
+
variables: new Map(),
|
|
28
|
+
};
|
|
29
|
+
// Create visitor that invokes enabled rules
|
|
30
|
+
const visitor = {
|
|
31
|
+
enter(node, ctx) {
|
|
32
|
+
// For each enabled rule that applies to this node type
|
|
33
|
+
for (const rule of VALIDATION_RULES) {
|
|
34
|
+
// Skip if rule not enabled
|
|
35
|
+
if (!isRuleEnabled(rule.code, ctx.config)) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
// Skip if rule doesn't apply to this node type
|
|
39
|
+
if (!rule.nodeTypes.includes(node.type)) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
// Invoke rule validation and accumulate diagnostics
|
|
43
|
+
const ruleDiagnostics = rule.validate(node, ctx);
|
|
44
|
+
ctx.diagnostics.push(...ruleDiagnostics);
|
|
45
|
+
}
|
|
46
|
+
// Track variable captures AFTER rules check (for reassignment detection)
|
|
47
|
+
if (node.type === 'Capture') {
|
|
48
|
+
const captureNode = node;
|
|
49
|
+
if (!ctx.variables.has(captureNode.name)) {
|
|
50
|
+
ctx.variables.set(captureNode.name, node.span.start);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
exit(_node, _ctx) {
|
|
55
|
+
// No post-order validation needed currently
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
// Traverse AST with visitor
|
|
59
|
+
visitNode(ast, context, visitor);
|
|
60
|
+
// Sort diagnostics by location (line first, then column)
|
|
61
|
+
return sortDiagnostics(context.diagnostics);
|
|
62
|
+
}
|
|
63
|
+
// ============================================================
|
|
64
|
+
// HELPERS
|
|
65
|
+
// ============================================================
|
|
66
|
+
/**
|
|
67
|
+
* Check if a rule is enabled based on configuration.
|
|
68
|
+
* Rules are enabled if state is 'on' or 'warn'.
|
|
69
|
+
*/
|
|
70
|
+
function isRuleEnabled(ruleCode, config) {
|
|
71
|
+
const state = config.rules[ruleCode];
|
|
72
|
+
return state === 'on' || state === 'warn';
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Sort diagnostics by line number first, then column number.
|
|
76
|
+
* Stable sort preserves original order for diagnostics at same location.
|
|
77
|
+
*/
|
|
78
|
+
function sortDiagnostics(diagnostics) {
|
|
79
|
+
return [...diagnostics].sort((a, b) => {
|
|
80
|
+
// Sort by line first
|
|
81
|
+
if (a.location.line !== b.location.line) {
|
|
82
|
+
return a.location.line - b.location.line;
|
|
83
|
+
}
|
|
84
|
+
// Then by column
|
|
85
|
+
return a.location.column - b.location.column;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/check/validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,SAAS,EAAoB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,+DAA+D;AAC/D,0BAA0B;AAC1B,+DAA+D;AAE/D;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAe,EACf,MAAc,EACd,MAAmB;IAEnB,4BAA4B;IAC5B,MAAM,OAAO,GAAsB;QACjC,MAAM;QACN,GAAG;QACH,MAAM;QACN,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,IAAI,GAAG,EAAE;KACrB,CAAC;IAEF,4CAA4C;IAC5C,MAAM,OAAO,GAAgB;QAC3B,KAAK,CAAC,IAAa,EAAE,GAAsB;YACzC,uDAAuD;YACvD,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;gBACpC,2BAA2B;gBAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1C,SAAS;gBACX,CAAC;gBAED,+CAA+C;gBAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxC,SAAS;gBACX,CAAC;gBAED,oDAAoD;gBACpD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACjD,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;YAC3C,CAAC;YAED,yEAAyE;YACzE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,MAAM,WAAW,GAAG,IAAW,CAAC;gBAChC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAc,EAAE,IAAuB;YAC1C,4CAA4C;QAC9C,CAAC;KACF,CAAC;IAEF,4BAA4B;IAC5B,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAEjC,yDAAyD;IACzD,OAAO,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC9C,CAAC;AAED,+DAA+D;AAC/D,UAAU;AACV,+DAA+D;AAE/D;;;GAGG;AACH,SAAS,aAAa,CAAC,QAAgB,EAAE,MAAmB;IAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,WAAyB;IAChD,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpC,qBAAqB;QACrB,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC3C,CAAC;QACD,iBAAiB;QACjB,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AST Visitor
|
|
3
|
+
* Recursive traversal with enter/exit callbacks for validation rules.
|
|
4
|
+
*/
|
|
5
|
+
import type { ASTNode } from '../types.js';
|
|
6
|
+
import type { ValidationContext } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Visitor pattern interface for AST traversal.
|
|
9
|
+
* Provides enter/exit callbacks invoked before and after visiting children.
|
|
10
|
+
*/
|
|
11
|
+
export interface RuleVisitor {
|
|
12
|
+
/**
|
|
13
|
+
* Called before visiting node's children.
|
|
14
|
+
* Use for pre-order traversal validation.
|
|
15
|
+
*/
|
|
16
|
+
enter(node: ASTNode, context: ValidationContext): void;
|
|
17
|
+
/**
|
|
18
|
+
* Called after visiting node's children.
|
|
19
|
+
* Use for post-order traversal validation.
|
|
20
|
+
*/
|
|
21
|
+
exit(node: ASTNode, context: ValidationContext): void;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Recursively visit AST nodes with enter/exit callbacks.
|
|
25
|
+
* Handles all 46 node types from ASTNode union.
|
|
26
|
+
*
|
|
27
|
+
* Traversal order:
|
|
28
|
+
* 1. visitor.enter(node)
|
|
29
|
+
* 2. Recurse into children
|
|
30
|
+
* 3. visitor.exit(node)
|
|
31
|
+
*/
|
|
32
|
+
export declare function visitNode(node: ASTNode, context: ValidationContext, visitor: RuleVisitor): void;
|
|
33
|
+
//# sourceMappingURL=visitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitor.d.ts","sourceRoot":"","sources":["../../src/check/visitor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAEvD;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACvD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,WAAW,GACnB,IAAI,CA+QN"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AST Visitor
|
|
3
|
+
* Recursive traversal with enter/exit callbacks for validation rules.
|
|
4
|
+
*/
|
|
5
|
+
// ============================================================
|
|
6
|
+
// VISITOR FUNCTION
|
|
7
|
+
// ============================================================
|
|
8
|
+
/**
|
|
9
|
+
* Recursively visit AST nodes with enter/exit callbacks.
|
|
10
|
+
* Handles all 46 node types from ASTNode union.
|
|
11
|
+
*
|
|
12
|
+
* Traversal order:
|
|
13
|
+
* 1. visitor.enter(node)
|
|
14
|
+
* 2. Recurse into children
|
|
15
|
+
* 3. visitor.exit(node)
|
|
16
|
+
*/
|
|
17
|
+
export function visitNode(node, context, visitor) {
|
|
18
|
+
// Enter callback before children
|
|
19
|
+
visitor.enter(node, context);
|
|
20
|
+
// Recurse based on node type
|
|
21
|
+
switch (node.type) {
|
|
22
|
+
case 'Script':
|
|
23
|
+
if (node.frontmatter) {
|
|
24
|
+
visitNode(node.frontmatter, context, visitor);
|
|
25
|
+
}
|
|
26
|
+
for (const stmt of node.statements) {
|
|
27
|
+
visitNode(stmt, context, visitor);
|
|
28
|
+
}
|
|
29
|
+
break;
|
|
30
|
+
case 'Frontmatter':
|
|
31
|
+
// Leaf node - no children
|
|
32
|
+
break;
|
|
33
|
+
case 'Statement':
|
|
34
|
+
visitNode(node.expression, context, visitor);
|
|
35
|
+
break;
|
|
36
|
+
case 'AnnotatedStatement':
|
|
37
|
+
for (const arg of node.annotations) {
|
|
38
|
+
visitNode(arg, context, visitor);
|
|
39
|
+
}
|
|
40
|
+
visitNode(node.statement, context, visitor);
|
|
41
|
+
break;
|
|
42
|
+
case 'NamedArg':
|
|
43
|
+
visitNode(node.value, context, visitor);
|
|
44
|
+
break;
|
|
45
|
+
case 'SpreadArg':
|
|
46
|
+
visitNode(node.expression, context, visitor);
|
|
47
|
+
break;
|
|
48
|
+
case 'PipeChain':
|
|
49
|
+
visitNode(node.head, context, visitor);
|
|
50
|
+
for (const pipe of node.pipes) {
|
|
51
|
+
visitNode(pipe, context, visitor);
|
|
52
|
+
}
|
|
53
|
+
if (node.terminator) {
|
|
54
|
+
visitNode(node.terminator, context, visitor);
|
|
55
|
+
}
|
|
56
|
+
break;
|
|
57
|
+
case 'PostfixExpr':
|
|
58
|
+
visitNode(node.primary, context, visitor);
|
|
59
|
+
for (const method of node.methods) {
|
|
60
|
+
visitNode(method, context, visitor);
|
|
61
|
+
}
|
|
62
|
+
break;
|
|
63
|
+
case 'BinaryExpr':
|
|
64
|
+
visitNode(node.left, context, visitor);
|
|
65
|
+
visitNode(node.right, context, visitor);
|
|
66
|
+
break;
|
|
67
|
+
case 'UnaryExpr':
|
|
68
|
+
visitNode(node.operand, context, visitor);
|
|
69
|
+
break;
|
|
70
|
+
case 'GroupedExpr':
|
|
71
|
+
visitNode(node.expression, context, visitor);
|
|
72
|
+
break;
|
|
73
|
+
case 'StringLiteral':
|
|
74
|
+
for (const part of node.parts) {
|
|
75
|
+
if (typeof part !== 'string') {
|
|
76
|
+
visitNode(part, context, visitor);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
80
|
+
case 'Interpolation':
|
|
81
|
+
visitNode(node.expression, context, visitor);
|
|
82
|
+
break;
|
|
83
|
+
case 'NumberLiteral':
|
|
84
|
+
case 'BoolLiteral':
|
|
85
|
+
// Leaf nodes - no children
|
|
86
|
+
break;
|
|
87
|
+
case 'Tuple':
|
|
88
|
+
for (const element of node.elements) {
|
|
89
|
+
visitNode(element, context, visitor);
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
case 'Dict':
|
|
93
|
+
for (const entry of node.entries) {
|
|
94
|
+
visitNode(entry, context, visitor);
|
|
95
|
+
}
|
|
96
|
+
break;
|
|
97
|
+
case 'DictEntry':
|
|
98
|
+
visitNode(node.value, context, visitor);
|
|
99
|
+
break;
|
|
100
|
+
case 'Closure':
|
|
101
|
+
for (const param of node.params) {
|
|
102
|
+
visitNode(param, context, visitor);
|
|
103
|
+
}
|
|
104
|
+
visitNode(node.body, context, visitor);
|
|
105
|
+
break;
|
|
106
|
+
case 'ClosureParam':
|
|
107
|
+
if (node.defaultValue) {
|
|
108
|
+
visitNode(node.defaultValue, context, visitor);
|
|
109
|
+
}
|
|
110
|
+
break;
|
|
111
|
+
case 'Variable':
|
|
112
|
+
if (node.defaultValue) {
|
|
113
|
+
visitNode(node.defaultValue, context, visitor);
|
|
114
|
+
}
|
|
115
|
+
break;
|
|
116
|
+
case 'HostCall':
|
|
117
|
+
for (const arg of node.args) {
|
|
118
|
+
visitNode(arg, context, visitor);
|
|
119
|
+
}
|
|
120
|
+
break;
|
|
121
|
+
case 'ClosureCall':
|
|
122
|
+
for (const arg of node.args) {
|
|
123
|
+
visitNode(arg, context, visitor);
|
|
124
|
+
}
|
|
125
|
+
break;
|
|
126
|
+
case 'MethodCall':
|
|
127
|
+
for (const arg of node.args) {
|
|
128
|
+
visitNode(arg, context, visitor);
|
|
129
|
+
}
|
|
130
|
+
break;
|
|
131
|
+
case 'Invoke':
|
|
132
|
+
for (const arg of node.args) {
|
|
133
|
+
visitNode(arg, context, visitor);
|
|
134
|
+
}
|
|
135
|
+
break;
|
|
136
|
+
case 'PipeInvoke':
|
|
137
|
+
for (const arg of node.args) {
|
|
138
|
+
visitNode(arg, context, visitor);
|
|
139
|
+
}
|
|
140
|
+
break;
|
|
141
|
+
case 'Conditional':
|
|
142
|
+
if (node.input) {
|
|
143
|
+
visitNode(node.input, context, visitor);
|
|
144
|
+
}
|
|
145
|
+
if (node.condition) {
|
|
146
|
+
visitNode(node.condition, context, visitor);
|
|
147
|
+
}
|
|
148
|
+
visitNode(node.thenBranch, context, visitor);
|
|
149
|
+
if (node.elseBranch) {
|
|
150
|
+
visitNode(node.elseBranch, context, visitor);
|
|
151
|
+
}
|
|
152
|
+
break;
|
|
153
|
+
case 'WhileLoop':
|
|
154
|
+
visitNode(node.condition, context, visitor);
|
|
155
|
+
visitNode(node.body, context, visitor);
|
|
156
|
+
break;
|
|
157
|
+
case 'DoWhileLoop':
|
|
158
|
+
if (node.input) {
|
|
159
|
+
visitNode(node.input, context, visitor);
|
|
160
|
+
}
|
|
161
|
+
visitNode(node.body, context, visitor);
|
|
162
|
+
visitNode(node.condition, context, visitor);
|
|
163
|
+
break;
|
|
164
|
+
case 'Block':
|
|
165
|
+
for (const stmt of node.statements) {
|
|
166
|
+
visitNode(stmt, context, visitor);
|
|
167
|
+
}
|
|
168
|
+
break;
|
|
169
|
+
case 'EachExpr':
|
|
170
|
+
visitNode(node.body, context, visitor);
|
|
171
|
+
if (node.accumulator) {
|
|
172
|
+
visitNode(node.accumulator, context, visitor);
|
|
173
|
+
}
|
|
174
|
+
break;
|
|
175
|
+
case 'MapExpr':
|
|
176
|
+
visitNode(node.body, context, visitor);
|
|
177
|
+
break;
|
|
178
|
+
case 'FoldExpr':
|
|
179
|
+
visitNode(node.body, context, visitor);
|
|
180
|
+
if (node.accumulator) {
|
|
181
|
+
visitNode(node.accumulator, context, visitor);
|
|
182
|
+
}
|
|
183
|
+
break;
|
|
184
|
+
case 'FilterExpr':
|
|
185
|
+
visitNode(node.body, context, visitor);
|
|
186
|
+
break;
|
|
187
|
+
case 'ClosureChain':
|
|
188
|
+
visitNode(node.target, context, visitor);
|
|
189
|
+
break;
|
|
190
|
+
case 'Destructure':
|
|
191
|
+
for (const element of node.elements) {
|
|
192
|
+
visitNode(element, context, visitor);
|
|
193
|
+
}
|
|
194
|
+
break;
|
|
195
|
+
case 'DestructPattern':
|
|
196
|
+
if (node.nested) {
|
|
197
|
+
visitNode(node.nested, context, visitor);
|
|
198
|
+
}
|
|
199
|
+
break;
|
|
200
|
+
case 'Slice':
|
|
201
|
+
if (node.start) {
|
|
202
|
+
visitNode(node.start, context, visitor);
|
|
203
|
+
}
|
|
204
|
+
if (node.stop) {
|
|
205
|
+
visitNode(node.stop, context, visitor);
|
|
206
|
+
}
|
|
207
|
+
if (node.step) {
|
|
208
|
+
visitNode(node.step, context, visitor);
|
|
209
|
+
}
|
|
210
|
+
break;
|
|
211
|
+
case 'Spread':
|
|
212
|
+
if (node.operand) {
|
|
213
|
+
visitNode(node.operand, context, visitor);
|
|
214
|
+
}
|
|
215
|
+
break;
|
|
216
|
+
case 'TypeAssertion':
|
|
217
|
+
if (node.operand) {
|
|
218
|
+
visitNode(node.operand, context, visitor);
|
|
219
|
+
}
|
|
220
|
+
break;
|
|
221
|
+
case 'TypeCheck':
|
|
222
|
+
if (node.operand) {
|
|
223
|
+
visitNode(node.operand, context, visitor);
|
|
224
|
+
}
|
|
225
|
+
break;
|
|
226
|
+
case 'Capture':
|
|
227
|
+
case 'Break':
|
|
228
|
+
case 'Return':
|
|
229
|
+
// Leaf nodes - no children
|
|
230
|
+
break;
|
|
231
|
+
case 'Error':
|
|
232
|
+
// Error recovery node - no children to visit
|
|
233
|
+
break;
|
|
234
|
+
default: {
|
|
235
|
+
// Exhaustive check: if we reach here, a node type is missing
|
|
236
|
+
const _exhaustive = node;
|
|
237
|
+
throw new Error(`Unhandled node type in visitor: ${_exhaustive.type}`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Exit callback after children
|
|
241
|
+
visitor.exit(node, context);
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=visitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitor.js","sourceRoot":"","sources":["../../src/check/visitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI Check Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Implements argument parsing for rill-check.
|
|
6
|
+
* Validates Rill source files against linting rules.
|
|
7
|
+
*/
|
|
8
|
+
import type { Diagnostic } from './check/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* Parsed command-line arguments for rill-check
|
|
11
|
+
*/
|
|
12
|
+
export type ParsedCheckArgs = {
|
|
13
|
+
mode: 'check';
|
|
14
|
+
file: string;
|
|
15
|
+
fix: boolean;
|
|
16
|
+
verbose: boolean;
|
|
17
|
+
format: 'text' | 'json';
|
|
18
|
+
} | {
|
|
19
|
+
mode: 'help' | 'version';
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Parse command-line arguments for rill-check
|
|
23
|
+
*
|
|
24
|
+
* @param argv - Raw command-line arguments (typically process.argv.slice(2))
|
|
25
|
+
* @returns Parsed command object
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseCheckArgs(argv: string[]): ParsedCheckArgs;
|
|
28
|
+
/**
|
|
29
|
+
* Format diagnostics for output
|
|
30
|
+
*
|
|
31
|
+
* Adapts pattern from cli-shared.ts formatError function.
|
|
32
|
+
* Text format: file:line:col: severity: message (code)
|
|
33
|
+
* JSON format: complete schema with errors array and summary
|
|
34
|
+
* Verbose mode: adds category field to diagnostics
|
|
35
|
+
*
|
|
36
|
+
* @param file - File path being checked
|
|
37
|
+
* @param diagnostics - Array of diagnostics to format
|
|
38
|
+
* @param format - Output format ('text' or 'json')
|
|
39
|
+
* @param verbose - Whether to include category and doc references
|
|
40
|
+
* @returns Formatted output string
|
|
41
|
+
*/
|
|
42
|
+
export declare function formatDiagnostics(file: string, diagnostics: Diagnostic[], format: 'text' | 'json', verbose: boolean): string;
|
|
43
|
+
//# sourceMappingURL=cli-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-check.d.ts","sourceRoot":"","sources":["../src/cli-check.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAWnD;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB,GACD;IAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEjC;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CAmF9D;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,UAAU,EAAE,EACzB,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,OAAO,EAAE,OAAO,GACf,MAAM,CAKR"}
|