diff options
Diffstat (limited to 'haddock-api/src/Haddock/Interface/Rename.hs')
| -rw-r--r-- | haddock-api/src/Haddock/Interface/Rename.hs | 77 | 
1 files changed, 40 insertions, 37 deletions
| diff --git a/haddock-api/src/Haddock/Interface/Rename.hs b/haddock-api/src/Haddock/Interface/Rename.hs index 4d9eadac..bb9cd02d 100644 --- a/haddock-api/src/Haddock/Interface/Rename.hs +++ b/haddock-api/src/Haddock/Interface/Rename.hs @@ -20,11 +20,11 @@ import Data.Traversable (mapM)  import Haddock.GhcUtils  import Haddock.Types -import Bag (emptyBag) +import GHC.Data.Bag (emptyBag)  import GHC hiding (NoLink) -import Name -import RdrName (RdrName(Exact)) -import TysWiredIn (eqTyCon_RDR) +import GHC.Types.Name +import GHC.Types.Name.Reader (RdrName(Exact)) +import GHC.Builtin.Types (eqTyCon_RDR)  import Control.Applicative  import Control.Arrow ( first ) @@ -33,6 +33,7 @@ import Data.List (intercalate)  import qualified Data.Map as Map hiding ( Map )  import qualified Data.Set as Set  import Prelude hiding (mapM) +import GHC.HsToCore.Docs  -- | Traverse docstrings and ASTs in the Haddock interface, renaming 'Name' to  -- 'DocName'. @@ -232,7 +233,6 @@ renameFamilyResultSig (L loc (KindSig _ ki))  renameFamilyResultSig (L loc (TyVarSig _ bndr))      = do { bndr' <- renameLTyVarBndr bndr           ; return (L loc (TyVarSig noExtField bndr')) } -renameFamilyResultSig (L _ (XFamilyResultSig nec)) = noExtCon nec  renameInjectivityAnn :: LInjectivityAnn GhcRn -> RnM (LInjectivityAnn DocNameI)  renameInjectivityAnn (L loc (InjectivityAnn lhs rhs)) @@ -244,13 +244,18 @@ renameMaybeInjectivityAnn :: Maybe (LInjectivityAnn GhcRn)                            -> RnM (Maybe (LInjectivityAnn DocNameI))  renameMaybeInjectivityAnn = traverse renameInjectivityAnn +renameArrow :: HsArrow GhcRn -> RnM (HsArrow DocNameI) +renameArrow (HsUnrestrictedArrow u) = return (HsUnrestrictedArrow u) +renameArrow (HsLinearArrow u) = return (HsLinearArrow u) +renameArrow (HsExplicitMult u p) = HsExplicitMult u <$> renameLType p +  renameType :: HsType GhcRn -> RnM (HsType DocNameI)  renameType t = case t of -  HsForAllTy { hst_fvf = fvf, hst_bndrs = tyvars, hst_body = ltype } -> do -    tyvars'   <- mapM renameLTyVarBndr tyvars -    ltype'    <- renameLType ltype -    return (HsForAllTy { hst_fvf = fvf, hst_xforall = noExtField -                       , hst_bndrs = tyvars', hst_body = ltype' }) +  HsForAllTy { hst_tele = tele, hst_body = ltype } -> do +    tele'  <- renameHsForAllTelescope tele +    ltype' <- renameLType ltype +    return (HsForAllTy { hst_xforall = noExtField +                       , hst_tele = tele', hst_body = ltype' })    HsQualTy { hst_ctxt = lcontext , hst_body = ltype } -> do      lcontext' <- renameLContext lcontext @@ -272,10 +277,11 @@ renameType t = case t of      b' <- renameLKind b      return (HsAppKindTy noExtField a' b') -  HsFunTy _ a b -> do +  HsFunTy _ w a b -> do      a' <- renameLType a      b' <- renameLType b -    return (HsFunTy noExtField a' b') +    w' <- renameArrow w +    return (HsFunTy noExtField w' a' b')    HsListTy _ ty -> return . (HsListTy noExtField) =<< renameLType ty    HsIParamTy _ n ty -> liftM (HsIParamTy noExtField n) (renameLType ty) @@ -326,17 +332,22 @@ renameLHsQTyVars (HsQTvs { hsq_explicit = tvs })    = do { tvs' <- mapM renameLTyVarBndr tvs         ; return (HsQTvs { hsq_ext = noExtField                          , hsq_explicit = tvs' }) } -renameLHsQTyVars (XLHsQTyVars nec) = noExtCon nec -renameLTyVarBndr :: LHsTyVarBndr GhcRn -> RnM (LHsTyVarBndr DocNameI) -renameLTyVarBndr (L loc (UserTyVar x (L l n))) +renameHsForAllTelescope :: HsForAllTelescope GhcRn -> RnM (HsForAllTelescope DocNameI) +renameHsForAllTelescope tele = case tele of +  HsForAllVis   x bndrs -> do bndrs' <- mapM renameLTyVarBndr bndrs +                              pure $ HsForAllVis x bndrs' +  HsForAllInvis x bndrs -> do bndrs' <- mapM renameLTyVarBndr bndrs +                              pure $ HsForAllInvis x bndrs' + +renameLTyVarBndr :: LHsTyVarBndr flag GhcRn -> RnM (LHsTyVarBndr flag DocNameI) +renameLTyVarBndr (L loc (UserTyVar x fl (L l n)))    = do { n' <- rename n -       ; return (L loc (UserTyVar x (L l n'))) } -renameLTyVarBndr (L loc (KindedTyVar x (L lv n) kind)) +       ; return (L loc (UserTyVar x fl (L l n'))) } +renameLTyVarBndr (L loc (KindedTyVar x fl (L lv n) kind))    = do { n' <- rename n         ; kind' <- renameLKind kind -       ; return (L loc (KindedTyVar x (L lv n') kind')) } -renameLTyVarBndr (L _ (XTyVarBndr nec)) = noExtCon nec +       ; return (L loc (KindedTyVar x fl (L lv n') kind')) }  renameLContext :: Located [LHsType GhcRn] -> RnM (Located [LHsType DocNameI])  renameLContext (L loc context) = do @@ -427,7 +438,6 @@ renameTyClD d = case d of                        , tcdFixity = fixity                        , tcdFDs = lfundeps', tcdSigs = lsigs', tcdMeths= emptyBag                        , tcdATs = ats', tcdATDefs = at_defs', tcdDocs = [], tcdCExt = noExtField }) -  XTyClDecl nec -> noExtCon nec    where      renameLFunDep (L loc (xs, ys)) = do @@ -453,7 +463,6 @@ renameFamilyDecl (FamilyDecl { fdInfo = info, fdLName = lname                         , fdFixity = fixity                         , fdResultSig = result'                         , fdInjectivityAnn = injectivity' }) -renameFamilyDecl (XFamilyDecl nec) = noExtCon nec  renamePseudoFamilyDecl :: PseudoFamilyDecl GhcRn @@ -483,7 +492,6 @@ renameDataDefn (HsDataDefn { dd_ND = nd, dd_ctxt = lcontext, dd_cType = cType                         , dd_ND = nd, dd_ctxt = lcontext', dd_cType = cType                         , dd_kindSig = k', dd_cons = cons'                         , dd_derivs = noLoc [] }) -renameDataDefn (XHsDataDefn nec) = noExtCon nec  renameCon :: ConDecl GhcRn -> RnM (ConDecl DocNameI)  renameCon decl@(ConDeclH98 { con_name = lname, con_ex_tvs = ltyvars @@ -503,7 +511,7 @@ renameCon decl@(ConDeclGADT { con_names = lnames, con_qvars = ltyvars                              , con_res_ty = res_ty                              , con_doc = mbldoc }) = do        lnames'   <- mapM renameL lnames -      ltyvars'  <- renameLHsQTyVars ltyvars +      ltyvars'  <- mapM renameLTyVarBndr ltyvars        lcontext' <- traverse renameLContext lcontext        details'  <- renameDetails details        res_ty'   <- renameLType res_ty @@ -511,16 +519,21 @@ renameCon decl@(ConDeclGADT { con_names = lnames, con_qvars = ltyvars        return (decl { con_g_ext = noExtField, con_names = lnames', con_qvars = ltyvars'                     , con_mb_cxt = lcontext', con_args = details'                     , con_res_ty = res_ty', con_doc = mbldoc' }) -renameCon (XConDecl nec) = noExtCon nec + +renameHsScaled :: HsScaled GhcRn (LHsType GhcRn) +               -> RnM (HsScaled DocNameI (LHsType DocNameI)) +renameHsScaled (HsScaled w ty) = HsScaled <$> renameArrow w <*> renameLType ty  renameDetails :: HsConDeclDetails GhcRn -> RnM (HsConDeclDetails DocNameI)  renameDetails (RecCon (L l fields)) = do    fields' <- mapM renameConDeclFieldField fields    return (RecCon (L l fields')) -renameDetails (PrefixCon ps) = return . PrefixCon =<< mapM renameLType ps +                               -- This causes an assertion failure +--renameDetails (PrefixCon ps) = -- return . PrefixCon =<< mapM (_renameLType) ps +renameDetails (PrefixCon ps) = PrefixCon <$> mapM renameHsScaled ps  renameDetails (InfixCon a b) = do -  a' <- renameLType a -  b' <- renameLType b +  a' <- renameHsScaled a +  b' <- renameHsScaled b    return (InfixCon a' b')  renameConDeclFieldField :: LConDeclField GhcRn -> RnM (LConDeclField DocNameI) @@ -529,13 +542,11 @@ renameConDeclFieldField (L l (ConDeclField _ names t doc)) = do    t'   <- renameLType t    doc' <- mapM renameLDocHsSyn doc    return $ L l (ConDeclField noExtField names' t' doc') -renameConDeclFieldField (L _ (XConDeclField nec)) = noExtCon nec  renameLFieldOcc :: LFieldOcc GhcRn -> RnM (LFieldOcc DocNameI)  renameLFieldOcc (L l (FieldOcc sel lbl)) = do    sel' <- rename sel    return $ L l (FieldOcc sel' lbl) -renameLFieldOcc (L _ (XFieldOcc nec)) = noExtCon nec  renameSig :: Sig GhcRn -> RnM (Sig DocNameI)  renameSig sig = case sig of @@ -570,7 +581,6 @@ renameForD (ForeignExport _ lname ltype x) = do    lname' <- renameL lname    ltype' <- renameLSigType ltype    return (ForeignExport noExtField lname' ltype' x) -renameForD (XForeignDecl nec) = noExtCon nec  renameInstD :: InstDecl GhcRn -> RnM (InstDecl DocNameI) @@ -583,7 +593,6 @@ renameInstD (TyFamInstD { tfid_inst = d }) = do  renameInstD (DataFamInstD { dfid_inst = d }) = do    d' <- renameDataFamInstD d    return (DataFamInstD { dfid_ext = noExtField, dfid_inst = d' }) -renameInstD (XInstDecl nec) = noExtCon nec  renameDerivD :: DerivDecl GhcRn -> RnM (DerivDecl DocNameI)  renameDerivD (DerivDecl { deriv_type = ty @@ -595,7 +604,6 @@ renameDerivD (DerivDecl { deriv_type = ty                      , deriv_type = ty'                      , deriv_strategy = strat'                      , deriv_overlap_mode = omode }) -renameDerivD (XDerivDecl nec) = noExtCon nec  renameDerivStrategy :: DerivStrategy GhcRn -> RnM (DerivStrategy DocNameI)  renameDerivStrategy StockStrategy    = pure StockStrategy @@ -614,7 +622,6 @@ renameClsInstD (ClsInstDecl { cid_overlap_mode = omode                        , cid_poly_ty = ltype', cid_binds = emptyBag                        , cid_sigs = []                        , cid_tyfam_insts = lATs', cid_datafam_insts = lADTs' }) -renameClsInstD (XClsInstDecl nec) = noExtCon nec  renameTyFamInstD :: TyFamInstDecl GhcRn -> RnM (TyFamInstDecl DocNameI) @@ -642,7 +649,6 @@ renameTyFamInstEqn eqn                              , feqn_pats   = pats'                              , feqn_fixity = fixity                              , feqn_rhs    = rhs' }) } -    rename_ty_fam_eqn (XFamEqn nec) = noExtCon nec  renameTyFamDefltD :: TyFamDefltDecl GhcRn -> RnM (TyFamDefltDecl DocNameI)  renameTyFamDefltD = renameTyFamInstD @@ -668,7 +674,6 @@ renameDataFamInstD (DataFamInstDecl { dfid_eqn = eqn })                              , feqn_pats   = pats'                              , feqn_fixity = fixity                              , feqn_rhs    = defn' }) } -    rename_data_fam_eqn (XFamEqn nec) = noExtCon nec  renameImplicit :: (in_thing -> RnM out_thing)                 -> HsImplicitBndrs GhcRn in_thing @@ -677,7 +682,6 @@ renameImplicit rn_thing (HsIB { hsib_body = thing })    = do { thing' <- rn_thing thing         ; return (HsIB { hsib_body = thing'                        , hsib_ext = noExtField }) } -renameImplicit _ (XHsImplicitBndrs nec) = noExtCon nec  renameWc :: (in_thing -> RnM out_thing)           -> HsWildCardBndrs GhcRn in_thing @@ -686,7 +690,6 @@ renameWc rn_thing (HsWC { hswc_body = thing })    = do { thing' <- rn_thing thing         ; return (HsWC { hswc_body = thing'                        , hswc_ext = noExtField }) } -renameWc _ (XHsWildCardBndrs nec) = noExtCon nec  renameDocInstance :: DocInstance GhcRn -> RnM (DocInstance DocNameI)  renameDocInstance (inst, idoc, L l n, m) = do | 
