@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.
@@ -1,9 +1,9 @@
1
- import { Codes, children, } from "@nola-lang/ast";
1
+ import { Codes, children, walk, } from "@nola-lang/ast";
2
2
  import { companionSpecifierFor } from "../companion-name.js";
3
3
  import { collectTypeRegistry } from "../schema.js";
4
4
  import { buildAccessorPlan, collectTypeImports, deriveTypeExpr, } from "../schema-expr.js";
5
5
  import { anchorInsertedLines, SpanRecorder } from "../spans.js";
6
- import { ASK_OPEN, askClose, CALL_INTENT_CLOSE, callIntentArgsHead, callIntentOpen, callIntentTypeText, companionImportDecl, EXTRACT_DEFAULT_TYPE_EXPR, EXTRACT_DEFAULT_TYPE_TEXT, extractClose, extractOpen, FMT_CLOSE, FMT_OPEN, invocationArgEntry, invocationClose, invocationOpen, runtimeImport, typeAccessorDecl, typeArgsText, } from "./templates.js";
6
+ import { ASK_OPEN, askClose, BROKEN_CONSTRUCT, CALL_INTENT_CLOSE, callIntentArgsHead, callIntentOpen, callIntentTypeText, companionImportDecl, EXTRACT_DEFAULT_TYPE_EXPR, EXTRACT_DEFAULT_TYPE_TEXT, extractClose, extractOpen, extractOpenTemplate, FMT_CLOSE, FMT_OPEN, invocationArgEntry, invocationClose, invocationOpen, rawTemplateText, runtimeImport, SCOPE_PARAM, TEMPLATE_OPEN, templateCopy, typeAccessorDecl, typeArgsText, } from "./templates.js";
7
7
  export class Lowerer {
8
8
  s;
9
9
  source;
@@ -15,13 +15,27 @@ export class Lowerer {
15
15
  diagnostics = [];
16
16
  meta = { nolaFunctions: [] };
17
17
  usedRuntime = false;
18
+ /**
19
+ * Where a `${.member}` scope access may appear right now: "inplace" — the
20
+ * enclosing instruction literal stays where it is (extractor), so the scope
21
+ * parameter is inserted before the dot here; "copy" — the literal is copied
22
+ * elsewhere (marker / call hint) and the copy builder did the insertion;
23
+ * "none" — not inside a Nola instruction literal (NOLA2009).
24
+ */
25
+ scopeSite = "none";
26
+ /**
27
+ * True while visiting the holes of a COPIED instruction literal (marker /
28
+ * call hint). Nola constructs there have nowhere to lower to — the literal
29
+ * is re-emitted from source bytes — so they are NOLA2010.
30
+ */
31
+ inCopiedHole = false;
18
32
  /** named types needing a __nola_type_<Name> accessor in the appendix, in first-use order */
19
33
  typeAccessors = new Map();
20
34
  /** local binding name -> companion import emitted in the appendix */
21
35
  companionImports = new Map();
22
36
  /** shared derivation context (registry, imports, display file, bare ref names) */
23
37
  deriveCtx;
24
- /** policy for underivable `..`-contextual param types (compiler.underivableContextType) */
38
+ /** policy for underivable `.`-contextual param types (compiler.underivableContextType) */
25
39
  underivableContextType;
26
40
  constructor(source, file, ast, displayFile, options = {}) {
27
41
  this.s = new SpanRecorder(source);
@@ -82,7 +96,7 @@ export class Lowerer {
82
96
  this.diag(Codes.UnsupportedIntentType, e.message, e.node);
83
97
  }
84
98
  /**
85
- * A `..`-contextual param's type failed to derive (shallowly or in its
99
+ * A `.`-contextual param's type failed to derive (shallowly or in its
86
100
  * accessor plan). Resolve it per the configured policy; the returned expr
87
101
  * (if any) replaces the failed one.
88
102
  */
@@ -128,15 +142,42 @@ export class Lowerer {
128
142
  visit(node, inNolaFnBody, topLevel) {
129
143
  switch (node.type) {
130
144
  case "NolaExtractExpression": {
145
+ if (this.inCopiedHole) {
146
+ this.diagCopiedHole(node);
147
+ return;
148
+ }
131
149
  const extract = node;
132
- // Tolerant-parse placeholder: diagnostic already recorded; leave the
133
- // span's original bytes untouched.
134
- if (extract.nolaError || !extract.quasi)
150
+ // Tolerant-parse placeholder: the diagnostic is already recorded, so
151
+ // this only has to keep the generated text sane for the editor. The
152
+ // marker's own bytes would otherwise leave a dot at the cursor and TS
153
+ // would answer the next `.`-triggered completion with the global scope.
154
+ if (extract.nolaError || !extract.quasi) {
155
+ this.s.overwrite(node.start, node.end, BROKEN_CONSTRUCT, { broken: true });
135
156
  return;
157
+ }
136
158
  this.lowerExtract(extract, inNolaFnBody);
137
159
  return;
138
160
  }
161
+ case "NolaScopeAccess": {
162
+ if (this.scopeSite === "none") {
163
+ this.diag(Codes.ScopeAccessOutsideTemplate,
164
+ // biome-ignore lint/suspicious/noTemplateCurlyInString: literal ${...} in a diagnostic message
165
+ "`${.member}` scope access is only allowed inside a Nola instruction template (infer-function marker, extractor prompt, call-intent hint).", node);
166
+ this.s.overwrite(node.start, node.end, BROKEN_CONSTRUCT, { broken: true });
167
+ return;
168
+ }
169
+ // In place: `.args` → `__nola_s.args`; the dot and member stay verbatim
170
+ // (a half-typed `${.` placeholder gets the prefix too, so TS answers
171
+ // completion after the dot). Copied literals were prefixed by the copy.
172
+ if (this.scopeSite === "inplace")
173
+ this.s.appendLeft(node.start, SCOPE_PARAM);
174
+ return;
175
+ }
139
176
  case "NolaAskExpression": {
177
+ if (this.inCopiedHole) {
178
+ this.diagCopiedHole(node);
179
+ return;
180
+ }
140
181
  const ask = node;
141
182
  if (!inNolaFnBody) {
142
183
  this.diag(Codes.AskOutsideNolaFunction, "`ask` is only allowed directly inside an infer function body.", node);
@@ -174,11 +215,36 @@ export class Lowerer {
174
215
  case "CallExpression": {
175
216
  const call = node;
176
217
  if (call.callee.type === "TaggedTemplateExpression") {
218
+ if (this.inCopiedHole) {
219
+ this.diagCopiedHole(node);
220
+ return;
221
+ }
222
+ this.lowerCallIntent(call, inNolaFnBody);
223
+ return;
224
+ }
225
+ // Sigil-less form: extractor args imply the call intent. Simple
226
+ // callees only — `new`, optional calls, super(), and exotic callees
227
+ // (call results, parenthesized exprs) stay plain calls; the sigil
228
+ // form keeps its wider callee latitude.
229
+ if ((call.callee.type === "Identifier" || call.callee.type === "MemberExpression") &&
230
+ call.arguments.some((a) => this.hasExtractorSlot(a))) {
177
231
  this.lowerCallIntent(call, inNolaFnBody);
178
232
  return;
179
233
  }
180
234
  break;
181
235
  }
236
+ case "VariableDeclarator": {
237
+ // Reserved contextual binding (`const .x`, NOLA1014): the parser kept
238
+ // the declarator and parked the marker span on its id. Strict mode
239
+ // never gets here (raise throws); in tolerant mode the dot must not
240
+ // reach the generated TS, and `broken` opts the cursor position out of
241
+ // completion exactly as the parameter marker does.
242
+ const id = node.id;
243
+ if (id?.nolaReservedMarker) {
244
+ this.s.overwrite(id.nolaReservedMarker.start, id.nolaReservedMarker.end, "", { broken: true });
245
+ }
246
+ break;
247
+ }
182
248
  default:
183
249
  break;
184
250
  }
@@ -194,6 +260,65 @@ export class Lowerer {
194
260
  this.visit(child, isFunctionScope ? false : inNolaFnBody, nextTopLevel);
195
261
  }
196
262
  }
263
+ /**
264
+ * Sigil-less call-intent detection (2026-08-14 spec): a well-formed extractor
265
+ * in a slot position — a direct argument, or nested at any depth inside plain
266
+ * object/array literals (the same walk checkCallIntentArg performs). Tolerant
267
+ * placeholders (nolaError) do NOT count: a half-typed `f(..` stays a plain
268
+ * call, so the editor never lowers a call intent around a broken slot.
269
+ */
270
+ hasExtractorSlot(node) {
271
+ if (node.type === "NolaExtractExpression") {
272
+ return !node.nolaError;
273
+ }
274
+ if (node.type === "ObjectExpression") {
275
+ return node.properties.some((p) => p.type === "ObjectProperty" && this.hasExtractorSlot(p.value));
276
+ }
277
+ if (node.type === "ArrayExpression") {
278
+ return node.elements.some((el) => el != null && this.hasExtractorSlot(el));
279
+ }
280
+ return false;
281
+ }
282
+ diagCopiedHole(node) {
283
+ this.diag(Codes.NolaConstructInMarker, "Nola constructs are not allowed inside an infer-function marker or call-intent hint hole.", node);
284
+ }
285
+ /**
286
+ * The instruction field of a copied instruction literal (marker / call hint):
287
+ * prose → JSON string; lexical holes → a template literal with fmt-wrapped
288
+ * holes; `${.member}` holes → the raw text as the instruction plus the
289
+ * template closure. Anchors point back at the literal's verbatim runs.
290
+ */
291
+ instructionFieldFor(quasi, hasScopeAccess, cooked) {
292
+ if (quasi.expressions.length === 0)
293
+ return { field: JSON.stringify(cooked), copyText: "", anchors: [], holes: [] };
294
+ const scopeNodes = [];
295
+ if (hasScopeAccess) {
296
+ walk(quasi, (n) => {
297
+ if (n.type === "NolaScopeAccess")
298
+ scopeNodes.push(n);
299
+ });
300
+ }
301
+ const copy = templateCopy(this.source, quasi, scopeNodes, hasScopeAccess ? "scope" : "fmt");
302
+ const field = hasScopeAccess
303
+ ? `${JSON.stringify(rawTemplateText(this.source, quasi))}, ${TEMPLATE_OPEN}${copy.text}`
304
+ : copy.text;
305
+ return { field, copyText: copy.text, anchors: copy.anchors, holes: quasi.expressions };
306
+ }
307
+ /** Visit the holes of a copied literal only to diagnose (NOLA2010 / NOLA2009) — the copy is already built. */
308
+ visitCopiedHoles(holes, inNolaFnBody) {
309
+ const prevSite = this.scopeSite;
310
+ const prevHole = this.inCopiedHole;
311
+ this.scopeSite = "copy";
312
+ this.inCopiedHole = true;
313
+ try {
314
+ for (const e of holes)
315
+ this.visit(e, inNolaFnBody, false);
316
+ }
317
+ finally {
318
+ this.scopeSite = prevSite;
319
+ this.inCopiedHole = prevHole;
320
+ }
321
+ }
197
322
  lowerInferFunction(fn) {
198
323
  const infer = fn.nolaInfer;
199
324
  if (!infer)
@@ -201,14 +326,14 @@ export class Lowerer {
201
326
  const name = fn.id?.name ?? "anonymous";
202
327
  // Removes `infer ` including trailing whitespace up to `function`.
203
328
  this.s.remove(infer.start, infer.end);
204
- const instruction = fn.nolaMarker?.instruction ?? "";
205
- if (fn.nolaMarker)
206
- this.s.remove(fn.nolaMarker.start, fn.nolaMarker.end);
329
+ const marker = fn.nolaMarker;
330
+ if (marker)
331
+ this.s.remove(marker.start, marker.end);
207
332
  const body = fn.body;
208
333
  if (!body)
209
334
  return;
210
335
  // Harvest params into FunctionScopeInit args: every named param contributes
211
- // name (+ InferType when derivable); only `..`-prefixed params contribute
336
+ // name (+ InferType when derivable); only `.`-prefixed params contribute
212
337
  // the live value. Plain params with underivable/unannotated types are
213
338
  // silently omitted in every mode — their type never describes a live value.
214
339
  // Contextual params follow the underivableContextType policy: a value the
@@ -217,11 +342,22 @@ export class Lowerer {
217
342
  const argEntries = [];
218
343
  const paramNames = [];
219
344
  for (const p of (fn.params ?? [])) {
345
+ // Tolerant-parse placeholder: a `.` context parameter whose name is
346
+ // still being typed. The node IS the marker, and its bytes sit exactly
347
+ // where the editor maps the cursor — leaving them would put a dot in the
348
+ // generated TS and TypeScript would answer the `.`-triggered completion
349
+ // with the whole global scope. A parameter list has nothing to stand in
350
+ // for, so the marker lowers to nothing; `broken` is what makes the editor
351
+ // opt the character after it out of completion (see spansToMappings).
352
+ if (p.nolaError) {
353
+ this.s.overwrite(p.start, p.end, "", { broken: true });
354
+ continue;
355
+ }
220
356
  if (p.nolaContextual)
221
357
  this.s.remove(p.nolaContextual.start, p.nolaContextual.end);
222
358
  const target = p.type === "AssignmentPattern" ? p.left : p;
223
359
  if (target.type !== "Identifier")
224
- continue; // patterns: parser already diagnosed `..` misuse; nothing to harvest
360
+ continue; // patterns: parser already diagnosed `.` misuse; nothing to harvest
225
361
  const paramName = target.name;
226
362
  if (!paramName)
227
363
  continue;
@@ -249,31 +385,48 @@ export class Lowerer {
249
385
  }
250
386
  argEntries.push(invocationArgEntry(paramName, typeExpr, Boolean(p.nolaContextual)));
251
387
  }
388
+ // The marker literal cannot stay between the name and `(`; its text lands
389
+ // in the wrapper closer. Prose is a JSON string as before; holes make it a
390
+ // template literal (lexical) or a prompt-template closure (`${.member}`),
391
+ // both copied byte-identically with anchors so the editor keeps completion,
392
+ // hover and precise TS errors inside the marker.
393
+ const inst = marker?.quasi !== undefined
394
+ ? this.instructionFieldFor(marker.quasi, marker.hasScopeAccess === true, marker.instruction)
395
+ : { field: JSON.stringify(marker?.instruction ?? ""), copyText: "", anchors: [], holes: [] };
396
+ const close = invocationClose(name, inst.field, argEntries);
397
+ const copyAt = inst.copyText ? close.indexOf(inst.copyText) : -1;
398
+ const anchors = copyAt >= 0 ? inst.anchors.map((a) => ({ ...a, textOffset: a.textOffset + copyAt })) : undefined;
252
399
  this.s.appendRight(body.start + 1, invocationOpen(paramNames));
253
- this.s.appendLeft(body.end - 1, invocationClose(name, instruction, argEntries));
400
+ this.s.appendLeft(body.end - 1, close, anchors ? { anchors } : {});
254
401
  this.meta.nolaFunctions.push(name);
255
402
  this.usedRuntime = true;
403
+ this.visitCopiedHoles(inst.holes, false);
256
404
  }
257
405
  lowerCallIntent(call, inNolaFnBody) {
258
- const callee = call.callee;
259
- const { tag, quasi } = callee;
260
- if (quasi.expressions.length > 0) {
261
- this.diag(Codes.SubstitutionInCallMarker,
262
- // biome-ignore lint/suspicious/noTemplateCurlyInString: literal ${...} in a diagnostic message
263
- "`${...}` substitutions are not allowed in a call-intent marker.", quasi.expressions[0]);
264
- return;
265
- }
406
+ const tagged = call.callee.type === "TaggedTemplateExpression" ? call.callee : undefined;
407
+ // The hint literal is removed with the `(` and re-emitted inside the args
408
+ // head same copy-and-anchor treatment as the infer-function marker.
409
+ const inst = tagged
410
+ ? this.instructionFieldFor(tagged.quasi, tagged.quasi.nolaHasScopeAccess === true, tagged.quasi.quasis.map((q) => q.value.cooked ?? q.value.raw).join(""))
411
+ : { field: '""', copyText: "", anchors: [], holes: [] };
266
412
  for (const arg of call.arguments)
267
413
  this.checkCallIntentArg(arg);
268
- const instruction = quasi.quasis.map((q) => q.value.cooked ?? q.value.raw).join("");
269
- const tagText = this.source.slice(tag.start, tag.end);
270
- const simple = tag.type === "Identifier" || tag.type === "MemberExpression";
271
- const typeText = simple ? callIntentTypeText(tagText) : "";
414
+ // In the tagged form the callee expression is the tag; either way its
415
+ // bytes stay verbatim in place as the `fn:` value, and the overwrite from
416
+ // its end to the first argument removes the marker (if any) and the `(`.
417
+ const callee = tagged ? tagged.tag : call.callee;
418
+ const calleeText = this.source.slice(callee.start, callee.end);
419
+ const simple = callee.type === "Identifier" || callee.type === "MemberExpression";
420
+ const typeText = simple ? callIntentTypeText(calleeText) : "";
272
421
  this.s.appendLeft(call.start, callIntentOpen(typeText));
273
422
  const argsStart = call.arguments.length > 0 ? call.arguments[0].start : call.end - 1;
274
- this.s.overwrite(tag.end, argsStart, callIntentArgsHead(tagText, instruction, call.loc.start));
423
+ const head = callIntentArgsHead(calleeText, inst.field, call.loc.start);
424
+ const copyAt = inst.copyText ? head.indexOf(inst.copyText) : -1;
425
+ const anchors = copyAt >= 0 ? inst.anchors.map((a) => ({ ...a, textOffset: a.textOffset + copyAt })) : undefined;
426
+ this.s.overwrite(callee.end, argsStart, head, anchors ? { anchors } : {});
275
427
  this.s.overwrite(call.end - 1, call.end, CALL_INTENT_CLOSE);
276
428
  this.usedRuntime = true;
429
+ this.visitCopiedHoles(inst.holes, inNolaFnBody);
277
430
  for (const arg of call.arguments)
278
431
  this.visit(arg, inNolaFnBody, false);
279
432
  }
@@ -326,15 +479,23 @@ export class Lowerer {
326
479
  // original bytes; each ${expr} gets __nola.fmt(...) wrapped around it.
327
480
  // An authored <T> is copied into the prefix byte-identically — anchor it
328
481
  // so navigation/hover/completion work on the type text at the ask site.
329
- const open = extractOpen(typeText);
482
+ // A `${.member}` literal is a prompt template: instruction keeps the raw
483
+ // text (holes verbatim) and the literal itself becomes the body of the
484
+ // template closure, in place — its bytes stay verbatim, only the scope
485
+ // parameter is inserted before each scope dot (see the NolaScopeAccess
486
+ // visit). Lexical holes inside a template are not fmt-wrapped: tpl formats.
487
+ const isTemplate = quasi.nolaHasScopeAccess === true;
488
+ const open = isTemplate ? extractOpenTemplate(typeText, rawTemplateText(this.source, quasi)) : extractOpen(typeText);
330
489
  const typeNode = node.typeArgs?.params[0];
331
490
  const anchors = typeNode
332
491
  ? [{ sourceStart: typeNode.start, sourceEnd: typeNode.end, textOffset: open.indexOf(typeText) + 1 }]
333
492
  : undefined;
334
- this.s.overwrite(node.start, quasi.start, open, anchors);
335
- for (const expr of quasi.expressions) {
336
- this.s.appendLeft(expr.start, FMT_OPEN);
337
- this.s.appendLeft(expr.end, FMT_CLOSE);
493
+ this.s.overwrite(node.start, quasi.start, open, { anchors });
494
+ if (!isTemplate) {
495
+ for (const expr of quasi.expressions) {
496
+ this.s.appendLeft(expr.start, FMT_OPEN);
497
+ this.s.appendLeft(expr.end, FMT_CLOSE);
498
+ }
338
499
  }
339
500
  const suffix = extractClose(typeExpr, node.loc.start);
340
501
  if (node.end > quasi.end) {
@@ -346,8 +507,15 @@ export class Lowerer {
346
507
  this.s.appendLeft(node.end, suffix);
347
508
  }
348
509
  this.usedRuntime = true;
349
- for (const expr of quasi.expressions)
350
- this.visit(expr, inNolaFnBody, false);
510
+ const prevSite = this.scopeSite;
511
+ this.scopeSite = isTemplate ? "inplace" : "none";
512
+ try {
513
+ for (const expr of quasi.expressions)
514
+ this.visit(expr, inNolaFnBody, false);
515
+ }
516
+ finally {
517
+ this.scopeSite = prevSite;
518
+ }
351
519
  }
352
520
  }
353
521
  //# sourceMappingURL=lowerer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lowerer.js","sourceRoot":"","sources":["../../src/lower/lowerer.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { Position } from "@nola-lang/ast";
2
2
  import { type CompanionImport } from "../schema-expr.js";
3
+ import type { EditAnchor } from "../spans.js";
3
4
  /**
4
5
  * Every piece of TS text the lowering emits lives here; the Lowerer decides
5
6
  * WHERE each piece lands (span mechanics), this module decides WHAT it says.
@@ -34,19 +35,47 @@ export declare const askClose: (providerName?: string) => string;
34
35
  /**
35
36
  * The wrapper opener. The `void` read of every named param forces the
36
37
  * executor closure to capture them: V8 drops variables an arrow never
37
- * references, so a `..user` the body does not mention would otherwise be
38
+ * references, so a `.user` the body does not mention would otherwise be
38
39
  * unavailable to the debugger's evaluate — hover over the param showed
39
40
  * nothing. One statement per param (a comma expression is TS2695 under
40
41
  * strict); they ride the unmapped wrapper line, so stepping never sees them.
41
42
  */
42
43
  export declare const invocationOpen: (paramNames: string[]) => string;
43
- /** One FunctionScopeInit args entry; only contextual (`..`) params carry the live value. */
44
+ /** One FunctionScopeInit args entry; only contextual (`.`) params carry the live value. */
44
45
  export declare const invocationArgEntry: (name: string, typeExpr: string | undefined, contextual: boolean) => string;
45
- export declare const invocationClose: (fnName: string, instruction: string, argEntries: string[]) => string;
46
+ /**
47
+ * The wrapper closer. `instructionField` is the full JS text after
48
+ * `instruction: ` — a JSON string for prose, a template literal for a marker
49
+ * with lexical holes, or `"<raw>", template: (__nola_s) => __nola.tpl\`…\`` for
50
+ * a prompt template (see templateCopy).
51
+ */
52
+ export declare const invocationClose: (fnName: string, instructionField: string, argEntries: string[]) => string;
53
+ /**
54
+ * Copies a template literal's bytes for re-emission elsewhere (marker / call
55
+ * hint — their bytes cannot stay where they are). Scope mode inserts
56
+ * SCOPE_PARAM before every `${.member}` node; fmt mode wraps every hole
57
+ * expression in __nola.fmt(...). Anchors cover the verbatim runs (textOffset
58
+ * relative to the returned text) so editor features survive the move.
59
+ */
60
+ export declare function templateCopy(source: string, quasi: {
61
+ start: number;
62
+ end: number;
63
+ expressions: Array<{
64
+ start: number;
65
+ end: number;
66
+ }>;
67
+ }, scopeNodes: Array<{
68
+ start: number;
69
+ end: number;
70
+ }>, mode: "scope" | "fmt"): {
71
+ text: string;
72
+ anchors: EditAnchor[];
73
+ };
46
74
  /** Result type argument recovered from the tagged callee (simple tags only). */
47
75
  export declare const callIntentTypeText: (tagText: string) => string;
48
76
  export declare const callIntentOpen: (typeText: string) => string;
49
- export declare const callIntentArgsHead: (tagText: string, instruction: string, loc: Position) => string;
77
+ /** `instructionField` is the full JS text after `instruction: ` (see invocationClose). */
78
+ export declare const callIntentArgsHead: (tagText: string, instructionField: string, loc: Position) => string;
50
79
  export declare const CALL_INTENT_CLOSE = "] })";
51
80
  /** An untyped extractor resolves as a string. */
52
81
  export declare const EXTRACT_DEFAULT_TYPE_EXPR = "__nola.types.string()";
@@ -54,8 +83,33 @@ export declare const EXTRACT_DEFAULT_TYPE_TEXT = "<any>";
54
83
  /** The extractor's `<T>` echoed as written in the source. */
55
84
  export declare const typeArgsText: (sourceText: string) => string;
56
85
  export declare const extractOpen: (typeText: string) => string;
86
+ /** Reserved parameter name of a lowered prompt-template closure. */
87
+ export declare const SCOPE_PARAM = "__nola_s";
88
+ /** `template:` field text up to (not including) the copied / in-place literal. */
89
+ export declare const TEMPLATE_OPEN = "template: (__nola_s) => __nola.tpl";
90
+ /** The literal's inner text, holes verbatim — the string form of a template's instruction. */
91
+ export declare const rawTemplateText: (source: string, quasi: {
92
+ start: number;
93
+ end: number;
94
+ }) => string;
95
+ /**
96
+ * Extractor opener for a `${.member}` template literal: the raw text as the
97
+ * instruction string, then the closure whose body is the in-place literal.
98
+ */
99
+ export declare const extractOpenTemplate: (typeText: string, rawInstruction: string) => string;
57
100
  /** Wraps each `${expr}` substitution in the extractor template. */
58
101
  export declare const FMT_OPEN = "__nola.fmt(";
59
102
  export declare const FMT_CLOSE = ")";
60
103
  export declare const extractClose: (typeExpr: string, loc: Position) => string;
104
+ /**
105
+ * Stand-in for a construct the parser could only recover as a placeholder —
106
+ * a `..` whose prompt is still being typed, or the reserved `(..)` form. It
107
+ * exists for the EDITOR only (strict mode throws on these, so no build ever
108
+ * emits it) and has two jobs: keep the generated text parseable, and end in a
109
+ * character that is not a dot. TypeScript only answers a `.`-triggered
110
+ * completion when a dot precedes the position, so the half-typed marker stops
111
+ * pulling the whole global scope into the suggestion list. `never` is
112
+ * assignable everywhere, so the placeholder adds no type errors of its own.
113
+ */
114
+ export declare const BROKEN_CONSTRUCT = "(undefined as never)";
61
115
  //# sourceMappingURL=templates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lower/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE1E;;;GAGG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,aAAa,MAAM,WAIhD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,WACmD,CAAC;AAE/G;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,WAAW,MAAM,EAAE,KAAK,eAAe,WACwD,CAAC;AAEpI,6EAA6E;AAC7E,eAAO,MAAM,OAAO,GAAI,kBAAkB,QAAQ,WAA4B,CAAC;AAE/E,eAAO,MAAM,QAAQ,sBAAsB,CAAC;AAE5C,yFAAyF;AACzF,eAAO,MAAM,QAAQ,GAAI,eAAe,MAAM,WAC0B,CAAC;AAEzE;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAI,YAAY,MAAM,EAAE,WACsD,CAAC;AAE1G,4FAA4F;AAC5F,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS,EAAE,YAAY,OAAO,WACoC,CAAC;AAEvI,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,aAAa,MAAM,EAAE,YAAY,MAAM,EAAE,WAGxF,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,WAA+C,CAAC;AAElG,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,WAA6D,CAAC;AAE7G,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,EAAE,aAAa,MAAM,EAAE,KAAK,QAAQ,WAErC,CAAC;AAElD,eAAO,MAAM,iBAAiB,SAAS,CAAC;AAExC,iDAAiD;AACjD,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AACjE,eAAO,MAAM,yBAAyB,UAAU,CAAC;AAEjD,6DAA6D;AAC7D,eAAO,MAAM,YAAY,GAAI,YAAY,MAAM,WAAsB,CAAC;AAEtE,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,WAA8D,CAAC;AAE3G,mEAAmE;AACnE,eAAO,MAAM,QAAQ,gBAAgB,CAAC;AACtC,eAAO,MAAM,SAAS,MAAM,CAAC;AAE7B,eAAO,MAAM,YAAY,GAAI,UAAU,MAAM,EAAE,KAAK,QAAQ,WACI,CAAC"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lower/templates.ts"],"names":[],"mappings":"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"}
@@ -12,10 +12,10 @@ import { accessorNameFor } from "../schema-expr.js";
12
12
  * (`const eager = go();`) reads it before the declaration runs and hits the TDZ.
13
13
  * It holds no state: `__nola.context.file` is memoized by path in the runtime.
14
14
  */
15
- export const runtimeImport = (displayFile) => `
16
- import { __nola } from "@nola-lang/runtime";
17
- __nola.useRuntime(${NOLA_EMIT});
18
- function __nola_file_ctx() { return __nola.context.file(${JSON.stringify(displayFile)}); }
15
+ export const runtimeImport = (displayFile) => `
16
+ import { __nola } from "@nola-lang/runtime";
17
+ __nola.useRuntime(${NOLA_EMIT});
18
+ function __nola_file_ctx() { return __nola.context.file(${JSON.stringify(displayFile)}); }
19
19
  `;
20
20
  /**
21
21
  * Appendix accessor for a named type. A `function` declaration for the same TDZ
@@ -39,22 +39,56 @@ export const askClose = (providerName) => `, __frame${providerName ? `, ${JSON.s
39
39
  /**
40
40
  * The wrapper opener. The `void` read of every named param forces the
41
41
  * executor closure to capture them: V8 drops variables an arrow never
42
- * references, so a `..user` the body does not mention would otherwise be
42
+ * references, so a `.user` the body does not mention would otherwise be
43
43
  * unavailable to the debugger's evaluate — hover over the param showed
44
44
  * nothing. One statement per param (a comma expression is TS2695 under
45
45
  * strict); they ride the unmapped wrapper line, so stepping never sees them.
46
46
  */
47
47
  export const invocationOpen = (paramNames) => `\n return __nola.intents.Intent(async (__frame) => {${paramNames.map((n) => ` void ${n};`).join("")}`;
48
- /** One FunctionScopeInit args entry; only contextual (`..`) params carry the live value. */
48
+ /** One FunctionScopeInit args entry; only contextual (`.`) params carry the live value. */
49
49
  export const invocationArgEntry = (name, typeExpr, contextual) => `{ name: ${JSON.stringify(name)}${typeExpr ? `, type: ${typeExpr}` : ""}${contextual ? `, contextual: true, value: ${name}` : ""} }`;
50
- export const invocationClose = (fnName, instruction, argEntries) => {
50
+ /**
51
+ * The wrapper closer. `instructionField` is the full JS text after
52
+ * `instruction: ` — a JSON string for prose, a template literal for a marker
53
+ * with lexical holes, or `"<raw>", template: (__nola_s) => __nola.tpl\`…\`` for
54
+ * a prompt template (see templateCopy).
55
+ */
56
+ export const invocationClose = (fnName, instructionField, argEntries) => {
51
57
  const argsField = argEntries.length > 0 ? `, args: [${argEntries.join(", ")}]` : "";
52
- return ` }, __nola_file_ctx().func({ fn: ${JSON.stringify(fnName)}, instruction: ${JSON.stringify(instruction)}${argsField} }));\n`;
58
+ return ` }, __nola_file_ctx().func({ fn: ${JSON.stringify(fnName)}, instruction: ${instructionField}${argsField} }));\n`;
53
59
  };
60
+ /**
61
+ * Copies a template literal's bytes for re-emission elsewhere (marker / call
62
+ * hint — their bytes cannot stay where they are). Scope mode inserts
63
+ * SCOPE_PARAM before every `${.member}` node; fmt mode wraps every hole
64
+ * expression in __nola.fmt(...). Anchors cover the verbatim runs (textOffset
65
+ * relative to the returned text) so editor features survive the move.
66
+ */
67
+ export function templateCopy(source, quasi, scopeNodes, mode) {
68
+ const inserts = mode === "scope"
69
+ ? scopeNodes.map((n) => [n.start, SCOPE_PARAM])
70
+ : quasi.expressions.flatMap((e) => [[e.start, FMT_OPEN], [e.end, FMT_CLOSE]]);
71
+ inserts.sort((a, b) => a[0] - b[0]);
72
+ let text = "";
73
+ const anchors = [];
74
+ let cursor = quasi.start;
75
+ for (const [pos, ins] of inserts) {
76
+ if (pos > cursor) {
77
+ anchors.push({ sourceStart: cursor, sourceEnd: pos, textOffset: text.length });
78
+ text += source.slice(cursor, pos);
79
+ }
80
+ text += ins;
81
+ cursor = pos;
82
+ }
83
+ anchors.push({ sourceStart: cursor, sourceEnd: quasi.end, textOffset: text.length });
84
+ text += source.slice(cursor, quasi.end);
85
+ return { text, anchors };
86
+ }
54
87
  /** Result type argument recovered from the tagged callee (simple tags only). */
55
88
  export const callIntentTypeText = (tagText) => `<Awaited<ReturnType<typeof ${tagText}>>>`;
56
89
  export const callIntentOpen = (typeText) => `__nola.intents.FunctionCallingIntent${typeText}({ fn: `;
57
- export const callIntentArgsHead = (tagText, instruction, loc) => `, name: ${JSON.stringify(tagText)}, instruction: ${JSON.stringify(instruction)}, ` +
90
+ /** `instructionField` is the full JS text after `instruction: ` (see invocationClose). */
91
+ export const callIntentArgsHead = (tagText, instructionField, loc) => `, name: ${JSON.stringify(tagText)}, instruction: ${instructionField}, ` +
58
92
  `loc: ${JSON.stringify(locText(loc))}, args: [`;
59
93
  export const CALL_INTENT_CLOSE = "] })";
60
94
  /** An untyped extractor resolves as a string. */
@@ -63,8 +97,30 @@ export const EXTRACT_DEFAULT_TYPE_TEXT = "<any>";
63
97
  /** The extractor's `<T>` echoed as written in the source. */
64
98
  export const typeArgsText = (sourceText) => `<${sourceText}>`;
65
99
  export const extractOpen = (typeText) => `__nola.intents.ExtractIntent${typeText}({ instruction: `;
100
+ /** Reserved parameter name of a lowered prompt-template closure. */
101
+ export const SCOPE_PARAM = "__nola_s";
102
+ /** `template:` field text up to (not including) the copied / in-place literal. */
103
+ export const TEMPLATE_OPEN = `template: (${SCOPE_PARAM}) => __nola.tpl`;
104
+ /** The literal's inner text, holes verbatim — the string form of a template's instruction. */
105
+ export const rawTemplateText = (source, quasi) => source.slice(quasi.start + 1, quasi.end - 1);
106
+ /**
107
+ * Extractor opener for a `${.member}` template literal: the raw text as the
108
+ * instruction string, then the closure whose body is the in-place literal.
109
+ */
110
+ export const extractOpenTemplate = (typeText, rawInstruction) => `__nola.intents.ExtractIntent${typeText}({ instruction: ${JSON.stringify(rawInstruction)}, ${TEMPLATE_OPEN}`;
66
111
  /** Wraps each `${expr}` substitution in the extractor template. */
67
112
  export const FMT_OPEN = "__nola.fmt(";
68
113
  export const FMT_CLOSE = ")";
69
114
  export const extractClose = (typeExpr, loc) => `, type: ${typeExpr}, loc: ${JSON.stringify(locText(loc))} })`;
115
+ /**
116
+ * Stand-in for a construct the parser could only recover as a placeholder —
117
+ * a `..` whose prompt is still being typed, or the reserved `(..)` form. It
118
+ * exists for the EDITOR only (strict mode throws on these, so no build ever
119
+ * emits it) and has two jobs: keep the generated text parseable, and end in a
120
+ * character that is not a dot. TypeScript only answers a `.`-triggered
121
+ * completion when a dot precedes the position, so the half-typed marker stops
122
+ * pulling the whole global scope into the suggestion list. `never` is
123
+ * assignable everywhere, so the placeholder adds no type errors of its own.
124
+ */
125
+ export const BROKEN_CONSTRUCT = "(undefined as never)";
70
126
  //# sourceMappingURL=templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/lower/templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/lower/templates.ts"],"names":[],"mappings":"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"}