Start work on parser
[lsp-test.git] / src / Language / Haskell / LSP / Test / Parsing.hs
1 {-# LANGUAGE OverloadedStrings #-}
2 module Language.Haskell.LSP.Test.Parsing where
3
4 import Language.Haskell.LSP.Messages
5 import Language.Haskell.LSP.Types
6 import Language.Haskell.LSP.Test.Messages
7 import Text.Parsec hiding (satisfy)
8
9 data MessageParserState = MessageParserState
10
11 type MessageParser = Parsec [FromServerMessage] MessageParserState
12
13 notification :: MessageParser FromServerMessage
14 notification = satisfy isServerNotification
15
16 request :: MessageParser FromServerMessage
17 request = satisfy isServerRequest
18
19 response :: MessageParser FromServerMessage
20 response = satisfy isServerResponse
21
22 satisfy :: (Stream s m a, Eq a, Show a) => (a -> Bool) -> ParsecT s u m a
23 satisfy pred = tokenPrim show nextPos test
24   where nextPos x _ _ = x
25         test x = if pred x then Just x else Nothing
26
27 testLog = NotLogMessage (NotificationMessage "2.0" WindowLogMessage (LogMessageParams MtLog "Hello world"))
28
29 testSymbols = RspDocumentSymbols (ResponseMessage "2.0" (IdRspInt 0) (Just (List [])) Nothing)
30
31 parseMessages :: MessageParser a -> [FromServerMessage] -> Either ParseError a
32 parseMessages parser = runP parser MessageParserState ""