C'è qualche modo per contrassegnare un simbolo come obsoleto in Clojure?Obsoleto-ing simboli in Clojure
Potrei usare qualcosa di simile da Lein che funziona bene.
https://github.com/technomancy/leiningen/blob/1.x/src/leiningen/core.clj#L13
Ma l'emette solo il suo avvertimento quando viene chiamata una funzione. Mi piacerebbe davvero che il compilatore lo rilevasse al momento della compilazione del codice, piuttosto che quando viene chiamato.
Naturalmente, ho potuto solo non definire il simbolo, che il compilatore sarebbe quindi prendere up, ma questo mi priva della capacità di fornire tutte le informazioni, come ad esempio il motivo per cui, o quando il simbolo è stato deprecato .
Tutto questo è per una DSL in cui la deprecazione e l'obsolescenza dei termini avverranno a un ritmo ragionevole.
Invece di ridefinire la funzione come un'altra funzione, ridefinirla come una macro che emette un avviso mentre viene espansa in fase di compilazione. – Barmar
@Barmar Che rende impossibile l'utilizzo come argomento o letterale. Idea terribile Invece, basta forzare l'avviso durante l'espansione della macro defdeprecated. (Il che ovviamente significa che l'avvertimento si verifica solo durante la compilazione della libreria, che potrebbe non essere ciò che si desidera). – Cubic
@cubic No, anche questo è sbagliato. Il punto è di avvertire quando un'applicazione client _utilizza_ la funzione obsoleta, non quando la libreria è compilata. Penso che ottenere ciò che è veramente desiderato avrà un supporto speciale nel compilatore Clojure. – Barmar