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解析器实现

Download history 1598/week @ 2024-03-14 1972/week @ 2024-03-21 2099/week @ 2024-03-28 1676/week @ 2024-04-04 1813/week @ 2024-04-11 1672/week @ 2024-04-18 1475/week @ 2024-04-25 1779/week @ 2024-05-02 1922/week @ 2024-05-09 1923/week @ 2024-05-16 2176/week @ 2024-05-23 2590/week @ 2024-05-30 2069/week @ 2024-06-06 2277/week @ 2024-06-13 2120/week @ 2024-06-20 1755/week @ 2024-06-27

每月下载量 8,588
用于 20 个crate(11 个直接使用)

MIT 许可证

210KB
2.5K SLoC

rnix-parser Crates.io 在 Matrix 上聊天

rnix 是用 Rust 编写的 Nix 语言解析器。

这可以用来操作 Nix AST,例如可以用来

  • 在 GUI 上交互式渲染 Nix
  • 格式化 Nix 代码
  • 重命名标识符

等等!

现在 rnix 使用 @matkladrowan 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