【问题标题】:How to check if Mypy `# type: ignore` comments are still valid and required?如何检查 Mypy `# type:ignore` 注释是否仍然有效和必需?
【发布时间】:2021-01-05 12:42:05
【问题描述】:

想象一下,我们有一些巨大的遗留代码库,其中包含许多忽略 Mypy 警告的文件:

def foobar():
   x = some_external_class.some_method()[0]  # type: ignore[ignore-some-mypy-warning]

该走了……

部分代码已更改。部分代码还是一样的。如何检查每个“忽略”评论以了解:如果我删除它会出错吗?

期望的输出:

Checked 100500 files!
You do not need "ignore" comments anymore in the following files:
  - spam.py:534
  - eggs.py:31
  - eggs.py:250

是否有任何现有的工具可以实现这一目标?关于自定义脚本的任何想法?

UPD:

我唯一的想法:

  1. 编写一个脚本来查找并记住每个 Mypy 注释的文件和一行。
  2. 查找并删除所有 Mypy cmets。
  3. 运行 Mypy 检查 -> 存储结果。
  4. 将 Mypy 检查错误行与存储的 OLD 行进行比较。
  5. 找出不同之处:如果删除了评论,但 Mypy 现在没有抱怨该行,则必须删除该评论。

【问题讨论】:

  • 如果我没记错的话 mypy 默认会抱怨不必要的忽略?你试过了吗?
  • 不,Mypy 不能满足我的需求。至少默认情况下。
  • 有一个 --warn-unused-ignores 标志似乎就是这样做的......
  • 嗯,它有效吗? // 显然我找不到任何重复的问题,所以我会发布一个答案。
  • @user202729 太好了,看起来--warn-unused-ignores 是我需要的!我试过了,它显示了我想要的输出。我认为您可以将其发布为答案。

标签: python python-3.x mypy


【解决方案1】:

来自mypy documentation

--warn-unused-ignores

每当您的代码使用 # 类型时,此标志将使 mypy 报告错误:忽略实际上未生成错误消息的行上的注释。

【讨论】:

    猜你喜欢
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2014-05-02
    • 1970-01-01
    • 2012-10-29
    相关资源
    最近更新 更多