X-Git-Url: http://git.lukelau.me/?a=blobdiff_plain;f=src%2FLanguage%2FHaskell%2FLSP%2FTest%2FDecoding.hs;fp=src%2FLanguage%2FHaskell%2FLSP%2FTest%2FDecoding.hs;h=b3929abbf4da57d983015597b929707213cd97c4;hb=a910d74e3d186220c1bbf56f5236ce6e171b259c;hp=059ab344dafad445003e0f066583cd779d5d79a1;hpb=a49c04220da70ad6b6c5aef344b12bd3d3cd10a1;p=lsp-test.git diff --git a/src/Language/Haskell/LSP/Test/Decoding.hs b/src/Language/Haskell/LSP/Test/Decoding.hs index 059ab34..b3929ab 100644 --- a/src/Language/Haskell/LSP/Test/Decoding.hs +++ b/src/Language/Haskell/LSP/Test/Decoding.hs @@ -3,12 +3,15 @@ module Language.Haskell.LSP.Test.Decoding where import Prelude hiding ( id ) import Data.Aeson +import Control.Exception import Control.Lens import qualified Data.ByteString.Lazy.Char8 as B import Data.Maybe import System.IO +import System.IO.Error import Language.Haskell.LSP.Types -import Language.Haskell.LSP.Types.Lens hiding (error) +import Language.Haskell.LSP.Types.Lens + hiding ( error ) import Language.Haskell.LSP.Messages import qualified Data.HashMap.Strict as HM @@ -42,9 +45,12 @@ addHeader content = B.concat getHeaders :: Handle -> IO [(String, String)] getHeaders h = do - l <- hGetLine h + l <- catch (hGetLine h) eofHandler let (name, val) = span (/= ':') l if null val then return [] else ((name, drop 2 val) :) <$> getHeaders h + where eofHandler e + | isEOFError e = error "Language Server unexpectedly terminated" + | otherwise = throw e type RequestMap = HM.HashMap LspId ClientMethod