diff --git a/composer.json b/composer.json index 6a55eaf..e077453 100644 --- a/composer.json +++ b/composer.json @@ -12,13 +12,13 @@ ], "require": { "php": "~8.3.0 || ~8.4.0", - "phpstan/phpstan": "^1.12.9" + "phpstan/phpstan": "^2" }, "require-dev": { "nette/di": "^3.2.3", "nette/neon": "^3.4.4", - "nikic/php-parser": "^4.19.2 || ^5.2.0", - "phpstan/phpstan-phpunit": "^1.4.0", + "nikic/php-parser": "^4.19.2 || ^5.3.1", + "phpstan/phpstan-phpunit": "^2", "phpunit/phpunit": "^11.4.3", "slam/php-cs-fixer-extensions": "^3.12.0" }, diff --git a/lib/AccessGlobalVariableWithinContextRule.php b/lib/AccessGlobalVariableWithinContextRule.php index c97974f..4a07fb9 100644 --- a/lib/AccessGlobalVariableWithinContextRule.php +++ b/lib/AccessGlobalVariableWithinContextRule.php @@ -7,7 +7,7 @@ use PhpParser\Node; use PhpParser\Node\Expr\Variable; use PHPStan\Analyser\Scope; -use PHPStan\Broker\Broker; +use PHPStan\Reflection\ReflectionProvider; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; @@ -30,10 +30,10 @@ final class AccessGlobalVariableWithinContextRule implements Rule 'argc' => true, 'argv' => true, ]; - private Broker $broker; + private ReflectionProvider $broker; private string $contextBaseClassOrInterface; - public function __construct(Broker $broker, string $contextBaseClassOrInterface) + public function __construct(ReflectionProvider $broker, string $contextBaseClassOrInterface) { $this->broker = $broker; $this->contextBaseClassOrInterface = $contextBaseClassOrInterface; diff --git a/lib/AccessStaticPropertyWithinModelContextRule.php b/lib/AccessStaticPropertyWithinModelContextRule.php index fea08f4..2193161 100644 --- a/lib/AccessStaticPropertyWithinModelContextRule.php +++ b/lib/AccessStaticPropertyWithinModelContextRule.php @@ -7,7 +7,7 @@ use PhpParser\Node; use PhpParser\Node\Expr\StaticPropertyFetch; use PHPStan\Analyser\Scope; -use PHPStan\Broker\Broker; +use PHPStan\Reflection\ReflectionProvider; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; @@ -17,11 +17,11 @@ */ final class AccessStaticPropertyWithinModelContextRule implements Rule { - private Broker $broker; + private ReflectionProvider $broker; private string $modelBaseClassOrInterface; private string $singletonAccessor; - public function __construct(Broker $broker, string $modelBaseClassOrInterface, string $singletonAccessor) + public function __construct(ReflectionProvider $broker, string $modelBaseClassOrInterface, string $singletonAccessor) { $this->broker = $broker; $this->modelBaseClassOrInterface = $modelBaseClassOrInterface; diff --git a/lib/ClassNotationRule.php b/lib/ClassNotationRule.php index 032cbbc..3dc3750 100644 --- a/lib/ClassNotationRule.php +++ b/lib/ClassNotationRule.php @@ -10,7 +10,7 @@ use PhpParser\Node\Stmt\Interface_; use PhpParser\Node\Stmt\Trait_; use PHPStan\Analyser\Scope; -use PHPStan\Broker\Broker; +use PHPStan\Reflection\ReflectionProvider; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; @@ -20,9 +20,9 @@ */ final class ClassNotationRule implements Rule { - private Broker $broker; + private ReflectionProvider $broker; - public function __construct(Broker $broker) + public function __construct(ReflectionProvider $broker) { $this->broker = $broker; } diff --git a/lib/PhpUnitFqcnAnnotationRule.php b/lib/PhpUnitFqcnAnnotationRule.php index 7a1d820..2b5015e 100644 --- a/lib/PhpUnitFqcnAnnotationRule.php +++ b/lib/PhpUnitFqcnAnnotationRule.php @@ -6,7 +6,7 @@ use PhpParser\Node; use PHPStan\Analyser\Scope; -use PHPStan\Broker\Broker; +use PHPStan\Reflection\ReflectionProvider; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; @@ -16,12 +16,12 @@ */ final class PhpUnitFqcnAnnotationRule implements Rule { - private Broker $broker; + private ReflectionProvider $broker; /** @var bool[] */ private array $alreadyParsedDocComments = []; - public function __construct(Broker $broker) + public function __construct(ReflectionProvider $broker) { $this->broker = $broker; } diff --git a/lib/StringToClassRule.php b/lib/StringToClassRule.php index 8b49861..c17c702 100644 --- a/lib/StringToClassRule.php +++ b/lib/StringToClassRule.php @@ -7,7 +7,7 @@ use PhpParser\Node; use PhpParser\Node\Scalar\String_; use PHPStan\Analyser\Scope; -use PHPStan\Broker\Broker; +use PHPStan\Reflection\ReflectionProvider; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; @@ -17,9 +17,9 @@ */ final class StringToClassRule implements Rule { - private Broker $broker; + private ReflectionProvider $broker; - public function __construct(Broker $broker) + public function __construct(ReflectionProvider $broker) { $this->broker = $broker; } diff --git a/lib/SymfonyFilesystemRule.php b/lib/SymfonyFilesystemRule.php index 0f62290..d2d148a 100644 --- a/lib/SymfonyFilesystemRule.php +++ b/lib/SymfonyFilesystemRule.php @@ -8,7 +8,7 @@ use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Name; use PHPStan\Analyser\Scope; -use PHPStan\Broker\Broker; +use PHPStan\Reflection\ReflectionProvider; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; @@ -38,9 +38,9 @@ final class SymfonyFilesystemRule implements Rule 'file_put_contents' => ['dumpFile', 'appendToFile'], ]; - private Broker $broker; + private ReflectionProvider $broker; - public function __construct(Broker $broker) + public function __construct(ReflectionProvider $broker) { $this->broker = $broker; } diff --git a/lib/SymfonyProcessRule.php b/lib/SymfonyProcessRule.php index c8a8b96..fa7e54d 100644 --- a/lib/SymfonyProcessRule.php +++ b/lib/SymfonyProcessRule.php @@ -8,7 +8,7 @@ use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Name; use PHPStan\Analyser\Scope; -use PHPStan\Broker\Broker; +use PHPStan\Reflection\ReflectionProvider; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; @@ -30,9 +30,9 @@ final class SymfonyProcessRule implements Rule 'system' => true, ]; - private Broker $broker; + private ReflectionProvider $broker; - public function __construct(Broker $broker) + public function __construct(ReflectionProvider $broker) { $this->broker = $broker; } diff --git a/lib/UnusedVariableRule.php b/lib/UnusedVariableRule.php index 31cc688..3639e6b 100644 --- a/lib/UnusedVariableRule.php +++ b/lib/UnusedVariableRule.php @@ -14,7 +14,7 @@ use PhpParser\Node\Name; use PhpParser\Node\Scalar\String_; use PHPStan\Analyser\Scope; -use PHPStan\Broker\Broker; +use PHPStan\Reflection\ReflectionProvider; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; @@ -37,7 +37,7 @@ final class UnusedVariableRule implements Rule ]; public function __construct( - private readonly Broker $broker, + private readonly ReflectionProvider $broker, ) {} public function getNodeType(): string @@ -157,7 +157,7 @@ private function captureVariablesUsedByCompactFunction(Node $node, Scope $scope, if (! $this->isCompactFunction($node, $scope)) { return; } - // @phpstan-ignore-next-line: $node->args is valid due to $node being instanceof FuncCall + foreach ($node->args as $arg) { if ($arg->value instanceof String_) { $usedVariables[$arg->value->value] = true; diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 782131c..e52e732 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -1,21 +1,55 @@ parameters: ignoreErrors: - - message: "#^Doing instanceof PHPStan\\\\Type\\\\ConstantScalarType is error\\-prone and deprecated\\. Use Type\\:\\:isConstantScalarValue\\(\\) or Type\\:\\:getConstantScalarTypes\\(\\) or Type\\:\\:getConstantScalarValues\\(\\) instead\\.$#" + message: '#^Doing instanceof PHPStan\\Type\\ConstantScalarType is error\-prone and deprecated\. Use Type\:\:isConstantScalarValue\(\) or Type\:\:getConstantScalarTypes\(\) or Type\:\:getConstantScalarValues\(\) instead\.$#' + identifier: phpstanApi.instanceofType count: 1 path: lib/NotNow/NoRelativeDateTimeInterfaceRule.php - - message: "#^Doing instanceof PHPStan\\\\Type\\\\TypeWithClassName is error\\-prone and deprecated\\. Use Type\\:\\:getObjectClassNames\\(\\) or Type\\:\\:getObjectClassReflections\\(\\) instead\\.$#" + message: '#^Doing instanceof PHPStan\\Type\\TypeWithClassName is error\-prone and deprecated\. Use Type\:\:getObjectClassNames\(\) or Type\:\:getObjectClassReflections\(\) instead\.$#' + identifier: phpstanApi.instanceofType count: 1 path: lib/NotNow/NoRelativeDateTimeInterfaceRule.php - - message: "#^Doing instanceof PHPStan\\\\Type\\\\ConstantScalarType is error\\-prone and deprecated\\. Use Type\\:\\:isConstantScalarValue\\(\\) or Type\\:\\:getConstantScalarTypes\\(\\) or Type\\:\\:getConstantScalarValues\\(\\) instead\\.$#" + message: '#^Doing instanceof PHPStan\\Type\\ConstantScalarType is error\-prone and deprecated\. Use Type\:\:isConstantScalarValue\(\) or Type\:\:getConstantScalarTypes\(\) or Type\:\:getConstantScalarValues\(\) instead\.$#' + identifier: phpstanApi.instanceofType count: 1 path: lib/NotNow/NoRelativeStrtotimeRule.php - - message: "#^Cannot call method getAttribute\\(\\) on mixed\\.$#" + message: '#^Access to an undefined property PhpParser\\Node\:\:\$args\.$#' + identifier: property.notFound + count: 1 + path: lib/UnusedVariableRule.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: lib/UnusedVariableRule.php + + - + message: '#^Cannot access property \$value on mixed\.$#' + identifier: property.nonObject + count: 2 + path: lib/UnusedVariableRule.php + + - + message: '#^Cannot call method getAttribute\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: lib/UnusedVariableRule.php + + - + message: '#^Parameter \#1 \$line of method PHPStan\\Rules\\RuleErrorBuilder\\:\:line\(\) expects int, mixed given\.$#' + identifier: argument.type + count: 1 + path: lib/UnusedVariableRule.php + + - + message: '#^Parameter \#2 \.\.\.\$values of function sprintf expects bool\|float\|int\|string\|null, mixed given\.$#' + identifier: argument.type count: 1 path: lib/UnusedVariableRule.php diff --git a/tests/AccessGlobalVariableWithinContextRuleTest.php b/tests/AccessGlobalVariableWithinContextRuleTest.php index 62b3592..bba0b92 100644 --- a/tests/AccessGlobalVariableWithinContextRuleTest.php +++ b/tests/AccessGlobalVariableWithinContextRuleTest.php @@ -24,7 +24,7 @@ protected function setUp(): void protected function getRule(): Rule { - $broker = $this->createBroker(); + $broker = $this->createReflectionProvider(); return new AccessGlobalVariableWithinContextRule($broker, $this->contextBaseClassOrInterface); } diff --git a/tests/AccessStaticPropertyWithinModelContextRuleTest.php b/tests/AccessStaticPropertyWithinModelContextRuleTest.php index 2ed6ad9..9805201 100644 --- a/tests/AccessStaticPropertyWithinModelContextRuleTest.php +++ b/tests/AccessStaticPropertyWithinModelContextRuleTest.php @@ -29,7 +29,7 @@ protected function setUp(): void protected function getRule(): Rule { - $broker = $this->createBroker(); + $broker = $this->createReflectionProvider(); return new AccessStaticPropertyWithinModelContextRule( $broker, diff --git a/tests/ClassNotationRuleTest.php b/tests/ClassNotationRuleTest.php index a20a6c5..8fbaf96 100644 --- a/tests/ClassNotationRuleTest.php +++ b/tests/ClassNotationRuleTest.php @@ -19,7 +19,7 @@ final class ClassNotationRuleTest extends RuleTestCase { protected function getRule(): Rule { - $broker = $this->createBroker(); + $broker = $this->createReflectionProvider(); return new ClassNotationRule($broker); } diff --git a/tests/PhpUnitFqcnAnnotationRuleTest.php b/tests/PhpUnitFqcnAnnotationRuleTest.php index cdb1b26..0a6c98a 100644 --- a/tests/PhpUnitFqcnAnnotationRuleTest.php +++ b/tests/PhpUnitFqcnAnnotationRuleTest.php @@ -17,7 +17,7 @@ final class PhpUnitFqcnAnnotationRuleTest extends RuleTestCase { protected function getRule(): Rule { - $broker = $this->createBroker(); + $broker = $this->createReflectionProvider(); return new PhpUnitFqcnAnnotationRule($broker); } diff --git a/tests/StringToClassRuleTest.php b/tests/StringToClassRuleTest.php index 04be8f0..2d10048 100644 --- a/tests/StringToClassRuleTest.php +++ b/tests/StringToClassRuleTest.php @@ -17,7 +17,7 @@ final class StringToClassRuleTest extends RuleTestCase { protected function getRule(): Rule { - $broker = $this->createBroker(); + $broker = $this->createReflectionProvider(); return new StringToClassRule($broker); } diff --git a/tests/SymfonyFilesystemRuleTest.php b/tests/SymfonyFilesystemRuleTest.php index 2041bbe..d8168ad 100644 --- a/tests/SymfonyFilesystemRuleTest.php +++ b/tests/SymfonyFilesystemRuleTest.php @@ -17,7 +17,7 @@ final class SymfonyFilesystemRuleTest extends RuleTestCase { protected function getRule(): Rule { - $broker = $this->createBroker(); + $broker = $this->createReflectionProvider(); return new SymfonyFilesystemRule($broker); } diff --git a/tests/SymfonyProcessRuleTest.php b/tests/SymfonyProcessRuleTest.php index 74f0ed2..568e9e7 100644 --- a/tests/SymfonyProcessRuleTest.php +++ b/tests/SymfonyProcessRuleTest.php @@ -17,7 +17,7 @@ final class SymfonyProcessRuleTest extends RuleTestCase { protected function getRule(): Rule { - $broker = $this->createBroker(); + $broker = $this->createReflectionProvider(); return new SymfonyProcessRule($broker); } diff --git a/tests/UnusedVariableRuleTest.php b/tests/UnusedVariableRuleTest.php index ab7f949..fc67470 100644 --- a/tests/UnusedVariableRuleTest.php +++ b/tests/UnusedVariableRuleTest.php @@ -18,7 +18,7 @@ final class UnusedVariableRuleTest extends RuleTestCase { protected function getRule(): Rule { - $broker = $this->createBroker(); + $broker = $this->createReflectionProvider(); return new UnusedVariableRule($broker); }