@nola-lang/compiler 0.1.0-alpha.0 → 0.1.2

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/dist/lower.js DELETED
@@ -1,322 +0,0 @@
1
- import { Codes, children, } from "@nola-lang/ast";
2
- import { NOLA_EMIT } from "@nola-lang/core";
3
- import { companionSpecifierFor } from "./companion-name.js";
4
- import { collectTypeRegistry } from "./schema.js";
5
- import { accessorNameFor, buildAccessorPlan, collectTypeImports, deriveTypeExpr, } from "./schema-expr.js";
6
- import { SpanRecorder } from "./spans.js";
7
- /**
8
- * Appended at EOF so no original line/column shifts: ESM hoists the import, and a
9
- * `function` declaration hoists with its value. `__nola_file_ctx` must NOT be a
10
- * `const`/`let` — an infer function called during its own module's evaluation
11
- * (`const eager = go();`) reads it before the declaration runs and hits the TDZ.
12
- * It holds no state: `__nola.context.file` is memoized by path in the runtime.
13
- */
14
- const RUNTIME_IMPORT = (displayFile) => `
15
- import { __nola } from "nola-lang/runtime";
16
- __nola.useRuntime(${NOLA_EMIT});
17
- function __nola_file_ctx() { return __nola.context.file(${JSON.stringify(displayFile)}); }
18
- `;
19
- export function lower(source, file, ast, displayFile = file) {
20
- return new Lowerer(source, file, ast, displayFile).run();
21
- }
22
- class Lowerer {
23
- s;
24
- source;
25
- /** Absolute on-disk path. Diagnostics and source maps use this. */
26
- file;
27
- /** Project-root-relative path. Only this reaches the emitted code. */
28
- displayFile;
29
- ast;
30
- diagnostics = [];
31
- meta = { nolaFunctions: [] };
32
- usedRuntime = false;
33
- /** named types needing a __nola_type_<Name> accessor in the appendix, in first-use order */
34
- typeAccessors = new Map();
35
- /** local binding name -> companion import emitted in the appendix */
36
- companionImports = new Map();
37
- /** shared derivation context (registry, imports, display file, bare ref names) */
38
- deriveCtx;
39
- constructor(source, file, ast, displayFile) {
40
- this.s = new SpanRecorder(source);
41
- this.source = source;
42
- this.file = file;
43
- this.displayFile = displayFile;
44
- this.ast = ast;
45
- this.deriveCtx = {
46
- source,
47
- registry: collectTypeRegistry(ast),
48
- imports: collectTypeImports(ast),
49
- importerDisplayFile: displayFile,
50
- refQualifier: "",
51
- };
52
- }
53
- run() {
54
- this.visit(this.ast, false, true);
55
- if (this.usedRuntime) {
56
- // Accessors are `function` declarations for the same TDZ reason as
57
- // __nola_file_ctx: a top-level extractor evaluates during module
58
- // evaluation, before any appendix statement runs.
59
- let appendix = RUNTIME_IMPORT(this.displayFile);
60
- for (const [name, expr] of this.typeAccessors) {
61
- // The explicit return type is required: a self-recursive accessor has no
62
- // inferable return type (TS7023 under strict). The inline import type is
63
- // erased by esbuild and resolves against both the stub and the runtime.
64
- appendix += `function ${accessorNameFor(name)}(): import("nola-lang/runtime").InferType<unknown> { return ${expr}; }\n`;
65
- }
66
- // Companion imports hoist like any ESM import; the binding is a companion
67
- // accessor function, initialized before module evaluation (cycle-safe).
68
- for (const [local, imp] of this.companionImports) {
69
- appendix += `import { ${imp.importedName}$type as ${accessorNameFor(local)} } from ${JSON.stringify(companionSpecifierFor(imp.specifier))};\n`;
70
- }
71
- this.s.appendix(appendix);
72
- }
73
- const map = this.s.generateMap({ source: this.file, hires: true, includeContent: true });
74
- const spans = this.s.finalize(this.source.length);
75
- const companions = [
76
- ...new Set([...this.companionImports.values()].map((i) => companionSpecifierFor(i.specifier))),
77
- ].sort();
78
- return {
79
- code: this.s.toString(),
80
- map,
81
- diagnostics: this.diagnostics,
82
- meta: { ...this.meta, spans, companions, mode: "lowered" },
83
- };
84
- }
85
- diag(code, message, node) {
86
- this.diagnostics.push({ code, message, file: this.file, start: node.start, end: node.end, loc: node.loc });
87
- }
88
- /** Fold a derivation's transitive needs (accessors, companion imports) into the state. */
89
- absorbPlan(companions, plan) {
90
- for (const [local, imp] of companions)
91
- this.companionImports.set(local, imp);
92
- for (const [name, expr] of plan.accessors) {
93
- if (!this.typeAccessors.has(name))
94
- this.typeAccessors.set(name, expr);
95
- }
96
- for (const [local, imp] of plan.companions)
97
- this.companionImports.set(local, imp);
98
- }
99
- absorbTypeNeeds(refs, companions) {
100
- const plan = buildAccessorPlan(refs, this.deriveCtx);
101
- this.absorbPlan(companions, plan);
102
- for (const e of plan.errors)
103
- this.diag(Codes.UnsupportedIntentType, e.message, e.node);
104
- }
105
- // inNolaFnBody: directly inside a nola function body.
106
- // topLevel: current node is a direct child of Program (or an export wrapper).
107
- visit(node, inNolaFnBody, topLevel) {
108
- switch (node.type) {
109
- case "NolaExtractExpression": {
110
- const extract = node;
111
- // Tolerant-parse placeholder: diagnostic already recorded; leave the
112
- // span's original bytes untouched.
113
- if (extract.nolaError || !extract.quasi)
114
- return;
115
- this.lowerExtract(extract, inNolaFnBody);
116
- return;
117
- }
118
- case "NolaAskExpression": {
119
- const ask = node;
120
- if (!inNolaFnBody) {
121
- this.diag(Codes.AskOutsideNolaFunction, "`ask` is only allowed directly inside an infer function body.", node);
122
- }
123
- else {
124
- // Overwriting up to the operand also removes an `with <alias>` span;
125
- // the alias re-enters as ask's third argument.
126
- this.s.overwrite(node.start, ask.argument.start, "await __nola.ask(");
127
- const provider = ask.provider ? `, ${JSON.stringify(ask.provider.name)}` : "";
128
- // appendRight: extract-lowering suffixes use appendLeft at the same
129
- // position and must land BEFORE this closing paren.
130
- this.s.appendRight(node.end, `, __ctx${provider})`);
131
- this.usedRuntime = true;
132
- }
133
- this.visit(ask.argument, inNolaFnBody, false);
134
- return;
135
- }
136
- case "FunctionDeclaration": {
137
- const fn = node;
138
- if (!fn.nolaInfer) {
139
- break;
140
- }
141
- if (!topLevel) {
142
- // TODO: to discuss - wew should not have this limitation
143
- this.diag(Codes.NolaFnNotTopLevel, "infer functions must be declared at module top level.", node);
144
- break;
145
- }
146
- this.lowerInferFunction(fn);
147
- if (fn.body) {
148
- for (const child of children(fn.body)) {
149
- this.visit(child, true, false);
150
- }
151
- }
152
- return;
153
- }
154
- case "CallExpression": {
155
- const call = node;
156
- if (call.callee.type === "TaggedTemplateExpression") {
157
- this.lowerCallIntent(call, inNolaFnBody);
158
- return;
159
- }
160
- break;
161
- }
162
- default:
163
- break;
164
- }
165
- const isFunctionScope = node.type === "FunctionDeclaration" ||
166
- node.type === "FunctionExpression" ||
167
- node.type === "ArrowFunctionExpression" ||
168
- node.type === "ObjectMethod" ||
169
- node.type === "ClassMethod";
170
- const nextTopLevel = node.type === "File" ||
171
- node.type === "Program" ||
172
- (topLevel && (node.type === "ExportNamedDeclaration" || node.type === "ExportDefaultDeclaration"));
173
- for (const child of children(node)) {
174
- this.visit(child, isFunctionScope ? false : inNolaFnBody, nextTopLevel);
175
- }
176
- }
177
- lowerInferFunction(fn) {
178
- const infer = fn.nolaInfer;
179
- if (!infer)
180
- return;
181
- const name = fn.id?.name ?? "anonymous";
182
- // Removes `infer ` including trailing whitespace up to `function`.
183
- this.s.remove(infer.start, infer.end);
184
- const instruction = fn.nolaMarker?.instruction ?? "";
185
- if (fn.nolaMarker)
186
- this.s.remove(fn.nolaMarker.start, fn.nolaMarker.end);
187
- const body = fn.body;
188
- if (!body)
189
- return;
190
- // Harvest params into FunctionScopeInit args: every named param contributes
191
- // name (+ InferType when derivable); only `..`-prefixed params contribute
192
- // the live value. Underivable/unannotated types are silently omitted — an
193
- // UnsupportedType here would fail tsc-clean, and a missing arg type must
194
- // not block compilation the way it deliberately does for extractors.
195
- const argEntries = [];
196
- for (const p of (fn.params ?? [])) {
197
- if (p.nolaContextual)
198
- this.s.remove(p.nolaContextual.start, p.nolaContextual.end);
199
- const target = p.type === "AssignmentPattern" ? p.left : p;
200
- if (target.type !== "Identifier")
201
- continue; // patterns: parser already diagnosed `..` misuse; nothing to harvest
202
- const paramName = target.name;
203
- if (!paramName)
204
- continue;
205
- let typeField = "";
206
- const tsAnn = target.typeAnnotation?.typeAnnotation;
207
- if (tsAnn) {
208
- const derived = deriveTypeExpr(tsAnn, this.deriveCtx);
209
- if (derived.ok) {
210
- // ref() derivation is lazy — a named type's body only derives inside
211
- // the accessor plan, so "derivable" is only known once the plan builds
212
- // cleanly. On any transitive failure, omit like the shallow case:
213
- // nothing absorbed, no dangling __nola_type_* ref, no diagnostic.
214
- const plan = buildAccessorPlan(derived.refs, this.deriveCtx);
215
- if (plan.errors.length === 0) {
216
- typeField = `, type: ${derived.expr}`;
217
- this.absorbPlan(derived.companions, plan);
218
- }
219
- }
220
- }
221
- const ctxField = p.nolaContextual ? `, contextual: true, value: ${paramName}` : "";
222
- argEntries.push(`{ name: ${JSON.stringify(paramName)}${typeField}${ctxField} }`);
223
- }
224
- const argsField = argEntries.length > 0 ? `, args: [${argEntries.join(", ")}]` : "";
225
- this.s.appendRight(body.start + 1, "\n return __nola.intents.Intent(async (__ctx) => {");
226
- this.s.appendLeft(body.end - 1, ` }, __nola_file_ctx().func({ fn: ${JSON.stringify(name)}, instruction: ${JSON.stringify(instruction)}${argsField} }));\n`);
227
- this.meta.nolaFunctions.push(name);
228
- this.usedRuntime = true;
229
- }
230
- lowerCallIntent(call, inNolaFnBody) {
231
- const callee = call.callee;
232
- const { tag, quasi } = callee;
233
- if (quasi.expressions.length > 0) {
234
- this.diag(Codes.SubstitutionInCallMarker,
235
- // biome-ignore lint/suspicious/noTemplateCurlyInString: literal ${...} in a diagnostic message
236
- "`${...}` substitutions are not allowed in a call-intent marker.", quasi.expressions[0]);
237
- return;
238
- }
239
- for (const arg of call.arguments)
240
- this.checkCallIntentArg(arg);
241
- const instruction = quasi.quasis.map((q) => q.value.cooked ?? q.value.raw).join("");
242
- const tagText = this.source.slice(tag.start, tag.end);
243
- const simple = tag.type === "Identifier" || tag.type === "MemberExpression";
244
- const typeText = simple ? `<Awaited<ReturnType<typeof ${tagText}>>>` : "";
245
- const { line, column } = call.loc.start;
246
- this.s.appendLeft(call.start, `__nola.intents.FunctionCallingIntent${typeText}({ fn: `);
247
- const argsStart = call.arguments.length > 0 ? call.arguments[0].start : call.end - 1;
248
- this.s.overwrite(tag.end, argsStart, `, name: ${JSON.stringify(tagText)}, instruction: ${JSON.stringify(instruction)}, ` +
249
- `loc: ${JSON.stringify(`${line}:${column + 1}`)}, args: [`);
250
- this.s.overwrite(call.end - 1, call.end, "] })");
251
- this.usedRuntime = true;
252
- for (const arg of call.arguments)
253
- this.visit(arg, inNolaFnBody, false);
254
- }
255
- /**
256
- * NOLA2004 for untyped extractors in slot positions: direct args and anywhere
257
- * inside plain object/array literal nesting (mirrors the runtime slot walk).
258
- */
259
- checkCallIntentArg(arg) {
260
- if (arg.type === "NolaExtractExpression") {
261
- if (!arg.typeArgs) {
262
- this.diag(Codes.UntypedCallIntentArg, "an extractor used as a call-intent argument must have an explicit <T>.", arg);
263
- }
264
- return;
265
- }
266
- if (arg.type === "ObjectExpression") {
267
- for (const prop of arg.properties) {
268
- if (prop.type === "ObjectProperty")
269
- this.checkCallIntentArg(prop.value);
270
- }
271
- return;
272
- }
273
- if (arg.type === "ArrayExpression") {
274
- for (const el of arg.elements) {
275
- if (el)
276
- this.checkCallIntentArg(el);
277
- }
278
- }
279
- }
280
- lowerExtract(node, inNolaFnBody) {
281
- const quasi = node.quasi;
282
- if (!quasi)
283
- return;
284
- let typeExpr = "__nola.types.string()";
285
- let typeText = "<any>";
286
- if (node.typeArgs) {
287
- const t = node.typeArgs.params[0];
288
- if (t) {
289
- typeText = `<${this.source.slice(t.start, t.end)}>`;
290
- const derived = deriveTypeExpr(t, this.deriveCtx);
291
- if (derived.ok) {
292
- typeExpr = derived.expr;
293
- this.absorbTypeNeeds(derived.refs, derived.companions);
294
- }
295
- else {
296
- this.diag(Codes.UnsupportedIntentType, derived.message, derived.node);
297
- }
298
- }
299
- }
300
- const { line, column } = node.loc.start;
301
- // Prefix up to (but not including) the template preserves the template's
302
- // original bytes; each ${expr} gets __nola.fmt(...) wrapped around it.
303
- this.s.overwrite(node.start, quasi.start, `__nola.intents.ExtractIntent${typeText}({ instruction: `);
304
- for (const expr of quasi.expressions) {
305
- this.s.appendLeft(expr.start, "__nola.fmt(");
306
- this.s.appendLeft(expr.end, ")");
307
- }
308
- const suffix = `, type: ${typeExpr}, loc: ${JSON.stringify(`${line}:${column + 1}`)} })`;
309
- if (node.end > quasi.end) {
310
- // Replaces the <T> span (which follows the template).
311
- this.s.overwrite(quasi.end, node.end, suffix);
312
- }
313
- else {
314
- // appendLeft: must precede an enclosing ask's appendRight ")".
315
- this.s.appendLeft(node.end, suffix);
316
- }
317
- this.usedRuntime = true;
318
- for (const expr of quasi.expressions)
319
- this.visit(expr, inNolaFnBody, false);
320
- }
321
- }
322
- //# sourceMappingURL=lower.js.map
package/dist/lower.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"lower.js","sourceRoot":"","sources":["../src/lower.ts"],"names":[],"mappings":"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"}