首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预提交flake8和子文件夹中的setup.cfg

预提交flake8和子文件夹中的setup.cfg
EN

Stack Overflow用户
提问于 2021-03-04 20:36:15
回答 1查看 4K关注 0票数 10

我使用flake8和一堆插件(flake8-docstringsflake8-isortflake8-black)。我把它们都预装到venv里了.

我要用pre-commit检查我的回购

isort)

  • setup.cfg

  • 根目录有两个包--

  • ,每个包都有自己的

  • (配置blackpydocstyle)

(配置flake8pydocstyle)))

代码语言:javascript
复制
├── foo
│   ├── pyproject.toml
│   ├── setup.cfg
│   └── (the package)
├── bar
│   ├── pyproject.toml
│   ├── setup.cfg
│   └── (the package)
└── venv

我想通过pre-commit为这两个包调用pre-commit

我现在是这样做的:

代码语言:javascript
复制
---
repos:
  - repo: local
    hooks:
      - id: flake8-foo
        name: Run flake8 in foo package
        entry: bash -c "cd foo && flake8"
        language: python
      - id: flake8-bar
        name: Run flake8 in bar package
        entry: bash -c "cd bar && flake8"
        language: python

当我运行pre-commit run --all-files并在foo中出现错误时,它多次输出相同的输出:

代码语言:javascript
复制
./path/in/foo/to/file.py:49:1: D401 First line should be in imperative mood
./path/in/foo/to/file.py:49:1: D401 First line should be in imperative mood
./path/in/foo/to/file.py:49:1: D401 First line should be in imperative mood
./path/in/foo/to/file.py:49:1: D401 First line should be in imperative mood
./path/in/foo/to/file.py:49:1: D401 First line should be in imperative mood
./path/in/foo/to/file.py:49:1: D401 First line should be in imperative mood
./path/in/foo/to/file.py:49:1: D401 First line should be in imperative mood
./path/in/foo/to/file.py:49:1: D401 First line should be in imperative mood
./path/in/foo/to/file.py:49:1: D401 First line should be in imperative mood
./path/in/foo/to/file.py:49:1: D401 First line should be in imperative mood
./path/in/foo/to/file.py:49:1: D401 First line should be in imperative mood

repos

  1. 有更好的方法吗?
    • 不,我不愿意把包分成自己的

  1. 如何才能让错误信息只打印一次?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-05 01:54:21

pre-commit按设计对文件进行操作,它还被优化为将针对文件的指针批量运行到多个进程中。

这里发生的情况是,您的配置正在运行几次调用(每个处理器1次)、bash -c "cd bar && flake8" file1 file2 file3等。

幸运的是,有一个设置可以用来为您修复这个问题:

在此基础上:

代码语言:javascript
复制
---
repos:
  - repo: local
    hooks:
      - id: flake8-foo
        name: Run flake8 in foo package
        entry: bash -c "cd foo && flake8"
        language: python
        pass_filenames: false
        files: ^foo/
        types: [python]
      - id: flake8-bar
        name: Run flake8 in bar package
        entry: bash -c "cd bar && flake8"
        language: python
        pass_filenames: false
        files: ^bar/
        types: [python]

也就是说,通过使用repo: local钩子,您将失去框架的大部分好处:

twice

  • during

  • 预提交并不管理工具的安装(您的每个开发人员都必须分别安装该工具并在特定版本中安装该工具)--

  • --任何基于文件名的优化都不会发生
  • --如果您只更改一个文件,您目前正在链接整个存储库--合并冲突、预提交优化运行哪些文件(而不是整个回购)、

对于您的monorepo设置,我建议的是仍然以正常的方式调用flake8,但是要利用--config,这样它就会对您的子回购产生不利影响:

代码语言:javascript
复制
repos:
-   repo: https://gitlab.com/pycqa/flake8
    rev: 3.8.4
    hooks:
    -   id: flake8
        name: flake8 ./foo/
        alias: flake8-foo
        files: ^foo/
        args: [--config, foo/setup.cfg]
    -   id: flake8
        name: flake8 ./bar/
        alias: flake8-bar
        files: ^bar/
        args: [--config, bar/setup.cfg]

免责声明:我是“预提交”的作者,也是flake8目前的维护者

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66482664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档