1
0
Fork 0
php-language-server/bin/php-language-server.php

74 lines
2.1 KiB
PHP
Raw Normal View History

2016-08-12 08:14:36 +00:00
<?php
2016-08-25 14:58:57 +00:00
use LanguageServer\{LanguageServer, ProtocolStreamReader, ProtocolStreamWriter};
2016-08-12 08:14:36 +00:00
use Sabre\Event\Loop;
2016-11-06 15:18:53 +00:00
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
2016-11-16 15:57:49 +00:00
use Monolog\Formatter\LineFormatter;
use Monolog\ErrorHandler;
2016-08-12 08:14:36 +00:00
$options = getopt('', ['tcp::', 'memory-limit::']);
ini_set('memory_limit', $options['memory-limit'] ?? -1);
2016-10-10 10:59:07 +00:00
2016-08-25 14:51:34 +00:00
foreach ([__DIR__ . '/../../../autoload.php', __DIR__ . '/../autoload.php', __DIR__ . '/../vendor/autoload.php'] as $file) {
if (file_exists($file)) {
require $file;
break;
}
}
2016-08-12 08:14:36 +00:00
2016-11-16 15:57:49 +00:00
function errorHandler($level, $message, $file, $line) {
// error code is not included in error_reporting
if (!(error_reporting() & $level)) {
return;
}
if ($level !== E_DEPRECATED && $level !== E_USER_DEPRECATED) {
throw new \ErrorException($message, 0, $level, $file, $line);
}
fwrite(STDERR, 'Deprecation Notice: '.$message.' in '.$file.':'.$line.'</warning>');
}
function setupLogging() {
error_reporting(E_ALL | E_STRICT);
set_error_handler('errorHandler');
$formatter = new LineFormatter("[%datetime%] %level_name%: %message% %context% %extra%\n");
$formatter->includeStacktraces(true);
$formatter->ignoreEmptyContextAndExtra(true);
$handler = new StreamHandler(STDERR);
$handler->setFormatter($formatter);
$logger = new Logger('php language server');
$logger->pushHandler($handler);
ErrorHandler::register($logger, false);
}
setupLogging();
2016-10-11 12:50:10 +00:00
@cli_set_process_title('PHP Language Server');
2016-10-11 12:50:10 +00:00
2016-10-19 13:22:08 +00:00
if (!empty($options['tcp'])) {
$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");
fwrite(STDERR, "$errstr\n");
exit(1);
}
$inputStream = $outputStream = $socket;
} else {
$inputStream = STDIN;
$outputStream = STDOUT;
}
stream_set_blocking($inputStream, false);
$server = new LanguageServer(new ProtocolStreamReader($inputStream), new ProtocolStreamWriter($outputStream));
2016-08-25 13:27:14 +00:00
Loop\run();