diff options
Diffstat (limited to 'src/Haddock/Interface/LexParseRn.hs')
| -rw-r--r-- | src/Haddock/Interface/LexParseRn.hs | 78 | 
1 files changed, 37 insertions, 41 deletions
diff --git a/src/Haddock/Interface/LexParseRn.hs b/src/Haddock/Interface/LexParseRn.hs index ebd2b8fc..61f5d6ac 100644 --- a/src/Haddock/Interface/LexParseRn.hs +++ b/src/Haddock/Interface/LexParseRn.hs @@ -1,4 +1,4 @@ ------------------------------------------------------------------------------ +  -----------------------------------------------------------------------------  -- |  -- Module      :  Haddock.Interface.LexParseRn  -- Copyright   :  (c) Isaac Dupree 2009, @@ -9,11 +9,10 @@  -- Portability :  portable  -----------------------------------------------------------------------------  module Haddock.Interface.LexParseRn -  ( HaddockCommentType(..) -  , lexParseRnHaddockComment -  , lexParseRnHaddockCommentList -  , lexParseRnMbHaddockComment -  , lexParseRnHaddockModHeader +  ( processDocString +  , processDocStringParas +  , processDocStrings +  , processModuleHeader    ) where @@ -24,6 +23,7 @@ import Haddock.Interface.ParseModuleHeader  import Haddock.Doc  import Control.Applicative +import Data.List  import Data.Maybe  import FastString  import GHC @@ -33,62 +33,58 @@ import RdrName  import RnEnv -data HaddockCommentType = NormalHaddockComment | DocSectionComment - - -lexParseRnHaddockCommentList :: DynFlags -> HaddockCommentType -> GlobalRdrEnv -> [HsDocString] -> ErrMsgM (Maybe (Doc Name)) -lexParseRnHaddockCommentList dflags hty gre docStrs = do -  docMbs <- mapM (lexParseRnHaddockComment dflags hty gre) docStrs -  let docs = catMaybes docMbs -  let doc = foldl docAppend DocEmpty docs +processDocStrings :: DynFlags -> GlobalRdrEnv -> [HsDocString] -> ErrMsgM (Maybe (Doc Name)) +processDocStrings dflags gre strs = do +  docs <- catMaybes <$> mapM (processDocStringParas dflags gre) strs +  let doc = foldl' docAppend DocEmpty docs    case doc of      DocEmpty -> return Nothing      _ -> return (Just doc) -lexParseRnHaddockComment :: DynFlags -> HaddockCommentType -> -    GlobalRdrEnv -> HsDocString -> ErrMsgM (Maybe (Doc Name)) -lexParseRnHaddockComment dflags hty gre (HsDocString fs) = do +processDocStringParas :: DynFlags -> GlobalRdrEnv -> HsDocString -> ErrMsgM (Maybe (Doc Name)) +processDocStringParas = process parseParas + + +processDocString :: DynFlags -> GlobalRdrEnv -> HsDocString -> ErrMsgM (Maybe (Doc Name)) +processDocString = process parseString + +process :: ([LToken] -> Maybe (Doc RdrName)) +        -> DynFlags +        -> GlobalRdrEnv +        -> HsDocString +        -> ErrMsgM (Maybe (Doc Name)) +process parse dflags gre (HsDocString fs) = do     let str = unpackFS fs -   let toks = tokenise dflags str (0,0) -- TODO: real position -   let parse = case hty of -         NormalHaddockComment -> parseParas -         DocSectionComment -> parseString +   let toks = tokenise dflags str (0,0)  -- TODO: real position     case parse toks of       Nothing -> do -       tell ["doc comment parse failed: "++str] +       tell [ "doc comment parse failed: " ++ str ]         return Nothing       Just doc -> return (Just (rename gre doc)) -lexParseRnMbHaddockComment :: DynFlags -> HaddockCommentType -> GlobalRdrEnv -> Maybe HsDocString -> ErrMsgM (Maybe (Doc Name)) -lexParseRnMbHaddockComment _ _ _ Nothing = return Nothing -lexParseRnMbHaddockComment dflags hty gre (Just d) = lexParseRnHaddockComment dflags hty gre d - - --- yes, you always get a HaddockModInfo though it might be empty -lexParseRnHaddockModHeader :: DynFlags -> GlobalRdrEnv -> GhcDocHdr -> ErrMsgM (HaddockModInfo Name, Maybe (Doc Name)) -lexParseRnHaddockModHeader dflags gre mbStr = do -  (hmi, docn) <- -    case mbStr of +processModuleHeader :: DynFlags -> GlobalRdrEnv -> Maybe LHsDocString -> ErrMsgM (HaddockModInfo Name, Maybe (Doc Name)) +processModuleHeader dflags gre mayStr = do +  (hmi, doc) <- +    case mayStr of        Nothing -> return failure        Just (L _ (HsDocString fs)) -> do          let str = unpackFS fs          case parseModuleHeader dflags str of -          Left mess -> do -            tell ["haddock module header parse failed: " ++ mess] +          Left msg -> do +            tell ["haddock module header parse failed: " ++ msg]              return failure -          Right (info, doc) -> return (renameHmi gre info, Just (rename gre doc)) -  return (hmi { hmi_safety = safety }, docn) +          Right (hmi, doc) -> do +            let hmi' = hmi { hmi_description = rename gre <$> hmi_description hmi } +                doc' = rename gre doc +            return (hmi', Just doc') +  let safety = Just $ showPpr $ safeHaskell dflags +  return (hmi { hmi_safety = safety }, doc)    where -    safety  = Just $ showPpr $ safeHaskell dflags      failure = (emptyHaddockModInfo, Nothing) -renameHmi :: GlobalRdrEnv -> HaddockModInfo RdrName -> HaddockModInfo Name -renameHmi gre hmi = hmi { hmi_description = rename gre <$> hmi_description hmi } - -  rename :: GlobalRdrEnv -> Doc RdrName -> Doc Name  rename gre = rn    where  | 
