如何在precommit中单独运行仅支持单文件的xqlint检查器?
在pre-commit中优雅实现xqlint逐个文件检查
可以用Python脚本替代bash循环,实现跨平台且更优雅的逐个文件检查,有两种实现方式:
方式一:内嵌Python单行命令
在你的.pre-commit-config.yaml中添加如下本地钩子:
repos: - repo: local hooks: - id: xqlint-lint name: xqlint lint entry: python -c "import sys; import subprocess; [subprocess.run(['xqlint', 'lint', f], check=True) for f in sys.argv[1:]]" language: system files: \.xql$ # 根据你的文件后缀调整匹配规则
这个单行命令会接收pre-commit传入的所有目标文件,逐个调用xqlint lint进行检查,只要有任意一个文件检查失败,钩子就会直接报错退出,符合pre-commit的工作逻辑。
方式二:独立Python脚本(更易维护)
- 创建一个名为
xqlint_wrapper.py的脚本,内容如下:
import sys import subprocess def main(): for file_path in sys.argv[1:]: # 逐个执行xqlint检查,遇到失败直接退出 result = subprocess.run(["xqlint", "lint", file_path]) if result.returncode != 0: sys.exit(result.returncode) if __name__ == "__main__": main()
- 在
.pre-commit-config.yaml中引用这个脚本:
repos: - repo: local hooks: - id: xqlint-lint name: xqlint lint entry: python xqlint_wrapper.py language: system files: \.xql$
这两种方式都避免了依赖bash循环,在Windows、Linux、macOS平台都能正常运行,可移植性和可读性都比bash循环方案更好。
内容的提问来源于stack exchange,提问作者David McKee
相关产品推荐
相关产品推荐

