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开发工具

Download history 13/week @ 2024-03-11 24/week @ 2024-04-01 16/week @ 2024-04-15 8/week @ 2024-04-22 15/week @ 2024-05-27 16/week @ 2024-06-03 15/week @ 2024-06-10 9/week @ 2024-06-17 10/week @ 2024-06-24

每月 51 次下载

MIT 许可证

100KB
2K SLoC


logo
treefmt — 一个命令行工具来格式化您的代码库

Support room on Matrix

状态:测试版

treefmt 通过一个命令应用所有必要的格式化工具到您的项目。

动机

在向任何项目做出贡献之前,通常需要将您的代码按照项目标准进行格式化。这项任务看起来很简单 —— 您可以简单地设置 IDE 中所需的语言格式化工具。但是,向多个项目贡献需要更多的努力:每次切换项目时,您都需要更改代码格式化工具的配置,或者手动调用格式化工具。

如果有一个适用于多种语言的通用格式化工具,并且每个项目都是特定的,那么格式化将更加容易。

关于 treefmt

treefmt 通过一个命令运行所有的格式化工具。它易于配置,执行速度快。

asciicast

其主要功能包括

  • 提供统一的 CLI 和输出:您不需要记住每个项目所需的格式化工具。一旦在配置文件中指定了格式化工具,您就可以通过一个命令启动所有工具并获得标准化的输出。
  • 并行运行所有格式化工具:标准的脚本会遍历您的文件夹并依次运行每个格式化工具。相比之下,treefmt 并行运行格式化工具。这样,格式化任务所需的时间更少。
  • 缓存已更改的文件:当格式化工具在脚本中运行时,它们会处理遇到的全部文件,无论代码是否已更改。如果只格式化已更改的文件,则可以消除这种不必要的操作。treefmt 缓存已更改的文件并将它们标记为需要重新格式化。

在任何文件夹中输入treefmt即可重格式化整个代码树。总的来说,您得到的是一个快速且简单的格式化解决方案。

安装

您可以通过下载二进制文件来安装此工具。您可以在这里找到不同架构的二进制文件。否则,您也可以从源代码安装软件包——使用cargo或借助nix。我们在文档中详细描述了安装过程。

使用方法

为了在项目中使用treefmt,请确保在根目录中存在配置文件treefmt.toml,并且已根据您的需求进行编辑。您可以使用以下命令生成它:

$ treefmt --init

您可以在项目根目录下这样运行treefmt

$ treefmt

要探索工具的标志和选项,请输入:

$ treefmt --help

此外,还有一个名为treefmt-nix的专用工具,用于同时使用treefmtnix

配置

格式化器在配置文件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