Marcar o que vai sumir
Arcane.Evolucao.obsoleta — a ação continua funcionando, e quem a chama é avisado uma vez.
Remover uma ação de uma versão para a outra quebra quem a usa no dia da atualização. O caminho é avisar antes: numa versão menor, a ação continua funcionando e avisa; numa versão maior, ela sai. Quem prestou atenção ao aviso já migrou.
dataforge
adopt Arcane.Evolucao as Ev
action calcular_total(itens):
yield sum(itens)
mark @Ev.obsoleta("o nome dizia menos do que faz", desde := "1.4", use := "calcular_total")
action total(itens):
yield calcular_total(itens)
cycle i in range(0, 3):
assert total([1, 2]) is 3 // funciona — e avisa UMA vez
a := Ev.avisos()
assert len(a) is 1 and a[0]["acao"] is "total"
out a[0]["mensagem"]text
$ dataforge run app.df
aviso: 'total' esta obsoleta desde a 1.4: o nome dizia menos do que faz. Use 'calcular_total'.Três decisões#
| Decisão | Sem ela |
|---|---|
| o aviso sai uma vez por ação | uma ação obsoleta num laço de um milhão imprimiria um milhão de linhas — e o aviso que se repete é o aviso que se aprende a filtrar |
| o aviso vai para a saída de erro | um programa cuja saída é lida por outro (CSV, JSON) teria um aviso no meio dos dados |
DF_OBSOLETOS=erro reprova | o aviso impresso não para nada; no CI, ele precisa reprovar |
bash
DF_OBSOLETOS=erro dataforge test # no CI: o uso obsoleto reprova
DF_OBSOLETOS=silencio dataforge run app.df # quando nao da para mudar agoraO calendário#
| Versão | O que acontece com total |
|---|---|
| 1.4 (menor) | calcular_total nasce; total passa a avisar |
| 1.5, 1.6 (menores) | continua avisando — tempo para migrar |
| 2.0 (maior) | total sai; o CHANGELOG diz o que usar |