使用Ruff作为Python项目的Linter

💡 原文英文,约600词,阅读约需2分钟。
📝

内容提要

Ruff是2022年推出的Python linter,可替代pylint和flake8,性能高效。使用`uv run ruff check`检查代码,支持`--fix`自动修复。配置通过pyproject.toml,采用选择所有规则再忽略的策略。Ruff也可作格式化工具,类似black,并支持LSP集成到Neovim等编辑器。

🔎

延伸解读

规则选择策略

文章推荐采用“选择所有规则再忽略”的逆向策略,而非默认的规则子集。这种配置能最大化规则覆盖,但可能产生大量警告,需要根据项目实际调整忽略列表。例如,示例中忽略了PTH(路径处理)和D407等规则,并针对测试文件单独忽略ARG001。这种策略适合希望严格检查的项目,但初期可能需要较多配置工作。

Ruff与Black的兼容性

Ruff不仅提供linting,还内置格式化功能,输出风格与Black相似。但文章指出,如果团队已使用Black,可以继续保留,因为Ruff的linting与Black兼容。这意味着Ruff可以作为纯linter使用,无需强制迁移格式化工具,降低了采用成本。

编辑器集成方式

Ruff通过LSP协议集成到编辑器,如Neovim。文章提供了在Neovim中启用Ruff LSP的示例,并支持通过init_options自定义设置,如自动整理导入。这种集成方式使得在编辑器中实时获得lint反馈,提升开发效率。但具体配置可能因编辑器而异,需参考官方文档。

Q&A

Ruff是什么?它和pylint、flake8相比有什么优势?

Ruff是2022年推出的Python linter,可以替代pylint和flake8等传统工具。它的优势在于性能高效,对大型代码库友好,并且支持多种规则,可以全面替代其他linter。

如何使用Ruff检查代码并自动修复问题?

使用`uv run ruff check path/to/src`检查代码,添加`--fix`选项可以自动修复部分linting错误,例如`uv run ruff check --fix path/to/src`。

Ruff的配置文件支持哪些格式?如何配置规则?

Ruff支持pyproject.toml、ruff.toml或.ruff.toml作为配置文件。推荐使用pyproject.toml以便统一管理。配置时可以采用选择所有规则再忽略的策略,例如在`[tool.ruff.lint]`中设置`select = ["ALL"]`,然后通过`ignore`列表排除不需要的规则。

如何在特定文件或代码块中忽略Ruff的某些规则?

可以使用注释来忽略特定行、块或文件的规则。例如,在代码中添加`# noqa`注释可以忽略该行的规则,或者使用`# ruff: noqa: <rule>`指定忽略的规则。对于文件级别的忽略,可以在配置文件中使用`per-file-ignores`。

Ruff能否作为代码格式化工具?与Black相比如何?

是的,Ruff也可以作为格式化工具,类似于Black。使用`uv run ruff format src/`进行格式化,`--check`模式可以检查是否有未格式化的文件。Ruff的格式化输出与Black相似,并且可以与Black共存,即使用Black格式化,Ruff只做linting。

如何将Ruff集成到Neovim等编辑器中?

Ruff支持Language Server Protocol(LSP),可以集成到支持LSP的编辑器中。对于Neovim,可以使用nvim-lspconfig中的ruff配置,然后启用服务器:`vim.lsp.enable("ruff")`。如果需要自定义设置,可以创建`~/.config/nvim/after/lsp/ruff.lua`文件并配置相关选项。

🏷️

标签

➡️

继续阅读