This document explains the overall process one ususually go through for adding new rules.
In the test_data
folder, create two new fixtures for the expected input and
outputs of the tool.
Eg: test_data/fn_args_singleline.bad.nix
and test_data/fn_args_singleline.good.nix
Put the content in there and format the files by hand.
Running cargo test
should fail if the fixtures aren't supported by the
current rewriting rules.
At this point, a PR can already be sent to demonstrate the failure.
Run the tool with --parse
to learn the names of nodes were are interested in:
$ cargo run -- --parse test_data/fn_args_singleline.bad.nix
NODE_ROOT 0..25 {
NODE_LAMBDA 0..24 {
NODE_PATTERN 0..17 { <- we need this one
TOKEN_CURLY_B_OPEN("{") 0..1
NODE_PAT_ENTRY 1..7 {
NODE_IDENT 1..7 {
TOKEN_IDENT("stdenv") 1..7
}
}
....
Then add the spacing rules in rules.rs
, together with the inline test:
// {arg}: 92 => { arg }: 92
.inside(NODE_PATTERN).after(T!['{']).single_space_or_newline()
.inside(NODE_PATTERN).before(T!['}']).single_space_or_newline()
At this point is makes sense to learn a bit more about rowan, the internals of the project, and this should definitely be covered in another document. Until then, please ping @matklad with any questions you might have.
Iterate until it works.
Push to the PR with the fixes.
Thanks for helping out!