Fiz um negócio que obriga o Python a ter tipo em tudo
Fiz um negócio aí que talvez só eu queira usar.
O gawain é uma ferramenta pra Python que reclama de tudo que não tem tipo escrito: variável, parâmetro, retorno, constante, atributo de classe. Reclama de Any também. Quando tá tudo tipado, ele roda o ty pra ver se os tipos batem.
"Mas cara, pra que você fez isso?"
Não sei mano, talvez eu seja maluco? Eu quis fazer. Eu odeio dict[str, Any]. Mano, olha isso aqui:
def load(path: str) -> dict[str, Any]:
return {"timeout": "30"}
def timeout(path: str) -> int:
config = load(path)
seconds = config["timeout"]
return seconds
Ah não, chega.
O ty olha isso e fala All checks passed!, mas a função promete int e devolve "30". Aí resolvi fazer algo a respeito. O gawain não deixa passar: reclama do Any, do config e do seconds. Quando você escreve os tipos de verdade, o ty acha o erro na hora.
"Mas o Python já infere isso." "Mas minha IDE já infere pra mim." Então não use, meu brother. Não é pra todo mundo.
Se quiser testar, o modo padrão deixa passar o que é óbvio, tipo retries = 3, e o --mode strict cobra anotação em tudo. É feito em Rust com o parser do ruff, então roda rápido. Só toma cuidado que o ty ainda tá em beta, e os diagnósticos dele podem mudar de uma versão pra outra. Se isso incomodar, o --no-types roda só a parte das anotações.
Não tô vendendo nada. Pra mim software deveria ser de graça e todo mundo deveria ter acesso. Tá aberto, MIT, se alguém mais já pensou nisso ou quiser testar: