24 lines
915 B
Haskell
24 lines
915 B
Haskell
|
|
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
|