1

存储库中设置的预提交挂钩之一是 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?

4

2 回答 2

0

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

yapf: Input filenames did not match any python files

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

于 2021-07-07T00:03:53.413 回答
0

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

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

此处的此输出表明已将pre-commit您未暂存的更改丢弃并丢弃,可能未显示您的期望。你可能想要pre-commit run yapf --all-files在演示发生的事情时

关于实际问题。

预提交不知道您正在使用的任何工具的实现细节(在某种程度上,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-commit'sexclude以便文件永远不会传递给yapf!以我为例(您没有分享您的.yapfignore或最小的案例)

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

现在 yapf 不会反对了hello*.py


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

于 2021-07-07T01:13:36.260 回答