处理代码静态检查工具报错的一些思考

每行字符数限制

一行八十字符的限制, 源自远古时代使用的物理打印机, 今天其实很多开发环境(IDE)依旧会提供类似的检查设置, Python - PEP 8 中则是一行最大 79 字符, 建议 72 字符, 多数 linting 工具默认会是这个.

但是正常情况下人眼处理一行的能力也是有物理限制的, 何况现在的显示屏也有物理宽度, 所以, 略正规一些的开发环境, 完全不做列宽限制也不正常.

当然, Linus 本人很早就说过, 既然不是那种编译器的告警, 只是方便大家阅读, 一丝不苟搞一行八十字符必需断行也不是完全有必要. 当然, 真的做 Linux 内核开发, 检查脚本的 CPL 限制是一百字符.

所以让检查脚本忽略一些无伤大雅的略长一些的行并不是不可以.

Python 静态检查的结果

提到每行字符数限制的主要的原因, 还是最近使用了 pyright. 结果发现一些使用中的问题.

其中的一个我实现的一个 MixIn 类有类似以下的代码:

class KlassMixin(object):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

这个片断 pyright 会报错 error: Expected 0 positional arguments (reportGeneralTypeIssues)

这个本身是可以理解的, 但这个编码范式并不少见, 事实上应用非常广泛.

比如说, pypa pip 的源码中, 就存在非常多的类似的情况, 像下面 progress_bars 中的 MixIn 类就是如此.

他们的解决方案, 当然是加 type: ignore 忽略掉.

class KlassMixin(object):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)  # type: ignore

毕竟静态检查器是一个参考用的工具, 不要为此浪费太多时间在想新的范式, 希望能即遵从静态检查建议又满足自己编码的需求.

即然 Python 语言特性是支持的, 而且是很重要的范式, 那就么就应该利用这个特性, 类似情况忽略是合理的选择.