From 64e496fac94073c437b288b46f220d1f4806f0c3 Mon Sep 17 00:00:00 2001 From: Felix Becker Date: Mon, 22 Aug 2016 17:32:31 +0200 Subject: [PATCH] Update --- composer.json | 7 +- src/Protocol/ClientCapabilites.php | 8 ++ src/Protocol/CompletionItem.php | 79 +++++++++++++ src/Protocol/CompletionKind.php | 27 +++++ src/Protocol/CompletionList.php | 25 ++++ src/Protocol/ContentChangeEvent.php | 32 +++++ src/Protocol/ErrorCode.php | 15 +++ src/Protocol/FileChangeType.php | 24 ++++ src/Protocol/FileEvent.php | 23 ++++ src/Protocol/Hover.php | 23 ++++ src/Protocol/LanguageServer.php | 25 ++++ src/Protocol/Message.php | 11 ++ .../Methods/CompletionItem/ResolveRequest.php | 15 +++ .../Methods/Initialize/InitializeError.php | 14 +++ .../Methods/Initialize/InitializeParams.php | 28 +++++ .../Methods/Initialize/InitializeRequest.php | 14 +++ .../Methods/Initialize/InitializeResponse.php | 15 +++ src/Protocol/Methods/Telemetry/Event.php | 12 ++ .../TextDocument/CompletionRequest.php | 21 ++++ .../TextDocument/CompletionResponse.php | 17 +++ .../Methods/TextDocument/DidChangeParams.php | 26 ++++ .../DidChangeWatchedFilesParams.php | 19 +++ .../Methods/TextDocument/DidCloseParams.php | 21 ++++ .../Methods/TextDocument/DidSaveParams.php | 19 +++ .../Methods/TextDocument/HoverRequest.php | 13 ++ .../Methods/TextDocument/HoverResponse.php | 13 ++ .../Methods/TextDocument/PositionParams.php | 26 ++++ .../Methods/Window/LogMessageParams.php | 26 ++++ .../Methods/Window/MessageActionItem.php | 13 ++ src/Protocol/Methods/Window/MessageType.php | 27 +++++ .../Methods/Window/ShowMessageParams.php | 20 ++++ .../Window/ShowMessageRequestParams.php | 27 +++++ .../DidChangeConfigurationNotification.php | 17 +++ .../DidChangeConfigurationParams.php | 15 +++ src/Protocol/Notification.php | 24 ++++ src/Protocol/Params.php | 8 ++ .../ProtocolServer.php} | 39 +++--- src/Protocol/PublishDiagnosticParams.php | 26 ++++ src/Protocol/Request.php | 43 +++++++ src/Protocol/Response.php | 26 ++++ src/Protocol/ResponseError.php | 26 ++++ src/Protocol/ServerCapabilities.php | 111 ++++++++++++++++++ .../ServerCapabilities/CodeLensOptions.php | 16 +++ .../ServerCapabilities/CompletionOptions.php | 24 ++++ .../DocumentOnTypeFormattingOptions.php | 23 ++++ .../SignatureHelpOptions.php | 16 +++ .../TextDocumentSyncKind.php | 25 ++++ 47 files changed, 1106 insertions(+), 18 deletions(-) create mode 100644 src/Protocol/ClientCapabilites.php create mode 100644 src/Protocol/CompletionItem.php create mode 100644 src/Protocol/CompletionKind.php create mode 100644 src/Protocol/CompletionList.php create mode 100644 src/Protocol/ContentChangeEvent.php create mode 100644 src/Protocol/ErrorCode.php create mode 100644 src/Protocol/FileChangeType.php create mode 100644 src/Protocol/FileEvent.php create mode 100644 src/Protocol/Hover.php create mode 100644 src/Protocol/LanguageServer.php create mode 100644 src/Protocol/Message.php create mode 100644 src/Protocol/Methods/CompletionItem/ResolveRequest.php create mode 100644 src/Protocol/Methods/Initialize/InitializeError.php create mode 100644 src/Protocol/Methods/Initialize/InitializeParams.php create mode 100644 src/Protocol/Methods/Initialize/InitializeRequest.php create mode 100644 src/Protocol/Methods/Initialize/InitializeResponse.php create mode 100644 src/Protocol/Methods/Telemetry/Event.php create mode 100644 src/Protocol/Methods/TextDocument/CompletionRequest.php create mode 100644 src/Protocol/Methods/TextDocument/CompletionResponse.php create mode 100644 src/Protocol/Methods/TextDocument/DidChangeParams.php create mode 100644 src/Protocol/Methods/TextDocument/DidChangeWatchedFilesParams.php create mode 100644 src/Protocol/Methods/TextDocument/DidCloseParams.php create mode 100644 src/Protocol/Methods/TextDocument/DidSaveParams.php create mode 100644 src/Protocol/Methods/TextDocument/HoverRequest.php create mode 100644 src/Protocol/Methods/TextDocument/HoverResponse.php create mode 100644 src/Protocol/Methods/TextDocument/PositionParams.php create mode 100644 src/Protocol/Methods/Window/LogMessageParams.php create mode 100644 src/Protocol/Methods/Window/MessageActionItem.php create mode 100644 src/Protocol/Methods/Window/MessageType.php create mode 100644 src/Protocol/Methods/Window/ShowMessageParams.php create mode 100644 src/Protocol/Methods/Window/ShowMessageRequestParams.php create mode 100644 src/Protocol/Methods/Workspace/DidChangeConfigurationNotification.php create mode 100644 src/Protocol/Methods/Workspace/DidChangeConfigurationParams.php create mode 100644 src/Protocol/Notification.php create mode 100644 src/Protocol/Params.php rename src/{LanguageServer.php => Protocol/ProtocolServer.php} (51%) create mode 100644 src/Protocol/PublishDiagnosticParams.php create mode 100644 src/Protocol/Request.php create mode 100644 src/Protocol/Response.php create mode 100644 src/Protocol/ResponseError.php create mode 100644 src/Protocol/ServerCapabilities.php create mode 100644 src/Protocol/ServerCapabilities/CodeLensOptions.php create mode 100644 src/Protocol/ServerCapabilities/CompletionOptions.php create mode 100644 src/Protocol/ServerCapabilities/DocumentOnTypeFormattingOptions.php create mode 100644 src/Protocol/ServerCapabilities/SignatureHelpOptions.php create mode 100644 src/Protocol/ServerCapabilities/TextDocumentSyncKind.php diff --git a/composer.json b/composer.json index 3fccf7b..fbe3aae 100644 --- a/composer.json +++ b/composer.json @@ -5,13 +5,18 @@ "bin": ["bin/main.php"], "minimum-stability": "dev", "require": { + "php": ">=7.0", "nikic/php-parser": "3.0.0alpha1", "phpdocumentor/reflection-docblock": "^3.0", - "sabre/event": "^3.0" + "sabre/event": "^3.0", + "netresearch/jsonmapper": "^0.11.0" }, "autoload": { "psr-4": { "LanguageServer\\": "src/" } + }, + "require-dev": { + "squizlabs/php_codesniffer": "^2.6" } } diff --git a/src/Protocol/ClientCapabilites.php b/src/Protocol/ClientCapabilites.php new file mode 100644 index 0000000..746791d --- /dev/null +++ b/src/Protocol/ClientCapabilites.php @@ -0,0 +1,8 @@ +on('initialize', function (InitializeRequest $req) { + $res = new InitializeResponse(); + $this->sendResponse($res); + }); + parent::listen(); + } +} diff --git a/src/Protocol/Message.php b/src/Protocol/Message.php new file mode 100644 index 0000000..e043c49 --- /dev/null +++ b/src/Protocol/Message.php @@ -0,0 +1,11 @@ +input, function() use ($buffer, $parsingMode, $headers, $contentLength) { - $buffer .= fgetc($this->output); + Loop\addReadStream($this->input, function() { + $this->buffer .= fgetc($this->output); switch ($parsingMode) { case ParsingMode::HEADERS: if (substr($buffer, -4) === '\r\n\r\n') { - $parsingMode = ParsingMode::BODY; - $contentLength = (int)$headers['Content-Length']; - $buffer = ''; + $this->parsingMode = ParsingMode::BODY; + $this->contentLength = (int)$headers['Content-Length']; + $this->buffer = ''; } else if (substr($buffer, -2) === '\r\n') { $parts = explode(': ', $buffer); $headers[$parts[0]] = $parts[1]; - $buffer = ''; + $this->buffer = ''; } break; case ParsingMode::BODY: if (strlen($buffer) === $contentLength) { - $body = json_decode($buffer); - $this->emit($body->method, [$body->params]); - $parsingMode = ParsingMode::HEADERS; - $buffer = ''; + $req = Request::parse($body); + $this->emit($body->method, [$req]); + $this->parsingMode = ParsingMode::HEADERS; + $this->buffer = ''; } break; } @@ -59,4 +59,9 @@ class LanguageServer extends EventEmitter Loop\run(); } + + public function sendResponse(Response $res) + { + fwrite($this->output, json_encode($res)); + } } diff --git a/src/Protocol/PublishDiagnosticParams.php b/src/Protocol/PublishDiagnosticParams.php new file mode 100644 index 0000000..d81382c --- /dev/null +++ b/src/Protocol/PublishDiagnosticParams.php @@ -0,0 +1,26 @@ +id = $decoded->id; + $request->method = $decoded->method; + $pascalCasedMethod = ucfirst($decoded->method); + $namespace = __NAMESPACE__ . '\\' . str_replace('/', '\\', $pascalCasedMethod); + $className = end(explode('\\', $request->method)) . 'Params'; + $fullyQualifiedName = $namespace . $className; + $mapper->classMap['RequestParams'] = $fullyQualifiedName; + $request = $mapper->map(json_decode($body), new self()); + if (class_exists($fullyQualifiedName)) { + $request->params = new $fullyQualifiedName(); + } + foreach ($request->params as $key => $value) { + $request->{$key} = $value; + } + return $request; + } +} diff --git a/src/Protocol/Response.php b/src/Protocol/Response.php new file mode 100644 index 0000000..3401e47 --- /dev/null +++ b/src/Protocol/Response.php @@ -0,0 +1,26 @@ +