import Data.Aeson
import Data.Default
import qualified Data.HashMap.Strict as HM
+import Data.Maybe
import qualified Data.Text as T
import Control.Applicative.Combinators
import Control.Concurrent
, 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"
rename doc (Position 1 0) "bar"
documentContents doc >>= liftIO . shouldBe "main = bar\nbar = return 42\n"
+ describe "getHover" $
+ it "works" $ runSession "hie --lsp" "test/data/renamePass" $ do
+ doc <- openDoc "Desktop/simple.hs" "haskell"
+ -- hover returns nothing until module is loaded
+ 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"
+ skipManyTill loggingNotification $ count 2 noDiagnostics
+ 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)
+
+ describe "closeDoc" $
+ it "works" $
+ let sesh =
+ runSession "hie --lsp" "test/data" $ do
+ doc <- openDoc "Format.hs" "haskell"
+ closeDoc doc
+ -- need to evaluate to throw
+ documentContents doc >>= liftIO . print
+ in sesh `shouldThrow` anyException
+
mkRange sl sc el ec = Range (Position sl sc) (Position el ec)
didChangeCaps :: ClientCapabilities