@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.
Files changed (260) hide show
  1. package/README.md +16 -8
  2. package/dist/check/config.d.ts +20 -0
  3. package/dist/check/config.d.ts.map +1 -0
  4. package/dist/check/config.js +151 -0
  5. package/dist/check/config.js.map +1 -0
  6. package/dist/check/fixer.d.ts +39 -0
  7. package/dist/check/fixer.d.ts.map +1 -0
  8. package/dist/check/fixer.js +119 -0
  9. package/dist/check/fixer.js.map +1 -0
  10. package/dist/check/index.d.ts +10 -0
  11. package/dist/check/index.d.ts.map +1 -0
  12. package/dist/check/index.js +21 -0
  13. package/dist/check/index.js.map +1 -0
  14. package/dist/check/rules/anti-patterns.d.ts +65 -0
  15. package/dist/check/rules/anti-patterns.d.ts.map +1 -0
  16. package/dist/check/rules/anti-patterns.js +427 -0
  17. package/dist/check/rules/anti-patterns.js.map +1 -0
  18. package/dist/check/rules/closures.d.ts +66 -0
  19. package/dist/check/rules/closures.d.ts.map +1 -0
  20. package/dist/check/rules/closures.js +373 -0
  21. package/dist/check/rules/closures.js.map +1 -0
  22. package/dist/check/rules/collections.d.ts +90 -0
  23. package/dist/check/rules/collections.d.ts.map +1 -0
  24. package/dist/check/rules/collections.js +373 -0
  25. package/dist/check/rules/collections.js.map +1 -0
  26. package/dist/check/rules/conditionals.d.ts +41 -0
  27. package/dist/check/rules/conditionals.d.ts.map +1 -0
  28. package/dist/check/rules/conditionals.js +106 -0
  29. package/dist/check/rules/conditionals.js.map +1 -0
  30. package/dist/check/rules/flow.d.ts +46 -0
  31. package/dist/check/rules/flow.d.ts.map +1 -0
  32. package/dist/check/rules/flow.js +206 -0
  33. package/dist/check/rules/flow.js.map +1 -0
  34. package/dist/check/rules/formatting.d.ts +133 -0
  35. package/dist/check/rules/formatting.d.ts.map +1 -0
  36. package/dist/check/rules/formatting.js +639 -0
  37. package/dist/check/rules/formatting.js.map +1 -0
  38. package/dist/check/rules/helpers.d.ts +26 -0
  39. package/dist/check/rules/helpers.d.ts.map +1 -0
  40. package/dist/check/rules/helpers.js +66 -0
  41. package/dist/check/rules/helpers.js.map +1 -0
  42. package/dist/check/rules/index.d.ts +21 -0
  43. package/dist/check/rules/index.d.ts.map +1 -0
  44. package/dist/check/rules/index.js +78 -0
  45. package/dist/check/rules/index.js.map +1 -0
  46. package/dist/check/rules/loops.d.ts +70 -0
  47. package/dist/check/rules/loops.d.ts.map +1 -0
  48. package/dist/check/rules/loops.js +227 -0
  49. package/dist/check/rules/loops.js.map +1 -0
  50. package/dist/check/rules/naming.d.ts +21 -0
  51. package/dist/check/rules/naming.d.ts.map +1 -0
  52. package/dist/check/rules/naming.js +167 -0
  53. package/dist/check/rules/naming.js.map +1 -0
  54. package/dist/check/rules/strings.d.ts +28 -0
  55. package/dist/check/rules/strings.d.ts.map +1 -0
  56. package/dist/check/rules/strings.js +80 -0
  57. package/dist/check/rules/strings.js.map +1 -0
  58. package/dist/check/rules/types.d.ts +41 -0
  59. package/dist/check/rules/types.d.ts.map +1 -0
  60. package/dist/check/rules/types.js +162 -0
  61. package/dist/check/rules/types.js.map +1 -0
  62. package/dist/check/types.d.ts +106 -0
  63. package/dist/check/types.d.ts.map +1 -0
  64. package/dist/check/types.js +6 -0
  65. package/dist/check/types.js.map +1 -0
  66. package/dist/check/validator.d.ts +18 -0
  67. package/dist/check/validator.d.ts.map +1 -0
  68. package/dist/check/validator.js +88 -0
  69. package/dist/check/validator.js.map +1 -0
  70. package/dist/check/visitor.d.ts +33 -0
  71. package/dist/check/visitor.d.ts.map +1 -0
  72. package/dist/check/visitor.js +243 -0
  73. package/dist/check/visitor.js.map +1 -0
  74. package/dist/cli-check.d.ts +43 -0
  75. package/dist/cli-check.d.ts.map +1 -0
  76. package/dist/cli-check.js +356 -0
  77. package/dist/cli-check.js.map +1 -0
  78. package/dist/cli-eval.d.ts +15 -0
  79. package/dist/cli-eval.d.ts.map +1 -0
  80. package/dist/cli-eval.js +120 -0
  81. package/dist/cli-eval.js.map +1 -0
  82. package/dist/cli-exec.d.ts +49 -0
  83. package/dist/cli-exec.d.ts.map +1 -0
  84. package/dist/cli-exec.js +191 -0
  85. package/dist/cli-exec.js.map +1 -0
  86. package/dist/cli-module-loader.d.ts +19 -0
  87. package/dist/cli-module-loader.d.ts.map +1 -0
  88. package/dist/cli-module-loader.js +83 -0
  89. package/dist/cli-module-loader.js.map +1 -0
  90. package/dist/cli-shared.d.ts +36 -0
  91. package/dist/cli-shared.d.ts.map +1 -0
  92. package/dist/cli-shared.js +101 -0
  93. package/dist/cli-shared.js.map +1 -0
  94. package/dist/cli.d.ts +2 -0
  95. package/dist/cli.d.ts.map +1 -1
  96. package/dist/cli.js +4 -11
  97. package/dist/cli.js.map +1 -1
  98. package/dist/index.d.ts +1 -1
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +1 -1
  101. package/dist/index.js.map +1 -1
  102. package/dist/lexer/readers.d.ts +1 -1
  103. package/dist/lexer/readers.d.ts.map +1 -1
  104. package/dist/lexer/readers.js +62 -32
  105. package/dist/lexer/readers.js.map +1 -1
  106. package/dist/lexer/tokenizer.d.ts.map +1 -1
  107. package/dist/lexer/tokenizer.js +5 -6
  108. package/dist/lexer/tokenizer.js.map +1 -1
  109. package/dist/parser/index.js +1 -1
  110. package/dist/parser/index.js.map +1 -1
  111. package/dist/parser/parser-expr.js +23 -5
  112. package/dist/parser/parser-expr.js.map +1 -1
  113. package/dist/parser/parser-functions.d.ts +2 -2
  114. package/dist/parser/parser-functions.d.ts.map +1 -1
  115. package/dist/parser/parser-functions.js +2 -1
  116. package/dist/parser/parser-functions.js.map +1 -1
  117. package/dist/parser/parser-literals.js +2 -2
  118. package/dist/parser/parser-literals.js.map +1 -1
  119. package/dist/parser/parser-script.js +9 -7
  120. package/dist/parser/parser-script.js.map +1 -1
  121. package/dist/parser/parser-variables.js +4 -3
  122. package/dist/parser/parser-variables.js.map +1 -1
  123. package/dist/runtime/core/callable.d.ts +5 -6
  124. package/dist/runtime/core/callable.d.ts.map +1 -1
  125. package/dist/runtime/core/callable.js.map +1 -1
  126. package/dist/runtime/core/context.d.ts.map +1 -1
  127. package/dist/runtime/core/context.js +19 -32
  128. package/dist/runtime/core/context.js.map +1 -1
  129. package/dist/runtime/core/equals.js +1 -1
  130. package/dist/runtime/core/equals.js.map +1 -1
  131. package/dist/runtime/core/eval/evaluator.d.ts +78 -0
  132. package/dist/runtime/core/eval/evaluator.d.ts.map +1 -1
  133. package/dist/runtime/core/eval/evaluator.js +78 -0
  134. package/dist/runtime/core/eval/evaluator.js.map +1 -1
  135. package/dist/runtime/core/eval/mixins/closures.d.ts.map +1 -1
  136. package/dist/runtime/core/eval/mixins/closures.js +9 -1
  137. package/dist/runtime/core/eval/mixins/closures.js.map +1 -1
  138. package/dist/runtime/core/eval/mixins/variables.d.ts.map +1 -1
  139. package/dist/runtime/core/eval/mixins/variables.js +143 -2
  140. package/dist/runtime/core/eval/mixins/variables.js.map +1 -1
  141. package/dist/runtime/core/types.d.ts +15 -2
  142. package/dist/runtime/core/types.d.ts.map +1 -1
  143. package/dist/runtime/core/types.js.map +1 -1
  144. package/dist/runtime/ext/extensions.d.ts +51 -0
  145. package/dist/runtime/ext/extensions.d.ts.map +1 -0
  146. package/dist/runtime/ext/extensions.js +67 -0
  147. package/dist/runtime/ext/extensions.js.map +1 -0
  148. package/dist/runtime/index.d.ts +3 -0
  149. package/dist/runtime/index.d.ts.map +1 -1
  150. package/dist/runtime/index.js +1 -0
  151. package/dist/runtime/index.js.map +1 -1
  152. package/dist/types.d.ts +8 -4
  153. package/dist/types.d.ts.map +1 -1
  154. package/dist/types.js +5 -4
  155. package/dist/types.js.map +1 -1
  156. package/docs/00_INDEX.md +1 -0
  157. package/docs/01_guide.md +3 -3
  158. package/docs/02_types.md +8 -10
  159. package/docs/03_variables.md +10 -0
  160. package/docs/04_operators.md +3 -3
  161. package/docs/05_control-flow.md +21 -0
  162. package/docs/07_collections.md +2 -0
  163. package/docs/10_parsing.md +9 -9
  164. package/docs/11_reference.md +1 -1
  165. package/docs/12_examples.md +36 -62
  166. package/docs/14_host-integration.md +116 -111
  167. package/docs/15_grammar.ebnf +1 -5
  168. package/docs/16_conventions.md +3 -4
  169. package/docs/17_cli-tools.md +184 -0
  170. package/docs/99_llm-reference.txt +46 -5
  171. package/package.json +13 -4
  172. package/dist/demo.d.ts +0 -6
  173. package/dist/demo.d.ts.map +0 -1
  174. package/dist/demo.js +0 -121
  175. package/dist/demo.js.map +0 -1
  176. package/dist/lexer.d.ts +0 -19
  177. package/dist/lexer.d.ts.map +0 -1
  178. package/dist/lexer.js +0 -344
  179. package/dist/lexer.js.map +0 -1
  180. package/dist/parser/arithmetic.d.ts +0 -16
  181. package/dist/parser/arithmetic.d.ts.map +0 -1
  182. package/dist/parser/arithmetic.js +0 -128
  183. package/dist/parser/arithmetic.js.map +0 -1
  184. package/dist/parser/boolean.d.ts +0 -15
  185. package/dist/parser/boolean.d.ts.map +0 -1
  186. package/dist/parser/boolean.js +0 -20
  187. package/dist/parser/boolean.js.map +0 -1
  188. package/dist/parser/control-flow.d.ts +0 -56
  189. package/dist/parser/control-flow.d.ts.map +0 -1
  190. package/dist/parser/control-flow.js +0 -167
  191. package/dist/parser/control-flow.js.map +0 -1
  192. package/dist/parser/expressions.d.ts +0 -23
  193. package/dist/parser/expressions.d.ts.map +0 -1
  194. package/dist/parser/expressions.js +0 -950
  195. package/dist/parser/expressions.js.map +0 -1
  196. package/dist/parser/extraction.d.ts +0 -48
  197. package/dist/parser/extraction.d.ts.map +0 -1
  198. package/dist/parser/extraction.js +0 -279
  199. package/dist/parser/extraction.js.map +0 -1
  200. package/dist/parser/functions.d.ts +0 -20
  201. package/dist/parser/functions.d.ts.map +0 -1
  202. package/dist/parser/functions.js +0 -96
  203. package/dist/parser/functions.js.map +0 -1
  204. package/dist/parser/literals.d.ts +0 -37
  205. package/dist/parser/literals.d.ts.map +0 -1
  206. package/dist/parser/literals.js +0 -373
  207. package/dist/parser/literals.js.map +0 -1
  208. package/dist/parser/script.d.ts +0 -14
  209. package/dist/parser/script.d.ts.map +0 -1
  210. package/dist/parser/script.js +0 -196
  211. package/dist/parser/script.js.map +0 -1
  212. package/dist/parser/variables.d.ts +0 -10
  213. package/dist/parser/variables.d.ts.map +0 -1
  214. package/dist/parser/variables.js +0 -215
  215. package/dist/parser/variables.js.map +0 -1
  216. package/dist/runtime/ast-equals.d.ts +0 -13
  217. package/dist/runtime/ast-equals.d.ts.map +0 -1
  218. package/dist/runtime/ast-equals.js +0 -447
  219. package/dist/runtime/ast-equals.js.map +0 -1
  220. package/dist/runtime/builtins.d.ts +0 -13
  221. package/dist/runtime/builtins.d.ts.map +0 -1
  222. package/dist/runtime/builtins.js +0 -180
  223. package/dist/runtime/builtins.js.map +0 -1
  224. package/dist/runtime/callable.d.ts +0 -88
  225. package/dist/runtime/callable.d.ts.map +0 -1
  226. package/dist/runtime/callable.js +0 -98
  227. package/dist/runtime/callable.js.map +0 -1
  228. package/dist/runtime/context.d.ts +0 -13
  229. package/dist/runtime/context.d.ts.map +0 -1
  230. package/dist/runtime/context.js +0 -73
  231. package/dist/runtime/context.js.map +0 -1
  232. package/dist/runtime/core/evaluate.d.ts +0 -42
  233. package/dist/runtime/core/evaluate.d.ts.map +0 -1
  234. package/dist/runtime/core/evaluate.debug.js +0 -1251
  235. package/dist/runtime/core/evaluate.js +0 -1913
  236. package/dist/runtime/core/evaluate.js.map +0 -1
  237. package/dist/runtime/evaluate.d.ts +0 -32
  238. package/dist/runtime/evaluate.d.ts.map +0 -1
  239. package/dist/runtime/evaluate.js +0 -1111
  240. package/dist/runtime/evaluate.js.map +0 -1
  241. package/dist/runtime/execute.d.ts +0 -26
  242. package/dist/runtime/execute.d.ts.map +0 -1
  243. package/dist/runtime/execute.js +0 -121
  244. package/dist/runtime/execute.js.map +0 -1
  245. package/dist/runtime/signals.d.ts +0 -19
  246. package/dist/runtime/signals.d.ts.map +0 -1
  247. package/dist/runtime/signals.js +0 -26
  248. package/dist/runtime/signals.js.map +0 -1
  249. package/dist/runtime/types.d.ts +0 -169
  250. package/dist/runtime/types.d.ts.map +0 -1
  251. package/dist/runtime/types.js +0 -50
  252. package/dist/runtime/types.js.map +0 -1
  253. package/dist/runtime/values.d.ts +0 -50
  254. package/dist/runtime/values.d.ts.map +0 -1
  255. package/dist/runtime/values.js +0 -209
  256. package/dist/runtime/values.js.map +0 -1
  257. package/dist/runtime.d.ts +0 -254
  258. package/dist/runtime.d.ts.map +0 -1
  259. package/dist/runtime.js +0 -2014
  260. 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"}