2012-02-22 30 views
7

Tôi đang cố gắng định dạng lại/in lại mã nguồn haskell (loại bỏ/thêm khoảng trắng, ngắt dòng, thay đổi phong cách sở hữu ...). Tôi đã tìm thấy gói haskell-src-exts có thể phân tích cú pháp và in mã nguồn haskell đẹp mắt.Mã nguồn haskell khá có ý kiến ​​

Sử dụng hàm parseFileWithComments :: ParseMode -> FilePath -> IO (ParseResult (Module, [Comment])) Tôi cũng nhận được các nhận xét được bao gồm trong mã nguồn. Bây giờ tôi muốn in các Module/AST với các ý kiến ​​ở các vị trí ban đầu, nhưng tôi không thể tìm thấy một chức năng mà sẽ làm điều đó. Tôi chỉ có thể in ấn AST. Tôi có phải thực hiện in ấn của AST cộng với ý kiến ​​bản thân mình hoặc làm như một thư viện đã tồn tại?

Để làm rõ xem xét ví dụ sau:

tập tin A.hs:

module A (fn1) where 

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

Trong ghci, gõ

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

in mã nguồn mô-đun (không có ý kiến, tất nhiên) . Tôi có thể sử dụng bất kỳ prettyPrint -function nào để sửa đổi định dạng mã nguồn.

Bây giờ tôi muốn để có thể làm điều gì đó như thế này:

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

để có được một phiên bản khá-in của tập tin gốc trong đó có ý kiến.

Trả lời

4

Sử dụng các phiên bản Annotated của mô-đun, ví dụ: Language.Haskell.Exts.AnnotatedLanguage.Haskell.Exts.

+0

Điều đó khá hữu ích, nhưng không chính xác những gì tôi muốn. Tôi vẫn muốn có thể định dạng lại mã nguồn thực tế bằng một 'Style' và' PPHsMode' được định cấu hình khá đẹp. – haja

+0

@haja: tại sao bạn không thể? Nó vẫn là một thể hiện của lớp 'Pretty' của haskell-src-ext ... – ivanm

+0

nhưng sau đó một lần nữa, các chú thích gốc có thể được đưa vào đầu ra đẹp như thế nào? Tôi không thể tìm thấy một chức năng mà in đẹp các bình luận _including_. – haja

2

Tùy thuộc vào loại in ấn nào bạn muốn làm, bạn có thể muốn xem gói hscolour, được sử dụng để tô màu mã nguồn Haskell thành các định dạng đầu ra khác nhau.

Cụ thể, mô-đun Language.Haskell.HsColour.Classify chứa bộ mã thông báo Haskell giữ lại khoảng trắng và nhận xét, có thể đóng vai trò là điểm khởi đầu tốt.

+0

cảm ơn, nhưng tôi không tìm kiếm loại in đẹp này. Tôi đã cập nhật câu hỏi của mình để làm rõ loại in đẹp mà tôi muốn. – haja

Các vấn đề liên quan