module GHC.Rename.Doc ( rnHsDoc, rnLHsDoc, rnLDocDecl, rnDocDecl ) where import GHC.Prelude import GHC.Tc.Types import GHC.Hs import GHC.Types.Name.Reader import GHC.Types.Name import GHC.Types.SrcLoc import GHC.Tc.Utils.Monad (getGblEnv) import GHC.Types.Avail import GHC.Rename.Env rnLHsDoc :: LHsDoc GhcPs -> RnM (LHsDoc GhcRn) rnLHsDoc :: LHsDoc GhcPs -> RnM (LHsDoc GhcRn) rnLHsDoc = (HsDoc GhcPs -> IOEnv (Env TcGblEnv TcLclEnv) (HsDoc GhcRn)) -> LHsDoc GhcPs -> RnM (LHsDoc GhcRn) forall (t :: * -> *) (f :: * -> *) a b. (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) forall (f :: * -> *) a b. Applicative f => (a -> f b) -> GenLocated SrcSpan a -> f (GenLocated SrcSpan b) traverse HsDoc GhcPs -> IOEnv (Env TcGblEnv TcLclEnv) (HsDoc GhcRn) forall a. WithHsDocIdentifiers a GhcPs -> RnM (WithHsDocIdentifiers a GhcRn) rnHsDoc rnLDocDecl :: LDocDecl GhcPs -> RnM (LDocDecl GhcRn) rnLDocDecl :: LDocDecl GhcPs -> RnM (LDocDecl GhcRn) rnLDocDecl = (DocDecl GhcPs -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn)) -> GenLocated SrcSpanAnnA (DocDecl GhcPs) -> IOEnv (Env TcGblEnv TcLclEnv) (GenLocated SrcSpanAnnA (DocDecl GhcRn)) forall (t :: * -> *) (f :: * -> *) a b. (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) forall (f :: * -> *) a b. Applicative f => (a -> f b) -> GenLocated SrcSpanAnnA a -> f (GenLocated SrcSpanAnnA b) traverse DocDecl GhcPs -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn) rnDocDecl rnDocDecl :: DocDecl GhcPs -> RnM (DocDecl GhcRn) rnDocDecl :: DocDecl GhcPs -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn) rnDocDecl (DocCommentNext LHsDoc GhcPs doc) = do LHsDoc GhcRn doc' <- LHsDoc GhcPs -> RnM (LHsDoc GhcRn) rnLHsDoc LHsDoc GhcPs doc DocDecl GhcRn -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn) forall a. a -> IOEnv (Env TcGblEnv TcLclEnv) a forall (f :: * -> *) a. Applicative f => a -> f a pure (DocDecl GhcRn -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn)) -> DocDecl GhcRn -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn) forall a b. (a -> b) -> a -> b $ (LHsDoc GhcRn -> DocDecl GhcRn forall pass. LHsDoc pass -> DocDecl pass DocCommentNext LHsDoc GhcRn doc') rnDocDecl (DocCommentPrev LHsDoc GhcPs doc) = do LHsDoc GhcRn doc' <- LHsDoc GhcPs -> RnM (LHsDoc GhcRn) rnLHsDoc LHsDoc GhcPs doc DocDecl GhcRn -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn) forall a. a -> IOEnv (Env TcGblEnv TcLclEnv) a forall (f :: * -> *) a. Applicative f => a -> f a pure (DocDecl GhcRn -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn)) -> DocDecl GhcRn -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn) forall a b. (a -> b) -> a -> b $ (LHsDoc GhcRn -> DocDecl GhcRn forall pass. LHsDoc pass -> DocDecl pass DocCommentPrev LHsDoc GhcRn doc') rnDocDecl (DocCommentNamed String n LHsDoc GhcPs doc) = do LHsDoc GhcRn doc' <- LHsDoc GhcPs -> RnM (LHsDoc GhcRn) rnLHsDoc LHsDoc GhcPs doc DocDecl GhcRn -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn) forall a. a -> IOEnv (Env TcGblEnv TcLclEnv) a forall (f :: * -> *) a. Applicative f => a -> f a pure (DocDecl GhcRn -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn)) -> DocDecl GhcRn -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn) forall a b. (a -> b) -> a -> b $ (String -> LHsDoc GhcRn -> DocDecl GhcRn forall pass. String -> LHsDoc pass -> DocDecl pass DocCommentNamed String n LHsDoc GhcRn doc') rnDocDecl (DocGroup Int i LHsDoc GhcPs doc) = do LHsDoc GhcRn doc' <- LHsDoc GhcPs -> RnM (LHsDoc GhcRn) rnLHsDoc LHsDoc GhcPs doc DocDecl GhcRn -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn) forall a. a -> IOEnv (Env TcGblEnv TcLclEnv) a forall (f :: * -> *) a. Applicative f => a -> f a pure (DocDecl GhcRn -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn)) -> DocDecl GhcRn -> IOEnv (Env TcGblEnv TcLclEnv) (DocDecl GhcRn) forall a b. (a -> b) -> a -> b $ (Int -> LHsDoc GhcRn -> DocDecl GhcRn forall pass. Int -> LHsDoc pass -> DocDecl pass DocGroup Int i LHsDoc GhcRn doc') rnHsDoc :: WithHsDocIdentifiers a GhcPs -> RnM (WithHsDocIdentifiers a GhcRn) rnHsDoc :: forall a. WithHsDocIdentifiers a GhcPs -> RnM (WithHsDocIdentifiers a GhcRn) rnHsDoc (WithHsDocIdentifiers a s [Located (IdP GhcPs)] ids) = do GlobalRdrEnv gre <- TcGblEnv -> GlobalRdrEnv tcg_rdr_env (TcGblEnv -> GlobalRdrEnv) -> IOEnv (Env TcGblEnv TcLclEnv) TcGblEnv -> IOEnv (Env TcGblEnv TcLclEnv) GlobalRdrEnv forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> IOEnv (Env TcGblEnv TcLclEnv) TcGblEnv forall gbl lcl. TcRnIf gbl lcl gbl getGblEnv WithHsDocIdentifiers a GhcRn -> RnM (WithHsDocIdentifiers a GhcRn) forall a. a -> IOEnv (Env TcGblEnv TcLclEnv) a forall (f :: * -> *) a. Applicative f => a -> f a pure (a -> [Located (IdP GhcRn)] -> WithHsDocIdentifiers a GhcRn forall a pass. a -> [Located (IdP pass)] -> WithHsDocIdentifiers a pass WithHsDocIdentifiers a s (GlobalRdrEnv -> [Located RdrName] -> [Located Name] rnHsDocIdentifiers GlobalRdrEnv gre [Located (IdP GhcPs)] [Located RdrName] ids)) rnHsDocIdentifiers :: GlobalRdrEnv -> [Located RdrName] -> [Located Name] rnHsDocIdentifiers :: GlobalRdrEnv -> [Located RdrName] -> [Located Name] rnHsDocIdentifiers GlobalRdrEnv gre [Located RdrName] ns = [[Located Name]] -> [Located Name] forall (t :: * -> *) a. Foldable t => t [a] -> [a] concat [ (GlobalRdrElt -> Located Name) -> [GlobalRdrElt] -> [Located Name] forall a b. (a -> b) -> [a] -> [b] map (SrcSpan -> Name -> Located Name forall l e. l -> e -> GenLocated l e L SrcSpan l (Name -> Located Name) -> (GlobalRdrElt -> Name) -> GlobalRdrElt -> Located Name forall b c a. (b -> c) -> (a -> b) -> a -> c . GreName -> Name greNamePrintableName (GreName -> Name) -> (GlobalRdrElt -> GreName) -> GlobalRdrElt -> Name forall b c a. (b -> c) -> (a -> b) -> a -> c . GlobalRdrElt -> GreName gre_name) (RdrName -> GlobalRdrEnv -> [GlobalRdrElt] lookupGRE_RdrName RdrName c GlobalRdrEnv gre) | L SrcSpan l RdrName rdr_name <- [Located RdrName] ns , RdrName c <- RdrName -> [RdrName] dataTcOccs RdrName rdr_name ]