A PartiQL parser for MoonBit.
Dependencies
moon add moonrockz/partiql-syntaximport {
"moonrockz/partiql-syntax" @syntax,
}import { "moonrockz/expect" } for "test"| Package | Content |
|---|---|
| moonrockz/partiql-syntax | Parse, recovery, print, format and diagnostic facade |
| moonrockz/partiql-syntax/ast | Public syntax ADTs, Span, ParseError, comments and scripts |
| moonrockz/partiql-syntax/lexer | lex, lex_recovering, token ADTs |
| moonrockz/partiql-syntax/parser | Statement, expression and script parsers |
| moonrockz/partiql-syntax/printer | Canonical and pretty printing |
| moonrockz/partiql-syntax/diagnostic | Source positions and rendered messages |
| moonrockz/partiql-syntax/sexp | S-expression rendering of syntax trees |
test "parse and print" {
let statement = @syntax.parse("select a from t where a > 1")
@expect.expect(@syntax.print(statement)).to_equal("SELECT a FROM t WHERE a > 1")
}test "format with comments" {
@expect.expect(@syntax.format("select a from t -- note")).to_equal("SELECT a FROM t;\n-- note\n")
}test "format at a chosen width" {
@expect.expect(@syntax.format("select a, b from t where x = 1", width=20)).to_equal("SELECT a, b\nFROM t\nWHERE x = 1;\n")
}test "recover a script" {
let result = @syntax.parse_script_recovering("SELECT a, , b FROM t; SELECT 1")
@expect.expect((result.errors.length(), result.script.statements.length())).to_equal((1, 2))
}test "render a diagnostic" {
let source = "SELECT FROM t"
let text = try {
ignore(@syntax.parse(source))
""
} catch {
error => @syntax.render(error, source, name="query.sql")
}
@expect.expect(text.contains("query.sql:1:8")).to_be_true()
}test "Unicode source position" {
let position = @syntax.position("'😀' + x", 7)
@expect.expect((position.line, position.column)).to_equal((1, 7))
}test {
@expect.expect(@syntax.format("select 1; select 2")).to_equal(
"SELECT 1;\nSELECT 2;\n",
)
}test {
let statement = @syntax.parse("select value 1 + 2")
@expect.expect(@syntax.print(statement)).to_equal("SELECT VALUE 1 + 2")
}fn render_message(message : String, span : Span, source : String, name~ : String, color? : Bool) -> StringInstall
Download zipA PartiQL parser for MoonBit.
Dependencies