Ruff vs Black: qual formatador de Python para o CI?
O formatador do Ruff é rápido e busca uma saída compatível com o Black, e ele também linta no mesmo binário.
O Black é o formatador de código Python amplamente adotado e opinativo. O Ruff (da Astral) inclui um formatador projetado para ser altamente compatível com o Black, ao mesmo tempo em que roda muito mais rápido e se combina com o linter do Ruff em uma única ferramenta.
| Black | Ruff (format) | |
|---|---|---|
| Implementação | Python | Rust |
| Velocidade | Mais lento | Muito rápido |
| Compatibilidade com o Black | n/a (a referência) | Alta por design |
| Linting | Não (só formatação) | Sim (lint + format) |
| Adoção | Onipresente | Em crescimento rápido |
No CI
Um passo de format --check roda a cada push; o Ruff o torna visivelmente mais rápido e pode substituir o Black mais o seu linter com um único binário. O formatador do Ruff mira uma saída compatível com o Black, então, para a maioria das bases de código, o diff de formatação ao trocar é mínimo. O Black continua sendo o formatador de referência, com a mais ampla familiaridade de ecossistema e suporte de editores.
Esforço de migração
Rode o ruff format em todo o repositório em um único commit para absorver quaisquer pequenos diffs, e então imponha-o no CI. Como a saída é compatível com o Black por design, o churn costuma ser baixo. Mantenha o Black apenas se uma ferramenta ou fluxo específico o exigir explicitamente.
O veredito
Quer formatação rápida (mais linting) em uma única ferramenta com saída compatível com o Black: Ruff. Quer o formatador de referência com máxima familiaridade de ecossistema: Black. Trocar gera pouco churn - reformate em um único commit.