@@ -5,6 +5,7 @@ module Development.IDE.Main
5
5
) where
6
6
import Control.Concurrent.Extra (newLock , readVar ,
7
7
withLock )
8
+ import Control.Concurrent.STM
8
9
import Control.Exception.Safe (Exception (displayException ),
9
10
catchAny )
10
11
import Control.Monad.Extra (concatMapM , unless ,
@@ -40,8 +41,9 @@ import Development.IDE.Core.RuleTypes (GenerateCore (GenerateCo
40
41
import Development.IDE.Core.Rules (GhcSessionIO (GhcSessionIO ),
41
42
mainRule )
42
43
import Development.IDE.Core.Service (initialise , runAction )
43
- import Development.IDE.Core.Shake (IdeState (shakeExtras ),
44
- ShakeExtras (state ),
44
+ import Development.IDE.Core.Shake (HieDbWriter (indexPending ),
45
+ IdeState (shakeExtras ),
46
+ ShakeExtras (hiedbWriter , state ),
45
47
toKnownFiles ,
46
48
useNoFile_ , uses )
47
49
import Development.IDE.Core.Tracing (measureMemory )
@@ -282,6 +284,13 @@ defaultMain Arguments{..} = do
282
284
uses GetModIfaceFromDiskAndIndex $ toList allKnownTargets
283
285
putStrLn dbLoc
284
286
let nfailures = length $ filter isNothing results
287
+ let pending = indexPending $ hiedbWriter $ shakeExtras ide
288
+
289
+ hPutStrLn stderr " Waiting for indexing..."
290
+ atomically $ do
291
+ n <- readTVar pending
292
+ unless (HashMap. size n == 0 ) retry
293
+
285
294
unless (nfailures == 0 ) $ exitWith $ ExitFailure nfailures
286
295
Db dir opts cmd -> do
287
296
dbLoc <- getHieDbLoc dir
0 commit comments