Skip to content

Commit

Permalink
cleanup dirty trick
Browse files Browse the repository at this point in the history
  • Loading branch information
soulomoon committed Mar 26, 2024
1 parent b3476c2 commit 14eff93
Showing 1 changed file with 4 additions and 7 deletions.
11 changes: 4 additions & 7 deletions ghcide/src/Development/IDE/LSP/LanguageServer.hs
Original file line number Diff line number Diff line change
Expand Up @@ -195,18 +195,11 @@ handleInit recorder getHieDbLoc getIdeState lifetime exitClientMsg clearReqId wa
let root = LSP.resRootPath env
dir <- maybe getCurrentDirectory return root
dbLoc <- getHieDbLoc dir

-- The database needs to be open for the duration of the reactor thread, but we need to pass in a reference
-- to 'getIdeState', so we use this dirty trick
dbMVar <- newEmptyMVar
~(WithHieDbShield withHieDb,hieChan) <- unsafeInterleaveIO $ takeMVar dbMVar

ide <- getIdeState env root withHieDb hieChan

let initConfig = parseConfiguration params

logWith recorder Info $ LogRegisteringIdeConfig initConfig
registerIdeConfiguration (shakeExtras ide) initConfig

let handleServerException (Left e) = do
logWith recorder Error $ LogReactorThreadException e
Expand Down Expand Up @@ -243,6 +236,10 @@ handleInit recorder getHieDbLoc getIdeState lifetime exitClientMsg clearReqId wa
ReactorNotification act -> handle exceptionInHandler act
ReactorRequest _id act k -> void $ async $ checkCancelled _id act k
logWith recorder Info LogReactorThreadStopped

(WithHieDbShield withHieDb,hieChan) <- takeMVar dbMVar
ide <- getIdeState env root withHieDb hieChan
registerIdeConfiguration (shakeExtras ide) initConfig
pure $ Right (env,ide)


Expand Down

0 comments on commit 14eff93

Please sign in to comment.