From ab5850364d484f02d651cd3367d3cf3e35925728 Mon Sep 17 00:00:00 2001 From: Matthijs Kooijman Date: Mon, 7 Sep 2020 01:31:49 +0200 Subject: [PATCH] Fixes to LSP protocol (#4143) * Fix missing parameter in LSP textDocument.didChange This parameter was accepted, but not documented. Since the JSON-RPC Dispatcher looks at the comments for type information, it would fail to find info and produce: PHP Notice: Undefined offset: 1 in vendor/felixfbecker/advanced-json-rpc/lib/Dispatcher.php on line 141 Combined with issue #4142, this ended up violating the protocol. * Ignore out-of-project files in textDocument.completion Other methods, such as didOpen and didChange already checked for this, but completion did not. This would lead to funny behaviour, where triggering completion would cause the file to be analyzed, but only using the on-disk state. And any changes to the file would never be analyzed. This ignores out-of-project files for completion, too. --- src/Psalm/Internal/LanguageServer/Server/TextDocument.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Psalm/Internal/LanguageServer/Server/TextDocument.php b/src/Psalm/Internal/LanguageServer/Server/TextDocument.php index c8c21a8e8..ff67a5623 100644 --- a/src/Psalm/Internal/LanguageServer/Server/TextDocument.php +++ b/src/Psalm/Internal/LanguageServer/Server/TextDocument.php @@ -92,6 +92,7 @@ class TextDocument /** * The document change notification is sent from the client to the server to signal changes to a text document. * + * @param \LanguageServerProtocol\VersionedTextDocumentIdentifier $textDocument * @param \LanguageServerProtocol\TextDocumentContentChangeEvent[] $contentChanges * * @return void @@ -243,6 +244,9 @@ class TextDocument $this->server->doAnalysis(); $file_path = LanguageServer::uriToPath($textDocument->uri); + if (!$this->codebase->config->isInProjectDirs($file_path)) { + return new Success([]); + } try { $completion_data = $this->codebase->getCompletionDataAtPosition($file_path, $position);