mirror of
https://github.com/danog/psalm.git
synced 2024-11-26 20:34:47 +01:00
Use a more fault-tolerant version of php-parser
This commit is contained in:
parent
3c3224591a
commit
1d6c441d16
@ -577,8 +577,16 @@ class FileChecker extends SourceChecker implements StatementsSource
|
||||
|
||||
$parser = (new ParserFactory())->create(ParserFactory::PREFER_PHP7, $lexer);
|
||||
|
||||
$error_handler = new \PhpParser\ErrorHandler\Collecting();
|
||||
|
||||
/** @var array<int, \PhpParser\Node\Stmt> */
|
||||
$stmts = $parser->parse($file_contents);
|
||||
$stmts = $parser->parse($file_contents, $error_handler);
|
||||
|
||||
if (!$stmts && $error_handler->hasErrors()) {
|
||||
foreach ($error_handler->getErrors() as $error) {
|
||||
throw $error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($parser_cache_directory && $cache_location) {
|
||||
|
62
tests/BadFormatTest.php
Normal file
62
tests/BadFormatTest.php
Normal file
@ -0,0 +1,62 @@
|
||||
<?php
|
||||
namespace Psalm\Tests;
|
||||
|
||||
use PhpParser\ParserFactory;
|
||||
use PHPUnit_Framework_TestCase;
|
||||
use Psalm\Checker\FileChecker;
|
||||
use Psalm\Config;
|
||||
use Psalm\Context;
|
||||
|
||||
class BadFormatTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
/** @var \PhpParser\Parser */
|
||||
protected static $parser;
|
||||
|
||||
/** @var TestConfig */
|
||||
protected static $config;
|
||||
|
||||
/** @var \Psalm\Checker\ProjectChecker */
|
||||
protected $project_checker;
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public static function setUpBeforeClass()
|
||||
{
|
||||
self::$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
|
||||
self::$config = new TestConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
FileChecker::clearCache();
|
||||
$this->project_checker = new \Psalm\Checker\ProjectChecker();
|
||||
$this->project_checker->setConfig(self::$config);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function testMissingSemicolon()
|
||||
{
|
||||
$this->project_checker->registerFile(
|
||||
getcwd() . '/somefile.php',
|
||||
'<?php
|
||||
class A {
|
||||
/** @var int|null */
|
||||
protected $hello;
|
||||
|
||||
/** @return void */
|
||||
function foo() {
|
||||
$this->hello = 5
|
||||
}
|
||||
}'
|
||||
);
|
||||
|
||||
$file_checker = new FileChecker(getcwd() . '/somefile.php', $this->project_checker);
|
||||
$file_checker->visitAndAnalyzeMethods();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user