Skip to content

Commit

Permalink
Bump Psalm minimum version to 4.x
Browse files Browse the repository at this point in the history
Sander Bol committed Jul 21, 2021
1 parent bdafd7c commit 447bbc3
Showing 2 changed files with 12 additions and 28 deletions.
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
@@ -21,8 +21,8 @@
"require": {
"ext-simplexml": "*",
"php": "^7.2|^8.0",
"shoot/shoot": "^3.1",
"vimeo/psalm": "^3.2"
"shoot/shoot": "^3.2",
"vimeo/psalm": "^4.8"
},
"autoload": {
"psr-4": {
36 changes: 10 additions & 26 deletions src/Analyzers/PresentationModelAnalyzer.php
Original file line number Diff line number Diff line change
@@ -3,43 +3,27 @@

namespace Shoot\PsalmPlugin\Analyzers;

use PhpParser\Node\Stmt\ClassLike;
use Psalm\Codebase;
use Psalm\FileManipulation;
use Psalm\Internal\Analyzer\ClassLikeAnalyzer;
use Psalm\IssueBuffer;
use Psalm\Plugin\Hook\AfterClassLikeAnalysisInterface;
use Psalm\StatementsSource;
use Psalm\Storage\ClassLikeStorage;
use Psalm\Plugin\EventHandler\AfterClassLikeAnalysisInterface;
use Psalm\Plugin\EventHandler\Event\AfterClassLikeAnalysisEvent;
use Psalm\Storage\PropertyStorage;
use Shoot\PsalmPlugin\Issues\InvalidPresentationModelFieldCasing;
use Shoot\PsalmPlugin\Issues\InvalidPresentationModelFieldVisibility;
use Shoot\Shoot\PresentationModel;

final class PresentationModelAnalyzer implements AfterClassLikeAnalysisInterface
{
/**
* @param ClassLike $statement
* @param ClassLikeStorage $class
* @param StatementsSource $source
* @param Codebase $codebase
* @param FileManipulation[] $fileManipulations
*
* @return void
*/
public static function afterStatementAnalysis(
ClassLike $statement,
ClassLikeStorage $class,
StatementsSource $source,
Codebase $codebase,
array &$fileManipulations = []
): void {
if (!$codebase->classExtends($class->name, PresentationModel::class)) {
public static function afterStatementAnalysis(AfterClassLikeAnalysisEvent $event): void {
$codebase = $event->getCodebase();
$classLike = $event->getClasslikeStorage();

if (!$codebase->classExtends($classLike->name, PresentationModel::class)) {
return;
}

/** @var PropertyStorage $property */
foreach ($class->properties as $name => $property) {
foreach ($classLike->properties as $name => $property) {
if ($property->location === null) {
continue;
}
@@ -48,14 +32,14 @@ public static function afterStatementAnalysis(
IssueBuffer::accepts(new InvalidPresentationModelFieldCasing(
"'{$name}' must use `snake_casing`, as per Twig's coding standards",
$property->location
), $class->suppressed_issues);
), $classLike->suppressed_issues);
}

if ($property->visibility !== ClassLikeAnalyzer::VISIBILITY_PROTECTED) {
IssueBuffer::accepts(new InvalidPresentationModelFieldVisibility(
"'{$name}' must be `protected` to preserve the presentation model's immutability, while allowing access from the PresentationModel base class",
$property->location
), $class->suppressed_issues);
), $classLike->suppressed_issues);
}
}
}

0 comments on commit 447bbc3

Please sign in to comment.