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); } /**