Ruff v0.16.0
Ruff v0.16.0
Astral 于7月23日发布Ruff v0.16.0,默认启用413条规则(此前仅59条),规则总数从708增至968条,新增规则可捕获语法错误及运行时错误。开发者Simon Willison对Datasette、sqlite-utils和LLM运行新版Ruff,发现数百个违规项,其中sqlite-utils报告1618个错误(已修复1538个)。他使用Codex(GPT-5.6 Sol high)升级LLM和sqlite-utils,Claude Code(Opus 5)升级Datasette。
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 到 Python 3.14 执行,因此此类升级相当安全。以下命令完成了大部分升级工作:
uvx ruff@latest check . --fix --unsafe-fixes
针对 sqlite-utils,该命令报告:发现 1618 个错误(已修复 1538 个,剩余 80 个)。作为示例,以下是三个剩余问题。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,这个输出提供了编码 agent 修复问题所需的一切。我让 Codex(GPT-5.6 Sol high)升级了 LLM 和 sqlite-utils,让 Claude Code(使用 Opus 5)升级了 Datasette。
标签:python、ruff、astral