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.
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
@haja: dlaczego nie możesz? Nadal jest instancją klasy "Pretty' haskell-src-ext ... – ivanm
, 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