@virune/compiler 1.1.0-rc.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 (300) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +2 -0
  3. package/dist/src/analysis/control-flow.d.ts +9 -0
  4. package/dist/src/analysis/control-flow.d.ts.map +1 -0
  5. package/dist/src/analysis/control-flow.js +47 -0
  6. package/dist/src/analysis/control-flow.js.map +1 -0
  7. package/dist/src/ast/nodes.d.ts +495 -0
  8. package/dist/src/ast/nodes.d.ts.map +1 -0
  9. package/dist/src/ast/nodes.js +2 -0
  10. package/dist/src/ast/nodes.js.map +1 -0
  11. package/dist/src/binder/symbols.d.ts +36 -0
  12. package/dist/src/binder/symbols.d.ts.map +1 -0
  13. package/dist/src/binder/symbols.js +30 -0
  14. package/dist/src/binder/symbols.js.map +1 -0
  15. package/dist/src/checker/builtin-members.d.ts +4 -0
  16. package/dist/src/checker/builtin-members.d.ts.map +1 -0
  17. package/dist/src/checker/builtin-members.js +175 -0
  18. package/dist/src/checker/builtin-members.js.map +1 -0
  19. package/dist/src/checker/checker.d.ts +148 -0
  20. package/dist/src/checker/checker.d.ts.map +1 -0
  21. package/dist/src/checker/checker.js +2985 -0
  22. package/dist/src/checker/checker.js.map +1 -0
  23. package/dist/src/checker/effect-registry.d.ts +14 -0
  24. package/dist/src/checker/effect-registry.d.ts.map +1 -0
  25. package/dist/src/checker/effect-registry.js +11 -0
  26. package/dist/src/checker/effect-registry.js.map +1 -0
  27. package/dist/src/checker/type-operations.d.ts +27 -0
  28. package/dist/src/checker/type-operations.d.ts.map +1 -0
  29. package/dist/src/checker/type-operations.js +268 -0
  30. package/dist/src/checker/type-operations.js.map +1 -0
  31. package/dist/src/codegen/emitter.d.ts +83 -0
  32. package/dist/src/codegen/emitter.d.ts.map +1 -0
  33. package/dist/src/codegen/emitter.js +1029 -0
  34. package/dist/src/codegen/emitter.js.map +1 -0
  35. package/dist/src/codegen/helpers.d.ts +7 -0
  36. package/dist/src/codegen/helpers.d.ts.map +1 -0
  37. package/dist/src/codegen/helpers.js +48 -0
  38. package/dist/src/codegen/helpers.js.map +1 -0
  39. package/dist/src/codegen/runtime-imports.d.ts +6 -0
  40. package/dist/src/codegen/runtime-imports.d.ts.map +1 -0
  41. package/dist/src/codegen/runtime-imports.js +45 -0
  42. package/dist/src/codegen/runtime-imports.js.map +1 -0
  43. package/dist/src/codegen/writer.d.ts +14 -0
  44. package/dist/src/codegen/writer.d.ts.map +1 -0
  45. package/dist/src/codegen/writer.js +56 -0
  46. package/dist/src/codegen/writer.js.map +1 -0
  47. package/dist/src/compiler.d.ts +24 -0
  48. package/dist/src/compiler.d.ts.map +1 -0
  49. package/dist/src/compiler.js +97 -0
  50. package/dist/src/compiler.js.map +1 -0
  51. package/dist/src/diagnostics/codes.d.ts +18 -0
  52. package/dist/src/diagnostics/codes.d.ts.map +1 -0
  53. package/dist/src/diagnostics/codes.js +43 -0
  54. package/dist/src/diagnostics/codes.js.map +1 -0
  55. package/dist/src/diagnostics/diagnostic.d.ts +41 -0
  56. package/dist/src/diagnostics/diagnostic.d.ts.map +1 -0
  57. package/dist/src/diagnostics/diagnostic.js +50 -0
  58. package/dist/src/diagnostics/diagnostic.js.map +1 -0
  59. package/dist/src/diagnostics/render.d.ts +44 -0
  60. package/dist/src/diagnostics/render.d.ts.map +1 -0
  61. package/dist/src/diagnostics/render.js +44 -0
  62. package/dist/src/diagnostics/render.js.map +1 -0
  63. package/dist/src/experimental-api.d.ts +19 -0
  64. package/dist/src/experimental-api.d.ts.map +1 -0
  65. package/dist/src/experimental-api.js +17 -0
  66. package/dist/src/experimental-api.js.map +1 -0
  67. package/dist/src/hir/lower.d.ts +6 -0
  68. package/dist/src/hir/lower.d.ts.map +1 -0
  69. package/dist/src/hir/lower.js +124 -0
  70. package/dist/src/hir/lower.js.map +1 -0
  71. package/dist/src/hir/nodes.d.ts +12 -0
  72. package/dist/src/hir/nodes.d.ts.map +1 -0
  73. package/dist/src/hir/nodes.js +2 -0
  74. package/dist/src/hir/nodes.js.map +1 -0
  75. package/dist/src/index.d.ts +2 -0
  76. package/dist/src/index.d.ts.map +1 -0
  77. package/dist/src/index.js +2 -0
  78. package/dist/src/index.js.map +1 -0
  79. package/dist/src/interop/checked-api.d.ts +21 -0
  80. package/dist/src/interop/checked-api.d.ts.map +1 -0
  81. package/dist/src/interop/checked-api.js +46 -0
  82. package/dist/src/interop/checked-api.js.map +1 -0
  83. package/dist/src/interop/decision.d.ts +24 -0
  84. package/dist/src/interop/decision.d.ts.map +1 -0
  85. package/dist/src/interop/decision.js +96 -0
  86. package/dist/src/interop/decision.js.map +1 -0
  87. package/dist/src/interop/frontend-component-emission.d.ts +17 -0
  88. package/dist/src/interop/frontend-component-emission.d.ts.map +1 -0
  89. package/dist/src/interop/frontend-component-emission.js +271 -0
  90. package/dist/src/interop/frontend-component-emission.js.map +1 -0
  91. package/dist/src/interop/jsx-view-validation.d.ts +20 -0
  92. package/dist/src/interop/jsx-view-validation.d.ts.map +1 -0
  93. package/dist/src/interop/jsx-view-validation.js +847 -0
  94. package/dist/src/interop/jsx-view-validation.js.map +1 -0
  95. package/dist/src/interop/operation-api.d.ts +32 -0
  96. package/dist/src/interop/operation-api.d.ts.map +1 -0
  97. package/dist/src/interop/operation-api.js +61 -0
  98. package/dist/src/interop/operation-api.js.map +1 -0
  99. package/dist/src/interop/operation.d.ts +136 -0
  100. package/dist/src/interop/operation.d.ts.map +1 -0
  101. package/dist/src/interop/operation.js +575 -0
  102. package/dist/src/interop/operation.js.map +1 -0
  103. package/dist/src/interop/repetition-host-locator.d.ts +25 -0
  104. package/dist/src/interop/repetition-host-locator.d.ts.map +1 -0
  105. package/dist/src/interop/repetition-host-locator.js +61 -0
  106. package/dist/src/interop/repetition-host-locator.js.map +1 -0
  107. package/dist/src/interop/repetition-host-usage-validation.d.ts +11 -0
  108. package/dist/src/interop/repetition-host-usage-validation.d.ts.map +1 -0
  109. package/dist/src/interop/repetition-host-usage-validation.js +89 -0
  110. package/dist/src/interop/repetition-host-usage-validation.js.map +1 -0
  111. package/dist/src/interop/types.d.ts +365 -0
  112. package/dist/src/interop/types.d.ts.map +1 -0
  113. package/dist/src/interop/types.js +2 -0
  114. package/dist/src/interop/types.js.map +1 -0
  115. package/dist/src/mir/lower.d.ts +4 -0
  116. package/dist/src/mir/lower.d.ts.map +1 -0
  117. package/dist/src/mir/lower.js +131 -0
  118. package/dist/src/mir/lower.js.map +1 -0
  119. package/dist/src/mir/nodes.d.ts +36 -0
  120. package/dist/src/mir/nodes.d.ts.map +1 -0
  121. package/dist/src/mir/nodes.js +2 -0
  122. package/dist/src/mir/nodes.js.map +1 -0
  123. package/dist/src/project/incremental.d.ts +9 -0
  124. package/dist/src/project/incremental.d.ts.map +1 -0
  125. package/dist/src/project/incremental.js +15 -0
  126. package/dist/src/project/incremental.js.map +1 -0
  127. package/dist/src/project/project.d.ts +98 -0
  128. package/dist/src/project/project.d.ts.map +1 -0
  129. package/dist/src/project/project.js +884 -0
  130. package/dist/src/project/project.js.map +1 -0
  131. package/dist/src/public-api.d.ts +45 -0
  132. package/dist/src/public-api.d.ts.map +1 -0
  133. package/dist/src/public-api.js +37 -0
  134. package/dist/src/public-api.js.map +1 -0
  135. package/dist/src/reference/evaluator.d.ts +13 -0
  136. package/dist/src/reference/evaluator.d.ts.map +1 -0
  137. package/dist/src/reference/evaluator.js +304 -0
  138. package/dist/src/reference/evaluator.js.map +1 -0
  139. package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts +65 -0
  140. package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts.map +1 -0
  141. package/dist/src/selfhost/bootstrap-artifact-normalizer.js +226 -0
  142. package/dist/src/selfhost/bootstrap-artifact-normalizer.js.map +1 -0
  143. package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts +23 -0
  144. package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts.map +1 -0
  145. package/dist/src/selfhost/bootstrap-artifact-snapshot.js +122 -0
  146. package/dist/src/selfhost/bootstrap-artifact-snapshot.js.map +1 -0
  147. package/dist/src/selfhost/bootstrap-compiler-selection.d.ts +36 -0
  148. package/dist/src/selfhost/bootstrap-compiler-selection.d.ts.map +1 -0
  149. package/dist/src/selfhost/bootstrap-compiler-selection.js +52 -0
  150. package/dist/src/selfhost/bootstrap-compiler-selection.js.map +1 -0
  151. package/dist/src/selfhost/bootstrap-execution-probe.d.ts +42 -0
  152. package/dist/src/selfhost/bootstrap-execution-probe.d.ts.map +1 -0
  153. package/dist/src/selfhost/bootstrap-execution-probe.js +115 -0
  154. package/dist/src/selfhost/bootstrap-execution-probe.js.map +1 -0
  155. package/dist/src/selfhost/bootstrap-rollback-decision.d.ts +40 -0
  156. package/dist/src/selfhost/bootstrap-rollback-decision.d.ts.map +1 -0
  157. package/dist/src/selfhost/bootstrap-rollback-decision.js +144 -0
  158. package/dist/src/selfhost/bootstrap-rollback-decision.js.map +1 -0
  159. package/dist/src/selfhost/bootstrap-shadow-history.d.ts +49 -0
  160. package/dist/src/selfhost/bootstrap-shadow-history.d.ts.map +1 -0
  161. package/dist/src/selfhost/bootstrap-shadow-history.js +348 -0
  162. package/dist/src/selfhost/bootstrap-shadow-history.js.map +1 -0
  163. package/dist/src/selfhost/bootstrap-shadow-report.d.ts +43 -0
  164. package/dist/src/selfhost/bootstrap-shadow-report.d.ts.map +1 -0
  165. package/dist/src/selfhost/bootstrap-shadow-report.js +94 -0
  166. package/dist/src/selfhost/bootstrap-shadow-report.js.map +1 -0
  167. package/dist/src/selfhost/bootstrap-stage-executor.d.ts +53 -0
  168. package/dist/src/selfhost/bootstrap-stage-executor.d.ts.map +1 -0
  169. package/dist/src/selfhost/bootstrap-stage-executor.js +159 -0
  170. package/dist/src/selfhost/bootstrap-stage-executor.js.map +1 -0
  171. package/dist/src/selfhost/bootstrap-stage-loader.d.ts +14 -0
  172. package/dist/src/selfhost/bootstrap-stage-loader.d.ts.map +1 -0
  173. package/dist/src/selfhost/bootstrap-stage-loader.js +112 -0
  174. package/dist/src/selfhost/bootstrap-stage-loader.js.map +1 -0
  175. package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts +8 -0
  176. package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts.map +1 -0
  177. package/dist/src/selfhost/bootstrap-stage-pipeline.js +85 -0
  178. package/dist/src/selfhost/bootstrap-stage-pipeline.js.map +1 -0
  179. package/dist/src/selfhost/bootstrap-stage-runner.d.ts +47 -0
  180. package/dist/src/selfhost/bootstrap-stage-runner.d.ts.map +1 -0
  181. package/dist/src/selfhost/bootstrap-stage-runner.js +106 -0
  182. package/dist/src/selfhost/bootstrap-stage-runner.js.map +1 -0
  183. package/dist/src/selfhost/clean-bootstrap-evidence.d.ts +83 -0
  184. package/dist/src/selfhost/clean-bootstrap-evidence.d.ts.map +1 -0
  185. package/dist/src/selfhost/clean-bootstrap-evidence.js +233 -0
  186. package/dist/src/selfhost/clean-bootstrap-evidence.js.map +1 -0
  187. package/dist/src/selfhost/compiler-facade.d.ts +33 -0
  188. package/dist/src/selfhost/compiler-facade.d.ts.map +1 -0
  189. package/dist/src/selfhost/compiler-facade.js +65 -0
  190. package/dist/src/selfhost/compiler-facade.js.map +1 -0
  191. package/dist/src/selfhost/contract.d.ts +151 -0
  192. package/dist/src/selfhost/contract.d.ts.map +1 -0
  193. package/dist/src/selfhost/contract.js +335 -0
  194. package/dist/src/selfhost/contract.js.map +1 -0
  195. package/dist/src/selfhost/differential-artifacts.d.ts +8 -0
  196. package/dist/src/selfhost/differential-artifacts.d.ts.map +1 -0
  197. package/dist/src/selfhost/differential-artifacts.js +50 -0
  198. package/dist/src/selfhost/differential-artifacts.js.map +1 -0
  199. package/dist/src/selfhost/differential-harness.d.ts +91 -0
  200. package/dist/src/selfhost/differential-harness.d.ts.map +1 -0
  201. package/dist/src/selfhost/differential-harness.js +246 -0
  202. package/dist/src/selfhost/differential-harness.js.map +1 -0
  203. package/dist/src/selfhost/full-language-inventory-runner.d.ts +49 -0
  204. package/dist/src/selfhost/full-language-inventory-runner.d.ts.map +1 -0
  205. package/dist/src/selfhost/full-language-inventory-runner.js +225 -0
  206. package/dist/src/selfhost/full-language-inventory-runner.js.map +1 -0
  207. package/dist/src/selfhost/full-language-inventory.d.ts +42 -0
  208. package/dist/src/selfhost/full-language-inventory.d.ts.map +1 -0
  209. package/dist/src/selfhost/full-language-inventory.js +163 -0
  210. package/dist/src/selfhost/full-language-inventory.js.map +1 -0
  211. package/dist/src/selfhost/interop-resolution-witness.d.ts +35 -0
  212. package/dist/src/selfhost/interop-resolution-witness.d.ts.map +1 -0
  213. package/dist/src/selfhost/interop-resolution-witness.js +186 -0
  214. package/dist/src/selfhost/interop-resolution-witness.js.map +1 -0
  215. package/dist/src/selfhost/kernel-model-host-adapter.d.ts +28 -0
  216. package/dist/src/selfhost/kernel-model-host-adapter.d.ts.map +1 -0
  217. package/dist/src/selfhost/kernel-model-host-adapter.js +36 -0
  218. package/dist/src/selfhost/kernel-model-host-adapter.js.map +1 -0
  219. package/dist/src/selfhost/legacy-adapter.d.ts +8 -0
  220. package/dist/src/selfhost/legacy-adapter.d.ts.map +1 -0
  221. package/dist/src/selfhost/legacy-adapter.js +186 -0
  222. package/dist/src/selfhost/legacy-adapter.js.map +1 -0
  223. package/dist/src/selfhost/module-graph.d.ts +57 -0
  224. package/dist/src/selfhost/module-graph.d.ts.map +1 -0
  225. package/dist/src/selfhost/module-graph.js +267 -0
  226. package/dist/src/selfhost/module-graph.js.map +1 -0
  227. package/dist/src/selfhost/mvp-adapter.d.ts +19 -0
  228. package/dist/src/selfhost/mvp-adapter.d.ts.map +1 -0
  229. package/dist/src/selfhost/mvp-adapter.js +186 -0
  230. package/dist/src/selfhost/mvp-adapter.js.map +1 -0
  231. package/dist/src/selfhost/node-executor.d.ts +6 -0
  232. package/dist/src/selfhost/node-executor.d.ts.map +1 -0
  233. package/dist/src/selfhost/node-executor.js +138 -0
  234. package/dist/src/selfhost/node-executor.js.map +1 -0
  235. package/dist/src/selfhost/project-compiler-adapter.d.ts +77 -0
  236. package/dist/src/selfhost/project-compiler-adapter.d.ts.map +1 -0
  237. package/dist/src/selfhost/project-compiler-adapter.js +358 -0
  238. package/dist/src/selfhost/project-compiler-adapter.js.map +1 -0
  239. package/dist/src/selfhost/project-differential-adapter.d.ts +15 -0
  240. package/dist/src/selfhost/project-differential-adapter.d.ts.map +1 -0
  241. package/dist/src/selfhost/project-differential-adapter.js +65 -0
  242. package/dist/src/selfhost/project-differential-adapter.js.map +1 -0
  243. package/dist/src/selfhost/promotion-evidence.d.ts +62 -0
  244. package/dist/src/selfhost/promotion-evidence.d.ts.map +1 -0
  245. package/dist/src/selfhost/promotion-evidence.js +332 -0
  246. package/dist/src/selfhost/promotion-evidence.js.map +1 -0
  247. package/dist/src/selfhost/promotion-policy-replay-v2.d.ts +54 -0
  248. package/dist/src/selfhost/promotion-policy-replay-v2.d.ts.map +1 -0
  249. package/dist/src/selfhost/promotion-policy-replay-v2.js +343 -0
  250. package/dist/src/selfhost/promotion-policy-replay-v2.js.map +1 -0
  251. package/dist/src/selfhost/promotion-shadow-history-v2.d.ts +55 -0
  252. package/dist/src/selfhost/promotion-shadow-history-v2.d.ts.map +1 -0
  253. package/dist/src/selfhost/promotion-shadow-history-v2.js +227 -0
  254. package/dist/src/selfhost/promotion-shadow-history-v2.js.map +1 -0
  255. package/dist/src/selfhost/promotion-subject.d.ts +34 -0
  256. package/dist/src/selfhost/promotion-subject.d.ts.map +1 -0
  257. package/dist/src/selfhost/promotion-subject.js +141 -0
  258. package/dist/src/selfhost/promotion-subject.js.map +1 -0
  259. package/dist/src/selfhost/source-manifest.d.ts +31 -0
  260. package/dist/src/selfhost/source-manifest.d.ts.map +1 -0
  261. package/dist/src/selfhost/source-manifest.js +194 -0
  262. package/dist/src/selfhost/source-manifest.js.map +1 -0
  263. package/dist/src/selfhost/stage-compiler-facade.d.ts +25 -0
  264. package/dist/src/selfhost/stage-compiler-facade.d.ts.map +1 -0
  265. package/dist/src/selfhost/stage-compiler-facade.js +100 -0
  266. package/dist/src/selfhost/stage-compiler-facade.js.map +1 -0
  267. package/dist/src/semantic-evidence/snapshot.d.ts +114 -0
  268. package/dist/src/semantic-evidence/snapshot.d.ts.map +1 -0
  269. package/dist/src/semantic-evidence/snapshot.js +336 -0
  270. package/dist/src/semantic-evidence/snapshot.js.map +1 -0
  271. package/dist/src/source.d.ts +25 -0
  272. package/dist/src/source.d.ts.map +1 -0
  273. package/dist/src/source.js +10 -0
  274. package/dist/src/source.js.map +1 -0
  275. package/dist/src/syntax/cst-to-ast.d.ts +108 -0
  276. package/dist/src/syntax/cst-to-ast.d.ts.map +1 -0
  277. package/dist/src/syntax/cst-to-ast.js +383 -0
  278. package/dist/src/syntax/cst-to-ast.js.map +1 -0
  279. package/dist/src/syntax/documentation.d.ts +11 -0
  280. package/dist/src/syntax/documentation.d.ts.map +1 -0
  281. package/dist/src/syntax/documentation.js +261 -0
  282. package/dist/src/syntax/documentation.js.map +1 -0
  283. package/dist/src/syntax/parser.d.ts +114 -0
  284. package/dist/src/syntax/parser.d.ts.map +1 -0
  285. package/dist/src/syntax/parser.js +970 -0
  286. package/dist/src/syntax/parser.js.map +1 -0
  287. package/dist/src/syntax/syntax-metadata.d.ts +8 -0
  288. package/dist/src/syntax/syntax-metadata.d.ts.map +1 -0
  289. package/dist/src/syntax/syntax-metadata.js +14 -0
  290. package/dist/src/syntax/syntax-metadata.js.map +1 -0
  291. package/dist/src/syntax/tokens.d.ts +96 -0
  292. package/dist/src/syntax/tokens.d.ts.map +1 -0
  293. package/dist/src/syntax/tokens.js +260 -0
  294. package/dist/src/syntax/tokens.js.map +1 -0
  295. package/dist/src/types/types.d.ts +97 -0
  296. package/dist/src/types/types.d.ts.map +1 -0
  297. package/dist/src/types/types.js +105 -0
  298. package/dist/src/types/types.js.map +1 -0
  299. package/package.json +47 -0
  300. package/schema/diagnostics-v1.schema.json +75 -0
