Ruff v0.16.0 已於數日前,即 7 月 23 日,由 Astral 公司發布了這個重要的 Python 程式碼檢查工具新版本。我今天才注意到這次更新,因為我多個 CI 作業都因 Ruff 新增的預設檢查規則,以及我未鎖定版本的 "ruff" 開發依賴項而開始失敗。
根據 Brent Westbrook 的發布文章,Ruff 現在預設啟用 413 條規則,相較於舊版本的 59 條大幅增加。自 Ruff 預設規則集上次在 v0.1.0 修改以來,Ruff 的規則數量已從 708 條增長到 968 條。其中許多規則能捕捉到嚴重的問題,包括語法錯誤和即時執行時錯誤,但之前並未預設啟用。
透過新的規則集,Ruff 將在無需任何額外配置的情況下,提醒使用者注意這些及其他許多問題。
您可以使用以下一行指令在任何 Python 專案中試用它:`uvx ruff@latest check .` 我將最新版的 Ruff 應用於我三個最大的專案——Datasette、sqlite-utils 和 LLM,結果發現數百個違反新預設規則的輕微問題。
這三個專案都擁有非常全面的測試套件,並在 CI 環境中針對 Python 3.10 到 3.14 執行,因此像這樣的升級是相當安全的。以下指令完成了大部分的升級工作:`uvx ruff@latest check . --fix --unsafe-fixes`。針對 sqlite-utils 專案,該指令報告:「發現 1618 個錯誤(已修復 1538 個,剩餘 80 個)。」
作為說明性範例,以下是三個仍未解決的問題,Ruff 在解釋每個問題方面做得很好。例如,`DTZ005` 指出 `datetime.datetime.now()` 在沒有 `tz` 參數的情況下被呼叫,並建議傳遞 `datetime.timezone` 物件。
另一個是 `BLE001`,警告不應捕捉盲目異常 `Exception`。第三個是 `B018`,提示發現無用的屬性存取,應將其賦值給變數或移除。
毫不意外地,考量到 Astral 現已歸屬 OpenAI,Ruff 的輸出提供了程式碼代理(coding agent)修復這些問題所需的一切資訊。我使用 Codex (GPT-5.6 Sol high) 升級了 LLM 和 sqlite-utils,並使用 Claude Code (搭配 Opus 5) 升級了 Datasette。
