From: Luke Lau Date: Mon, 4 Mar 2019 22:17:37 +0000 (+0000) Subject: Merge pull request #31 from fendor/type-def-req X-Git-Tag: 0.5.1.2~7 X-Git-Url: http://git.lukelau.me/?p=lsp-test.git;a=commitdiff_plain;h=d409af913af1a3cae988cb146e6bcfa4b4f1e0c7;hp=ce7d2fddac05a5912314c1064e455d1729d77a5a Merge pull request #31 from fendor/type-def-req Add Type definition request --- diff --git a/src/Language/Haskell/LSP/Test.hs b/src/Language/Haskell/LSP/Test.hs index 1765c1f..3b40842 100644 --- a/src/Language/Haskell/LSP/Test.hs +++ b/src/Language/Haskell/LSP/Test.hs @@ -65,6 +65,7 @@ module Language.Haskell.LSP.Test , getReferences -- ** Definitions , getDefinitions + , getTypeDefinitions -- ** Renaming , rename -- ** Hover @@ -494,6 +495,14 @@ getDefinitions doc pos = let params = TextDocumentPositionParams doc pos in getResponseResult <$> request TextDocumentDefinition params +-- | Returns the type definition(s) for the term at the specified position. +getTypeDefinitions :: TextDocumentIdentifier -- ^ The document the term is in. + -> Position -- ^ The position the term is at. + -> Session [Location] -- ^ The location(s) of the definitions +getTypeDefinitions doc pos = + let params = TextDocumentPositionParams doc pos + in getResponseResult <$> request TextDocumentTypeDefinition params + -- | Renames the term at the specified position. rename :: TextDocumentIdentifier -> Position -> String -> Session () rename doc pos newName = do diff --git a/src/Language/Haskell/LSP/Test/Decoding.hs b/src/Language/Haskell/LSP/Test/Decoding.hs index 7756734..2cbc41c 100644 --- a/src/Language/Haskell/LSP/Test/Decoding.hs +++ b/src/Language/Haskell/LSP/Test/Decoding.hs @@ -72,6 +72,7 @@ getRequestMap = foldl helper HM.empty (ReqCompletionItemResolve val) -> insert val acc (ReqSignatureHelp val) -> insert val acc (ReqDefinition val) -> insert val acc + (ReqTypeDefinition val) -> insert val acc (ReqFindReferences val) -> insert val acc (ReqDocumentHighlights val) -> insert val acc (ReqDocumentSymbols val) -> insert val acc @@ -99,6 +100,7 @@ matchResponseMsgType req = case req of CompletionItemResolve -> RspCompletionItemResolve . decoded TextDocumentSignatureHelp -> RspSignatureHelp . decoded TextDocumentDefinition -> RspDefinition . decoded + TextDocumentTypeDefinition -> RspTypeDefinition . decoded TextDocumentReferences -> RspFindReferences . decoded TextDocumentDocumentHighlight -> RspDocumentHighlights . decoded TextDocumentDocumentSymbol -> RspDocumentSymbols . decoded diff --git a/src/Language/Haskell/LSP/Test/Messages.hs b/src/Language/Haskell/LSP/Test/Messages.hs index 4c1141d..02fa7fc 100644 --- a/src/Language/Haskell/LSP/Test/Messages.hs +++ b/src/Language/Haskell/LSP/Test/Messages.hs @@ -13,6 +13,7 @@ isServerResponse (RspCompletion _) = True isServerResponse (RspCompletionItemResolve _) = True isServerResponse (RspSignatureHelp _) = True isServerResponse (RspDefinition _) = True +isServerResponse (RspTypeDefinition _) = True isServerResponse (RspFindReferences _) = True isServerResponse (RspDocumentHighlights _) = True isServerResponse (RspDocumentSymbols _) = True diff --git a/test/Test.hs b/test/Test.hs index f73c186..0fc2f53 100644 --- a/test/Test.hs +++ b/test/Test.hs @@ -259,6 +259,13 @@ main = hspec $ do defs <- getDefinitions doc pos liftIO $ defs `shouldBe` [Location (doc ^. uri) (mkRange 28 0 28 7)] + -- describe "getTypeDefinitions" $ + -- it "works" $ runSession "hie" fullCaps "test/data/renamePass" $ do + -- doc <- openDoc "Desktop/simple.hs" "haskell" + -- let pos = Position 20 23 -- Quit value + -- defs <- getTypeDefinitions doc pos + -- liftIO $ defs `shouldBe` [Location (doc ^. uri) (mkRange 10 5 10 12)] -- Type definition + describe "waitForDiagnosticsSource" $ it "works" $ runSession "hie" fullCaps "test/data" $ do openDoc "Error.hs" "haskell"