工作区工具

问题

每个项目本来就自带一个会告诉你哪里不对的工具 —— tsc、dart analyze、ESLint、 Clippy、go vet、Ruff。但没有一个会告诉你:刚打印出来的那四十条警告,是不是 你这次的改动带来的。Gitcito 知道哪些文件是脏的,所以同一份列表用一个开关就能 回答这个问题。

问题面板与状态栏计数器

状态栏带着计数 —— 错误、警告、提示,就是 VS Code 教会所有人去读的那三个数字。 点它(或者在命令面板里选 问题),面板就在底部打开,按文件分组。点某一行, 文件会直接定位到那里。 在第一次扫描之前,它显示的是短横线而不是零:还没有人看过,而三个零会声称相反的事。

它会运行什么

仓库里有 Gitcito 就运行
pubspec.yaml dart analyze --format=machine
tsconfig.json tsc --noEmit
ESLint 配置 eslint -f json
Cargo.toml cargo clippy --message-format=short
go.mod go vet ./...
pyproject.toml 或 ruff.toml ruff check --output-format=json

Flutter 走的是 Dart 那一行: Flutter 应用就是 Dart 项目,flutter analyze 调用的也正是 dart analyze 用的那个分析器。

项目不必在仓库根目录。 这些标记文件也会往下找几层,所以 mobile/ 下的 Flutter 应用、apps/web 下的包都会被找到,每个分析器都在自己项目的目录里运行。如果祖先目录 已经覆盖了同类型的嵌套项目,就跳过 —— 根目录的 tsconfig.json 说的正是这个 —— 并且一次扫描最多十二个项目,毕竟 monorepo 不该拉起五十个编译器。

设置 → 通用 → 代码分析器决定它有多主动:打开面板时扫描(默认)、只在你点刷新时, 或者关闭 —— 关闭会把面板的分析器那一半、状态栏计数器和命令一起藏起来。

node_modules/.bin 里的可执行文件优先于 PATH 上的那个 —— 项目自己的脚本也是这么 解析的。所有工具并行运行,输出统一成一种形状、去重并排序:两个分析器报同一行, 只会得到一行。

不会自己运行。 大仓库上跑 tsc --noEmit 是几十秒的事,而且这些命令属于仓库 自己的工具链,不属于 Gitcito。它们在你打开面板或者按刷新时才开始,绝不自作主张。 这也是列表只是一张快照的原因:改了文件之后,在你重新运行之前它就过期了。

构建产物会被丢掉。 一个指向项目根目录的工具会检查它找到的一切,而它找到的东西 里包括 .next/build/chunks、打包出来的 dist、vendor 进来的副本 —— 几百条关于机器 写出来的代码的抱怨,会把关于你代码的那几条埋掉。Gitcito 会问 git 哪些文件被忽略, 把这些丢掉;但绝不丢掉已跟踪的文件:把构建产物提交进仓库是一个选择, git check-ignore 尊重这个选择。node_modules 无论如何都不进来。

只看你改过的

标题栏里的开关会丢掉所有你没碰过的文件里的问题。这才是值得一直开着的视图:一份 把代码库里所有警告拉平的清单,一周之内就变成了墙纸;而"这些是不是这次改动加进来 的",是提交之前值得回答的问题。

严重程度的小胶囊也会过滤。不亮表示全部显示;点亮其中一个就只看那一类。

限制

  • 没有语言服务器。 这是一次扫描,不是常驻进程:打字时不会有波浪线,你不问 就不会有结果。
  • 没装的工具会被点名,而不是藏起来。 页脚会说哪个没跑成,因为一份没有解释的 空列表,比一份有理由的短列表更糟。
  • 只认识机器可读的输出。 每个分析器都按它自己文档化的机器格式解析;被配置成 输出别的东西的工具,在这里是隐形的。
  • 上限是五千条问题。 超过之后面板会说明并停下 —— 到那个地步的仓库,麻烦比 滚动条大多了。

另见: 本地 CI · 集成终端

在 GitHub 上改进这份翻译