never executed always true always false
    1 module Conjure.LSP.Handlers.Hover where
    2 
    3 import Conjure.LSP.Documentation (getDocsForBuiltin)
    4 import Conjure.LSP.Util (ProcessedFile (ProcessedFile), getRelevantRegions, snippet, withProcessedDoc)
    5 import Conjure.Language.Pretty qualified as CPr
    6 import Conjure.Language.Validator (RegionInfo (..), RegionType (..))
    7 import Conjure.Prelude
    8 import Data.Text as T (pack)
    9 import Language.LSP.Protocol.Message
   10 import Language.LSP.Protocol.Types hiding (Definition)
   11 import Language.LSP.Server (Handlers, LspM, requestHandler)
   12 import Prettyprinter
   13 
   14 hoverHandler :: Handlers (LspM ())
   15 hoverHandler = requestHandler SMethod_TextDocumentHover $ \req res -> do
   16   let TRequestMessage _ _ _ (HoverParams _doc pos _workDone) = req
   17   let Position _l _c' = pos
   18   withProcessedDoc _doc $ \(ProcessedFile _ _ st _) -> do
   19     let ranges = getRelevantRegions st pos
   20     texts <- mapM prettySymbol ranges
   21     let ms = InL $ mconcat (catMaybes texts)
   22     let range = Range pos pos
   23     let rsp = Hover ms (Just range)
   24     res (Right $ InL rsp)
   25 
   26 prettySymbol :: RegionInfo -> LspM () (Maybe MarkupContent)
   27 prettySymbol (RegionInfo _ _ dt _ _) = case dt of
   28   Definition nm ty -> return $ Just . snippet . pack . show $ hcat [pretty nm, " : ", pretty . show $ CPr.pretty ty]
   29   LiteralDecl {} -> return Nothing
   30   Ref nm k _ -> return . Just . snippet . pack . show $ hcat [pretty nm, " : ", pretty . show $ CPr.pretty k]
   31   Documentation {} -> liftIO $ getDocsForBuiltin dt
   32   _ -> return Nothing