Update php-parser to latest commit (#119)
parent
ed41df0062
commit
18e58b4ce8
|
@ -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",
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue