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 --strict0 errors- 禁止
# type: ignore - 保留主流公共 API 与运行时主路径兼容
- 明确记录 Memory backend 更严格的 hash / value 语义
ruff check+pytest通过
0x02 实现路线
a. 错误分类
- 缺失注解(~70):
utils.py、store/redis.py、store/redis_pool.py、rate_limiter/base.py - 联合类型泄漏(~100):async 侧
_store、_atomic_actions、lock保留 sync|async 联合类型 - Protocol 兼容性(~30):
do()返回类型不匹配、__init__阻断type[Protocol]赋值 - list 不变性(~10):
_DEFAULT_ATOMIC_ACTION_CLASSES使用 invariant 的list - 变量重定义(~15):
Quota字段、_parse中options/parsed分支重定义 - 其他(~23):
no-any-return、valid-type、truthy-function、type-arg
b. 约束
- 不引入新的运行时依赖
- 保留主流公共 API 使用方式
- 优先结构化修复,
cast仅用于外部动态边界和算法抽象边界