Avoid error when trying to shutdown manual js session
[lsp-test.git] / src / Language / Haskell / LSP / Test / Decoding.hs
index 27c7770ec461cdebe16a17868419b440f986081a..52c84a4168080e7b687d0a67b8859c2a4a964885 100644 (file)
@@ -32,7 +32,7 @@ getNextMessage :: Handle -> IO B.ByteString
 getNextMessage h = do
   headers <- getHeaders h
   case read . init <$> lookup "Content-Length" headers of
-    Nothing   -> error "Couldn't read Content-Length header"
+    Nothing   -> throw NoContentLengthHeader
     Just size -> B.hGet h size
 
 addHeader :: B.ByteString -> B.ByteString
@@ -94,7 +94,7 @@ getRequestMap = foldl helper HM.empty
 matchResponseMsgType :: ClientMethod -> B.ByteString -> FromServerMessage
 matchResponseMsgType req = case req of
   Initialize                    -> RspInitialize . decoded
-  Shutdown                      -> RspShutdown . decoded
+  Shutdown                      -> RspShutdown . decoded . removeNullResult
   TextDocumentHover             -> RspHover . decoded
   TextDocumentCompletion        -> RspCompletion . decoded
   CompletionItemResolve         -> RspCompletionItemResolve . decoded
@@ -120,6 +120,7 @@ matchResponseMsgType req = case req of
   where decoded x = fromMaybe (error $ "Couldn't decode response for the request type: "
                                         ++ show req ++ "\n" ++ show x)
                               (decode x)
+        removeNullResult x = maybe x (<> "}") (B.stripSuffix ",\"result\":null}" x)
 
 decodeFromServerMsg :: RequestMap -> B.ByteString -> FromServerMessage
 decodeFromServerMsg reqMap bytes =