Make JSON parsing errors more consistent

This commit is contained in:
Eugene Yokota 2020-06-11 20:31:13 -04:00
parent cad84afc6d
commit 033ff1d8a5
2 changed files with 17 additions and 13 deletions

View File

@ -145,7 +145,10 @@ final class NetworkChannel(
case Some(_) => case Some(_) =>
state = InHeader state = InHeader
process() process()
case _ => log.error("Got invalid chunk from client: " + str) case _ =>
val msg = s"got invalid chunk from client: $str"
log.error(msg)
logMessage("error", msg)
} }
} }
case _ => () case _ => ()
@ -226,15 +229,15 @@ final class NetworkChannel(
onNotification(ntf) onNotification(ntf)
} catch { } catch {
case LangServerError(code, message) => case LangServerError(code, message) =>
logMessage("error", s"Error $code while handling notification: $message") logMessage("error", s"error $code while handling notification: $message")
} }
case Right(msg) => case Right(msg) =>
log.debug(s"Unhandled message: $msg") log.debug(s"unhandled message: $msg")
case Left(errorDesc) => case Left(errorDesc) =>
logMessage( val msg =
"error", s"got invalid chunk from client (${new String(chunk.toArray, "UTF-8")}): $errorDesc"
s"Got invalid chunk from client (${new String(chunk.toArray, "UTF-8")}): $errorDesc" log.error(msg)
) logMessage("error", msg)
} }
} }

View File

@ -175,22 +175,23 @@ object Serialization {
if ((fields find { _.field == "id" }).isDefined) if ((fields find { _.field == "id" }).isDefined)
Converter.fromJson[JsonRpcRequestMessage](json) match { Converter.fromJson[JsonRpcRequestMessage](json) match {
case Success(request) => Right(request) case Success(request) => Right(request)
case Failure(e) => Left(s"Conversion error: ${e.getMessage}") case Failure(e) => Left(s"conversion error: ${e.getMessage}")
} }
else else
Converter.fromJson[JsonRpcNotificationMessage](json) match { Converter.fromJson[JsonRpcNotificationMessage](json) match {
case Success(notification) => Right(notification) case Success(notification) => Right(notification)
case Failure(e) => Left(s"Conversion error: ${e.getMessage}") case Failure(e) => Left(s"conversion error: ${e.getMessage}")
} }
} else } else if ((fields find { _.field == "id" }).isDefined)
Converter.fromJson[JsonRpcResponseMessage](json) match { Converter.fromJson[JsonRpcResponseMessage](json) match {
case Success(res) => Right(res) case Success(res) => Right(res)
case Failure(e) => Left(s"Conversion error: ${e.getMessage}") case Failure(e) => Left(s"conversion error: ${e.getMessage}")
} }
else Left(s"expected JSON-RPC object but found ${new String(bytes.toArray, "UTF-8")}")
case Success(json) => case Success(json) =>
Left(s"Expected JSON object but found $json") Left(s"expected JSON object but found ${new String(bytes.toArray, "UTF-8")}")
case Failure(e) => case Failure(e) =>
Left(s"Parse error: ${e.getMessage}") Left(s"parse error: ${e.getMessage}")
} }
} }