, executeCodeAction
-- ** Completions
, getCompletions
+ -- ** References
+ , getReferences
-- ** Edits
, applyEdit
) where
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
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) #-}
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 }