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     }