chore(lint): ruff 忽略中文全角标点 + 启用 BLE(移植本机 f67d9ed 的 lint 配置;⛔ 不含业务代码) (#456)

问题:
  本仓 [tool.ruff.lint] 的 select 含 "RUF" 但未忽略 RUF001/002/003,而注释/文档字符串通篇中文
  ⇒ `ruff check backend/app` 实测 **1420 条**,其中 RUF001/2/3(全角标点)占 **815 条(57.4%)**;
  另有 **271 处** `# noqa: BLE001`(禁止裸 except)因 `BLE` 未启用而**全是"无效指令"**(RUF100 293 条)
  ⇒ 「禁止裸 except」这条规则**从来没有被真正强制过**。
  ⚠️ 且本仓 CI 不跑 ruff(ci.yml 只有 `uv run pytest tests -q`)⇒ 这条门禁一直没人守。

改动(仅 backend/pyproject.toml 的 [tool.ruff.lint] 一段;⛔ 无任何业务代码改动):
  - ignore 增加 RUF001/002/003 —— 理由:全角标点是中文书写的正常形态,不是笔误
  - select 增加 BLE(flake8-blind-except)⇒ 271 处既有 noqa 立即生效
  - ⚠️ 文字与理由照抄本机 f67d9ed 的原注释,但**注释里的数字一律按本仓实测重写**
    (本机数字 1442/801/642/518/291 与本仓实测 1420/815/611/594/271 **不同**,⛔ 不照抄)
  - ⛔ 不跑 `--add-noqa` 批量承认(那会改上百个业务文件,与在途改动冲突)

验证(隔离 worktree,基于 origin/main 30fcade;ruff 0.15.14):
  - **P2/P3 逐规则对账 1420 → 594(净 −826)**:
      BLE001 0→236(+236) · RUF001 189→0(−189) · RUF002 403→0(−403) · RUF003 223→0(−223)
      · RUF100 293→46(−247)
      ⭐ **出现正增量的规则只有 BLE001**,其余规则全部不变或减少(⛔ 不是"看总数下降就算过")
  - **P5 配置语义(可 FAIL 的差集断言)**:用 tomllib 解析 `origin/main` 版与本版 ⇒
      line-length/target-version 逐字不变;select 差集**恰为** {BLE}、ignore 差集**恰为**
      {RUF001,RUF002,RUF003},两侧**无任何删除**。核验脚本:
      research/oneshot/_verify_ruff_config_port_20261005.py(判别力 = 差集不等即 FAIL)
  - P4 改动面:`git diff --stat` = 1 file;`git diff --check` rc=0
  - P6 辅助:`pytest tests/test_regime_builder.py -q` ⇒ **22 passed**(配置改动不影响测试)
  - ⚠️ 本件**没有回归测试可守**(纯配置改动):靠上面的数值/差集对账,⛔ 不假装有单测

影响与取舍(⛔ 不粉饰):
  `ruff check backend/app` 从 1420 条降到 594 条 ⇒ 噪声大减、门禁**变得可执行**;
  但启用 BLE 会**显形 236 条**既有「尚未表态的 `except Exception`」(本机对应 166 条)——
  这是**暴露既有沉默违规**,不是本次新引入的错误;是否进一步 `--add-noqa` 批量承认,
  留给维护者决定(本提交不替上游表态)。
  ⛔ CI 无 ruff 步骤 ⇒ 本改动**不会打断 CI**,同样也**不会自动守住** lint。

兼容/回滚:
  纯 lint 配置,无 schema/数据/接口影响;`git revert` 即可回滚(不影响任何历史产物)。

说明:本提交在基于 origin/main(30fcade) 的隔离 worktree 内完成,本机主线工作树未被改动;
      ⛔ 未推送;⛔ 与 port/regime-isfinite-guard(_score 防护)**是两个独立分支/提交**。

Co-authored-by: JackChan83 <JackChan83@users.noreply.github.com>
This commit is contained in:
JackChan83
2026-10-08 13:08:52 +08:00
committed by GitHub
co-authored by JackChan83
parent 9f065dd3dd
commit 3fd1f6f95a
+21 -2
View File
@@ -82,8 +82,27 @@ line-length = 100
target-version = "py311"
[tool.ruff.lint]
select = ["E", "F", "I", "N", "UP", "B", "SIM", "RUF"]
ignore = ["E501"] # 长行交给 fmt
# BLE = flake8-blind-except: 禁止 `except Exception` 不留痕。
# 加它的理由: 本仓原有 271 处 `# noqa: BLE001` 而 `BLE` 竟未启用 ⇒ 那些 noqa 全是
# "无效指令"(RUF100), 即「禁止裸 except」当时**完全没有被强制**。启用后:
# ①271 条既有 noqa 立即可用(实测 RUF100 293→46) ②将来新增的裸 except 必须显式承认。
# 实测本仓 backend/app: 1420 条 ⇒ 忽略 RUF001/2/3 后 611 条(其中 6 条是原先给 RUF001/2/3
# 写的 noqa 变为"无效指令") ⇒ 再启用 BLE 后 594 条(净减 826)。
# ⚠️ 仍会暴露 236 处**尚未表态**的 `except Exception`(soft-failure 设计, 见 CONTRIBUTING);
# 待工作区干净时用 `ruff check --select BLE001 --add-noqa` 批量显式承认, 不在有他人
# 未提交改动时做(会与在途改动冲突)。
# ⚠️ 本仓 CI 目前**不跑 ruff**(ci.yml 只有 `uv run pytest tests -q`) ⇒ 本改动不会打断 CI;
# 但正因如此, 这条门禁从来没人守——本改动让它**可执行**, 代价是 236 条既有沉默违规显形。
select = ["E", "F", "I", "N", "UP", "B", "SIM", "RUF", "BLE"]
ignore = [
"E501", # 长行交给 fmt
# 本仓注释/文档字符串以中文书写, 全角标点(,。:()×)是正常书写而非笔误。
# 不忽略会让「ruff error 清零」永远不可达: 实测 backend/app 共 1420 条告警,
# 其中 RUF001/2/3 占 815 条(57.4%) ⇒ 忽略后降到 605 条, 门禁才谈得上可执行。
"RUF001", # String contains ambiguous unicode character
"RUF002", # Docstring contains ambiguous unicode character
"RUF003", # Comment contains ambiguous unicode character
]
[tool.pytest.ini_options]
asyncio_mode = "auto"