mirror of
https://github.com/danog/psalm.git
synced 2025-01-22 13:51:54 +01:00
Merge remote-tracking branch 'hub/5.x' into byref_closure_use
This commit is contained in:
commit
75633cbc6d
@ -133,6 +133,14 @@ final class IssueBuffer
|
||||
*/
|
||||
public static function accepts(CodeIssue $e, array $suppressed_issues = [], bool $is_fixable = false): bool
|
||||
{
|
||||
$config = Config::getInstance();
|
||||
$project_analyzer = ProjectAnalyzer::getInstance();
|
||||
$codebase = $project_analyzer->getCodebase();
|
||||
$event = new BeforeAddIssueEvent($e, $is_fixable, $codebase);
|
||||
if ($config->eventDispatcher->dispatchBeforeAddIssue($event) === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (self::isSuppressed($e, $suppressed_issues)) {
|
||||
return false;
|
||||
}
|
||||
@ -258,11 +266,6 @@ final class IssueBuffer
|
||||
$project_analyzer = ProjectAnalyzer::getInstance();
|
||||
$codebase = $project_analyzer->getCodebase();
|
||||
|
||||
$event = new BeforeAddIssueEvent($e, $is_fixable, $codebase);
|
||||
if ($config->eventDispatcher->dispatchBeforeAddIssue($event) === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$fqcn_parts = explode('\\', get_class($e));
|
||||
$issue_type = array_pop($fqcn_parts);
|
||||
|
||||
|
@ -6,6 +6,7 @@ use PhpParser\Node\Name;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use Psalm\Codebase;
|
||||
use Psalm\Context;
|
||||
use Psalm\Exception\CodeException;
|
||||
use Psalm\Exception\UnpopulatedClasslikeException;
|
||||
use Psalm\Issue\InvalidReturnStatement;
|
||||
use Psalm\Issue\InvalidReturnType;
|
||||
@ -21,6 +22,9 @@ use Psalm\Type;
|
||||
use function array_map;
|
||||
use function array_values;
|
||||
use function get_class;
|
||||
use function getcwd;
|
||||
|
||||
use const DIRECTORY_SEPARATOR;
|
||||
|
||||
class CodebaseTest extends TestCase
|
||||
{
|
||||
@ -246,4 +250,51 @@ class CodebaseTest extends TestCase
|
||||
$this->analyzeFile('somefile.php', new Context);
|
||||
self::assertSame(0, IssueBuffer::getErrorCount());
|
||||
}
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function addingCodeIssueIsMarkedAsRedundant(): void
|
||||
{
|
||||
$this->expectException(CodeException::class);
|
||||
$this->expectExceptionMessage('UnusedPsalmSuppress');
|
||||
|
||||
$this->addFile(
|
||||
(string) getcwd() . DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR . 'somefile.php',
|
||||
'<?php
|
||||
namespace Psalm\CurrentTest;
|
||||
|
||||
/** @psalm-suppress InvalidReturnType */
|
||||
function invalidReturnType(int $value): string
|
||||
{
|
||||
/** @psalm-suppress InvalidReturnStatement */
|
||||
return $value;
|
||||
}
|
||||
echo invalidReturnType(123);
|
||||
',
|
||||
);
|
||||
$eventHandler = new class implements BeforeAddIssueInterface
|
||||
{
|
||||
public static function beforeAddIssue(BeforeAddIssueEvent $event): ?bool
|
||||
{
|
||||
$issue = $event->getIssue();
|
||||
if ($issue->code_location->file_path !== (string) getcwd() . DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR . 'somefile.php') {
|
||||
return null;
|
||||
}
|
||||
if ($issue instanceof InvalidReturnStatement && $event->isFixable() === false) {
|
||||
return false;
|
||||
} elseif ($issue instanceof InvalidReturnType && $event->isFixable() === true) {
|
||||
return false;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
(new PluginRegistrationSocket($this->codebase->config, $this->codebase))
|
||||
->registerHooksFromClass(get_class($eventHandler));
|
||||
|
||||
$this->analyzeFile(
|
||||
(string) getcwd() . DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR . 'somefile.php',
|
||||
new Context,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user