Regras Essenciais de Lint
Nem toda regra de lint vale o tempo da CI. Estes conjuntos de regras capturam bugs reais e desvios de estilo com um mínimo de falsos positivos para projetos Python 3.14.
Receita
[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B", "SIM", "RUF", "S", "T20"]
ignore = ["E501", "S101"] # comprimento da linha via formatador; assert ok em testesQuando usar isso:
- Configurando o lint para um novo projeto
- Atualizando de um flake8 mínimo para um conjunto abrangente
- Aperfeiçoando a CI sem sobrecarregar a equipe
Exemplo de Trabalho
# Violações capturadas por regras essenciais:
import os, sys # I: imports não ordenados
x = 1 # F841: variável não utilizada (F)
eval("1+1") # S307: eval perigoso (S)
print("debug") # T20: statement de print (T20)
class unused: ... # F: definida mas nunca usadauv run ruff check example.py
# I001 Bloco de importação não está ordenado
# F841 Variável local `x` é atribuída mas nunca usada
# S307 Uso de função possivelmente insegura
# T201 `print` encontradoO que isso demonstra:
Icaptura desordem de importação antes da revisãoFcaptura código morto e nomes indefinidosS(bandit) sinaliza anti-padrões de segurançaT20captura prints de depuração deixados para trás
Mergulho Profundo
Níveis Recomendados
| Nível | Regras | Propósito |
|---|---|---|
| Core | E, F, I, UP | Estilo, bugs, imports, upgrades de sintaxe |
| Qualidade | B, SIM, RUF | Bugbear, simplificação, específico do ruff |
| Segurança | S (bandit) | Injeção SQL, eval, segredos hardcoded |
| Higiene | T20, PT | Sem print em produção; melhores práticas pytest |
Sobrescrições por Diretório
[tool.ruff.lint.per-file-ignores]
"tests/**" = ["S101"] # permite assert em testes
"migrations/**" = ["E", "F"] # ignora lint em migrações DjangoArmadilhas
- Habilitar tudo (
select = ["ALL"]) - centenas de falsos positivos. Correção: comece com o conjunto principal; adicione regras incrementalmente. - S101 em arquivos de teste - bandit sinaliza
assert. Correção: ignorar por arquivo paratests/**. - Regras UP em Python não suportado - pyupgrade sugere sintaxe que você não pode executar. Correção: corresponda
target-versionarequires-python. - T20 em scripts CLI - print é correto para saída CLI. Correção: ignorar T20 em
scripts/ou pontos de entrada CLI. - Ignorar muitas regras - o lint se torna sem sentido. Correção: cada ignorar precisa de um comentário explicando o porquê.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Mínimo (apenas E, F) | Protótipo muito inicial | Código de produção |
| ALL Completo | Sistemas com requisitos críticos de segurança | Pequenas equipes sem orçamento de lint |
| pylint | Análise profunda | CI com requisitos críticos de velocidade |
FAQs
Quais regras todo projeto deve habilitar?
No mínimo: E, F, I, UP. Adicione B e SIM para qualidade, S para código sensível à segurança.
Como encontro o que uma regra faz?
ruff rule B006 imprime a descrição da regra e exemplos.
Devo habilitar regras de verificação de tipos?
Ruff tem regras flake8-type-checking (TCH). Útil, mas pode ser barulhento. Prefira mypy/pyright para tipos.
Como adoto regras incrementalmente?
Habilite novas regras, execute ruff check --fix, comite as correções e, em seguida, adicione à CI.
O que é RUF?
Regras nativas do Ruff para padrões que outros plugins perdem (Unicode ambíguo, pyproject.toml inválido).
Testes devem ter regras diferentes?
Sim. Permita assert (S101), print para depuração e valores mágicos (PLR2004) em testes.
Como suprimo uma regra em todo o projeto?
Adicione a ignore = ["RULE"] em [tool.ruff.lint].
As regras de segurança (S) são lentas?
Não no ruff. Elas são rápidas e de alto valor para aplicativos web e CLIs que lidam com entrada do usuário.
E as regras específicas do Django?
Habilite DJ (flake8-django) para projetos Django. Ignore para FastAPI/Flask.
Com que frequência devo atualizar os conjuntos de regras?
Ao atualizar o ruff. Revise o changelog para novas regras de alto valor a cada trimestre.
Relacionado
- Configuração do Ruff - instalação e configuração
- isort e Organização de Imports - detalhes das regras de importação
- mypy e pyright na CI - camada de verificação de tipos
- Melhores Práticas de Linting e Formatação - estratégia de adoção
Versões da Stack: Esta página foi escrita para Python 3.14.0, FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.