@@ -33,6 +33,11 @@ import Development.IDE.Types.Logger
33
33
import Development.IDE.Core.RuleTypes
34
34
import Development.IDE.Core.Shake
35
35
import 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
36
41
37
42
newtype OfInterestVar = OfInterestVar (Var (HashMap NormalizedFilePath FileOfInterestStatus ))
38
43
instance IsIdeGlobal OfInterestVar
@@ -94,11 +99,22 @@ kick = do
94
99
ShakeExtras {progressUpdate} <- getShakeExtras
95
100
liftIO $ progressUpdate KickStarted
96
101
97
- -- Update the exports map for the project
102
+ -- Update the exports map for FOIs
98
103
(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
+
99
113
ShakeExtras {exportsMap} <- getShakeExtras
100
114
let mguts = catMaybes results
101
115
! exportsMap' = createExportsMapMg mguts
102
- liftIO $ modifyVar_ exportsMap $ evaluate . (exportsMap' <> )
116
+ ! exportsMap'' = maybe mempty createExportsMap ifaces
117
+ liftIO $ modifyVar_ exportsMap $ evaluate . (exportsMap'' <> ) . (exportsMap' <> )
103
118
104
119
liftIO $ progressUpdate KickCompleted
120
+
0 commit comments