cargo-binstall
: cargo binstall typstyle
cargo install typstyle --locked
Usage:
Beautiful and reliable typst code formatter
Usage: typstyle.exe [OPTIONS] [INPUT]... [COMMAND]
Commands:
format-all Format all files in-place in the given directory
help Print this message or the help of the given subcommand(s)
Arguments:
[INPUT]... Path to the input files, if not provided, read from stdin. If multiple files are provided, they will be processed in order
Options:
-c, --column <COLUMN> The column width of the output [default: 80]
-a, --ast Print the AST of the input file
-p, --pretty-doc Print the pretty document
-i, --inplace Format the file in place
--check Run in 'check' mode. Exits with 0 if input is formatted correctly. Exits with 1 if formatting is required
-h, --help Print help
-V, --version Print version
Typical usage:
Inplace format a file:
typstyle -i file.typ
Format a file and print the result to stdout:
typstyle file.typ
Inplace format file list:
typstyle -i file1.typ file2.typ file3.typ
Format all files in a directory. If the not provided, it will recursively format all files in the current directory:
typstyle format-all dir
Read from stdin and print the result to stdout:
cat file.typ | typstyle > file-formatted.typ
typstyle has been integrated into tinymist. You can use it in your editor by installing the tinymist plugin and set tinymist.formatterMode
to typstyle
.
There is an online version of the formatter at https://enter-tainer.github.io/typstyle/ that you can see how it formats your code.
Add this to your .pre-commit-config.yaml
:
- repo: https://github.com/Enter-tainer/typstyle
rev: '' # The the revision or tag you want to use
hooks:
- id: typstyle
If you find typstyle is not working as expected, you can use // @typstyle off
or /* @typstyle off */
to disable the formatter on the next node of code.
typstyle also gives up formatting part of the code if it is not able to format it correctly. Specifically, it will print that part as is if:
And please let us know the issue by creating an issue on the GitHub repository
cargo nextest run -E 'not test(~e2e)' --no-fail-fast
cargo insta review
We have set up multiple tests:
snapshots
directory and are compared to the current result when running the testsYou tell us! Bad formatting? Incorrect output? Please create an issue on the GitHub repository!
We've set up comprehensive test suites to ensure the correctness of the formatter. If you find any issues, please let us know! And we can add more tests to prevent the issue from happening again.
Why there is a need for another formatter? We already have typstfmt, typstfmt, prettypst. Why another one?
typstyle started because I had a bunch of ideas on how to improve typst source code formatting but kept finding typstfmt wasn't a good codebase to explore them with. Namely:
So I decided to write something from scratch. I started it about half a year ago and kept working on it in my spare time. Currently it lacks some advanced features but it is already usable for most of the cases. I hope you like it!