20 个版本 (10 个重大更新)
0.11.0 | 2022年11月11日 |
---|---|
0.10.2 | 2022年6月14日 |
0.10.1 | 2021年12月6日 |
0.10.0 | 2021年11月30日 |
0.5.0 | 2018年11月21日 |
#230 在 解析器实现
每月下载量 8,588
用于 20 个crate(11 个直接使用)
210KB
2.5K SLoC
rnix-parser

rnix 是用 Rust 编写的 Nix 语言解析器。
这可以用来操作 Nix AST,例如可以用来
- 在 GUI 上交互式渲染 Nix
- 格式化 Nix 代码
- 重命名标识符
等等!
现在 rnix 使用 @matklad 的 rowan crate 来确保
- 所有范围信息都得到保留,这意味着您可以使用 AST 来应用高亮等操作
- 打印出 AST 会打印出 100% 的原始代码。这并非夸张,即使是完全无效的 nix 代码,如本 README,在解析会话后也能保持完整(尽管 AST 会标记错误节点)
- 不使用递归就能轻松遍历树的方法
演示
示例可以在 examples/
目录中找到。
您还可以查看 nix-explorer:一个突出显示 Nix 代码中 AST 节点的示例。这演示了空白和命令是如何被保留的。
黑客开发
可以使用 cargo test
运行测试。
为了将所有 .expect
-文件更新到当前期望的结果,您可以运行 UPDATE_TESTS=1 cargo test
。
您可以使用 from-stdin
示例从标准输入解析 Nix 表达式。要尝试此操作,请在您的 shell 中运行以下命令
echo "[hello nix]" | cargo run --quiet --example from-stdin
发布清单
-
确保所有计划发布的PR已合并(或可选地将它们移动到另一个里程碑)。
-
关闭发布里程碑(如果有)。
-
在
master
(或发布分支)上运行cargo test
,确保所有更改都已拉取。 -
将以下补丁应用到nixpkgs-fmt
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"
然后运行
cargo test
。虽然计划也为rnix-parser添加模糊测试,但
nixpkgs-fmt
有一个相当完善的测试套件,在过去有助于捕捉回归。注意:API更改是可以的(并且修复应贡献给
nixpkgs-fmt
),行为更改则不行,除非事先明确讨论。 -
更新CHANGELOG.md。
-
在Cargo.toml中提升版本号,并重新运行
cargo build
以刷新锁文件。 -
提交并运行
nix build
。 -
标记发布并推送所有内容。
-
CI完成一分钟后,运行
cargo publish
。
再见jd91mzm2
遗憾的是,本项目的原始作者@jD91mZM2 已去世。他在线身份匿名,我们留下的只有他的代码。这只是他贡献的众多仓库之一。
依赖项
~1MB
~13K SLoC