Rigor de tipagem¶
Quanto de tipagem o projeto cobra é uma decisão do projeto — então mora
no pyproject.toml, versionada, e não numa flag que alguém lembra de
passar.
Sem a chave (ou sem pyproject.toml), o nível é standard.
O que cada nível acrescenta¶
O nível soma flags ao que você já configurou em [tool.ruff] e
[tool.mypy] — nunca afrouxa:
| Nível | ruff (regras ANN extras) |
mypy |
|---|---|---|
lenient |
nenhuma | nenhuma |
standard |
ANN001, ANN201, ANN202, ANN205, ANN206 |
--disallow-untyped-defs --disallow-incomplete-defs |
strict |
as acima mais ANN204 |
--strict |
ANN001— argumento de função sem anotaçãoANN201/ANN202— retorno de função pública / privadaANN204— retorno de método especial (__init__e afins)ANN205/ANN206— retorno de staticmethod / classmethod
ANN401 nunca é ligado, em nível nenhum
ANN401 proíbe Any em anotação. Any é uma anotação legítima —
às vezes é a única honesta. Os níveis cobram que as coisas estejam
anotadas, nunca que evitem Any.
ANN002 / ANN003 (*args / **kwargs) também ficam de fora: em
wrapper de passagem viram ruído sem informação.
E as regras em si?
Este knob só mexe em tipagem. Ligar, desligar e afrouxar qualquer outra regra — inclusive calar as reclamações do mypy sobre bibliotecas sem tipos, que assustam na primeira execução — é assunto de Ajustando as regras.
Override por execução¶
A flag vence a configuração, e vale só para aquela execução. Um valor inválido é erro de uso (saída 2) listando os aceitos — nunca cai silenciosamente no default.
Subindo o nível aos poucos¶
Adotar strict num projeto legado de uma vez gera centenas de erros e
ninguém arruma. O caminho que funciona:
- comece em
leniente deixe o gate verde; - suba para
standarde conserte o que aparecer; - rode
tempest-cli type -s strictde vez em quando, sem mudar a config, para ver o tamanho da dívida; - quando a lista couber numa tarde, fixe
strictnopyproject.toml.
Recap¶
[tool.tempest] typing_strictnesscom três níveis; defaultstandard.- O nível só acrescenta flags — sua config nunca é afrouxada.
--strictnesssobrescreve por execução; valor inválido sai com 2.Anynunca é proibido.