@@ -0,0 +1,383 @@
1
+ import { IdGenerator, zeroSpan } from '../source.js';
2
+ import { baseCstVisitorConstructor } from './parser.js';
3
+ import { setSyntaxStart } from './syntax-metadata.js';
4
+ const isToken = (value) => 'image' in value;
5
+ const nodes = (ctx, name) => (ctx[name] ?? []).filter((value) => !isToken(value));
6
+ const tokens = (ctx, name) => (ctx[name] ?? []).filter(isToken);
7
+ const firstToken = (ctx, name) => tokens(ctx, name)[0];
8
+ const firstNode = (ctx, name) => nodes(ctx, name)[0];
9
+ const tokenText = (ctx, name, index = 0) => tokens(ctx, name)[index]?.image ?? '';
10
+ const unquote = (image) => JSON.parse(image);
11
+ const declarationVisibility = (ctx) => {
12
+ const image = firstToken(ctx, 'KwPub')?.image;
13
+ return image === 'pub' ? { public: true } : image === 'internal' ? { public: false, internal: true } : { public: false };
14
+ };
15
+ function tokenSpan(fileId, token) {
16
+ if (token === undefined)
17
+ return zeroSpan(fileId);
18
+ return {
19
+ fileId,
20
+ start: { offset: token.startOffset, line: token.startLine ?? 1, column: token.startColumn ?? 1 },
21
+ end: { offset: token.endOffset ?? token.startOffset, line: token.endLine ?? token.startLine ?? 1, column: (token.endColumn ?? token.startColumn ?? 1) + 1 },
22
+ };
23
+ }
24
+ function nodeSpan(fileId, node) {
25
+ if (node?.location === undefined)
26
+ return zeroSpan(fileId);
27
+ const location = node.location;
28
+ return {
29
+ fileId,
30
+ start: { offset: location.startOffset ?? 0, line: location.startLine ?? 1, column: location.startColumn ?? 1 },
31
+ end: { offset: location.endOffset ?? location.startOffset ?? 0, line: location.endLine ?? location.startLine ?? 1, column: (location.endColumn ?? location.startColumn ?? 1) + 1 },
32
+ };
33
+ }
34
+ function contextSpan(fileId, ctx) {
35
+ const spans = [];
36
+ for (const values of Object.values(ctx)) {
37
+ for (const value of values)
38
+ spans.push(isToken(value) ? tokenSpan(fileId, value) : nodeSpan(fileId, value));
39
+ }
40
+ const meaningful = spans.filter(span => span.start.offset !== 0 || span.end.offset !== 0 || span.start.line !== 1 || span.start.column !== 1);
41
+ if (meaningful.length === 0)
42
+ return zeroSpan(fileId);
43
+ const start = meaningful.reduce((left, right) => left.start.offset <= right.start.offset ? left : right).start;
44
+ const end = meaningful.reduce((left, right) => left.end.offset >= right.end.offset ? left : right).end;
45
+ return { fileId, start, end };
46
+ }
47
+ export class AstBuilder extends baseCstVisitorConstructor {
48
+ #fileId;
49
+ #ids = new IdGenerator();
50
+ constructor(fileId) {
51
+ super();
52
+ this.#fileId = fileId;
53
+ this.validateVisitor();
54
+ }
55
+ id() { return this.#ids.next(); }
56
+ visitNode(node) { if (node === undefined)
57
+ throw new Error('Missing CST node during AST construction'); return this.visit(node); }
58
+ visitNodes(list) { return list.map(node => this.visitNode(node)); }
59
+ module(ctx) {
60
+ const imports = this.visitNodes(nodes(ctx, 'importDeclaration'));
61
+ const declarations = this.visitNodes(nodes(ctx, 'declaration'));
62
+ return { id: this.id(), kind: 'Module', span: this.spanFromChildren([...imports, ...declarations]), unsafe: firstToken(ctx, 'KwUnsafe') !== undefined, imports, declarations };
63
+ }
64
+ importDeclaration(ctx) {
65
+ const named = this.visitNodes(nodes(ctx, 'importItem'));
66
+ const identifiers = tokens(ctx, 'Identifier');
67
+ const namespace = firstToken(ctx, 'Star') !== undefined;
68
+ const namedClause = firstToken(ctx, 'LBrace') !== undefined;
69
+ const sideEffect = !namedClause && !namespace && identifiers.length === 0;
70
+ const modifier = firstToken(ctx, 'KwPub')?.image;
71
+ return setSyntaxStart({
72
+ id: this.id(), kind: 'ImportDeclaration', span: nodeSpan(this.#fileId, this.currentNode(ctx)),
73
+ public: modifier === 'pub', ...(modifier === 'internal' ? { internal: true } : {}),
74
+ sourceKind: firstToken(ctx, 'KwJs') === undefined ? 'virune' : 'javascript',
75
+ typeOnly: firstToken(ctx, 'KwType') !== undefined,
76
+ items: named,
77
+ ...(!sideEffect && !namedClause && !namespace ? { defaultImport: identifiers[0]?.image ?? '' } : {}),
78
+ ...(namespace ? { namespaceImport: identifiers[0]?.image ?? '' } : {}),
79
+ source: unquote(tokenText(ctx, 'StringLiteral')),
80
+ }, contextSpan(this.#fileId, ctx).start.offset);
81
+ }
82
+ importItem(ctx) {
83
+ const identifiers = tokens(ctx, 'Identifier');
84
+ return { imported: identifiers[0]?.image ?? '', local: identifiers[1]?.image ?? identifiers[0]?.image ?? '', span: tokenSpan(this.#fileId, identifiers[0]) };
85
+ }
86
+ declaration(ctx) {
87
+ const attributes = this.visitNodes(nodes(ctx, 'attribute'));
88
+ const name = Object.keys(ctx).find(key => key !== 'attribute');
89
+ const child = name === undefined ? undefined : firstNode(ctx, name);
90
+ const declaration = this.visitNode(child);
91
+ const result = { ...declaration, attributes };
92
+ return setSyntaxStart(result, nodeSpan(this.#fileId, child).start.offset);
93
+ }
94
+ attribute(ctx) {
95
+ return { id: this.id(), kind: 'Attribute', span: tokenSpan(this.#fileId, firstToken(ctx, 'At')), name: tokenText(ctx, 'Identifier'), arguments: firstNode(ctx, 'argumentList') === undefined ? [] : this.visitNode(firstNode(ctx, 'argumentList')) };
96
+ }
97
+ functionDeclaration(ctx) {
98
+ const bodyNode = firstNode(ctx, 'block');
99
+ const expressionNode = firstNode(ctx, 'expression');
100
+ return {
101
+ id: this.id(), kind: 'FunctionDeclaration', span: nodeSpan(this.#fileId, this.currentNode(ctx)), name: tokenText(ctx, 'Identifier'),
102
+ ...declarationVisibility(ctx), async: firstToken(ctx, 'KwAsync') !== undefined, attributes: [],
103
+ typeParameters: firstNode(ctx, 'typeParameters') === undefined ? [] : this.visitNode(firstNode(ctx, 'typeParameters')),
104
+ parameters: firstNode(ctx, 'parameterList') === undefined ? [] : this.visitNode(firstNode(ctx, 'parameterList')),
105
+ ...(firstNode(ctx, 'typeReference') === undefined ? {} : { returnType: this.visitNode(firstNode(ctx, 'typeReference')) }),
106
+ effects: firstNode(ctx, 'usesClause') === undefined ? [] : this.visitNode(firstNode(ctx, 'usesClause')),
107
+ body: bodyNode === undefined ? this.visitNode(expressionNode) : this.visitNode(bodyNode), expressionBody: bodyNode === undefined,
108
+ };
109
+ }
110
+ componentDeclaration(ctx) {
111
+ return {
112
+ id: this.id(), kind: 'ComponentDeclaration', span: contextSpan(this.#fileId, ctx), name: tokenText(ctx, 'Identifier'),
113
+ ...declarationVisibility(ctx), attributes: [],
114
+ parameters: firstNode(ctx, 'parameterList') === undefined ? [] : this.visitNode(firstNode(ctx, 'parameterList')),
115
+ effects: this.visitNode(firstNode(ctx, 'usesClause')),
116
+ body: this.visitNode(firstNode(ctx, 'block')),
117
+ };
118
+ }
119
+ typeParameters(ctx) { return tokens(ctx, 'Identifier').map(token => ({ name: token.image, span: tokenSpan(this.#fileId, token) })); }
120
+ parameterList(ctx) { return this.visitNodes(nodes(ctx, 'parameter')); }
121
+ parameter(ctx) { return setSyntaxStart({ name: tokenText(ctx, 'Identifier'), optional: firstToken(ctx, 'Question') !== undefined, type: this.visitNode(firstNode(ctx, 'typeReference')), span: nodeSpan(this.#fileId, this.currentNode(ctx)) }, contextSpan(this.#fileId, ctx).start.offset); }
122
+ usesClause(ctx) { return [...tokens(ctx, 'Identifier'), ...tokens(ctx, 'Star')].sort((left, right) => left.startOffset - right.startOffset).map(token => token.image); }
123
+ recordDeclaration(ctx) {
124
+ return { id: this.id(), kind: 'RecordDeclaration', span: nodeSpan(this.#fileId, this.currentNode(ctx)), name: tokenText(ctx, 'Identifier'), ...declarationVisibility(ctx), attributes: [], typeParameters: firstNode(ctx, 'typeParameters') === undefined ? [] : this.visitNode(firstNode(ctx, 'typeParameters')), fields: this.visitNodes(nodes(ctx, 'recordField')), derives: firstNode(ctx, 'derivesClause') === undefined ? [] : this.visitNode(firstNode(ctx, 'derivesClause')) };
125
+ }
126
+ recordField(ctx) { return setSyntaxStart({ name: tokenText(ctx, 'Identifier'), type: this.visitNode(firstNode(ctx, 'typeReference')), attributes: this.visitNodes(nodes(ctx, 'attribute')), span: nodeSpan(this.#fileId, this.currentNode(ctx)) }, contextSpan(this.#fileId, ctx).start.offset); }
127
+ derivesClause(ctx) { return tokens(ctx, 'Identifier').map(token => token.image); }
128
+ enumDeclaration(ctx) { return { id: this.id(), kind: 'EnumDeclaration', span: nodeSpan(this.#fileId, this.currentNode(ctx)), name: tokenText(ctx, 'Identifier'), ...declarationVisibility(ctx), attributes: [], typeParameters: firstNode(ctx, 'typeParameters') === undefined ? [] : this.visitNode(firstNode(ctx, 'typeParameters')), variants: this.visitNodes(nodes(ctx, 'enumVariant')), derives: firstNode(ctx, 'derivesClause') === undefined ? [] : this.visitNode(firstNode(ctx, 'derivesClause')) }; }
129
+ enumVariant(ctx) { return setSyntaxStart({ name: tokenText(ctx, 'Identifier'), values: this.visitNodes(nodes(ctx, 'typeReference')), span: nodeSpan(this.#fileId, this.currentNode(ctx)) }, contextSpan(this.#fileId, ctx).start.offset); }
130
+ newtypeDeclaration(ctx) { return { id: this.id(), kind: 'NewtypeDeclaration', span: nodeSpan(this.#fileId, this.currentNode(ctx)), name: tokenText(ctx, 'Identifier'), ...declarationVisibility(ctx), attributes: [], underlying: this.visitNode(firstNode(ctx, 'typeReference')) }; }
131
+ typeAliasDeclaration(ctx) { return { id: this.id(), kind: 'TypeAliasDeclaration', span: nodeSpan(this.#fileId, this.currentNode(ctx)), name: tokenText(ctx, 'Identifier'), ...declarationVisibility(ctx), attributes: [], typeParameters: firstNode(ctx, 'typeParameters') === undefined ? [] : this.visitNode(firstNode(ctx, 'typeParameters')), target: this.visitNode(firstNode(ctx, 'typeReference')) }; }
132
+ externDeclaration(ctx) { return { id: this.id(), kind: 'ExternDeclaration', span: nodeSpan(this.#fileId, this.currentNode(ctx)), module: unquote(tokenText(ctx, 'StringLiteral')), unsafe: firstToken(ctx, 'KwUnsafe') !== undefined, attributes: [], functions: this.visitNodes(nodes(ctx, 'externFunction')) }; }
133
+ externFunction(ctx) { const strings = tokens(ctx, 'StringLiteral'); return setSyntaxStart({ id: this.id(), kind: 'ExternFunction', span: nodeSpan(this.#fileId, this.currentNode(ctx)), name: tokenText(ctx, 'Identifier'), async: firstToken(ctx, 'KwAsync') !== undefined, parameters: firstNode(ctx, 'parameterList') === undefined ? [] : this.visitNode(firstNode(ctx, 'parameterList')), returnType: this.visitNode(firstNode(ctx, 'typeReference')), effects: firstNode(ctx, 'usesClause') === undefined ? [] : this.visitNode(firstNode(ctx, 'usesClause')), jsName: unquote(strings[0]?.image ?? '""') }, contextSpan(this.#fileId, ctx).start.offset); }
134
+ testDeclaration(ctx) { return { id: this.id(), kind: 'TestDeclaration', span: nodeSpan(this.#fileId, this.currentNode(ctx)), name: unquote(tokenText(ctx, 'StringLiteral')), async: firstToken(ctx, 'KwAsync') !== undefined, attributes: [], body: this.visitNode(firstNode(ctx, 'block')) }; }
135
+ topLevelLetDeclaration(ctx) { return { id: this.id(), kind: 'TopLevelLetDeclaration', span: nodeSpan(this.#fileId, this.currentNode(ctx)), name: tokenText(ctx, 'Identifier'), attributes: [], constant: firstToken(ctx, 'KwConst') !== undefined, ...declarationVisibility(ctx), ...(firstNode(ctx, 'typeReference') === undefined ? {} : { annotation: this.visitNode(firstNode(ctx, 'typeReference')) }), value: this.visitNode(firstNode(ctx, 'expression')) }; }
136
+ typeReference(ctx) {
137
+ const functionType = firstNode(ctx, 'functionTypeReference');
138
+ const tupleType = firstNode(ctx, 'tupleTypeReference');
139
+ if (functionType !== undefined) {
140
+ const value = this.visitNode(functionType);
141
+ return { id: this.id(), kind: 'TypeReference', span: contextSpan(this.#fileId, ctx), name: '$Function', arguments: [], optional: firstToken(ctx, 'Question') !== undefined, functionType: value };
142
+ }
143
+ if (tupleType !== undefined)
144
+ return { id: this.id(), kind: 'TypeReference', span: contextSpan(this.#fileId, ctx), name: '$Tuple', arguments: this.visitNodes(nodes(tupleType.children, 'typeReference')), optional: firstToken(ctx, 'Question') !== undefined };
145
+ const childTypes = nodes(ctx, 'typeReference');
146
+ return { id: this.id(), kind: 'TypeReference', span: contextSpan(this.#fileId, ctx), name: tokenText(ctx, 'Identifier'), arguments: this.visitNodes(childTypes), optional: firstToken(ctx, 'Question') !== undefined };
147
+ }
148
+ functionTypeReference(ctx) {
149
+ const values = this.visitNodes(nodes(ctx, 'typeReference'));
150
+ return { async: firstToken(ctx, 'KwAsync') !== undefined, parameters: values.slice(0, -1), result: values.at(-1), effects: firstNode(ctx, 'usesClause') === undefined ? [] : this.visitNode(firstNode(ctx, 'usesClause')) };
151
+ }
152
+ block(ctx) { return { id: this.id(), kind: 'BlockStatement', span: nodeSpan(this.#fileId, this.currentNode(ctx)), statements: this.visitNodes(nodes(ctx, 'statement')) }; }
153
+ statement(ctx) { const key = Object.keys(ctx)[0]; const child = firstNode(ctx, key ?? ''); return setSyntaxStart(this.visitNode(child), nodeSpan(this.#fileId, child).start.offset); }
154
+ letStatement(ctx) { return { id: this.id(), kind: 'LetStatement', span: nodeSpan(this.#fileId, this.currentNode(ctx)), name: tokenText(ctx, 'Identifier'), mutable: firstToken(ctx, 'KwMut') !== undefined, ...(firstNode(ctx, 'typeReference') === undefined ? {} : { annotation: this.visitNode(firstNode(ctx, 'typeReference')) }), value: this.visitNode(firstNode(ctx, 'expression')) }; }
155
+ returnStatement(ctx) { const expression = firstNode(ctx, 'expression'); return { id: this.id(), kind: 'ReturnStatement', span: nodeSpan(this.#fileId, this.currentNode(ctx)), ...(expression === undefined ? {} : { value: this.visitNode(expression) }) }; }
156
+ ifStatement(ctx) { const blocks = nodes(ctx, 'block'); const nested = firstNode(ctx, 'ifStatement'); return { id: this.id(), kind: 'IfStatement', span: nodeSpan(this.#fileId, this.currentNode(ctx)), condition: this.visitNode(firstNode(ctx, 'expression')), thenBlock: this.visitNode(blocks[0]), ...(blocks[1] === undefined && nested === undefined ? {} : { elseBranch: blocks[1] === undefined ? this.visitNode(nested) : this.visitNode(blocks[1]) }) }; }
157
+ forStatement(ctx) { return { id: this.id(), kind: 'ForStatement', span: nodeSpan(this.#fileId, this.currentNode(ctx)), name: tokenText(ctx, 'Identifier'), iterable: this.visitNode(firstNode(ctx, 'expression')), body: this.visitNode(firstNode(ctx, 'block')) }; }
158
+ whileStatement(ctx) { return { id: this.id(), kind: 'WhileStatement', span: nodeSpan(this.#fileId, this.currentNode(ctx)), condition: this.visitNode(firstNode(ctx, 'expression')), body: this.visitNode(firstNode(ctx, 'block')) }; }
159
+ breakStatement(ctx) { return { id: this.id(), kind: 'BreakStatement', span: nodeSpan(this.#fileId, this.currentNode(ctx)) }; }
160
+ continueStatement(ctx) { return { id: this.id(), kind: 'ContinueStatement', span: nodeSpan(this.#fileId, this.currentNode(ctx)) }; }
161
+ discardStatement(ctx) { return { id: this.id(), kind: 'DiscardStatement', span: nodeSpan(this.#fileId, this.currentNode(ctx)), expression: this.visitNode(firstNode(ctx, 'expression')) }; }
162
+ assignmentStatement(ctx) {
163
+ const target = this.visitNode(firstNode(ctx, 'postfixExpression'));
164
+ const value = this.visitNode(firstNode(ctx, 'expression'));
165
+ const span = nodeSpan(this.#fileId, this.currentNode(ctx));
166
+ if (target.kind === 'IdentifierExpression')
167
+ return { id: this.id(), kind: 'AssignmentStatement', span: value.span, name: target.name, value };
168
+ if (target.kind === 'FieldExpression')
169
+ return { id: this.id(), kind: 'MemberAssignmentStatement', span, target: target.target, field: target.field, value };
170
+ if (target.kind === 'IndexExpression')
171
+ return { id: this.id(), kind: 'IndexAssignmentStatement', span, target: target.target, index: target.index, value };
172
+ return { id: this.id(), kind: 'AssignmentStatement', span, name: '', value, invalidTarget: target };
173
+ }
174
+ deferStatement(ctx) { return { id: this.id(), kind: 'DeferStatement', span: nodeSpan(this.#fileId, this.currentNode(ctx)), expression: this.visitNode(firstNode(ctx, 'expression')) }; }
175
+ expressionStatement(ctx) { return { id: this.id(), kind: 'ExpressionStatement', span: nodeSpan(this.#fileId, this.currentNode(ctx)), expression: this.visitNode(firstNode(ctx, 'expression')) }; }
176
+ lineEnd() { return undefined; }
177
+ expression(ctx) { return this.visitNode(firstNode(ctx, 'pipelineExpression')); }
178
+ pipelineExpression(ctx) { return this.foldBinary(ctx, 'orExpression', ['Pipe'], (operator, left, right) => ({ id: this.id(), kind: 'PipelineExpression', span: this.mergeSpan(left.span, right.span), left, right })); }
179
+ orExpression(ctx) { return this.foldBinary(ctx, 'andExpression', ['OrOr']); }
180
+ andExpression(ctx) { return this.foldBinary(ctx, 'equalityExpression', ['AndAnd']); }
181
+ equalityExpression(ctx) { return this.foldBinary(ctx, 'comparisonExpression', ['EqualEqual', 'BangEqual']); }
182
+ comparisonExpression(ctx) { return this.foldBinary(ctx, 'additiveExpression', ['Less', 'LessEqual', 'Greater', 'GreaterEqual']); }
183
+ additiveExpression(ctx) { return this.foldBinary(ctx, 'multiplicativeExpression', ['Plus', 'Minus']); }
184
+ multiplicativeExpression(ctx) { return this.foldBinary(ctx, 'unaryExpression', ['Star', 'Slash', 'Percent']); }
185
+ unaryExpression(ctx) {
186
+ const postfix = firstNode(ctx, 'postfixExpression');
187
+ if (postfix !== undefined)
188
+ return this.visitNode(postfix);
189
+ const operand = this.visitNode(firstNode(ctx, 'unaryExpression'));
190
+ const operator = ['Bang', 'Minus', 'KwAwait'].flatMap(name => tokens(ctx, name)).sort((a, b) => a.startOffset - b.startOffset)[0];
191
+ if (operator?.image === 'await') {
192
+ const awaitSpan = this.mergeSpan(tokenSpan(this.#fileId, operator), operand.kind === 'TryExpression' ? operand.operand.span : operand.span);
193
+ const awaited = { id: this.id(), kind: 'AwaitExpression', span: awaitSpan, operand: operand.kind === 'TryExpression' ? operand.operand : operand };
194
+ if (operand.kind === 'TryExpression')
195
+ return { id: this.id(), kind: 'TryExpression', span: this.mergeSpan(tokenSpan(this.#fileId, operator), operand.span), operand: awaited };
196
+ return awaited;
197
+ }
198
+ return { id: this.id(), kind: 'UnaryExpression', span: this.mergeSpan(tokenSpan(this.#fileId, operator), operand.span), operator: operator?.image === '-' ? '-' : '!', operand };
199
+ }
200
+ postfixExpression(ctx) {
201
+ let result = this.visitNode(firstNode(ctx, 'primaryExpression'));
202
+ const events = [];
203
+ for (const node of nodes(ctx, 'callSuffix'))
204
+ events.push({ offset: node.location?.startOffset ?? 0, kind: 'call', node });
205
+ for (const token of tokens(ctx, 'Dot'))
206
+ events.push({ offset: token.startOffset, kind: 'field', token });
207
+ for (const node of nodes(ctx, 'indexSuffix'))
208
+ events.push({ offset: node.location?.startOffset ?? 0, kind: 'index', node });
209
+ for (const token of tokens(ctx, 'Question'))
210
+ events.push({ offset: token.startOffset, kind: 'try', token });
211
+ for (const token of tokens(ctx, 'KwWith'))
212
+ events.push({ offset: token.startOffset, kind: 'update', token });
213
+ const updateNodes = nodes(ctx, 'recordFieldBlock');
214
+ const fieldTokens = tokens(ctx, 'IdentifierName');
215
+ for (const event of events.sort((a, b) => a.offset - b.offset)) {
216
+ if (event.kind === 'call') {
217
+ const suffix = event.node;
218
+ const argsNode = firstNode(suffix.children, 'argumentList');
219
+ const typeArgsNode = firstNode(suffix.children, 'typeArguments');
220
+ const args = argsNode === undefined ? [] : this.visitNode(argsNode);
221
+ const typeArguments = typeArgsNode === undefined ? [] : this.visitNode(typeArgsNode);
222
+ result = { id: this.id(), kind: 'CallExpression', span: this.mergeSpan(result.span, nodeSpan(this.#fileId, suffix)), callee: result, typeArguments, arguments: args };
223
+ }
224
+ else if (event.kind === 'field') {
225
+ const field = fieldTokens.find(token => token.startOffset > event.offset);
226
+ result = { id: this.id(), kind: 'FieldExpression', span: this.mergeSpan(result.span, tokenSpan(this.#fileId, field)), target: result, field: field?.image ?? '' };
227
+ }
228
+ else if (event.kind === 'index') {
229
+ const suffix = event.node;
230
+ const index = this.visitNode(firstNode(suffix.children, 'expression'));
231
+ result = { id: this.id(), kind: 'IndexExpression', span: this.mergeSpan(result.span, nodeSpan(this.#fileId, suffix)), target: result, index };
232
+ }
233
+ else if (event.kind === 'try') {
234
+ result = { id: this.id(), kind: 'TryExpression', span: this.mergeSpan(result.span, tokenSpan(this.#fileId, event.token)), operand: result };
235
+ }
236
+ else {
237
+ const update = updateNodes.find(node => (node.location?.startOffset ?? -1) > event.offset);
238
+ result = { id: this.id(), kind: 'RecordUpdateExpression', span: this.mergeSpan(result.span, nodeSpan(this.#fileId, update)), base: result, entries: this.visitNode(update) };
239
+ }
240
+ }
241
+ return result;
242
+ }
243
+ indexSuffix(ctx) { return this.visitNode(firstNode(ctx, 'expression')); }
244
+ typeArguments(ctx) { return this.visitNodes(nodes(ctx, 'typeReference')); }
245
+ argumentList(ctx) { return this.visitNodes(nodes(ctx, 'expression')); }
246
+ primaryExpression(ctx) {
247
+ for (const name of ['viewExpression', 'recordExpression', 'contextualAggregateExpression', 'listExpression', 'parenthesizedOrTupleExpression', 'conditionalExpression', 'matchExpression', 'lambdaExpression', 'parallelExpression']) {
248
+ const child = firstNode(ctx, name);
249
+ if (child !== undefined)
250
+ return this.visitNode(child);
251
+ }
252
+ const identifier = firstToken(ctx, 'Identifier');
253
+ if (identifier !== undefined)
254
+ return { id: this.id(), kind: 'IdentifierExpression', span: tokenSpan(this.#fileId, identifier), name: identifier.image };
255
+ const token = Object.values(ctx).flat().filter(isToken).sort((a, b) => a.startOffset - b.startOffset)[0];
256
+ if (token === undefined)
257
+ return { id: this.id(), kind: 'WildcardExpression', span: zeroSpan(this.#fileId) };
258
+ if (token.tokenType.name === 'Underscore')
259
+ return { id: this.id(), kind: 'WildcardExpression', span: tokenSpan(this.#fileId, token) };
260
+ return this.literal(token);
261
+ }
262
+ viewExpression(ctx) { return { id: this.id(), kind: 'ViewExpression', span: contextSpan(this.#fileId, ctx), body: this.visitNode(firstNode(ctx, 'viewBlock')) }; }
263
+ viewBlock(ctx) { return { id: this.id(), kind: 'ViewBlock', span: contextSpan(this.#fileId, ctx), children: this.visitNodes(nodes(ctx, 'viewChild')) }; }
264
+ viewChild(ctx) {
265
+ for (const name of ['viewElement', 'viewConditional', 'viewRepetition', 'viewTextChild', 'viewExpressionChild', 'viewChildrenSlot']) {
266
+ const child = firstNode(ctx, name);
267
+ if (child !== undefined)
268
+ return this.visitNode(child);
269
+ }
270
+ throw new Error('Missing View child during AST construction');
271
+ }
272
+ viewElement(ctx) { const block = firstNode(ctx, 'viewBlock'); return { id: this.id(), kind: 'ViewElement', span: contextSpan(this.#fileId, ctx), tag: this.visitNode(firstNode(ctx, 'viewTag')), properties: firstNode(ctx, 'viewPropertyList') === undefined ? [] : this.visitNode(firstNode(ctx, 'viewPropertyList')), ...(block === undefined ? {} : { children: this.visitNode(block) }) }; }
273
+ viewTag(ctx) { return [tokenText(ctx, 'Identifier'), ...tokens(ctx, 'IdentifierName').map(token => token.image)]; }
274
+ viewPropertyList(ctx) { return this.visitNodes(nodes(ctx, 'viewProperty')); }
275
+ viewProperty(ctx) {
276
+ const quotedToken = firstToken(ctx, 'StringLiteral');
277
+ const nameToken = quotedToken ?? firstToken(ctx, 'IdentifierName');
278
+ return { name: quotedToken === undefined ? nameToken?.image ?? '' : unquote(quotedToken.image), quoted: quotedToken !== undefined, value: this.visitNode(firstNode(ctx, 'expression')), span: contextSpan(this.#fileId, ctx) };
279
+ }
280
+ viewConditional(ctx) {
281
+ const blocks = nodes(ctx, 'viewBlock');
282
+ const nested = firstNode(ctx, 'viewConditional');
283
+ return { id: this.id(), kind: 'ViewConditional', span: contextSpan(this.#fileId, ctx), condition: this.visitNode(firstNode(ctx, 'expression')), thenBlock: this.visitNode(blocks[0]), ...(blocks[1] === undefined && nested === undefined ? {} : { elseBranch: blocks[1] === undefined ? this.visitNode(nested) : this.visitNode(blocks[1]) }) };
284
+ }
285
+ viewRepetition(ctx) {
286
+ const identifiers = tokens(ctx, 'Identifier');
287
+ const expressions = nodes(ctx, 'expression');
288
+ return {
289
+ id: this.id(), kind: 'ViewRepetition', span: contextSpan(this.#fileId, ctx), itemName: identifiers[0]?.image ?? '',
290
+ ...(firstToken(ctx, 'Comma') === undefined || identifiers[1] === undefined ? {} : { indexName: identifiers[1].image }),
291
+ source: this.visitNode(expressions[0]),
292
+ identity: this.visitNode(expressions[1]),
293
+ body: this.visitNode(firstNode(ctx, 'viewBlock')),
294
+ };
295
+ }
296
+ viewTextChild(ctx) { const token = firstToken(ctx, 'StringLiteral'); return { id: this.id(), kind: 'ViewTextChild', span: contextSpan(this.#fileId, ctx), value: unquote(token?.image ?? '""') }; }
297
+ viewExpressionChild(ctx) { return { id: this.id(), kind: 'ViewExpressionChild', span: contextSpan(this.#fileId, ctx), expression: this.visitNode(firstNode(ctx, 'expression')) }; }
298
+ viewChildrenSlot(ctx) { return { id: this.id(), kind: 'ViewChildrenSlot', span: contextSpan(this.#fileId, ctx) }; }
299
+ recordExpression(ctx) { const typeArguments = firstNode(ctx, 'typeArguments'); return { id: this.id(), kind: 'RecordExpression', span: nodeSpan(this.#fileId, this.currentNode(ctx)), name: tokenText(ctx, 'Identifier'), typeArguments: typeArguments === undefined ? [] : this.visitNode(typeArguments), entries: this.visitNode(firstNode(ctx, 'recordFieldBlock')) }; }
300
+ recordFieldBlock(ctx) { return this.visitNodes(nodes(ctx, 'recordEntry')); }
301
+ recordEntry(ctx) { const name = tokenText(ctx, 'Identifier'); const expression = firstNode(ctx, 'expression'); return { name, value: expression === undefined ? { id: this.id(), kind: 'IdentifierExpression', span: tokenSpan(this.#fileId, firstToken(ctx, 'Identifier')), name } : this.visitNode(expression), span: nodeSpan(this.#fileId, this.currentNode(ctx)) }; }
302
+ contextualAggregateExpression(ctx) { return { id: this.id(), kind: 'ContextualAggregateExpression', span: contextSpan(this.#fileId, ctx), entries: this.visitNodes(nodes(ctx, 'contextualAggregateEntry')) }; }
303
+ contextualAggregateEntry(ctx) { return { name: tokenText(ctx, 'IdentifierName'), value: this.visitNode(firstNode(ctx, 'expression')), span: contextSpan(this.#fileId, ctx) }; }
304
+ listExpression(ctx) { return { id: this.id(), kind: 'ListExpression', span: nodeSpan(this.#fileId, this.currentNode(ctx)), items: this.visitNodes(nodes(ctx, 'expression')) }; }
305
+ parenthesizedOrTupleExpression(ctx) { const values = this.visitNodes(nodes(ctx, 'expression')); return values.length === 1 ? values[0] : { id: this.id(), kind: 'TupleExpression', span: nodeSpan(this.#fileId, this.currentNode(ctx)), items: values }; }
306
+ conditionalExpression(ctx) { const expressions = this.visitNodes(nodes(ctx, 'expression')); return { id: this.id(), kind: 'ConditionalExpression', span: nodeSpan(this.#fileId, this.currentNode(ctx)), condition: expressions[0], thenExpression: expressions[1], elseExpression: expressions[2] }; }
307
+ matchExpression(ctx) { return { id: this.id(), kind: 'MatchExpression', span: nodeSpan(this.#fileId, this.currentNode(ctx)), target: this.visitNode(firstNode(ctx, 'expression')), arms: this.visitNodes(nodes(ctx, 'matchArm')) }; }
308
+ matchArm(ctx) { const expressions = nodes(ctx, 'expression'); return { pattern: this.visitNode(firstNode(ctx, 'pattern')), ...(expressions.length > 1 ? { guard: this.visitNode(expressions[0]) } : {}), expression: this.visitNode(expressions.at(-1)), span: nodeSpan(this.#fileId, this.currentNode(ctx)) }; }
309
+ pattern(ctx) { return this.visitNode(firstNode(ctx, 'orPattern')); }
310
+ orPattern(ctx) {
311
+ const alternatives = this.visitNodes(nodes(ctx, 'primaryPattern'));
312
+ return alternatives.length === 1 ? alternatives[0] : { id: this.id(), kind: 'OrPattern', span: nodeSpan(this.#fileId, this.currentNode(ctx)), alternatives };
313
+ }
314
+ primaryPattern(ctx) {
315
+ for (const name of ['rangePattern', 'listPattern', 'tuplePattern', 'variantPattern', 'recordPattern']) {
316
+ const child = firstNode(ctx, name);
317
+ if (child !== undefined)
318
+ return this.visitNode(child);
319
+ }
320
+ const token = Object.values(ctx).flat().filter(isToken).sort((a, b) => a.startOffset - b.startOffset)[0];
321
+ if (token?.tokenType.name === 'Underscore')
322
+ return { id: this.id(), kind: 'WildcardPattern', span: tokenSpan(this.#fileId, token) };
323
+ const identifier = firstToken(ctx, 'Identifier');
324
+ if (identifier !== undefined)
325
+ return /^[A-Z]/u.test(identifier.image) ? { id: this.id(), kind: 'VariantPattern', span: tokenSpan(this.#fileId, identifier), name: identifier.image, values: [] } : { id: this.id(), kind: 'BindingPattern', span: tokenSpan(this.#fileId, identifier), name: identifier.image };
326
+ const literal = this.literal(token);
327
+ return { id: this.id(), kind: 'LiteralPattern', span: literal.span, literalKind: literal.literalKind === 'Bool' ? 'Bool' : literal.literalKind === 'Int' ? 'Int' : 'String', value: literal.value };
328
+ }
329
+ rangePattern(ctx) { const values = tokens(ctx, 'IntLiteral').map(token => Number(token.image.replaceAll('_', ''))); return { id: this.id(), kind: 'RangePattern', span: nodeSpan(this.#fileId, this.currentNode(ctx)), start: values[0] ?? 0, end: values[1] ?? 0 }; }
330
+ listPattern(ctx) {
331
+ const spread = firstToken(ctx, 'Spread');
332
+ const restToken = spread === undefined ? undefined : Object.values(ctx).flat().filter(isToken).filter(token => token.startOffset > spread.startOffset).sort((a, b) => a.startOffset - b.startOffset)[0];
333
+ const rest = restToken === undefined ? undefined : restToken.tokenType.name === 'Underscore' ? { id: this.id(), kind: 'WildcardPattern', span: tokenSpan(this.#fileId, restToken) } : { id: this.id(), kind: 'BindingPattern', span: tokenSpan(this.#fileId, restToken), name: restToken.image };
334
+ return { id: this.id(), kind: 'ListPattern', span: nodeSpan(this.#fileId, this.currentNode(ctx)), items: this.visitNodes(nodes(ctx, 'pattern')), ...(rest === undefined ? {} : { rest }) };
335
+ }
336
+ tuplePattern(ctx) { return { id: this.id(), kind: 'TuplePattern', span: nodeSpan(this.#fileId, this.currentNode(ctx)), items: this.visitNodes(nodes(ctx, 'pattern')) }; }
337
+ variantPattern(ctx) { return { id: this.id(), kind: 'VariantPattern', span: nodeSpan(this.#fileId, this.currentNode(ctx)), name: tokenText(ctx, 'Identifier'), values: this.visitNodes(nodes(ctx, 'pattern')) }; }
338
+ recordPattern(ctx) { return { id: this.id(), kind: 'RecordPattern', span: nodeSpan(this.#fileId, this.currentNode(ctx)), name: tokenText(ctx, 'Identifier'), fields: this.visitNodes(nodes(ctx, 'recordPatternField')), rest: firstToken(ctx, 'Spread') !== undefined }; }
339
+ recordPatternField(ctx) { const name = tokenText(ctx, 'Identifier'); const patternNode = firstNode(ctx, 'pattern'); return { name, pattern: patternNode === undefined ? { id: this.id(), kind: 'BindingPattern', span: tokenSpan(this.#fileId, firstToken(ctx, 'Identifier')), name } : this.visitNode(patternNode), span: nodeSpan(this.#fileId, this.currentNode(ctx)) }; }
340
+ lambdaExpression(ctx) {
341
+ const block = firstNode(ctx, 'block');
342
+ return {
343
+ id: this.id(), kind: 'LambdaExpression', span: nodeSpan(this.#fileId, this.currentNode(ctx)), async: firstToken(ctx, 'KwAsync') !== undefined,
344
+ parameters: firstNode(ctx, 'lambdaParameterList') === undefined ? [] : this.visitNode(firstNode(ctx, 'lambdaParameterList')),
345
+ ...(firstNode(ctx, 'typeReference') === undefined ? {} : { returnType: this.visitNode(firstNode(ctx, 'typeReference')) }),
346
+ effects: firstNode(ctx, 'usesClause') === undefined ? [] : this.visitNode(firstNode(ctx, 'usesClause')),
347
+ body: block === undefined ? this.visitNode(firstNode(ctx, 'expression')) : this.visitNode(block), expressionBody: block === undefined,
348
+ };
349
+ }
350
+ lambdaParameterList(ctx) { return this.visitNodes(nodes(ctx, 'lambdaParameter')); }
351
+ lambdaParameter(ctx) { return { name: tokenText(ctx, 'Identifier'), ...(firstNode(ctx, 'typeReference') === undefined ? {} : { annotation: this.visitNode(firstNode(ctx, 'typeReference')) }), span: nodeSpan(this.#fileId, this.currentNode(ctx)) }; }
352
+ parallelExpression(ctx) { return { id: this.id(), kind: 'ParallelExpression', span: nodeSpan(this.#fileId, this.currentNode(ctx)), tryMode: firstToken(ctx, 'KwTry') !== undefined, entries: this.visitNodes(nodes(ctx, 'parallelEntry')) }; }
353
+ parallelEntry(ctx) { return { name: tokenText(ctx, 'Identifier'), value: this.visitNode(firstNode(ctx, 'expression')), span: nodeSpan(this.#fileId, this.currentNode(ctx)) }; }
354
+ foldBinary(ctx, childName, operatorNames, factory) {
355
+ const values = this.visitNodes(nodes(ctx, childName));
356
+ const operators = operatorNames.flatMap(name => tokens(ctx, name)).sort((a, b) => a.startOffset - b.startOffset);
357
+ let result = values[0];
358
+ operators.forEach((operator, index) => {
359
+ const right = values[index + 1];
360
+ result = factory?.(operator.image, result, right) ?? { id: this.id(), kind: 'BinaryExpression', span: this.mergeSpan(result.span, right.span), operator: operator.image, left: result, right };
361
+ });
362
+ return result;
363
+ }
364
+ literal(token) {
365
+ if (token === undefined)
366
+ return { id: this.id(), kind: 'LiteralExpression', span: zeroSpan(this.#fileId), literalKind: 'String', value: '' };
367
+ const span = tokenSpan(this.#fileId, token);
368
+ switch (token.tokenType.name) {
369
+ case 'StringLiteral': return { id: this.id(), kind: 'LiteralExpression', span, literalKind: 'String', value: unquote(token.image) };
370
+ case 'BigIntLiteral': return { id: this.id(), kind: 'LiteralExpression', span, literalKind: 'BigInt', value: BigInt(token.image.slice(0, -1).replaceAll('_', '')) };
371
+ case 'FloatLiteral': return { id: this.id(), kind: 'LiteralExpression', span, literalKind: 'Float', value: Number(token.image.replaceAll('_', '')) };
372
+ case 'IntLiteral': return { id: this.id(), kind: 'LiteralExpression', span, literalKind: 'Int', value: Number(token.image.replaceAll('_', '')) };
373
+ case 'KwTrue': return { id: this.id(), kind: 'LiteralExpression', span, literalKind: 'Bool', value: true };
374
+ case 'KwFalse': return { id: this.id(), kind: 'LiteralExpression', span, literalKind: 'Bool', value: false };
375
+ default: return { id: this.id(), kind: 'LiteralExpression', span, literalKind: 'String', value: token.image };
376
+ }
377
+ }
378
+ mergeSpan(left, right) { return { fileId: left.fileId, start: left.start, end: right.end }; }
379
+ spanFromChildren(children) { return children.length === 0 ? zeroSpan(this.#fileId) : this.mergeSpan(children[0].span, children.at(-1).span); }
380
+ currentNode(ctx) { return Object.values(ctx).flat().find((value) => !isToken(value)); }
381
+ }
382
+ export function buildAst(fileId, cst) { return new AstBuilder(fileId).visit(cst); }
383
+ //# sourceMappingURL=cst-to-ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cst-to-ast.js","sourceRoot":"","sources":["../../../src/syntax/cst-to-ast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { IToken } from 'chevrotain';
2
+ import type * as A from '../ast/nodes.js';
3
+ import type { DiagnosticBag } from '../diagnostics/diagnostic.js';
4
+ import type { SourceFile } from '../source.js';
5
+ /**
6
+ * Associates documentation comments after parsing so the grammar remains free
7
+ * from comment-specific productions. Invalid placements are reported before
8
+ * semantic analysis and therefore never affect generated JavaScript.
9
+ */
10
+ export declare function attachDocumentation(module: A.ModuleNode, source: SourceFile, comments: readonly IToken[], tokens: readonly IToken[], diagnostics: DiagnosticBag): A.ModuleNode;
11
+ //# sourceMappingURL=documentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation.d.ts","sourceRoot":"","sources":["../../../src/syntax/documentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,KAAK,CAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,cAAc,CAAC;AAkC3D;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,CAAC,CAAC,UAAU,EACpB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,WAAW,EAAE,aAAa,GACxB,CAAC,CAAC,UAAU,CAKd"}