Ruff v0.4.5 现已发布!请从 PyPI 或您选择的包管理器安装。
pip install --upgrade ruff
Ruff 是一个用 Rust 编写的极速 Python 代码检查器和格式化工具。Ruff 可以替代 Black、Flake8(以及数十个插件)、isort、pydocstyle、pyupgrade 等工具,其执行速度比任何单个工具快数十甚至数百倍。
本次发布标志着我们集成式、基于 Rust 的语言服务器的 Beta 版本发布,该服务器为 Ruff 的 VS Code 扩展和其他编辑器集成提供诊断和格式化功能。
上个月,我们发布了 Ruff v0.4.0 的 Alpha 版本。自那时起,我们对服务器进行了多项稳定性改进,并引入了一些主要功能,使我们更接近完全取代我们之前的基于 Python 的语言服务器 ruff-lsp
。
如果您想开始使用 ruff server
,请在 Ruff 的 VS Code 扩展中启用它,或阅读设置指南。
用 Rust 重写 #
Ruff 的编辑器集成始终由语言服务器提供支持。与 Pylance 或 Jedi(它们是 Python 的通用语言服务器)不同,Ruff 的语言服务器在 VS Code 或 Neovim 等编辑器中提供代码检查、格式化和自动修复功能。
2022年12月,我们推出了 ruff-lsp
,这是一个用 Python 编写的语言服务器,通过命令行与 Ruff 交互。
虽然 ruff-lsp
在一段时间内运行良好,但我们遇到了根本性的技术限制,使得维护和扩展变得困难。
ruff-lsp
的开发、测试和发布都独立于 Ruff,这意味着我们需要维护与各种 Ruff 版本的兼容性。- 由于
ruff-lsp
与 Ruff 的命令行界面交互,每个新功能都必须在面向用户的选项中公开,并且所有支持集成的必要数据都必须通过标准输入和输出传递。 - 重复将 Ruff 作为无状态子进程运行,导致每次请求都产生不必要的开销。
- 由于 Ruff 的每次调用都是一个独立的进程,我们无法实现需要跨多个请求跟踪状态的 LSP 功能(例如,在编辑器中修改但未保存到磁盘的文件),因为 Ruff 本身是以无状态方式使用的。
我们意识到,如果我们的语言服务器要跟上 Ruff 的快速发展,它就需要与 Ruff 本身紧密集成。
这就是 ruff server
的用武之地:一个用 Rust 编写并内置于 Ruff 中的语言服务器。
与 ruff-lsp
类似,它为我们的 VS Code 扩展和编辑器集成提供代码检查、格式化及其他功能。但与 ruff-lsp
不同的是,ruff server
直接将 Ruff 作为库使用,这使得集成比 ruff-lsp
更容易(并且性能更好!)。由于它是 Ruff 本身的一部分,因此无需安装外部包。
最终,ruff server
为我们构建更强大、功能更丰富的编辑器集成奠定了基础,同时在此过程中为用户带来了显著的性能提升和更流畅的安装体验。
功能 #
ruff server
支持您从 ruff-lsp
中熟悉并喜爱的一切功能,同时还引入了一些新功能。得益于可扩展的架构,我们未来计划推出更多功能。
诊断高亮 #
Ruff 会在您输入的同时,迅速显示规则违规和语法错误。

动态配置 #
当您更新配置时,Ruff 会动态刷新诊断信息。

格式化 #
Ruff 可以即时格式化您的代码。

代码操作 #
Ruff 可以使用代码操作在几秒钟内解决您代码中的问题。

您也可以选择使用 noqa
注释完全忽略诊断信息。

源操作 #
Ruff 提供源操作和命令,可以重新格式化代码或解决整个文件中的问题。

您甚至可以在保存时运行这些操作。例如,要在 VS Code 中实现保存时格式化,请将以下内容添加到您的 settings.json
:
{
"[python]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "charliermarsh.ruff"
}
}
保存时,Ruff 将自动格式化您的代码。

悬停提示 #
Ruff 可以显示 # noqa
代码的文档。

Jupyter Notebook #
ruff server
完全支持 Jupyter Notebook 文件。我们甚至支持 Notebook 单元格内的范围格式化。


下一步 #
我们对 ruff server
的未来感到非常兴奋。以下是接下来的计划:
- 支持更多编辑器:目前,我们支持 VS Code、Neovim 和 Helix。我们至少计划支持
ruff-lsp
官方支持的所有编辑器。但预计我们将超越这些。 - 弃用
ruff-lsp
:ruff server
将是ruff-lsp
的即时升级替代品。我们计划弃用并最终归档旧的语言服务器。 - 支持未来的 Ruff 功能: 未来的 Ruff CLI 功能将在语言服务器中获得相应的支持。
- 支持更通用的语言服务器功能:我们计划将服务器的功能扩展到代码检查、格式化和诊断之外。
总的来说,我们使用 ruff server
的目标是构建最好、功能最丰富的 Python 语言服务器。本次发布是实现该目标的一个重要里程碑。