@@ -12,146 +12,127 @@ module Development.IDE.Main
12
12
,testing
13
13
,Log (.. )
14
14
) where
15
- import Control.Concurrent (MVar )
16
- import Control.Concurrent.Extra (Chan ,
17
- withNumCapabilities )
18
- import Control.Concurrent.STM.Stats (atomically ,
19
- dumpSTMStats )
20
- import Control.Exception.Safe (SomeException ,
21
- catchAny ,
22
- displayException )
23
- import Control.Monad.Extra (concatMapM , unless ,
24
- when )
25
- import Control.Monad.Reader (ReaderT )
26
- import qualified Data.Aeson.Encode.Pretty as A
27
- import Data.Default (Default (def ))
28
- import Data.Foldable (traverse_ )
29
- import Data.Hashable (hashed )
30
- import qualified Data.HashMap.Strict as HashMap
31
- import Data.List.Extra (intercalate ,
32
- isPrefixOf , nub ,
33
- nubOrd , partition )
34
- import Data.Maybe (catMaybes , isJust )
35
- import qualified Data.Text as T
36
- import Data.Text.Lazy.Encoding (decodeUtf8 )
37
- import qualified Data.Text.Lazy.IO as LT
38
- import Data.Typeable (typeOf )
39
- import Development.IDE (Action ,
40
- GhcVersion (.. ),
41
- Priority (Debug , Error ),
42
- Rules , ghcVersion ,
43
- hDuplicateTo' )
44
- import Development.IDE.Core.Debouncer (Debouncer ,
45
- newAsyncDebouncer )
46
- import Development.IDE.Core.FileStore (isWatchSupported )
47
- import Development.IDE.Core.IdeConfiguration (IdeConfiguration (.. ),
48
- registerIdeConfiguration )
49
- import Development.IDE.Core.OfInterest (FileOfInterestStatus (OnDisk ),
50
- kick ,
51
- setFilesOfInterest )
52
- import Development.IDE.Core.Rules (GhcSessionIO (GhcSessionIO ),
53
- mainRule )
54
- import qualified Development.IDE.Core.Rules as Rules
55
- import Development.IDE.Core.RuleTypes (GenerateCore (GenerateCore ),
56
- GetHieAst (GetHieAst ),
57
- GhcSession (GhcSession ),
58
- GhcSessionDeps (GhcSessionDeps ),
59
- TypeCheck (TypeCheck ))
60
- import Development.IDE.Core.Service (initialise ,
61
- runAction )
62
- import qualified Development.IDE.Core.Service as Service
63
- import Development.IDE.Core.Shake (IdeState (shakeExtras ),
64
- IndexQueue ,
65
- ShakeExtras (state ),
66
- shakeSessionInit ,
67
- uses )
68
- import qualified Development.IDE.Core.Shake as Shake
69
- import Development.IDE.Core.Tracing (measureMemory )
70
- import Development.IDE.Graph (action )
71
- import Development.IDE.LSP.LanguageServer (runLanguageServer ,
72
- setupLSP )
73
- import qualified Development.IDE.LSP.LanguageServer as LanguageServer
74
- import Development.IDE.LSP.Server (ReactorChan ,
75
- ReactorMessage ,
76
- ServerM )
77
- import Development.IDE.Main.HeapStats (withHeapStats )
78
- import qualified Development.IDE.Main.HeapStats as HeapStats
79
- import qualified Development.IDE.Monitoring.EKG as EKG
15
+ import Control.Concurrent.Extra (withNumCapabilities )
16
+ import Control.Concurrent.STM.Stats (atomically ,
17
+ dumpSTMStats )
18
+ import Control.Exception.Safe (SomeException , catchAny ,
19
+ displayException )
20
+ import Control.Monad.Extra (concatMapM , unless ,
21
+ when )
22
+ import qualified Data.Aeson.Encode.Pretty as A
23
+ import Data.Default (Default (def ))
24
+ import Data.Foldable (traverse_ )
25
+ import qualified Data.HashMap.Strict as HashMap
26
+ import Data.Hashable (hashed )
27
+ import Data.List.Extra (intercalate , isPrefixOf ,
28
+ nub , nubOrd , partition )
29
+ import Data.Maybe (catMaybes , isJust )
30
+ import qualified Data.Text as T
31
+ import Data.Text.Lazy.Encoding (decodeUtf8 )
32
+ import qualified Data.Text.Lazy.IO as LT
33
+ import Data.Typeable (typeOf )
34
+ import Development.IDE (Action , GhcVersion (.. ),
35
+ Priority (Debug , Error ), Rules ,
36
+ ghcVersion ,
37
+ hDuplicateTo' )
38
+ import Development.IDE.Core.Debouncer (Debouncer ,
39
+ newAsyncDebouncer )
40
+ import Development.IDE.Core.FileStore (isWatchSupported )
41
+ import Development.IDE.Core.IdeConfiguration (IdeConfiguration (.. ),
42
+ registerIdeConfiguration )
43
+ import Development.IDE.Core.OfInterest (FileOfInterestStatus (OnDisk ),
44
+ kick ,
45
+ setFilesOfInterest )
46
+ import Development.IDE.Core.RuleTypes (GenerateCore (GenerateCore ),
47
+ GetHieAst (GetHieAst ),
48
+ GhcSession (GhcSession ),
49
+ GhcSessionDeps (GhcSessionDeps ),
50
+ TypeCheck (TypeCheck ))
51
+ import Development.IDE.Core.Rules (GhcSessionIO (GhcSessionIO ),
52
+ mainRule )
53
+ import qualified Development.IDE.Core.Rules as Rules
54
+ import Development.IDE.Core.Service (initialise , runAction )
55
+ import qualified Development.IDE.Core.Service as Service
56
+ import Development.IDE.Core.Shake (IdeState (shakeExtras ),
57
+ ShakeExtras (state ),
58
+ shakeSessionInit , uses )
59
+ import qualified Development.IDE.Core.Shake as Shake
60
+ import Development.IDE.Core.Tracing (measureMemory )
61
+ import Development.IDE.Graph (action )
62
+ import Development.IDE.LSP.LanguageServer (runLanguageServer )
63
+ import qualified Development.IDE.LSP.LanguageServer as LanguageServer
64
+ import Development.IDE.Main.HeapStats (withHeapStats )
65
+ import qualified Development.IDE.Main.HeapStats as HeapStats
66
+ import Development.IDE.Types.Monitoring (Monitoring )
67
+ import qualified Development.IDE.Monitoring.EKG as EKG
80
68
import qualified Development.IDE.Monitoring.OpenTelemetry as OpenTelemetry
81
- import Development.IDE.Plugin (Plugin (pluginHandlers , pluginModifyDynflags , pluginRules ))
82
- import Development.IDE.Plugin.HLS (asGhcIdePlugin )
83
- import qualified Development.IDE.Plugin.HLS as PluginHLS
84
- import qualified Development.IDE.Plugin.HLS.GhcIde as GhcIde
85
- import qualified Development.IDE.Plugin.Test as Test
86
- import Development.IDE.Session (SessionLoadingOptions ,
87
- getHieDbLoc ,
88
- loadSessionWithOptions ,
89
- retryOnSqliteBusy ,
90
- runWithDb ,
91
- setInitialDynFlags )
92
- import qualified Development.IDE.Session as Session
93
- import Development.IDE.Types.Location (NormalizedUri ,
94
- toNormalizedFilePath' )
95
- import Development.IDE.Types.Logger (Logger ,
96
- Pretty (pretty ),
97
- Priority (Info , Warning ),
98
- Recorder ,
99
- WithPriority ,
100
- cmapWithPrio ,
101
- logWith , vsep , (<+>) )
102
- import Development.IDE.Types.Monitoring (Monitoring )
103
- import Development.IDE.Types.Options (IdeGhcSession ,
104
- IdeOptions (optCheckParents , optCheckProject , optReportProgress , optRunSubset ),
105
- IdeTesting (IdeTesting ),
106
- clientSupportsProgress ,
107
- defaultIdeOptions ,
108
- optModifyDynFlags ,
109
- optTesting )
110
- import Development.IDE.Types.Shake (WithHieDb ,
111
- fromKeyType )
112
- import GHC.Conc (getNumProcessors )
113
- import GHC.IO.Encoding (setLocaleEncoding )
114
- import GHC.IO.Handle (hDuplicate )
115
- import HIE.Bios.Cradle (findCradle )
116
- import qualified HieDb.Run as HieDb
117
- import Ide.Plugin.Config (CheckParents (NeverCheck ),
118
- Config , checkParents ,
119
- checkProject ,
120
- getConfigFromNotification )
121
- import Ide.Plugin.ConfigUtils (pluginsToDefaultConfig ,
122
- pluginsToVSCodeExtensionSchema )
123
- import Ide.PluginUtils (allLspCmdIds' ,
124
- getProcessID ,
125
- idePluginsToPluginDesc ,
126
- pluginDescToIdePlugins )
127
- import Ide.Types (IdeCommand (IdeCommand ),
128
- IdePlugins ,
129
- PluginDescriptor (PluginDescriptor , pluginCli ),
130
- PluginId (PluginId ),
131
- ipMap )
132
- import Language.LSP.Server (LanguageContextEnv )
133
- import qualified Language.LSP.Server as LSP
134
- import Language.LSP.Types (Method (Initialize ),
135
- RequestMessage )
69
+ import Development.IDE.Plugin (Plugin (pluginHandlers , pluginModifyDynflags , pluginRules ))
70
+ import Development.IDE.Plugin.HLS (asGhcIdePlugin )
71
+ import qualified Development.IDE.Plugin.HLS as PluginHLS
72
+ import qualified Development.IDE.Plugin.HLS.GhcIde as GhcIde
73
+ import qualified Development.IDE.Plugin.Test as Test
74
+ import Development.IDE.Session (SessionLoadingOptions ,
75
+ getHieDbLoc ,
76
+ loadSessionWithOptions ,
77
+ retryOnSqliteBusy ,
78
+ runWithDb ,
79
+ setInitialDynFlags )
80
+ import qualified Development.IDE.Session as Session
81
+ import Development.IDE.Types.Location (NormalizedUri ,
82
+ toNormalizedFilePath' )
83
+ import Development.IDE.Types.Logger (Logger , Pretty (pretty ),
84
+ Priority (Info , Warning ),
85
+ Recorder , WithPriority ,
86
+ cmapWithPrio , logWith ,
87
+ vsep , (<+>) )
88
+ import Development.IDE.Types.Options (IdeGhcSession ,
89
+ IdeOptions (optCheckParents , optCheckProject , optReportProgress , optRunSubset ),
90
+ IdeTesting (IdeTesting ),
91
+ clientSupportsProgress ,
92
+ defaultIdeOptions ,
93
+ optModifyDynFlags ,
94
+ optTesting )
95
+ import Development.IDE.Types.Shake (fromKeyType )
96
+ import GHC.Conc (getNumProcessors )
97
+ import GHC.IO.Encoding (setLocaleEncoding )
98
+ import GHC.IO.Handle (hDuplicate )
99
+ import HIE.Bios.Cradle (findCradle )
100
+ import qualified HieDb.Run as HieDb
101
+ import Ide.Plugin.Config (CheckParents (NeverCheck ),
102
+ Config , checkParents ,
103
+ checkProject ,
104
+ getConfigFromNotification )
105
+ import Ide.Plugin.ConfigUtils (pluginsToDefaultConfig ,
106
+ pluginsToVSCodeExtensionSchema )
107
+ import Ide.PluginUtils (allLspCmdIds' ,
108
+ getProcessID ,
109
+ idePluginsToPluginDesc ,
110
+ pluginDescToIdePlugins )
111
+ import Ide.Types (IdeCommand (IdeCommand ),
112
+ IdePlugins ,
113
+ PluginDescriptor (PluginDescriptor , pluginCli ),
114
+ PluginId (PluginId ),
115
+ ipMap )
116
+ import qualified Language.LSP.Server as LSP
136
117
import qualified "list-t" ListT
137
- import Numeric.Natural (Natural )
138
- import Options.Applicative hiding (action )
139
- import qualified StmContainers.Map as STM
140
- import qualified System.Directory.Extra as IO
141
- import System.Exit (ExitCode (ExitFailure ),
142
- exitWith )
143
- import System.FilePath (takeExtension ,
144
- takeFileName )
145
- import System.IO (BufferMode (LineBuffering , NoBuffering ),
146
- Handle , hFlush ,
147
- hPutStrLn ,
148
- hSetBuffering ,
149
- hSetEncoding , stderr ,
150
- stdin , stdout , utf8 )
151
- import System.Random (newStdGen )
152
- import System.Time.Extra (Seconds , offsetTime ,
153
- showDuration )
154
- import Text.Printf (printf )
118
+ import Numeric.Natural (Natural )
119
+ import Options.Applicative hiding (action )
120
+ import qualified StmContainers.Map as STM
121
+ import qualified System.Directory.Extra as IO
122
+ import System.Exit (ExitCode (ExitFailure ),
123
+ exitWith )
124
+ import System.FilePath (takeExtension ,
125
+ takeFileName )
126
+ import System.IO (BufferMode (LineBuffering , NoBuffering ),
127
+ Handle , hFlush ,
128
+ hPutStrLn ,
129
+ hSetBuffering ,
130
+ hSetEncoding , stderr ,
131
+ stdin , stdout , utf8 )
132
+ import System.Random (newStdGen )
133
+ import System.Time.Extra (Seconds , offsetTime ,
134
+ showDuration )
135
+ import Text.Printf (printf )
155
136
156
137
data Log
157
138
= LogHeapStats ! HeapStats. Log
@@ -347,7 +328,7 @@ defaultMain recorder Arguments{..} = withHeapStats (cmapWithPrio LogHeapStats re
347
328
t <- offsetTime
348
329
log Info LogLspStart
349
330
350
- let getIdeState :: LanguageContextEnv Config -> Maybe FilePath -> WithHieDb -> IndexQueue -> IO IdeState
331
+ let getIdeState :: LSP. LanguageContextEnv Config -> Maybe FilePath -> WithHieDb -> IndexQueue -> IO IdeState
351
332
getIdeState env rootPath withHieDb hieChan = do
352
333
traverse_ IO. setCurrentDirectory rootPath
353
334
t <- t
0 commit comments