diff --git a/docs/refactor/optimization-checklist.md b/docs/refactor/optimization-checklist.md index 0e749cd66..ce58e43ec 100644 --- a/docs/refactor/optimization-checklist.md +++ b/docs/refactor/optimization-checklist.md @@ -108,7 +108,7 @@ ARCH-201 至 ARCH-204 均达到实现、验证、提交、推送和远端门禁 | Event Contract | 53 | 均已有 payload model,但当前全部是 diagnostic enforcement | | Python 源码量 | 373,625 行 | 本次重新扫描物理行数,排除 `app/plugins/**`;74 个文件超过 1,000 行,12 个超过 2,000 行;源码尺寸仅作观察 | | 长方法 | 309 个超过 80 行 | 本次 AST 扫描排除 `app/plugins/**`;61 个超过 150 行,17 个超过 250 行;新增函数仍受 C901/嵌套深度门禁约束 | -| 全量 mypy 历史债务 | 4,919 / 258 文件 | 本轮在消息、站点、诊断、备份、用户配置、订阅、AcoustID、TMDB、仪表板和命令生命周期边界补齐类型,历史债务再减少 53 项;TMDB v3 API 显式导出并保留集合 parts 的列表合同,逐文件逐错误码无增长;此前工作流筛选、动态插件路由和 stdio 流补齐边界类型,历史债务减少 3 项;Bitpt 与 CookieCloud 补齐边界类型,历史债务减少 16 项;知行站点解析器补齐数值属性与基类合同,历史债务减少 18 项;通知排版补齐 Slack 消息块类型,历史债务减少 2 项;工作流资源过滤改用领域对象调用过滤链,恢复的节点输出在消费前归一化,并收紧可空资源列表的类型低水位;消息媒体交互类型债务已清零,canonical Facade 与 endpoint 类型边界已补齐,低水位只允许继续下降;微信 ClawBot 入站 item_list 媒体解析改为按子项键名分派后,类型错误减少 4 项;站点解析器分享率改用浮点初值,类型错误减少 20 项;本次下载与文件安全修复再减少 3 项;Transmission 进度回退值归一化再减少 2 项;本批清理 Servarr、认证、存储、订阅策略和搜索/规则/通知 Schema 的 18 项类型错误,并修复系统配置中的 Python 2 异常语法;本批再清理订阅元数据、订阅写入、交互宿主、整理路径、删除统计和工作流动作的 14 项类型错误,逐文件逐错误码无增长;本批补齐 OCR 请求参数、工具 Schema 摘要和宿主模块配置快照的 5 项边界类型,逐文件逐错误码无增长;本批为 Rousi 用户消息分页解析补齐返回类型与数据结构兜底,减少 2 项类型错误;本批优先处理 TMDB v3 电影与电视剧对象模型,补齐 98 个同步/异步方法注解并减少 122 项历史类型错误;随后补齐剧集、季度、人物、搜索和趋势对象的 142 个方法注解,再减少 142 项类型错误;绿联 API 响应边界补齐具体泛型与运行时字典收窄,减少 31 项类型错误;运行时限流器补齐状态方法、装饰器边界和时间队列类型,减少 31 项类型错误;QQ Bot API 响应边界补齐具体泛型与 JSON 形状校验,减少 17 项类型错误;rTorrent 客户端清理 182 项错误,调用端同步明确字典合同,累计再减少 190 项错误;豆瓣 API、中心服务接口及订阅消费端补齐返回边界和参数收窄,结合 Context 方法签名与缓存代理类型清理,累计再减少 455 项错误;缓存同步/异步继承冲突保留为设计债务,未纳入严格门禁 | +| 全量 mypy 历史债务 | 4,703 / 257 文件 | 本轮在消息、站点、诊断、备份、用户配置、订阅、AcoustID、TMDB、仪表板和命令生命周期边界补齐类型,历史债务再减少 53 项;TMDB v3 API 显式导出并保留集合 parts 的列表合同,逐文件逐错误码无增长;此前工作流筛选、动态插件路由和 stdio 流补齐边界类型,历史债务减少 3 项;Bitpt 与 CookieCloud 补齐边界类型,历史债务减少 16 项;知行站点解析器补齐数值属性与基类合同,历史债务减少 18 项;通知排版补齐 Slack 消息块类型,历史债务减少 2 项;工作流资源过滤改用领域对象调用过滤链,恢复的节点输出在消费前归一化,并收紧可空资源列表的类型低水位;消息媒体交互类型债务已清零,canonical Facade 与 endpoint 类型边界已补齐,低水位只允许继续下降;微信 ClawBot 入站 item_list 媒体解析改为按子项键名分派后,类型错误减少 4 项;站点解析器分享率改用浮点初值,类型错误减少 20 项;本次下载与文件安全修复再减少 3 项;Transmission 进度回退值归一化再减少 2 项;本批清理 Servarr、认证、存储、订阅策略和搜索/规则/通知 Schema 的 18 项类型错误,并修复系统配置中的 Python 2 异常语法;本批再清理订阅元数据、订阅写入、交互宿主、整理路径、删除统计和工作流动作的 14 项类型错误,逐文件逐错误码无增长;本批补齐 OCR 请求参数、工具 Schema 摘要和宿主模块配置快照的 5 项边界类型,逐文件逐错误码无增长;本批为 Rousi 用户消息分页解析补齐返回类型与数据结构兜底,减少 2 项类型错误;本批优先处理 TMDB v3 电影与电视剧对象模型,补齐 98 个同步/异步方法注解并减少 122 项历史类型错误;随后补齐剧集、季度、人物、搜索和趋势对象的 142 个方法注解,再减少 142 项类型错误;绿联 API 响应边界补齐具体泛型与运行时字典收窄,减少 31 项类型错误;运行时限流器补齐状态方法、装饰器边界和时间队列类型,减少 31 项类型错误;QQ Bot API 响应边界补齐具体泛型与 JSON 形状校验,减少 17 项类型错误;rTorrent 客户端清理 182 项错误,调用端同步明确字典合同,累计再减少 190 项错误;豆瓣 API、中心服务接口及订阅消费端补齐返回边界和参数收窄,结合 Context 方法签名与缓存代理类型清理,累计再减少 455 项错误;共享 HTTP 客户端清理 110 项错误,U115 存储边界清理 97 项错误,补充 AliPan/OpenList 对可空流响应的防守;存储基类返回契约仍有 4 项设计债务,未纳入严格门禁;缓存同步/异步继承冲突保留为设计债务,未纳入严格门禁 | | Ruff 历史诊断 | 73 | 低水位门禁通过,但规则集只覆盖 `E4/E7/E9/F/I` | | 覆盖率逐文件低水位 | 全 app(排除 app/plugins)当前聚合 77.68% | 存量文件低水位只增不减,新文件至少 80% | diff --git a/mypy.ini b/mypy.ini index 600a53d5e..66fc5adf0 100644 --- a/mypy.ini +++ b/mypy.ini @@ -81,6 +81,7 @@ files = app/adapters/network/__init__.py, app/adapters/network/cloudflare.py, app/adapters/network/feishu.py, + app/adapters/network/http.py, app/adapters/network/ip.py, app/adapters/network/resolver.py, app/adapters/network/webpush.py, diff --git a/tests/fixtures/architecture/mypy-baseline.json b/tests/fixtures/architecture/mypy-baseline.json index a0c117b7b..fb0934ce1 100644 --- a/tests/fixtures/architecture/mypy-baseline.json +++ b/tests/fixtures/architecture/mypy-baseline.json @@ -30,14 +30,6 @@ "no-any-return": 1, "no-untyped-def": 3 }, - "app/adapters/network/http.py": { - "assignment": 28, - "misc": 1, - "no-any-return": 15, - "no-untyped-call": 7, - "no-untyped-def": 33, - "type-arg": 26 - }, "app/adapters/system/fsproxy.py": { "arg-type": 1, "assignment": 1, @@ -911,7 +903,6 @@ "app/modules/filemanager/storages/alipan.py": { "arg-type": 19, "assignment": 7, - "attr-defined": 1, "empty-body": 2, "no-any-return": 5, "no-untyped-call": 4, @@ -925,7 +916,6 @@ "app/modules/filemanager/storages/alist.py": { "arg-type": 13, "assignment": 2, - "attr-defined": 1, "empty-body": 2, "misc": 1, "no-any-return": 4, @@ -969,18 +959,9 @@ "union-attr": 5 }, "app/modules/filemanager/storages/u115.py": { - "arg-type": 16, - "assignment": 7, - "attr-defined": 1, - "call-overload": 17, - "empty-body": 2, - "no-any-return": 6, - "no-untyped-call": 3, - "no-untyped-def": 5, - "operator": 2, - "override": 2, - "type-arg": 8, - "union-attr": 32 + "assignment": 1, + "no-untyped-call": 1, + "override": 2 }, "app/modules/filemanager/transhandler.py": { "arg-type": 18, @@ -1032,7 +1013,7 @@ "type-arg": 1 }, "app/modules/indexer/spider/__init__.py": { - "arg-type": 12, + "arg-type": 10, "assignment": 3, "dict-item": 3, "misc": 1, @@ -1047,7 +1028,7 @@ "var-annotated": 2 }, "app/modules/indexer/spider/haidan.py": { - "arg-type": 3, + "arg-type": 1, "assignment": 5, "no-any-return": 1, "no-untyped-def": 2, @@ -1080,7 +1061,7 @@ "var-annotated": 3 }, "app/modules/indexer/spider/tnode.py": { - "arg-type": 4, + "arg-type": 2, "assignment": 1, "misc": 2, "return-value": 2, @@ -1401,7 +1382,7 @@ "type-arg": 1 }, "app/modules/zspace/zspace.py": { - "arg-type": 10, + "arg-type": 9, "assignment": 3, "no-any-return": 12, "no-untyped-call": 2,