forked from haskell/haskell-language-server
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Service.hs
83 lines (74 loc) · 2.67 KB
/
Service.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
-- Copyright (c) 2019 The DAML Authors. All rights reserved.
-- SPDX-License-Identifier: Apache-2.0
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilies #-}
-- | A Shake implementation of the compiler service, built
-- using the "Shaker" abstraction layer for in-memory use.
--
module Development.IDE.Core.Service(
getIdeOptions, getIdeOptionsIO,
IdeState, initialise, shutdown,
runAction,
getDiagnostics,
ideLogger,
updatePositionMapping,
) where
import Control.Applicative ((<|>))
import Development.IDE.Core.Debouncer
import Development.IDE.Core.FileExists (fileExistsRules)
import Development.IDE.Core.OfInterest
import Development.IDE.Graph
import Development.IDE.Types.Logger as Logger
import Development.IDE.Types.Options (IdeOptions (..))
import Ide.Plugin.Config
import qualified Language.LSP.Server as LSP
import qualified Language.LSP.Types as LSP
import Control.Monad
import Development.IDE.Core.Shake
import Development.IDE.Types.Shake (WithHieDb)
import System.Environment (lookupEnv)
------------------------------------------------------------
-- Exposed API
-- | Initialise the Compiler Service.
initialise :: Config
-> Rules ()
-> Maybe (LSP.LanguageContextEnv Config)
-> Logger
-> Debouncer LSP.NormalizedUri
-> IdeOptions
-> VFSHandle
-> WithHieDb
-> IndexQueue
-> IO IdeState
initialise defaultConfig mainRule lspEnv logger debouncer options vfs withHieDb hiedbChan = do
shakeProfiling <- do
let fromConf = optShakeProfiling options
fromEnv <- lookupEnv "GHCIDE_BUILD_PROFILING"
return $ fromConf <|> fromEnv
shakeOpen
lspEnv
defaultConfig
logger
debouncer
shakeProfiling
(optReportProgress options)
(optTesting options)
withHieDb
hiedbChan
vfs
(optShakeOptions options)
$ do
addIdeGlobal $ GlobalIdeOptions options
ofInterestRules
fileExistsRules lspEnv vfs
mainRule
-- | Shutdown the Compiler Service.
shutdown :: IdeState -> IO ()
shutdown = shakeShut
-- This will return as soon as the result of the action is
-- available. There might still be other rules running at this point,
-- e.g., the ofInterestRule.
runAction :: String -> IdeState -> Action a -> IO a
runAction herald ide act =
join $ shakeEnqueue (shakeExtras ide) (mkDelayedAction herald Logger.Info act)