Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x

TestClassesProtectedPropertyModulesRule.php

Namespace

mglaman\PHPStanDrupal\Rules\Drupal

File

vendor/mglaman/phpstan-drupal/src/Rules/Drupal/TestClassesProtectedPropertyModulesRule.php

View source
<?php

declare (strict_types=1);
namespace mglaman\PHPStanDrupal\Rules\Drupal;

use PhpParser\Node;
use PHPStan\Analyser\Scope;
use PHPStan\Node\ClassPropertyNode;
use PHPStan\Rules\Rule;
use PHPStan\Rules\RuleErrorBuilder;
use PHPUnit\Framework\TestCase;
use function in_array;
use function sprintf;

/**
 * @implements Rule<ClassPropertyNode>
 */
class TestClassesProtectedPropertyModulesRule implements Rule {
    public function getNodeType() : string {
        return ClassPropertyNode::class;
    }
    
    /**
     * @throws \PHPStan\ShouldNotHappenException
     */
    public function processNode(Node $node, Scope $scope) : array {
        if ($node->getName() !== 'modules') {
            return [];
        }
        $scopeClassReflection = $node->getClassReflection();
        if ($scopeClassReflection->isAnonymous()) {
            return [];
        }
        if (!in_array(TestCase::class, $scopeClassReflection->getParentClassesNames(), true)) {
            return [];
        }
        if ($node->isPublic()) {
            return [
                RuleErrorBuilder::message(sprintf('Property %s::$modules property must be protected.', $scopeClassReflection->getDisplayName()))
                    ->tip('Change record: https://www.drupal.org/node/2909426')
                    ->build(),
            ];
        }
        return [];
    }

}

Classes

Title Deprecated Summary
TestClassesProtectedPropertyModulesRule @implements Rule<ClassPropertyNode>
RSS feed
Powered by Drupal