From fcc9ac714b132c3692a22540892ddd0686712261 Mon Sep 17 00:00:00 2001 From: Felix Becker Date: Fri, 18 Nov 2016 13:04:28 +0100 Subject: [PATCH] Add size limit back --- src/ContentTooLargeException.php | 45 ++++++++++++++++++++++++++++++++ src/LanguageServer.php | 7 ++++- src/Project.php | 6 +++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/ContentTooLargeException.php diff --git a/src/ContentTooLargeException.php b/src/ContentTooLargeException.php new file mode 100644 index 0000000..8e615ab --- /dev/null +++ b/src/ContentTooLargeException.php @@ -0,0 +1,45 @@ +uri = $uri; + $this->size = $size; + $this->limit = $limit; + parent::__construct("$uri exceeds size limit of $limit bytes ($size)", 0, $previous); + } +} diff --git a/src/LanguageServer.php b/src/LanguageServer.php index c94f2bc..a2c1f52 100644 --- a/src/LanguageServer.php +++ b/src/LanguageServer.php @@ -183,11 +183,16 @@ class LanguageServer extends AdvancedJsonRpc\Dispatcher // Give LS to the chance to handle requests while indexing yield timeout(); $this->client->window->logMessage( - MessageType::INFO, + MessageType::LOG, "Parsing file $i/$count: {$textDocument->uri}" ); try { yield $this->project->loadDocument($textDocument->uri); + } catch (ContentTooLargeException $e) { + $this->client->window->logMessage( + MessageType::INFO, + "Ignoring file {$textDocument->uri} because it exceeds size limit of {$e->limit} bytes ({$e->size})" + ); } catch (Exception $e) { $this->client->window->logMessage( MessageType::ERROR, diff --git a/src/Project.php b/src/Project.php index e6c1dbd..4efcf71 100644 --- a/src/Project.php +++ b/src/Project.php @@ -108,6 +108,12 @@ class Project } else { $content = file_get_contents(uriToPath($uri)); } + // Don't parse large files + $size = strlen($content); + $limit = 150000; + if ($size > $limit) { + throw new ContentTooLargeException($uri, $size, $limit); + } if (isset($this->documents[$uri])) { $document = $this->documents[$uri]; $document->updateContent($content);