@@ -9,24 +9,26 @@ module Development.IDE.Types.Exports
9
9
createExportsMapTc
10
10
,createExportsMapHieDb,size) where
11
11
12
- import Avail (AvailInfo (.. ))
13
- import Control.DeepSeq (NFData (.. ))
12
+ import Avail (AvailInfo (.. ))
13
+ import Control.DeepSeq (NFData (.. ))
14
14
import 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 )
22
23
import Development.IDE.GHC.Compat
24
+ import Development.IDE.GHC.Orphans ()
23
25
import 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 (.. ))
27
29
import HieDb
28
30
import Name
29
- import TcRnTypes (TcGblEnv (.. ))
31
+ import TcRnTypes (TcGblEnv (.. ))
30
32
31
33
newtype ExportsMap = ExportsMap
32
34
{ getExportsMap :: HashMap IdentifierText (HashSet IdentInfo )}
@@ -41,7 +43,7 @@ instance Semigroup ExportsMap where
41
43
type IdentifierText = Text
42
44
43
45
data IdentInfo = IdentInfo
44
- { name :: ! Text
46
+ { name :: ! OccName
45
47
, rendered :: Text
46
48
, parent :: ! (Maybe Text )
47
49
, isDatacon :: ! Bool
@@ -72,19 +74,19 @@ renderIEWrapped n
72
74
73
75
mkIdentInfos :: Text -> AvailInfo -> [IdentInfo ]
74
76
mkIdentInfos mod (Avail n) =
75
- [IdentInfo (pack (prettyPrint n) ) (renderIEWrapped n) Nothing (isDataConName n) mod ]
77
+ [IdentInfo (nameOccName n ) (renderIEWrapped n) Nothing (isDataConName n) mod ]
76
78
mkIdentInfos mod (AvailTC parent (n: nn) flds)
77
79
-- Following the GHC convention that parent == n if parent is exported
78
80
| 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
80
82
| n <- nn ++ map flSelector flds
81
83
] ++
82
- [ IdentInfo (pack (prettyPrint n) ) (renderIEWrapped n) Nothing (isDataConName n) mod ]
84
+ [ IdentInfo (nameOccName n ) (renderIEWrapped n) Nothing (isDataConName n) mod ]
83
85
where
84
86
parentP = pack $ printName parent
85
87
86
88
mkIdentInfos 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
88
90
| n <- nn ++ map flSelector flds
89
91
]
90
92
@@ -109,23 +111,29 @@ createExportsMapTc = ExportsMap . Map.fromListWith (<>) . concatMap doOne
109
111
where
110
112
mn = moduleName $ tcg_mod mi
111
113
114
+ nonInternalModules :: ModuleName -> Bool
115
+ nonInternalModules = not . (" .Internal" `isSuffixOf` ) . moduleNameString
116
+
112
117
createExportsMapHieDb :: HieDb -> IO ExportsMap
113
118
createExportsMapHieDb hiedb = do
114
119
mods <- getAllIndexedMods hiedb
115
- idents <- forM mods $ \ m -> do
120
+ idents <- forM ( filter (nonInternalModules . modInfoName . hieModInfo) mods) $ \ m -> do
116
121
let mn = modInfoName $ hieModInfo m
117
122
mText = pack $ moduleNameString mn
118
123
fmap (wrap . unwrap mText) <$> getExportsForModule hiedb mn
119
124
return $ ExportsMap $ Map. fromListWith (<>) (concat idents)
120
125
where
121
- wrap identInfo = (name identInfo, Set. fromList [identInfo])
126
+ wrap identInfo = (rendered identInfo, Set. fromList [identInfo])
122
127
-- unwrap :: ExportRow -> IdentInfo
123
- unwrap m ExportRow {.. } = IdentInfo n n p exportIsDatacon m
128
+ unwrap m ExportRow {.. } = IdentInfo exportName n p exportIsDatacon m
124
129
where
125
130
n = pack (occNameString exportName)
126
131
p = pack . occNameString <$> exportParent
127
132
128
133
unpackAvail :: 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 []
130
137
where
131
- f id @ IdentInfo {.. } = (name, [id ])
138
+ ! mod = pack $ moduleNameString mn
139
+ f id @ IdentInfo {.. } = (pack (prettyPrint name), [id ])
0 commit comments