, getHover
-- ** Highlights
, getHighlights
+ -- ** Formatting
+ , formatDoc
+ , formatRange
-- ** Edits
, applyEdit
) where
req = RequestMessage "" (IdInt 0) WorkspaceApplyEdit (ApplyWorkspaceEditParams wEdit)
updateState (ReqApplyWorkspaceEdit req)
--- ^ Returns the hover information at the specified position.
+-- | Returns the hover information at the specified position.
getHover :: TextDocumentIdentifier -> Position -> Session (Maybe Hover)
getHover doc pos =
let params = TextDocumentPositionParams doc pos
in getResponseResult <$> sendRequest TextDocumentHover params
+-- | Returns the highlighted occurences of the term at the specified position
getHighlights :: TextDocumentIdentifier -> Position -> Session [DocumentHighlight]
getHighlights doc pos =
let params = TextDocumentPositionParams doc pos
where exc = throw $ UnexpectedResponseError (rsp ^. LSP.id)
(fromJust $ rsp ^. LSP.error)
+-- | Applies formatting to the specified document.
+formatDoc :: TextDocumentIdentifier -> FormattingOptions -> Session ()
+formatDoc doc opts = do
+ let params = DocumentFormattingParams doc opts
+ edits <- getResponseResult <$> sendRequest TextDocumentFormatting params
+ applyTextEdits doc edits
+
+-- | Applies formatting to the specified range in a document.
+formatRange :: TextDocumentIdentifier -> FormattingOptions -> Range -> Session ()
+formatRange doc opts range = do
+ let params = DocumentRangeFormattingParams doc range opts
+ edits <- getResponseResult <$> sendRequest TextDocumentRangeFormatting params
+ applyTextEdits doc edits
+
+applyTextEdits :: TextDocumentIdentifier -> List TextEdit -> Session ()
+applyTextEdits doc edits =
+ let wEdit = WorkspaceEdit (Just (HashMap.singleton (doc ^. uri) edits)) Nothing
+ req = RequestMessage "" (IdInt 0) WorkspaceApplyEdit (ApplyWorkspaceEditParams wEdit)
+ in updateState (ReqApplyWorkspaceEdit req)
+
skipManyTill loggingNotification $ count 2 noDiagnostics
hover <- getHover doc (Position 45 9) -- putStrLn
liftIO $ hover `shouldSatisfy` isJust
+
describe "getHighlights" $
it "works" $ runSession "hie --lsp" "test/data/renamePass" $ do
doc <- openDoc "Desktop/simple.hs" "haskell"
highlights <- getHighlights doc (Position 27 4) -- addItem
liftIO $ length highlights `shouldBe` 4
+ describe "formatDoc" $
+ it "works" $ runSession "hie --lsp" "test/data" $ do
+ doc <- openDoc "Format.hs" "haskell"
+ oldContents <- documentContents doc
+ formatDoc doc (FormattingOptions 4 True)
+ documentContents doc >>= liftIO . (`shouldNotBe` oldContents)
+
+ describe "formatRange" $
+ it "works" $ runSession "hie --lsp" "test/data" $ do
+ doc <- openDoc "Format.hs" "haskell"
+ oldContents <- documentContents doc
+ formatRange doc (FormattingOptions 4 True) (Range (Position 1 10) (Position 2 10))
+ documentContents doc >>= liftIO . (`shouldNotBe` oldContents)
+
mkRange sl sc el ec = Range (Position sl sc) (Position el ec)
didChangeCaps :: ClientCapabilities