yapfignore 中包含的文件预提交 yapf 失败

pre-commit yapf fails on file included in yapfignore

repo 中设置的预提交挂钩之一是 yapf (.pre-commit-config.yaml):

repos:
# Note: the YAPF config is found in `.style.yapf` and `.yapfignore`
-   repo: https://github.com/pre-commit/mirrors-yapf
    rev: v0.29.0
    hooks:
    -   id: yapf

每当我更改包含在 .yapfignore 和 运行 预提交挂钩中的文件时,挂钩都会失败:

pre-commit run yapf                                                                                                                                                                                         
[WARNING] Unstaged files detected.
[INFO] Stashing unstaged files to ****************
yapf.....................................................................Failed
- hook id: yapf
- exit code: 1

yapf: Input filenames did not match any python files

任何人都知道如何避免 yapf 在 .yapfignore 中包含的文件上失败?

好的,问题的原因是 yapf 将 .yapfignore 中的文件视为不存在的文件,因此您将得到:

yapf: Input filenames did not match any python files

如果您对 .yapfignore 文件中的任何文件进行 运行 yapf,则会出错。为了在 pre-commit 中解决这个问题,我添加了一个不在 .yapfignore 中的现有 python 文件作为参数,因此 yapf 总是有一个文件要 运行 反对。

您的输出和您看到的行为中发生了一些事情,所以我将分别解释它们:

$ pre-commit run yapf                                                                                                                                                                                         
[WARNING] Unstaged files detected.
[INFO] Stashing unstaged files to ****************

此处的输出表明 pre-commit 接受了您未暂存的更改并丢弃了它们,可能没有显示您的期望。你可能想要 pre-commit run yapf --all-files 在演示发生了什么时

进入实际问题。

pre-commit 不知道您正在使用的任何工具的实现细节(在某种程度上,yapf 也不知道!)

当文件在 .yapfignore 中并且您将其传递给 yapf 时,它就像不存在一样(这很奇怪!)

$ tail -n999 hello_wat.py .yapfignore 
==> hello_wat.py <==
x =     5+  4

==> .yapfignore <==
hello*.py

$ yapf hello_wat.py 
yapf: Input filenames did not match any python files

您可能想要做的是利用 pre-commitexclude,这样文件就永远不会传递给 yapf!以我为例(你没有分享你的 .yapfignore 或一个最小的案例)

repos:
-   repo: https://github.com/pre-commit/mirrors-yapf
    rev: v0.29.0
    hooks:
    -   id: yapf
        exclude: ^hello\.*\.py$

现在 yapf 不会 运行 对抗 hello*.py!


免责声明:我是预提交的创建者。