never executed always true always false
    1 module Conjure.LSP.Handlers.Format (formatHandler) where
    2 
    3 import Conjure.LSP.Util (sendErrorMessage, withFile)
    4 import Conjure.Language.Parser (prettyPrintWithChecks)
    5 import Conjure.Prelude
    6 import Control.Lens
    7 import Data.Text qualified as T
    8 import Language.LSP.Protocol.Lens (params, textDocument)
    9 import Language.LSP.Protocol.Message
   10 import Language.LSP.Protocol.Types
   11 import Language.LSP.Server (Handlers, LspM, requestHandler)
   12 import Language.LSP.VFS (virtualFileText)
   13 import Prettyprinter qualified as Pr
   14 import Prettyprinter.Render.Text (renderStrict)
   15 
   16 formatHandler :: Handlers (LspM ())
   17 formatHandler = requestHandler SMethod_TextDocumentFormatting $ \req res -> do
   18   let ps = req ^. params . textDocument
   19   withFile ps $ \vf -> do
   20     let txt = virtualFileText vf
   21     case prettyPrintWithChecks txt of
   22       Left err -> do
   23         sendErrorMessage $ T.pack $ show err
   24         pure ()
   25       Right d -> do
   26         let rendered = renderStrict $ Pr.layoutSmart (Pr.LayoutOptions $ Pr.AvailablePerLine 80 0.8) d
   27         res $ Right $ InL $ fullEdit (fromInteger $ toInteger $ Conjure.Prelude.length $ T.lines txt) rendered
   28 
   29 fullEdit :: UInt -> Text -> [TextEdit]
   30 fullEdit t d =
   31   [ TextEdit (Range (Position 0 0) (Position t 0)) (d)
   32   ]