diff options
Diffstat (limited to 'haddock-api/src/Haddock/Interface')
| -rw-r--r-- | haddock-api/src/Haddock/Interface/AttachInstances.hs | 2 | ||||
| -rw-r--r-- | haddock-api/src/Haddock/Interface/Create.hs | 118 | ||||
| -rw-r--r-- | haddock-api/src/Haddock/Interface/Rename.hs | 155 | ||||
| -rw-r--r-- | haddock-api/src/Haddock/Interface/Specialize.hs | 6 | 
4 files changed, 152 insertions, 129 deletions
| diff --git a/haddock-api/src/Haddock/Interface/AttachInstances.hs b/haddock-api/src/Haddock/Interface/AttachInstances.hs index 4fd9d264..286907e5 100644 --- a/haddock-api/src/Haddock/Interface/AttachInstances.hs +++ b/haddock-api/src/Haddock/Interface/AttachInstances.hs @@ -87,7 +87,7 @@ attachToExportItem    -> Ghc (ExportItem GhcRn)  attachToExportItem index expInfo iface ifaceMap instIfaceMap export =    case attachFixities export of -    e@ExportDecl { expItemDecl = L eSpan (TyClD d) } -> do +    e@ExportDecl { expItemDecl = L eSpan (TyClD _ d) } -> do        insts <-          let mb_instances  = lookupNameEnv index (tcdName d)              cls_instances = maybeToList mb_instances >>= fst diff --git a/haddock-api/src/Haddock/Interface/Create.hs b/haddock-api/src/Haddock/Interface/Create.hs index c119f3c3..bc93449f 100644 --- a/haddock-api/src/Haddock/Interface/Create.hs +++ b/haddock-api/src/Haddock/Interface/Create.hs @@ -125,7 +125,7 @@ createInterface tm flags modMap instIfaceMap = do                          $  map getName instances                          ++ map getName fam_instances        -- Locations of all TH splices -      splices = [ l | L l (SpliceD _) <- hsmodDecls hsm ] +      splices = [ l | L l (SpliceD _ _) <- hsmodDecls hsm ]    warningMap <- liftErrMsg (mkWarningMap dflags warnings gre exportedNames) @@ -406,9 +406,9 @@ mkMaps dflags gre instances decls = do      instanceMap = M.fromList [ (getSrcSpan n, n) | n <- instances ]      names :: SrcSpan -> HsDecl GhcRn -> [Name] -    names l (InstD d) = maybeToList (M.lookup loc instanceMap) -- See note [2]. +    names l (InstD _ d) = maybeToList (M.lookup loc instanceMap) -- See note [2].        where loc = case d of -              TyFamInstD _ -> l -- The CoAx's loc is the whole line, but only for TFs +              TyFamInstD _ _ -> l -- The CoAx's loc is the whole line, but only for TFs                _ -> getInstLoc d      names l (DerivD {}) = maybeToList (M.lookup l instanceMap) -- See note [2].      names _ decl = getMainDeclBinder decl @@ -433,16 +433,16 @@ subordinates :: InstMap               -> HsDecl GhcRn               -> [(Name, [HsDocString], Map Int HsDocString)]  subordinates instMap decl = case decl of -  InstD (ClsInstD d) -> do +  InstD _ (ClsInstD _ d) -> do      DataFamInstDecl { dfid_eqn = HsIB { hsib_body =        FamEqn { feqn_tycon = L l _               , feqn_rhs   = defn }}} <- unLoc <$> cid_datafam_insts d      [ (n, [], M.empty) | Just n <- [M.lookup l instMap] ] ++ dataSubs defn -  InstD (DataFamInstD (DataFamInstDecl (HsIB { hsib_body = d }))) +  InstD _ (DataFamInstD _ (DataFamInstDecl (HsIB { hsib_body = d })))      -> dataSubs (feqn_rhs d) -  TyClD d | isClassDecl d -> classSubs d -          | isDataDecl  d -> dataSubs (tcdDataDefn d) +  TyClD _ d | isClassDecl d -> classSubs d +            | isDataDecl  d -> dataSubs (tcdDataDefn d)    _ -> []    where      classSubs dd = [ (name, doc, declTypeDocs d) | (L _ d, doc) <- classDecls dd @@ -456,7 +456,7 @@ subordinates instMap decl = case decl of                    | c <- cons, cname <- getConNames c ]          fields  = [ (extFieldOcc n, maybeToList $ fmap unL doc, M.empty)                    | RecCon flds <- map getConArgs cons -                  , L _ (ConDeclField ns _ doc) <- (unLoc flds) +                  , L _ (ConDeclField _ ns _ doc) <- (unLoc flds)                    , L _ n <- ns ]          derivs  = [ (instName, [unL doc], M.empty)                    | HsIB { hsib_body = L l (HsDocTy _ _ doc) } @@ -481,11 +481,11 @@ conArgDocs con = case getConArgs con of  -- | Extract function argument docs from inside top-level decls.  declTypeDocs :: HsDecl GhcRn -> Map Int HsDocString -declTypeDocs (SigD (TypeSig _ _ ty))      = typeDocs (unLoc (hsSigWcType ty)) -declTypeDocs (SigD (ClassOpSig _ _ _ ty)) = typeDocs (unLoc (hsSigType ty)) -declTypeDocs (SigD (PatSynSig _ _ ty))    = typeDocs (unLoc (hsSigType ty)) -declTypeDocs (ForD (ForeignImport _ ty _ _))   = typeDocs (unLoc (hsSigType ty)) -declTypeDocs (TyClD (SynDecl { tcdRhs = ty })) = typeDocs (unLoc ty) +declTypeDocs (SigD  _ (TypeSig _ _ ty))          = typeDocs (unLoc (hsSigWcType ty)) +declTypeDocs (SigD  _ (ClassOpSig _ _ _ ty))     = typeDocs (unLoc (hsSigType ty)) +declTypeDocs (SigD  _ (PatSynSig _ _ ty))        = typeDocs (unLoc (hsSigType ty)) +declTypeDocs (ForD  _ (ForeignImport _ _ ty _))  = typeDocs (unLoc (hsSigType ty)) +declTypeDocs (TyClD _ (SynDecl { tcdRhs = ty })) = typeDocs (unLoc ty)  declTypeDocs _ = M.empty  -- | Extract function argument docs from inside types. @@ -505,10 +505,10 @@ classDecls :: TyClDecl GhcRn -> [(LHsDecl GhcRn, [HsDocString])]  classDecls class_ = filterDecls . collectDocs . sortByLoc $ decls    where      decls = docs ++ defs ++ sigs ++ ats -    docs  = mkDecls tcdDocs DocD class_ -    defs  = mkDecls (bagToList . tcdMeths) ValD class_ -    sigs  = mkDecls tcdSigs SigD class_ -    ats   = mkDecls tcdATs (TyClD . FamDecl) class_ +    docs  = mkDecls tcdDocs (DocD noExt) class_ +    defs  = mkDecls (bagToList . tcdMeths) (ValD noExt) class_ +    sigs  = mkDecls tcdSigs (SigD noExt) class_ +    ats   = mkDecls tcdATs (TyClD noExt . FamDecl noExt) class_  -- | The top-level declarations of a module that we care about, @@ -526,14 +526,14 @@ mkFixMap group_ = M.fromList [ (n,f)  -- | Take all declarations except pragmas, infix decls, rules from an 'HsGroup'.  ungroup :: HsGroup GhcRn -> [LHsDecl GhcRn]  ungroup group_ = -  mkDecls (tyClGroupTyClDecls . hs_tyclds) TyClD  group_ ++ -  mkDecls hs_derivds             DerivD group_ ++ -  mkDecls hs_defds               DefD   group_ ++ -  mkDecls hs_fords               ForD   group_ ++ -  mkDecls hs_docs                DocD   group_ ++ -  mkDecls (tyClGroupInstDecls . hs_tyclds) InstD  group_ ++ -  mkDecls (typesigs . hs_valds)  SigD   group_ ++ -  mkDecls (valbinds . hs_valds)  ValD   group_ +  mkDecls (tyClGroupTyClDecls . hs_tyclds) (TyClD noExt)  group_ ++ +  mkDecls hs_derivds             (DerivD noExt) group_ ++ +  mkDecls hs_defds               (DefD noExt)   group_ ++ +  mkDecls hs_fords               (ForD noExt)   group_ ++ +  mkDecls hs_docs                (DocD noExt)   group_ ++ +  mkDecls (tyClGroupInstDecls . hs_tyclds) (InstD noExt)  group_ ++ +  mkDecls (typesigs . hs_valds)  (SigD noExt)   group_ ++ +  mkDecls (valbinds . hs_valds)  (ValD noExt)   group_    where      typesigs (XValBindsLR (NValBinds _ sigs)) = filter isUserLSig sigs      typesigs _ = error "expected ValBindsOut" @@ -564,14 +564,14 @@ sortByLoc = sortBy (comparing getLoc)  filterDecls :: [(LHsDecl a, doc)] -> [(LHsDecl a, doc)]  filterDecls = filter (isHandled . unL . fst)    where -    isHandled (ForD (ForeignImport {})) = True +    isHandled (ForD _ (ForeignImport {})) = True      isHandled (TyClD {})  = True      isHandled (InstD {})  = True      isHandled (DerivD {}) = True -    isHandled (SigD d) = isUserLSig (reL d) -    isHandled (ValD _) = True +    isHandled (SigD _ d)  = isUserLSig (reL d) +    isHandled (ValD {})   = True      -- we keep doc declarations to be able to get at named docs -    isHandled (DocD _) = True +    isHandled (DocD {})   = True      isHandled _ = False @@ -580,8 +580,8 @@ filterClasses :: [(LHsDecl a, doc)] -> [(LHsDecl a, doc)]  filterClasses decls = [ if isClassD d then (L loc (filterClass d), doc) else x                        | x@(L loc d, doc) <- decls ]    where -    filterClass (TyClD c) = -      TyClD $ c { tcdSigs = filter (liftA2 (||) isUserLSig isMinimalLSig) $ tcdSigs c } +    filterClass (TyClD x c) = +      TyClD x $ c { tcdSigs = filter (liftA2 (||) isUserLSig isMinimalLSig) $ tcdSigs c }      filterClass _ = error "expected TyClD" @@ -600,10 +600,10 @@ collectDocs = go Nothing []    where      go Nothing _ [] = []      go (Just prev) docs [] = finished prev docs [] -    go prev docs (L _ (DocD (DocCommentNext str)) : ds) +    go prev docs (L _ (DocD _ (DocCommentNext str)) : ds)        | Nothing <- prev = go Nothing (str:docs) ds        | Just decl <- prev = finished decl docs (go Nothing [str] ds) -    go prev docs (L _ (DocD (DocCommentPrev str)) : ds) = go prev (str:docs) ds +    go prev docs (L _ (DocD _ (DocCommentPrev str)) : ds) = go prev (str:docs) ds      go Nothing docs (d:ds) = go (Just d) docs ds      go (Just prev) docs (d:ds) = finished prev docs (go (Just d) [] ds) @@ -644,22 +644,22 @@ mkExportItems          decls maps fixMap splices instIfaceMap dflags allExports      Just exports -> liftM concat $ mapM lookupExport exports    where -    lookupExport (IEGroup lev docStr, _)  = liftErrMsg $ do +    lookupExport (IEGroup _ lev docStr, _)  = liftErrMsg $ do        doc <- processDocString dflags gre docStr        return [ExportGroup lev "" doc] -    lookupExport (IEDoc docStr, _)        = liftErrMsg $ do +    lookupExport (IEDoc _ docStr, _)        = liftErrMsg $ do        doc <- processDocStringParas dflags gre docStr        return [ExportDoc doc] -    lookupExport (IEDocNamed str, _)      = liftErrMsg $ +    lookupExport (IEDocNamed _ str, _)      = liftErrMsg $        findNamedDoc str [ unL d | d <- decls ] >>= \case          Nothing -> return  []          Just docStr -> do            doc <- processDocStringParas dflags gre docStr            return [ExportDoc doc] -    lookupExport (IEModuleContents (L _ mod_name), _) +    lookupExport (IEModuleContents _ (L _ mod_name), _)        -- only consider exporting a module if we are sure we        -- are really exporting the whole module and not some        -- subset. We also look through module aliases here. @@ -696,7 +696,7 @@ availExportItem is_sig modMap thisMod semMod warnings exportedNames        let t = availName avail        r    <- findDecl avail        case r of -        ([L l (ValD _)], (doc, _)) -> do +        ([L l (ValD _ _)], (doc, _)) -> do            -- Top-level binding without type signature            export <- hiValExportItem dflags t l doc (l `elem` splices) $ M.lookup t fixMap            return [export] @@ -721,17 +721,17 @@ availExportItem is_sig modMap thisMod semMod warnings exportedNames                    -- A single signature might refer to many names, but we                    -- create an export item for a single name only.  So we                    -- modify the signature to contain only that single name. -                  L loc (SigD sig) -> +                  L loc (SigD _ sig) ->                      -- fromJust is safe since we already checked in guards                      -- that 't' is a name declared in this declaration. -                    let newDecl = L loc . SigD . fromJust $ filterSigNames (== t) sig +                    let newDecl = L loc . SigD noExt . fromJust $ filterSigNames (== t) sig                      in availExportDecl avail newDecl docs_ -                  L loc (TyClD cl@ClassDecl{}) -> do +                  L loc (TyClD _ cl@ClassDecl{}) -> do                      mdef <- liftGhcToErrMsgGhc $ minimalDef t                      let sig = maybeToList $ fmap (noLoc . MinimalSig noExt NoSourceText . noLoc . fmap noLoc) mdef                      availExportDecl avail -                      (L loc $ TyClD cl { tcdSigs = sig ++ tcdSigs cl }) docs_ +                      (L loc $ TyClD noExt cl { tcdSigs = sig ++ tcdSigs cl }) docs_                    _ -> availExportDecl avail decl docs_ @@ -994,7 +994,7 @@ fullModuleContents is_sig modMap thisMod semMod warnings exportedNames      for (getMainDeclBinder (unLoc decl)) $ \nm -> do        case lookupNameEnv availEnv nm of          Just avail -          | L _ (ValD valDecl) <- decl +          | L _ (ValD _ valDecl) <- decl            , (name:_) <- collectHsBindBinders valDecl            , Just (L _ SigD{}:_) <- filter isSigD <$> M.lookup name declMap            -> pure [] @@ -1017,7 +1017,7 @@ extractDecl declMap name decl    | name `elem` getMainDeclBinder (unLoc decl) = decl    | otherwise  =      case unLoc decl of -      TyClD d@ClassDecl {} -> +      TyClD _ d@ClassDecl {} ->          let            matchesMethod =              [ lsig @@ -1037,8 +1037,8 @@ extractDecl declMap name decl          in case (matchesMethod, matchesAssociatedType)  of            ([s0], _) -> let (n, tyvar_names) = (tcdName d, tyClDeclTyVars d)                             L pos sig = addClassContext n tyvar_names s0 -                       in L pos (SigD sig) -          (_, [L pos fam_decl]) -> L pos (TyClD (FamDecl fam_decl)) +                       in L pos (SigD noExt sig) +          (_, [L pos fam_decl]) -> L pos (TyClD noExt (FamDecl noExt fam_decl))            ([], [])              | Just (famInstDecl:_) <- M.lookup name declMap @@ -1047,21 +1047,21 @@ extractDecl declMap name decl                                           O.$$ O.nest 4 (O.ppr d)                                           O.$$ O.text "Matches:"                                           O.$$ O.nest 4 (O.ppr matchesMethod O.<+> O.ppr matchesAssociatedType)) -      TyClD d@DataDecl {} -> +      TyClD _ d@DataDecl {} ->          let (n, tyvar_tys) = (tcdName d, lHsQTyVarsToTypes (tyClDeclTyVars d))          in if isDataConName name -           then SigD <$> extractPatternSyn name n tyvar_tys (dd_cons (tcdDataDefn d)) -           else SigD <$> extractRecSel name n tyvar_tys (dd_cons (tcdDataDefn d)) -      TyClD FamDecl {} +           then SigD noExt <$> extractPatternSyn name n tyvar_tys (dd_cons (tcdDataDefn d)) +           else SigD noExt <$> extractRecSel name n tyvar_tys (dd_cons (tcdDataDefn d)) +      TyClD _ FamDecl {}          | isValName name          , Just (famInst:_) <- M.lookup name declMap          -> extractDecl declMap name famInst -      InstD (DataFamInstD (DataFamInstDecl (HsIB { hsib_body = +      InstD _ (DataFamInstD _ (DataFamInstDecl (HsIB { hsib_body =                               FamEqn { feqn_tycon = L _ n                                      , feqn_pats  = tys                                      , feqn_rhs   = defn }}))) -> -        SigD <$> extractRecSel name n tys (dd_cons defn) -      InstD (ClsInstD ClsInstDecl { cid_datafam_insts = insts }) -> +        SigD noExt <$> extractRecSel name n tys (dd_cons defn) +      InstD _ (ClsInstD _ ClsInstDecl { cid_datafam_insts = insts }) ->          let matches = [ d' | L _ d'@(DataFamInstDecl (HsIB { hsib_body = d }))                                 <- insts                               -- , L _ ConDecl { con_details = RecCon rec } <- dd_cons (feqn_rhs d) @@ -1071,7 +1071,7 @@ extractDecl declMap name decl                             , extFieldOcc n == name                        ]          in case matches of -          [d0] -> extractDecl declMap name (noLoc . InstD $ DataFamInstD d0) +          [d0] -> extractDecl declMap name (noLoc . InstD noExt $ DataFamInstD noExt d0)            _ -> error "internal: extractDecl (ClsInstD)"        _ -> error "internal: extractDecl" @@ -1112,12 +1112,12 @@ extractRecSel _ _ _ [] = error "extractRecSel: selector not found"  extractRecSel nm t tvs (L _ con : rest) =    case getConArgs con of -    RecCon (L _ fields) | ((l,L _ (ConDeclField _nn ty _)) : _) <- matching_fields fields -> +    RecCon (L _ fields) | ((l,L _ (ConDeclField _ _nn ty _)) : _) <- matching_fields fields ->        L l (TypeSig noExt [noLoc nm] (mkEmptySigWcType (noLoc (HsFunTy noExt data_ty (getBangType ty)))))      _ -> extractRecSel nm t tvs rest   where    matching_fields :: [LConDeclField GhcRn] -> [(SrcSpan, LConDeclField GhcRn)] -  matching_fields flds = [ (l,f) | f@(L _ (ConDeclField ns _ _)) <- flds +  matching_fields flds = [ (l,f) | f@(L _ (ConDeclField _ ns _ _)) <- flds                                   , L l n <- ns, extFieldOcc n == nm ]    data_ty      -- ResTyGADT _ ty <- con_res con = ty @@ -1142,8 +1142,8 @@ mkVisibleNames (_, _, _, instMap) exports opts        where subs    = map fst (expItemSubDocs e)              patsyns = concatMap (getMainDeclBinder . fst) (expItemPats e)              name = case unLoc $ expItemDecl e of -              InstD d -> maybeToList $ M.lookup (getInstLoc d) instMap -              decl    -> getMainDeclBinder decl +              InstD _ d -> maybeToList $ M.lookup (getInstLoc d) instMap +              decl      -> getMainDeclBinder decl      exportName ExportNoDecl {} = [] -- we don't count these as visible, since                                      -- we don't want links to go to them.      exportName _ = [] @@ -1184,7 +1184,7 @@ findNamedDoc name = search      search [] = do        tell ["Cannot find documentation for: $" ++ name]        return Nothing -    search (DocD (DocCommentNamed name' doc) : rest) +    search (DocD _ (DocCommentNamed name' doc) : rest)        | name == name' = return (Just doc)        | otherwise = search rest      search (_other_decl : rest) = search rest diff --git a/haddock-api/src/Haddock/Interface/Rename.hs b/haddock-api/src/Haddock/Interface/Rename.hs index 0652ae47..5b588964 100644 --- a/haddock-api/src/Haddock/Interface/Rename.hs +++ b/haddock-api/src/Haddock/Interface/Rename.hs @@ -21,6 +21,7 @@ import Haddock.Types  import Bag (emptyBag)  import GHC hiding (NoLink)  import Name +import Outputable ( panic )  import Control.Applicative  import Control.Monad hiding (mapM) @@ -188,14 +189,15 @@ renameMaybeLKind :: Maybe (LHsKind GhcRn) -> RnM (Maybe (LHsKind DocNameI))  renameMaybeLKind = traverse renameLKind  renameFamilyResultSig :: LFamilyResultSig GhcRn -> RnM (LFamilyResultSig DocNameI) -renameFamilyResultSig (L loc NoSig) -    = return (L loc NoSig) -renameFamilyResultSig (L loc (KindSig ki)) +renameFamilyResultSig (L loc (NoSig _)) +    = return (L loc (NoSig noExt)) +renameFamilyResultSig (L loc (KindSig _ ki))      = do { ki' <- renameLKind ki -         ; return (L loc (KindSig ki')) } -renameFamilyResultSig (L loc (TyVarSig bndr)) +         ; return (L loc (KindSig noExt ki')) } +renameFamilyResultSig (L loc (TyVarSig _ bndr))      = do { bndr' <- renameLTyVarBndr bndr -         ; return (L loc (TyVarSig bndr')) } +         ; return (L loc (TyVarSig noExt bndr')) } +renameFamilyResultSig (L _ (XFamilyResultSig _)) = panic "haddock:renameFamilyResultSig"  renameInjectivityAnn :: LInjectivityAnn GhcRn -> RnM (LInjectivityAnn DocNameI)  renameInjectivityAnn (L loc (InjectivityAnn lhs rhs)) @@ -212,55 +214,55 @@ renameType t = case t of    HsForAllTy { hst_bndrs = tyvars, hst_body = ltype } -> do      tyvars'   <- mapM renameLTyVarBndr tyvars      ltype'    <- renameLType ltype -    return (HsForAllTy { hst_xforall = PlaceHolder, hst_bndrs = tyvars', hst_body = ltype' }) +    return (HsForAllTy { hst_xforall = NoExt, hst_bndrs = tyvars', hst_body = ltype' })    HsQualTy { hst_ctxt = lcontext , hst_body = ltype } -> do      lcontext' <- renameLContext lcontext      ltype'    <- renameLType ltype -    return (HsQualTy { hst_xqual = PlaceHolder, hst_ctxt = lcontext', hst_body = ltype' }) +    return (HsQualTy { hst_xqual = NoExt, hst_ctxt = lcontext', hst_body = ltype' }) -  HsTyVar _ ip (L l n) -> return . HsTyVar PlaceHolder ip . L l =<< rename n -  HsBangTy _ b ltype -> return . HsBangTy PlaceHolder b =<< renameLType ltype +  HsTyVar _ ip (L l n) -> return . HsTyVar NoExt ip . L l =<< rename n +  HsBangTy _ b ltype -> return . HsBangTy NoExt b =<< renameLType ltype    HsAppTy _ a b -> do      a' <- renameLType a      b' <- renameLType b -    return (HsAppTy PlaceHolder a' b') +    return (HsAppTy NoExt a' b')    HsFunTy _ a b -> do      a' <- renameLType a      b' <- renameLType b -    return (HsFunTy PlaceHolder a' b') +    return (HsFunTy NoExt a' b') -  HsListTy _ ty -> return . (HsListTy PlaceHolder) =<< renameLType ty -  HsPArrTy _ ty -> return . (HsPArrTy PlaceHolder) =<< renameLType ty -  HsIParamTy _ n ty -> liftM (HsIParamTy PlaceHolder n) (renameLType ty) -  HsEqTy _ ty1 ty2 -> liftM2 (HsEqTy PlaceHolder) (renameLType ty1) (renameLType ty2) +  HsListTy _ ty -> return . (HsListTy NoExt) =<< renameLType ty +  HsPArrTy _ ty -> return . (HsPArrTy NoExt) =<< renameLType ty +  HsIParamTy _ n ty -> liftM (HsIParamTy NoExt n) (renameLType ty) +  HsEqTy _ ty1 ty2 -> liftM2 (HsEqTy NoExt) (renameLType ty1) (renameLType ty2) -  HsTupleTy _ b ts -> return . HsTupleTy PlaceHolder b =<< mapM renameLType ts -  HsSumTy _ ts -> HsSumTy PlaceHolder <$> mapM renameLType ts +  HsTupleTy _ b ts -> return . HsTupleTy NoExt b =<< mapM renameLType ts +  HsSumTy _ ts -> HsSumTy NoExt <$> mapM renameLType ts    HsOpTy _ a (L loc op) b -> do      op' <- rename op      a'  <- renameLType a      b'  <- renameLType b -    return (HsOpTy PlaceHolder a' (L loc op') b') +    return (HsOpTy NoExt a' (L loc op') b') -  HsParTy _ ty -> return . (HsParTy PlaceHolder) =<< renameLType ty +  HsParTy _ ty -> return . (HsParTy NoExt) =<< renameLType ty    HsKindSig _ ty k -> do      ty' <- renameLType ty      k' <- renameLKind k -    return (HsKindSig PlaceHolder ty' k') +    return (HsKindSig NoExt ty' k')    HsDocTy _ ty doc -> do      ty' <- renameLType ty      doc' <- renameLDocHsSyn doc -    return (HsDocTy PlaceHolder ty' doc') +    return (HsDocTy NoExt ty' doc') -  HsTyLit _ x -> return (HsTyLit PlaceHolder x) +  HsTyLit _ x -> return (HsTyLit NoExt x) -  HsRecTy _ a               -> HsRecTy PlaceHolder <$> mapM renameConDeclFieldField a +  HsRecTy _ a               -> HsRecTy NoExt <$> mapM renameConDeclFieldField a    (XHsType (NHsCoreTy a))   -> pure (XHsType (NHsCoreTy a))    HsExplicitListTy x i b    -> HsExplicitListTy x i <$> mapM renameLType b    HsExplicitTupleTy x b     -> HsExplicitTupleTy x <$> mapM renameLType b @@ -269,10 +271,11 @@ renameType t = case t of    HsAppsTy _ _              -> error "renameType: HsAppsTy"  renameLHsQTyVars :: LHsQTyVars GhcRn -> RnM (LHsQTyVars DocNameI) -renameLHsQTyVars (HsQTvs { hsq_implicit = _, hsq_explicit = tvs }) +renameLHsQTyVars (HsQTvs { hsq_explicit = tvs })    = do { tvs' <- mapM renameLTyVarBndr tvs -       ; return (HsQTvs { hsq_implicit = error "haddock:renameLHsQTyVars", hsq_explicit = tvs', hsq_dependent = error "haddock:renameLHsQTyVars" }) } -                -- This is rather bogus, but I'm not sure what else to do +       ; return (HsQTvs { hsq_ext = noExt +                        , hsq_explicit = tvs' }) } +renameLHsQTyVars (XLHsQTyVars _) = panic "haddock:renameLHsQTyVars"  renameLTyVarBndr :: LHsTyVarBndr GhcRn -> RnM (LHsTyVarBndr DocNameI)  renameLTyVarBndr (L loc (UserTyVar x (L l n))) @@ -289,8 +292,8 @@ renameLContext (L loc context) = do    context' <- mapM renameLType context    return (L loc context') -renameWildCardInfo :: HsWildCardInfo GhcRn -> RnM (HsWildCardInfo DocNameI) -renameWildCardInfo (AnonWildCard  (L l name)) = AnonWildCard . L l <$> rename name +renameWildCardInfo :: HsWildCardInfo -> RnM HsWildCardInfo +renameWildCardInfo (AnonWildCard  (L l name)) = return (AnonWildCard (L l name))  renameInstHead :: InstHead GhcRn -> RnM (InstHead DocNameI)  renameInstHead InstHead {..} = do @@ -321,21 +324,21 @@ renamePats = mapM  renameDecl :: HsDecl GhcRn -> RnM (HsDecl DocNameI)  renameDecl decl = case decl of -  TyClD d -> do +  TyClD _ d -> do      d' <- renameTyClD d -    return (TyClD d') -  SigD s -> do +    return (TyClD noExt d') +  SigD _ s -> do      s' <- renameSig s -    return (SigD s') -  ForD d -> do +    return (SigD noExt s') +  ForD _ d -> do      d' <- renameForD d -    return (ForD d') -  InstD d -> do +    return (ForD noExt d') +  InstD _ d -> do      d' <- renameInstD d -    return (InstD d') -  DerivD d -> do +    return (InstD noExt d') +  DerivD _ d -> do      d' <- renameDerivD d -    return (DerivD d') +    return (DerivD noExt d')    _ -> error "renameDecl"  renameLThing :: (a GhcRn -> RnM (a DocNameI)) -> Located (a GhcRn) -> RnM (Located (a DocNameI)) @@ -346,19 +349,21 @@ renameTyClD d = case d of  --  TyFamily flav lname ltyvars kind tckind -> do    FamDecl { tcdFam = decl } -> do      decl' <- renameFamilyDecl decl -    return (FamDecl { tcdFam = decl' }) +    return (FamDecl { tcdFExt = noExt, tcdFam = decl' }) -  SynDecl { tcdLName = lname, tcdTyVars = tyvars, tcdFixity = fixity, tcdRhs = rhs, tcdFVs = _fvs } -> do +  SynDecl { tcdLName = lname, tcdTyVars = tyvars, tcdFixity = fixity, tcdRhs = rhs } -> do      lname'    <- renameL lname      tyvars'   <- renameLHsQTyVars tyvars      rhs'     <- renameLType rhs -    return (SynDecl { tcdLName = lname', tcdTyVars = tyvars', tcdFixity = fixity, tcdRhs = rhs', tcdFVs = placeHolderNames }) +    return (SynDecl { tcdSExt = noExt, tcdLName = lname', tcdTyVars = tyvars' +                    , tcdFixity = fixity, tcdRhs = rhs' }) -  DataDecl { tcdLName = lname, tcdTyVars = tyvars, tcdFixity = fixity, tcdDataDefn = defn, tcdFVs = _fvs } -> do +  DataDecl { tcdLName = lname, tcdTyVars = tyvars, tcdFixity = fixity, tcdDataDefn = defn } -> do      lname'    <- renameL lname      tyvars'   <- renameLHsQTyVars tyvars      defn'     <- renameDataDefn defn -    return (DataDecl { tcdLName = lname', tcdTyVars = tyvars', tcdFixity = fixity, tcdDataDefn = defn', tcdDataCusk = PlaceHolder, tcdFVs = placeHolderNames }) +    return (DataDecl { tcdDExt = noExt, tcdLName = lname', tcdTyVars = tyvars' +                     , tcdFixity = fixity, tcdDataDefn = defn' })    ClassDecl { tcdCtxt = lcontext, tcdLName = lname, tcdTyVars = ltyvars, tcdFixity = fixity              , tcdFDs = lfundeps, tcdSigs = lsigs, tcdATs = ats, tcdATDefs = at_defs } -> do @@ -373,7 +378,8 @@ renameTyClD d = case d of      return (ClassDecl { tcdCtxt = lcontext', tcdLName = lname', tcdTyVars = ltyvars'                        , tcdFixity = fixity                        , tcdFDs = lfundeps', tcdSigs = lsigs', tcdMeths= emptyBag -                      , tcdATs = ats', tcdATDefs = at_defs', tcdDocs = [], tcdFVs = placeHolderNames }) +                      , tcdATs = ats', tcdATDefs = at_defs', tcdDocs = [], tcdCExt = NoExt }) +  XTyClDecl _ -> panic "haddock:renameTyClD"    where      renameLFunDep (L loc (xs, ys)) = do @@ -394,11 +400,12 @@ renameFamilyDecl (FamilyDecl { fdInfo = info, fdLName = lname      ltyvars'     <- renameLHsQTyVars ltyvars      result'      <- renameFamilyResultSig result      injectivity' <- renameMaybeInjectivityAnn injectivity -    return (FamilyDecl { fdInfo = info', fdLName = lname' +    return (FamilyDecl { fdExt = noExt, fdInfo = info', fdLName = lname'                         , fdTyVars = ltyvars'                         , fdFixity = fixity                         , fdResultSig = result'                         , fdInjectivityAnn = injectivity' }) +renameFamilyDecl (XFamilyDecl _) = panic "renameFamilyDecl"  renamePseudoFamilyDecl :: PseudoFamilyDecl GhcRn @@ -424,9 +431,11 @@ renameDataDefn (HsDataDefn { dd_ND = nd, dd_ctxt = lcontext, dd_cType = cType      k'        <- renameMaybeLKind k      cons'     <- mapM (mapM renameCon) cons      -- I don't think we need the derivings, so we return Nothing -    return (HsDataDefn { dd_ND = nd, dd_ctxt = lcontext', dd_cType = cType +    return (HsDataDefn { dd_ext = noExt +                       , dd_ND = nd, dd_ctxt = lcontext', dd_cType = cType                         , dd_kindSig = k', dd_cons = cons'                         , dd_derivs = noLoc [] }) +renameDataDefn (XHsDataDefn _) = panic "haddock:renameDataDefn"  renameCon :: ConDecl GhcRn -> RnM (ConDecl DocNameI)  renameCon decl@(ConDeclH98 { con_name = lname, con_ex_tvs = ltyvars @@ -437,7 +446,7 @@ renameCon decl@(ConDeclH98 { con_name = lname, con_ex_tvs = ltyvars        lcontext' <- traverse renameLContext lcontext        details'  <- renameDetails details        mbldoc'   <- mapM renameLDocHsSyn mbldoc -      return (decl { con_name = lname', con_ex_tvs = ltyvars' +      return (decl { con_ext = noExt, con_name = lname', con_ex_tvs = ltyvars'                     , con_mb_cxt = lcontext'                     , con_args = details', con_doc = mbldoc' }) @@ -451,9 +460,10 @@ renameCon decl@(ConDeclGADT { con_names = lnames, con_qvars = ltyvars        details'  <- renameDetails details        res_ty'   <- renameLType res_ty        mbldoc'   <- mapM renameLDocHsSyn mbldoc -      return (decl { con_names = lnames', con_qvars = ltyvars' +      return (decl { con_g_ext = noExt, con_names = lnames', con_qvars = ltyvars'                     , con_mb_cxt = lcontext', con_args = details'                     , con_res_ty = res_ty', con_doc = mbldoc' }) +renameCon (XConDecl _) = panic "haddock:renameCon"  renameDetails :: HsConDeclDetails GhcRn -> RnM (HsConDeclDetails DocNameI)  renameDetails (RecCon (L l fields)) = do @@ -466,11 +476,12 @@ renameDetails (InfixCon a b) = do    return (InfixCon a' b')  renameConDeclFieldField :: LConDeclField GhcRn -> RnM (LConDeclField DocNameI) -renameConDeclFieldField (L l (ConDeclField names t doc)) = do +renameConDeclFieldField (L l (ConDeclField _ names t doc)) = do    names' <- mapM renameLFieldOcc names    t'   <- renameLType t    doc' <- mapM renameLDocHsSyn doc -  return $ L l (ConDeclField names' t' doc') +  return $ L l (ConDeclField noExt names' t' doc') +renameConDeclFieldField (L _ (XConDeclField _)) = panic "haddock:renameConDeclFieldField"  renameLFieldOcc :: LFieldOcc GhcRn -> RnM (LFieldOcc DocNameI)  renameLFieldOcc (L l (FieldOcc sel lbl)) = do @@ -503,35 +514,39 @@ renameSig sig = case sig of  renameForD :: ForeignDecl GhcRn -> RnM (ForeignDecl DocNameI) -renameForD (ForeignImport lname ltype co x) = do +renameForD (ForeignImport _ lname ltype x) = do    lname' <- renameL lname    ltype' <- renameLSigType ltype -  return (ForeignImport lname' ltype' co x) -renameForD (ForeignExport lname ltype co x) = do +  return (ForeignImport noExt lname' ltype' x) +renameForD (ForeignExport _ lname ltype x) = do    lname' <- renameL lname    ltype' <- renameLSigType ltype -  return (ForeignExport lname' ltype' co x) +  return (ForeignExport noExt lname' ltype' x) +renameForD (XForeignDecl _) = panic "haddock:renameForD"  renameInstD :: InstDecl GhcRn -> RnM (InstDecl DocNameI)  renameInstD (ClsInstD { cid_inst = d }) = do    d' <- renameClsInstD d -  return (ClsInstD { cid_inst = d' }) +  return (ClsInstD { cid_d_ext = noExt, cid_inst = d' })  renameInstD (TyFamInstD { tfid_inst = d }) = do    d' <- renameTyFamInstD d -  return (TyFamInstD { tfid_inst = d' }) +  return (TyFamInstD { tfid_ext = noExt, tfid_inst = d' })  renameInstD (DataFamInstD { dfid_inst = d }) = do    d' <- renameDataFamInstD d -  return (DataFamInstD { dfid_inst = d' }) +  return (DataFamInstD { dfid_ext = noExt, dfid_inst = d' }) +renameInstD (XInstDecl _) = panic "haddock:renameInstD"  renameDerivD :: DerivDecl GhcRn -> RnM (DerivDecl DocNameI)  renameDerivD (DerivDecl { deriv_type = ty                          , deriv_strategy = strat                          , deriv_overlap_mode = omode }) = do    ty' <- renameLSigWcType ty -  return (DerivDecl { deriv_type = ty' +  return (DerivDecl { deriv_ext = noExt +                    , deriv_type = ty'                      , deriv_strategy = strat                      , deriv_overlap_mode = omode }) +renameDerivD (XDerivDecl _) = panic "haddock:renameDerivD"  renameClsInstD :: ClsInstDecl GhcRn -> RnM (ClsInstDecl DocNameI)  renameClsInstD (ClsInstDecl { cid_overlap_mode = omode @@ -540,10 +555,11 @@ renameClsInstD (ClsInstDecl { cid_overlap_mode = omode    ltype' <- renameLSigType ltype    lATs'  <- mapM (mapM renameTyFamInstD) lATs    lADTs' <- mapM (mapM renameDataFamInstD) lADTs -  return (ClsInstDecl { cid_overlap_mode = omode +  return (ClsInstDecl { cid_ext = noExt, cid_overlap_mode = omode                        , cid_poly_ty = ltype', cid_binds = emptyBag                        , cid_sigs = []                        , cid_tyfam_insts = lATs', cid_datafam_insts = lADTs' }) +renameClsInstD (XClsInstDecl _) = panic "haddock:renameClsInstD"  renameTyFamInstD :: TyFamInstDecl GhcRn -> RnM (TyFamInstDecl DocNameI) @@ -563,10 +579,12 @@ renameTyFamInstEqn eqn        = do { tc' <- renameL tc             ; pats' <- mapM renameLType pats             ; rhs' <- renameLType rhs -           ; return (FamEqn { feqn_tycon  = tc' +           ; return (FamEqn { feqn_ext    = noExt +                            , feqn_tycon  = tc'                              , feqn_pats   = pats'                              , feqn_fixity = fixity                              , feqn_rhs    = rhs' }) } +    rename_ty_fam_eqn (XFamEqn _) = panic "haddock:renameTyFamInstEqn"  renameLTyFamDefltEqn :: LTyFamDefltEqn GhcRn -> RnM (LTyFamDefltEqn DocNameI)  renameLTyFamDefltEqn (L loc (FamEqn { feqn_tycon = tc, feqn_pats = tvs @@ -574,10 +592,12 @@ renameLTyFamDefltEqn (L loc (FamEqn { feqn_tycon = tc, feqn_pats = tvs    = do { tc'  <- renameL tc         ; tvs' <- renameLHsQTyVars tvs         ; rhs' <- renameLType rhs -       ; return (L loc (FamEqn { feqn_tycon  = tc' +       ; return (L loc (FamEqn { feqn_ext    = noExt +                               , feqn_tycon  = tc'                                 , feqn_pats   = tvs'                                 , feqn_fixity = fixity                                 , feqn_rhs    = rhs' })) } +renameLTyFamDefltEqn (L _ (XFamEqn _)) = panic "haddock:renameLTyFamDefltEqn"  renameDataFamInstD :: DataFamInstDecl GhcRn -> RnM (DataFamInstDecl DocNameI)  renameDataFamInstD (DataFamInstDecl { dfid_eqn = eqn }) @@ -592,10 +612,12 @@ renameDataFamInstD (DataFamInstDecl { dfid_eqn = eqn })        = do { tc' <- renameL tc             ; pats' <- mapM renameLType pats             ; defn' <- renameDataDefn defn -           ; return (FamEqn { feqn_tycon  = tc' +           ; return (FamEqn { feqn_ext    = noExt +                            , feqn_tycon  = tc'                              , feqn_pats   = pats'                              , feqn_fixity = fixity                              , feqn_rhs    = defn' }) } +    rename_data_fam_eqn (XFamEqn _) = panic "haddock:renameDataFamInstD"  renameImplicit :: (in_thing -> RnM out_thing)                 -> HsImplicitBndrs GhcRn in_thing @@ -603,8 +625,8 @@ renameImplicit :: (in_thing -> RnM out_thing)  renameImplicit rn_thing (HsIB { hsib_body = thing })    = do { thing' <- rn_thing thing         ; return (HsIB { hsib_body = thing' -                      , hsib_vars = PlaceHolder -                      , hsib_closed = PlaceHolder }) } +                      , hsib_ext = noExt }) } +renameImplicit _ (XHsImplicitBndrs _) = panic "haddock:renameImplicit"  renameWc :: (in_thing -> RnM out_thing)           -> HsWildCardBndrs GhcRn in_thing @@ -612,7 +634,8 @@ renameWc :: (in_thing -> RnM out_thing)  renameWc rn_thing (HsWC { hswc_body = thing })    = do { thing' <- rn_thing thing         ; return (HsWC { hswc_body = thing' -                      , hswc_wcs = PlaceHolder }) } +                      , hswc_ext = noExt }) } +renameWc _ (XHsWildCardBndrs _) = panic "haddock:renameWc"  renameDocInstance :: DocInstance GhcRn -> RnM (DocInstance DocNameI)  renameDocInstance (inst, idoc, L l n) = do diff --git a/haddock-api/src/Haddock/Interface/Specialize.hs b/haddock-api/src/Haddock/Interface/Specialize.hs index b84a676f..c49663db 100644 --- a/haddock-api/src/Haddock/Interface/Specialize.hs +++ b/haddock-api/src/Haddock/Interface/Specialize.hs @@ -110,7 +110,7 @@ sugar = sugarOperators . sugarTuples . sugarLists  sugarLists :: NamedThing (IdP (GhcPass p)) => HsType (GhcPass p) -> HsType (GhcPass p)  sugarLists (HsAppTy _ (L _ (HsTyVar _ _ (L _ name))) ltyp) -    | isBuiltInSyntax name' && strName == "[]" = HsListTy PlaceHolder ltyp +    | isBuiltInSyntax name' && strName == "[]" = HsListTy NoExt ltyp    where      name' = getName name      strName = occNameString . nameOccName $ name' @@ -124,7 +124,7 @@ sugarTuples typ =      aux apps (HsAppTy _ (L _ ftyp) atyp) = aux (atyp:apps) ftyp      aux apps (HsParTy _ (L _ typ')) = aux apps typ'      aux apps (HsTyVar _ _ (L _ name)) -        | isBuiltInSyntax name' && suitable = HsTupleTy PlaceHolder HsBoxedTuple apps +        | isBuiltInSyntax name' && suitable = HsTupleTy NoExt HsBoxedTuple apps        where          name' = getName name          strName = occNameString . nameOccName $ name' @@ -137,7 +137,7 @@ sugarTuples typ =  sugarOperators :: NamedThing (IdP (GhcPass p)) => HsType (GhcPass p) -> HsType (GhcPass p)  sugarOperators (HsAppTy _ (L _ (HsAppTy _ (L _ (HsTyVar _ _ (L l name))) la)) lb)      | isSymOcc $ getOccName name' = mkHsOpTy la (L l name) lb -    | isBuiltInSyntax name' && getOccString name == "(->)" = HsFunTy PlaceHolder la lb +    | isBuiltInSyntax name' && getOccString name == "(->)" = HsFunTy NoExt la lb    where      name' = getName name  sugarOperators typ = typ | 
