2012-02-22 15 views
7

Próbuję sformatować/ponownie wydrukować kod źródłowy haskell (usunąć/dodać białe spacje, linebreaks, zmienić styl wcięcia ...). Znalazłem pakiet haskell-src-exts, który potrafi parsować i ładnie drukować kod źródłowy haskell.Pretty-print kodu źródłowego haskell z komentarzami

Korzystając z funkcji parseFileWithComments :: ParseMode -> FilePath -> IO (ParseResult (Module, [Comment])) Dostaję również komentarze zawarte w kodzie źródłowym. Teraz chcę wydrukować moduł/AST z komentarzami w oryginalnych pozycjach, ale nie mogę znaleźć funkcji, która to zrobi. Mogę tylko ładnie wydrukować AST. Czy muszę zaimplementować drukowanie AST wraz z komentarzami, czy taka biblioteka już istnieje?

Aby wyjaśnić rozważyć następujący przykład:

plików A.hs:

module A (fn1) where 

-- | Haddock-comment 
fn1 :: 
    String -> 
    String 
fn1 _ = "" -- another comment 

W ghci, wpisując

Prelude Control.Monad.Reader Language.Haskell.Exts> (liftM prettyPrint) $ (liftM fst) $ (liftM fromParseResult) $ parseFileWithComments defaultParseMode "A.hs"` 

wydruki kod źródłowy modułu (bez uwag, oczywiście) . Mogę użyć dowolnej funkcji prettyPrint, aby zmodyfikować formatowanie kodu źródłowego.

Teraz chcę być w stanie zrobić coś takiego:

do 
    (ast, comments) <- fromParseResult $ parseFileWithComments defaultParseMode "A.hs" 
    prettyPrintWithComments ast comments 

aby uzyskać całkiem-drukowaną wersję oryginalnego pliku w tym komentarzach.

Odpowiedz

4

Użyj wersji Annotated modułów, np. Language.Haskell.Exts.Annotated vs Language.Haskell.Exts.

+0

To bardzo pomocne, ale nie dokładnie to, co chciałem. Nadal chcę mieć możliwość ponownego sformatowania kodu źródłowego za pomocą skonfigurowanego "stylu" i "stylu PPH" skonfigurowanego w stylu pretty-print. – haja

+0

@haja: dlaczego nie możesz? Nadal jest instancją klasy "Pretty' haskell-src-ext ... – ivanm

+0

, ale jak to się dzieje, że oryginalne komentarze mogą być zawarte w wynikach drukowania" pretty-print "? Nie mogę znaleźć funkcji, która ładnie wypisze ast, łącznie z komentarzami. – haja

2

W zależności od tego, jaki ładny wydruk chcesz zrobić, możesz rzucić okiem na pakiet hscolour, który jest używany do kolorowania kodu źródłowego Haskell do różnych formatów wyjściowych.

W szczególności moduł Language.Haskell.HsColour.Classify zawiera tokenizer Haskella, który zachowuje białe spacje i komentarze, które mogą służyć jako dobry punkt wyjścia.

+0

dziękuję, ale nie szukam tego rodzaju ładnego druku. Zaktualizowałem moje pytanie, aby wyjaśnić, jakiego rodzaju drukowania chcę. – haja

Powiązane problemy