@@ -4,7 +4,6 @@ import Control.Exception.Safe (
4
4
Exception (displayException ),
5
5
catchAny ,
6
6
)
7
- import Control.Lens ((^.) )
8
7
import Control.Monad.Extra (concatMapM , unless , when )
9
8
import qualified Data.Aeson as J
10
9
import Data.Default (Default (def ))
@@ -47,18 +46,13 @@ import Development.IDE.Core.Shake (
47
46
)
48
47
import Development.IDE.Core.Tracing (measureMemory )
49
48
import Development.IDE.LSP.LanguageServer (runLanguageServer )
50
- import Development.IDE.LSP.Protocol
51
49
import Development.IDE.Plugin (
52
- Plugin (pluginHandler , pluginRules ),
50
+ Plugin (pluginHandlers , pluginRules ),
53
51
)
54
52
import Development.IDE.Plugin.HLS (asGhcIdePlugin )
55
53
import Development.IDE.Session (SessionLoadingOptions , defaultLoadingOptions , loadSessionWithOptions , setInitialDynFlags )
56
- import Development.IDE.Types.Diagnostics (
57
- ShowDiagnostic (ShowDiag ),
58
- showDiagnosticsColored ,
59
- )
60
54
import Development.IDE.Types.Location (toNormalizedFilePath' )
61
- import Development.IDE.Types.Logger (Logger , logInfo )
55
+ import Development.IDE.Types.Logger (Logger )
62
56
import Development.IDE.Types.Options (
63
57
IdeGhcSession ,
64
58
IdeOptions (optCheckParents , optCheckProject , optReportProgress ),
@@ -71,14 +65,7 @@ import HIE.Bios.Cradle (findCradle)
71
65
import Ide.Plugin.Config (CheckParents (NeverCheck ), Config )
72
66
import Ide.PluginUtils (allLspCmdIds' , getProcessID , pluginDescToIdePlugins )
73
67
import Ide.Types (IdePlugins )
74
- import qualified Language.Haskell.LSP.Core as LSP
75
- import Language.Haskell.LSP.Messages (FromServerMessage )
76
- import Language.Haskell.LSP.Types (
77
- DidChangeConfigurationNotification ,
78
- InitializeRequest ,
79
- LspId (IdInt ),
80
- )
81
- import Language.Haskell.LSP.Types.Lens (initializationOptions , params )
68
+ import qualified Language.LSP.Server as LSP
82
69
import qualified System.Directory.Extra as IO
83
70
import System.Exit (ExitCode (ExitFailure ), exitWith )
84
71
import System.FilePath (takeExtension , takeFileName )
@@ -99,8 +86,7 @@ data Arguments = Arguments
99
86
, argsSessionLoadingOptions :: SessionLoadingOptions
100
87
, argsIdeOptions :: Maybe Config -> Action IdeGhcSession -> IdeOptions
101
88
, argsLspOptions :: LSP. Options
102
- , argsGetInitialConfig :: InitializeRequest -> Either T. Text Config
103
- , argsOnConfigChange :: DidChangeConfigurationNotification -> Either T. Text Config
89
+ , argsOnConfigChange :: IdeState -> J. Value -> IO (Either T. Text Config )
104
90
}
105
91
106
92
defArguments :: HieDb -> IndexQueue -> Arguments
@@ -117,12 +103,9 @@ defArguments hiedb hiechan =
117
103
, argsSessionLoadingOptions = defaultLoadingOptions
118
104
, argsIdeOptions = const defaultIdeOptions
119
105
, argsLspOptions = def {LSP. completionTriggerCharacters = Just " ." }
120
- , argsOnConfigChange = const $ Left " Updating Not supported"
121
- , argsGetInitialConfig = \ x -> case x ^. params . initializationOptions of
122
- Nothing -> Right def
123
- Just v -> case J. fromJSON v of
124
- J. Error err -> Left $ T. pack err
125
- J. Success a -> Right a
106
+ , argsOnConfigChange = \ _ide v -> pure $ case J. fromJSON v of
107
+ J. Error err -> Left $ T. pack err
108
+ J. Success a -> Right a
126
109
}
127
110
128
111
defaultMain :: Arguments -> IO ()
@@ -140,7 +123,7 @@ defaultMain Arguments{..} = do
140
123
t <- offsetTime
141
124
hPutStrLn stderr " Starting LSP server..."
142
125
hPutStrLn stderr " If you are seeing this in a terminal, you probably should have run ghcide WITHOUT the --lsp option!"
143
- runLanguageServer options (pluginHandler plugins) argsGetInitialConfig argsOnConfigChange $ \ getLspId event vfs caps wProg wIndefProg getConfig rootPath -> do
126
+ runLanguageServer options argsOnConfigChange (pluginHandlers plugins) $ \ env vfs rootPath -> do
144
127
t <- t
145
128
hPutStrLn stderr $ " Started LSP server in " ++ showDuration t
146
129
@@ -153,19 +136,16 @@ defaultMain Arguments{..} = do
153
136
`catchAny` (\ e -> (hPutStrLn stderr $ " setInitialDynFlags: " ++ displayException e) >> pure Nothing )
154
137
155
138
sessionLoader <- loadSessionWithOptions argsSessionLoadingOptions $ fromMaybe dir rootPath
156
- config <- getConfig
139
+ config <- LSP. runLspT env LSP. getConfig
157
140
let options = (argsIdeOptions config sessionLoader)
158
141
{ optReportProgress = clientSupportsProgress caps
159
142
}
160
143
rules = argsRules >> pluginRules plugins
144
+ caps = LSP. resClientCapabilities env
161
145
debouncer <- newAsyncDebouncer
162
146
initialise
163
- caps
164
147
rules
165
- getLspId
166
- event
167
- wProg
168
- wIndefProg
148
+ (Just env)
169
149
argsLogger
170
150
debouncer
171
151
options
@@ -195,13 +175,12 @@ defaultMain Arguments{..} = do
195
175
putStrLn " \n Step 3/4: Initializing the IDE"
196
176
vfs <- makeVFSHandle
197
177
debouncer <- newAsyncDebouncer
198
- let dummyWithProg _ _ f = f (const (pure () ))
199
178
sessionLoader <- loadSessionWithOptions argsSessionLoadingOptions dir
200
179
let options = (argsIdeOptions Nothing sessionLoader)
201
- { optCheckParents = NeverCheck
202
- , optCheckProject = False
180
+ { optCheckParents = pure NeverCheck
181
+ , optCheckProject = pure False
203
182
}
204
- ide <- initialise def mainRule ( pure $ IdInt 0 ) (showEvent argsLogger) dummyWithProg ( const ( const id )) argsLogger debouncer options vfs argsHiedb argsHieChan
183
+ ide <- initialise mainRule Nothing argsLogger debouncer options vfs argsHiedb argsHieChan
205
184
206
185
putStrLn " \n Step 4/4: Type checking the files"
207
186
setFilesOfInterest ide $ HashMap. fromList $ map ((,OnDisk ) . toNormalizedFilePath') files
@@ -246,10 +225,3 @@ expandFiles = concatMapM $ \x -> do
246
225
when (null files) $
247
226
fail $ " Couldn't find any .hs/.lhs files inside directory: " ++ x
248
227
return files
249
-
250
- -- | Print an LSP event.
251
- showEvent :: Logger -> FromServerMessage -> IO ()
252
- showEvent _ (EventFileDiagnostics _ [] ) = return ()
253
- showEvent argsLogger (EventFileDiagnostics (toNormalizedFilePath' -> file) diags) =
254
- logInfo argsLogger $ showDiagnosticsColored $ map (file,ShowDiag ,) diags
255
- showEvent argsLogger e = logInfo argsLogger $ T. pack $ show e
0 commit comments