1
0
Fork 0

Update php-parser to latest commit (#119)

pull/120/head
Felix Becker 2016-10-26 22:25:24 +02:00 committed by GitHub
parent ed41df0062
commit 18e58b4ce8
5 changed files with 37 additions and 21 deletions

View File

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

25
src/Parser.php Normal file
View File

@ -0,0 +1,25 @@
<?php
namespace LanguageServer;
use PhpParser;
/**
* Custom PHP Parser class configured for our needs
*/
class Parser extends PhpParser\Parser\Php7
{
public function __construct()
{
$lexer = new PhpParser\Lexer([
'usedAttributes' => [
'comments',
'startLine',
'endLine',
'startFilePos',
'endFilePos'
]
]);
parent::__construct($lexer);
}
}

View File

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

View File

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

View File

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