From 18e58b4ce8f81c4959248822727ef4137c4aafde Mon Sep 17 00:00:00 2001 From: Felix Becker Date: Wed, 26 Oct 2016 22:25:24 +0200 Subject: [PATCH] Update php-parser to latest commit (#119) --- composer.json | 2 +- src/Parser.php | 25 +++++++++++++++++++ src/PhpDocument.php | 17 ++++--------- src/Project.php | 6 ++--- tests/NodeVisitor/DefinitionCollectorTest.php | 8 +++--- 5 files changed, 37 insertions(+), 21 deletions(-) create mode 100644 src/Parser.php diff --git a/composer.json b/composer.json index 5f52bca..b850a00 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "bin": ["bin/php-language-server.php"], "require": { "php": ">=7.0", - "nikic/php-parser": "dev-master#90834bff8eaf7b7f893253f312e73d8f532341ca", + "nikic/php-parser": "dev-master#c0f0edf0441f0ddcff0604407b7600a40993faf2", "phpdocumentor/reflection-docblock": "^3.0", "sabre/event": "^4.0", "felixfbecker/advanced-json-rpc": "^2.0", diff --git a/src/Parser.php b/src/Parser.php new file mode 100644 index 0000000..d6d6d13 --- /dev/null +++ b/src/Parser.php @@ -0,0 +1,25 @@ + [ + 'comments', + 'startLine', + 'endLine', + 'startFilePos', + 'endFilePos' + ] + ]); + parent::__construct($lexer); + } +} diff --git a/src/PhpDocument.php b/src/PhpDocument.php index 02bb854..5033959 100644 --- a/src/PhpDocument.php +++ b/src/PhpDocument.php @@ -13,7 +13,7 @@ use LanguageServer\NodeVisitor\{ ReferencesCollector, VariableReferencesCollector }; -use PhpParser\{Error, Node, NodeTraverser, Parser}; +use PhpParser\{Error, ErrorHandler, Node, NodeTraverser}; use PhpParser\NodeVisitor\NameResolver; use phpDocumentor\Reflection\DocBlockFactory; use function LanguageServer\Fqn\{getDefinedFqn, getVariableDefinition, getReferencedFqn}; @@ -133,19 +133,12 @@ class PhpDocument { $this->content = $content; $stmts = null; - $errors = []; - try { - $stmts = $this->parser->parse($content); - } catch (\PhpParser\Error $e) { - // Lexer can throw errors. e.g for unterminated comments - // unfortunately we don't get a location back - $errors[] = $e; - } - $errors = array_merge($this->parser->getErrors(), $errors); + $errorHandler = new ErrorHandler\Collecting; + $stmts = $this->parser->parse($content, $errorHandler); $diagnostics = []; - foreach ($errors as $error) { + foreach ($errorHandler->getErrors() as $error) { $diagnostics[] = Diagnostic::fromError($error, $this->content, DiagnosticSeverity::ERROR, 'php'); } @@ -154,7 +147,7 @@ class PhpDocument $traverser = new NodeTraverser; // Resolve aliased names to FQNs - $traverser->addVisitor(new NameResolver); + $traverser->addVisitor(new NameResolver($errorHandler)); // Add parentNode, previousSibling, nextSibling attributes $traverser->addVisitor(new ReferencesAdder($this)); diff --git a/src/Project.php b/src/Project.php index c347566..0a5349f 100644 --- a/src/Project.php +++ b/src/Project.php @@ -5,7 +5,6 @@ namespace LanguageServer; use LanguageServer\Protocol\SymbolInformation; use phpDocumentor\Reflection\DocBlockFactory; -use PhpParser\{ParserFactory, Lexer}; class Project { @@ -34,7 +33,7 @@ class Project /** * Instance of the PHP parser * - * @var ParserAbstract + * @var Parser */ private $parser; @@ -56,8 +55,7 @@ class Project { $this->client = $client; - $lexer = new Lexer(['usedAttributes' => ['comments', 'startLine', 'endLine', 'startFilePos', 'endFilePos']]); - $this->parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7, $lexer, ['throwOnError' => false]); + $this->parser = new Parser; $this->docBlockFactory = DocBlockFactory::createInstance(); } diff --git a/tests/NodeVisitor/DefinitionCollectorTest.php b/tests/NodeVisitor/DefinitionCollectorTest.php index 10ec058..1ea7b68 100644 --- a/tests/NodeVisitor/DefinitionCollectorTest.php +++ b/tests/NodeVisitor/DefinitionCollectorTest.php @@ -4,9 +4,9 @@ declare(strict_types = 1); namespace LanguageServer\Tests\Server\TextDocument; use PHPUnit\Framework\TestCase; -use PhpParser\{ParserFactory, NodeTraverser, Node}; +use PhpParser\{NodeTraverser, Node}; use PhpParser\NodeVisitor\NameResolver; -use LanguageServer\{LanguageClient, Project, PhpDocument}; +use LanguageServer\{LanguageClient, Project, PhpDocument, Parser}; use LanguageServer\Tests\MockProtocolStream; use LanguageServer\NodeVisitor\{ReferencesAdder, DefinitionCollector}; use function LanguageServer\pathToUri; @@ -17,7 +17,7 @@ class DefinitionCollectorTest extends TestCase { $client = new LanguageClient(new MockProtocolStream()); $project = new Project($client); - $parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7); + $parser = new Parser; $uri = pathToUri(realpath(__DIR__ . '/../../fixtures/symbols.php')); $document = $project->loadDocument($uri); $traverser = new NodeTraverser; @@ -56,7 +56,7 @@ class DefinitionCollectorTest extends TestCase { $client = new LanguageClient(new MockProtocolStream()); $project = new Project($client); - $parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7); + $parser = new Parser; $uri = pathToUri(realpath(__DIR__ . '/../../fixtures/references.php')); $document = $project->loadDocument($uri); $traverser = new NodeTraverser;