rnix is a parser for the Nix language written in Rust.
This can be used to manipulate the Nix AST and can for example be used for:
and a lot more!
rnix nowadays uses @matklad's rowan crate to ensure:
Examples can be found in the examples/
directory.
You may also want to see nix-explorer: An example that highlights AST nodes in Nix code. This demonstrates how whitespaces and commands are preserved.
Tests can be run with cargo test
.
In order to update all .expect
-files to the currently expected results,
you may run UPDATE_TESTS=1 cargo test
.
You can parse Nix expressions from standard input using the from-stdin
example.
To try that, run the following in your shell:
sh
echo "[hello nix]" | cargo run --quiet --example from-stdin
cargo test
on master
(or the branch to release from) with all changes being pulled in.Apply the following patch to nixpkgs-fmt: ```diff diff --git a/Cargo.toml b/Cargo.toml index 0891350..edad471 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,9 @@ repository = "https://github.com/nix-community/nixpkgs-fmt" [workspace] members = [ "./wasm" ]
+[patch.crates-io] +rnix = { path = "/home/ma27/Projects/rnix-parser" } + [dependencies] rnix = "0.9.0" smol_str = "0.1.17" ```
and run cargo test
.
While it's planned to add fuzzing to rnix-parser
as well,
nixpkgs-fmt
has a decent test-suite that would've helped to catch regressions in the past.
Note: API changes are OK (and fixes should be contributed to nixpkgs-fmt
), behavioral changes
are not unless explicitly discussed before.
cargo build
to refresh the lockfile.nix build
.cargo publish
.Sadly, the original author of this project, @jD91mZM2 has passed away. His online presence was anonymous and what we have left is his code. This is but one of his many repos that he contributed to.