Skip to content

Commit 7d14619

Browse files
committed
Delay Shake session start
1 parent c290635 commit 7d14619

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
-- always stored as real Haskell values, whereas Shake serialises all 'A' values
2424
-- between runs. To deserialise a Shake value, we just consult Values.
2525
module Development.IDE.Core.Shake(
26-
IdeState, shakeExtras,
26+
IdeState, shakeSessionInit, shakeExtras,
2727
ShakeExtras(..), getShakeExtras, getShakeExtrasRules,
2828
KnownTargets, Target(..), toKnownFiles,
2929
IdeRule, IdeResult,
@@ -32,6 +32,7 @@ module Development.IDE.Core.Shake(
3232
shakeRestart,
3333
shakeEnqueue,
3434
shakeProfile,
35+
newSession,
3536
use, useNoFile, uses, useWithStaleFast, useWithStaleFast', delayedAction,
3637
FastResult(..),
3738
use_, useNoFile_, uses_,
@@ -508,8 +509,7 @@ shakeOpen lspEnv defaultConfig logger debouncer
508509
opts { shakeExtra = newShakeExtra shakeExtras }
509510
rules
510511
shakeDb <- shakeDbM
511-
initSession <- newSession shakeExtras shakeDb []
512-
shakeSession <- newMVar initSession
512+
shakeSession <- newEmptyMVar
513513
shakeDatabaseProfile <- shakeDatabaseProfileIO shakeProfileDir
514514
let ideState = IdeState{..}
515515

@@ -608,6 +608,12 @@ shakeOpen lspEnv defaultConfig logger debouncer
608608
}
609609
loop id next
610610

611+
-- | Must be called in the 'Initialized' handler and only once
612+
shakeSessionInit :: IdeState -> IO ()
613+
shakeSessionInit IdeState{..} = do
614+
initSession <- newSession shakeExtras shakeDb []
615+
putMVar shakeSession initSession
616+
611617
shakeProfile :: IdeState -> FilePath -> IO ()
612618
shakeProfile IdeState{..} = shakeProfileDatabase shakeDb
613619

ghcide/src/Development/IDE/LSP/Notifications.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,10 @@ descriptor plId = (defaultPluginDescriptor plId) { pluginNotificationHandlers =
104104
setSomethingModified ide
105105

106106
, mkPluginNotificationHandler LSP.SInitialized $ \ide _ _ -> do
107+
--------- Initialize Shake session --------------------------------------------------------------------
108+
liftIO $ shakeSessionInit ide
109+
110+
--------- Set up file watchers ------------------------------------------------------------------------
107111
clientCapabilities <- LSP.getClientCapabilities
108112
let watchSupported = case () of
109113
_ | LSP.ClientCapabilities{_workspace} <- clientCapabilities

0 commit comments

Comments
 (0)