【问题标题】:Is it possible to run mypy pre-commit without making it fail?是否可以运行 mypy pre-commit 而不会失败?
【发布时间】:2020-05-01 00:01:49
【问题描述】:

我想为团队添加以下内容到pre-commit

-   repo: https://github.com/pre-commit/mirrors-mypy
    rev: 'v0.720'
    hooks:
    -   id: mypy
        args: [--ignore-missing-imports]

我的团队担心这可能过于严格。为了逐步介绍,我希望这个钩子不会使提交失败,而只是显示问题。这可能吗?

【问题讨论】:

    标签: mypy pre-commit pre-commit.com


    【解决方案1】:

    你可以,但我不建议这样做——警告噪音可能会让你的整个团队忽略整个输出和整个工具

    这是你将如何做这样的事情(请注意,由于bash,它降低了可移植性——主要是因为框架故意不建议这样做)

    -   repo: https://github.com/pre-commit/mirrors-mypy
        rev: v0.720
        hooks:
        -   id: mypy
            verbose: true
            entry: bash -c 'mypy "$@" || true' --
    

    两个部分使这项工作:

    1. verbose: true 总是产生输出——这个选项实际上只用于调试目的,但你可以一直打开它(虽然它可能很吵/烦人)
    2. bash + || true -- 忽略退出代码

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

    【讨论】:

      【解决方案2】:

      另外请注意,您可以通过设置环境变量SKIPtemporarily disable hooks。例如:

      SKIP=flake8 git commit -m 'fix thing - work in progress'
      

      当您只想进行稍后修复的本地“检查点”提交时,这尤其有用。

      关于 mypy 的特别说明:像这样以非阻塞方式使用 mypy 可能存在很大问题。如果您允许合并具有类型错误的提交,其他人将开始在提交前检查中看到这些类型错误。

      当开发人员进行进一步更改时,出现的 mypy 错误是以前出现的,还是由于它们的进一步更改而导致的,这令人困惑。这可能会导致挫折/困惑,也可能会导致进一步的类型错误累积。

      我认为using mypy with an existing codebase 上的 mypy 指南是非常好的建议。

      如果您只需要暂时跳过 mypy 检查,以便检查您的工作,推送 PR 以进行初步审查或其他任何事情,您可以像上面提到的那样执行 SKIP=mypy

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-19
        • 1970-01-01
        • 1970-01-01
        • 2023-01-04
        • 1970-01-01
        • 2021-12-22
        • 2021-01-04
        • 2021-09-17
        相关资源
        最近更新 更多