Each UI component: module, place, doc, xml and lss paths, props and state (type, default as written, place, doc), states_read (the header's states), derived fields with their types, functions and events as the template calls them (states and instance stripped), and the native tags its template uses. natives: every ui_native / ui_native_input call with a literal tag - tag, via, handler, place. schema_version stays 1; the lists are additions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
31 lines
2.6 KiB
Markdown
31 lines
2.6 KiB
Markdown
bump: minor
|
|
type: feat
|
|
**A schema for editors, and every error as JSON.** `ludicc --emit-schema out.json` (and `ludic
|
|
schema [file] [-o FILE]`) writes what the compiler resolved once the program type-checks: every
|
|
record with its fields' types, defaults, doc comments and places; every registry with its record,
|
|
prefix, resource file, openness and 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 brought
|
|
which entries in); every const; and every function a `fn` value can name, with the `fn_type` a field sees (its states stripped).
|
|
Deterministic, `"schema_version": 1`. Fields and registries carry editor attributes on the existing
|
|
`@` syntax - `@Ref(Registry)`, `@OneOf(PREFIX_)`, `@Range(lo, hi)`, `@Unit("m/s")`, `@Asset("gltf")`,
|
|
`@Color`, `@Node(field)`, `@Clip(field)`, `@Material(field)`, `@Tint(SLOT)`, `@Derived`, `@Text`, `@Multiline`, `@Key`, and `@AppendOnly` / `@ByKey` on
|
|
a registry - which change nothing but go into the schema; `@Ref` naming no registry is an error, and
|
|
so is `@Node` / `@Clip` naming a field that is not a glTF (`@Asset("gltf")`, or an `@Ref` to one), and
|
|
a listing `@OneOf` (`@OneOf(A, B)`, not a prefix `@OneOf(P_)`) naming a constant that does not exist, and `@Tint` naming no constant. A field may now carry several attributes. `ludicc --check
|
|
--diagnostics=json` (`ludic build --check --diagnostics=json`) prints every error as one JSON array
|
|
of `{file, line, col, severity, message}` on stdout; tokens and nodes now know their column.
|
|
|
|
`Build.schema_hash()` answers FNV-1a 64 of the program's own schema (the bytes `ludic schema` prints),
|
|
computed only when a program names it, and 0 under `ludicc --release`, which `ludic bundle` now passes.
|
|
|
|
A target no part of the program declares (an `@Ref` registry, an `@Tint` or listed `@OneOf` constant) is
|
|
a warning and `"unresolved": true` in the schema, so a package can name the game's registry; a name of
|
|
another kind is an error. `@OneOf` on a string field takes words, and every registry row's value is
|
|
checked against them.
|
|
|
|
The schema has a `components` list: each UI component's module, place, doc, template and stylesheet
|
|
paths, its `props` and `state` (type, default as written, place, doc), `states_read` (the states its
|
|
header names, apart from its model), `derived` fields with their types, and the `functions` and
|
|
`events` its template calls with their parameters (states and instance stripped), and the
|
|
registered native tags its template uses. A `natives` list gives every `ui_native` /
|
|
`ui_native_input` call with a literal tag: the tag, the function called, its handler and its place.
|