{-# LANGUAGE CPP #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE ScopedTypeVariables #-}
#if MIN_VERSION_GHC(8,10)
#define GHC_IMPORT(NAME) GHC.Hs.NAME
#else
#define GHC_IMPORT(NAME) Hs ## NAME
#endif
module GhcTags.Ghc
( GhcTag (..)
, GhcTags
, GhcTagKind (..)
, getGhcTags
, hsDeclsToGhcTags
) where
import Data.Maybe (mapMaybe)
import Data.Maybe (maybeToList)
#if MIN_VERSION_GHC(9,6)
import qualified Data.List.NonEmpty as NonEmpty
#endif
import Data.Foldable (foldl', toList)
import Data.ByteString (ByteString)
import GHC.Types.SourceText (SourceText (..))
#if MIN_VERSION_GHC(9,8)
import qualified GHC.Data.FastString as FastString
#endif
import GHC.Data.FastString (bytesFS)
import GHC_IMPORT(Binds)
( HsBindLR (..)
, PatSynBind (..)
, Sig (..)
)
import GHC_IMPORT(Decls)
( ForeignImport (..)
, ClsInstDecl (..)
, ConDecl (..)
, DataFamInstDecl (..)
, FamEqn (..)
, FamilyDecl (..)
, FamilyInfo (..)
, FamilyResultSig (..)
, ForeignDecl (..)
, LHsDecl
, HsConDeclH98Details
, HsDecl (..)
, HsDataDefn (..)
, InstDecl (..)
, TyClDecl (..)
, TyFamInstDecl (..)
)
import GHC.Hs.Decls ( StandaloneKindSig (..) )
import GHC_IMPORT(ImpExp)
( IE (..)
, IEWildcard (..)
, ieWrappedName
)
import GHC_IMPORT(Extension)
( GhcPs
)
import GHC.Hs.Type
( ConDeclField (..)
, FieldOcc (..)
, HsConDetails (..)
, HsKind
, HsTyVarBndr (..)
, HsType (..)
, HsWildCardBndrs
, LConDeclField
, LFieldOcc
, LHsQTyVars (..)
, LHsSigType
, LHsType
)
import GHC.Types.SrcLoc
( GenLocated (..)
, Located
, SrcSpan (..)
, unLoc
)
import GHC.Types.Name.Reader
( RdrName (..)
, rdrNameOcc
)
import GHC.Types.Name ( nameOccName
, occNameFS
)
import GHC.Hs ( HsConDeclGADTDetails (..)
, HsModule (..)
, HsSigType (..)
#if MIN_VERSION_GHC(9,6)
, CImportSpec (..)
#endif
)
#if MIN_VERSION_GHC(9,6)
import GHC.Types.ForeignCall (CCallTarget (..))
#endif
import GHC.Parser.Annotation (SrcSpanAnn' (..))
import GHC.Hs ( GRHSs (..)
, HsLocalBinds
, HsLocalBindsLR (..)
, HsValBindsLR (..)
, Match (..)
, MatchGroup (..)
)
#if MIN_VERSION_GHC(9,6)
import Language.Haskell.Syntax.Module.Name (moduleNameFS)
#else
import GHC.Unit.Module.Name (moduleNameFS)
#endif
#if MIN_VERSION_GHC(9,6)
type GhcPsModule = HsModule GhcPs
type GhcPsHsTyVarBndr = HsTyVarBndr () GhcPs
#else
type GhcPsModule = HsModule
type GhcPsHsTyVarBndr = HsTyVarBndr () GhcPs
#endif
data GhcTagKind
= GtkModule
| GtkTerm
| GtkFunction
| GtkTypeConstructor (Maybe (HsKind GhcPs))
| GtkDataConstructor (ConDecl GhcPs)
| GtkGADTConstructor (ConDecl GhcPs)
| GtkRecordField
| GtkTypeSynonym (HsType GhcPs)
| GtkTypeSignature (HsWildCardBndrs GhcPs (LHsSigType GhcPs))
| GtkTypeKindSignature (LHsSigType GhcPs)
| GtkPatternSynonym
| GtkTypeClass
| GtkTypeClassMember (HsType GhcPs)
| GtkTypeClassInstance (HsType GhcPs)
| GtkTypeClassInstanceMember (HsType GhcPs)
| GtkTypeFamily (Maybe ([GhcPsHsTyVarBndr], Either (HsKind GhcPs) GhcPsHsTyVarBndr))
| GtkTypeFamilyInstance (Maybe (TyFamInstDecl GhcPs))
| GtkDataTypeFamily (Maybe ([GhcPsHsTyVarBndr], Either (HsKind GhcPs) GhcPsHsTyVarBndr))
| GtkDataTypeFamilyInstance (Maybe (HsKind GhcPs))
| GtkForeignImport
| GtkForeignExport
data GhcTag = GhcTag {
GhcTag -> SrcSpan
gtSrcSpan :: !SrcSpan
, GhcTag -> ByteString
gtTag :: !ByteString
, GhcTag -> GhcTagKind
gtKind :: !GhcTagKind
, GhcTag -> Bool
gtIsExported :: !Bool
, GhcTag -> Maybe String
gtFFI :: !(Maybe String)
}
type GhcTags = [GhcTag]
isExported :: Maybe [IE GhcPs] -> Located RdrName -> Bool
isExported :: Maybe [IE GhcPs] -> Located RdrName -> Bool
isExported Maybe [IE GhcPs]
Nothing Located RdrName
_name = Bool
True
isExported (Just [IE GhcPs]
ies) (L SrcSpan
_ RdrName
name) =
(IE GhcPs -> Bool) -> [IE GhcPs] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (\IE GhcPs
ie -> IE GhcPs -> Maybe RdrName
ieName IE GhcPs
ie Maybe RdrName -> Maybe RdrName -> Bool
forall a. Eq a => a -> a -> Bool
== RdrName -> Maybe RdrName
forall a. a -> Maybe a
Just RdrName
name) [IE GhcPs]
ies
where
ieName :: IE GhcPs -> Maybe RdrName
ieName :: IE GhcPs -> Maybe RdrName
ieName (IEVar XIEVar GhcPs
_ (L SrcSpanAnnA
_ IEWrappedName GhcPs
n)) = RdrName -> Maybe RdrName
forall a. a -> Maybe a
Just (RdrName -> Maybe RdrName) -> RdrName -> Maybe RdrName
forall a b. (a -> b) -> a -> b
$ IEWrappedName GhcPs -> IdP GhcPs
forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
ieWrappedName IEWrappedName GhcPs
n
ieName (IEThingAbs XIEThingAbs GhcPs
_ (L SrcSpanAnnA
_ IEWrappedName GhcPs
n)) = RdrName -> Maybe RdrName
forall a. a -> Maybe a
Just (RdrName -> Maybe RdrName) -> RdrName -> Maybe RdrName
forall a b. (a -> b) -> a -> b
$ IEWrappedName GhcPs -> IdP GhcPs
forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
ieWrappedName IEWrappedName GhcPs
n
ieName (IEThingWith XIEThingWith GhcPs
_ (L SrcSpanAnnA
_ IEWrappedName GhcPs
n) IEWildcard
_ [LIEWrappedName GhcPs]
_) = RdrName -> Maybe RdrName
forall a. a -> Maybe a
Just (RdrName -> Maybe RdrName) -> RdrName -> Maybe RdrName
forall a b. (a -> b) -> a -> b
$ IEWrappedName GhcPs -> IdP GhcPs
forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
ieWrappedName IEWrappedName GhcPs
n
ieName (IEThingAll XIEThingAll GhcPs
_ (L SrcSpanAnnA
_ IEWrappedName GhcPs
n)) = RdrName -> Maybe RdrName
forall a. a -> Maybe a
Just (RdrName -> Maybe RdrName) -> RdrName -> Maybe RdrName
forall a b. (a -> b) -> a -> b
$ IEWrappedName GhcPs -> IdP GhcPs
forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
ieWrappedName IEWrappedName GhcPs
n
ieName IE GhcPs
_ = Maybe RdrName
forall a. Maybe a
Nothing
isMemberExported :: Maybe [IE GhcPs]
-> Located RdrName
-> Located RdrName
-> Bool
isMemberExported :: Maybe [IE GhcPs] -> Located RdrName -> Located RdrName -> Bool
isMemberExported Maybe [IE GhcPs]
Nothing Located RdrName
_memberName Located RdrName
_className = Bool
True
isMemberExported (Just [IE GhcPs]
ies) Located RdrName
memberName Located RdrName
className = (IE GhcPs -> Bool) -> [IE GhcPs] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any IE GhcPs -> Bool
go [IE GhcPs]
ies
where
go :: IE GhcPs -> Bool
go :: IE GhcPs -> Bool
go (IEVar XIEVar GhcPs
_ (L SrcSpanAnnA
_ IEWrappedName GhcPs
n)) = IEWrappedName GhcPs -> IdP GhcPs
forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
ieWrappedName IEWrappedName GhcPs
n RdrName -> RdrName -> Bool
forall a. Eq a => a -> a -> Bool
== Located RdrName -> RdrName
forall l e. GenLocated l e -> e
unLoc Located RdrName
memberName
go (IEThingAbs XIEThingAbs GhcPs
_ LIEWrappedName GhcPs
_) = Bool
False
go (IEThingAll XIEThingAll GhcPs
_ (L SrcSpanAnnA
_ IEWrappedName GhcPs
n)) = IEWrappedName GhcPs -> IdP GhcPs
forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
ieWrappedName IEWrappedName GhcPs
n RdrName -> RdrName -> Bool
forall a. Eq a => a -> a -> Bool
== Located RdrName -> RdrName
forall l e. GenLocated l e -> e
unLoc Located RdrName
className
go (IEThingWith XIEThingWith GhcPs
_ LIEWrappedName GhcPs
_ IEWildcard{} [LIEWrappedName GhcPs]
_) = Bool
True
go (IEThingWith XIEThingWith GhcPs
_ (L SrcSpanAnnA
_ IEWrappedName GhcPs
n) IEWildcard
NoIEWildcard [LIEWrappedName GhcPs]
ns) =
IEWrappedName GhcPs -> IdP GhcPs
forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
ieWrappedName IEWrappedName GhcPs
n RdrName -> RdrName -> Bool
forall a. Eq a => a -> a -> Bool
== Located RdrName -> RdrName
forall l e. GenLocated l e -> e
unLoc Located RdrName
className
Bool -> Bool -> Bool
&& Bool
isInWrappedNames
where
isInWrappedNames :: Bool
isInWrappedNames = (GenLocated SrcSpanAnnA (IEWrappedName GhcPs) -> Bool)
-> [GenLocated SrcSpanAnnA (IEWrappedName GhcPs)] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any ((FastString -> FastString -> Bool
forall a. Eq a => a -> a -> Bool
== OccName -> FastString
occNameFS (RdrName -> OccName
rdrNameOcc (Located RdrName -> RdrName
forall l e. GenLocated l e -> e
unLoc Located RdrName
memberName))) (FastString -> Bool)
-> (GenLocated SrcSpanAnnA (IEWrappedName GhcPs) -> FastString)
-> GenLocated SrcSpanAnnA (IEWrappedName GhcPs)
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OccName -> FastString
occNameFS (OccName -> FastString)
-> (GenLocated SrcSpanAnnA (IEWrappedName GhcPs) -> OccName)
-> GenLocated SrcSpanAnnA (IEWrappedName GhcPs)
-> FastString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RdrName -> OccName
rdrNameOcc (RdrName -> OccName)
-> (GenLocated SrcSpanAnnA (IEWrappedName GhcPs) -> RdrName)
-> GenLocated SrcSpanAnnA (IEWrappedName GhcPs)
-> OccName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IEWrappedName GhcPs -> IdP GhcPs
IEWrappedName GhcPs -> RdrName
forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
ieWrappedName (IEWrappedName GhcPs -> RdrName)
-> (GenLocated SrcSpanAnnA (IEWrappedName GhcPs)
-> IEWrappedName GhcPs)
-> GenLocated SrcSpanAnnA (IEWrappedName GhcPs)
-> RdrName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpanAnnA (IEWrappedName GhcPs) -> IEWrappedName GhcPs
forall l e. GenLocated l e -> e
unLoc) [LIEWrappedName GhcPs]
[GenLocated SrcSpanAnnA (IEWrappedName GhcPs)]
ns
go IE GhcPs
_ = Bool
False
mkGhcTag :: Located RdrName
-> GhcTagKind
-> Bool
-> GhcTag
mkGhcTag :: Located RdrName -> GhcTagKind -> Bool -> GhcTag
mkGhcTag (L SrcSpan
gtSrcSpan RdrName
rdrName) GhcTagKind
gtKind Bool
gtIsExported =
case RdrName
rdrName of
Unqual OccName
occName ->
GhcTag { gtTag :: ByteString
gtTag = FastString -> ByteString
bytesFS (OccName -> FastString
occNameFS OccName
occName)
, SrcSpan
gtSrcSpan :: SrcSpan
gtSrcSpan :: SrcSpan
gtSrcSpan
, GhcTagKind
gtKind :: GhcTagKind
gtKind :: GhcTagKind
gtKind
, Bool
gtIsExported :: Bool
gtIsExported :: Bool
gtIsExported
, gtFFI :: Maybe String
gtFFI = Maybe String
forall a. Maybe a
Nothing
}
Qual ModuleName
_ OccName
occName ->
GhcTag { gtTag :: ByteString
gtTag = FastString -> ByteString
bytesFS (OccName -> FastString
occNameFS OccName
occName)
, SrcSpan
gtSrcSpan :: SrcSpan
gtSrcSpan :: SrcSpan
gtSrcSpan
, GhcTagKind
gtKind :: GhcTagKind
gtKind :: GhcTagKind
gtKind
, Bool
gtIsExported :: Bool
gtIsExported :: Bool
gtIsExported
, gtFFI :: Maybe String
gtFFI = Maybe String
forall a. Maybe a
Nothing
}
Orig Module
_ OccName
occName ->
GhcTag { gtTag :: ByteString
gtTag = FastString -> ByteString
bytesFS (OccName -> FastString
occNameFS OccName
occName)
, SrcSpan
gtSrcSpan :: SrcSpan
gtSrcSpan :: SrcSpan
gtSrcSpan
, GhcTagKind
gtKind :: GhcTagKind
gtKind :: GhcTagKind
gtKind
, Bool
gtIsExported :: Bool
gtIsExported :: Bool
gtIsExported
, gtFFI :: Maybe String
gtFFI = Maybe String
forall a. Maybe a
Nothing
}
Exact Name
eName ->
GhcTag { gtTag :: ByteString
gtTag = FastString -> ByteString
bytesFS (OccName -> FastString
occNameFS (Name -> OccName
nameOccName Name
eName))
, SrcSpan
gtSrcSpan :: SrcSpan
gtSrcSpan :: SrcSpan
gtSrcSpan
, GhcTagKind
gtKind :: GhcTagKind
gtKind :: GhcTagKind
gtKind
, Bool
gtIsExported :: Bool
gtIsExported :: Bool
gtIsExported
, gtFFI :: Maybe String
gtFFI = Maybe String
forall a. Maybe a
Nothing
}
getGhcTags :: Located GhcPsModule
-> GhcTags
getGhcTags :: Located GhcPsModule -> GhcTags
getGhcTags (L SrcSpan
_ HsModule { Maybe (XRec GhcPs ModuleName)
hsmodName :: Maybe (XRec GhcPs ModuleName)
hsmodName :: forall p. HsModule p -> Maybe (XRec p ModuleName)
hsmodName, [LHsDecl GhcPs]
hsmodDecls :: [LHsDecl GhcPs]
hsmodDecls :: forall p. HsModule p -> [LHsDecl p]
hsmodDecls, Maybe (XRec GhcPs [LIE GhcPs])
hsmodExports :: Maybe (XRec GhcPs [LIE GhcPs])
hsmodExports :: forall p. HsModule p -> Maybe (XRec p [LIE p])
hsmodExports }) =
Maybe GhcTag -> GhcTags
forall a. Maybe a -> [a]
maybeToList (GenLocated SrcSpanAnnA ModuleName -> GhcTag
forall {a}. GenLocated (SrcSpanAnn' a) ModuleName -> GhcTag
mkModNameTag (GenLocated SrcSpanAnnA ModuleName -> GhcTag)
-> Maybe (GenLocated SrcSpanAnnA ModuleName) -> Maybe GhcTag
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (XRec GhcPs ModuleName)
Maybe (GenLocated SrcSpanAnnA ModuleName)
hsmodName)
GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++
Maybe [IE GhcPs] -> [LHsDecl GhcPs] -> GhcTags
hsDeclsToGhcTags Maybe [IE GhcPs]
mies [LHsDecl GhcPs]
hsmodDecls
where
mies :: Maybe [IE GhcPs]
mies :: Maybe [IE GhcPs]
mies = (GenLocated SrcSpanAnnA (IE GhcPs) -> IE GhcPs)
-> [GenLocated SrcSpanAnnA (IE GhcPs)] -> [IE GhcPs]
forall a b. (a -> b) -> [a] -> [b]
map GenLocated SrcSpanAnnA (IE GhcPs) -> IE GhcPs
forall l e. GenLocated l e -> e
unLoc ([GenLocated SrcSpanAnnA (IE GhcPs)] -> [IE GhcPs])
-> (GenLocated SrcSpanAnnL [GenLocated SrcSpanAnnA (IE GhcPs)]
-> [GenLocated SrcSpanAnnA (IE GhcPs)])
-> GenLocated SrcSpanAnnL [GenLocated SrcSpanAnnA (IE GhcPs)]
-> [IE GhcPs]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpanAnnL [GenLocated SrcSpanAnnA (IE GhcPs)]
-> [GenLocated SrcSpanAnnA (IE GhcPs)]
forall l e. GenLocated l e -> e
unLoc (GenLocated SrcSpanAnnL [GenLocated SrcSpanAnnA (IE GhcPs)]
-> [IE GhcPs])
-> Maybe
(GenLocated SrcSpanAnnL [GenLocated SrcSpanAnnA (IE GhcPs)])
-> Maybe [IE GhcPs]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (XRec GhcPs [LIE GhcPs])
Maybe (GenLocated SrcSpanAnnL [GenLocated SrcSpanAnnA (IE GhcPs)])
hsmodExports
mkModNameTag :: GenLocated (SrcSpanAnn' a) ModuleName -> GhcTag
mkModNameTag (L SrcSpanAnn' a
loc ModuleName
modName) =
GhcTag { gtSrcSpan :: SrcSpan
gtSrcSpan = SrcSpanAnn' a -> SrcSpan
forall a. SrcSpanAnn' a -> SrcSpan
locA SrcSpanAnn' a
loc
, gtTag :: ByteString
gtTag = FastString -> ByteString
bytesFS (FastString -> ByteString) -> FastString -> ByteString
forall a b. (a -> b) -> a -> b
$ ModuleName -> FastString
moduleNameFS ModuleName
modName
, gtKind :: GhcTagKind
gtKind = GhcTagKind
GtkModule
, gtIsExported :: Bool
gtIsExported = Bool
True
, gtFFI :: Maybe String
gtFFI = Maybe String
forall a. Maybe a
Nothing
}
hsDeclsToGhcTags :: Maybe [IE GhcPs]
-> [LHsDecl GhcPs]
-> GhcTags
hsDeclsToGhcTags :: Maybe [IE GhcPs] -> [LHsDecl GhcPs] -> GhcTags
hsDeclsToGhcTags Maybe [IE GhcPs]
mies =
GhcTags -> GhcTags
forall a. [a] -> [a]
reverse (GhcTags -> GhcTags)
-> ([GenLocated SrcSpanAnnA (HsDecl GhcPs)] -> GhcTags)
-> [GenLocated SrcSpanAnnA (HsDecl GhcPs)]
-> GhcTags
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (GhcTags -> GenLocated SrcSpanAnnA (HsDecl GhcPs) -> GhcTags)
-> GhcTags -> [GenLocated SrcSpanAnnA (HsDecl GhcPs)] -> GhcTags
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' GhcTags -> LHsDecl GhcPs -> GhcTags
GhcTags -> GenLocated SrcSpanAnnA (HsDecl GhcPs) -> GhcTags
go []
where
fixLoc :: SrcSpan -> GhcTag -> GhcTag
fixLoc :: SrcSpan -> GhcTag -> GhcTag
fixLoc SrcSpan
loc gt :: GhcTag
gt@GhcTag { gtSrcSpan :: GhcTag -> SrcSpan
gtSrcSpan = UnhelpfulSpan {} } = GhcTag
gt { gtSrcSpan = loc }
fixLoc SrcSpan
_ GhcTag
gt = GhcTag
gt
mkGhcTag' :: SrcSpan
-> Located RdrName
-> GhcTagKind
-> GhcTag
mkGhcTag' :: SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
l Located RdrName
a GhcTagKind
k = SrcSpan -> GhcTag -> GhcTag
fixLoc SrcSpan
l (GhcTag -> GhcTag) -> GhcTag -> GhcTag
forall a b. (a -> b) -> a -> b
$ Located RdrName -> GhcTagKind -> Bool -> GhcTag
mkGhcTag Located RdrName
a GhcTagKind
k (Maybe [IE GhcPs] -> Located RdrName -> Bool
isExported Maybe [IE GhcPs]
mies Located RdrName
a)
mkGhcTagForMember :: SrcSpan
-> Located RdrName
-> Located RdrName
-> GhcTagKind
-> GhcTag
mkGhcTagForMember :: SrcSpan
-> Located RdrName -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTagForMember SrcSpan
decLoc Located RdrName
memberName Located RdrName
className GhcTagKind
kind =
SrcSpan -> GhcTag -> GhcTag
fixLoc SrcSpan
decLoc (GhcTag -> GhcTag) -> GhcTag -> GhcTag
forall a b. (a -> b) -> a -> b
$ Located RdrName -> GhcTagKind -> Bool -> GhcTag
mkGhcTag Located RdrName
memberName GhcTagKind
kind
(Maybe [IE GhcPs] -> Located RdrName -> Located RdrName -> Bool
isMemberExported Maybe [IE GhcPs]
mies Located RdrName
memberName Located RdrName
className)
go :: GhcTags -> LHsDecl GhcPs -> GhcTags
go :: GhcTags -> LHsDecl GhcPs -> GhcTags
go GhcTags
tags (L SrcSpanAnnA
decLoc' HsDecl GhcPs
hsDecl) = let decLoc :: SrcSpan
decLoc = SrcSpanAnnA -> SrcSpan
forall a. SrcSpanAnn' a -> SrcSpan
locAnn SrcSpanAnnA
decLoc' in case HsDecl GhcPs
hsDecl of
TyClD XTyClD GhcPs
_ TyClDecl GhcPs
tyClDecl ->
case TyClDecl GhcPs
tyClDecl of
FamDecl { FamilyDecl GhcPs
tcdFam :: FamilyDecl GhcPs
tcdFam :: forall pass. TyClDecl pass -> FamilyDecl pass
tcdFam } ->
case SrcSpan
-> FamilyDecl GhcPs -> Maybe (Located RdrName) -> Maybe GhcTag
mkFamilyDeclTags SrcSpan
decLoc FamilyDecl GhcPs
tcdFam Maybe (Located RdrName)
forall a. Maybe a
Nothing of
Just GhcTag
tag -> GhcTag
tag GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: GhcTags
tags
Maybe GhcTag
Nothing -> GhcTags
tags
SynDecl { LIdP GhcPs
tcdLName :: LIdP GhcPs
tcdLName :: forall pass. TyClDecl pass -> LIdP pass
tcdLName, tcdRhs :: forall pass. TyClDecl pass -> LHsType pass
tcdRhs = L SrcSpanAnnA
_ HsType GhcPs
hsType } ->
SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
tcdLName) (HsType GhcPs -> GhcTagKind
GtkTypeSynonym HsType GhcPs
hsType) GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: GhcTags
tags
DataDecl { LIdP GhcPs
tcdLName :: forall pass. TyClDecl pass -> LIdP pass
tcdLName :: LIdP GhcPs
tcdLName, HsDataDefn GhcPs
tcdDataDefn :: HsDataDefn GhcPs
tcdDataDefn :: forall pass. TyClDecl pass -> HsDataDefn pass
tcdDataDefn } ->
case HsDataDefn GhcPs
tcdDataDefn of
HsDataDefn { DataDefnCons (LConDecl GhcPs)
dd_cons :: DataDefnCons (LConDecl GhcPs)
dd_cons :: forall pass. HsDataDefn pass -> DataDefnCons (LConDecl pass)
dd_cons, Maybe (LHsType GhcPs)
dd_kindSig :: Maybe (LHsType GhcPs)
dd_kindSig :: forall pass. HsDataDefn pass -> Maybe (LHsKind pass)
dd_kindSig } ->
SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
tcdLName) (Maybe (HsType GhcPs) -> GhcTagKind
GtkTypeConstructor (GenLocated SrcSpanAnnA (HsType GhcPs) -> HsType GhcPs
forall l e. GenLocated l e -> e
unLoc (GenLocated SrcSpanAnnA (HsType GhcPs) -> HsType GhcPs)
-> Maybe (GenLocated SrcSpanAnnA (HsType GhcPs))
-> Maybe (HsType GhcPs)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (LHsType GhcPs)
Maybe (GenLocated SrcSpanAnnA (HsType GhcPs))
dd_kindSig))
GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: (SrcSpan -> Located RdrName -> ConDecl GhcPs -> GhcTags
mkConsTags SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
tcdLName) (ConDecl GhcPs -> GhcTags)
-> (GenLocated SrcSpanAnnA (ConDecl GhcPs) -> ConDecl GhcPs)
-> GenLocated SrcSpanAnnA (ConDecl GhcPs)
-> GhcTags
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpanAnnA (ConDecl GhcPs) -> ConDecl GhcPs
forall l e. GenLocated l e -> e
unLoc) (GenLocated SrcSpanAnnA (ConDecl GhcPs) -> GhcTags)
-> DataDefnCons (GenLocated SrcSpanAnnA (ConDecl GhcPs)) -> GhcTags
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
`concatMap` DataDefnCons (LConDecl GhcPs)
DataDefnCons (GenLocated SrcSpanAnnA (ConDecl GhcPs))
dd_cons
GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
tags
ClassDecl { LIdP GhcPs
tcdLName :: forall pass. TyClDecl pass -> LIdP pass
tcdLName :: LIdP GhcPs
tcdLName, [LSig GhcPs]
tcdSigs :: [LSig GhcPs]
tcdSigs :: forall pass. TyClDecl pass -> [LSig pass]
tcdSigs, LHsBinds GhcPs
tcdMeths :: LHsBinds GhcPs
tcdMeths :: forall pass. TyClDecl pass -> LHsBinds pass
tcdMeths, [LFamilyDecl GhcPs]
tcdATs :: [LFamilyDecl GhcPs]
tcdATs :: forall pass. TyClDecl pass -> [LFamilyDecl pass]
tcdATs, [LTyFamDefltDecl GhcPs]
tcdATDefs :: [LTyFamDefltDecl GhcPs]
tcdATDefs :: forall pass. TyClDecl pass -> [LTyFamDefltDecl pass]
tcdATDefs } ->
SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
tcdLName) GhcTagKind
GtkTypeClass
GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: (SrcSpan -> Located RdrName -> Sig GhcPs -> GhcTags
mkClsMemberTags SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
tcdLName) (Sig GhcPs -> GhcTags)
-> (GenLocated SrcSpanAnnA (Sig GhcPs) -> Sig GhcPs)
-> GenLocated SrcSpanAnnA (Sig GhcPs)
-> GhcTags
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpanAnnA (Sig GhcPs) -> Sig GhcPs
forall l e. GenLocated l e -> e
unLoc) (GenLocated SrcSpanAnnA (Sig GhcPs) -> GhcTags)
-> [GenLocated SrcSpanAnnA (Sig GhcPs)] -> GhcTags
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
`concatMap` [LSig GhcPs]
[GenLocated SrcSpanAnnA (Sig GhcPs)]
tcdSigs
GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ (GhcTags
-> GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs) -> GhcTags)
-> GhcTags
-> Bag (GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs))
-> GhcTags
forall b a. (b -> a -> b) -> b -> Bag a -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\GhcTags
tags' GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs)
hsBind -> SrcSpan -> HsBindLR GhcPs GhcPs -> GhcTags
mkHsBindLRTags SrcSpan
decLoc (GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs)
-> HsBindLR GhcPs GhcPs
forall l e. GenLocated l e -> e
unLoc GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs)
hsBind) GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
tags')
[]
LHsBinds GhcPs
Bag (GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs))
tcdMeths
GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ ((\FamilyDecl GhcPs
a -> SrcSpan
-> FamilyDecl GhcPs -> Maybe (Located RdrName) -> Maybe GhcTag
mkFamilyDeclTags SrcSpan
decLoc FamilyDecl GhcPs
a (Located RdrName -> Maybe (Located RdrName)
forall a. a -> Maybe a
Just (Located RdrName -> Maybe (Located RdrName))
-> Located RdrName -> Maybe (Located RdrName)
forall a b. (a -> b) -> a -> b
$ GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
tcdLName)) (FamilyDecl GhcPs -> Maybe GhcTag)
-> (GenLocated SrcSpanAnnA (FamilyDecl GhcPs) -> FamilyDecl GhcPs)
-> GenLocated SrcSpanAnnA (FamilyDecl GhcPs)
-> Maybe GhcTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpanAnnA (FamilyDecl GhcPs) -> FamilyDecl GhcPs
forall l e. GenLocated l e -> e
unLoc) (GenLocated SrcSpanAnnA (FamilyDecl GhcPs) -> Maybe GhcTag)
-> [GenLocated SrcSpanAnnA (FamilyDecl GhcPs)] -> GhcTags
forall a b. (a -> Maybe b) -> [a] -> [b]
`mapMaybe` [LFamilyDecl GhcPs]
[GenLocated SrcSpanAnnA (FamilyDecl GhcPs)]
tcdATs
GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ (GhcTags
-> GenLocated SrcSpanAnnA (TyFamInstDecl GhcPs) -> GhcTags)
-> GhcTags
-> [GenLocated SrcSpanAnnA (TyFamInstDecl GhcPs)]
-> GhcTags
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl'
(\GhcTags
tags' (L SrcSpanAnnA
_ decl' :: TyFamInstDecl GhcPs
decl'@(TyFamInstDecl { tfid_eqn :: forall pass. TyFamInstDecl pass -> TyFamInstEqn pass
tfid_eqn = TyFamInstEqn GhcPs
tyFamDeflEqn })) ->
let decl :: Maybe (TyFamInstDecl GhcPs)
decl = TyFamInstDecl GhcPs -> Maybe (TyFamInstDecl GhcPs)
forall a. a -> Maybe a
Just TyFamInstDecl GhcPs
decl' in
case TyFamInstEqn GhcPs
tyFamDeflEqn of
FamEqn { feqn_rhs :: forall pass rhs. FamEqn pass rhs -> rhs
feqn_rhs = L SrcSpanAnnA
_ HsType GhcPs
hsType } ->
case HsType GhcPs -> Maybe (Located RdrName)
hsTypeTagName HsType GhcPs
hsType of
Just Located RdrName
a -> SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc Located RdrName
a (Maybe (TyFamInstDecl GhcPs) -> GhcTagKind
GtkTypeFamilyInstance Maybe (TyFamInstDecl GhcPs)
decl) GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: GhcTags
tags'
Maybe (Located RdrName)
Nothing -> GhcTags
tags'
)
[] [LTyFamDefltDecl GhcPs]
[GenLocated SrcSpanAnnA (TyFamInstDecl GhcPs)]
tcdATDefs
GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
tags
InstD XInstD GhcPs
_ InstDecl GhcPs
instDecl ->
case InstDecl GhcPs
instDecl of
ClsInstD { ClsInstDecl GhcPs
cid_inst :: ClsInstDecl GhcPs
cid_inst :: forall pass. InstDecl pass -> ClsInstDecl pass
cid_inst } ->
case ClsInstDecl GhcPs
cid_inst of
ClsInstDecl { LHsSigType GhcPs
cid_poly_ty :: LHsSigType GhcPs
cid_poly_ty :: forall pass. ClsInstDecl pass -> LHsSigType pass
cid_poly_ty, [LTyFamDefltDecl GhcPs]
cid_tyfam_insts :: [LTyFamDefltDecl GhcPs]
cid_tyfam_insts :: forall pass. ClsInstDecl pass -> [LTyFamInstDecl pass]
cid_tyfam_insts, [LDataFamInstDecl GhcPs]
cid_datafam_insts :: [LDataFamInstDecl GhcPs]
cid_datafam_insts :: forall pass. ClsInstDecl pass -> [LDataFamInstDecl pass]
cid_datafam_insts, LHsBinds GhcPs
cid_binds :: LHsBinds GhcPs
cid_binds :: forall pass. ClsInstDecl pass -> LHsBinds pass
cid_binds, [LSig GhcPs]
cid_sigs :: [LSig GhcPs]
cid_sigs :: forall pass. ClsInstDecl pass -> [LSig pass]
cid_sigs } ->
case LHsSigType GhcPs
cid_poly_ty of
L SrcSpanAnnA
_ HsSig { sig_body :: forall pass. HsSigType pass -> LHsType pass
sig_body = LHsType GhcPs
body } ->
case SrcSpan -> LHsType GhcPs -> Maybe GhcTag
mkLHsTypeTag SrcSpan
decLoc LHsType GhcPs
body of
Maybe GhcTag
Nothing -> (GhcTag -> GhcTag) -> GhcTags -> GhcTags
forall a b. (a -> b) -> [a] -> [b]
map (HsType GhcPs -> GhcTag -> GhcTag
fixTagKind (GenLocated SrcSpanAnnA (HsType GhcPs) -> HsType GhcPs
forall l e. GenLocated l e -> e
unLoc LHsType GhcPs
GenLocated SrcSpanAnnA (HsType GhcPs)
body)) (GhcTags
tyFamTags GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
dataFamTags GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
bindsTags GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
sigsTags) GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
tags
Just GhcTag
tag -> GhcTag
tag GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: (GhcTag -> GhcTag) -> GhcTags -> GhcTags
forall a b. (a -> b) -> [a] -> [b]
map (HsType GhcPs -> GhcTag -> GhcTag
fixTagKind (GenLocated SrcSpanAnnA (HsType GhcPs) -> HsType GhcPs
forall l e. GenLocated l e -> e
unLoc LHsType GhcPs
GenLocated SrcSpanAnnA (HsType GhcPs)
body)) (GhcTags
tyFamTags GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
dataFamTags GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
bindsTags GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
sigsTags) GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
tags
where
dataFamTags :: GhcTags
dataFamTags = (SrcSpan -> DataFamInstDecl GhcPs -> GhcTags
mkDataFamInstDeclTag SrcSpan
decLoc (DataFamInstDecl GhcPs -> GhcTags)
-> (GenLocated SrcSpanAnnA (DataFamInstDecl GhcPs)
-> DataFamInstDecl GhcPs)
-> GenLocated SrcSpanAnnA (DataFamInstDecl GhcPs)
-> GhcTags
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpanAnnA (DataFamInstDecl GhcPs)
-> DataFamInstDecl GhcPs
forall l e. GenLocated l e -> e
unLoc) (GenLocated SrcSpanAnnA (DataFamInstDecl GhcPs) -> GhcTags)
-> [GenLocated SrcSpanAnnA (DataFamInstDecl GhcPs)] -> GhcTags
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
`concatMap` [LDataFamInstDecl GhcPs]
[GenLocated SrcSpanAnnA (DataFamInstDecl GhcPs)]
cid_datafam_insts
tyFamTags :: GhcTags
tyFamTags = (SrcSpan -> TyFamInstDecl GhcPs -> Maybe GhcTag
mkTyFamInstDeclTag SrcSpan
decLoc (TyFamInstDecl GhcPs -> Maybe GhcTag)
-> (GenLocated SrcSpanAnnA (TyFamInstDecl GhcPs)
-> TyFamInstDecl GhcPs)
-> GenLocated SrcSpanAnnA (TyFamInstDecl GhcPs)
-> Maybe GhcTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpanAnnA (TyFamInstDecl GhcPs) -> TyFamInstDecl GhcPs
forall l e. GenLocated l e -> e
unLoc) (GenLocated SrcSpanAnnA (TyFamInstDecl GhcPs) -> Maybe GhcTag)
-> [GenLocated SrcSpanAnnA (TyFamInstDecl GhcPs)] -> GhcTags
forall a b. (a -> Maybe b) -> [a] -> [b]
`mapMaybe` [LTyFamDefltDecl GhcPs]
[GenLocated SrcSpanAnnA (TyFamInstDecl GhcPs)]
cid_tyfam_insts
bindsTags :: GhcTags
bindsTags = (SrcSpan -> HsBindLR GhcPs GhcPs -> GhcTags
mkHsBindLRTags SrcSpan
decLoc (HsBindLR GhcPs GhcPs -> GhcTags)
-> (GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs)
-> HsBindLR GhcPs GhcPs)
-> GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs)
-> GhcTags
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs)
-> HsBindLR GhcPs GhcPs
forall l e. GenLocated l e -> e
unLoc) (GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs) -> GhcTags)
-> Bag (GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs)) -> GhcTags
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
`concatMap` LHsBinds GhcPs
Bag (GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs))
cid_binds
sigsTags :: GhcTags
sigsTags = (SrcSpan -> Sig GhcPs -> GhcTags
mkSigTags SrcSpan
decLoc (Sig GhcPs -> GhcTags)
-> (GenLocated SrcSpanAnnA (Sig GhcPs) -> Sig GhcPs)
-> GenLocated SrcSpanAnnA (Sig GhcPs)
-> GhcTags
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpanAnnA (Sig GhcPs) -> Sig GhcPs
forall l e. GenLocated l e -> e
unLoc) (GenLocated SrcSpanAnnA (Sig GhcPs) -> GhcTags)
-> [GenLocated SrcSpanAnnA (Sig GhcPs)] -> GhcTags
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
`concatMap` [LSig GhcPs]
[GenLocated SrcSpanAnnA (Sig GhcPs)]
cid_sigs
fixTagKind :: HsType GhcPs -> GhcTag -> GhcTag
fixTagKind HsType GhcPs
body GhcTag
a = GhcTag
a { gtKind = GtkTypeClassInstanceMember body }
DataFamInstD { DataFamInstDecl GhcPs
dfid_inst :: DataFamInstDecl GhcPs
dfid_inst :: forall pass. InstDecl pass -> DataFamInstDecl pass
dfid_inst } ->
SrcSpan -> DataFamInstDecl GhcPs -> GhcTags
mkDataFamInstDeclTag SrcSpan
decLoc DataFamInstDecl GhcPs
dfid_inst GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
tags
TyFamInstD { TyFamInstDecl GhcPs
tfid_inst :: TyFamInstDecl GhcPs
tfid_inst :: forall pass. InstDecl pass -> TyFamInstDecl pass
tfid_inst } ->
case SrcSpan -> TyFamInstDecl GhcPs -> Maybe GhcTag
mkTyFamInstDeclTag SrcSpan
decLoc TyFamInstDecl GhcPs
tfid_inst of
Maybe GhcTag
Nothing -> GhcTags
tags
Just GhcTag
tag -> GhcTag
tag GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: GhcTags
tags
DerivD {} -> GhcTags
tags
ValD XValD GhcPs
_ HsBindLR GhcPs GhcPs
hsBind -> SrcSpan -> HsBindLR GhcPs GhcPs -> GhcTags
mkHsBindLRTags SrcSpan
decLoc HsBindLR GhcPs GhcPs
hsBind GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
tags
SigD XSigD GhcPs
_ Sig GhcPs
sig -> SrcSpan -> Sig GhcPs -> GhcTags
mkSigTags SrcSpan
decLoc Sig GhcPs
sig GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ GhcTags
tags
KindSigD XKindSigD GhcPs
_ StandaloneKindSig GhcPs
stdKindSig ->
case StandaloneKindSig GhcPs
stdKindSig of
StandaloneKindSig XStandaloneKindSig GhcPs
_ LIdP GhcPs
ksName LHsSigType GhcPs
sigType ->
SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
ksName) (LHsSigType GhcPs -> GhcTagKind
GtkTypeKindSignature LHsSigType GhcPs
sigType) GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: GhcTags
tags
DefD {} -> GhcTags
tags
ForD XForD GhcPs
_ ForeignDecl GhcPs
foreignDecl ->
case ForeignDecl GhcPs
foreignDecl of
#if MIN_VERSION_GHC(9,6)
ForeignImport { fd_fi :: forall pass. ForeignDecl pass -> ForeignImport pass
fd_fi = CImport XCImport GhcPs
_ XRec GhcPs CCallConv
_ XRec GhcPs Safety
_mheader Maybe Header
_ CLabel {} } -> GhcTags
tags
ForeignImport { fd_fi :: forall pass. ForeignDecl pass -> ForeignImport pass
fd_fi = CImport XCImport GhcPs
_ XRec GhcPs CCallConv
_ XRec GhcPs Safety
_mheader Maybe Header
_ CImportSpec
CWrapper } -> GhcTags
tags
ForeignImport { fd_fi :: forall pass. ForeignDecl pass -> ForeignImport pass
fd_fi = CImport XCImport GhcPs
_ XRec GhcPs CCallConv
_ XRec GhcPs Safety
_mheader Maybe Header
_ (CFunction CCallTarget
DynamicTarget) } -> GhcTags
tags
ForeignImport { fd_fi :: forall pass. ForeignDecl pass -> ForeignImport pass
fd_fi = CImport XCImport GhcPs
_ XRec GhcPs CCallConv
_ XRec GhcPs Safety
_mheader Maybe Header
_ (CFunction ((StaticTarget SourceText
sourceText FastString
_ Maybe Unit
_ Bool
_))), LIdP GhcPs
fd_name :: LIdP GhcPs
fd_name :: forall pass. ForeignDecl pass -> LIdP pass
fd_name } ->
#else
ForeignImport { fd_name, fd_fi = CImport _ _ _mheader _ (L _ sourceText) } ->
#endif
case SourceText
sourceText of
SourceText
NoSourceText -> GhcTag
tag
#if MIN_VERSION_GHC(9,8)
SourceText s -> tag { gtFFI = Just (FastString.unpackFS s) }
#else
SourceText String
s -> GhcTag
tag { gtFFI = Just s }
#endif
GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: GhcTags
tags
where
tag :: GhcTag
tag = SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
fd_name) GhcTagKind
GtkForeignImport
ForeignExport { LIdP GhcPs
fd_name :: forall pass. ForeignDecl pass -> LIdP pass
fd_name :: LIdP GhcPs
fd_name } ->
SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
fd_name) GhcTagKind
GtkForeignExport
GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: GhcTags
tags
WarningD {} -> GhcTags
tags
AnnD {} -> GhcTags
tags
RuleD {} -> GhcTags
tags
SpliceD {} -> GhcTags
tags
DocD {} -> GhcTags
tags
RoleAnnotD {} -> GhcTags
tags
mkConsTags :: SrcSpan
-> Located RdrName
-> ConDecl GhcPs
-> GhcTags
mkConsTags :: SrcSpan -> Located RdrName -> ConDecl GhcPs -> GhcTags
mkConsTags SrcSpan
decLoc Located RdrName
tyName con :: ConDecl GhcPs
con@ConDeclGADT { NonEmpty (LIdP GhcPs)
con_names :: NonEmpty (LIdP GhcPs)
con_names :: forall pass. ConDecl pass -> NonEmpty (LIdP pass)
con_names, con_g_args :: forall pass. ConDecl pass -> HsConDeclGADTDetails pass
con_g_args = HsConDeclGADTDetails GhcPs
con_args } =
( (\Located RdrName
n -> SrcSpan
-> Located RdrName -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTagForMember SrcSpan
decLoc Located RdrName
n Located RdrName
tyName (ConDecl GhcPs -> GhcTagKind
GtkGADTConstructor ConDecl GhcPs
con))
(Located RdrName -> GhcTag)
-> (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> Located RdrName)
-> GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> GhcTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn )
(GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> GhcTag)
-> [GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName] -> GhcTags
forall a b. (a -> b) -> [a] -> [b]
`map` [GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName]
con_names'
GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ SrcSpan -> Located RdrName -> HsConDeclGADTDetails GhcPs -> GhcTags
mkHsConDeclGADTDetails SrcSpan
decLoc Located RdrName
tyName HsConDeclGADTDetails GhcPs
con_args
where
#if MIN_VERSION_GHC(9,6)
con_names' :: [GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName]
con_names' = NonEmpty (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName)
-> [GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName]
forall a. NonEmpty a -> [a]
NonEmpty.toList NonEmpty (LIdP GhcPs)
NonEmpty (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName)
con_names
#else
con_names' = con_names
#endif
mkConsTags SrcSpan
decLoc Located RdrName
tyName con :: ConDecl GhcPs
con@ConDeclH98 { LIdP GhcPs
con_name :: LIdP GhcPs
con_name :: forall pass. ConDecl pass -> LIdP pass
con_name, HsConDeclH98Details GhcPs
con_args :: HsConDeclH98Details GhcPs
con_args :: forall pass. ConDecl pass -> HsConDeclH98Details pass
con_args } =
SrcSpan
-> Located RdrName -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTagForMember SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
con_name) Located RdrName
tyName
(ConDecl GhcPs -> GhcTagKind
GtkDataConstructor ConDecl GhcPs
con)
GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: SrcSpan -> Located RdrName -> HsConDeclH98Details GhcPs -> GhcTags
mkHsConDeclH98Details SrcSpan
decLoc Located RdrName
tyName HsConDeclH98Details GhcPs
con_args
mkHsLocalBindsTags :: SrcSpan -> HsLocalBinds GhcPs -> [GhcTag]
mkHsLocalBindsTags :: SrcSpan -> HsLocalBinds GhcPs -> GhcTags
mkHsLocalBindsTags SrcSpan
decLoc (HsValBinds XHsValBinds GhcPs GhcPs
_ (ValBinds XValBinds GhcPs GhcPs
_ LHsBinds GhcPs
hsBindsLR [LSig GhcPs]
sigs)) =
(GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs) -> GhcTags)
-> [GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs)] -> GhcTags
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (SrcSpan -> HsBindLR GhcPs GhcPs -> GhcTags
mkHsBindLRTags SrcSpan
decLoc (HsBindLR GhcPs GhcPs -> GhcTags)
-> (GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs)
-> HsBindLR GhcPs GhcPs)
-> GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs)
-> GhcTags
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs)
-> HsBindLR GhcPs GhcPs
forall l e. GenLocated l e -> e
unLoc) (Bag (GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs))
-> [GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs)]
forall a. Bag a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList LHsBinds GhcPs
Bag (GenLocated SrcSpanAnnA (HsBindLR GhcPs GhcPs))
hsBindsLR)
GhcTags -> GhcTags -> GhcTags
forall a. [a] -> [a] -> [a]
++ (GenLocated SrcSpanAnnA (Sig GhcPs) -> GhcTags)
-> [GenLocated SrcSpanAnnA (Sig GhcPs)] -> GhcTags
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (SrcSpan -> Sig GhcPs -> GhcTags
mkSigTags SrcSpan
decLoc (Sig GhcPs -> GhcTags)
-> (GenLocated SrcSpanAnnA (Sig GhcPs) -> Sig GhcPs)
-> GenLocated SrcSpanAnnA (Sig GhcPs)
-> GhcTags
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpanAnnA (Sig GhcPs) -> Sig GhcPs
forall l e. GenLocated l e -> e
unLoc) [LSig GhcPs]
[GenLocated SrcSpanAnnA (Sig GhcPs)]
sigs
mkHsLocalBindsTags SrcSpan
_ HsLocalBinds GhcPs
_ = []
mkHsConDeclH98Details :: SrcSpan
-> Located RdrName
-> HsConDeclH98Details GhcPs
-> GhcTags
mkHsConDeclH98Details :: SrcSpan -> Located RdrName -> HsConDeclH98Details GhcPs -> GhcTags
mkHsConDeclH98Details SrcSpan
decLoc Located RdrName
tyName (RecCon (L SrcSpanAnnL
_ [GenLocated SrcSpanAnnA (ConDeclField GhcPs)]
fields)) =
(GhcTags -> GenLocated SrcSpanAnnA (ConDeclField GhcPs) -> GhcTags)
-> GhcTags
-> [GenLocated SrcSpanAnnA (ConDeclField GhcPs)]
-> GhcTags
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' GhcTags -> LConDeclField GhcPs -> GhcTags
GhcTags -> GenLocated SrcSpanAnnA (ConDeclField GhcPs) -> GhcTags
f [] [GenLocated SrcSpanAnnA (ConDeclField GhcPs)]
fields
where
f :: GhcTags -> LConDeclField GhcPs -> GhcTags
f :: GhcTags -> LConDeclField GhcPs -> GhcTags
f GhcTags
ts (L SrcSpanAnnA
_ ConDeclField { [LFieldOcc GhcPs]
cd_fld_names :: [LFieldOcc GhcPs]
cd_fld_names :: forall pass. ConDeclField pass -> [LFieldOcc pass]
cd_fld_names }) = (GhcTags
-> GenLocated (SrcAnn NoEpAnns) (FieldOcc GhcPs) -> GhcTags)
-> GhcTags
-> [GenLocated (SrcAnn NoEpAnns) (FieldOcc GhcPs)]
-> GhcTags
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' GhcTags -> LFieldOcc GhcPs -> GhcTags
GhcTags -> GenLocated (SrcAnn NoEpAnns) (FieldOcc GhcPs) -> GhcTags
g GhcTags
ts [LFieldOcc GhcPs]
[GenLocated (SrcAnn NoEpAnns) (FieldOcc GhcPs)]
cd_fld_names
g :: GhcTags -> LFieldOcc GhcPs -> GhcTags
g :: GhcTags -> LFieldOcc GhcPs -> GhcTags
g GhcTags
ts (L SrcAnn NoEpAnns
_ fo :: FieldOcc GhcPs
fo@FieldOcc {}) =
SrcSpan
-> Located RdrName -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTagForMember SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> Located RdrName)
-> GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> Located RdrName
forall a b. (a -> b) -> a -> b
$ FieldOcc GhcPs -> XRec GhcPs RdrName
forall pass. FieldOcc pass -> XRec pass RdrName
foLabel FieldOcc GhcPs
fo) Located RdrName
tyName GhcTagKind
GtkRecordField
GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: GhcTags
ts
mkHsConDeclH98Details SrcSpan
_ Located RdrName
_ HsConDeclH98Details GhcPs
_ = []
mkHsConDeclGADTDetails :: SrcSpan
-> Located RdrName
-> HsConDeclGADTDetails GhcPs
-> GhcTags
mkHsConDeclGADTDetails :: SrcSpan -> Located RdrName -> HsConDeclGADTDetails GhcPs -> GhcTags
mkHsConDeclGADTDetails SrcSpan
decLoc Located RdrName
tyName (RecConGADT (L SrcSpanAnnL
_ [GenLocated SrcSpanAnnA (ConDeclField GhcPs)]
fields) LHsUniToken "->" "\8594" GhcPs
_) =
(GhcTags -> GenLocated SrcSpanAnnA (ConDeclField GhcPs) -> GhcTags)
-> GhcTags
-> [GenLocated SrcSpanAnnA (ConDeclField GhcPs)]
-> GhcTags
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' GhcTags -> LConDeclField GhcPs -> GhcTags
GhcTags -> GenLocated SrcSpanAnnA (ConDeclField GhcPs) -> GhcTags
f [] [GenLocated SrcSpanAnnA (ConDeclField GhcPs)]
fields
where
f :: GhcTags -> LConDeclField GhcPs -> GhcTags
f :: GhcTags -> LConDeclField GhcPs -> GhcTags
f GhcTags
ts (L SrcSpanAnnA
_ ConDeclField { [LFieldOcc GhcPs]
cd_fld_names :: forall pass. ConDeclField pass -> [LFieldOcc pass]
cd_fld_names :: [LFieldOcc GhcPs]
cd_fld_names }) = (GhcTags
-> GenLocated (SrcAnn NoEpAnns) (FieldOcc GhcPs) -> GhcTags)
-> GhcTags
-> [GenLocated (SrcAnn NoEpAnns) (FieldOcc GhcPs)]
-> GhcTags
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' GhcTags -> LFieldOcc GhcPs -> GhcTags
GhcTags -> GenLocated (SrcAnn NoEpAnns) (FieldOcc GhcPs) -> GhcTags
g GhcTags
ts [LFieldOcc GhcPs]
[GenLocated (SrcAnn NoEpAnns) (FieldOcc GhcPs)]
cd_fld_names
g :: GhcTags -> LFieldOcc GhcPs -> GhcTags
g :: GhcTags -> LFieldOcc GhcPs -> GhcTags
g GhcTags
ts (L SrcAnn NoEpAnns
_ FieldOcc GhcPs
fo) =
SrcSpan
-> Located RdrName -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTagForMember SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> Located RdrName)
-> GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> Located RdrName
forall a b. (a -> b) -> a -> b
$ FieldOcc GhcPs -> XRec GhcPs RdrName
forall pass. FieldOcc pass -> XRec pass RdrName
foLabel FieldOcc GhcPs
fo) Located RdrName
tyName GhcTagKind
GtkRecordField
GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: GhcTags
ts
mkHsConDeclGADTDetails SrcSpan
_ Located RdrName
_ HsConDeclGADTDetails GhcPs
_ = []
mkHsBindLRTags :: SrcSpan
-> HsBindLR GhcPs GhcPs
-> GhcTags
mkHsBindLRTags :: SrcSpan -> HsBindLR GhcPs GhcPs -> GhcTags
mkHsBindLRTags SrcSpan
decLoc HsBindLR GhcPs GhcPs
hsBind =
case HsBindLR GhcPs GhcPs
hsBind of
FunBind { LIdP GhcPs
fun_id :: LIdP GhcPs
fun_id :: forall idL idR. HsBindLR idL idR -> LIdP idL
fun_id, MatchGroup GhcPs (LHsExpr GhcPs)
fun_matches :: MatchGroup GhcPs (LHsExpr GhcPs)
fun_matches :: forall idL idR. HsBindLR idL idR -> MatchGroup idR (LHsExpr idR)
fun_matches } ->
let binds :: [HsLocalBinds GhcPs]
binds = (GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))
-> HsLocalBinds GhcPs)
-> [GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))]
-> [HsLocalBinds GhcPs]
forall a b. (a -> b) -> [a] -> [b]
map (GRHSs GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs))
-> HsLocalBinds GhcPs
forall p body. GRHSs p body -> HsLocalBinds p
grhssLocalBinds (GRHSs GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs))
-> HsLocalBinds GhcPs)
-> (GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))
-> GRHSs GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))
-> GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))
-> HsLocalBinds GhcPs
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs))
-> GRHSs GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs))
forall p body. Match p body -> GRHSs p body
m_grhss (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs))
-> GRHSs GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))
-> (GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))
-> Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))
-> GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))
-> GRHSs GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))
-> Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs))
forall l e. GenLocated l e -> e
unLoc)
([GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))]
-> [HsLocalBinds GhcPs])
-> (MatchGroup GhcPs (LHsExpr GhcPs)
-> [GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))])
-> MatchGroup GhcPs (LHsExpr GhcPs)
-> [HsLocalBinds GhcPs]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated
SrcSpanAnnL
[GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))]
-> [GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))]
forall l e. GenLocated l e -> e
unLoc
(GenLocated
SrcSpanAnnL
[GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))]
-> [GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))])
-> (MatchGroup GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs))
-> GenLocated
SrcSpanAnnL
[GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))])
-> MatchGroup GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs))
-> [GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatchGroup GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs))
-> XRec
GhcPs [LMatch GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs))]
MatchGroup GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs))
-> GenLocated
SrcSpanAnnL
[GenLocated
SrcSpanAnnA (Match GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))]
forall p body. MatchGroup p body -> XRec p [LMatch p body]
mg_alts
(MatchGroup GhcPs (LHsExpr GhcPs) -> [HsLocalBinds GhcPs])
-> MatchGroup GhcPs (LHsExpr GhcPs) -> [HsLocalBinds GhcPs]
forall a b. (a -> b) -> a -> b
$ MatchGroup GhcPs (LHsExpr GhcPs)
fun_matches
in SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
fun_id) GhcTagKind
GtkFunction
GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: (HsLocalBinds GhcPs -> GhcTags) -> [HsLocalBinds GhcPs] -> GhcTags
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap
(SrcSpan -> HsLocalBinds GhcPs -> GhcTags
mkHsLocalBindsTags SrcSpan
decLoc)
[HsLocalBinds GhcPs]
binds
PatBind {} -> []
VarBind { IdP GhcPs
var_id :: IdP GhcPs
var_id :: forall idL idR. HsBindLR idL idR -> IdP idL
var_id, var_rhs :: forall idL idR. HsBindLR idL idR -> LHsExpr idR
var_rhs = L SrcSpanAnnA
srcSpan HsExpr GhcPs
_ } ->
[SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc (GenLocated SrcSpanAnnA RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn (GenLocated SrcSpanAnnA RdrName -> Located RdrName)
-> GenLocated SrcSpanAnnA RdrName -> Located RdrName
forall a b. (a -> b) -> a -> b
$ SrcSpanAnnA -> RdrName -> GenLocated SrcSpanAnnA RdrName
forall l e. l -> e -> GenLocated l e
L SrcSpanAnnA
srcSpan IdP GhcPs
RdrName
var_id) GhcTagKind
GtkTerm]
PatSynBind XPatSynBind GhcPs GhcPs
_ PSB { LIdP GhcPs
psb_id :: LIdP GhcPs
psb_id :: forall idL idR. PatSynBind idL idR -> LIdP idL
psb_id } -> [SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
psb_id) GhcTagKind
GtkPatternSynonym]
mkClsMemberTags :: SrcSpan -> Located RdrName -> Sig GhcPs -> GhcTags
mkClsMemberTags :: SrcSpan -> Located RdrName -> Sig GhcPs -> GhcTags
mkClsMemberTags SrcSpan
decLoc Located RdrName
clsName (TypeSig XTypeSig GhcPs
_ [LIdP GhcPs]
lhs LHsSigWcType GhcPs
hsSigWcType) =
( (\Located RdrName
n -> SrcSpan
-> Located RdrName -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTagForMember SrcSpan
decLoc Located RdrName
n Located RdrName
clsName (LHsSigWcType GhcPs -> GhcTagKind
GtkTypeSignature LHsSigWcType GhcPs
hsSigWcType))
(Located RdrName -> GhcTag)
-> (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> Located RdrName)
-> GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> GhcTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn )
(GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> GhcTag)
-> [GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName] -> GhcTags
forall a b. (a -> b) -> [a] -> [b]
`map` [LIdP GhcPs]
[GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName]
lhs
mkClsMemberTags SrcSpan
decLoc Located RdrName
clsName (PatSynSig XPatSynSig GhcPs
_ [LIdP GhcPs]
lhs LHsSigType GhcPs
_) =
( (\Located RdrName
n -> SrcSpan
-> Located RdrName -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTagForMember SrcSpan
decLoc Located RdrName
n Located RdrName
clsName GhcTagKind
GtkPatternSynonym)
(Located RdrName -> GhcTag)
-> (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> Located RdrName)
-> GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> GhcTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn )
(GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> GhcTag)
-> [GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName] -> GhcTags
forall a b. (a -> b) -> [a] -> [b]
`map` [LIdP GhcPs]
[GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName]
lhs
mkClsMemberTags SrcSpan
decLoc Located RdrName
clsName (ClassOpSig XClassOpSig GhcPs
_ Bool
_ [LIdP GhcPs]
lhs (L SrcSpanAnnA
_ HsSigType GhcPs
hsType)) =
( (\Located RdrName
n -> SrcSpan
-> Located RdrName -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTagForMember SrcSpan
decLoc Located RdrName
n Located RdrName
clsName
(HsType GhcPs -> GhcTagKind
GtkTypeClassMember (HsType GhcPs -> GhcTagKind) -> HsType GhcPs -> GhcTagKind
forall a b. (a -> b) -> a -> b
$ HsSigType GhcPs -> HsType GhcPs
hsSigTypeToHsType HsSigType GhcPs
hsType))
(Located RdrName -> GhcTag)
-> (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> Located RdrName)
-> GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> GhcTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn )
(GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> GhcTag)
-> [GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName] -> GhcTags
forall a b. (a -> b) -> [a] -> [b]
`map` [LIdP GhcPs]
[GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName]
lhs
mkClsMemberTags SrcSpan
_ Located RdrName
_ Sig GhcPs
_ = []
mkSigTags :: SrcSpan -> Sig GhcPs -> GhcTags
mkSigTags :: SrcSpan -> Sig GhcPs -> GhcTags
mkSigTags SrcSpan
decLoc (TypeSig XTypeSig GhcPs
_ [LIdP GhcPs]
lhs LHsSigWcType GhcPs
hsSigWcType)
= ( (Located RdrName -> GhcTagKind -> GhcTag)
-> GhcTagKind -> Located RdrName -> GhcTag
forall a b c. (a -> b -> c) -> b -> a -> c
flip (SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc)
(LHsSigWcType GhcPs -> GhcTagKind
GtkTypeSignature LHsSigWcType GhcPs
hsSigWcType)
(Located RdrName -> GhcTag)
-> (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> Located RdrName)
-> GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> GhcTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn )
(GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> GhcTag)
-> [GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName] -> GhcTags
forall a b. (a -> b) -> [a] -> [b]
`map` [LIdP GhcPs]
[GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName]
lhs
mkSigTags SrcSpan
decLoc (PatSynSig XPatSynSig GhcPs
_ [LIdP GhcPs]
lhs LHsSigType GhcPs
_)
= ( (Located RdrName -> GhcTagKind -> GhcTag)
-> GhcTagKind -> Located RdrName -> GhcTag
forall a b c. (a -> b -> c) -> b -> a -> c
flip (SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc) GhcTagKind
GtkPatternSynonym
(Located RdrName -> GhcTag)
-> (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> Located RdrName)
-> GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> GhcTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn )
(GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> GhcTag)
-> [GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName] -> GhcTags
forall a b. (a -> b) -> [a] -> [b]
`map` [LIdP GhcPs]
[GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName]
lhs
mkSigTags SrcSpan
decLoc (ClassOpSig XClassOpSig GhcPs
_ Bool
_ [LIdP GhcPs]
lhs (L SrcSpanAnnA
_ HsSigType GhcPs
hsType))
= ( (Located RdrName -> GhcTagKind -> GhcTag)
-> GhcTagKind -> Located RdrName -> GhcTag
forall a b c. (a -> b -> c) -> b -> a -> c
flip (SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc)
( HsType GhcPs -> GhcTagKind
GtkTypeClassMember
(HsType GhcPs -> GhcTagKind) -> HsType GhcPs -> GhcTagKind
forall a b. (a -> b) -> a -> b
$ HsSigType GhcPs -> HsType GhcPs
hsSigTypeToHsType HsSigType GhcPs
hsType )
(Located RdrName -> GhcTag)
-> (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> Located RdrName)
-> GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
-> GhcTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn
)
(GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> GhcTag)
-> [GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName] -> GhcTags
forall a b. (a -> b) -> [a] -> [b]
`map` [LIdP GhcPs]
[GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName]
lhs
#if !MIN_VERSION_GHC(9,6)
mkSigTags _ IdSig {} = []
#endif
mkSigTags SrcSpan
_ FixSig {} = []
mkSigTags SrcSpan
_ InlineSig {} = []
mkSigTags SrcSpan
_ SpecSig {} = []
mkSigTags SrcSpan
_ SpecInstSig {} = []
mkSigTags SrcSpan
_ MinimalSig {} = []
mkSigTags SrcSpan
_ SCCFunSig {} = []
mkSigTags SrcSpan
_ CompleteMatchSig {} = []
mkFamilyDeclTags :: SrcSpan
-> FamilyDecl GhcPs
-> Maybe (Located RdrName)
-> Maybe GhcTag
mkFamilyDeclTags :: SrcSpan
-> FamilyDecl GhcPs -> Maybe (Located RdrName) -> Maybe GhcTag
mkFamilyDeclTags SrcSpan
decLoc FamilyDecl { LIdP GhcPs
fdLName :: LIdP GhcPs
fdLName :: forall pass. FamilyDecl pass -> LIdP pass
fdLName, FamilyInfo GhcPs
fdInfo :: FamilyInfo GhcPs
fdInfo :: forall pass. FamilyDecl pass -> FamilyInfo pass
fdInfo, LHsQTyVars GhcPs
fdTyVars :: LHsQTyVars GhcPs
fdTyVars :: forall pass. FamilyDecl pass -> LHsQTyVars pass
fdTyVars, fdResultSig :: forall pass. FamilyDecl pass -> LFamilyResultSig pass
fdResultSig = L SrcAnn NoEpAnns
_ FamilyResultSig GhcPs
familyResultSig } Maybe (Located RdrName)
assocClsName =
case Maybe (Located RdrName)
assocClsName of
Maybe (Located RdrName)
Nothing -> GhcTag -> Maybe GhcTag
forall a. a -> Maybe a
Just (GhcTag -> Maybe GhcTag) -> GhcTag -> Maybe GhcTag
forall a b. (a -> b) -> a -> b
$ SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
fdLName) GhcTagKind
tk
Just Located RdrName
clsName -> GhcTag -> Maybe GhcTag
forall a. a -> Maybe a
Just (GhcTag -> Maybe GhcTag) -> GhcTag -> Maybe GhcTag
forall a b. (a -> b) -> a -> b
$ SrcSpan
-> Located RdrName -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTagForMember SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
fdLName) Located RdrName
clsName GhcTagKind
tk
where
mb_fdvars :: Maybe [GhcPsHsTyVarBndr]
mb_fdvars :: Maybe [GhcPsHsTyVarBndr]
mb_fdvars = case LHsQTyVars GhcPs
fdTyVars of
#if MIN_VERSION_GHC(9,8)
HsQTvs {} -> Nothing
#else
HsQTvs { [LHsTyVarBndr () GhcPs]
hsq_explicit :: [LHsTyVarBndr () GhcPs]
hsq_explicit :: forall pass. LHsQTyVars pass -> [LHsTyVarBndr () pass]
hsq_explicit } -> [GhcPsHsTyVarBndr] -> Maybe [GhcPsHsTyVarBndr]
forall a. a -> Maybe a
Just ([GhcPsHsTyVarBndr] -> Maybe [GhcPsHsTyVarBndr])
-> [GhcPsHsTyVarBndr] -> Maybe [GhcPsHsTyVarBndr]
forall a b. (a -> b) -> a -> b
$ GenLocated SrcSpanAnnA GhcPsHsTyVarBndr -> GhcPsHsTyVarBndr
forall l e. GenLocated l e -> e
unLoc (GenLocated SrcSpanAnnA GhcPsHsTyVarBndr -> GhcPsHsTyVarBndr)
-> [GenLocated SrcSpanAnnA GhcPsHsTyVarBndr] -> [GhcPsHsTyVarBndr]
forall a b. (a -> b) -> [a] -> [b]
`map` [LHsTyVarBndr () GhcPs]
[GenLocated SrcSpanAnnA GhcPsHsTyVarBndr]
hsq_explicit
#endif
mb_resultsig :: Maybe (Either (HsKind GhcPs) GhcPsHsTyVarBndr)
mb_resultsig :: Maybe (Either (HsType GhcPs) GhcPsHsTyVarBndr)
mb_resultsig = FamilyResultSig GhcPs
-> Maybe (Either (HsType GhcPs) GhcPsHsTyVarBndr)
famResultKindSignature FamilyResultSig GhcPs
familyResultSig
mb_typesig :: Maybe ([GhcPsHsTyVarBndr], Either (HsKind GhcPs) GhcPsHsTyVarBndr)
mb_typesig :: Maybe ([GhcPsHsTyVarBndr], Either (HsType GhcPs) GhcPsHsTyVarBndr)
mb_typesig = (,) ([GhcPsHsTyVarBndr]
-> Either (HsType GhcPs) GhcPsHsTyVarBndr
-> ([GhcPsHsTyVarBndr], Either (HsType GhcPs) GhcPsHsTyVarBndr))
-> Maybe [GhcPsHsTyVarBndr]
-> Maybe
(Either (HsType GhcPs) GhcPsHsTyVarBndr
-> ([GhcPsHsTyVarBndr], Either (HsType GhcPs) GhcPsHsTyVarBndr))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [GhcPsHsTyVarBndr]
mb_fdvars Maybe
(Either (HsType GhcPs) GhcPsHsTyVarBndr
-> ([GhcPsHsTyVarBndr], Either (HsType GhcPs) GhcPsHsTyVarBndr))
-> Maybe (Either (HsType GhcPs) GhcPsHsTyVarBndr)
-> Maybe
([GhcPsHsTyVarBndr], Either (HsType GhcPs) GhcPsHsTyVarBndr)
forall a b. Maybe (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Either (HsType GhcPs) GhcPsHsTyVarBndr)
mb_resultsig
tk :: GhcTagKind
tk = case FamilyInfo GhcPs
fdInfo of
FamilyInfo GhcPs
DataFamily -> Maybe ([GhcPsHsTyVarBndr], Either (HsType GhcPs) GhcPsHsTyVarBndr)
-> GhcTagKind
GtkDataTypeFamily Maybe ([GhcPsHsTyVarBndr], Either (HsType GhcPs) GhcPsHsTyVarBndr)
mb_typesig
FamilyInfo GhcPs
OpenTypeFamily -> Maybe ([GhcPsHsTyVarBndr], Either (HsType GhcPs) GhcPsHsTyVarBndr)
-> GhcTagKind
GtkTypeFamily Maybe ([GhcPsHsTyVarBndr], Either (HsType GhcPs) GhcPsHsTyVarBndr)
mb_typesig
ClosedTypeFamily {} -> Maybe ([GhcPsHsTyVarBndr], Either (HsType GhcPs) GhcPsHsTyVarBndr)
-> GhcTagKind
GtkTypeFamily Maybe ([GhcPsHsTyVarBndr], Either (HsType GhcPs) GhcPsHsTyVarBndr)
mb_typesig
mkLHsTypeTag :: SrcSpan
-> LHsType GhcPs
-> Maybe GhcTag
mkLHsTypeTag :: SrcSpan -> LHsType GhcPs -> Maybe GhcTag
mkLHsTypeTag SrcSpan
decLoc (L SrcSpanAnnA
_ HsType GhcPs
hsType) =
(\Located RdrName
a -> SrcSpan -> GhcTag -> GhcTag
fixLoc SrcSpan
decLoc (GhcTag -> GhcTag) -> GhcTag -> GhcTag
forall a b. (a -> b) -> a -> b
$ Located RdrName -> GhcTagKind -> Bool -> GhcTag
mkGhcTag Located RdrName
a (HsType GhcPs -> GhcTagKind
GtkTypeClassInstance HsType GhcPs
hsType) Bool
True)
(Located RdrName -> GhcTag)
-> Maybe (Located RdrName) -> Maybe GhcTag
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HsType GhcPs -> Maybe (Located RdrName)
hsTypeTagName HsType GhcPs
hsType
hsTypeTagName :: HsType GhcPs -> Maybe (Located RdrName)
hsTypeTagName :: HsType GhcPs -> Maybe (Located RdrName)
hsTypeTagName HsType GhcPs
hsType =
case HsType GhcPs
hsType of
HsForAllTy {LHsType GhcPs
hst_body :: LHsType GhcPs
hst_body :: forall pass. HsType pass -> LHsType pass
hst_body} -> HsType GhcPs -> Maybe (Located RdrName)
hsTypeTagName (GenLocated SrcSpanAnnA (HsType GhcPs) -> HsType GhcPs
forall l e. GenLocated l e -> e
unLoc LHsType GhcPs
GenLocated SrcSpanAnnA (HsType GhcPs)
hst_body)
HsQualTy {LHsType GhcPs
hst_body :: forall pass. HsType pass -> LHsType pass
hst_body :: LHsType GhcPs
hst_body} -> HsType GhcPs -> Maybe (Located RdrName)
hsTypeTagName (GenLocated SrcSpanAnnA (HsType GhcPs) -> HsType GhcPs
forall l e. GenLocated l e -> e
unLoc LHsType GhcPs
GenLocated SrcSpanAnnA (HsType GhcPs)
hst_body)
HsTyVar XTyVar GhcPs
_ PromotionFlag
_ LIdP GhcPs
a -> Located RdrName -> Maybe (Located RdrName)
forall a. a -> Maybe a
Just (Located RdrName -> Maybe (Located RdrName))
-> Located RdrName -> Maybe (Located RdrName)
forall a b. (a -> b) -> a -> b
$ GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
a
HsAppTy XAppTy GhcPs
_ LHsType GhcPs
a LHsType GhcPs
_ -> HsType GhcPs -> Maybe (Located RdrName)
hsTypeTagName (GenLocated SrcSpanAnnA (HsType GhcPs) -> HsType GhcPs
forall l e. GenLocated l e -> e
unLoc LHsType GhcPs
GenLocated SrcSpanAnnA (HsType GhcPs)
a)
HsOpTy XOpTy GhcPs
_ PromotionFlag
_ LHsType GhcPs
_ LIdP GhcPs
a LHsType GhcPs
_ -> Located RdrName -> Maybe (Located RdrName)
forall a. a -> Maybe a
Just (Located RdrName -> Maybe (Located RdrName))
-> Located RdrName -> Maybe (Located RdrName)
forall a b. (a -> b) -> a -> b
$ GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
a
HsKindSig XKindSig GhcPs
_ LHsType GhcPs
a LHsType GhcPs
_ -> HsType GhcPs -> Maybe (Located RdrName)
hsTypeTagName (GenLocated SrcSpanAnnA (HsType GhcPs) -> HsType GhcPs
forall l e. GenLocated l e -> e
unLoc LHsType GhcPs
GenLocated SrcSpanAnnA (HsType GhcPs)
a)
HsType GhcPs
_ -> Maybe (Located RdrName)
forall a. Maybe a
Nothing
mkDataFamInstDeclTag :: SrcSpan -> DataFamInstDecl GhcPs -> GhcTags
mkDataFamInstDeclTag :: SrcSpan -> DataFamInstDecl GhcPs -> GhcTags
mkDataFamInstDeclTag SrcSpan
decLoc DataFamInstDecl { FamEqn GhcPs (HsDataDefn GhcPs)
dfid_eqn :: FamEqn GhcPs (HsDataDefn GhcPs)
dfid_eqn :: forall pass. DataFamInstDecl pass -> FamEqn pass (HsDataDefn pass)
dfid_eqn } =
case FamEqn GhcPs (HsDataDefn GhcPs)
dfid_eqn of
FamEqn { LIdP GhcPs
feqn_tycon :: LIdP GhcPs
feqn_tycon :: forall pass rhs. FamEqn pass rhs -> LIdP pass
feqn_tycon, HsDataDefn GhcPs
feqn_rhs :: forall pass rhs. FamEqn pass rhs -> rhs
feqn_rhs :: HsDataDefn GhcPs
feqn_rhs } ->
case HsDataDefn GhcPs
feqn_rhs of
HsDataDefn { DataDefnCons (LConDecl GhcPs)
dd_cons :: forall pass. HsDataDefn pass -> DataDefnCons (LConDecl pass)
dd_cons :: DataDefnCons (LConDecl GhcPs)
dd_cons, Maybe (LHsType GhcPs)
dd_kindSig :: forall pass. HsDataDefn pass -> Maybe (LHsKind pass)
dd_kindSig :: Maybe (LHsType GhcPs)
dd_kindSig } ->
SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
feqn_tycon)
(Maybe (HsType GhcPs) -> GhcTagKind
GtkDataTypeFamilyInstance
(GenLocated SrcSpanAnnA (HsType GhcPs) -> HsType GhcPs
forall l e. GenLocated l e -> e
unLoc (GenLocated SrcSpanAnnA (HsType GhcPs) -> HsType GhcPs)
-> Maybe (GenLocated SrcSpanAnnA (HsType GhcPs))
-> Maybe (HsType GhcPs)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (LHsType GhcPs)
Maybe (GenLocated SrcSpanAnnA (HsType GhcPs))
dd_kindSig))
GhcTag -> GhcTags -> GhcTags
forall a. a -> [a] -> [a]
: (SrcSpan -> Located RdrName -> ConDecl GhcPs -> GhcTags
mkConsTags SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
feqn_tycon) (ConDecl GhcPs -> GhcTags)
-> (GenLocated SrcSpanAnnA (ConDecl GhcPs) -> ConDecl GhcPs)
-> GenLocated SrcSpanAnnA (ConDecl GhcPs)
-> GhcTags
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpanAnnA (ConDecl GhcPs) -> ConDecl GhcPs
forall l e. GenLocated l e -> e
unLoc)
(GenLocated SrcSpanAnnA (ConDecl GhcPs) -> GhcTags)
-> DataDefnCons (GenLocated SrcSpanAnnA (ConDecl GhcPs)) -> GhcTags
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
`concatMap` DataDefnCons (LConDecl GhcPs)
DataDefnCons (GenLocated SrcSpanAnnA (ConDecl GhcPs))
dd_cons
mkTyFamInstDeclTag :: SrcSpan -> TyFamInstDecl GhcPs -> Maybe GhcTag
mkTyFamInstDeclTag :: SrcSpan -> TyFamInstDecl GhcPs -> Maybe GhcTag
mkTyFamInstDeclTag SrcSpan
decLoc decl :: TyFamInstDecl GhcPs
decl@TyFamInstDecl { TyFamInstEqn GhcPs
tfid_eqn :: forall pass. TyFamInstDecl pass -> TyFamInstEqn pass
tfid_eqn :: TyFamInstEqn GhcPs
tfid_eqn } =
case TyFamInstEqn GhcPs
tfid_eqn of
FamEqn { LIdP GhcPs
feqn_tycon :: forall pass rhs. FamEqn pass rhs -> LIdP pass
feqn_tycon :: LIdP GhcPs
feqn_tycon } ->
GhcTag -> Maybe GhcTag
forall a. a -> Maybe a
Just (GhcTag -> Maybe GhcTag) -> GhcTag -> Maybe GhcTag
forall a b. (a -> b) -> a -> b
$ SrcSpan -> Located RdrName -> GhcTagKind -> GhcTag
mkGhcTag' SrcSpan
decLoc (GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName -> Located RdrName
forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn LIdP GhcPs
GenLocated (SrcSpanAnn' (EpAnn NameAnn)) RdrName
feqn_tycon) (Maybe (TyFamInstDecl GhcPs) -> GhcTagKind
GtkTypeFamilyInstance (TyFamInstDecl GhcPs -> Maybe (TyFamInstDecl GhcPs)
forall a. a -> Maybe a
Just TyFamInstDecl GhcPs
decl))
unSpanAnn :: GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn :: forall x. GenLocated (SrcSpanAnn' x) RdrName -> Located RdrName
unSpanAnn (L SrcSpanAnn' x
s RdrName
a) = SrcSpan -> RdrName -> Located RdrName
forall l e. l -> e -> GenLocated l e
L (SrcSpanAnn' x -> SrcSpan
forall a. SrcSpanAnn' a -> SrcSpan
locA SrcSpanAnn' x
s) RdrName
a
locAnn :: SrcSpanAnn' a -> SrcSpan
locAnn :: forall a. SrcSpanAnn' a -> SrcSpan
locAnn = SrcSpanAnn' a -> SrcSpan
forall a. SrcSpanAnn' a -> SrcSpan
locA
hsSigTypeToHsType :: HsSigType GhcPs -> HsType GhcPs
hsSigTypeToHsType :: HsSigType GhcPs -> HsType GhcPs
hsSigTypeToHsType = GenLocated SrcSpanAnnA (HsType GhcPs) -> HsType GhcPs
forall l e. GenLocated l e -> e
unLoc (GenLocated SrcSpanAnnA (HsType GhcPs) -> HsType GhcPs)
-> (HsSigType GhcPs -> GenLocated SrcSpanAnnA (HsType GhcPs))
-> HsSigType GhcPs
-> HsType GhcPs
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HsSigType GhcPs -> LHsType GhcPs
HsSigType GhcPs -> GenLocated SrcSpanAnnA (HsType GhcPs)
forall pass. HsSigType pass -> LHsType pass
sig_body
famResultKindSignature :: FamilyResultSig GhcPs
-> Maybe (Either (HsKind GhcPs) GhcPsHsTyVarBndr)
famResultKindSignature :: FamilyResultSig GhcPs
-> Maybe (Either (HsType GhcPs) GhcPsHsTyVarBndr)
famResultKindSignature (NoSig XNoSig GhcPs
_) = Maybe (Either (HsType GhcPs) GhcPsHsTyVarBndr)
forall a. Maybe a
Nothing
famResultKindSignature (KindSig XCKindSig GhcPs
_ LHsType GhcPs
ki) = Either (HsType GhcPs) GhcPsHsTyVarBndr
-> Maybe (Either (HsType GhcPs) GhcPsHsTyVarBndr)
forall a. a -> Maybe a
Just (HsType GhcPs -> Either (HsType GhcPs) GhcPsHsTyVarBndr
forall a b. a -> Either a b
Left (GenLocated SrcSpanAnnA (HsType GhcPs) -> HsType GhcPs
forall l e. GenLocated l e -> e
unLoc LHsType GhcPs
GenLocated SrcSpanAnnA (HsType GhcPs)
ki))
famResultKindSignature (TyVarSig XTyVarSig GhcPs
_ LHsTyVarBndr () GhcPs
bndr) = Either (HsType GhcPs) GhcPsHsTyVarBndr
-> Maybe (Either (HsType GhcPs) GhcPsHsTyVarBndr)
forall a. a -> Maybe a
Just (GhcPsHsTyVarBndr -> Either (HsType GhcPs) GhcPsHsTyVarBndr
forall a b. b -> Either a b
Right (GenLocated SrcSpanAnnA GhcPsHsTyVarBndr -> GhcPsHsTyVarBndr
forall l e. GenLocated l e -> e
unLoc LHsTyVarBndr () GhcPs
GenLocated SrcSpanAnnA GhcPsHsTyVarBndr
bndr))