Add getDefinitions
authorLuke Lau <luke_lau@icloud.com>
Sat, 14 Jul 2018 11:12:52 +0000 (12:12 +0100)
committerLuke Lau <luke_lau@icloud.com>
Sat, 14 Jul 2018 11:12:52 +0000 (12:12 +0100)
src/Language/Haskell/LSP/Test.hs
test/Test.hs

index c5090f939c8c669f44e65a5d04d698d2bb7a6350..d4c63110890707bcbb40a2457ffb2ac68b844590 100644 (file)
@@ -9,7 +9,9 @@
 -- 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
   (
@@ -63,6 +65,8 @@ module Language.Haskell.LSP.Test
   , getCompletions
   -- ** References
   , getReferences
+  -- ** Definitions
+  , getDefinitions
   -- ** Renaming
   , rename
   -- ** Edits
@@ -436,7 +440,15 @@ getReferences :: TextDocumentIdentifier -- ^ The document to lookup in.
 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 ()
index 6353e09b99ca5b59503bdad8d65bca5e2ee7ecec..0bd7965e6c28031b96b83d682420268c36fa420e 100644 (file)
@@ -238,6 +238,13 @@ main = hspec $ do
         , mkRange 71 6 71 22
         ]
 
+  describe "getDefinitions" $
+    it "works" $ runSession "hie --lsp" "test/data/renamePass" $ do
+      doc <- openDoc "Desktop/simple.hs" "haskell"
+      let pos = Position 49 25 -- addItem
+      defs <- getDefinitions doc pos
+      liftIO $ defs `shouldBe` [Location (doc ^. uri) (mkRange 28 0 28 7)]
+
   describe "waitForDiagnosticsSource" $
     it "works" $ runSession "hie --lsp" "test/data" $ do
       openDoc "Error.hs" "haskell"