Skip to content

Commit 6ef98f6

Browse files
committed
Index hidden module hie files
1 parent cfa1b3e commit 6ef98f6

File tree

2 files changed

+37
-9
lines changed

2 files changed

+37
-9
lines changed

ghcide/src/Development/IDE/GHC/Compat/Units.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ module Development.IDE.GHC.Compat.Units (
2424
-- * UnitInfo
2525
UnitInfo,
2626
unitExposedModules,
27+
unitHiddenModules,
2728
unitLibraryDirs,
2829
UnitInfo.unitId,
2930
unitDepends,
@@ -286,6 +287,9 @@ unitExposedModules ue =
286287
Packages.exposedModules ue
287288
#endif
288289

290+
unitHiddenModules :: UnitInfo -> [ModuleName]
291+
unitHiddenModules = UnitInfo.unitHiddenModules
292+
289293
unitDepends :: UnitInfo -> [UnitId]
290294
#if MIN_VERSION_ghc(9,0,0)
291295
unitDepends = State.unitDepends

ghcide/src/Development/IDE/Types/HscEnvEq.hs

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,27 @@ newHscEnvEqWithImportPaths envImportPaths se hscEnv deps = do
8888
-- it's very important to delay the package exports computation
8989
envPackageExports <- onceAsync $ withSpan "Package Exports" $ \_sp -> do
9090
-- compute the package imports
91-
modIfaces <- concat . Map.elems <$> loadPackagesWithModIFaces
91+
let pkgst = unitState hscEnv
92+
depends = explicitUnits pkgst
93+
modules =
94+
[ m
95+
| d <- depends
96+
, Just pkg <- [lookupPackageConfig d hscEnv]
97+
, (modName, maybeOtherPkgMod) <- unitExposedModules pkg
98+
, let m = case maybeOtherPkgMod of
99+
-- When module is re-exported from another package,
100+
-- the origin module is represented by value in Just
101+
Just otherPkgMod -> otherPkgMod
102+
Nothing -> mkModule (unitInfoId pkg) modName
103+
]
104+
105+
doOne m = do
106+
modIface <- initIfaceLoad hscEnv $
107+
loadInterface "" m (ImportByUser NotBoot)
108+
return $ case modIface of
109+
Maybes.Failed _r -> Nothing
110+
Maybes.Succeeded mi -> Just mi
111+
modIfaces <- mapMaybeM doOne modules
92112
return $ createExportsMap modIfaces
93113

94114
let dflags = hsc_dflags hscEnv
@@ -175,14 +195,18 @@ newHscEnvEqWithImportPaths envImportPaths se hscEnv deps = do
175195
]
176196
getModulesForPackage :: Package -> [Module]
177197
getModulesForPackage (Package package) =
178-
[ m
179-
| (modName, maybeOtherPkgMod) <- unitExposedModules package
180-
, let m = case maybeOtherPkgMod of
181-
-- When module is re-exported from another package,
182-
-- the origin module is represented by value in Just
183-
Just otherPkgMod -> otherPkgMod
184-
Nothing -> mkModule (unitInfoId package) modName
185-
]
198+
map makeModule allModules
199+
where
200+
allModules :: [(ModuleName, Maybe Module)]
201+
allModules = unitExposedModules package
202+
++ zip (unitHiddenModules package) (repeat Nothing)
203+
makeModule :: (ModuleName, Maybe Module)
204+
-> Module
205+
makeModule (moduleName, Nothing) =
206+
mkModule (unitInfoId package) moduleName
207+
-- When module is re-exported from another package,
208+
-- the origin module is represented by value in Just
209+
makeModule (_, Just otherPackageMod) = otherPackageMod
186210

187211
newtype Package = Package UnitInfo deriving Eq
188212
instance Ord Package where

0 commit comments

Comments
 (0)