Documentos | Parque infantil
Um linter Python e formatador de código extremamente rápido, escrito em Rust.
Linting a base de código CPython do zero.
pip
pyproject.toml
Ruff pretende ser muito mais rápido do que ferramentas alternativas, ao mesmo tempo que integra mais funcionalidades por trás de uma interface única e comum.
Ruff pode ser usado para substituir Flake8 (além de dezenas de plug-ins), Black, isort, pydocstyle, pyupgrade, autoflake e muito mais, tudo isso enquanto executa dezenas ou centenas de vezes mais rápido do que qualquer ferramenta individual.
Ruff é desenvolvido e usado de forma extremamente ativa em grandes projetos de código aberto como:
...e muito mais.
Ruff é apoiado por Astral. Leia a postagem de lançamento ou o anúncio original do projeto.
Sebastián Ramírez , criador do FastAPI:
Ruff é tão rápido que às vezes adiciono um bug intencional no código apenas para confirmar se ele está realmente sendo executado e verificando o código.
Nick Schrock , fundador da Elementl, cocriador do GraphQL:
Por que Ruff é um gamechanger? Principalmente porque é quase 1000x mais rápido. Literalmente. Não é um erro de digitação. Em nosso módulo maior (o próprio dagster, 250k LOC), o pylint leva cerca de 2,5 minutos, paralelizado em 4 núcleos em meu M1. Executar ruff em toda a nossa base de código leva 0,4 segundos.
Bryan Van de Ven , co-criador de Bokeh, autor original de Conda:
Ruff é ~ 150-200x mais rápido que flake8 na minha máquina, a verificação de todo o repositório leva ~ 0,2s em vez de ~ 20s. Esta é uma enorme melhoria na qualidade de vida do desenvolvedor local. É rápido o suficiente para adicioná-lo como um gancho de commit real, o que é ótimo.
Timothy Crosley , criador do issort:
Acabei de mudar meu primeiro projeto para Ruff. Apenas uma desvantagem até agora: é tão rápido que não pude acreditar que estava funcionando até que introduzi intencionalmente alguns erros.
Tim Abbott , desenvolvedor líder do Zulip:
Isso é ridiculamente rápido...
ruff
é incrível.
Para mais informações, consulte a documentação.
Para mais informações, consulte a documentação.
Ruff está disponível como ruff
no 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
A partir da versão 0.5.0
, o Ruff pode ser instalado com nossos instaladores independentes:
# 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 "
Você também pode instalar o Ruff via Homebrew, Conda e com uma variedade de outros gerenciadores de pacotes.
Para executar o Ruff como um linter, tente qualquer um dos seguintes:
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.
Ou, para executar o Ruff como formatador:
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 também pode ser usado como gancho de pré-commit via 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 também pode ser usado como uma extensão do VS Code ou com vários outros editores.
Ruff também pode ser usado como ação GitHub via 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 pode ser configurado por meio de um arquivo pyproject.toml
, ruff.toml
ou .ruff.toml
(consulte: Configuração ou Configurações para obter uma lista completa de todas as opções de configuração).
Se não for especificado, a configuração padrão do Ruff será equivalente ao seguinte arquivo 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 "
Observe que, em um pyproject.toml
, cada cabeçalho de seção deve ser prefixado com tool.ruff
. Por exemplo, [lint]
deve ser substituído por [tool.ruff.lint]
.
Algumas opções de configuração podem ser fornecidas por meio de argumentos de linha de comando dedicados, como aqueles relacionados à ativação e desativação de regras, descoberta de arquivos e nível de registro em log:
ruff check --select F401 --select F403 --quiet
As opções de configuração restantes podem ser fornecidas através de um argumento catch-all --config
:
ruff check --config " lint.per-file-ignores = {'some_file.py' = ['F841']} "
Para aceitar as regras de lint mais recentes, alterações de estilo do formatador, atualizações de interface e muito mais, habilite o modo de visualização definindo preview = true
em seu arquivo de configuração ou passando --preview
na linha de comando. O modo de visualização permite uma coleção de recursos instáveis que podem mudar antes da estabilização.
Consulte ruff help
para obter mais informações sobre os comandos de nível superior do Ruff, ou ruff help check
e ruff help format
para obter mais informações sobre os comandos linting e formatting, respectivamente.
Ruff suporta mais de 800 regras de lint , muitas das quais são inspiradas em ferramentas populares como Flake8, isort, pyupgrade e outras. Independentemente da origem da regra, Ruff reimplementa todas as regras no Rust como um recurso original.
Por padrão, Ruff habilita as regras F
do Flake8, junto com um subconjunto de regras E
, omitindo quaisquer regras estilísticas que se sobreponham ao uso de um formatador, como ruff format
ou Black.
Se você está apenas começando com o Ruff, o conjunto de regras padrão é um ótimo lugar para começar : ele detecta uma grande variedade de erros comuns (como importações não utilizadas) sem nenhuma configuração.
Além dos padrões, Ruff reimplementa alguns dos plug-ins Flake8 mais populares e ferramentas de qualidade de código relacionadas, incluindo:
Para obter uma enumeração completa das regras suportadas, consulte Regras .
Contribuições são bem-vindas e muito apreciadas. Para começar, confira as diretrizes de contribuição .
Você também pode se juntar a nós no Discord .
Está com problemas? Confira os problemas existentes no GitHub ou sinta-se à vontade para abrir um novo .
Você também pode pedir ajuda no Discord .
O linter de Ruff baseia-se nas APIs e nos detalhes de implementação de muitas outras ferramentas no ecossistema Python, especialmente Flake8, Pyflakes, pycodestyle, pydocstyle, pyupgrade e isort.
Em alguns casos, Ruff inclui uma porta Rust "direta" da ferramenta correspondente. Somos gratos aos mantenedores dessas ferramentas por seu trabalho e por todo o valor que forneceram à comunidade Python.
O formatador de Ruff é construído em um fork do rome_formatter
de Rome e, novamente, baseia-se na API e nos detalhes de implementação de Rome, Prettier e Black.
O resolvedor de importação de Ruff é baseado no algoritmo de resolução de importação da Pyright.
Ruff também é influenciado por diversas ferramentas fora do ecossistema Python, como Clippy e ESLint.
Ruff é beneficiário de um grande número de contribuidores.
Ruff é lançado sob a licença do MIT.
Ruff é usado por vários grandes projetos e empresas de código aberto, incluindo:
Se você estiver usando o Ruff, considere adicionar o emblema Ruff ao README.md
do seu projeto:
[ ![ 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 )
...ou 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
...ou, como 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 >
Este repositório está licenciado sob a licença MIT