Ruff v0.16.0:默认规则激增,AI 辅助升级实录

Ruff v0.16.0

几天前,7月23日,Astral 发布了其 Ruff Python 代码检查工具的全新重要版本。我今天注意到这一变化,是因为我的各项 CI 工作都因新的默认 Ruff 检查规则以及我未被锁定的“ruff”开发依赖项而开始失败。

根据 Brent Westbrook 的公告帖子所述:

Ruff 现在默认启用 413 条规则,而此前的版本仅为 59 条。

自 Ruff 默认规则集上次更新以来,已过去数周之久——从 v0.1.0 开始,Ruff 中的规则数量已从 708 条增至 968 条。其中许多规则能够发现严重的问题,包括 语法错误 和 即时运行时错误, 但此前并未默认启用。随着新规则集的推出,Ruff 将在无需任何 Ruff 配置的情况下,将这些缺陷以及其他诸多问题及时提醒您。

以下是一个简单的命令,可用于在任何 Python 项目中尝试使用 Ruff:

uvx ruff@latest check

我针对三个最大的项目——数据集、Sqlite-utils 和 大型语言模型——运行了最新版 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() 被调用时未传递时区参数 • -> 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 高级版)升级大型语言模型 和 Sqlite-utils, 以及 Claude Code(搭载 Opus 5)upgrade Datasette。

标签:派森、汪、星界

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论