13 个版本
0.6.1 | 2023 年 10 月 14 日 |
---|---|
0.6.0 | 2023 年 9 月 28 日 |
0.5.0 | 2022 年 12 月 1 日 |
0.4.1 | 2022 年 5 月 3 日 |
0.2.2 | 2021 年 5 月 31 日 |
#268 在 开发工具
每月 51 次下载
100KB
2K SLoC
treefmt — 一个命令行工具来格式化您的代码库
状态:测试版
treefmt
通过一个命令应用所有必要的格式化工具到您的项目。
动机
在向任何项目做出贡献之前,通常需要将您的代码按照项目标准进行格式化。这项任务看起来很简单 —— 您可以简单地设置 IDE 中所需的语言格式化工具。但是,向多个项目贡献需要更多的努力:每次切换项目时,您都需要更改代码格式化工具的配置,或者手动调用格式化工具。
如果有一个适用于多种语言的通用格式化工具,并且每个项目都是特定的,那么格式化将更加容易。
关于 treefmt
treefmt
通过一个命令运行所有的格式化工具。它易于配置,执行速度快。
其主要功能包括
- 提供统一的 CLI 和输出:您不需要记住每个项目所需的格式化工具。一旦在配置文件中指定了格式化工具,您就可以通过一个命令启动所有工具并获得标准化的输出。
- 并行运行所有格式化工具:标准的脚本会遍历您的文件夹并依次运行每个格式化工具。相比之下,
treefmt
并行运行格式化工具。这样,格式化任务所需的时间更少。 - 缓存已更改的文件:当格式化工具在脚本中运行时,它们会处理遇到的全部文件,无论代码是否已更改。如果只格式化已更改的文件,则可以消除这种不必要的操作。
treefmt
缓存已更改的文件并将它们标记为需要重新格式化。
在任何文件夹中输入treefmt
即可重格式化整个代码树。总的来说,您得到的是一个快速且简单的格式化解决方案。
安装
您可以通过下载二进制文件来安装此工具。您可以在这里找到不同架构的二进制文件。否则,您也可以从源代码安装软件包——使用cargo或借助nix。我们在文档中详细描述了安装过程。
使用方法
为了在项目中使用treefmt
,请确保在根目录中存在配置文件treefmt.toml
,并且已根据您的需求进行编辑。您可以使用以下命令生成它:
$ treefmt --init
您可以在项目根目录下这样运行treefmt
:
$ treefmt
要探索工具的标志和选项,请输入:
$ treefmt --help
此外,还有一个名为treefmt-nix
的专用工具,用于同时使用treefmt
和nix
。
配置
格式化器在配置文件treefmt.toml
中指定,该文件通常位于项目根目录中。指定格式化器的通用方法如下:
[formatter.<name>]
command = "<formatter-command>"
options = [“<formatter-option-1>”...]
includes = ["<glob>"]
例如,如果您想在Nix项目中使用nixpkgs-fmt,在Rust项目中使用rustfmt,那么treefmt.toml
将如下所示:
[formatter.nix]
command = "nixpkgs-fmt"
includes = ["*.nix"]
[formatter.rust]
command = "rustfmt"
options = ["--edition", "2018"]
includes = ["*.rs"]
在配置中指定格式化器之前,请确保已安装。
要查找和分享现有的格式化器配方,请查看文档。
如果您是Nix用户,您可能还对treefmt-nix感兴趣,以便使用Nix配置和引入格式化器。
兼容性
Treefmt
与遵循以下规范的任何格式化器兼容。例如,您可以选择:
- clang-format用于Java
- gofmt用于Golang
- Prettier用于JavaScript/HTML/CSS
您可以在这里找到支持格式化器的完整列表。
即将推出的功能
此项目仍然相当新。未来我们还想添加对以下内容的支持:
- IDE集成
- 预提交钩子
- 多个格式化器的有效支持
相关项目
- EditorConfig:按项目统一文件缩进配置。
- prettier:一种针对多种语言的具有偏见的代码格式化工具。
- Super-Linter:GitHub的一个项目,用于检查您的所有代码。
- pre-commit:一个用于管理多语言预提交钩子的框架。
贡献
我们欢迎所有贡献!我们试图保持项目简单且专注。有关更多信息,请参阅贡献指南。
商业支持
需要帮助或定制?
与Numtide联系以获取报价。我们使公司能够轻松与开源项目合作:https://numtide.com/contact
许可
除非明确说明,否则任何有意提交以供包含的贡献将根据MIT许可进行许可,无需任何附加条款或条件。
依赖关系
约9-21MB
约293K SLoC