From c290635958439a05d00efca0a18353c19c7a79e0 Mon Sep 17 00:00:00 2001 From: Pepe Iborra Date: Sun, 18 Apr 2021 19:54:21 +0100 Subject: [PATCH 1/3] remove unused field --- ghcide/src/Development/IDE/Core/Shake.hs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/ghcide/src/Development/IDE/Core/Shake.hs b/ghcide/src/Development/IDE/Core/Shake.hs index 01e80a20f5..a3b0e17e14 100644 --- a/ghcide/src/Development/IDE/Core/Shake.hs +++ b/ghcide/src/Development/IDE/Core/Shake.hs @@ -110,6 +110,11 @@ import Development.IDE.Core.Tracing import Development.IDE.GHC.Compat (NameCacheUpdater (..), upNameCache) import Development.IDE.GHC.Orphans () +import Development.IDE.Graph hiding (ShakeValue) +import qualified Development.IDE.Graph as Shake +import Development.IDE.Graph.Classes +import Development.IDE.Graph.Database +import Development.IDE.Graph.Rule import Development.IDE.Types.Action import Development.IDE.Types.Diagnostics import Development.IDE.Types.Exports @@ -119,11 +124,6 @@ import Development.IDE.Types.Logger hiding (Priority) import qualified Development.IDE.Types.Logger as Logger import Development.IDE.Types.Options import Development.IDE.Types.Shake -import Development.IDE.Graph hiding (ShakeValue) -import qualified Development.IDE.Graph as Shake -import Development.IDE.Graph.Classes -import Development.IDE.Graph.Database -import Development.IDE.Graph.Rule import GHC.Generics import Language.LSP.Diagnostics import qualified Language.LSP.Server as LSP @@ -187,8 +187,6 @@ data ShakeExtras = ShakeExtras ,progressUpdate :: ProgressEvent -> IO () ,ideTesting :: IdeTesting -- ^ Whether to enable additional lsp messages used by the test suite for checking invariants - ,session :: MVar ShakeSession - -- ^ Used in the GhcSession rule to forcefully restart the session after adding a new component ,restartShakeSession :: [DelayedAction ()] -> IO () ,ideNc :: IORef NameCache -- | A mapping of module name to known target (or candidate targets, if missing) @@ -488,7 +486,6 @@ shakeOpen lspEnv defaultConfig logger debouncer positionMapping <- newVar HMap.empty knownTargetsVar <- newVar $ hashed HMap.empty let restartShakeSession = shakeRestart ideState - let session = shakeSession mostRecentProgressEvent <- newTVarIO KickCompleted persistentKeys <- newVar HMap.empty let progressUpdate = atomically . writeTVar mostRecentProgressEvent From 7d14619505d9f55dadedb42deb44a673e9ce9ab1 Mon Sep 17 00:00:00 2001 From: Pepe Iborra Date: Sun, 18 Apr 2021 20:03:44 +0100 Subject: [PATCH 2/3] Delay Shake session start --- ghcide/src/Development/IDE/Core/Shake.hs | 12 +++++++++--- ghcide/src/Development/IDE/LSP/Notifications.hs | 4 ++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/ghcide/src/Development/IDE/Core/Shake.hs b/ghcide/src/Development/IDE/Core/Shake.hs index a3b0e17e14..badb8628f9 100644 --- a/ghcide/src/Development/IDE/Core/Shake.hs +++ b/ghcide/src/Development/IDE/Core/Shake.hs @@ -23,7 +23,7 @@ -- always stored as real Haskell values, whereas Shake serialises all 'A' values -- between runs. To deserialise a Shake value, we just consult Values. module Development.IDE.Core.Shake( - IdeState, shakeExtras, + IdeState, shakeSessionInit, shakeExtras, ShakeExtras(..), getShakeExtras, getShakeExtrasRules, KnownTargets, Target(..), toKnownFiles, IdeRule, IdeResult, @@ -32,6 +32,7 @@ module Development.IDE.Core.Shake( shakeRestart, shakeEnqueue, shakeProfile, + newSession, use, useNoFile, uses, useWithStaleFast, useWithStaleFast', delayedAction, FastResult(..), use_, useNoFile_, uses_, @@ -508,8 +509,7 @@ shakeOpen lspEnv defaultConfig logger debouncer opts { shakeExtra = newShakeExtra shakeExtras } rules shakeDb <- shakeDbM - initSession <- newSession shakeExtras shakeDb [] - shakeSession <- newMVar initSession + shakeSession <- newEmptyMVar shakeDatabaseProfile <- shakeDatabaseProfileIO shakeProfileDir let ideState = IdeState{..} @@ -608,6 +608,12 @@ shakeOpen lspEnv defaultConfig logger debouncer } loop id next +-- | Must be called in the 'Initialized' handler and only once +shakeSessionInit :: IdeState -> IO () +shakeSessionInit IdeState{..} = do + initSession <- newSession shakeExtras shakeDb [] + putMVar shakeSession initSession + shakeProfile :: IdeState -> FilePath -> IO () shakeProfile IdeState{..} = shakeProfileDatabase shakeDb diff --git a/ghcide/src/Development/IDE/LSP/Notifications.hs b/ghcide/src/Development/IDE/LSP/Notifications.hs index 883e97bdf9..c029a86751 100644 --- a/ghcide/src/Development/IDE/LSP/Notifications.hs +++ b/ghcide/src/Development/IDE/LSP/Notifications.hs @@ -104,6 +104,10 @@ descriptor plId = (defaultPluginDescriptor plId) { pluginNotificationHandlers = setSomethingModified ide , mkPluginNotificationHandler LSP.SInitialized $ \ide _ _ -> do + --------- Initialize Shake session -------------------------------------------------------------------- + liftIO $ shakeSessionInit ide + + --------- Set up file watchers ------------------------------------------------------------------------ clientCapabilities <- LSP.getClientCapabilities let watchSupported = case () of _ | LSP.ClientCapabilities{_workspace} <- clientCapabilities From 1b06109c1a44609c21ebc9f90ddb13eff46c9464 Mon Sep 17 00:00:00 2001 From: Pepe Iborra Date: Sat, 24 Apr 2021 08:30:06 +0100 Subject: [PATCH 3/3] fix Check and Custom commands --- ghcide/src/Development/IDE/Main.hs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ghcide/src/Development/IDE/Main.hs b/ghcide/src/Development/IDE/Main.hs index 1942fb6b7c..c3a34415cc 100644 --- a/ghcide/src/Development/IDE/Main.hs +++ b/ghcide/src/Development/IDE/Main.hs @@ -42,8 +42,9 @@ import Development.IDE.Core.Rules (GhcSessionIO (GhcSession import Development.IDE.Core.Service (initialise, runAction) import Development.IDE.Core.Shake (IdeState (shakeExtras), ShakeExtras (state), - uses) + shakeSessionInit, uses) import Development.IDE.Core.Tracing (measureMemory) +import Development.IDE.Graph (action) import Development.IDE.LSP.LanguageServer (runLanguageServer) import Development.IDE.Plugin (Plugin (pluginHandlers, pluginRules)) import Development.IDE.Plugin.HLS (asGhcIdePlugin) @@ -61,7 +62,6 @@ import Development.IDE.Types.Options (IdeGhcSession, clientSupportsProgress, defaultIdeOptions) import Development.IDE.Types.Shake (Key (Key)) -import Development.IDE.Graph (action) import GHC.IO.Encoding (setLocaleEncoding) import GHC.IO.Handle (hDuplicate) import HIE.Bios.Cradle (findCradle) @@ -261,6 +261,7 @@ defaultMain Arguments{..} = do , optCheckProject = pure False } ide <- initialise argsDefaultHlsConfig rules Nothing logger debouncer options vfs hiedb hieChan + shakeSessionInit ide registerIdeConfiguration (shakeExtras ide) $ IdeConfiguration mempty (hashed Nothing) putStrLn "\nStep 4/4: Type checking the files" @@ -309,6 +310,7 @@ defaultMain Arguments{..} = do optCheckProject = pure False } ide <- initialise argsDefaultHlsConfig rules Nothing logger debouncer options vfs hiedb hieChan + shakeSessionInit ide registerIdeConfiguration (shakeExtras ide) $ IdeConfiguration mempty (hashed Nothing) c ide