diff --git a/phpstan.neon b/phpstan.neon index 2a56ff672a0..2722dd0b00f 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -89,11 +89,30 @@ parameters: - identifier: argument.type - message: '#(.*?) class\-string, string given#' + message: '#Parameter \#1 \$phpVersion of method Rector\\Config\\RectorConfig\:\:phpVersion\(\) expects 50200\|50300\|50400\|50500\|50600\|70000\|70100\|70200\|70300\|70400\|80000\|80100\|80200\|80300\|80400\|80500\|80600\|100000, 79999 given#' + # class name string resolved from AST/ObjectType, not statically provable as class-string - identifier: argument.type - message: '#Parameter \#1 \$phpVersion of method Rector\\Config\\RectorConfig\:\:phpVersion\(\) expects 50200\|50300\|50400\|50500\|50600\|70000\|70100\|70200\|70300\|70400\|80000\|80100\|80200\|80300\|80400\|80500\|80600\|100000, 79999 given#' + message: '#class\-string, string given#' + paths: + - rules/TypeDeclaration/PHPStan/ObjectTypeSpecifier.php + - rules/TypeDeclaration/Rector/FunctionLike/AddClosureParamTypeFromIterableMethodCallRector.php + - src/PhpParser/AstResolver.php + - src/StaticTypeMapper/ValueObject/Type/FullyQualifiedObjectType.php + - tests/BetterPhpDocParser/PhpDocParser/TagValueNodeReprint/TagValueNodeReprintTest.php + + # getObjectClassNames() returns string[], semantically a class-string + - + identifier: return.type + message: '#should return class-string\|null but returns string#' + path: src/StaticTypeMapper/Resolver/ClassNameFromObjectTypeResolver.php + + # deliberately widened token param on parser wrapper + - + identifier: argument.type + message: '#expects list, array given#' + path: src/BetterPhpDocParser/ValueObject/Parser/BetterTokenIterator.php # node vs stmts mix - @@ -116,11 +135,6 @@ parameters: identifier: argument.type message: '#Parameter \#3 \$nodeCallback of method PHPStan\\Analyser\\NodeScopeResolver\:\:processNodes\(\) expects callable\(PhpParser\\Node, PHPStan\\Analyser\\Scope\)\: void, callable\(PhpParser\\Node, PHPStan\\Analyser\\MutatingScope\)\: void given#' - # list vs array - - - identifier: argument.type - message: '#Parameter (.*?) expects list<(.*?)>, array<(.*?)> given#' - - identifier: argument.type paths: @@ -254,11 +268,6 @@ parameters: identifier: return.type message: '#Method (.*?) should return 50200\|50300\|50400\|50500\|50600\|70000\|70100\|70200\|70300\|70400\|80000\|80100\|80200\|80300\|80400\|80500\|80600\|100000 but returns int#' - # from constant string - - - identifier: return.type - message: '#Method Rector\\.*::filterPolyfillPackages\(\) should return array\<#' - - identifier: return.type paths: diff --git a/rules/CodingStyle/Rector/ClassConst/SplitGroupedClassConstantsRector.php b/rules/CodingStyle/Rector/ClassConst/SplitGroupedClassConstantsRector.php index 621b4278aac..815c3f7c0b6 100644 --- a/rules/CodingStyle/Rector/ClassConst/SplitGroupedClassConstantsRector.php +++ b/rules/CodingStyle/Rector/ClassConst/SplitGroupedClassConstantsRector.php @@ -84,7 +84,7 @@ private function createNextClassConsts(array $consts, ClassConst $classConst): a [$const], $classConst->flags, $classConst->getAttributes(), - $classConst->attrGroups, + array_values($classConst->attrGroups), $classConst->type ); } diff --git a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php index cd873b6511f..5a6b776b18b 100644 --- a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php @@ -212,7 +212,7 @@ private function resolveKeyType(ConstantArrayType $constantArrayType): Type return $uniqueKeyTypes[0]; } - return new UnionType($uniqueKeyTypes); + return new UnionType(array_values($uniqueKeyTypes)); } return new MixedType(); diff --git a/src/Application/RectorRegistry.php b/src/Application/RectorRegistry.php index c251d01d43f..f4f3227ca4d 100644 --- a/src/Application/RectorRegistry.php +++ b/src/Application/RectorRegistry.php @@ -110,7 +110,7 @@ private function prepareRectors(): void return; } - $activeRectors = $this->phpVersionedFilter->filter($this->rectors); + $activeRectors = $this->phpVersionedFilter->filter(array_values($this->rectors)); $activeRectors = $this->composerPackageConstraintFilter->filter($activeRectors); $this->activeRectors = $this->configurationRuleFilter->filter($activeRectors); diff --git a/src/BetterPhpDocParser/PhpDocInfo/PhpDocInfo.php b/src/BetterPhpDocParser/PhpDocInfo/PhpDocInfo.php index 5313f86c574..a5808b78d7c 100644 --- a/src/BetterPhpDocParser/PhpDocInfo/PhpDocInfo.php +++ b/src/BetterPhpDocParser/PhpDocInfo/PhpDocInfo.php @@ -574,7 +574,6 @@ public function getArrayItemNodeClassNames(): array } /** - * @param class-string $desiredClass * @return DoctrineAnnotationTagValueNode[] */ public function findByAnnotationClass(string $desiredClass): array diff --git a/src/BetterPhpDocParser/PhpDocNodeFinder/PhpDocNodeByTypeFinder.php b/src/BetterPhpDocParser/PhpDocNodeFinder/PhpDocNodeByTypeFinder.php index 4a9931f0243..6e5566a7b1d 100644 --- a/src/BetterPhpDocParser/PhpDocNodeFinder/PhpDocNodeByTypeFinder.php +++ b/src/BetterPhpDocParser/PhpDocNodeFinder/PhpDocNodeByTypeFinder.php @@ -55,7 +55,6 @@ public function findDoctrineAnnotationsByClasses(PhpDocNode $phpDocNode, array $ } /** - * @param class-string $desiredClass * @return DoctrineAnnotationTagValueNode[] */ public function findDoctrineAnnotationsByClass(PhpDocNode $phpDocNode, string $desiredClass): array diff --git a/src/Php/PolyfillPackagesProvider.php b/src/Php/PolyfillPackagesProvider.php index 597901d00a6..0f5cb912626 100644 --- a/src/Php/PolyfillPackagesProvider.php +++ b/src/Php/PolyfillPackagesProvider.php @@ -8,17 +8,16 @@ use Nette\Utils\Json; use Rector\Configuration\Option; use Rector\Configuration\Parameter\SimpleParameterProvider; -use Rector\ValueObject\PolyfillPackage; final class PolyfillPackagesProvider { /** - * @var null|array + * @var null|array */ private null|array $cachedPolyfillPackages = null; /** - * @return array + * @return array */ public function provide(): array { @@ -48,7 +47,7 @@ public function provide(): array /** * @param array $require - * @return array + * @return array */ private function filterPolyfillPackages(array $require): array { diff --git a/src/StaticTypeMapper/Resolver/ClassNameFromObjectTypeResolver.php b/src/StaticTypeMapper/Resolver/ClassNameFromObjectTypeResolver.php index 397ae423964..8fc501bd3b3 100644 --- a/src/StaticTypeMapper/Resolver/ClassNameFromObjectTypeResolver.php +++ b/src/StaticTypeMapper/Resolver/ClassNameFromObjectTypeResolver.php @@ -8,6 +8,9 @@ final class ClassNameFromObjectTypeResolver { + /** + * @return class-string|null + */ public static function resolve(Type $type): ?string { $objectClassNames = $type->getObjectClassNames();