From 12f6e7e7c1d2603712de134477a470bfa72ecf4b Mon Sep 17 00:00:00 2001 From: fendor Date: Tue, 26 Feb 2019 16:44:06 +0100 Subject: [PATCH] Add support for TypeDefinitionRequest --- src/Language/Haskell/LSP/Test.hs | 9 +++++++++ src/Language/Haskell/LSP/Test/Decoding.hs | 2 ++ src/Language/Haskell/LSP/Test/Messages.hs | 1 + test/Test.hs | 7 +++++++ 4 files changed, 19 insertions(+) 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..c5b02e8 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 15 10 19)] -- First constructor + describe "waitForDiagnosticsSource" $ it "works" $ runSession "hie" fullCaps "test/data" $ do openDoc "Error.hs" "haskell" -- 2.30.2