📦 Pre Commit — 预提交
v1.0.0Config Validator 校验 .pre-commit-config.yaml 文件的结构、仓库条目、钩子定义、本地钩子及最佳实践,共 5 类 23 条规则。
详细分析 ▾
运行时依赖
版本
pre-commit-config-validator 初始版本发布 - 验证 `.pre-commit-config.yaml` 文件的结构、仓库条目、hook 定义、本地 hook 及最佳实践 - 5 个类别共 23 条规则,支持 error、warning、info 三种级别 - 支持多种定向检查命令:full validation、repos、hooks、lint - 提供 text、JSON、summary 多种输出格式 - 内置 strict 模式,将 warning 视为 error,可一次性验证多个文件 - 为 CI 集成提供清晰的 exit code
安装命令
点击复制技能文档
校验 .pre-commit-config.yaml 的正确性、完整性及最佳实践。
命令
``bash
# 全量校验(所有规则)
python3 scripts/precommit_validator.py validate .pre-commit-config.yaml # 仅校验仓库/rev
python3 scripts/precommit_validator.py repos .pre-commit-config.yaml
# 仅校验 hook 定义
python3 scripts/precommit_validator.py hooks .pre-commit-config.yaml
# 仅校验最佳实践
python3 scripts/precommit_validator.py lint .pre-commit-config.yaml
# JSON 输出
python3 scripts/precommit_validator.py validate .pre-commit-config.yaml --format json
# 仅摘要
python3 scripts/precommit_validator.py validate .pre-commit-config.yaml --format summary
# 警告视为错误
python3 scripts/precommit_validator.py validate .pre-commit-config.yaml --strict
# 多文件
python3 scripts/precommit_validator.py validate file1.yaml file2.yaml
`
规则(23)
结构(5)
- S1 YAML 语法错误
S2 缺少顶层必填键reposS3repos不是列表S4repos列表为空(警告)- S5 未知顶层键(警告;已知:repos, default_language_version, default_stages, ci, minimum_pre_commit_version, exclude, fail_fast, files)
仓库条目(6)
R1 条目缺少repo键R2 非 local/meta 仓库缺少revR3hooks列表缺失或格式错误R4hooks列表为空(警告)R5rev使用分支名而非 tag/SHA(警告:main, master, develop, dev, trunk, HEAD)R6rev未固定(警告:无 semver 或 SHA)
Hook 定义(6)
H1 hook 缺少id- H2 同一仓库内 hook ID 重复(警告)
- H3 未知 hook 键(警告;已知:id, name, entry, language, files, exclude, types, types_or, stages, additional_dependencies, args, always_run, pass_filenames, require_serial, minimum_pre_commit_version, verbose, log_file, description)
H4stages值无效(已知:commit, merge-commit, push, prepare-commit-msg, commit-msg, post-checkout, post-commit, post-merge, post-rewrite, manual, pre-push, pre-rebase, pre-merge-commit)H5args不是列表H6additional_dependencies不是列表
本地 Hook(3)
L1 本地 hook 缺少entry(repo: local 必填)L2 本地 hook 缺少languageL3language值无效(警告;已知:python, node, ruby, rust, golang, docker, docker_image, dotnet, lua, perl, r, swift, system, pygrep, script, fail)
最佳实践(3)
- B1 repo: meta 未使用 check-hooks-apply 或 check-useless-excludes(警告)
- B2 Rev 不符合 semver 或 SHA 格式(警告)
- B3 仓库 URL 重复(警告)
B4fail_fast: true` 可能掩盖问题(提示)
输出格式
- text(默认):人类可读,带严重级别图标及规则码
- json:机器可读,含文件、诊断数组及计数
- summary:单行按严重级别计数
退出码
- 0:无问题(或仅警告/提示且未用 --strict)
- 1:发现错误(或警告且用了 --strict)
- 2:解析错误或文件未找到