diff options
Diffstat (limited to 'haddock-api')
| -rw-r--r-- | haddock-api/src/Haddock/Backends/LaTeX.hs | 4 | ||||
| -rw-r--r-- | haddock-api/src/Haddock/Backends/Xhtml/Decl.hs | 6 | ||||
| -rw-r--r-- | haddock-api/src/Haddock/Backends/Xhtml/Layout.hs | 24 | ||||
| -rw-r--r-- | haddock-api/src/Haddock/Interface/AttachInstances.hs | 23 | ||||
| -rw-r--r-- | haddock-api/src/Haddock/Interface/Rename.hs | 5 | ||||
| -rw-r--r-- | haddock-api/src/Haddock/Types.hs | 2 | 
6 files changed, 39 insertions, 25 deletions
| diff --git a/haddock-api/src/Haddock/Backends/LaTeX.hs b/haddock-api/src/Haddock/Backends/LaTeX.hs index 125e1b3a..2febd5ae 100644 --- a/haddock-api/src/Haddock/Backends/LaTeX.hs +++ b/haddock-api/src/Haddock/Backends/LaTeX.hs @@ -544,14 +544,14 @@ ppDocInstances unicode (i : rest)      (is, rest') = spanWith isUndocdInstance rest  isUndocdInstance :: DocInstance a -> Maybe (InstHead a) -isUndocdInstance (L _ i,Nothing) = Just i +isUndocdInstance (i,Nothing,_) = Just i  isUndocdInstance _ = Nothing  -- | Print a possibly commented instance. The instance header is printed inside  -- an 'argBox'. The comment is printed to the right of the box in normal comment  -- style.  ppDocInstance :: Bool -> DocInstance DocName -> LaTeX -ppDocInstance unicode (L _ instHead, doc) = +ppDocInstance unicode (instHead, doc, _) =    declWithDoc (ppInstDecl unicode instHead) (fmap docToLaTeX $ fmap _doc doc) diff --git a/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs b/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs index 952d29c9..df85a492 100644 --- a/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs +++ b/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs @@ -497,12 +497,12 @@ ppClassDecl _ _ _ _ _ _ _ _ _ _ _ = error "declaration type not supported by ppS  ppInstances :: LinksInfo -> [DocInstance DocName] -> DocName -> Unicode -> Qualification -> Html  ppInstances links instances baseName unicode qual -  = subInstances qual instName links True baseName (map instDecl instances) +  = subInstances qual instName links True (map instDecl instances)    -- force Splice = True to use line URLs    where      instName = getOccString $ getName baseName -    instDecl :: DocInstance DocName -> (SubDecl,SrcSpan) -    instDecl (L l inst, maybeDoc) = ((instHead inst, maybeDoc, []),l) +    instDecl :: DocInstance DocName -> (SubDecl,Located DocName) +    instDecl (inst, maybeDoc,l) = ((instHead inst, maybeDoc, []),l)      instHead (n, ks, ts, ClassInst cs) = ppContextNoLocs cs unicode qual          <+> ppAppNameTypes n ks ts unicode qual      instHead (n, ks, ts, TypeInst rhs) = keyword "type" diff --git a/haddock-api/src/Haddock/Backends/Xhtml/Layout.hs b/haddock-api/src/Haddock/Backends/Xhtml/Layout.hs index 923958a7..e686d648 100644 --- a/haddock-api/src/Haddock/Backends/Xhtml/Layout.hs +++ b/haddock-api/src/Haddock/Backends/Xhtml/Layout.hs @@ -44,7 +44,6 @@ import Haddock.Backends.Xhtml.Types  import Haddock.Backends.Xhtml.Utils  import Haddock.Types  import Haddock.Utils (makeAnchorId) -  import qualified Data.Map as Map  import Text.XHtml hiding ( name, title, p, quote ) @@ -148,20 +147,21 @@ subTable qual decls = Just $ table << aboves (concatMap subRow decls)         docElement td << fmap (docToHtml Nothing qual) mdoc)        : map (cell . (td <<)) subs +  -- | Sub table with source information (optional). -subTableSrc :: Qualification -> LinksInfo -> Bool -> DocName -> [(SubDecl,SrcSpan)] -> Maybe Html -subTableSrc _ _  _ _ [] = Nothing -subTableSrc qual lnks splice dn decls = Just $ table << aboves (concatMap subRow decls) +subTableSrc :: Qualification -> LinksInfo -> Bool -> [(SubDecl,Located DocName)] -> Maybe Html +subTableSrc _ _  _ [] = Nothing +subTableSrc qual lnks splice decls = Just $ table << aboves (concatMap subRow decls)    where -    subRow ((decl, mdoc, subs),loc) = +    subRow ((decl, mdoc, subs),L loc dn) =        (td ! [theclass "src"] << decl -      <+> linkHtml loc +      <+> linkHtml loc dn        <->        docElement td << fmap (docToHtml Nothing qual) mdoc        )        : map (cell . (td <<)) subs -    linkHtml loc@(RealSrcSpan _) = links lnks loc splice dn -    linkHtml _ = noHtml +    linkHtml loc@(RealSrcSpan _) dn = links lnks loc splice dn +    linkHtml _ _ = noHtml  subBlock :: [Html] -> Maybe Html  subBlock [] = Nothing @@ -191,12 +191,12 @@ subEquations qual = divSubDecls "equations" "Equations" . subTable qual  -- | Generate sub table for instance declarations, with source  subInstances :: Qualification               -> String -- ^ Class name, used for anchor generation -             -> LinksInfo -> Bool -> DocName -             -> [(SubDecl,SrcSpan)] -> Html -subInstances qual nm lnks splice dn = maybe noHtml wrap . instTable +             -> LinksInfo -> Bool +             -> [(SubDecl,Located DocName)] -> Html +subInstances qual nm lnks splice = maybe noHtml wrap . instTable    where      wrap = (subSection <<) . (subCaption +++) -    instTable = fmap (thediv ! collapseSection id_ True [] <<) . subTableSrc qual lnks splice dn +    instTable = fmap (thediv ! collapseSection id_ True [] <<) . subTableSrc qual lnks splice      subSection = thediv ! [theclass "subs instances"]      subCaption = paragraph ! collapseControl id_ True "caption" << "Instances"      id_ = makeAnchorId $ "i:" ++ nm diff --git a/haddock-api/src/Haddock/Interface/AttachInstances.hs b/haddock-api/src/Haddock/Interface/AttachInstances.hs index 37203d63..fc530507 100644 --- a/haddock-api/src/Haddock/Interface/AttachInstances.hs +++ b/haddock-api/src/Haddock/Interface/AttachInstances.hs @@ -38,6 +38,7 @@ import MonadUtils (liftIO)  import Name  import Outputable (text, sep, (<+>))  import PrelNames +import SrcLoc  import TcRnDriver (tcRnGetInfo)  import TcType (tcSplitSigmaTy)  import TyCon @@ -68,11 +69,11 @@ attachToExportItem :: ExportInfo -> Interface -> IfaceMap -> InstIfaceMap                     -> Ghc (ExportItem Name)  attachToExportItem expInfo iface ifaceMap instIfaceMap export =    case attachFixities export of -    e@ExportDecl { expItemDecl = L _ (TyClD d) } -> do +    e@ExportDecl { expItemDecl = L eSpan (TyClD d) } -> do        mb_info <- getAllInfo (tcdName d)        insts <- case mb_info of          Just (_, _, cls_instances, fam_instances) -> -          let fam_insts = [ (L (getSrcSpan n) $ synifyFamInst i opaque, doc) +          let fam_insts = [ (synifyFamInst i opaque, doc,spanNameE n (synifyFamInst i opaque) (L eSpan (tcdName d)) )                            | i <- sortBy (comparing instFam) fam_instances                            , let n = getName i                            , let doc = instLookup instDocMap n iface ifaceMap instIfaceMap @@ -80,14 +81,14 @@ attachToExportItem expInfo iface ifaceMap instIfaceMap export =                            , not $ any (isTypeHidden expInfo) (fi_tys i)                            , let opaque = isTypeHidden expInfo (fi_rhs i)                            ] -              cls_insts = [ (L (getSrcSpan n) $ synifyInstHead i, instLookup instDocMap n iface ifaceMap instIfaceMap) +              cls_insts = [ (synifyInstHead i, instLookup instDocMap n iface ifaceMap instIfaceMap, spanName n (synifyInstHead i) (L eSpan (tcdName d)))                            | let is = [ (instanceHead' i, getName i) | i <- cls_instances ]                            , (i@(_,_,cls,tys), n) <- sortBy (comparing $ first instHead) is                            , not $ isInstanceHidden expInfo cls tys                            ]                -- fam_insts but with failing type fams filtered out -              cleanFamInsts = [ (L l fi, n) | (L l (Right fi), n) <- fam_insts ] -              famInstErrs = [ errm | (L _ (Left errm), _) <- fam_insts ] +              cleanFamInsts = [ (fi, n, L l r) | (Right fi, n, L l (Right r)) <- fam_insts ] +              famInstErrs = [ errm | (Left errm, _, _) <- fam_insts ]            in do              dfs <- getDynFlags              let mkBug = (text "haddock-bug:" <+>) . text @@ -106,6 +107,18 @@ attachToExportItem expInfo iface ifaceMap instIfaceMap export =        ] }      attachFixities e = e +    -- spanName: attach the location to the name that is the same file as the instance location +    spanName s (clsn,_,_,_) (L instL instn) = +        let s1 = getSrcSpan s +            sn = if srcSpanFileName_maybe s1 == srcSpanFileName_maybe instL +                    then instn +                    else clsn +        in L (getSrcSpan s) sn +    -- spanName on Either +    spanNameE s (Left e) _ =  L (getSrcSpan s) (Left e) +    spanNameE s (Right ok) linst = +      let L l r = spanName s ok linst +      in L l (Right r)  instLookup :: (InstalledInterface -> Map.Map Name a) -> Name diff --git a/haddock-api/src/Haddock/Interface/Rename.hs b/haddock-api/src/Haddock/Interface/Rename.hs index ee9f8fc4..1a559764 100644 --- a/haddock-api/src/Haddock/Interface/Rename.hs +++ b/haddock-api/src/Haddock/Interface/Rename.hs @@ -498,10 +498,11 @@ renameExportItem item = case item of      decl' <- renameLDecl decl      doc'  <- renameDocForDecl doc      subs' <- mapM renameSub subs -    instances' <- forM instances $ \(L l inst, idoc) -> do +    instances' <- forM instances $ \(inst, idoc, L l n) -> do        inst' <- renameInstHead inst +      n' <- rename n        idoc' <- mapM renameDoc idoc -      return (L l inst', idoc') +      return (inst', idoc',L l n')      fixities' <- forM fixities $ \(name, fixity) -> do        name' <- lookupRn name        return (name', fixity) diff --git a/haddock-api/src/Haddock/Types.hs b/haddock-api/src/Haddock/Types.hs index f9cf6e17..14995098 100644 --- a/haddock-api/src/Haddock/Types.hs +++ b/haddock-api/src/Haddock/Types.hs @@ -300,7 +300,7 @@ instance OutputableBndr a => Outputable (InstType a) where    ppr (DataInst  a) = text "DataInst"  <+> ppr a  -- | An instance head that may have documentation and a source location. -type DocInstance name = (Located (InstHead name), Maybe (MDoc name)) +type DocInstance name = (InstHead name, Maybe (MDoc name), Located name)  -- | The head of an instance. Consists of a class name, a list of kind  -- parameters, a list of type parameters and an instance type | 
