From 2ca9f33e5147bf1499e578dd559b927752fce0cc Mon Sep 17 00:00:00 2001 From: David Waern 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(-) 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