2 module RnHsDoc ( rnHaddock, rnHsDoc, rnLHsDoc, rnMbLHsDoc ) where
5 import RnEnv ( dataTcOccs, lookupGreRn_maybe )
8 import RdrName ( RdrName, gre_name )
10 import SrcLoc ( Located(..) )
11 import Outputable ( ppr, defaultUserStyle )
14 rnHaddock :: HaddockModInfo RdrName -> Maybe (HsDoc RdrName)
15 -> TcGblEnv -> RnM TcGblEnv
16 rnHaddock module_info maybe_doc tcg_env
17 = do { rn_module_doc <- rnMbHsDoc maybe_doc ;
19 -- Rename the Haddock module info
20 ; rn_description <- rnMbHsDoc (hmi_description module_info)
21 ; let { rn_module_info = module_info { hmi_description = rn_description } }
23 ; return (tcg_env { tcg_doc = rn_module_doc,
24 tcg_hmi = rn_module_info }) }
26 rnMbHsDoc :: Maybe (HsDoc RdrName) -> RnM (Maybe (HsDoc Name))
27 rnMbHsDoc mb_doc = case mb_doc of
31 Nothing -> return Nothing
33 rnMbLHsDoc :: Maybe (LHsDoc RdrName) -> RnM (Maybe (LHsDoc Name))
34 rnMbLHsDoc mb_doc = case mb_doc of
38 Nothing -> return Nothing
40 rnLHsDoc :: LHsDoc RdrName -> RnM (LHsDoc Name)
41 rnLHsDoc (L pos doc) = do
45 ids2string :: [RdrName] -> String
47 ids2string (x:_) = show $ ppr x defaultUserStyle
49 rnHsDoc :: HsDoc RdrName -> RnM (HsDoc Name)
50 rnHsDoc doc = case doc of
52 DocEmpty -> return DocEmpty
57 return (DocAppend a' b')
59 DocString str -> return (DocString str)
61 DocParagraph doc -> do
63 return (DocParagraph doc')
65 DocIdentifier ids -> do
66 let choices = concatMap dataTcOccs ids
67 mb_gres <- mapM lookupGreRn_maybe choices
68 case [gre_name gre | Just gre <- mb_gres] of
69 [] -> return (DocString (ids2string ids))
70 ids' -> return (DocIdentifier ids')
72 DocModule str -> return (DocModule str)
76 return (DocEmphasis doc')
78 DocMonospaced doc -> do
80 return (DocMonospaced doc')
82 DocUnorderedList docs -> do
83 docs' <- mapM rnHsDoc docs
84 return (DocUnorderedList docs')
86 DocOrderedList docs -> do
87 docs' <- mapM rnHsDoc docs
88 return (DocOrderedList docs')
91 list' <- mapM (\(a,b) -> do
95 return (DocDefList list')
97 DocCodeBlock doc -> do
99 return (DocCodeBlock doc')
101 DocURL str -> return (DocURL str)
103 DocPic str -> return (DocPic str)
105 DocAName str -> return (DocAName str)