2015-09-21 21 views
6

Se faccio un cabal build sulla mia libreria, quindi cambio un file, la prossima volta che eseguo cabal build, devo solo ricompilare i file interessati dalle modifiche. Non sto ottenendo lo stesso comportamento con il comando cabal haddock: quando lo eseguo dopo aver cambiato un file, cabal/eglefino finisce per buttare fuori tutto il lavoro precedente e partire da zero. Questo è piuttosto che richiede tempo; c'è un modo per ottenere aggiornamenti differenziali alla documentazione?Documentazione differenziale con eglefino

Ecco uno dump of the command cabal issues per generare la documentazione.

+0

Non ricordo: l'eglefino non riesce a generare se si collega a qualcosa che non esiste? Come usare ''MyModule'' e non hai' MyModule' disponibile. Perché se fornisce semplicemente un avvertimento e continua a funzionare, è necessario il seguente comportamento: qualsiasi modifica ai file esistenti o aggiunta di file potrebbe modificare l'output della documentazione degli altri moduli. – Bakuriu

+0

Credo che si spenda molto tempo per ricostruire le pagine indice globali. Un sacco di tempo potrebbe essere salvato se quelle pagine non sono state costruite. Usa il flag -v con cabal per vedere quali comandi di haddock vengono eseguiti. – ErikR

+0

@Bakuriu Se aggiungo un file di importazione 'DoDoNotExist' in modo casuale all'inizio di un file, ho archiviato i cortocircuiti e non ha prodotto alcuna documentazione. Se imposto un altro tipo di errore di compilazione (ad esempio un errore di sintassi), l'haddock restituisce la documentazione fino al modulo con l'errore, ma poi cortocircuiti e non invia la documentazione per il resto dei moduli. – crockeea

risposta

1

processModules documentazione dice:

creare interfacce e un ambiente di collegamento dal typechecking l'elenco dei moduli tramite l'API GHC ed elaborazione degli alberi di sintassi che ne derivano.

E questa è la funzione principale di haddock. Così ATM la risposta è la tua domanda è No.

cabal build non aiuta cabal haddock affatto, come haddock tipo-controlli moduli con diversi parametri (ad esempio CPP __HADDOCK__ variabile abilitato)

Fare affidabile generazione eglefino incrementale è difficile, in quanto il codice successivamente nel grafico di dipendenza può alterare la documentazione dei moduli precedente a quel punto: in particolare gli elenchi delle istanze. Probabilmente si potrebbero scaricare le interfacce dei moduli.

Alla ricerca di at the code of processModules il primo passaggio è qualcosa che potrebbe essere possibile eseguire in modo incrementale, il resto utilizza le informazioni globali.

Provare la verbosità massima al valore massimo --haddock-options=--verbosity=2 e verificare quanto tempo è trascorso tra Creating interfaces... e Attaching instances....

+0

'cable eglefino --haddock-options = - verbosity = 2' non stampa nulla su" creare interfacce "o" allegare istanze ". – crockeea

+0

@Erik, sembra che devi dare '-v3' a' cabal' per ottenere l'output dettagliato di 'haddock'. OTOH sembra che la maggior parte del tempo passi tra 'Creating interfaces ...' e 'Attacing instance'. Forse c'è un'opportunità di ottimizzazione. – phadej

+0

"Il collegamento di istanze" e "Creazione di interfacce" sono entrambi sostanzialmente istantanei, ma il passaggio "Modulo di verifica" richiede una quantità notevole di tempo per ciascun modulo. – crockeea