新一代 Python 代码纠错工具Ruff,突出一个字“快”!

382 阅读4分钟

在软件开发中,代码质量是至关重要的。为了保证Python代码的质量,开发人员需要使用一些优秀的代码检查工具。

图片

下面是几个常用的Python代码检查工具:

  • • Pylint:是一个流行的Python代码检查工具,用于检查代码语法、风格和代码错误等问题Pylint提供了丰富的插件和配置选项,方便开发人员根据项目要求进行定制和管理。

  • • Flake8:是一个由Pint、Pyflakes和pep8三个库组成的Python代码检查工具,它可以检查语法错误、代码风格和各种代码错误等问题。Flake8具有高度的可配置性和易用性,是很多Python开发人员的首选。

  • • Pyflakes: 是Python代码静态分析工具,用于检测Python代码中的语法错误和中未使用的变量和模块的问题,它也可以检查Python模块的导入语句的正确性。

  • • mypy:一个类型注释检查器,用于检查Python代码的类型注释,以保代码中的注释与实际使用的变量和函数相匹配。

以上是几个常用的Python代码检查工具,它们帮助开发人员快速发现和复代码中的错误和漏洞,提高代码质量和可靠性。

但是最近又发现了一款开源的Python代码检查工具,相比 PylintFlake8 检查更迅速,兼容性更强。它名为 **Ruff,**GitHub Star 已达 21K

Ruff 简介

Ruff 是一个基于 Python 的代码检查工具,它可以帮助我们在编写Python代码时发现潜在的问题并提供修复建议。

GitHub: github.com/astral-sh/r…

图片

该项目采用 Rust 编写,比 Python 的 Flake8 和 Black 快 10-100 倍,支持通过 pip 安装、内置 700+ 规则、兼容 Python 3.12、自动纠错等功能。

图片

凡是能用 Rust 重写开发的工具,结果就突出一个字**“快”**。这也是它为什么快的主要原因。

Ruff 利用 Rust Python 的 AST 解析器,实现自己的 AST 遍历、visitor 抽象和 lint 规则逻辑。它目标是比其他工具快几个数量级,同时提供代码检查、autofix等一站式的解决方案。

Ruff 可以用来替换flake8(加上各种插件)、isort、pydocstyle、yesqa、eradicate、pyupgrade和 autoflake,所有这些都比任何单独的工具执行速度快几十或数百倍。Ruff 超越了传统 linter 的职责,而是作为一种高级代码转换工具,能够升级类型注释、重写类定义、对import导入进行排序等等。

主要功能特点

从Ruff官方介绍,可以看到目前有以下特点:

  • 支持 pyproject.toml

  • 兼容 Python 3.11

  • 超过 500 条内置规则,与 Flake8 内置的规则集近乎对等

  • 重新实现了数十个 Flake8 插件,如 flake8-bugbear、flake8-comprehensions 等

  • 支持自动修复,可自动纠正错误(例如,删除未使用的导入)

  • 内置缓存,可避免重复分析未更改的文件

  • 支持 VS Code、Pycharm、Neovim、Sublime Text、Emacs 等编辑器

  • 对 monorepo 友好,具有分层和级联配置

其中着重的一点是对规则的支持。Ruff 借鉴了流行的工具如 Flake8、autoflake、isort、pyupgrade、yesqa 等等,然后用 Rust 重新实现了超过 500 条规则。它本身不支持插件,但是吸收了数十个常用的 Flake8 插件的设计,使得已囊括的规则范围比其它任何工具都大。例如实现了部分flake8的插件。

安装和使用

Ruff在安装上也是非常简单,可以像其他第三方Python包一样通过pip安装,只需按照以下步骤进行操作:

pip install ruff

安装完成后,Windows会在Python版本Scripts目录下生成一个ruff.exe的可执行文件;MacOS会在Python版本bin目录下生成一个ruff的可执行文件。

图片

执行检查命令

图片

1、针对指定文件扫描

ruff check path/file.py

2、使用通配符进行扫描

ruff check path/*.py

3、还可以在watch监控模式下运行 Ruff,当文件改变时自动执行:

ruff path--watch

4、按照不同的目录和文件执行检查

ruff check .                        # 分析当前及子目录内的所有文件
ruff check path/to/code/            # 分析指定目录及子目录内的所有文件
ruff check path/to/code/*.py        # 分析指定目录内的所有py文件
ruff check path/to/code/to/file.py  # 分析 file.py

5、还可以和 pre-commit 一起工作:

- repo: https://github.com/charliermarsh/ruff-pre-commit
  # Ruff version.
  rev: 'v0.0.261'
  hooks:
    - id: ruff

最终,Ruff将生成一个报告文件,其中包含了检查结果和问题的详细信息。我们可以根据报告中的建议来修复代码中的问题。

总结

Ruff 可以在代码质量、代码规范、团队协作、持续集成等多种场景下应用。而且还有官方提供的VS Code的插件,非常方便实用。但是目前还没有发布Pycharm的插件。