diff options
-rw-r--r-- | src/Haddock/Interface/Create.hs | 22 | ||||
-rw-r--r-- | src/Haddock/Interface/Rename.hs | 2 | ||||
-rw-r--r-- | src/Haddock/Types.hs | 2 |
3 files changed, 14 insertions, 12 deletions
diff --git a/src/Haddock/Interface/Create.hs b/src/Haddock/Interface/Create.hs index 9252b9eb..5932bc64 100644 --- a/src/Haddock/Interface/Create.hs +++ b/src/Haddock/Interface/Create.hs @@ -142,10 +142,13 @@ type DeclWithDoc = (Decl, Maybe Doc) -- documentation declarations. -- Subordinate names are mapped to the parent declaration, but with the doc -- for the subordinate declaration. -mkDeclMap :: [DeclWithDoc] -> Map Name DeclWithDoc -mkDeclMap decls = Map.fromList [ (n, (L loc d, doc)) | (L loc d, doc) <- decls - , (n, doc) <- (declName d, doc) : subordinates d - , not (isDocD d), not (isInstD d) ] +mkDeclMap :: [(Decl, Maybe Doc)] -> Map Name DeclInfo +mkDeclMap decls = Map.fromList . concat $ + [ (declName d, (parent, doc, subs)) : subDecls + | (parent@(L loc d), doc) <- decls + , let subs = subordinates d + , let subDecls = [ (n, (parent, doc', [])) | (n, doc') <- subs ] + , not (isDocD d), not (isInstD d) ] -- | Group type family instances together. Include the family declaration @@ -161,7 +164,6 @@ mkFamMap decls = -} - subordinates (TyClD d) = classDataSubs d subordinates _ = [] @@ -364,7 +366,7 @@ mkExportItems -> Module -- this module -> [Name] -- exported names (orig) -> [(Decl, Maybe Doc)] - -> Map Name DeclWithDoc -- maps local names to declarations + -> Map Name DeclInfo -- maps local names to declarations -> Map Name [Name] -- sub-map for this module -> [DocOption] -> Maybe [IE Name] @@ -409,7 +411,7 @@ mkExportItems modMap this_mod exported_names decls declMap sub_map -- temp hack: we filter out separately declared ATs, since we haven't decided how -- to handle them yet. We should really give an warning message also, and filter the -- name out in mkVisibleNames... - | Just (decl, maybeDoc) <- findDecl t, t `notElem` declATs (unL decl) = + | Just (decl, maybeDoc, _) <- findDecl t, t `notElem` declATs (unL decl) = return [ ExportDecl (restrictTo subs (extractDecl t mdl decl)) maybeDoc [] ] | otherwise = return [] where @@ -429,9 +431,9 @@ mkExportItems modMap this_mod exported_names decls declMap sub_map | otherwise -> return [ ExportModule m ] Nothing -> return [] -- already emitted a warning in visibleNames - findDecl :: Name -> Maybe (Decl, Maybe Doc) + findDecl :: Name -> Maybe DeclInfo findDecl n - | m == this_mod = Map.lookup n declMap + | m == this_mod = Map.lookup n declMap | otherwise = case Map.lookup m modMap of Just iface -> Map.lookup n (ifaceDeclMap iface) Nothing -> Nothing @@ -523,7 +525,7 @@ mkVisibleNames :: Module -> Map Name [Name] -> Maybe [IE Name] -> [DocOption] - -> Map Name (Decl, Maybe Doc) + -> Map Name DeclInfo -> ErrMsgM [Name] mkVisibleNames mdl modMap localNames scope subMap maybeExps opts declMap diff --git a/src/Haddock/Interface/Rename.hs b/src/Haddock/Interface/Rename.hs index 39aeb48a..3efc2526 100644 --- a/src/Haddock/Interface/Rename.hs +++ b/src/Haddock/Interface/Rename.hs @@ -38,7 +38,7 @@ renameInterface renamingEnv warnings mod = let localEnv = foldl fn renamingEnv (ifaceVisibleExports mod) where fn env name = Map.insert name (ifaceMod mod) env - docMap = Map.map snd $ ifaceDeclMap mod + docMap = Map.map (\(_,x,_) -> x) (ifaceDeclMap mod) docs = [ (n, doc) | (n, Just doc) <- Map.toList docMap ] renameMapElem (k,d) = do d' <- renameDoc d; return (k, d') diff --git a/src/Haddock/Types.hs b/src/Haddock/Types.hs index c3f3e8ce..671637c5 100644 --- a/src/Haddock/Types.hs +++ b/src/Haddock/Types.hs @@ -131,7 +131,7 @@ data Interface = Interface { -- | The Haddock options for this module (prune, ignore-exports, etc) ifaceOptions :: ![DocOption], - ifaceDeclMap :: Map Name (LHsDecl Name, Maybe (HsDoc Name)), + ifaceDeclMap :: Map Name DeclInfo, ifaceRnDocMap :: Map Name (HsDoc DocName), ifaceExportItems :: ![ExportItem Name], |