Trunk: The last linter you'll ever need 你需要的最后一个 Linter

什么是 Trunk

Trunk is a blazingly fast meta code checker and formatter with extraordinary features like caching, preexisting issue detection, a daemon, and a language server. It's managed completely via config-as-code, so you can easily pin your repo to specific versions of your linters, formatters, and static analyzers.

Trunk是一个速度极快的元代码检查器和格式化器,具有非凡的功能,如缓存、预先存在的问题检测、一个守护程序和一个语言服务器。它完全通过 "配置即代码 "来管理,所以你可以很容易地将你的 repo 固定在你的 linters、formatters 和静态分析器的特定版本上。

简单来说,Trunk 是一个元 linter 和 formatter(通过调用其他linter和formatter来对不同语言进行 lint 和 format )。通过使用它的 yaml 配置文件,你能够让你的项目使用指定的 linter,从而在本地以及CI获得一样的测试结果。

为什么需要 Linter & Trunk

Lint, or a linter, is a static code analysis tool used to flag programming errors, bugs, stylistic errors and suspicious constructs.

From Wikipaedia

通过使用 Linter,我们能够对代码进行静态分析,发现一些我们在编写代码过程中未发现的隐藏错误。

而 Trunk 则是一个元 Linter。通过使用它,我们可以避免针对每一种语言都需要独立去安装和配置 Linter。只需要通过 Trunk 以及写好的配置文件,我们可以轻松使用 Trunk 来帮助我们管理这些不同语言的 Linter 和 Formatter。

Trunk 目前所支持的 Linters:

Language Linters
All gitleaks
Ansible ansible-lint
Bash shellcheck, shfmt
Bazel, Starlark buildifier
C/C++ clang-format, clang-tidy
Cloudformation cfnlint
Docker hadolint
GitHub actionlint
Go gofmt, golangci-lint, semgrep
HAML haml-lint
Java semgrep
JS/TS eslint, prettier, semgrep
Kotlin detekt1, detekt-explicit1, detekt-gradle1, ktlint
Markdown markdownlint
Protobuf buf-breaking, buf-lint
Python autopep8, bandit, black, flake8, isort, pylint, semgrep, yapf
Ruby2 brakeman, rubocop, rufo, semgrep, standardrb
Rust2 clippy, rustfmt
Terraform terraform, tflint3
TOML taplo

如何安装 Trunk

接下来的内容将重点介绍 Trunk cli 和 vscode 配合的内容。想要将 Trunk CI 部署到 Github 上,可以参考官方的 Github Action.

安装 Trunk 有两种方式:通过 Vscode 插件 或者 直接通过命令行。

方法一:

  1. 在 Vscode 中搜索 Trunk,点击安装
  1. 点击在侧边栏中的 Initialize Trunk 来初始化 Trunk

方法二:

  1. 在命令行里输入:curl https://get.trunk.io -fsSL | bash

如何使用 Trunk

  1. 在想要使用 Trunk 的文件夹输入 trunk init
    • 使用 Trunk 的文件夹必须是一个 git repo (0.13.2-beta)
    • 使用 Trunk 的文件夹必须包含一些文件,这样 Trunk 才能够分析需要开启哪些 Linter (0.13.2-beta)
  2. trunk check check 所有文件
    • 默认会 check 所有文件并输出错误信息
    • 想要 check 单个文件,可以查看后面进阶使用的内容
  3. trunk fmt format 所有文件

trunk 也可以与 vscode 配合使用。只要在 vscode 安装了插件,trunk 会自动 lint 你的文件,并会在错误代码处提示。

trunk 的 formatter 也可以被 vscode 调用。可以参考Trunk VS Code Extension进行配置。

进阶使用

一个想要配置 Trunk 中使用的 Linter,并且将 CI 的结果同步到云端,可以参考官方文档中 Check 和 Web App 部分。