From 953a8023b777736c22060e39501a1b5067f59020 Mon Sep 17 00:00:00 2001 From: Felix Becker Date: Thu, 20 Oct 2016 03:31:12 +0200 Subject: [PATCH] Update AdvancedJsonRpc (#103) --- composer.json | 2 +- src/LanguageServer.php | 26 +++++++++++--------------- tests/LanguageServerTest.php | 7 +++---- 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/composer.json b/composer.json index 468c292..5f52bca 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,7 @@ "nikic/php-parser": "dev-master#90834bff8eaf7b7f893253f312e73d8f532341ca", "phpdocumentor/reflection-docblock": "^3.0", "sabre/event": "^4.0", - "felixfbecker/advanced-json-rpc": "^1.2", + "felixfbecker/advanced-json-rpc": "^2.0", "squizlabs/php_codesniffer" : "^2.7", "symfony/debug": "^3.1" }, diff --git a/src/LanguageServer.php b/src/LanguageServer.php index 389b99c..a58ada9 100644 --- a/src/LanguageServer.php +++ b/src/LanguageServer.php @@ -12,11 +12,12 @@ use LanguageServer\Protocol\{ MessageType, InitializeResult }; -use AdvancedJsonRpc\{Dispatcher, ResponseError, Response as ResponseBody, Request as RequestBody}; +use AdvancedJsonRpc; use Sabre\Event\Loop; use Exception; +use Throwable; -class LanguageServer extends \AdvancedJsonRpc\Dispatcher +class LanguageServer extends AdvancedJsonRpc\Dispatcher { /** * Handles textDocument/* method calls @@ -48,27 +49,22 @@ class LanguageServer extends \AdvancedJsonRpc\Dispatcher parent::__construct($this, '/'); $this->protocolReader = $reader; $this->protocolReader->onMessage(function (Message $msg) { - $err = null; - $result = null; try { // Invoke the method handler to get a result $result = $this->dispatch($msg->body); - } catch (ResponseError $e) { + $responseBody = new AdvancedJsonRpc\SuccessResponse($msg->body->id, $result); + } catch (AdvancedJsonRpc\Error $error) { // If a ResponseError is thrown, send it back in the Response (result will be null) - $err = $e; + $responseBody = new AdvancedJsonRpc\ErrorResponse($msg->body->id, $error); } catch (Throwable $e) { - // If an unexpected error occured, send back an INTERNAL_ERROR error response (result will be null) - $err = new ResponseError( - $e->getMessage(), - $e->getCode() === 0 ? ErrorCode::INTERNAL_ERROR : $e->getCode(), - null, - $e - ); + // If an unexpected error occured, send back an INTERNAL_ERROR error response + $error = new AdvancedJsonRpc\Error($e->getMessage(), AdvancedJsonRpc\ErrorCode::INTERNAL_ERROR, null, $e); + $responseBody = new AdvancedJsonRpc\ErrorResponse($msg->body->id, $error); } // Only send a Response for a Request // Notifications do not send Responses - if (RequestBody::isRequest($msg->body)) { - $this->protocolWriter->write(new Message(new ResponseBody($msg->body->id, $result, $err))); + if (AdvancedJsonRpc\Request::isRequest($msg->body)) { + $this->protocolWriter->write(new Message($responseBody)); } }); $this->protocolWriter = $writer; diff --git a/tests/LanguageServerTest.php b/tests/LanguageServerTest.php index d08ed56..18b580e 100644 --- a/tests/LanguageServerTest.php +++ b/tests/LanguageServerTest.php @@ -6,7 +6,7 @@ namespace LanguageServer\Tests; use PHPUnit\Framework\TestCase; use LanguageServer\LanguageServer; use LanguageServer\Protocol\{Message, ClientCapabilities, TextDocumentSyncKind}; -use AdvancedJsonRpc\{Request as RequestBody, Response as ResponseBody}; +use AdvancedJsonRpc; class LanguageServerTest extends TestCase { @@ -19,14 +19,13 @@ class LanguageServerTest extends TestCase $writer->onMessage(function (Message $message) use (&$msg) { $msg = $message; }); - $reader->write(new Message(new RequestBody(1, 'initialize', [ + $reader->write(new Message(new AdvancedJsonRpc\Request(1, 'initialize', [ 'rootPath' => __DIR__, 'processId' => getmypid(), 'capabilities' => new ClientCapabilities() ]))); $this->assertNotNull($msg, 'onMessage callback should be called'); - $this->assertInstanceOf(ResponseBody::class, $msg->body); - $this->assertNull($msg->body->error); + $this->assertInstanceOf(AdvancedJsonRpc\SuccessResponse::class, $msg->body); $this->assertEquals((object)[ 'capabilities' => (object)[ 'textDocumentSync' => TextDocumentSyncKind::FULL,