2015-09-21 12 views
6

Jeśli zrobię cabal build w mojej bibliotece, a następnie zmienię plik, następnym razem, gdy uruchomię cabal build, będę musiał ponownie skompilować pliki, których dotyczą zmiany. Nie zachowuję się tak samo z poleceniem cabal haddock: kiedy uruchomię go po zmianie pliku, cabal/haddock kończy się wyrzucaniem całej poprzedniej pracy i zaczynaniem od zera. Jest to dość czasochłonne; czy istnieje sposób na uzyskanie różnicowych aktualizacji dokumentacji?Dokumentacja różnicowa z plamiakiem

Oto dump of the command cabal issues do generowania dokumentacji.

+0

Nie pamiętam: czy plamiak się nie buduje, jeśli łączysz się z czymś, co nie istnieje? Podobnie jak przy użyciu '' MyModule'' i nie masz dostępnego 'MyModule'. Ponieważ jeśli po prostu daje ostrzeżenie i nadal działa, to zachowanie jest wymagane: każda zmiana istniejących plików lub dodanie plików może zmodyfikować wyjście dokumentacji innych modułów. – Bakuriu

+0

Wierzę, że dużo czasu zajmuje odbudowywanie stron indeksu globalnego. Dużo czasu można by zaoszczędzić, gdyby strony te nie zostały zbudowane. Użyj flagi -v z kabałą, aby zobaczyć, jakie komendy zbrodni są wykonywane. – ErikR

+0

@Bakuriu Jeśli dodaję losowy 'import ModuleDoesNotExist' do górnej części pliku, popsuje i nie wyświetla żadnych dokumentacji. Jeśli wymuszam błąd innego rodzaju kompilacji (np. Błąd składni), dokumentacja wyjścia do modułu kończy się błędem, a następnie zwarciem i nie dostarcza dokumentacji dla pozostałych modułów. – crockeea

Odpowiedz

1

processModules dokumentacja mówi:

tworzyć interfejsy i środowisko łącza przez typechecking listę modułów wykorzystujących interfejs GHC i przetwarzanie uzyskanych drzew składniowych.

I to jest podstawowa funkcja haddock. Więc ATM odpowiedź na twoje pytanie to nr.

cabal build nie pomaga cabal haddock w ogóle, jak haddock typu kontrole modułów o różnych parametrach (np zmienna włączone __HADDOCK__ CPP)

Making niezawodny generacja plamiaka przyrostowe jest trudne, jak kod później na wykresie zależność może zmienić poprzednią dokumentację modułów: w szczególności listy instancji. Prawdopodobnie można było zrzucić interfejsy modułów.

Poszukując at the code of processModules pierwszy krok to coś, co można zrobić stopniowo, reszta wykorzystuje informacje globalne.

Spróbuj zmienić szczegółowość na maks. Tj. --haddock-options=--verbosity=2 i sprawdź, ile czasu upływa między Creating interfaces... a Attaching instances....

+0

'cabal haddock --haddock-options = - verbosity = 2' nie drukuje niczego o" tworzeniu interfejsów "lub" dołączaniu instancji ". – crockeea

+0

@Erik, wydaje się, że musisz podać '-v3' na' cabal', aby uzyskać pełne wyjście. OTOH wydaje się, że większość czasu spędza się pomiędzy "Tworzenie interfejsów ..." i "Umieszczanie instancji". Może istnieje możliwość optymalizacji. – phadej

+0

"Dołączanie instancji" i "Tworzenie interfejsów" są w zasadzie natychmiastowe, ale krok "Sprawdzanie modułu" zajmuje zauważalny czas dla każdego modułu. – crockeea