Skip to content

Commit 2158ae4

Browse files
committed
Fix closure check
1 parent 4177048 commit 2158ae4

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

ghcide/session-loader/Development/IDE/Session.hs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,11 @@ import GHC.Data.Bag
123123
#endif
124124
import GHC.ResponseFile
125125
import qualified Data.List.NonEmpty as NE
126+
import GHC.Unit.Env
127+
import GHC.Unit.Home
128+
import GHC.Unit.Home.ModInfo
129+
130+
import GHC.Utils.Trace
126131

127132
data Log
128133
= LogSettingInitialDynFlags
@@ -771,6 +776,15 @@ setNameCache :: IORef NameCache -> HscEnv -> HscEnv
771776
#endif
772777
setNameCache nc hsc = hsc { hsc_NC = nc }
773778

779+
pprHomeUnitGraph :: HomeUnitGraph -> Compat.SDoc
780+
pprHomeUnitGraph unitEnv = Compat.vcat (map (\(k, v) -> pprHomeUnitEnv k v) $ Map.assocs $ unitEnv_graph unitEnv)
781+
782+
pprHomeUnitEnv :: UnitId -> HomeUnitEnv -> Compat.SDoc
783+
pprHomeUnitEnv uid env =
784+
Compat.ppr uid Compat.<+> Compat.text "(flags:" Compat.<+> Compat.ppr (homeUnitId_ $ homeUnitEnv_dflags env) Compat.<+> Compat.text "," Compat.<+> Compat.ppr (fmap homeUnitId $ homeUnitEnv_home_unit env) Compat.<+> Compat.text ")" Compat.<+> Compat.text "->"
785+
Compat.$$ Compat.nest 4 (pprHPT $ homeUnitEnv_hpt env)
786+
787+
774788
-- | Create a mapping from FilePaths to HscEnvEqs
775789
newComponentCache
776790
:: Recorder (WithPriority Log)
@@ -784,18 +798,20 @@ newComponentCache
784798
newComponentCache recorder exts cradlePath cfp hsc_env old_cis new_cis = do
785799
let cis = old_cis ++ new_cis
786800
let uids = map (\ci -> (componentUnitId ci, componentDynFlags ci)) cis
801+
pprTraceM "newComponentCache" $ Compat.ppr (map fst uids)
787802
hscEnv' <- -- Set up a multi component session with the other units on GHC 9.4
788803
Compat.initUnits (map snd uids) hsc_env
789804

790805
#if MIN_VERSION_ghc(9,3,0)
791806
let closure_errs = checkHomeUnitsClosed (hsc_unit_env hscEnv') (hsc_all_home_unit_ids hscEnv') pkg_deps
792807
pkg_deps = do
793-
(home_unit_id,home_unit_env) <- unitEnv_elts $ hsc_HUG hscEnv'
794-
map (home_unit_id,) (Map.keys $ unitInfoMap $ homeUnitEnv_units home_unit_env)
808+
home_unit_id <- map fst uids
809+
home_unit_env <- maybeToList $ unitEnv_lookup_maybe home_unit_id $ hsc_HUG hscEnv'
810+
map (home_unit_id,) (map (Compat.toUnitId . fst) $ explicitUnits $ homeUnitEnv_units home_unit_env)
795811

796812
case closure_errs of
797813
errs@(_:_) -> do
798-
let rendered = map (ideErrorWithSource (Just "cradle") (Just DsError) cfp . T.pack . Compat.printWithoutUniques) errs
814+
let rendered = map (ideErrorWithSource (Just "cradle") (Just DsError) cfp . T.pack . Compat.printWithoutUniques . (, hsc_all_home_unit_ids hscEnv', pprHomeUnitGraph $ ue_home_unit_graph $ hsc_unit_env hscEnv', pkg_deps)) errs
799815
res = (rendered,Nothing)
800816
dep_info = foldMap componentDependencyInfo (filter isBad cis)
801817
bad_units = OS.fromList $ concat $ do

0 commit comments

Comments
 (0)