never executed always true always false
1 {-# LANGUAGE DataKinds #-}
2
3 module Conjure.LSP.LanguageServer where
4
5 import Conjure.LSP.Handlers.DocumentSymbol (docSymbolHandler)
6 import Conjure.LSP.Handlers.File (fileHandlers, unhandled)
7 import Conjure.LSP.Handlers.Format (formatHandler)
8 import Conjure.LSP.Handlers.Hover (hoverHandler)
9 import Conjure.LSP.Handlers.Initialize (handleInitialized)
10 import Conjure.LSP.Handlers.SemanticTokens (semanticTokensHandler)
11 import Conjure.LSP.Handlers.Suggestions (suggestionHandler)
12 import Conjure.Prelude
13 import Language.LSP.Protocol.Types
14 import Language.LSP.Server
15
16 data LSPConfig = LSPConfig {}
17
18 startServer :: LSPConfig -> IO ()
19 startServer _ = do
20 _ <- runServer $ conjureLanguageServer
21 return ()
22
23 conjureLanguageServer :: ServerDefinition ()
24 conjureLanguageServer =
25 ServerDefinition
26 { onConfigChange = const $ pure (),
27 doInitialize = \env _req -> pure $ Right env,
28 staticHandlers = handlers,
29 interpretHandler = \env -> Iso (runLspT env) liftIO,
30 options = lspOptions,
31 defaultConfig = def,
32 configSection = "?",
33 parseConfig = \_ _ -> Right ()
34 }
35
36 handlers :: ClientCapabilities -> Handlers (LspM ())
37 handlers _ =
38 mconcat
39 $ unhandled
40 ++ [ fileHandlers,
41 handleInitialized,
42 hoverHandler,
43 docSymbolHandler,
44 semanticTokensHandler,
45 formatHandler,
46 suggestionHandler
47 ]
48
49 syncOptions :: TextDocumentSyncOptions
50 syncOptions =
51 TextDocumentSyncOptions
52 (Just True)
53 (Just TextDocumentSyncKind_Incremental)
54 (Just False)
55 (Just False)
56 (Just $ InR $ SaveOptions $ Just False)
57
58 lspOptions :: Options
59 lspOptions =
60 defaultOptions
61 { optTextDocumentSync = Just syncOptions,
62 optExecuteCommandCommands = Just ["lsp-hello-command"]
63 }