// demo: run the three-lens pipeline over every embedded sample.
///|
fn main {
println("moonbit_static_analysis — structural ⊕ type ⊕ behavior")
println("====================================================")
for pair in @samples.all() {
let (file, src) = pair
println("")
println("=== \{file} ===")
println(
@pipeline.render_result(
@pipeline.run(src, file, @core.IfaceSymTab::empty()),
),
)
}
println("")
println(
"lens key: [structural]=binding walk [type]=symbols+inference [behavior]=abstract execution",
)
println("")
println("====================================================")
println(
"toolchain file kinds (.mbt / .mbtx / .mbti / .mbt.md / .mbtp — see EXTENSIONS.md)",
)
println("")
// counted from the sample, never hard-coded: see @moonfiles.fence_census
{
let (live, display) = @moonfiles.fence_census(@samples.literate_md)
println(
"=== demo.mbt.md (literate: \{live} live fence(s), \{display} display-only skipped) ===",
)
}
println(
@pipeline.render_result(
@moonfiles.literate(@samples.literate_md, "demo.mbt.md"),
),
)
println("=== demo.mbtx (script: import block + a body defect) ===")
println(
@pipeline.render_result(
@pipeline.run(
@samples.script_mbtx,
"demo.mbtx",
@core.IfaceSymTab::empty(),
),
),
)
println("=== demo.mbti (interface: unknown type reference) ===")
println(
@moonfiles.render_reports(
@moonfiles.iface(
@samples.iface_bad,
"demo.mbti",
@core.IfaceSymTab::empty(),
),
),
)
println("=== demo.mbtp (proof: string constant in a logic body) ===")
println(
@moonfiles.render_reports(@moonfiles.proof(@samples.proof_bad, "demo.mbtp")),
)
println("")
println("====================================================")
println(
"state-machine audit: pyroduct-shaped machine (via @statecheck — pyroduct is the consumer)",
)
println(@statecheck.render(@statecheck.pyroduct_flavored()))
println("")
println(
"state lens key: same three lenses on machine tables — states as bindings,",
)
println("drive-slot contract as types, step traces as abstract execution")
}