Ruff vs Flake8: qual linter de Python para o CI?
O Ruff é um linter baseado em Rust que roda muito mais rápido que o Flake8 e incorpora as regras de vários plugins.
O Flake8 é um linter de Python consagrado que envolve o pyflakes, o pycodestyle e plugins. O Ruff (da Astral) é um linter baseado em Rust que reimplementa um grande conjunto de regras do Flake8/plugins e roda ordens de magnitude mais rápido, muitas vezes substituindo várias ferramentas de uma vez.
| Flake8 | Ruff | |
|---|---|---|
| Implementação | Python | Rust |
| Velocidade | Mais lento | Extremamente rápido |
| Cobertura de regras | Núcleo + plugins | Reimplementa as regras de muitos plugins |
| Autofix | Não | Sim (muitas regras) |
| Consolidação | Várias ferramentas/plugins | Uma ferramenta para muitas verificações |
No CI
O Ruff normalmente linta uma base de código Python grande em uma fração de segundo, onde o Flake8 leva muito mais tempo, e pode substituir o Flake8 mais vários plugins (isort, regras no estilo pyupgrade e mais) com um único binário rápido. Ele também faz autofix de muitos problemas. O Flake8 continua familiar e estável; se você depende de um plugin de nicho do Flake8 que o Ruff ainda não portou, mantenha essa verificação.
Esforço de migração
Mapeie os plugins do Flake8 que você tem habilitados para os conjuntos de regras do Ruff, rode o Ruff com --fix em um único commit e então imponha no CI. A maioria das regras comuns do Flake8/plugins tem equivalentes no Ruff; verifique quaisquer plugins especializados dos quais você depende.
O veredito
Quer linting muito rápido que consolida várias ferramentas e faz autofix: Ruff. Depende de um plugin de nicho do Flake8 que falta no Ruff: mantenha essa verificação (ou rode ambos). A maioria dos times move o grosso do linting para o Ruff.