Документы | Детская площадка
Чрезвычайно быстрый линтер и форматировщик кода Python, написанный на Rust.
Линтинг кодовой базы CPython с нуля.
pip
pyproject.toml
Ruff стремится быть на порядки быстрее альтернативных инструментов, интегрируя при этом больше функций в единый общий интерфейс.
Ruff можно использовать для замены Flake8 (плюс десятки плагинов), Black, isort, pydocstyle, pyupgrade, autoflake и других, при этом работая в десятки или сотни раз быстрее, чем любой отдельный инструмент.
Ruff чрезвычайно активно разрабатывается и используется в крупных проектах с открытым исходным кодом, таких как:
... и многое другое.
Раффа поддерживает Astral. Прочтите стартовую публикацию или оригинальное объявление о проекте.
Себастьян Рамирес , создатель FastAPI:
Ruff настолько быстр, что иногда я намеренно добавляю ошибку в код только для того, чтобы убедиться, что он действительно работает, и проверить код.
Ник Шрок , основатель Elementl, соавтор GraphQL:
Почему Рафф меняет правила игры? Прежде всего потому, что он почти в 1000 раз быстрее. Буквально. Не опечатка. На нашем самом большом модуле (сам dagster, 250 тыс. LOC) pylint занимает около 2,5 минут при распараллеливании на 4 ядрах моего M1. Проверка всей нашей кодовой базы занимает 0,4 секунды.
Брайан Ван де Вен , соавтор Bokeh, автор оригинального Conda:
Ruff на моей машине работает примерно в 150-200 раз быстрее, чем flake8, сканирование всего репозитория занимает ~0,2 секунды вместо ~20 секунд. Это огромное улучшение качества жизни местных разработчиков. Это настолько быстро, что я добавил его как настоящий крючок фиксации, и это потрясающе.
Тимоти Кросли , создатель isort:
Только что переключил свой первый проект на Ruff. Пока только один недостаток: он работает настолько быстро, что я не мог поверить, что он работает, пока намеренно не внес несколько ошибок.
Тим Эбботт , ведущий разработчик Zulip:
Это просто смехотворно быстро...
ruff
потрясающий.
Дополнительную информацию см. в документации.
Дополнительную информацию см. в документации.
Ruff доступен как ruff
на PyPI:
# 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 "
Вы также можете установить Ruff через Homebrew, Conda и множество других менеджеров пакетов.
Чтобы запустить Ruff в качестве линтера, попробуйте любое из следующих действий:
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 также можно использовать в качестве действия GitHub с помощью ruff-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 help
, а также ruff help check
и ruff help format
для получения дополнительной информации о командах проверки и форматирования соответственно.
Ruff поддерживает более 800 правил lint , многие из которых основаны на таких популярных инструментах, как Flake8, isort, pyupgrade и других. Независимо от происхождения правила, Ruff повторно реализует каждое правило в Rust как собственную функцию.
По умолчанию Ruff включает правила F
Flake8, а также подмножество правил E
, исключая любые стилистические правила, которые перекрываются с использованием средства форматирования, например ruff format
или Black.
Если вы только начинаете работать с Ruff, набор правил по умолчанию — отличное место для начала : он улавливает широкий спектр распространенных ошибок (например, неиспользуемый импорт) при нулевой настройке.
Помимо настроек по умолчанию, Ruff повторно реализует некоторые из самых популярных плагинов Flake8 и связанных с ними инструментов качества кода, в том числе:
Полный перечень поддерживаемых правил см. в разделе Правила .
Вклад приветствуется и высоко ценится. Для начала ознакомьтесь с правилами участия .
Вы также можете присоединиться к нам в Discord .
Возникли проблемы? Ознакомьтесь с существующими проблемами на GitHub или смело открывайте новые .
Вы также можете попросить помощи в Discord .
Линтер Раффа использует как API, так и детали реализации многих других инструментов экосистемы Python, особенно Flake8, Pyflakes, pycodestyle, pydocstyle, pyupgrade и isort.
В некоторых случаях Ruff включает «прямой» порт соответствующего инструмента на Rust. Мы благодарны разработчикам этих инструментов за их работу и за всю ценность, которую они принесли сообществу Python.
Форматтер Ruff построен на ответвлении rome_formatter
от Rome и снова использует как API, так и детали реализации из Rome, Prettier и Black.
Преобразователь импорта Ruff основан на алгоритме разрешения импорта от Pyright.
На Ruff также влияет ряд инструментов вне экосистемы Python, таких как Clippy и ESLint.
Рафф является бенефициаром большого количества жертвователей.
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.