Pylint使用git-pylint-commit-hook忽略文件

时间:2016-08-22 08:15:03

标签: python pylint pre-commit-hook alembic pre-commit

我正在使用pylint 1.6.4git-pylint-commit-hook 2.1.1来提交我提交的文件。我还使用alembic生成迁移,它们存储在<project-root>/migrations/versions

问题是生成的迁移无效,pylint会为它们生成警告。我可以使用--ignore = migrations忽略迁移。 (无论如何,Pylint默认忽略它们,因为迁移不是python模块,它只是一个目录)。但是git-pylint-commit-hook调用pylint和要更改的已更改文件列表。如果你给它一个文件名列表而不是模块,pylint不会检查文件是否应该被忽略。

当要提交新的迁移时,这会导致预提交挂钩失败。

Running pylint on migrations/versions/d1f0e08ea6d2_skill_table.py (file 2/13).. 8.6/10.00   FAILED
************* Module d1f0e08ea6d2_skill_table.py
C:  5, 0: Trailing whitespace (trailing-whitespace)
C:  1, 0: Invalid module name "d1f0e08ea6d2_skill_table" (invalid-name)
C: 16, 0: Import "from alembic import op" should be placed at the top of the module (wrong-import-position)
C: 17, 0: Import "import sqlalchemy as sa" should be placed at the top of the module (wrong-import-position)
C: 20, 0: Missing function docstring (missing-docstring)
C:171, 0: Missing function docstring (missing-docstring)

我尝试将#pylint: skip-file添加到每个迁移文件的开头。这会跳过该文件,但会生成并跳过该文件的错误:

Running pylint on migrations/versions/d1f0e08ea6d2_skill_table.py (file 2/13).. 0/10.00 FAILED
************* Module d1f0e08ea6d2_skill_table.py
I:  1, 0: Ignoring entire file (file-ignored)

所以我试图忽略.pylintrc中的错误file-ignored,如下所示:

[messages control]
disable=unused-argument

它的工作原理并且不再报告错误,但是预提交挂钩失败,因为它没有找到任何语句:

Running pylint on migrations/versions/d1f0e08ea6d2_skill_table.py (file 2/13).. 0/10.00 FAILED

Report
======
0 statements analysed.

请注意,在这两种情况下,pylint都会将文件评估为0.0 / 10.0,因此设置较低的失败阈值不是解决方案。

问题是,如何让git-pylint-commit-hook和pylint忽略我的迁移?

1 个答案:

答案 0 :(得分:0)

这是一个古老的问题,但我本人只是遇到了这个问题。我在搜索this线程时找到了答案。

要解决此问题,只需添加exclude指令和与您的文件夹匹配的正则表达式即可。

例如,如果要排除迁移文件夹,只需添加:

exclude: ^tests/

转到您的Pylint设置。我的看起来像这样:

-   repo: local
    hooks:
    -   id: system
        name: PyLint
        entry: poetry run pylint
        language: system
        exclude: ^alembic/
        files: \.py$