@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.
- package/LICENSE +201 -0
- package/NOTICE +2 -0
- package/dist/src/analysis/control-flow.d.ts +9 -0
- package/dist/src/analysis/control-flow.d.ts.map +1 -0
- package/dist/src/analysis/control-flow.js +47 -0
- package/dist/src/analysis/control-flow.js.map +1 -0
- package/dist/src/ast/nodes.d.ts +495 -0
- package/dist/src/ast/nodes.d.ts.map +1 -0
- package/dist/src/ast/nodes.js +2 -0
- package/dist/src/ast/nodes.js.map +1 -0
- package/dist/src/binder/symbols.d.ts +36 -0
- package/dist/src/binder/symbols.d.ts.map +1 -0
- package/dist/src/binder/symbols.js +30 -0
- package/dist/src/binder/symbols.js.map +1 -0
- package/dist/src/checker/builtin-members.d.ts +4 -0
- package/dist/src/checker/builtin-members.d.ts.map +1 -0
- package/dist/src/checker/builtin-members.js +175 -0
- package/dist/src/checker/builtin-members.js.map +1 -0
- package/dist/src/checker/checker.d.ts +148 -0
- package/dist/src/checker/checker.d.ts.map +1 -0
- package/dist/src/checker/checker.js +2985 -0
- package/dist/src/checker/checker.js.map +1 -0
- package/dist/src/checker/effect-registry.d.ts +14 -0
- package/dist/src/checker/effect-registry.d.ts.map +1 -0
- package/dist/src/checker/effect-registry.js +11 -0
- package/dist/src/checker/effect-registry.js.map +1 -0
- package/dist/src/checker/type-operations.d.ts +27 -0
- package/dist/src/checker/type-operations.d.ts.map +1 -0
- package/dist/src/checker/type-operations.js +268 -0
- package/dist/src/checker/type-operations.js.map +1 -0
- package/dist/src/codegen/emitter.d.ts +83 -0
- package/dist/src/codegen/emitter.d.ts.map +1 -0
- package/dist/src/codegen/emitter.js +1029 -0
- package/dist/src/codegen/emitter.js.map +1 -0
- package/dist/src/codegen/helpers.d.ts +7 -0
- package/dist/src/codegen/helpers.d.ts.map +1 -0
- package/dist/src/codegen/helpers.js +48 -0
- package/dist/src/codegen/helpers.js.map +1 -0
- package/dist/src/codegen/runtime-imports.d.ts +6 -0
- package/dist/src/codegen/runtime-imports.d.ts.map +1 -0
- package/dist/src/codegen/runtime-imports.js +45 -0
- package/dist/src/codegen/runtime-imports.js.map +1 -0
- package/dist/src/codegen/writer.d.ts +14 -0
- package/dist/src/codegen/writer.d.ts.map +1 -0
- package/dist/src/codegen/writer.js +56 -0
- package/dist/src/codegen/writer.js.map +1 -0
- package/dist/src/compiler.d.ts +24 -0
- package/dist/src/compiler.d.ts.map +1 -0
- package/dist/src/compiler.js +97 -0
- package/dist/src/compiler.js.map +1 -0
- package/dist/src/diagnostics/codes.d.ts +18 -0
- package/dist/src/diagnostics/codes.d.ts.map +1 -0
- package/dist/src/diagnostics/codes.js +43 -0
- package/dist/src/diagnostics/codes.js.map +1 -0
- package/dist/src/diagnostics/diagnostic.d.ts +41 -0
- package/dist/src/diagnostics/diagnostic.d.ts.map +1 -0
- package/dist/src/diagnostics/diagnostic.js +50 -0
- package/dist/src/diagnostics/diagnostic.js.map +1 -0
- package/dist/src/diagnostics/render.d.ts +44 -0
- package/dist/src/diagnostics/render.d.ts.map +1 -0
- package/dist/src/diagnostics/render.js +44 -0
- package/dist/src/diagnostics/render.js.map +1 -0
- package/dist/src/experimental-api.d.ts +19 -0
- package/dist/src/experimental-api.d.ts.map +1 -0
- package/dist/src/experimental-api.js +17 -0
- package/dist/src/experimental-api.js.map +1 -0
- package/dist/src/hir/lower.d.ts +6 -0
- package/dist/src/hir/lower.d.ts.map +1 -0
- package/dist/src/hir/lower.js +124 -0
- package/dist/src/hir/lower.js.map +1 -0
- package/dist/src/hir/nodes.d.ts +12 -0
- package/dist/src/hir/nodes.d.ts.map +1 -0
- package/dist/src/hir/nodes.js +2 -0
- package/dist/src/hir/nodes.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interop/checked-api.d.ts +21 -0
- package/dist/src/interop/checked-api.d.ts.map +1 -0
- package/dist/src/interop/checked-api.js +46 -0
- package/dist/src/interop/checked-api.js.map +1 -0
- package/dist/src/interop/decision.d.ts +24 -0
- package/dist/src/interop/decision.d.ts.map +1 -0
- package/dist/src/interop/decision.js +96 -0
- package/dist/src/interop/decision.js.map +1 -0
- package/dist/src/interop/frontend-component-emission.d.ts +17 -0
- package/dist/src/interop/frontend-component-emission.d.ts.map +1 -0
- package/dist/src/interop/frontend-component-emission.js +271 -0
- package/dist/src/interop/frontend-component-emission.js.map +1 -0
- package/dist/src/interop/jsx-view-validation.d.ts +20 -0
- package/dist/src/interop/jsx-view-validation.d.ts.map +1 -0
- package/dist/src/interop/jsx-view-validation.js +847 -0
- package/dist/src/interop/jsx-view-validation.js.map +1 -0
- package/dist/src/interop/operation-api.d.ts +32 -0
- package/dist/src/interop/operation-api.d.ts.map +1 -0
- package/dist/src/interop/operation-api.js +61 -0
- package/dist/src/interop/operation-api.js.map +1 -0
- package/dist/src/interop/operation.d.ts +136 -0
- package/dist/src/interop/operation.d.ts.map +1 -0
- package/dist/src/interop/operation.js +575 -0
- package/dist/src/interop/operation.js.map +1 -0
- package/dist/src/interop/repetition-host-locator.d.ts +25 -0
- package/dist/src/interop/repetition-host-locator.d.ts.map +1 -0
- package/dist/src/interop/repetition-host-locator.js +61 -0
- package/dist/src/interop/repetition-host-locator.js.map +1 -0
- package/dist/src/interop/repetition-host-usage-validation.d.ts +11 -0
- package/dist/src/interop/repetition-host-usage-validation.d.ts.map +1 -0
- package/dist/src/interop/repetition-host-usage-validation.js +89 -0
- package/dist/src/interop/repetition-host-usage-validation.js.map +1 -0
- package/dist/src/interop/types.d.ts +365 -0
- package/dist/src/interop/types.d.ts.map +1 -0
- package/dist/src/interop/types.js +2 -0
- package/dist/src/interop/types.js.map +1 -0
- package/dist/src/mir/lower.d.ts +4 -0
- package/dist/src/mir/lower.d.ts.map +1 -0
- package/dist/src/mir/lower.js +131 -0
- package/dist/src/mir/lower.js.map +1 -0
- package/dist/src/mir/nodes.d.ts +36 -0
- package/dist/src/mir/nodes.d.ts.map +1 -0
- package/dist/src/mir/nodes.js +2 -0
- package/dist/src/mir/nodes.js.map +1 -0
- package/dist/src/project/incremental.d.ts +9 -0
- package/dist/src/project/incremental.d.ts.map +1 -0
- package/dist/src/project/incremental.js +15 -0
- package/dist/src/project/incremental.js.map +1 -0
- package/dist/src/project/project.d.ts +98 -0
- package/dist/src/project/project.d.ts.map +1 -0
- package/dist/src/project/project.js +884 -0
- package/dist/src/project/project.js.map +1 -0
- package/dist/src/public-api.d.ts +45 -0
- package/dist/src/public-api.d.ts.map +1 -0
- package/dist/src/public-api.js +37 -0
- package/dist/src/public-api.js.map +1 -0
- package/dist/src/reference/evaluator.d.ts +13 -0
- package/dist/src/reference/evaluator.d.ts.map +1 -0
- package/dist/src/reference/evaluator.js +304 -0
- package/dist/src/reference/evaluator.js.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts +65 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.js +226 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.js.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts +23 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.js +122 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.js.map +1 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.d.ts +36 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.js +52 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.js.map +1 -0
- package/dist/src/selfhost/bootstrap-execution-probe.d.ts +42 -0
- package/dist/src/selfhost/bootstrap-execution-probe.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-execution-probe.js +115 -0
- package/dist/src/selfhost/bootstrap-execution-probe.js.map +1 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.d.ts +40 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.js +144 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.js.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-history.d.ts +49 -0
- package/dist/src/selfhost/bootstrap-shadow-history.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-history.js +348 -0
- package/dist/src/selfhost/bootstrap-shadow-history.js.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-report.d.ts +43 -0
- package/dist/src/selfhost/bootstrap-shadow-report.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-report.js +94 -0
- package/dist/src/selfhost/bootstrap-shadow-report.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-executor.d.ts +53 -0
- package/dist/src/selfhost/bootstrap-stage-executor.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-executor.js +159 -0
- package/dist/src/selfhost/bootstrap-stage-executor.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-loader.d.ts +14 -0
- package/dist/src/selfhost/bootstrap-stage-loader.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-loader.js +112 -0
- package/dist/src/selfhost/bootstrap-stage-loader.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts +8 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.js +85 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-runner.d.ts +47 -0
- package/dist/src/selfhost/bootstrap-stage-runner.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-runner.js +106 -0
- package/dist/src/selfhost/bootstrap-stage-runner.js.map +1 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.d.ts +83 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.d.ts.map +1 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.js +233 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.js.map +1 -0
- package/dist/src/selfhost/compiler-facade.d.ts +33 -0
- package/dist/src/selfhost/compiler-facade.d.ts.map +1 -0
- package/dist/src/selfhost/compiler-facade.js +65 -0
- package/dist/src/selfhost/compiler-facade.js.map +1 -0
- package/dist/src/selfhost/contract.d.ts +151 -0
- package/dist/src/selfhost/contract.d.ts.map +1 -0
- package/dist/src/selfhost/contract.js +335 -0
- package/dist/src/selfhost/contract.js.map +1 -0
- package/dist/src/selfhost/differential-artifacts.d.ts +8 -0
- package/dist/src/selfhost/differential-artifacts.d.ts.map +1 -0
- package/dist/src/selfhost/differential-artifacts.js +50 -0
- package/dist/src/selfhost/differential-artifacts.js.map +1 -0
- package/dist/src/selfhost/differential-harness.d.ts +91 -0
- package/dist/src/selfhost/differential-harness.d.ts.map +1 -0
- package/dist/src/selfhost/differential-harness.js +246 -0
- package/dist/src/selfhost/differential-harness.js.map +1 -0
- package/dist/src/selfhost/full-language-inventory-runner.d.ts +49 -0
- package/dist/src/selfhost/full-language-inventory-runner.d.ts.map +1 -0
- package/dist/src/selfhost/full-language-inventory-runner.js +225 -0
- package/dist/src/selfhost/full-language-inventory-runner.js.map +1 -0
- package/dist/src/selfhost/full-language-inventory.d.ts +42 -0
- package/dist/src/selfhost/full-language-inventory.d.ts.map +1 -0
- package/dist/src/selfhost/full-language-inventory.js +163 -0
- package/dist/src/selfhost/full-language-inventory.js.map +1 -0
- package/dist/src/selfhost/interop-resolution-witness.d.ts +35 -0
- package/dist/src/selfhost/interop-resolution-witness.d.ts.map +1 -0
- package/dist/src/selfhost/interop-resolution-witness.js +186 -0
- package/dist/src/selfhost/interop-resolution-witness.js.map +1 -0
- package/dist/src/selfhost/kernel-model-host-adapter.d.ts +28 -0
- package/dist/src/selfhost/kernel-model-host-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/kernel-model-host-adapter.js +36 -0
- package/dist/src/selfhost/kernel-model-host-adapter.js.map +1 -0
- package/dist/src/selfhost/legacy-adapter.d.ts +8 -0
- package/dist/src/selfhost/legacy-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/legacy-adapter.js +186 -0
- package/dist/src/selfhost/legacy-adapter.js.map +1 -0
- package/dist/src/selfhost/module-graph.d.ts +57 -0
- package/dist/src/selfhost/module-graph.d.ts.map +1 -0
- package/dist/src/selfhost/module-graph.js +267 -0
- package/dist/src/selfhost/module-graph.js.map +1 -0
- package/dist/src/selfhost/mvp-adapter.d.ts +19 -0
- package/dist/src/selfhost/mvp-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/mvp-adapter.js +186 -0
- package/dist/src/selfhost/mvp-adapter.js.map +1 -0
- package/dist/src/selfhost/node-executor.d.ts +6 -0
- package/dist/src/selfhost/node-executor.d.ts.map +1 -0
- package/dist/src/selfhost/node-executor.js +138 -0
- package/dist/src/selfhost/node-executor.js.map +1 -0
- package/dist/src/selfhost/project-compiler-adapter.d.ts +77 -0
- package/dist/src/selfhost/project-compiler-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/project-compiler-adapter.js +358 -0
- package/dist/src/selfhost/project-compiler-adapter.js.map +1 -0
- package/dist/src/selfhost/project-differential-adapter.d.ts +15 -0
- package/dist/src/selfhost/project-differential-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/project-differential-adapter.js +65 -0
- package/dist/src/selfhost/project-differential-adapter.js.map +1 -0
- package/dist/src/selfhost/promotion-evidence.d.ts +62 -0
- package/dist/src/selfhost/promotion-evidence.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-evidence.js +332 -0
- package/dist/src/selfhost/promotion-evidence.js.map +1 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.d.ts +54 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.js +343 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.js.map +1 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.d.ts +55 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.js +227 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.js.map +1 -0
- package/dist/src/selfhost/promotion-subject.d.ts +34 -0
- package/dist/src/selfhost/promotion-subject.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-subject.js +141 -0
- package/dist/src/selfhost/promotion-subject.js.map +1 -0
- package/dist/src/selfhost/source-manifest.d.ts +31 -0
- package/dist/src/selfhost/source-manifest.d.ts.map +1 -0
- package/dist/src/selfhost/source-manifest.js +194 -0
- package/dist/src/selfhost/source-manifest.js.map +1 -0
- package/dist/src/selfhost/stage-compiler-facade.d.ts +25 -0
- package/dist/src/selfhost/stage-compiler-facade.d.ts.map +1 -0
- package/dist/src/selfhost/stage-compiler-facade.js +100 -0
- package/dist/src/selfhost/stage-compiler-facade.js.map +1 -0
- package/dist/src/semantic-evidence/snapshot.d.ts +114 -0
- package/dist/src/semantic-evidence/snapshot.d.ts.map +1 -0
- package/dist/src/semantic-evidence/snapshot.js +336 -0
- package/dist/src/semantic-evidence/snapshot.js.map +1 -0
- package/dist/src/source.d.ts +25 -0
- package/dist/src/source.d.ts.map +1 -0
- package/dist/src/source.js +10 -0
- package/dist/src/source.js.map +1 -0
- package/dist/src/syntax/cst-to-ast.d.ts +108 -0
- package/dist/src/syntax/cst-to-ast.d.ts.map +1 -0
- package/dist/src/syntax/cst-to-ast.js +383 -0
- package/dist/src/syntax/cst-to-ast.js.map +1 -0
- package/dist/src/syntax/documentation.d.ts +11 -0
- package/dist/src/syntax/documentation.d.ts.map +1 -0
- package/dist/src/syntax/documentation.js +261 -0
- package/dist/src/syntax/documentation.js.map +1 -0
- package/dist/src/syntax/parser.d.ts +114 -0
- package/dist/src/syntax/parser.d.ts.map +1 -0
- package/dist/src/syntax/parser.js +970 -0
- package/dist/src/syntax/parser.js.map +1 -0
- package/dist/src/syntax/syntax-metadata.d.ts +8 -0
- package/dist/src/syntax/syntax-metadata.d.ts.map +1 -0
- package/dist/src/syntax/syntax-metadata.js +14 -0
- package/dist/src/syntax/syntax-metadata.js.map +1 -0
- package/dist/src/syntax/tokens.d.ts +96 -0
- package/dist/src/syntax/tokens.d.ts.map +1 -0
- package/dist/src/syntax/tokens.js +260 -0
- package/dist/src/syntax/tokens.js.map +1 -0
- package/dist/src/types/types.d.ts +97 -0
- package/dist/src/types/types.d.ts.map +1 -0
- package/dist/src/types/types.js +105 -0
- package/dist/src/types/types.js.map +1 -0
- package/package.json +47 -0
- 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"}
|