Trunk: The last linter you’ll ever need 你需要的最后一个 Linter
Table of Contents
什么是 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 插件 或者 直接通过命令行。
方法一:
- 在 Vscode 中搜索 Trunk,点击安装
- 点击在侧边栏中的 Initialize Trunk 来初始化 Trunk
方法二:
- 在命令行里输入:
curl https://get.trunk.io -fsSL | bash
如何使用 Trunk⌗
- 在想要使用 Trunk 的文件夹输入
trunk init
- 使用 Trunk 的文件夹必须是一个 git repo (0.13.2-beta)
- 使用 Trunk 的文件夹必须包含一些文件,这样 Trunk 才能够分析需要开启哪些 Linter (0.13.2-beta)
trunk check
check 所有文件- 默认会 check 所有文件并输出错误信息
- 想要 check 单个文件,可以查看后面进阶使用的内容
trunk fmt
format 所有文件
trunk 也可以与 vscode 配合使用。只要在 vscode 安装了插件,trunk 会自动 lint 你的文件,并会在错误代码处提示。
trunk 的 formatter 也可以被 vscode 调用。可以参考Trunk VS Code Extension进行配置。
进阶使用⌗
一个想要配置 Trunk 中使用的 Linter,并且将 CI 的结果同步到云端,可以参考官方文档中 Check 和 Web App 部分。