文档|操场
一个非常快的 Python linter 和代码格式化程序,用 Rust 编写。
从头开始对 CPython 代码库进行 Linting。
pip
安装pyproject.toml
支持Ruff 的目标是比其他工具快几个数量级,同时在单个通用界面后面集成更多功能。
Ruff 可用于替代 Flake8(以及数十个插件)、Black、isort、pydocstyle、pyupgrade、autoflake 等,同时执行速度比任何单个工具快数十或数百倍。
Ruff 在主要开源项目中得到了非常积极的开发和使用,例如:
...还有更多。
Ruff 得到了 Astral 的支持。阅读发布帖子或原始项目公告。
Sebastián Ramírez ,FastAPI 的创建者:
Ruff 速度如此之快,有时我会在代码中故意添加错误,只是为了确认它确实正在运行并检查代码。
Nick Schrock ,Elementl 创始人、GraphQL 联合创始人:
为什么 Ruff 能够改变游戏规则?主要是因为它快了近 1000 倍。字面上地。不是错字。在我们最大的模块(dagster 本身,250k LOC)上,pylint 大约需要 2.5 分钟,在我的 M1 上的 4 个内核上并行。对我们的整个代码库运行 ruff 需要 0.4 秒。
Bryan Van de Ven ,Bokeh 联合创始人,Conda 原作者:
在我的机器上,Ruff 比 flake8 快约 150-200 倍,扫描整个存储库需要约 0.2 秒,而不是约 20 秒。这对于当地开发者来说是生活质量的巨大改善。它的速度足够快,我将其添加为实际的提交挂钩,这非常棒。
蒂莫西·克罗斯利(Timothy Crosley) , isort 的创造者:
刚刚将我的第一个项目切换到 Ruff。到目前为止只有一个缺点:它太快了,我简直不敢相信它能正常工作,直到我故意引入了一些错误。
Zulip 的首席开发人员Tim Abbott :
这速度快得离谱……
ruff
太棒了。
有关更多信息,请参阅文档。
有关更多信息,请参阅文档。
Ruff 在 PyPI 上可以作为ruff
使用:
# With uv.
uv add --dev ruff # to add ruff to your project
uv tool install ruff # to install ruff globally
# With pip.
pip install ruff
# With pipx.
pipx install ruff
从版本0.5.0
开始,Ruff 可以使用我们的独立安装程序进行安装:
# On macOS and Linux.
curl -LsSf https://astral.sh/ruff/install.sh | sh
# On Windows.
powershell -c " irm https://astral.sh/ruff/install.ps1 | iex "
# For a specific version.
curl -LsSf https://astral.sh/ruff/0.8.2/install.sh | sh
powershell -c " irm https://astral.sh/ruff/0.8.2/install.ps1 | iex "
您还可以通过 Homebrew、Conda 以及各种其他包管理器安装 Ruff。
要将 Ruff 作为 linter 运行,请尝试以下任一操作:
ruff check # Lint all files in the current directory (and any subdirectories).
ruff check path/to/code/ # Lint all files in `/path/to/code` (and any subdirectories).
ruff check path/to/code/ * .py # Lint all `.py` files in `/path/to/code`.
ruff check path/to/code/to/file.py # Lint `file.py`.
ruff check @arguments.txt # Lint using an input file, treating its contents as newline-delimited command-line arguments.
或者,将 Ruff 作为格式化程序运行:
ruff format # Format all files in the current directory (and any subdirectories).
ruff format path/to/code/ # Format all files in `/path/to/code` (and any subdirectories).
ruff format path/to/code/ * .py # Format all `.py` files in `/path/to/code`.
ruff format path/to/code/to/file.py # Format `file.py`.
ruff format @arguments.txt # Format using an input file, treating its contents as newline-delimited command-line arguments.
Ruff 还可以通过ruff-pre-commit
用作预提交钩子:
- repo : https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev : v0.8.2
hooks :
# Run the linter.
- id : ruff
args : [ --fix ]
# Run the formatter.
- id : ruff-format
Ruff 还可以用作 VS Code 扩展或与各种其他编辑器一起使用。
Ruff 还可以通过ruff-action
用作 GitHub Action:
name : Ruff
on : [ push, pull_request ]
jobs :
ruff :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v4
- uses : astral-sh/ruff-action@v1
Ruff 可以通过pyproject.toml
、 ruff.toml
或.ruff.toml
文件进行配置(请参阅:配置或设置以获取所有配置选项的完整列表)。
如果未指定,Ruff 的默认配置相当于以下ruff.toml
文件:
# Exclude a variety of commonly ignored directories.
exclude = [
" .bzr " ,
" .direnv " ,
" .eggs " ,
" .git " ,
" .git-rewrite " ,
" .hg " ,
" .ipynb_checkpoints " ,
" .mypy_cache " ,
" .nox " ,
" .pants.d " ,
" .pyenv " ,
" .pytest_cache " ,
" .pytype " ,
" .ruff_cache " ,
" .svn " ,
" .tox " ,
" .venv " ,
" .vscode " ,
" __pypackages__ " ,
" _build " ,
" buck-out " ,
" build " ,
" dist " ,
" node_modules " ,
" site-packages " ,
" venv " ,
]
# Same as Black.
line-length = 88
indent-width = 4
# Assume Python 3.9
target-version = " py39 "
[ lint ]
# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
select = [ " E4 " , " E7 " , " E9 " , " F " ]
ignore = []
# Allow fix for all enabled rules (when `--fix`) is provided.
fixable = [ " ALL " ]
unfixable = []
# Allow unused variables when underscore-prefixed.
dummy-variable-rgx = " ^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$ "
[ format ]
# Like Black, use double quotes for strings.
quote-style = " double "
# Like Black, indent with spaces, rather than tabs.
indent-style = " space "
# Like Black, respect magic trailing commas.
skip-magic-trailing-comma = false
# Like Black, automatically detect the appropriate line ending.
line-ending = " auto "
请注意,在pyproject.toml
中,每个节标题应以tool.ruff
为前缀。例如, [lint]
应替换为[tool.ruff.lint]
。
一些配置选项可以通过专用命令行参数提供,例如与规则启用和禁用、文件发现和日志记录级别相关的选项:
ruff check --select F401 --select F403 --quiet
其余的配置选项可以通过一个包罗万象的--config
参数提供:
ruff check --config " lint.per-file-ignores = {'some_file.py' = ['F841']} "
要选择最新的 lint 规则、格式化程序样式更改、界面更新等,请通过在配置文件中设置preview = true
或在命令行上传递--preview
来启用预览模式。预览模式支持一系列不稳定的功能,这些功能可能会在稳定之前发生变化。
有关 Ruff 顶级命令的更多信息,请参阅ruff help
,或者分别有关 linting 和格式化命令的更多信息,请ruff help check
和ruff help format
。
Ruff 支持 800 多种 lint 规则,其中许多规则受到 Flake8、isort、pyupgrade 等流行工具的启发。无论规则的起源如何,Ruff 都会将 Rust 中的每条规则重新实现为第一方功能。
默认情况下,Ruff 启用 Flake8 的F
规则以及E
规则的子集,忽略与格式化程序的使用重叠的任何风格规则,例如ruff format
或 Black。
如果您刚刚开始使用 Ruff,默认规则集是一个很好的起点:它以零配置捕获各种常见错误(例如未使用的导入)。
除了默认值之外,Ruff 还重新实现了一些最流行的 Flake8 插件和相关代码质量工具,包括:
有关支持的规则的完整枚举,请参阅规则。
欢迎并高度赞赏您的贡献。首先,请查看贡献指南。
您也可以加入我们的Discord 。
有麻烦吗?查看GitHub上的现有问题,或者随意打开一个新问题。
您还可以在Discord上寻求帮助。
Ruff 的 linter 借鉴了 Python 生态系统中许多其他工具的 API 和实现细节,特别是 Flake8、Pyflakes、pycodestyle、pydocstyle、pyupgrade 和 isort。
在某些情况下,Ruff 包含相应工具的“直接”Rust 端口。我们感谢这些工具的维护者所做的工作以及他们为 Python 社区提供的所有价值。
Ruff 的格式化程序基于 Rome 的rome_formatter
的分支构建,并再次借鉴了 Rome、Prettier 和 Black 的 API 和实现细节。
Ruff 的导入解析器基于 Pyright 的导入解析算法。
Ruff 还受到 Python 生态系统之外的许多工具的影响,例如 Clippy 和 ESLint。
Ruff 是大量贡献者的受益者。
Ruff 是在 MIT 许可下发布的。
Ruff 被许多主要开源项目和公司使用,包括:
如果您使用 Ruff,请考虑将 Ruff 徽章添加到项目的README.md
中:
[ ![ Ruff ] ( https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json )] ( https://github.com/astral-sh/ruff )
...或README.rst
:
.. image :: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
:target: https://github.com/astral-sh/ruff
:alt: Ruff
...或者,作为 HTML:
< a href =" https://github.com/astral-sh/ruff " > < img src =" https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json " alt =" Ruff " style =" max-width:100%; " > </ a >
该存储库已根据 MIT 许可证获得许可