/** * `` — the attributes it cannot do without. * * An assertion is the one construct here whose whole worth is that it FAILS. A * half-written one is therefore worse than none at all: the config carries a * check, the reader believes the run was verified, and nothing was ever * compared. Both attributes are required, and an empty one counts as missing. * * The expression itself is not checked here. Both `that=` and `each=` are the * `if=` language, so each goes through the very same syntax check and the same * put-aside pass that resolves names once every sequence is known — a typo in a * column name is reported exactly as it would be in `if=`, because it IS the * same mistake. * * The two say different things and cannot be written together. `that=` reads * whole-run values ONCE; `each=` is answered on every row. A tag carrying both * would leave a reader to guess which of the two the sentence in `says=` * describes, and the answer would decide whether the run is checked once or a * million times. */ import { type Diagnostic } from '../errors/index.js'; import type { AttrContext, SelfClosingElementContext } from '../generated/TDCParser.js'; /** What this needs of the walk's context: somewhere to report, and the put-aside list. */ interface AssertSink { readonly diagnostics: Diagnostic[]; rememberExpression(attr: AttrContext, expr: string): void; } /** * Check one ``: its two attributes here, its expression in two passes. * * The expression's names are put aside rather than resolved on the spot, because * an assertion may name a sequence declared below it and the run resolves that * happily — checking mid-walk would invent errors on configs that work. */ export declare function checkAssertTag(el: SelfClosingElementContext, sink: AssertSink): void; export {}; //# sourceMappingURL=assert.d.ts.map