2012-02-22 14 views
7

मैं हैकेल स्रोत कोड को दोबारा सुधार/पुनर्मुद्रण करने की कोशिश कर रहा हूं (व्हाइटस्पेस को हटाएं/जोड़ें, लाइनब्रेक्स, इंडेंट स्टाइल बदलें ...)। मुझे पैकेज haskell-src-exts मिला है जो पार्स और सुंदर प्रिंट हैकेल स्रोत कोड कर सकता है।टिप्पणियों के साथ सुंदर प्रिंट हैकेल स्रोत कोड

फ़ंक्शन parseFileWithComments :: ParseMode -> FilePath -> IO (ParseResult (Module, [Comment])) का उपयोग करके मुझे स्रोत कोड में टिप्पणियां भी शामिल हैं। अब मैं मूल स्थिति में टिप्पणियों के साथ मॉड्यूल/एएसटी मुद्रित करना चाहता हूं, लेकिन मुझे ऐसा कोई फ़ंक्शन नहीं मिल रहा है जो ऐसा करेगा। मैं केवल एएसटी को सुंदर प्रिंट कर सकता हूं। क्या मुझे एएसटी के प्रिंटिंग को स्वयं लागू करना है या ऐसी लाइब्रेरी पहले से मौजूद है?

फ़ाइल A.hs:

निम्न उदाहरण पर विचार स्पष्ट करने के लिए

module A (fn1) where 

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

GHCi में (, टिप्पणियों के बिना निश्चित रूप से)

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

प्रिंट मॉड्यूल स्रोत कोड टाइपिंग, । मैं स्रोत कोड स्वरूपण को संशोधित करने के लिए किसी भी prettyPrint -फंक्शन का उपयोग कर सकता हूं।

अब मैं इस तरह कुछ करने के लिए सक्षम होना चाहते हैं:

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

टिप्पणियों सहित मूल फ़ाइल की एक सुंदर-मुद्रित संस्करण मिलता है।

उत्तर

4

मॉड्यूल के Annotated संस्करणों का उपयोग करें, उदा। Language.Haskell.Exts.Annotated बनाम Language.Haskell.Exts

+0

यह काफी मददगार है, लेकिन बिल्कुल वही नहीं जो मैं चाहता था। मैं अभी भी कॉन्फ़िगर किए गए सुंदर-प्रिंट 'स्टाइल' और' PPHsMode' के साथ वास्तविक स्रोत कोड को दोबारा सुधारने में सक्षम होना चाहता हूं। – haja

+0

@ हजा: आप क्यों नहीं कर सकते? यह अभी भी हैकेल-src-ext की 'सुंदर' वर्ग का एक उदाहरण है ... – ivanm

+0

लेकिन फिर फिर, मूल टिप्पणियां सुंदर प्रिंट आउटपुट में कैसे शामिल की जा सकती हैं? मुझे एक ऐसा फ़ंक्शन नहीं मिल रहा है जो Ast _including_ टिप्पणियों को सुंदर-प्रिंट करता है। – haja

2

आप किस प्रकार की सुंदर प्रिंटिंग करना चाहते हैं, इस पर निर्भर करते हुए, आप hscolour पैकेज पर एक नज़र डालना चाहते हैं, जिसका उपयोग विभिन्न आउटपुट प्रारूपों में हास्केल स्रोत कोड को रंगीन करने के लिए किया जाता है।

विशेष रूप से, मॉड्यूल Language.Haskell.HsColour.Classify में एक हास्केल टोकनेज़र होता है जो व्हाइटस्पेस और टिप्पणियों को संरक्षित करता है, जो एक अच्छे प्रारंभिक बिंदु के रूप में कार्य कर सकता है।

+0

धन्यवाद, लेकिन मैं इस तरह के सुंदर मुद्रण की तलाश नहीं कर रहा हूं। मैंने यह स्पष्ट करने के लिए अपना प्रश्न अपडेट किया कि मैं किस प्रकार की सुंदर प्रिंटिंग चाहता हूं। – haja

संबंधित मुद्दे