Skip to content

Commit

Permalink
Merge pull request #5 from sbol-coolblue/feature/psalm-4.x
Browse files Browse the repository at this point in the history
Support Psalm 4.x
  • Loading branch information
victorwelling authored Jul 29, 2021
2 parents 238b6e0 + 447bbc3 commit 5cd723f
Show file tree
Hide file tree
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
Expand Up @@ -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": {
Expand Down
36 changes: 10 additions & 26 deletions src/Analyzers/PresentationModelAnalyzer.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -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);
}
}
}
Expand Down

0 comments on commit 5cd723f

Please sign in to comment.