From 2ca9f33e5147bf1499e578dd559b927752fce0cc Mon Sep 17 00:00:00 2001
From: David Waern <david.waern@gmail.com>
Date: Thu, 22 Jan 2009 18:53:49 +0000
Subject: Fix Trac #50: do not attach docs to pragmas or other kinds of
 non-declarations

We now filter out everything that is not a proper Haskell declaration before
collecting the docs and attaching them to declarations.
---
 src/Haddock/Interface/Create.hs | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

(limited to 'src/Haddock')

diff --git a/src/Haddock/Interface/Create.hs b/src/Haddock/Interface/Create.hs
index e2180f6d..8216b9e8 100644
--- a/src/Haddock/Interface/Create.hs
+++ b/src/Haddock/Interface/Create.hs
@@ -198,18 +198,19 @@ topDecls = filterClasses . filterDecls . collectDocs . sortByLoc . declsFromGrou
 filterOutInstances = filter (\(L _ d, _, _) -> not (isInstD d))
 
 
--- | Take all declarations in an 'HsGroup' and convert them into a list of
--- 'Decl's
+-- | Take all declarations except pragmas, infix decls, rules and value
+-- bindings from an 'HsGroup'.
 declsFromGroup :: HsGroup Name -> [Decl]
--- TODO: actually take all declarations
 declsFromGroup group = 
-  decls hs_tyclds TyClD group ++
-  decls hs_fords  ForD  group ++
-  decls hs_docs   DocD  group ++
-  decls hs_instds InstD group ++
-  decls (sigs . hs_valds) SigD group
+  decls hs_tyclds  TyClD    group ++
+  decls hs_derivds DerivD   group ++
+  decls hs_defds   DefD     group ++
+  decls hs_fords   ForD     group ++
+  decls hs_docs    DocD     group ++
+  decls hs_instds  InstD    group ++
+  decls (typesigs . hs_valds) SigD group
   where
-    sigs (ValBindsOut _ x) = x
+    typesigs (ValBindsOut _ sigs) = filter isVanillaLSig sigs
 
 
 -- | Take a field of declarations from a data structure and create HsDecls
@@ -283,9 +284,6 @@ filterClasses decls = [ if isClassD d then (L loc (filterClass d), doc) else x
 
 
 -- | Collect the docs and attach them to the right declaration.
--- Ideally, input should contain all kinds of declarations, so that we don't
--- attach docs to the wrong declaration. An exception to this is function and
--- value declarations - we assume (for now) that they are not part of the input.
 collectDocs :: [Decl] -> [(Decl, (Maybe Doc))]
 collectDocs decls = collect Nothing DocEmpty decls
 
-- 
cgit v1.2.3