Add getReferences
authorLuke Lau <luke_lau@icloud.com>
Thu, 12 Jul 2018 12:53:23 +0000 (13:53 +0100)
committerLuke Lau <luke_lau@icloud.com>
Thu, 12 Jul 2018 12:53:23 +0000 (13:53 +0100)
src/Language/Haskell/LSP/Test.hs
test/Test.hs

index 3ba86905c2d48d6c015812421253fa7319f3a3e6..bc1faa1b7976cfca975a8f72754a07318ca490cf 100644 (file)
@@ -60,6 +60,8 @@ module Language.Haskell.LSP.Test
   , executeCodeAction
   -- ** Completions
   , getCompletions
+  -- ** References
+  , getReferences
   -- ** Edits
   , applyEdit
   ) where
@@ -414,3 +416,9 @@ getCompletions doc pos = do
   case res of
     Completions (List items) -> return items
     CompletionList (CompletionListType _ (List items)) -> return items
+
+getReferences :: TextDocumentIdentifier -> Position -> Bool -> Session [Location]
+getReferences doc pos inclDecl =
+  let ctx = ReferenceContext inclDecl
+      params = ReferenceParams doc pos ctx
+  in fromMaybe [] . (^. result) <$> sendRequest TextDocumentReferences params 
index 1a09b294c60a16dcfd5d33976e69f631971fab48..005018cab300db173de211ab013f4c03af872ced 100644 (file)
@@ -18,7 +18,7 @@ import           Language.Haskell.LSP.Messages
 import           Language.Haskell.LSP.Test
 import           Language.Haskell.LSP.Test.Replay
 import           Language.Haskell.LSP.Types.Capabilities
-import           Language.Haskell.LSP.Types hiding (capabilities, message)
+import           Language.Haskell.LSP.Types as LSP hiding (capabilities, message)
 import           System.Timeout
 
 {-# ANN module ("HLint: ignore Reduce duplication" :: String) #-}
@@ -226,6 +226,19 @@ main = hspec $ do
         item ^. kind `shouldBe` Just CiFunction
         item ^. detail `shouldBe` Just "Items -> IO ()\nMain"
 
+  describe "getReferences" $
+    it "works" $ runSession "hie --lsp" "test/data/renamePass" $ do
+      doc <- openDoc "Desktop/simple.hs" "haskell"
+      let pos = Position 40 3 -- interactWithUser
+          uri = doc ^. LSP.uri
+      refs <- getReferences doc pos True
+      liftIO $ refs `shouldContain` map (Location uri) [
+          mkRange 41 0 41 16
+        , mkRange 75 6 75 22
+        , mkRange 71 6 71 22
+        ]
+    where mkRange sl sc el ec = Range (Position sl sc) (Position el ec)
+
 
 didChangeCaps :: ClientCapabilities
 didChangeCaps = def { _workspace = Just workspaceCaps }