libtlafmt

Crates.iolibtlafmt
lib.rslibtlafmt
version0.4.1
created_at2025-02-23 18:17:18.916701+00
updated_at2025-04-07 22:27:26.270829+00
descriptionA formatter library for TLA+ specs, core of tlafmt
homepage
repositoryhttps://github.com/domodwyer/tlafmt
max_upload_size
id1566552
size3,675,154
Dom (domodwyer)

documentation

https://docs.rs/tlafmt

README

crates.io docs.rs

A library crate for formatting TLA+ specs.

This crate is the formatter implementation for tlafmt.

Inner Workings

Formatting a TLA file occurs in three phases within this crate:

  1. The input file is parsed into an abstract syntax tree.
  2. The AST is then lowered into a formatter-specific representation.
  3. The format representation is rendered into output text.

Step (1) is performed when calling [ParsedFile::new()] to initialise a new instance, and steps (2) and (3) are performed when [ParsedFile::format()] is called, writing the output to a provided [std::io::Write] sink.

Testing

Run the tests with:

% cargo test --workspace

Some tests make use of cargo-insta.

In addition to unit tests, a corpus of example TLA specs1 are formatted and a snapshot of their output generated2 after each test run. These snapshots have to be "accepted" using cargo-insta (if their change is desirable) to cause future tests runs to pass.

Footnotes

  1. A majority sample of the official TLA examples repo - see libtlafmt/tests/corpus/ in the code repo.

  2. See libtlafmt/tests/snapshots/ in the code repo.

Commit count: 196

cargo fmt