Sto provando a riformattare/ristampare il codice sorgente haskell (rimuovere/aggiungere spazi, interruzioni di riga, modificare lo stile di indentazione ...). Ho trovato il pacchetto haskell-src-exts che può analizzare e stampare codice sorgente haskell.Codice sorgente haskell pretty-print con commenti
Utilizzo della funzione parseFileWithComments :: ParseMode -> FilePath -> IO (ParseResult (Module, [Comment]))
Ottengo anche i commenti inclusi nel codice sorgente. Ora voglio stampare il modulo/AST con i commenti nelle posizioni originali, ma non riesco a trovare una funzione che lo faccia. Posso solo stampare l'AST. Devo implementare la stampa dell'AST più i commenti o esiste già una tale libreria?
Per chiarire considerazione seguente esempio:
A.hs file:
module A (fn1) where
-- | Haddock-comment
fn1 ::
String ->
String
fn1 _ = "" -- another comment
In ghci, digitando
Prelude Control.Monad.Reader Language.Haskell.Exts> (liftM prettyPrint) $ (liftM fst) $ (liftM fromParseResult) $ parseFileWithComments defaultParseMode "A.hs"`
stampe il codice sorgente del modulo (senza i commenti, ovviamente) . Posso usare qualsiasi funzione prettyPrint
per modificare la formattazione del codice sorgente.
Ora voglio essere in grado di fare qualcosa del genere:
do
(ast, comments) <- fromParseResult $ parseFileWithComments defaultParseMode "A.hs"
prettyPrintWithComments ast comments
per ottenere una versione pretty-stampata del file originale compreso i commenti.
Questo è abbastanza utile, ma non esattamente quello che volevo. Voglio comunque essere in grado di riformattare il codice sorgente effettivo con uno 'Stile' e una' PPHsMode' di stampa abbastanza precisi. – haja
@haja: perché non puoi? È ancora un'istanza della classe 'Pretty' di haskell-src-ext ... – ivanm
ma poi di nuovo, come possono essere inclusi i commenti originali nell'output di pretty-print? Non riesco a trovare una funzione che metta in bella mostra i commenti di _including_. – haja