Repository : ssh://darcs.haskell.org//srv/darcs/haddock

On branch  : local

http://hackage.haskell.org/trac/ghc/changeset/b97fe7a54a5a2c27a0db7aa81af58674d781ab1f

>---------------------------------------------------------------

commit b97fe7a54a5a2c27a0db7aa81af58674d781ab1f
Author: David Waern <[email protected]>
Date:   Tue Jan 24 02:53:16 2012 +0100

    Fix issues in support for warnings.
    
    * Match against local names only.
    * Simplify (it's OK to map over the warnings).

>---------------------------------------------------------------

 src/Haddock/Interface/Create.hs |   33 +++++++++------------------------
 1 files changed, 9 insertions(+), 24 deletions(-)

diff --git a/src/Haddock/Interface/Create.hs b/src/Haddock/Interface/Create.hs
index 90597f6..9028f5f 100644
--- a/src/Haddock/Interface/Create.hs
+++ b/src/Haddock/Interface/Create.hs
@@ -34,7 +34,7 @@ import GHC hiding (flags)
 import HscTypes
 import Name
 import Bag
-import RdrName (GlobalRdrEnv)
+import RdrName
 import TcRnTypes (tcg_warns)
 import FastString (unpackFS)
 
@@ -79,29 +79,14 @@ createInterface tm flags modMap instIfaceMap = do
       (decls, _) = unzip declsWithDocs
       localInsts = filter (nameIsLocalOrFrom mdl . getName) instances
 
-  (docs, argMap, subMap, declMap) <- liftErrMsg $ mkMaps dflags gre localInsts 
exportedNames declsWithDocs
-
-  -- Attach warnings to documentation as appropriate.  If there is a warning
-  -- for an identifier with no documentation, create a piece of documentation,
-  -- that just contains the warning.
-  let docMap = warningMap `combine` docs
-        where
-          combine :: (Ord k, Monoid a) => Map k a -> Map k a -> Map k a
-          combine = M.unionWith mappend
-
-          warningMap = case warnings of
-            -- NOTE: warningMap may contain more elements than xs, e.g.  when
-            -- we have a warning for:
-            --
-            --   data Foo = Foo
-            --
-            -- So you can not just map over xs!
-            (WarnSome xs) -> foldr f M.empty exportedNames
-              where
-                f name m = case lookup (getOccName name) xs of
-                  Just x  -> M.insert name (warningToDoc x) m
-                  Nothing -> m
-            _ -> M.empty
+  (docMap0, argMap, subMap, declMap) <- liftErrMsg $ mkMaps dflags gre 
localInsts exportedNames declsWithDocs
+
+  -- Attach warnings to documentation. If there is a warning for an identifier
+  -- with no documentation, create a piece of documentation that just contains
+  -- the warning.
+  let docMap = foldl' (\m (n, d) -> M.insertWith mappend n d m) docMap0 l
+        where l = [ (gre_name elt, warningToDoc w) | WarnSome ws <- [warnings]
+                  , (occ, w) <- ws, elt <- lookupGlobalRdrEnv gre occ ]
 
   let maps = (docMap, argMap, subMap, declMap)
 



_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to