module Datalog.LSP.Hover where import Control.Lens ((^.), Lens') import Data.Maybe (fromJust) import Language.LSP.Protocol.Lens (params, textDocument, uri, HasTextDocument, HasParams, HasUri) import Language.LSP.Protocol.Message import Language.LSP.Protocol.Types import Language.LSP.Server import Language.LSP.VFS (virtualFileText) hoverHandler :: Handlers (LspM ()) hoverHandler = requestHandler SMethod_TextDocumentHover $ \req responder -> do let openUri = toNormalizedUri $ req ^. docUri TRequestMessage _ _ _ (HoverParams _doc pos _workDone) = req Position _l _c' = pos rsp txt = Hover (InL . mkMarkdown $ txt) (Just range) range = Range pos pos c <- fromJust <$> getVirtualFile openUri responder (Right . InL . rsp . virtualFileText $ c) docUri :: (HasParams s s1, HasTextDocument s1 s2, HasUri s2 a) => Lens' s a docUri = params . textDocument . uri