DSL generation meta-framework for MoonBit
Dependencies
///|
test {
let spec = @dslx.dslx("sql")
.node(
@dslx.node("Expr").case(
@dslx.case("Lit").fldx(@dslx.fldx("text", "String")),
),
)
.rule(
@dslx.rule("expr").body(@dslx.altx([@dslx.tokn("name"), @dslx.litx("*")])),
)
.rule(
@dslx.rule("decl").body(
@dslx.seqx([@dslx.litx("let"), @dslx.refx("expr")]),
),
)
inspect(@dslx.name(spec), content="sql")
inspect(@dslx.mods(@dslx.emit(spec)).length(), content="4")
let parsed = @dslx.runx(spec, "decl", "let user")
inspect(parsed.done, content="true")
inspect(parsed.posx, content="8")
match parsed.tree {
Some(tree) => inspect(tree.kids[1].kind, content="refx:expr")
None => inspect("none", content="tree")
}
}///|
test {
let prj = @dslx.proj("family")
.file(@dslx.file("README.md", "# family\n"))
.exmp(@dslx.file("examples/fwd.dsl", "schema User id:int\n"))
.dslx(@dslx.fwds())
.dslx(@dslx.wflw())
let files = @dslx.pack(prj)
inspect(files[0].path, content="README.md")
inspect(files[1].path, content="examples/fwd.dsl")
inspect(files[2].path, content="Fwd/astx.mbt")
inspect(@dslx.vprj(prj).length(), content="0")
}///|
test {
let file = @dslx.file("examples/fwd.dsl", "schema User id:int\n")
let prj = @dslx.proj("family").exmp(file).dslx(@dslx.fwds())
inspect(@dslx.fspc(prj, "Fwd") is Some(_), content="true")
inspect(@dslx.runp(prj, "Fwd", "sche", file.text).done, content="true")
inspect(@dslx.chex(prj, "Fwd", "sche", file).length(), content="0")
inspect(
@dslx.runp(prj, "Missing", "sche", file.text).digs[0].text,
content="unknown project spec",
)
}DSL generation meta-framework for MoonBit
Dependencies