Merge b6bace0296
into 9dc1656592
commit
8b02bb342b
|
@ -190,6 +190,13 @@ Example:
|
||||||
|
|
||||||
php bin/php-language-server.php --memory-limit=256M
|
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
|
## Used by
|
||||||
- [VS Code PHP IntelliSense](https://github.com/felixfbecker/vscode-php-intellisense)
|
- [VS Code PHP IntelliSense](https://github.com/felixfbecker/vscode-php-intellisense)
|
||||||
- [Eclipse Che](https://eclipse.org/che/)
|
- [Eclipse Che](https://eclipse.org/che/)
|
||||||
|
|
|
@ -4,7 +4,7 @@ use LanguageServer\{LanguageServer, ProtocolStreamReader, ProtocolStreamWriter,
|
||||||
use Sabre\Event\Loop;
|
use Sabre\Event\Loop;
|
||||||
use Composer\XdebugHandler\XdebugHandler;
|
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');
|
ini_set('memory_limit', $options['memory-limit'] ?? '4G');
|
||||||
|
|
||||||
|
@ -69,6 +69,7 @@ if (!empty($options['tcp'])) {
|
||||||
while ($socket = stream_socket_accept($tcpServer, -1)) {
|
while ($socket = stream_socket_accept($tcpServer, -1)) {
|
||||||
$logger->debug('Connection accepted');
|
$logger->debug('Connection accepted');
|
||||||
stream_set_blocking($socket, false);
|
stream_set_blocking($socket, false);
|
||||||
|
$logLevel = empty($options['log-level']) ? 4 : $options['log-level'];
|
||||||
if ($pcntlAvailable) {
|
if ($pcntlAvailable) {
|
||||||
// If PCNTL is available, fork a child process for the connection
|
// If PCNTL is available, fork a child process for the connection
|
||||||
// An exit notification will only terminate the child process
|
// An exit notification will only terminate the child process
|
||||||
|
@ -83,7 +84,7 @@ if (!empty($options['tcp'])) {
|
||||||
$reader->on('close', function () use ($logger) {
|
$reader->on('close', function () use ($logger) {
|
||||||
$logger->debug('Connection closed');
|
$logger->debug('Connection closed');
|
||||||
});
|
});
|
||||||
$ls = new LanguageServer($reader, $writer);
|
$ls = new LanguageServer($reader, $writer, $logLevel);
|
||||||
Loop\run();
|
Loop\run();
|
||||||
// Just for safety
|
// Just for safety
|
||||||
exit(0);
|
exit(0);
|
||||||
|
@ -93,7 +94,8 @@ if (!empty($options['tcp'])) {
|
||||||
// An exit notification will terminate the server
|
// An exit notification will terminate the server
|
||||||
$ls = new LanguageServer(
|
$ls = new LanguageServer(
|
||||||
new ProtocolStreamReader($socket),
|
new ProtocolStreamReader($socket),
|
||||||
new ProtocolStreamWriter($socket)
|
new ProtocolStreamWriter($socket),
|
||||||
|
$logLevel
|
||||||
);
|
);
|
||||||
Loop\run();
|
Loop\run();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,10 +15,15 @@ class Window
|
||||||
* @var ClientHandler
|
* @var ClientHandler
|
||||||
*/
|
*/
|
||||||
private $handler;
|
private $handler;
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $logLevel;
|
||||||
|
|
||||||
public function __construct(ClientHandler $handler)
|
public function __construct(ClientHandler $handler, $logLevel=4)
|
||||||
{
|
{
|
||||||
$this->handler = $handler;
|
$this->handler = $handler;
|
||||||
|
$this->logLevel = $logLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -43,6 +48,9 @@ class Window
|
||||||
*/
|
*/
|
||||||
public function logMessage(int $type, string $message): Promise
|
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]);
|
return $this->handler->notify('window/logMessage', ['type' => $type, 'message' => $message]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,13 +35,13 @@ class LanguageClient
|
||||||
*/
|
*/
|
||||||
public $xcache;
|
public $xcache;
|
||||||
|
|
||||||
public function __construct(ProtocolReader $reader, ProtocolWriter $writer)
|
public function __construct(ProtocolReader $reader, ProtocolWriter $writer, $logLevel=4)
|
||||||
{
|
{
|
||||||
$handler = new ClientHandler($reader, $writer);
|
$handler = new ClientHandler($reader, $writer);
|
||||||
$mapper = new JsonMapper;
|
$mapper = new JsonMapper;
|
||||||
|
|
||||||
$this->textDocument = new Client\TextDocument($handler, $mapper);
|
$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->workspace = new Client\Workspace($handler, $mapper);
|
||||||
$this->xcache = new Client\XCache($handler);
|
$this->xcache = new Client\XCache($handler);
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,8 +109,9 @@ class LanguageServer extends AdvancedJsonRpc\Dispatcher
|
||||||
/**
|
/**
|
||||||
* @param ProtocolReader $reader
|
* @param ProtocolReader $reader
|
||||||
* @param ProtocolWriter $writer
|
* @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, '/');
|
parent::__construct($this, '/');
|
||||||
$this->protocolReader = $reader;
|
$this->protocolReader = $reader;
|
||||||
|
@ -154,7 +155,7 @@ class LanguageServer extends AdvancedJsonRpc\Dispatcher
|
||||||
})->otherwise('\\LanguageServer\\crash');
|
})->otherwise('\\LanguageServer\\crash');
|
||||||
});
|
});
|
||||||
$this->protocolWriter = $writer;
|
$this->protocolWriter = $writer;
|
||||||
$this->client = new LanguageClient($reader, $writer);
|
$this->client = new LanguageClient($reader, $writer, $logLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue