@@ -33,6 +33,11 @@ import Development.IDE.Types.Logger
3333import Development.IDE.Core.RuleTypes
3434import Development.IDE.Core.Shake
3535import Data.Maybe (catMaybes )
36+ import Data.List.Extra (nubOrd )
37+ import Development.IDE.Import.DependencyInformation
38+ import Control.Monad.Trans.Maybe
39+ import Control.Monad.Trans.Class
40+ import Development.IDE.Types.Options
3641
3742newtype OfInterestVar = OfInterestVar (Var (HashMap NormalizedFilePath FileOfInterestStatus ))
3843instance IsIdeGlobal OfInterestVar
@@ -94,11 +99,22 @@ kick = do
9499 ShakeExtras {progressUpdate} <- getShakeExtras
95100 liftIO $ progressUpdate KickStarted
96101
97- -- Update the exports map for the project
102+ -- Update the exports map for FOIs
98103 (results, () ) <- par (uses GenerateCore files) (void $ uses GetHieAst files)
104+
105+ -- Update the exports map for non FOIs
106+ -- We can skip this if checkProject is True, assuming they never change under our feet.
107+ IdeOptions { optCheckProject = checkProject } <- getIdeOptions
108+ ifaces <- if checkProject then return Nothing else runMaybeT $ do
109+ deps <- MaybeT $ sequence <$> uses GetDependencies files
110+ hiResults <- lift $ uses GetModIface (nubOrd $ foldMap transitiveModuleDeps deps)
111+ return $ map hirModIface $ catMaybes hiResults
112+
99113 ShakeExtras {exportsMap} <- getShakeExtras
100114 let mguts = catMaybes results
101115 ! exportsMap' = createExportsMapMg mguts
102- liftIO $ modifyVar_ exportsMap $ evaluate . (exportsMap' <> )
116+ ! exportsMap'' = maybe mempty createExportsMap ifaces
117+ liftIO $ modifyVar_ exportsMap $ evaluate . (exportsMap'' <> ) . (exportsMap' <> )
103118
104119 liftIO $ progressUpdate KickCompleted
120+
0 commit comments