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