name: 预检检查 description: 在提交或声明完成前,检测并运行项目的代码检查工具、格式化工具和类型检查工具。自动从项目配置文件中检测工具。
预检检查
在提交前运行项目的代码质量工具。及早捕获错误,而不是让预提交钩子来捕获。
工具检测
从项目配置文件中检测可用工具。按此顺序检查:
| 配置文件 | 工具 | 检查命令 | 修复命令 |
|---|---|---|---|
package.json 脚本 |
npm/yarn/pnpm | 查找 lint、typecheck、format、check 脚本 |
在可用时使用 --fix 运行 |
.eslintrc* / eslint.config.* |
ESLint | npx eslint <files> |
npx eslint --fix <files> |
tsconfig.json |
TypeScript | npx tsc --noEmit |
需要手动修复 |
.prettierrc* / package.json 中的 prettier |
Prettier | npx prettier --check <files> |
npx prettier --write <files> |
pyproject.toml 带有 [tool.ruff] |
Ruff | ruff check <files> |
ruff check --fix <files> && ruff format <files> |
pyproject.toml 带有 [tool.mypy] / mypy.ini |
mypy | mypy <files> |
需要手动修复 |
pyproject.toml 带有 [tool.black] |
Black | black --check <files> |
black <files> |
.flake8 / setup.cfg 带有 [flake8] |
Flake8 | flake8 <files> |
需要手动修复 |
go.mod |
Go | go vet ./... |
gofmt -w <files> |
Cargo.toml |
Rust | cargo clippy |
cargo clippy --fix |
.pre-commit-config.yaml |
pre-commit | pre-commit run --files <files> |
内部运行自动修复 |
执行顺序
按此顺序运行工具。每个步骤可能会更改后续步骤检查的代码。
- 格式化器 (自动修复): prettier, black, ruff format, gofmt
- 代码检查器 (尽可能自动修复): eslint --fix, ruff check --fix
- 类型检查器 (手动修复): tsc, mypy, pyright
范围
仅检查已暂存或修改的文件。不要对整个代码库运行检查。
# 已暂存文件
git diff --cached --name-only --diff-filter=ACM
# 未暂存修改文件
git diff --name-only --diff-filter=ACM
根据每个工具筛选相关扩展名(例如,仅 .ts/.tsx 用于 tsc,仅 .py 用于 ruff)。
自动修复协议
- 运行格式化器/代码检查器及其修复标志
- 重新暂存任何被修改的文件:
git add <fixed-files> - 报告更改内容:“在 src/auth/login.ts 中修复了 3 个格式化问题”
何时运行
- 在
git commit之前(由/ce:commit使用) - 在声明工作完成之前
- 在创建 PR 之前(由
/ce:pr使用)
失败处理
区分可修复和不可修复的错误:
可修复 (自动修复并继续):
- 格式化错误(空格、尾随逗号、导入排序)
- 支持自动修复的简单代码检查错误
需要人工决策 (报告并停止):
- 类型错误(错误类型、缺少属性)
- 没有自动修复的复杂代码检查错误
- 测试失败
- 不理解的错误
永远不要静默跳过失败的检查。