带有 .toml 配置和预提交钩子的 Flakehell

如何解决带有 .toml 配置和预提交钩子的 Flakehell

我正在尝试将 flakehell 作为预提交钩子运行。

我的 .pre-commit-config.yaml:

repos:
-   repo: local
    hooks:             
    -   id: flakehell
        name: flakehell
        entry: flakehell lint project/
        language: python
        pass_filenames: true
        stages: [push,commit]
        verbose: true

pyproject.toml:

[tool.flakehell]
exclude = ["README.md"]
format = "colored"
show_source = true

[tool.flakehell.plugins]
Flake8-bandit = ["+*","-S322"]
Flake8-bugbear = ["+*"]
Flake8-builtins = ["+*"]
Flake8-comprehensions = ["+*"]
Flake8-darglint = ["+*"]
Flake8-docstrings = ["+*"]
Flake8-eradicate = ["+*"]
Flake8-isort = ["+*"]
Flake8-mutable = ["+*"]
Flake8-pytest-style = ["+*"]
Flake8-spellcheck = ["+*"]
mccabe = ["+*"]
pep8-naming = ["+*"]
pycodestyle = ["+*"]
pyflakes = ["+*"]
pylint = ["+*"]

还是有些问题。当我尝试使用 git commit 时,我看到 flakehell 开始工作了。几秒钟后它失败了,我收到了错误

“UnicodeDecodeError:‘utf-8’编解码器无法解码位置 10 中的字节 0xb8:起始字节无效”

没有“预提交”它效果很好(我的意思是当我只输入“flakehell lint”时)

是否可以将 flakehell 配置为预提交?

如果没有 - 您是否为 Python 项目推荐了任何更好/有效的解决方案?

解决方法

您的配置不正确,您没有使用 filestypes 限制传递给钩子的文件,因此它默认为存储库中的所有文件。大概你有一些正在传递给 flakehell 的二进制文件

我还注意到您的配置既传递了路径又具有 pass_filenames: truepass_filenames: true 是默认值,因此您不应使用它)

你要么想在 args 中列出路径(不推荐,因为你总是比你改变的要多)或者你想正确过滤文件名

此外,verbose: true 不适合在调试之外使用,因为它会向输出添加警告噪声

此外,您没有通过预提交来管理 flakehell 的安装,这会给您的贡献者增加额外的负担来尝试在本地设置任何开发环境,预提交的大部分要点是它管理安装您的工具,因此您的贡献者不必跳过箍来获得正确的格式/linting 设置(消除一整类“它在我的机器上工作”的问题)

此外,看起来 flakehell 直接支持预提交,所以你不需要像你做的那样使用 repo: local 逃生舱

把所有这些放在一起,你可能想要这样的东西:

repos:
-   repo: https://github.com/life4/flakehell
    rev: v.0.7.1
    hooks:
    -   id: flakehell

如果您想使用本地配置,您可能需要以下内容:

repos:
-   repo: local
    hooks:             
    -   id: flakehell
        name: flakehell
        entry: flakehell lint
        types: [python]
        files: ^project/
        language: python
        additional_dependencies: [flakehell==0.7.1]
        stages: [push,commit]

免责声明:我是 pre-commit 的创建者

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?