Skip to content

mypy strict 模式合规改造

0x01 背景

a. Why

uv run mypy --strict throttled/ 曾报 248 errors / 22 files

项目已启用 ruff ANN 规则和 pre-commit mypy-strict 钩子,但历史代码未全量对齐。

上一轮修复了 BaseThrottledMixin 的泛型参数化,现已通过 PR #159 扩展至全项目。

最终方案见 PLAN.md

b. 目标

  • mypy --strict 0 errors
  • 禁止 # type: ignore
  • 保留主流公共 API 与运行时主路径兼容
  • 明确记录 Memory backend 更严格的 hash / value 语义
  • ruff check + pytest 通过

0x02 实现路线

a. 错误分类

  • 缺失注解(~70):utils.pystore/redis.pystore/redis_pool.pyrate_limiter/base.py
  • 联合类型泄漏(~100):async 侧 _store_atomic_actionslock 保留 sync|async 联合类型
  • Protocol 兼容性(~30):do() 返回类型不匹配、__init__ 阻断 type[Protocol] 赋值
  • list 不变性(~10):_DEFAULT_ATOMIC_ACTION_CLASSES 使用 invariant 的 list
  • 变量重定义(~15):Quota 字段、_parseoptions/parsed 分支重定义
  • 其他(~23):no-any-returnvalid-typetruthy-functiontype-arg

b. 约束

  • 不引入新的运行时依赖
  • 保留主流公共 API 使用方式
  • 优先结构化修复,cast 仅用于外部动态边界和算法抽象边界

0x03 参考