← 文章 / 编程开发
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 .

我在我的三个最大项目——Datasettesqlite-utilsLLM——上运行了最新版 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)升级了 LLMsqlite-utils,用 Claude Code(搭配 Opus 5)升级了 Datasette

原始来源: Simon Willison

评论 (0)