diff --git a/src/Hooks/PreventContainerUsage.php b/src/Hooks/PreventContainerUsage.php index 290bf94..05d6ab6 100644 --- a/src/Hooks/PreventContainerUsage.php +++ b/src/Hooks/PreventContainerUsage.php @@ -14,21 +14,19 @@ use Kafkiansky\ServiceLocatorInterrupter\Issues\ContainerUsed; use PhpParser\Node; use PhpParser\Node\Expr; -use Psalm\Codebase; use Psalm\CodeLocation; -use Psalm\Context; use Psalm\IssueBuffer; -use Psalm\Plugin\Hook\AfterExpressionAnalysisInterface; -use Psalm\Plugin\Hook\AfterFunctionLikeAnalysisInterface; -use Psalm\StatementsSource; -use Psalm\Storage\FunctionLikeStorage; +use Psalm\Plugin\EventHandler\AfterExpressionAnalysisInterface; +use Psalm\Plugin\EventHandler\AfterFunctionLikeAnalysisInterface; +use Psalm\Plugin\EventHandler\Event\AfterExpressionAnalysisEvent; +use Psalm\Plugin\EventHandler\Event\AfterFunctionLikeAnalysisEvent; final class PreventContainerUsage implements AfterFunctionLikeAnalysisInterface, AfterExpressionAnalysisInterface { /** * @var array of container classes that laravel has. */ - private static $containerClasses = [ + private static array $containerClasses = [ 'Illuminate\Container\Container', 'Illuminate\Foundation\Application', ]; @@ -36,7 +34,7 @@ final class PreventContainerUsage implements AfterFunctionLikeAnalysisInterface, /** * @var array of container interfaces that laravel use. */ - private static $containerInterfaces = [ + private static array $containerInterfaces = [ 'Psr\Container\ContainerInterface', 'Illuminate\Contracts\Container\Container', 'Illuminate\Contracts\Foundation\Application', @@ -45,13 +43,10 @@ final class PreventContainerUsage implements AfterFunctionLikeAnalysisInterface, /** * {@inheritdoc} */ - public static function afterStatementAnalysis( - Node\FunctionLike $stmt, - FunctionLikeStorage $classlike_storage, - StatementsSource $statements_source, - Codebase $codebase, - array &$file_replacements = [] - ): ?bool { + public static function afterStatementAnalysis(AfterFunctionLikeAnalysisEvent $event): ?bool + { + $stmt = $event->getStmt(); + if ($stmt instanceof Node\Stmt\ClassMethod) { /** @var Node\Param $param */ foreach ($stmt->params as $param) { @@ -62,9 +57,9 @@ public static function afterStatementAnalysis( ) { IssueBuffer::accepts( new ContainerUsed( - new CodeLocation($statements_source, $param) + new CodeLocation($event->getStatementsSource(), $param) ), - $statements_source->getSuppressedIssues() + $event->getStatementsSource()->getSuppressedIssues() ); } } @@ -76,13 +71,10 @@ public static function afterStatementAnalysis( /** * {@inheritdoc} */ - public static function afterExpressionAnalysis( - Expr $expr, - Context $context, - StatementsSource $statements_source, - Codebase $codebase, - array &$file_replacements = [] - ): ?bool { + public static function afterExpressionAnalysis(AfterExpressionAnalysisEvent $event): ?bool + { + $expr = $event->getExpr(); + if ($expr instanceof Expr\StaticCall) { if ($expr->class->hasAttribute('resolvedName')) { $classOrInterface = $expr->class->getAttribute('resolvedName'); @@ -90,9 +82,9 @@ public static function afterExpressionAnalysis( if (self::isServiceLocatorCall($classOrInterface)) { IssueBuffer::accepts( new ContainerUsed( - new CodeLocation($statements_source, $expr) + new CodeLocation($event->getStatementsSource(), $expr) ), - $statements_source->getSuppressedIssues() + $event->getStatementsSource()->getSuppressedIssues() ); } } @@ -150,8 +142,6 @@ private static function instanceOfContainer(array $parents, array $declaringCont $isContainer = true; break; } - - continue; } return $isContainer; diff --git a/src/Hooks/PreventFacadeCall.php b/src/Hooks/PreventFacadeCall.php index 07eb18a..1f463eb 100644 --- a/src/Hooks/PreventFacadeCall.php +++ b/src/Hooks/PreventFacadeCall.php @@ -13,32 +13,27 @@ use Kafkiansky\ServiceLocatorInterrupter\Issues\FacadeCalled; use PhpParser\Node\Expr; -use Psalm\Codebase; use Psalm\CodeLocation; -use Psalm\Context; use Psalm\IssueBuffer; -use Psalm\Plugin\Hook\AfterExpressionAnalysisInterface; -use Psalm\StatementsSource; +use Psalm\Plugin\EventHandler\AfterExpressionAnalysisInterface; +use Psalm\Plugin\EventHandler\Event\AfterExpressionAnalysisEvent; final class PreventFacadeCall implements AfterExpressionAnalysisInterface { /** * {@inheritdoc} */ - public static function afterExpressionAnalysis( - Expr $expr, - Context $context, - StatementsSource $statements_source, - Codebase $codebase, - array &$file_replacements = [] - ): ?bool { + public static function afterExpressionAnalysis(AfterExpressionAnalysisEvent $event): ?bool + { + $expr = $event->getExpr(); + if ($expr instanceof Expr\StaticCall) { if (self::isFacadeCall($expr->class->getAttribute('resolvedName'))) { IssueBuffer::accepts( new FacadeCalled( - new CodeLocation($statements_source, $expr) + new CodeLocation($event->getStatementsSource(), $expr) ), - $statements_source->getSuppressedIssues() + $event->getStatementsSource()->getSuppressedIssues() ); } } diff --git a/src/Hooks/PreventHelpersUsage.php b/src/Hooks/PreventHelpersUsage.php index 51426d7..dc7ed4b 100644 --- a/src/Hooks/PreventHelpersUsage.php +++ b/src/Hooks/PreventHelpersUsage.php @@ -12,29 +12,23 @@ namespace Kafkiansky\ServiceLocatorInterrupter\Hooks; use Kafkiansky\ServiceLocatorInterrupter\Issues\HelperUsed; -use PhpParser\Node\Expr\FuncCall; -use Psalm\Codebase; use Psalm\CodeLocation; -use Psalm\Context; use Psalm\IssueBuffer; -use Psalm\Plugin\Hook\AfterEveryFunctionCallAnalysisInterface; -use Psalm\StatementsSource; +use Psalm\Plugin\EventHandler\AfterEveryFunctionCallAnalysisInterface; +use Psalm\Plugin\EventHandler\Event\AfterEveryFunctionCallAnalysisEvent; final class PreventHelpersUsage implements AfterEveryFunctionCallAnalysisInterface { - public static function afterEveryFunctionCallAnalysis( - FuncCall $expr, - string $function_id, - Context $context, - StatementsSource $statements_source, - Codebase $codebase - ): void { + public static function afterEveryFunctionCallAnalysis(AfterEveryFunctionCallAnalysisEvent $event): void + { + $expr = $event->getExpr(); + if (self::isServiceLocatorHelperCall($expr->name->toString())) { IssueBuffer::accepts( new HelperUsed( - new CodeLocation($statements_source, $expr) + new CodeLocation($event->getStatementsSource(), $expr) ), - $statements_source->getSuppressedIssues() + $event->getStatementsSource()->getSuppressedIssues() ); } }