@@ -9,24 +9,26 @@ module Development.IDE.Types.Exports
99 createExportsMapTc
1010,createExportsMapHieDb,size) where
1111
12- import Avail (AvailInfo (.. ))
13- import Control.DeepSeq (NFData (.. ))
12+ import Avail (AvailInfo (.. ))
13+ import Control.DeepSeq (NFData (.. ))
1414import Control.Monad
15- import Data.Bifunctor (Bifunctor (second ))
16- import Data.HashMap.Strict (HashMap , elems )
17- import qualified Data.HashMap.Strict as Map
18- import Data.HashSet (HashSet )
19- import qualified Data.HashSet as Set
20- import Data.Hashable (Hashable )
21- import Data.Text (Text , pack )
15+ import Data.Bifunctor (Bifunctor (second ))
16+ import Data.HashMap.Strict (HashMap , elems )
17+ import qualified Data.HashMap.Strict as Map
18+ import Data.HashSet (HashSet )
19+ import qualified Data.HashSet as Set
20+ import Data.Hashable (Hashable )
21+ import Data.List (isSuffixOf )
22+ import Data.Text (Text , pack )
2223import Development.IDE.GHC.Compat
24+ import Development.IDE.GHC.Orphans ()
2325import Development.IDE.GHC.Util
24- import FieldLabel (flSelector )
25- import GHC.Generics (Generic )
26- import GhcPlugins (IfaceExport , ModGuts (.. ))
26+ import FieldLabel (flSelector )
27+ import GHC.Generics (Generic )
28+ import GhcPlugins (IfaceExport , ModGuts (.. ))
2729import HieDb
2830import Name
29- import TcRnTypes (TcGblEnv (.. ))
31+ import TcRnTypes (TcGblEnv (.. ))
3032
3133newtype ExportsMap = ExportsMap
3234 { getExportsMap :: HashMap IdentifierText (HashSet IdentInfo )}
@@ -41,7 +43,7 @@ instance Semigroup ExportsMap where
4143type IdentifierText = Text
4244
4345data IdentInfo = IdentInfo
44- { name :: ! Text
46+ { name :: ! OccName
4547 , rendered :: Text
4648 , parent :: ! (Maybe Text )
4749 , isDatacon :: ! Bool
@@ -72,19 +74,19 @@ renderIEWrapped n
7274
7375mkIdentInfos :: Text -> AvailInfo -> [IdentInfo ]
7476mkIdentInfos mod (Avail n) =
75- [IdentInfo (pack (prettyPrint n) ) (renderIEWrapped n) Nothing (isDataConName n) mod ]
77+ [IdentInfo (nameOccName n ) (renderIEWrapped n) Nothing (isDataConName n) mod ]
7678mkIdentInfos mod (AvailTC parent (n: nn) flds)
7779 -- Following the GHC convention that parent == n if parent is exported
7880 | n == parent
79- = [ IdentInfo (pack (prettyPrint n) ) (renderIEWrapped n) (Just $! parentP) (isDataConName n) mod
81+ = [ IdentInfo (nameOccName n ) (renderIEWrapped n) (Just $! parentP) (isDataConName n) mod
8082 | n <- nn ++ map flSelector flds
8183 ] ++
82- [ IdentInfo (pack (prettyPrint n) ) (renderIEWrapped n) Nothing (isDataConName n) mod ]
84+ [ IdentInfo (nameOccName n ) (renderIEWrapped n) Nothing (isDataConName n) mod ]
8385 where
8486 parentP = pack $ printName parent
8587
8688mkIdentInfos mod (AvailTC _ nn flds)
87- = [ IdentInfo (pack (prettyPrint n) ) (renderIEWrapped n) Nothing (isDataConName n) mod
89+ = [ IdentInfo (nameOccName n ) (renderIEWrapped n) Nothing (isDataConName n) mod
8890 | n <- nn ++ map flSelector flds
8991 ]
9092
@@ -109,23 +111,29 @@ createExportsMapTc = ExportsMap . Map.fromListWith (<>) . concatMap doOne
109111 where
110112 mn = moduleName $ tcg_mod mi
111113
114+ nonInternalModules :: ModuleName -> Bool
115+ nonInternalModules = not . (" .Internal" `isSuffixOf` ) . moduleNameString
116+
112117createExportsMapHieDb :: HieDb -> IO ExportsMap
113118createExportsMapHieDb hiedb = do
114119 mods <- getAllIndexedMods hiedb
115- idents <- forM mods $ \ m -> do
120+ idents <- forM ( filter (nonInternalModules . modInfoName . hieModInfo) mods) $ \ m -> do
116121 let mn = modInfoName $ hieModInfo m
117122 mText = pack $ moduleNameString mn
118123 fmap (wrap . unwrap mText) <$> getExportsForModule hiedb mn
119124 return $ ExportsMap $ Map. fromListWith (<>) (concat idents)
120125 where
121- wrap identInfo = (name identInfo, Set. fromList [identInfo])
126+ wrap identInfo = (rendered identInfo, Set. fromList [identInfo])
122127 -- unwrap :: ExportRow -> IdentInfo
123- unwrap m ExportRow {.. } = IdentInfo n n p exportIsDatacon m
128+ unwrap m ExportRow {.. } = IdentInfo exportName n p exportIsDatacon m
124129 where
125130 n = pack (occNameString exportName)
126131 p = pack . occNameString <$> exportParent
127132
128133unpackAvail :: ModuleName -> IfaceExport -> [(Text , [IdentInfo ])]
129- unpackAvail ! (pack . moduleNameString -> mod ) = map f . mkIdentInfos mod
134+ unpackAvail mn
135+ | nonInternalModules mn = map f . mkIdentInfos mod
136+ | otherwise = const []
130137 where
131- f id @ IdentInfo {.. } = (name, [id ])
138+ ! mod = pack $ moduleNameString mn
139+ f id @ IdentInfo {.. } = (pack (prettyPrint name), [id ])
0 commit comments