From de1af6a165960bf942e814a0e183e9e2ca45f6e5 Mon Sep 17 00:00:00 2001 From: Felix Becker Date: Thu, 8 Mar 2018 11:48:56 -0800 Subject: [PATCH] refactor: use composer/xdebug-handler (#616) --- README.md | 2 +- bin/php-language-server.php | 37 ++++++++++++++++++++++--------------- composer.json | 3 ++- src/StderrLogger.php | 25 +++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 17 deletions(-) create mode 100644 src/StderrLogger.php diff --git a/README.md b/README.md index 5d95d61..1597536 100644 --- a/README.md +++ b/README.md @@ -211,6 +211,6 @@ The project parses PHPStorm's PHP stubs to get support for PHP builtins. It re-p To debug with xDebug ensure that you have this set as an environment variable - COMPOSER_ALLOW_XDEBUG=1 + PHPLS_ALLOW_XDEBUG=1 This tells the Language Server to not restart without XDebug if it detects that XDebug is enabled (XDebug has a high performance impact). diff --git a/bin/php-language-server.php b/bin/php-language-server.php index 2a2ab69..8e5d348 100644 --- a/bin/php-language-server.php +++ b/bin/php-language-server.php @@ -1,8 +1,8 @@ critical((string)$e); }); @cli_set_process_title('PHP Language Server'); // If XDebug is enabled, restart without it -(new XdebugHandler(Factory::createOutput()))->check(); +$xdebugHandler = new XdebugHandler('PHPLS'); +$xdebugHandler->setLogger($logger); +$xdebugHandler->check(); +unset($xdebugHandler); if (!empty($options['tcp'])) { // Connect to a TCP server $address = $options['tcp']; $socket = stream_socket_client('tcp://' . $address, $errno, $errstr); if ($socket === false) { - fwrite(STDERR, "Could not connect to language client. Error $errno\n$errstr"); + $logger->critical("Could not connect to language client. Error $errno\n$errstr"); exit(1); } stream_set_blocking($socket, false); @@ -53,29 +58,30 @@ if (!empty($options['tcp'])) { $address = $options['tcp-server']; $tcpServer = stream_socket_server('tcp://' . $address, $errno, $errstr); if ($tcpServer === false) { - fwrite(STDERR, "Could not listen on $address. Error $errno\n$errstr"); + $logger->critical("Could not listen on $address. Error $errno\n$errstr"); exit(1); } - fwrite(STDOUT, "Server listening on $address\n"); - if (!extension_loaded('pcntl')) { - fwrite(STDERR, "PCNTL is not available. Only a single connection will be accepted\n"); + $logger->debug("Server listening on $address"); + $pcntlAvailable = extension_loaded('pcntl'); + if (!$pcntlAvailable) { + $logger->notice('PCNTL is not available. Only a single connection will be accepted'); } while ($socket = stream_socket_accept($tcpServer, -1)) { - fwrite(STDOUT, "Connection accepted\n"); + $logger->debug('Connection accepted'); stream_set_blocking($socket, false); - if (extension_loaded('pcntl')) { + if ($pcntlAvailable) { // If PCNTL is available, fork a child process for the connection // An exit notification will only terminate the child process $pid = pcntl_fork(); if ($pid === -1) { - fwrite(STDERR, "Could not fork\n"); + $logger->critical('Could not fork'); exit(1); } else if ($pid === 0) { // Child process $reader = new ProtocolStreamReader($socket); $writer = new ProtocolStreamWriter($socket); - $reader->on('close', function () { - fwrite(STDOUT, "Connection closed\n"); + $reader->on('close', function () use ($logger) { + $logger->debug('Connection closed'); }); $ls = new LanguageServer($reader, $writer); Loop\run(); @@ -94,6 +100,7 @@ if (!empty($options['tcp'])) { } } else { // Use STDIO + $logger->debug('Listening on STDIN'); stream_set_blocking(STDIN, false); $ls = new LanguageServer( new ProtocolStreamReader(STDIN), diff --git a/composer.json b/composer.json index a21535b..085f189 100644 --- a/composer.json +++ b/composer.json @@ -22,12 +22,13 @@ ], "require": { "php": "^7.0", - "composer/composer": "^1.3", + "composer/xdebug-handler": "^1.0", "felixfbecker/advanced-json-rpc": "^3.0.0", "jetbrains/phpstorm-stubs": "dev-master", "microsoft/tolerant-php-parser": "0.0.*", "netresearch/jsonmapper": "^1.0", "phpdocumentor/reflection-docblock": "^4.0.0", + "psr/log": "^1.0", "sabre/event": "^5.0", "sabre/uri": "^2.0", "webmozart/glob": "^4.1", diff --git a/src/StderrLogger.php b/src/StderrLogger.php new file mode 100644 index 0000000..6f3bb38 --- /dev/null +++ b/src/StderrLogger.php @@ -0,0 +1,25 @@ +