--emit-schema FILE writes the compiler's resolved view once the program type-checks: every
record (fields, types, defaults as written, docs, places, attributes), every registry with its
entries in their final order after the open-registry merge (key, constant, index, file:line:col
of the entry and of each field value, and which file contributed which keys), every const, and
the zero-argument functions a fn value can name. Deterministic, schema_version 1; the runtime is
left out. `ludic schema [file] [-o FILE]` wraps it.
--check --diagnostics=json prints every error as one JSON array on stdout: the checker's and the
module rules' all, a parse or lowering error as the last. Tokens and nodes now carry a column.
Fields take several @attributes; @Ref(Registry), @OneOf(PREFIX_), @Range(lo, hi), @Unit("..."),
@Asset("..."), @Color on a field and @AppendOnly / @ByKey on a registry change nothing but go into
the schema, and @Ref naming no registry is an error (every one reported). Fixtures:
examples/lang/attributes.ludic, examples/rejected/ref_unknown.ludic, cases in ludic-dev test.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
10 lines
299 B
Text
10 lines
299 B
Text
# attributes: @Ref names a registry - there is no registry Vendorz, nor Shops (both are reported)
|
|
program R {
|
|
property Vendor { key: string = "" }
|
|
registry Vendors of Vendor
|
|
property Tool {
|
|
@Ref(Vendorz) seller: int = 0
|
|
@Ref(Shops) shop: int = 0
|
|
}
|
|
entry { print(VENDORS_COUNT) }
|
|
}
|