← 文章 / 未分类
Simon Willison 2026/7/26 · 2026-07-26 12:59:13 · 17 阅读

Ruff v0.16.0 发布:默认规则从59条增至413条,无需配置即可发现严重问题

Ruff v0.16.0。Astral 几天前(7月23日)发布了其 Ruff Python 代码检查工具的重要新版本。我今天才发现,因为我未锁定版本的 "ruff" 开发依赖触发了新的默认检查规则,导致我多个 CI 作业全部失败。

摘自 Brent Westbrook 的发布公告:

Ruff 现在默认启用 413 条规则,而之前版本只有 59 条。

自上次修改默认规则集(v0.1.0)以来,Ruff 的规则总数从 708 增长到 968。其中许多规则能捕获严重问题,包括语法错误立即运行时错误,但之前默认并未启用。借助新的规则集,Ruff 无需任何配置即可将这些及更多问题暴露给你。

以下是针对任何 Python 项目运行新版本的简单命令:

uvx ruff@latest check .

我在我的三个主要项目——Datasettesqlite-utilsLLM——上运行了最新版 Ruff,结果发现了 数百 个违反新默认规则的微小问题。

这三个项目都有非常全面的测试套件,在 CI 中针对 Python 3.10 到 Python 3.14 运行,因此这样的升级相当安全。以下命令完成了大部分修复工作:

uvx ruff@latest check . --fix --unsafe-fixes

sqlite-utils 运行该命令后,输出如下:

Found 1618 errors (1538 fixed, 80 remaining).

作为示例,以下是三个未修复的问题。Ruff 对每个问题都给出了清晰的解释:

DTZ005 `datetime.datetime.now()` 调用时未提供 `tz` 参数
  --> tests/test_duplicate.py:17:10
   |
15 |     "datetime_col" TEXT)""")
16 |     # 插入一行模拟数据:
17 |     dt = datetime.datetime.now()
   |          ^^^^^^^^^^^^^^^^^^^^^^^
18 |     data = {
19 |         "text_col": "Cleo",
   |
帮助:向 `tz` 参数传入一个 `datetime.timezone` 对象

BLE001 不要盲目捕获异常:`Exception`
  --> tests/test_plugins.py:16:12
   |
14 |         db.execute("select * from pragma_function_list()")
15 |         return True
16 |     except Exception:
   |            ^^^^^^^^^
17 |         return False
18 |     finally:
   |

B018 检测到无用的属性访问。请将其赋值给变量,或直接移除。
  --> tests/test_update.py:46:5
   |
44 | def test_update_invalid_pk(fresh_db, pk, update_pk):
45 |     table = fresh_db["table"]
46 |     table.insert({"id1": 5, "id2": 3, "v": 1}, pk=pk).last_pk
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
47 |     with pytest.raises(NotFoundError):
48 |         table.update(update_pk, {"v": 2})
   |

考虑到 Astral 已加入 OpenAI,这样的输出为编码代理提供了修复问题所需的一切信息,这并不意外。

我用 Codex (GPT-5.6 Sol high) 升级了 LLMsqlite-utils,用 Claude Code (with Opus 5) 升级了 Datasette

原始来源: Simon Willison

评论 (0)