-- Maintainer : luke_lau@icloud.com
-- Stability : experimental
--
--- A framework for testing <https://github.com/Microsoft/language-server-protocol Language Server Protocol servers> at the JSON level.
+-- A framework for testing
+-- <https://github.com/Microsoft/language-server-protocol Language Server Protocol servers>
+-- functionally.
module Language.Haskell.LSP.Test
(
, getCompletions
-- ** References
, getReferences
+ -- ** Definitions
+ , getDefinitions
-- ** Renaming
, rename
+ -- ** Hover
+ , getHover
+ -- ** Highlights
+ , getHighlights
-- ** Edits
, applyEdit
) where
getReferences doc pos inclDecl =
let ctx = ReferenceContext inclDecl
params = ReferenceParams doc pos ctx
- in fromMaybe [] . (^. result) <$> sendRequest TextDocumentReferences params
+ in getResponseResult <$> sendRequest TextDocumentReferences params
+
+-- | Returns the definition(s) for the term at the specified position.
+getDefinitions :: TextDocumentIdentifier -- ^ The document the term is in.
+ -> Position -- ^ The position the term is at.
+ -> Session [Location] -- ^ The location(s) of the definitions
+getDefinitions doc pos =
+ let params = TextDocumentPositionParams doc pos
+ in getResponseResult <$> sendRequest TextDocumentDefinition params
-- ^ Renames the term at the specified position.
rename :: TextDocumentIdentifier -> Position -> String -> Session ()
req = RequestMessage "" (IdInt 0) WorkspaceApplyEdit (ApplyWorkspaceEditParams wEdit)
updateState (ReqApplyWorkspaceEdit req)
+-- ^ Returns the hover information at the specified position.
+getHover :: TextDocumentIdentifier -> Position -> Session (Maybe Hover)
+getHover doc pos =
+ let params = TextDocumentPositionParams doc pos
+ in getResponseResult <$> sendRequest TextDocumentHover params
+
+getHighlights :: TextDocumentIdentifier -> Position -> Session [DocumentHighlight]
+getHighlights doc pos =
+ let params = TextDocumentPositionParams doc pos
+ in getResponseResult <$> sendRequest TextDocumentDocumentHighlight params
+
-- | Checks the response for errors and throws an exception if needed.
-- Returns the result if successful.
getResponseResult :: ResponseMessage a -> a