Initial Commit
commit
b1656f6884
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
[*]
|
||||||
|
insert_final_newline = true
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.json,*.yml]
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[composer.json]
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
|
@ -0,0 +1,4 @@
|
||||||
|
.DS_Store
|
||||||
|
.vscode
|
||||||
|
vendor/
|
||||||
|
composer.lock
|
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Sabre\Event\Loop;
|
||||||
|
use Sabre\Event\EventEmitter;
|
||||||
|
|
||||||
|
abstract class ParsingMode {
|
||||||
|
const HEADERS = 1;
|
||||||
|
const BODY = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
$eventEmitter = new EventEmitter();
|
||||||
|
$buffer = '';
|
||||||
|
$parsingMode = ParsingMode::HEADERS;
|
||||||
|
$headers = [];
|
||||||
|
$contentLength = 0;
|
||||||
|
|
||||||
|
Loop\addReadStream(STDIN, function() use ($buffer, $parsingMode, $headers, $contentLength, $eventEmitter) {
|
||||||
|
$buffer .= fgetc(STDIN);
|
||||||
|
switch ($parsingMode) {
|
||||||
|
case ParsingMode::HEADERS:
|
||||||
|
if (substr($buffer, -4) === '\r\n\r\n') {
|
||||||
|
$parsingMode = ParsingMode::BODY;
|
||||||
|
$contentLength = (int)$headers['Content-Length'];
|
||||||
|
$buffer = '';
|
||||||
|
} else if (substr($buffer, -2) === '\r\n') {
|
||||||
|
$parts = explode(': ', $buffer);
|
||||||
|
$headers[$parts[0]] = $parts[1];
|
||||||
|
$buffer = '';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ParsingMode::BODY:
|
||||||
|
if (strlen($buffer) === $contentLength) {
|
||||||
|
$body = json_decode($buffer);
|
||||||
|
$eventEmitter->emit($body->method, [$body->params]);
|
||||||
|
$parsingMode = ParsingMode::HEADERS;
|
||||||
|
$buffer = '';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Loop\run();
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"name": "language-server",
|
||||||
|
"description": "PHP Implementation of the Visual Studio Code Language Server Protocol",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"bin": ["bin/main.php"],
|
||||||
|
"minimum-stability": "dev",
|
||||||
|
"require": {
|
||||||
|
"nikic/php-parser": "3.0.0alpha1",
|
||||||
|
"phpdocumentor/reflection-docblock": "^3.0",
|
||||||
|
"sabre/event": "^3.0"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"LanguageServer\\": "src/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue