1
0
Fork 0

Initial Commit

pull/6/head
Felix Becker 2016-08-12 10:14:36 +02:00
commit b1656f6884
4 changed files with 80 additions and 0 deletions

17
.editorconfig Normal file
View File

@ -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

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
.DS_Store
.vscode
vendor/
composer.lock

42
bin/main.php Normal file
View File

@ -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();

17
composer.json Normal file
View File

@ -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/"
}
}
}