具有 .toml 配置和预提交挂钩的 Flakehell
Flakehell with .toml configuration and pre-commit hook
我正在尝试 运行 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 提交时,我看到 flakehell 开始工作了。几秒钟后它失败了,我得到了错误:
“UnicodeDecodeError:'utf-8'编解码器无法解码位置 10 中的字节 0xb8:起始字节无效”
没有“预提交”它工作得很好(我的意思是当我只输入“flakehell lint”时)
甚至可以将 flakehell 配置为预提交吗?
如果没有 - 您是否推荐任何 python 项目的 better/working 解决方案?
您的配置不正确,您没有使用 files
或 types
限制传递给您的挂钩的文件,因此它默认为您存储库中的所有文件。大概你有一些二进制文件被传递给 flakehell
我还注意到您的配置同时传递了路径和 pass_filenames: true
(pass_filenames: true
是默认设置,因此您不应该使用它)
您要么想要在 args 中列出路径(不推荐,因为您总是 lint 比您正在更改的内容更多)或者您想要正确过滤文件名
此外,verbose: true
不适合在调试之外使用,因为它会向输出添加警告噪音
此外,您不是通过预提交来管理 flakehell 的安装,这会给您的贡献者增加额外的负担,以尝试在本地设置任何开发环境,预提交的大部分要点是它管理安装你的工具,这样你的贡献者就不必为了获得正确的格式/linting 设置而费尽心思(消除整个 class 的“它在我的机器上工作”的问题)
此外,看起来 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]
免责声明:我是预提交的创建者
我正在尝试 运行 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 提交时,我看到 flakehell 开始工作了。几秒钟后它失败了,我得到了错误:
“UnicodeDecodeError:'utf-8'编解码器无法解码位置 10 中的字节 0xb8:起始字节无效”
没有“预提交”它工作得很好(我的意思是当我只输入“flakehell lint”时)
甚至可以将 flakehell 配置为预提交吗?
如果没有 - 您是否推荐任何 python 项目的 better/working 解决方案?
您的配置不正确,您没有使用 files
或 types
限制传递给您的挂钩的文件,因此它默认为您存储库中的所有文件。大概你有一些二进制文件被传递给 flakehell
我还注意到您的配置同时传递了路径和 pass_filenames: true
(pass_filenames: true
是默认设置,因此您不应该使用它)
您要么想要在 args 中列出路径(不推荐,因为您总是 lint 比您正在更改的内容更多)或者您想要正确过滤文件名
此外,verbose: true
不适合在调试之外使用,因为它会向输出添加警告噪音
此外,您不是通过预提交来管理 flakehell 的安装,这会给您的贡献者增加额外的负担,以尝试在本地设置任何开发环境,预提交的大部分要点是它管理安装你的工具,这样你的贡献者就不必为了获得正确的格式/linting 设置而费尽心思(消除整个 class 的“它在我的机器上工作”的问题)
此外,看起来 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]
免责声明:我是预提交的创建者