Skip to content

Commit 5d111f6

Browse files
committed
Fix older ghc builds
1 parent 6a69fd8 commit 5d111f6

File tree

3 files changed

+36
-15
lines changed

3 files changed

+36
-15
lines changed

cabal.project

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ packages:
3737
source-repository-package
3838
type:git
3939
location: https://github.com/nlander/HieDb.git
40-
tag: f10051a6dc1b809d5f40a45beab92205d1829736
40+
tag: 4eebfcf8fab54f24808e6301227d77ae64d2509c
4141

4242
-- Standard location for temporary packages needed for particular environments
4343
-- For example it is used in the project gitlab mirror to help in the MAcOS M1 build script

ghcide/src/Development/IDE/Core/Dependencies.hs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ indexDependencyHieFiles recorder se hscEnv = do
6868
hieDir :: FilePath
6969
hieDir = pkgLibDir </> "extra-compilation-artifacts"
7070
unit :: GHC.Unit
71-
unit = GHC.RealUnit $ GHC.Definite $ GHC.unitId package
71+
unit = GHC.fromUnitId $ GHC.unitId package
7272
-- Check if we have already indexed this package.
7373
moduleRows <- withHieDb se $ \db ->
7474
lookupPackage db unit
@@ -104,16 +104,14 @@ indexDependencyHieFiles recorder se hscEnv = do
104104
packages :: Set Package
105105
packages = Set.fromList
106106
$ map Package
107-
$ Map.elems
108-
-- Take only the packages in the unitInfoMap that are direct
109-
-- or transitive dependencies.
110-
$ Map.filterWithKey (\uid _ -> uid `Set.member` dependencyIds) unitInfoMap
107+
-- Take only the packages that are direct or transitive dependencies.
108+
$ filter (\unitInfo -> GHC.unitId unitInfo `Set.member` dependencyIds) allPackages
111109
where
112-
unitInfoMap :: GHC.UnitInfoMap
113-
unitInfoMap = GHC.getUnitInfoMap hscEnv
110+
allPackages :: [GHC.UnitInfo]
111+
allPackages = GHC.getUnitInfo hscEnv
114112
dependencyIds :: Set GHC.UnitId
115113
dependencyIds =
116-
calculateTransitiveDependencies unitInfoMap directDependencyIds directDependencyIds
114+
calculateTransitiveDependencies allPackages directDependencyIds directDependencyIds
117115
directDependencyIds :: Set GHC.UnitId
118116
directDependencyIds = Set.fromList
119117
$ map GHC.toUnitId
@@ -122,14 +120,14 @@ indexDependencyHieFiles recorder se hscEnv = do
122120

123121
-- calculateTransitiveDependencies finds the UnitId keys in the UnitInfoMap
124122
-- that are dependencies or transitive dependencies.
125-
calculateTransitiveDependencies :: GHC.UnitInfoMap -> Set GHC.UnitId -> Set GHC.UnitId -> Set GHC.UnitId
126-
calculateTransitiveDependencies unitInfoMap allDependencies newDepencencies
127-
-- If there are no new dependencies, we have found them all,
123+
calculateTransitiveDependencies :: [GHC.UnitInfo] -> Set GHC.UnitId -> Set GHC.UnitId -> Set GHC.UnitId
124+
calculateTransitiveDependencies allPackages allDependencies newDepencencies
125+
-- If there are no new dependencies, then we have found them all,
128126
-- so return allDependencies
129127
| Set.null newDepencencies = allDependencies
130128
-- Otherwise recursively add any dependencies of the newDepencencies
131129
-- that are not in allDependencies already.
132-
| otherwise = calculateTransitiveDependencies unitInfoMap nextAll nextNew
130+
| otherwise = calculateTransitiveDependencies allPackages nextAll nextNew
133131
where
134132
nextAll :: Set GHC.UnitId
135133
nextAll = Set.union allDependencies nextNew
@@ -140,8 +138,7 @@ calculateTransitiveDependencies unitInfoMap allDependencies newDepencencies
140138
nextNew = flip Set.difference allDependencies
141139
$ Set.unions
142140
$ map (Set.fromList . GHC.unitDepends)
143-
$ Map.elems
144-
$ Map.filterWithKey (\uid _ -> uid `Set.member` newDepencencies) unitInfoMap
141+
$ filter (\unitInfo -> GHC.unitId unitInfo `Set.member` newDepencencies) allPackages
145142

146143
getModulesForPackage :: Package -> [GHC.Module]
147144
getModulesForPackage (Package package) =

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ module Development.IDE.GHC.Compat.Units (
1919
-- * UnitInfoMap
2020
UnitInfoMap,
2121
getUnitInfoMap,
22+
getUnitInfo,
2223
lookupUnit,
2324
lookupUnit',
2425
-- * UnitInfo
@@ -42,6 +43,7 @@ module Development.IDE.GHC.Compat.Units (
4243
installedModule,
4344
-- * Module
4445
toUnitId,
46+
fromUnitId,
4547
Development.IDE.GHC.Compat.Units.moduleUnitId,
4648
moduleUnit,
4749
-- * ExternalPackageState
@@ -213,14 +215,28 @@ getUnitInfoMap =
213215
unitInfoMap . unitState
214216
#endif
215217

218+
getUnitInfo :: HscEnv -> [UnitInfo]
219+
getUnitInfo =
220+
#if MIN_VERSION_ghc(9,2,0)
221+
State.listUnitInfo . ue_units . hsc_unit_env
222+
#elif MIN_VERSION_ghc(9,0,0)
223+
State.listUnitInfo . unitState
224+
#else
225+
Packages.listPackageConfigMap . hsc_dflags
226+
#endif
227+
216228
lookupUnit :: HscEnv -> Unit -> Maybe UnitInfo
217229
lookupUnit env pid = State.lookupUnit (unitState env) pid
218230

219231
preloadClosureUs :: HscEnv -> PreloadUnitClosure
220232
preloadClosureUs = State.preloadClosure . unitState
221233

222234
unitHiddenModules :: UnitInfo -> [ModuleName]
235+
#if MIN_VERSION_ghc(9,0,0)
223236
unitHiddenModules = UnitInfo.unitHiddenModules
237+
#else
238+
unitHiddenModules = Packages.hiddenModules
239+
#endif
224240

225241
unitLibraryDirs :: UnitInfo -> [FilePath]
226242
unitLibraryDirs =
@@ -261,6 +277,14 @@ installedModule = Module
261277

262278
#endif
263279

280+
fromUnitId :: UnitId -> Unit
281+
fromUnitId =
282+
#if MIN_VERSION_ghc(9,0,0)
283+
RealUnit . Definite
284+
#else
285+
id
286+
#endif
287+
264288
moduleUnitId :: Module -> UnitId
265289
moduleUnitId =
266290
Unit.toUnitId . Unit.moduleUnit

0 commit comments

Comments
 (0)