Simon Willison 1小时前 · 2026-07-26 12:59:13 · 0 阅读
Ruff v0.16.0 发布:默认规则大幅增加,无配置即可发现严重问题
2026年7月25日 - 链接博客
Ruff v0.16.0。Astral 在 7 月 23 日发布了 Ruff Python 代码检查工具的重要新版本。我今天才发现,因为我的 CI 任务都开始失败,原因是新的默认 Ruff 检查以及我未固定版本的 "ruff" 开发依赖。
Brent Westbrook 在公告中写道:
Ruff 现在默认启用 413 条规则,而之前只有 59 条。
自 Ruff 的默认规则集在 v0.1.0 最后一次修改以来,Ruff 的规则总数从 708 增长到 968。其中许多规则能捕获严重问题,包括语法错误和即时运行时错误,但之前并未默认启用。有了新规则集,Ruff 无需任何配置就能让你注意到这些问题及其他许多问题。
只需一行命令即可在任何 Python 项目上尝试:
uvx ruff@latest check .
我在我的三个最大项目——Datasette、sqlite-utils 和 LLM——上运行了最新版 Ruff,它发现了数百个违反新默认规则的次要问题。
这三个项目都有非常全面的测试套件,在 CI 中针对 Python 3.10 到 3.14 进行测试,因此这样的升级相当安全。以下命令完成了大部分升级工作:
uvx ruff@latest check . --fix --unsafe-fixes
针对 sqlite-utils,该命令报告:
Found 1618 errors (1538 fixed, 80 remaining).
举例说明,以下是三个未解决的问题。Ruff 对每个问题都解释得很清楚:
DTZ005 `datetime.datetime.now()` called without a `tz` argument
--> tests/test_duplicate.py:17:10
|
15 | "datetime_col" TEXT)""")
16 | # Insert one row of mock data:
17 | dt = datetime.datetime.now()
| ^^^^^^^^^^^^^^^^^^^^^^^
18 | data = {
19 | "text_col": "Cleo",
|
help: Pass a `datetime.timezone` object to the `tz` parameter
BLE001 Do not catch blind exception: `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 Found useless attribute access. Either assign it to a variable or remove it.
--> 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)升级了 LLM 和 sqlite-utils,用 Claude Code(搭配 Opus 5)升级了 Datasette。
原始来源: Simon Willison