【Zig 日报】项目分享:Zsort 类似于 goimport 的导入整理工具

2 views
Skip to first unread message

ZigCC Team

unread,
Aug 8, 2026, 10:13:34 AM (19 hours ago) Aug 8
to zi...@googlegroups.com

文章链接:https://github.com/zigcc/forum/issues/356

zsort 是一个针对 Zig 语言的强主张(opinionated)导入(import)整理工具。它会对 声明进行排序、分组和提升,类似于 Python 的 或 Go 的 。

安装

注意:在 Linux 或 macOS 上需要 Zig 0.15.2 或更新版本(包含 0.16)。 在 Windows 上,请使用 WSL2。

Homebrew

预编译二进制文件

GitHub Releases 下载,解压,并将其添加到你的 环境变量中。

Zig 包(构建依赖)

添加到 :

在 中配置构建步骤:

可参考 目录下的完整工作示例。

从源码构建

用法

模式会为需要更改的文件打印统一格式的差异对比(unified diff)。

在文件的任意位置加上 可以使其免于被处理。

目录会被递归扫描。 中的条目、、、 和 会被自动跳过。

排序规则

将导入分为四个区间(band),由空行隔开:

  1. std / builtin — 和 模块。
  2. 第三方(Third-party) — 其他模块名(、 等),包括 。
  3. 本地(Local) — 包含 或以 结尾的路径,加上 Zig 的包级模块根目录(包自身的根源文件)和 (构建运行器的根模块)。
  4. 别名(Aliases) — 形如 的语句(其中 解析为上面的某个导入); 在此区间中排序最前。

在每个区间内部,普通导入排在成员导入(member imports)之前,然后两者均按路径(按字节)排序。如果两个导入共享相同的路径,则整行代码将用于打破平局(例如: 排在 之前)。无论输入顺序如何,输出都是确定性的。

** 运行前:**

运行后:

的作用

  • 对文件顶部的导入进行排序,并将其归入上述区间。
  • 将文件深处游离的导入和别名提升(hoist)到它们正确的区间中。
  • 保持前置注释紧跟其对应的导入。
  • 确保导入块与后续代码之间有一个空行。
  • 保留 文档注释和原始的行尾符(LF / CRLF)。

Pre-commit 钩子

添加到 :

要求 存在于 中()。可以通过 传递额外参数,例如 。只会检查 文件。

另请参阅

  • — 开发环境搭建与代码检查门禁
  • — 发布历史

许可证

MIT

加入我们

Zig 中文社区是一个开放的组织,我们致力于推广 Zig 在中文群体中的使用,有多种方式可以参与进来: 1. 供稿,分享自己使用 Zig 的心得 2. 改进 ZigCC 组织下的开源项目 3. 加入微信群Telegram 群组Google Groups 与更多 Zig 爱好者交流

Reply all
Reply to author
Forward
0 new messages