Track upstream
authorMatthew Pickering <matthewtpickering@gmail.com>
Fri, 1 Nov 2019 20:19:57 +0000 (20:19 +0000)
committerMatthew Pickering <matthewtpickering@gmail.com>
Fri, 1 Nov 2019 20:19:57 +0000 (20:19 +0000)
lsp-test.cabal
src/Language/Haskell/LSP/Test.hs
src/Language/Haskell/LSP/Test/Session.hs

index 80283b75b07f32b6844fa2caa3f8445fa86ffd5f..de933570a41f67c5f57302e097b852f93bfff92a 100644 (file)
@@ -56,6 +56,7 @@ library
                      , rope-utf16-splay
                      , text
                      , transformers
+                     , temporary
                      , unordered-containers
   if os(windows)
     build-depends:     Win32
index 22091c3451c16f00d6848502a60dafc0a9edd928..b098bf723ec559763951fd3bde1e991837661751 100644 (file)
@@ -188,7 +188,7 @@ runSessionWithConfig config serverExe caps rootDir session = do
 documentContents :: TextDocumentIdentifier -> Session T.Text
 documentContents doc = do
   vfs <- vfs <$> get
-  let file = vfs Map.! toNormalizedUri (doc ^. uri)
+  let file = vfsMap vfs Map.! toNormalizedUri (doc ^. uri)
   return $ Rope.toText $ Language.Haskell.LSP.VFS._text file
 
 -- | Parses an ApplyEditRequest, checks that it is for the passed document
@@ -449,10 +449,10 @@ executeCodeAction action = do
 -- | Adds the current version to the document, as tracked by the session.
 getVersionedDoc :: TextDocumentIdentifier -> Session VersionedTextDocumentIdentifier
 getVersionedDoc (TextDocumentIdentifier uri) = do
-  fs <- vfs <$> get
+  fs <- vfsMap . vfs <$> get
   let ver =
         case fs Map.!? toNormalizedUri uri of
-          Just (VirtualFile v _ _) -> Just v
+          Just (VirtualFile v _) -> Just v
           _ -> Nothing
   return (VersionedTextDocumentIdentifier uri ver)
 
index b8dbe2ac04797c21ddf2d6b7a4beba3036d67c86..a4532b8f1bc2351243e51b9eee3c5d6cf8f94720 100644 (file)
@@ -70,6 +70,7 @@ import System.Directory
 import System.IO
 import System.Process (ProcessHandle())
 import System.Timeout
+import System.IO.Temp
 
 -- | A session representing one instance of launching and connecting to a server.
 --
@@ -220,8 +221,10 @@ runSessionWithHandles serverIn serverOut serverProc serverHandler config caps ro
   mainThreadId <- myThreadId
 
   let context = SessionContext serverIn absRootDir messageChan reqMap initRsp config caps
-      initState = SessionState (IdInt 0) mempty mempty 0 False Nothing
-      runSession' = runSession context initState
+      initState tmp_dir = SessionState (IdInt 0) (VFS mempty tmp_dir)
+                                       mempty 0 False Nothing
+      runSession' ses = withSystemTempDirectory "lsp-test" $ \tmp_dir ->
+                      runSession context (initState tmp_dir) ses
 
       errorHandler = throwTo mainThreadId :: SessionException -> IO()
       serverListenerLauncher =
@@ -280,8 +283,8 @@ updateState (ReqApplyWorkspaceEdit r) = do
   forM_ bumpedVersions $ \(VersionedTextDocumentIdentifier uri v) ->
     modify $ \s ->
       let oldVFS = vfs s
-          update (VirtualFile oldV t mf) = VirtualFile (fromMaybe oldV v) t mf
-          newVFS = Map.adjust update (toNormalizedUri uri) oldVFS
+          update (VirtualFile oldV t) = VirtualFile (fromMaybe oldV v) t
+          newVFS = updateVFS (Map.adjust update (toNormalizedUri uri)) oldVFS
       in s { vfs = newVFS }
 
   where checkIfNeedsOpened uri = do
@@ -289,7 +292,7 @@ updateState (ReqApplyWorkspaceEdit r) = do
           ctx <- ask
 
           -- if its not open, open it
-          unless (toNormalizedUri uri `Map.member` oldVFS) $ do
+          unless (toNormalizedUri uri `Map.member` (vfsMap oldVFS)) $ do
             let fp = fromJust $ uriToFilePath uri
             contents <- liftIO $ T.readFile fp
             let item = TextDocumentItem (filePathToUri fp) "" 0 contents