2012-02-22 14 views
7

私はhaskellのソースコードを再フォーマット/再版しようとしています(空白、行改行、インデントスタイルの変更/削除...)。私はhaskellのソースコードを解析してきれいに印刷できるパッケージhaskell-src-extsを見つけました。pretty-print haskellのソースコードとコメント

関数parseFileWithComments :: ParseMode -> FilePath -> IO (ParseResult (Module, [Comment]))を使用すると、ソースコードに含まれるコメントも取得できます。今は元の位置にコメント付きのModule/ASTを印刷したいが、それを行う関数を見つけることはできない。私はASTだけをきれいに印刷することができます。私はASTの印刷とコメントを自分で実装しなければならないのでしょうか、そういうライブラリはすでに存在していますか? (もちろん、コメントせず)

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

プリントモジュールのソースコードを入力し、GHCiので

module A (fn1) where 

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

ファイルA.hs:

次の例を考える明確にするために。任意の prettyPrint -functionを使用して、ソースコードの書式を変更することができます。コメントを含む元のファイルのプリティ印刷版を得るために

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

今、私はこのような何かを行うことができるようにしたいです。

答えて

4

Annotatedバージョンのモジュールを使用してください。 Language.Haskell.Exts.AnnotatedLanguage.Haskell.Exts

+0

非常に役に立ちましたが、正確には私が望んでいたものではありません。私はまだ設定済みのきれいな 'Style'と' PPHsMode'で実際のソースコードを再フォーマットしたいと思っています。 – haja

+0

@haja:なぜあなたはできませんか?これはまだhaskell-src-extの 'Pretty'クラスのインスタンスです... – ivanm

+0

しかし、やはり元のコメントはかなりプリント出力にどのように含まれていますか? ast-include_というコメントをきれいに印刷する関数が見つかりません。 – haja

2

どのようなかわいい印刷をしたいかによって、Haskellのソースコードをさまざまな出力形式に色分けするために使用されるhscolourパッケージを見てください。

特に、モジュールLanguage.Haskell.HsColour.Classifyには、空白とコメントを保持するHaskellトークナイザが含まれています。これは、適切な開始点として役立ちます。

+0

ありがとうございますが、私はこのようなかわいらしい印刷物を探しているわけではありません。どのようなきれいな印刷をしたいのかを明確にするために質問を更新しました。 – haja

関連する問題