From 0cb7db8c914ea960df3a49b75799d4f67e437538 Mon Sep 17 00:00:00 2001 From: Michael Morgan Date: Sun, 6 Oct 2019 03:19:59 -0400 Subject: [PATCH 1/2] Implement log level for client messages --- bin/php-language-server.php | 8 +++++--- src/Client/Window.php | 10 +++++++++- src/LanguageClient.php | 4 ++-- src/LanguageServer.php | 5 +++-- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/bin/php-language-server.php b/bin/php-language-server.php index 8e5d348..388b887 100644 --- a/bin/php-language-server.php +++ b/bin/php-language-server.php @@ -4,7 +4,7 @@ use LanguageServer\{LanguageServer, ProtocolStreamReader, ProtocolStreamWriter, use Sabre\Event\Loop; use Composer\XdebugHandler\XdebugHandler; -$options = getopt('', ['tcp::', 'tcp-server::', 'memory-limit::']); +$options = getopt('', ['tcp::', 'tcp-server::', 'memory-limit::', 'log-level::']); ini_set('memory_limit', $options['memory-limit'] ?? '4G'); @@ -69,6 +69,7 @@ if (!empty($options['tcp'])) { while ($socket = stream_socket_accept($tcpServer, -1)) { $logger->debug('Connection accepted'); stream_set_blocking($socket, false); + $logLevel = empty($options['log-level']) ? 4 : $options['log-level']; if ($pcntlAvailable) { // If PCNTL is available, fork a child process for the connection // An exit notification will only terminate the child process @@ -83,7 +84,7 @@ if (!empty($options['tcp'])) { $reader->on('close', function () use ($logger) { $logger->debug('Connection closed'); }); - $ls = new LanguageServer($reader, $writer); + $ls = new LanguageServer($reader, $writer, $logLevel); Loop\run(); // Just for safety exit(0); @@ -93,7 +94,8 @@ if (!empty($options['tcp'])) { // An exit notification will terminate the server $ls = new LanguageServer( new ProtocolStreamReader($socket), - new ProtocolStreamWriter($socket) + new ProtocolStreamWriter($socket), + $logLevel ); Loop\run(); } diff --git a/src/Client/Window.php b/src/Client/Window.php index c3558f5..dee1d19 100644 --- a/src/Client/Window.php +++ b/src/Client/Window.php @@ -15,10 +15,15 @@ class Window * @var ClientHandler */ private $handler; + /** + * @var int + */ + private $logLevel; - public function __construct(ClientHandler $handler) + public function __construct(ClientHandler $handler, $logLevel=4) { $this->handler = $handler; + $this->logLevel = $logLevel; } /** @@ -43,6 +48,9 @@ class Window */ public function logMessage(int $type, string $message): Promise { + if ($type > $this->logLevel) { + return new Promise(); + } return $this->handler->notify('window/logMessage', ['type' => $type, 'message' => $message]); } } diff --git a/src/LanguageClient.php b/src/LanguageClient.php index c68170f..9ee5631 100644 --- a/src/LanguageClient.php +++ b/src/LanguageClient.php @@ -35,13 +35,13 @@ class LanguageClient */ public $xcache; - public function __construct(ProtocolReader $reader, ProtocolWriter $writer) + public function __construct(ProtocolReader $reader, ProtocolWriter $writer, $logLevel=4) { $handler = new ClientHandler($reader, $writer); $mapper = new JsonMapper; $this->textDocument = new Client\TextDocument($handler, $mapper); - $this->window = new Client\Window($handler); + $this->window = new Client\Window($handler, $logLevel); $this->workspace = new Client\Workspace($handler, $mapper); $this->xcache = new Client\XCache($handler); } diff --git a/src/LanguageServer.php b/src/LanguageServer.php index 38dfeb1..513ef15 100644 --- a/src/LanguageServer.php +++ b/src/LanguageServer.php @@ -109,8 +109,9 @@ class LanguageServer extends AdvancedJsonRpc\Dispatcher /** * @param ProtocolReader $reader * @param ProtocolWriter $writer + * @param int $logLevel */ - public function __construct(ProtocolReader $reader, ProtocolWriter $writer) + public function __construct(ProtocolReader $reader, ProtocolWriter $writer, $logLevel=4) { parent::__construct($this, '/'); $this->protocolReader = $reader; @@ -154,7 +155,7 @@ class LanguageServer extends AdvancedJsonRpc\Dispatcher })->otherwise('\\LanguageServer\\crash'); }); $this->protocolWriter = $writer; - $this->client = new LanguageClient($reader, $writer); + $this->client = new LanguageClient($reader, $writer, $logLevel); } /** From b6bace02963d0953953bbf28dd83462397536103 Mon Sep 17 00:00:00 2001 From: Michael Morgan Date: Sun, 6 Oct 2019 03:30:56 -0400 Subject: [PATCH 2/2] Document log-level --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 3e753ac..ff35d49 100644 --- a/README.md +++ b/README.md @@ -190,6 +190,13 @@ Example: php bin/php-language-server.php --memory-limit=256M +#### `--log-level=integer` (optional) +Limit client log messages by severity. Severities are defined in [LanuageServerProtocol\MessageType](https://github.com/felixfbecker/php-language-server-protocol/blob/master/src/MessageType.php). + +Example (Limit logging to ERROR and WARNING only): + + php bin/php-language-server.php --log-level=2 + ## Used by - [VS Code PHP IntelliSense](https://github.com/felixfbecker/vscode-php-intellisense) - [Eclipse Che](https://eclipse.org/che/)