This provides a formatter for the Spicy language.
⚠ The implementation is very much a work in progress at the moment, and should be considered alpha quality.
This formatter is implemented in Rust with Topiary. It uses tree-sitter-spicy for parsing input source code into a tree-sitter CST. Formatting of that CST is done through Topiary queries. The actual queries are defined in src/query.scm. Changing the formatter should not require any changes to the Rust code, but only to the query file.
Test cases are collected and automatically discovered by the test harness in the corpus/ directory. To execute the test harness run
cargo t
For each corpus/<INPUT>.spicy
the repository contains a matching expected
result baseline corpus/<INPUT>.spicy.expected
. To update the baselines
execute the test harness with the environment variable UPDATE_BASELINE
set.
UPDATE_BASELINE=1 cargo t
This will update or if needed create the outdated baselines. When adding new tests to the corpus, commit the baseline as well.
To run formatting against an external corpus run the test suite with
SPICY_FORMAT_EXTERNAL_CORPUS
set.
SPICY_FORMAT_EXTERNAL_CORPUS=<PATH TO SPICY CORPUS> cargo t corpus_external
The suite automatically filters a filters out of some tests in the Spicy test suite with known unsupported constructs.