29 lines
1.0 KiB
Haskell
29 lines
1.0 KiB
Haskell
|
|
module Datalog.LSP.Highlight where
|
||
|
|
|
||
|
|
import Control.Lens ((^.), Lens')
|
||
|
|
import Data.Either (fromRight)
|
||
|
|
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
|
||
|
|
|
||
|
|
tokenHandler :: Handlers (LspM ())
|
||
|
|
tokenHandler = requestHandler SMethod_TextDocumentSemanticTokensFull $ \req responder -> do
|
||
|
|
let
|
||
|
|
openUri = toNormalizedUri $ req ^. docUri
|
||
|
|
token =
|
||
|
|
SemanticTokenAbsolute
|
||
|
|
{ _line = 0
|
||
|
|
, _startChar = 0
|
||
|
|
, _length = 5
|
||
|
|
, _tokenType = SemanticTokenTypes_Keyword
|
||
|
|
, _tokenModifiers = []
|
||
|
|
}
|
||
|
|
tokens = fromRight (error "failed") $ makeSemanticTokens defaultSemanticTokensLegend [token]
|
||
|
|
c <- fromJust <$> getVirtualFile openUri
|
||
|
|
responder (Right $ InL tokens)
|
||
|
|
|
||
|
|
docUri :: (HasParams s s1, HasTextDocument s1 s2, HasUri s2 a) => Lens' s a
|
||
|
|
docUri = params . textDocument . uri
|