, response
, notification
, loggingNotification
+ , publishDiagnosticsNotification
-- * Combinators
, choice
, option
, optional
- , skipOptional
, between
, some
, many
, sepBy
, sepBy1
- , sepByNonEmpty
, sepEndBy1
- , sepEndByNonEmpty
, sepEndBy
, endBy1
- , endByNonEmpty
, endBy
, count
- , chainl
- , chainr
- , chainl1
- , chainr1
, manyTill
- , try
- , (<?>)
, skipMany
, skipSome
- , unexpected
- , notFollowedBy
+ , skipManyTill
+ , skipSomeTill
, (<|>)
, satisfy
-- * Utilities
+ , openDoc
, getDocItem
, getDocUri
) where
import Control.Applicative
+import Control.Applicative.Combinators
import Control.Monad
import Control.Monad.IO.Class
import Control.Concurrent
import System.FilePath
import Language.Haskell.LSP.Test.Decoding
import Language.Haskell.LSP.Test.Parsing
-import Text.Parser.Combinators
-- | Starts a new session.
runSession :: FilePath -- ^ The filepath to the root directory for the session.
h <- serverIn <$> ask
liftIO $ B.hPut h $ addHeader (encode msg)
+-- | Opens a text document and sends a notification to the client.
+openDoc :: FilePath -> String -> Session TextDocumentIdentifier
+openDoc file languageId = do
+ item <- getDocItem file languageId
+ sendNotification TextDocumentDidOpen (DidOpenTextDocumentParams item)
+ TextDocumentIdentifier <$> getDocUri file
+
-- | Reads in a text document as the first version.
getDocItem :: FilePath -- ^ The path to the text document to read in.
-> String -- ^ The language ID, e.g "haskell" for .hs files.