zwirn-0.2.2.0: app/zwirnzi/LSP/Handlers/Completion.hs
module LSP.Handlers.Completion where
import Control.Concurrent (MVar)
import Control.Concurrent.MVar (readMVar)
import Control.Monad.IO.Class (liftIO)
import qualified Data.Map as Map
import qualified Data.Text as T
import LSP.Util (LSP)
import Language.LSP.Protocol.Message (SMethod (..))
import qualified Language.LSP.Protocol.Types as LSP
import Language.LSP.Server (Handlers, requestHandler)
import Zwirn.Language (Environment (..), InterpreterEnv (..))
import Zwirn.Language.Environment (AnnotatedExpression (..))
import Zwirn.Language.Pretty (ppscheme)
import Zwirn.Language.TypeCheck.Types (Scheme)
completionHandler :: MVar Environment -> Handlers LSP
completionHandler envMV = requestHandler SMethod_TextDocumentCompletion $ \_req resp -> do
env <- liftIO $ readMVar envMV
let ks = map (\(k, Annotated _ s _) -> (k, s)) $ Map.toList $ eExpressions $ intEnv env
res = LSP.CompletionList True Nothing (map mkCompletionItem ks)
resp $ Right $ LSP.InR $ LSP.InL res
where
mkCompletionItem :: (T.Text, Scheme) -> LSP.CompletionItem
mkCompletionItem (k, s) =
LSP.CompletionItem
k
Nothing
(Just LSP.CompletionItemKind_Constant)
Nothing
(Just $ ppscheme s)
Nothing
Nothing
Nothing
Nothing
Nothing
Nothing
Nothing
Nothing
Nothing
Nothing
Nothing
Nothing
Nothing
Nothing