2 -- The above warning supression flag is a temporary kludge.
3 -- While working on this module you are encouraged to remove it and fix
4 -- any warnings in the module. See
5 -- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
8 module RnHsDoc ( rnHaddock, rnHsDoc, rnLHsDoc, rnMbLHsDoc ) where
11 import TcRnMonad ( RnM )
12 import RnEnv ( dataTcOccs, lookupGreRn_maybe )
15 import RdrName ( RdrName, gre_name )
17 import SrcLoc ( Located(..) )
18 import Outputable ( ppr, defaultUserStyle )
21 rnHaddock :: HaddockModInfo RdrName -> Maybe (HsDoc RdrName)
22 -> TcGblEnv -> RnM TcGblEnv
23 rnHaddock module_info maybe_doc tcg_env
24 = do { rn_module_doc <- rnMbHsDoc maybe_doc ;
26 -- Rename the Haddock module info
27 ; rn_description <- rnMbHsDoc (hmi_description module_info)
28 ; let { rn_module_info = module_info { hmi_description = rn_description } }
30 ; return (tcg_env { tcg_doc = rn_module_doc,
31 tcg_hmi = rn_module_info }) }
33 rnMbHsDoc :: Maybe (HsDoc RdrName) -> RnM (Maybe (HsDoc Name))
34 rnMbHsDoc mb_doc = case mb_doc of
38 Nothing -> return Nothing
40 rnMbLHsDoc mb_doc = case mb_doc of
44 Nothing -> return Nothing
46 rnLHsDoc (L pos doc) = do
51 ids2string (x:_) = show $ ppr x defaultUserStyle
53 rnHsDoc :: HsDoc RdrName -> RnM (HsDoc Name)
54 rnHsDoc doc = case doc of
56 DocEmpty -> return DocEmpty
61 return (DocAppend a' b')
63 DocString str -> return (DocString str)
65 DocParagraph doc -> do
67 return (DocParagraph doc')
69 DocIdentifier ids -> do
70 let choices = concatMap dataTcOccs ids
71 mb_gres <- mapM lookupGreRn_maybe choices
72 case [gre_name gre | Just gre <- mb_gres] of
73 [] -> return (DocString (ids2string ids))
74 ids' -> return (DocIdentifier ids')
76 DocModule str -> return (DocModule str)
80 return (DocEmphasis doc')
82 DocMonospaced doc -> do
84 return (DocMonospaced doc')
86 DocUnorderedList docs -> do
87 docs' <- mapM rnHsDoc docs
88 return (DocUnorderedList docs')
90 DocOrderedList docs -> do
91 docs' <- mapM rnHsDoc docs
92 return (DocOrderedList docs')
95 list' <- mapM (\(a,b) -> do
99 return (DocDefList list')
101 DocCodeBlock doc -> do
103 return (DocCodeBlock doc')
105 DocURL str -> return (DocURL str)
107 DocAName str -> return (DocAName str)