module Development.IDE.LSP.Hover
( setHandlersHover
) where
import Language.Haskell.LSP.Types
import Development.IDE.Types.Location
import Development.IDE.Core.Service
import Development.IDE.LSP.Server
import Development.IDE.Types.Logger
import qualified Language.Haskell.LSP.Core as LSP
import Language.Haskell.LSP.Messages
import qualified Data.Text as T
import Development.IDE.Core.Rules
onHover
:: IdeState
-> TextDocumentPositionParams
-> IO (Maybe Hover)
onHover ide (TextDocumentPositionParams (TextDocumentIdentifier uri) pos) = do
mbResult <- case uriToFilePath' uri of
Just (toNormalizedFilePath -> filePath) -> do
logInfo (ideLogger ide) $
"Hover request at position " <> T.pack (showPosition pos) <>
" in file: " <> T.pack (fromNormalizedFilePath filePath)
runAction ide $ getAtPoint filePath pos
Nothing -> pure Nothing
case mbResult of
Just (mbRange, contents) ->
pure $ Just $ Hover
(HoverContents $ MarkupContent MkMarkdown $ T.intercalate sectionSeparator contents)
mbRange
Nothing -> pure Nothing
setHandlersHover :: PartialHandlers
setHandlersHover = PartialHandlers $ \WithMessage{..} x -> return x{
LSP.hoverHandler = withResponse RspHover $ const onHover
}