From 9b78d100e96d3ea4c059edbc45d3d084dddcab0a Mon Sep 17 00:00:00 2001 From: Luke Lau Date: Sat, 14 Jul 2018 12:12:52 +0100 Subject: [PATCH] Add getDefinitions --- src/Language/Haskell/LSP/Test.hs | 16 ++++++++++++++-- test/Test.hs | 7 +++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Language/Haskell/LSP/Test.hs b/src/Language/Haskell/LSP/Test.hs index c5090f9..d4c6311 100644 --- a/src/Language/Haskell/LSP/Test.hs +++ b/src/Language/Haskell/LSP/Test.hs @@ -9,7 +9,9 @@ -- Maintainer : luke_lau@icloud.com -- Stability : experimental -- --- A framework for testing at the JSON level. +-- A framework for testing +-- +-- 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 () diff --git a/test/Test.hs b/test/Test.hs index 6353e09..0bd7965 100644 --- a/test/Test.hs +++ b/test/Test.hs @@ -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" -- 2.30.2