From 033ff1d8a514fced55c99e9de2abe6b336f316ff Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 11 Jun 2020 20:31:13 -0400 Subject: [PATCH] Make JSON parsing errors more consistent --- .../sbt/internal/server/NetworkChannel.scala | 17 ++++++++++------- .../main/scala/sbt/protocol/Serialization.scala | 13 +++++++------ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/main/src/main/scala/sbt/internal/server/NetworkChannel.scala b/main/src/main/scala/sbt/internal/server/NetworkChannel.scala index cbf825797..b3bd4e644 100644 --- a/main/src/main/scala/sbt/internal/server/NetworkChannel.scala +++ b/main/src/main/scala/sbt/internal/server/NetworkChannel.scala @@ -145,7 +145,10 @@ final class NetworkChannel( case Some(_) => state = InHeader 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 _ => () @@ -226,15 +229,15 @@ final class NetworkChannel( onNotification(ntf) } catch { 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) => - log.debug(s"Unhandled message: $msg") + log.debug(s"unhandled message: $msg") case Left(errorDesc) => - logMessage( - "error", - s"Got invalid chunk from client (${new String(chunk.toArray, "UTF-8")}): $errorDesc" - ) + val msg = + s"got invalid chunk from client (${new String(chunk.toArray, "UTF-8")}): $errorDesc" + log.error(msg) + logMessage("error", msg) } } diff --git a/protocol/src/main/scala/sbt/protocol/Serialization.scala b/protocol/src/main/scala/sbt/protocol/Serialization.scala index 75ef805ca..86d87f6ca 100644 --- a/protocol/src/main/scala/sbt/protocol/Serialization.scala +++ b/protocol/src/main/scala/sbt/protocol/Serialization.scala @@ -175,22 +175,23 @@ object Serialization { if ((fields find { _.field == "id" }).isDefined) Converter.fromJson[JsonRpcRequestMessage](json) match { case Success(request) => Right(request) - case Failure(e) => Left(s"Conversion error: ${e.getMessage}") + case Failure(e) => Left(s"conversion error: ${e.getMessage}") } else Converter.fromJson[JsonRpcNotificationMessage](json) match { 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 { 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) => - Left(s"Expected JSON object but found $json") + Left(s"expected JSON object but found ${new String(bytes.toArray, "UTF-8")}") case Failure(e) => - Left(s"Parse error: ${e.getMessage}") + Left(s"parse error: ${e.getMessage}") } }