1 module RnHsDoc ( rnHaddock, rnHsDoc, rnLHsDoc, rnMbLHsDoc ) where
4 import TcRnMonad ( RnM )
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 mb_doc = case mb_doc of
37 Nothing -> return Nothing
39 rnLHsDoc (L pos doc) = do
44 ids2string (x:_) = show $ ppr x defaultUserStyle
46 rnHsDoc :: HsDoc RdrName -> RnM (HsDoc Name)
47 rnHsDoc doc = case doc of
49 DocEmpty -> return DocEmpty
54 return (DocAppend a' b')
56 DocString str -> return (DocString str)
58 DocParagraph doc -> do
60 return (DocParagraph doc')
62 DocIdentifier ids -> do
63 let choices = concatMap dataTcOccs ids
64 mb_gres <- mapM lookupGreRn_maybe choices
65 case [gre_name gre | Just gre <- mb_gres] of
66 [] -> return (DocString (ids2string ids))
67 ids' -> return (DocIdentifier ids')
69 DocModule str -> return (DocModule str)
73 return (DocEmphasis doc')
75 DocMonospaced doc -> do
77 return (DocMonospaced doc')
79 DocUnorderedList docs -> do
80 docs' <- mapM rnHsDoc docs
81 return (DocUnorderedList docs')
83 DocOrderedList docs -> do
84 docs' <- mapM rnHsDoc docs
85 return (DocOrderedList docs')
88 list' <- mapM (\(a,b) -> do
92 return (DocDefList list')
94 DocCodeBlock doc -> do
96 return (DocCodeBlock doc')
98 DocURL str -> return (DocURL str)
100 DocAName str -> return (DocAName str)