From 828960fd7628bd05a0fb4239d5f34737a0ee2895 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sun, 28 Nov 2021 21:03:36 +0300 Subject: [PATCH 1/4] if is bool type --- composer.json | 1 + .../NodeNestingScope/ScopeNestingComparator.php | 4 ++-- packages/NodeTypeResolver/NodeTypeResolver.php | 4 ++-- .../NodeTypeResolver/VariableTypeResolver.php | 4 ---- .../ArrayAnnotationToAttributeMapper.php | 2 +- phpstan.neon | 6 ++++++ rules/CodingStyle/Node/NameImporter.php | 2 +- rules/DeadCode/ConditionEvaluator.php | 5 +---- .../UnwrapFutureCompatibleIfPhpVersionRector.php | 2 +- .../PhpSpecMethodToPHPUnitMethodRector.php | 4 ++-- .../NodeAnalyzer/PropertyFetchByMethodAnalyzer.php | 14 ++++++++------ 11 files changed, 25 insertions(+), 23 deletions(-) diff --git a/composer.json b/composer.json index ddc7d0ed681..7c976335ead 100644 --- a/composer.json +++ b/composer.json @@ -65,6 +65,7 @@ "nategood/httpful": "^0.3.2", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-nette": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", "phpstan/phpstan-webmozart-assert": "^1.0", "phpunit/phpunit": "^9.5", "rector/phpstan-rules": "^0.4.15", diff --git a/packages/NodeNestingScope/ScopeNestingComparator.php b/packages/NodeNestingScope/ScopeNestingComparator.php index 670afda1d1e..b2f39ee927d 100644 --- a/packages/NodeNestingScope/ScopeNestingComparator.php +++ b/packages/NodeNestingScope/ScopeNestingComparator.php @@ -82,7 +82,7 @@ public function isInBothIfElseBranch(Node $foundParentNode, Expr $seekedExpr): b return false; } - $foundIfNode = $this->betterNodeFinder->find( + $foundIfNode = (bool) $this->betterNodeFinder->findFirst( $foundParentNode->stmts, fn ($node): bool => $this->nodeComparator->areNodesEqual($node, $seekedExpr) ); @@ -91,7 +91,7 @@ public function isInBothIfElseBranch(Node $foundParentNode, Expr $seekedExpr): b return false; } - $foundElseNode = $this->betterNodeFinder->find( + $foundElseNode = (bool) $this->betterNodeFinder->findFirst( $foundParentNode->else, fn ($node): bool => $this->nodeComparator->areNodesEqual($node, $seekedExpr) ); diff --git a/packages/NodeTypeResolver/NodeTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver.php index 918d9a013f5..37a6a2837be 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver.php @@ -168,8 +168,8 @@ public function getType(Node $node): Type $scope = $node->getAttribute(AttributeKey::SCOPE); if (! $scope instanceof Scope) { - if ($node instanceof ConstFetch && $node->name instanceof Name) { - $name = (string) $node->name; + if ($node instanceof ConstFetch) { + $name = $node->name->toString(); if (strtolower($name) === 'null') { return new NullType(); } diff --git a/packages/NodeTypeResolver/NodeTypeResolver/VariableTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/VariableTypeResolver.php index a29015877cc..f41e5ec438b 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/VariableTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/VariableTypeResolver.php @@ -5,7 +5,6 @@ namespace Rector\NodeTypeResolver\NodeTypeResolver; use PhpParser\Node; -use PhpParser\Node\Expr; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Param; use PHPStan\Analyser\Scope; @@ -29,9 +28,6 @@ public function __construct( ) { } - /** - * @return array> - */ public function getNodeClasses(): array { return [Variable::class]; diff --git a/packages/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php b/packages/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php index 3738463040c..2b9057812a3 100644 --- a/packages/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php +++ b/packages/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php @@ -9,7 +9,7 @@ use Symfony\Contracts\Service\Attribute\Required; /** - * @implements AnnotationToAttributeMapperInterface + * @implements AnnotationToAttributeMapperInterface */ final class ArrayAnnotationToAttributeMapper implements AnnotationToAttributeMapperInterface { diff --git a/phpstan.neon b/phpstan.neon index 6ae68c66d01..5d341589a81 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -593,9 +593,15 @@ parameters: # stricter child type on purpose - '#Parameter \#1 \$tokenIterator \(Rector\\BetterPhpDocParser\\ValueObject\\Parser\\BetterTokenIterator\) of method Rector\\BetterPhpDocParser\\PhpDocParser\\BetterPhpDocParser\:\:parseTagValue\(\) should be contravariant with parameter \$tokens \(PHPStan\\PhpDocParser\\Parser\\TokenIterator\) of method PHPStan\\PhpDocParser\\Parser\\PhpDocParser\:\:parseTagValue\(\)#' + - '#Parameter \#1 \$nodes \(array\) of method Rector\\PostRector\\Rector\\(.*?)\:\:beforeTraverse\(\) should be contravariant with parameter \$nodes \(array\) of method PhpParser\\NodeVisitor\:\:beforeTraverse\(\)#' # on purpose - '#Instead of "instanceof/is_a\(\)" use ReflectionProvider service or "\(new ObjectType\(\)\)\-\>isSuperTypeOf\(\)" for static reflection to work#' # stricter child type on purpose - '#Parameter \#1 \$tokenIterator \(Rector\\BetterPhpDocParser\\ValueObject\\Parser\\BetterTokenIterator\) of method Rector\\BetterPhpDocParser\\PhpDocParser\\BetterPhpDocParser\:\:parseTagValue\(\) should be contravariant with parameter \$tokens \(PHPStan\\PhpDocParser\\Parser\\TokenIterator\) of method PHPStan\\PhpDocParser\\Parser\\PhpDocParser\:\:parseTagValue\(\)#' + + # property changed else-where + - + message: '#If condition is always false#' + path: rules/TypeDeclaration/Rector/FunctionLike/ParamTypeDeclarationRector.php diff --git a/rules/CodingStyle/Node/NameImporter.php b/rules/CodingStyle/Node/NameImporter.php index 33f2e409210..c8a74b7bb34 100644 --- a/rules/CodingStyle/Node/NameImporter.php +++ b/rules/CodingStyle/Node/NameImporter.php @@ -70,7 +70,7 @@ public function importName(Name $name, File $file, array $uses): ?Name private function shouldSkipName(Name $name): bool { - $virtualNode = $name->getAttribute(AttributeKey::VIRTUAL_NODE); + $virtualNode = (bool) $name->getAttribute(AttributeKey::VIRTUAL_NODE, false); if ($virtualNode) { return true; } diff --git a/rules/DeadCode/ConditionEvaluator.php b/rules/DeadCode/ConditionEvaluator.php index bef7d01dca2..fdade432ed9 100644 --- a/rules/DeadCode/ConditionEvaluator.php +++ b/rules/DeadCode/ConditionEvaluator.php @@ -21,10 +21,7 @@ public function __construct( ) { } - /** - * @return bool|int|null - */ - public function evaluate(ConditionInterface $condition) + public function evaluate(ConditionInterface $condition): bool|int|null { if ($condition instanceof VersionCompareCondition) { return $this->evaluateVersionCompareCondition($condition); diff --git a/rules/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector.php b/rules/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector.php index bd0fdaceb71..8e782dc374d 100644 --- a/rules/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector.php +++ b/rules/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector.php @@ -80,7 +80,7 @@ public function refactor(Node $node): ?array } // if is skipped - if ($result) { + if ($result === true || $result > 0) { return $this->refactorIsMatch($node); } diff --git a/rules/PhpSpecToPHPUnit/Rector/ClassMethod/PhpSpecMethodToPHPUnitMethodRector.php b/rules/PhpSpecToPHPUnit/Rector/ClassMethod/PhpSpecMethodToPHPUnitMethodRector.php index 8e92d34daac..44c0fd2968b 100644 --- a/rules/PhpSpecToPHPUnit/Rector/ClassMethod/PhpSpecMethodToPHPUnitMethodRector.php +++ b/rules/PhpSpecToPHPUnit/Rector/ClassMethod/PhpSpecMethodToPHPUnitMethodRector.php @@ -72,9 +72,9 @@ private function processTestMethod(ClassMethod $classMethod): void // reorder instantiation + expected exception $previousStmt = null; foreach ((array) $classMethod->stmts as $key => $stmt) { - $printedStmt = $this->print($stmt); + $printedStmtContent = $this->print($stmt); - if ($previousStmt && \str_contains($printedStmt, 'duringInstantiation')) { + if (\str_contains($printedStmtContent, 'duringInstantiation')) { $printedPreviousStmt = $this->print($previousStmt); if (\str_contains($printedPreviousStmt, 'beConstructedThrough')) { $classMethod->stmts[$key - 1] = $stmt; diff --git a/rules/Privatization/NodeAnalyzer/PropertyFetchByMethodAnalyzer.php b/rules/Privatization/NodeAnalyzer/PropertyFetchByMethodAnalyzer.php index d6b000a176f..554ad08317d 100644 --- a/rules/Privatization/NodeAnalyzer/PropertyFetchByMethodAnalyzer.php +++ b/rules/Privatization/NodeAnalyzer/PropertyFetchByMethodAnalyzer.php @@ -137,7 +137,7 @@ function (Node $node) use ( return null; } - $isPropertyReadInIf = $this->verifyPropertyReadInIf($isPropertyReadInIf, $node, $propertyName); + $isPropertyReadInIf = $this->isPropertyReadInNode($isPropertyReadInIf, $node, $propertyName); $isPropertyChanging = $this->isPropertyChanging($node, $propertyName); if (! $isPropertyChanging) { @@ -151,10 +151,10 @@ function (Node $node) use ( return $isPropertyChanging || $isIfFollowedByAssign || $isPropertyReadInIf; } - private function verifyPropertyReadInIf(?bool $isPropertyReadInIf, Node $node, string $propertyName): ?bool + private function isPropertyReadInNode(bool $isPropertyReadInIf, Node $node, string $propertyName): bool { if ($node instanceof If_) { - return $this->refactorIf($node, $propertyName); + return $this->isPropertyReadInIf($node, $propertyName); } return $isPropertyReadInIf; @@ -171,13 +171,15 @@ private function isScopeChangingNode(Node $node): bool return false; } - private function refactorIf(If_ $if, string $privatePropertyName): ?bool + private function isPropertyReadInIf(If_ $if, string $propertyName): bool { + $isPropertyReadInIf = false; + $this->simpleCallableNodeTraverser->traverseNodesWithCallable($if->cond, function (Node $node) use ( - $privatePropertyName, + $propertyName, &$isPropertyReadInIf ): ?int { - if (! $this->propertyFetchAnalyzer->isLocalPropertyOfNames($node, [$privatePropertyName])) { + if (! $this->propertyFetchAnalyzer->isLocalPropertyOfNames($node, [$propertyName])) { return null; } From afd904c3382fb3fb246702ed404a36d5bc3f1f00 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sun, 28 Nov 2021 21:11:56 +0300 Subject: [PATCH 2/4] static fixes --- composer.json | 1 - .../PhpDocManipulator/PhpDocClassRenamer.php | 2 +- .../PhpDocManipulator/PhpDocTypeChanger.php | 2 +- .../Printer/PhpDocInfoPrinter.php | 2 +- .../Output/ConsoleOutputFormatter.php | 6 +-- .../Formatter/XmlFileFormatter.php | 8 ++-- .../ValueObject/AddedFileWithNodes.php | 4 +- .../Contract/NodeNameResolverInterface.php | 8 +++- .../Error/InvalidNameNodeReporter.php | 2 +- .../ClassConstFetchNameResolver.php | 8 ++-- .../ClassConstNameResolver.php | 8 ++-- .../NodeNameResolver/ClassNameResolver.php | 11 +++--- .../NodeNameResolver/EmptyNameResolver.php | 6 +-- .../NodeNameResolver/FuncCallNameResolver.php | 6 +-- .../NodeNameResolver/FunctionNameResolver.php | 8 ++-- .../NodeNameResolver/NameNameResolver.php | 6 +-- .../NodeNameResolver/ParamNameResolver.php | 8 ++-- .../NodeNameResolver/PropertyNameResolver.php | 8 ++-- .../NodeNameResolver/UseNameResolver.php | 8 ++-- .../NodeNameResolver/VariableNameResolver.php | 6 +-- .../NodeTypeResolver/CastTypeResolver.php | 6 +-- .../ClassAndInterfaceTypeResolver.php | 5 +-- .../ClassMethodOrClassConstTypeResolver.php | 6 +-- .../NodeTypeResolver/NameTypeResolver.php | 5 +-- .../NodeTypeResolver/NewTypeResolver.php | 6 +-- .../NodeTypeResolver/ParamTypeResolver.php | 11 ++---- .../PropertyFetchTypeResolver.php | 7 ++-- .../NodeTypeResolver/PropertyTypeResolver.php | 5 +-- .../NodeTypeResolver/ReturnTypeResolver.php | 8 ++-- .../NodeTypeResolver/ScalarTypeResolver.php | 12 +++--- .../StaticCallMethodCallTypeResolver.php | 8 ++-- .../NodeTypeResolver/TraitTypeResolver.php | 5 +-- .../NodeVisitor/StatementNodeVisitor.php | 2 +- .../ArrayAnnotationToAttributeMapper.php | 7 ++-- ...rlyListNodeAnnotationToAttributeMapper.php | 4 +- phpstan.neon | 38 +++++-------------- rules/CodingStyle/Node/NameImporter.php | 6 +-- 37 files changed, 117 insertions(+), 142 deletions(-) diff --git a/composer.json b/composer.json index 7c976335ead..ddc7d0ed681 100644 --- a/composer.json +++ b/composer.json @@ -65,7 +65,6 @@ "nategood/httpful": "^0.3.2", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-nette": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", "phpstan/phpstan-webmozart-assert": "^1.0", "phpunit/phpunit": "^9.5", "rector/phpstan-rules": "^0.4.15", diff --git a/packages/BetterPhpDocParser/PhpDocManipulator/PhpDocClassRenamer.php b/packages/BetterPhpDocParser/PhpDocManipulator/PhpDocClassRenamer.php index 0af3d992228..5758e3d3535 100644 --- a/packages/BetterPhpDocParser/PhpDocManipulator/PhpDocClassRenamer.php +++ b/packages/BetterPhpDocParser/PhpDocManipulator/PhpDocClassRenamer.php @@ -96,7 +96,7 @@ private function processSerializerTypeTagValueNode(array $oldToNewClasses, PhpDo foreach ($oldToNewClasses as $oldClass => $newClass) { $className = $doctrineAnnotationTagValueNode->getSilentValue(); - if ($className) { + if (is_string($className)) { if ($className === $oldClass) { $doctrineAnnotationTagValueNode->changeSilentValue($newClass); continue; diff --git a/packages/BetterPhpDocParser/PhpDocManipulator/PhpDocTypeChanger.php b/packages/BetterPhpDocParser/PhpDocManipulator/PhpDocTypeChanger.php index 6695df3ae15..08784280fcd 100644 --- a/packages/BetterPhpDocParser/PhpDocManipulator/PhpDocTypeChanger.php +++ b/packages/BetterPhpDocParser/PhpDocManipulator/PhpDocTypeChanger.php @@ -133,7 +133,7 @@ public function changeParamType(PhpDocInfo $phpDocInfo, Type $newType, Param $pa public function copyPropertyDocToParam(Property $property, Param $param): void { $phpDocInfo = $property->getAttribute(AttributeKey::PHP_DOC_INFO); - if (! $phpDocInfo) { + if (! $phpDocInfo instanceof PhpDocInfo) { return; } diff --git a/packages/BetterPhpDocParser/Printer/PhpDocInfoPrinter.php b/packages/BetterPhpDocParser/Printer/PhpDocInfoPrinter.php index 8d63763cb4c..614d5503d10 100644 --- a/packages/BetterPhpDocParser/Printer/PhpDocInfoPrinter.php +++ b/packages/BetterPhpDocParser/Printer/PhpDocInfoPrinter.php @@ -169,7 +169,7 @@ private function printPhpDocNode(PhpDocNode $phpDocNode): string $output = $this->printEnd($output); // fix missing start - if (! StringUtils::isMatch($output, self::DOCBLOCK_START_REGEX) && $output) { + if (! StringUtils::isMatch($output, self::DOCBLOCK_START_REGEX) && $output !== '') { $output = '/**' . $output; } diff --git a/packages/ChangesReporting/Output/ConsoleOutputFormatter.php b/packages/ChangesReporting/Output/ConsoleOutputFormatter.php index e9c6188c1d0..15431c54115 100644 --- a/packages/ChangesReporting/Output/ConsoleOutputFormatter.php +++ b/packages/ChangesReporting/Output/ConsoleOutputFormatter.php @@ -90,7 +90,7 @@ private function reportFileDiffs(array $fileDiffs): void if ($fileDiff->getRectorChanges() !== []) { $this->outputStyle->writeln('Applied rules:'); $this->outputStyle->listing($rectorsChangelogsLines); - $this->outputStyle->newLine(); + $this->outputStyle->newline(); } } } @@ -107,12 +107,12 @@ private function reportErrors(array $errors): void $message = sprintf( 'Could not process "%s" file%s, due to: %s"%s".', $error->getRelativeFilePath(), - $error->getRectorClass() ? ' by "' . $error->getRectorClass() . '"' : '', + $error->getRectorClass() !== null ? ' by "' . $error->getRectorClass() . '"' : '', PHP_EOL, $errorMessage ); - if ($error->getLine()) { + if ($error->getLine() !== null) { $message .= ' On line: ' . $error->getLine(); } diff --git a/packages/FileFormatter/Formatter/XmlFileFormatter.php b/packages/FileFormatter/Formatter/XmlFileFormatter.php index 15359c46b42..9001489a3b0 100644 --- a/packages/FileFormatter/Formatter/XmlFileFormatter.php +++ b/packages/FileFormatter/Formatter/XmlFileFormatter.php @@ -35,7 +35,7 @@ final class XmlFileFormatter implements FileFormatterInterface */ private const IS_CLOSING_TAG_REGEX = '#^\s*<\/#'; - private ?int $depth = null; + private int $depth = 0; private int $indent = 4; @@ -79,7 +79,7 @@ private function formatXml(string $xml, EditorConfigConfiguration $editorConfigC $parts = $this->getXmlParts($xml); if (str_starts_with($parts[0], 'getNewline(); + $output = array_shift($parts) . $editorConfigConfiguration->getNewLine(); } foreach ($parts as $part) { @@ -104,10 +104,10 @@ private function getOutputForPart(string $part, EditorConfigConfiguration $edito $this->runPre($part); if ($this->preserveWhitespace) { - $output .= $part . $editorConfigConfiguration->getNewline(); + $output .= $part . $editorConfigConfiguration->getNewLine(); } else { $part = trim($part); - $output .= $this->getPaddedString($part) . $editorConfigConfiguration->getNewline(); + $output .= $this->getPaddedString($part) . $editorConfigConfiguration->getNewLine(); } $this->runPost($part); diff --git a/packages/FileSystemRector/ValueObject/AddedFileWithNodes.php b/packages/FileSystemRector/ValueObject/AddedFileWithNodes.php index cb9df83a8b0..5f4894f99e0 100644 --- a/packages/FileSystemRector/ValueObject/AddedFileWithNodes.php +++ b/packages/FileSystemRector/ValueObject/AddedFileWithNodes.php @@ -11,7 +11,7 @@ final class AddedFileWithNodes implements AddedFileInterface, FileWithNodesInterface { /** - * @param Node[] $nodes + * @param Node\Stmt[] $nodes */ public function __construct( private string $filePath, @@ -25,7 +25,7 @@ public function getFilePath(): string } /** - * @return Node[] + * @return Node\Stmt[] */ public function getNodes(): array { diff --git a/packages/NodeNameResolver/Contract/NodeNameResolverInterface.php b/packages/NodeNameResolver/Contract/NodeNameResolverInterface.php index cb02e3e864f..6fcda90637e 100644 --- a/packages/NodeNameResolver/Contract/NodeNameResolverInterface.php +++ b/packages/NodeNameResolver/Contract/NodeNameResolverInterface.php @@ -6,12 +6,18 @@ use PhpParser\Node; +/** + * @template TNode as Node + */ interface NodeNameResolverInterface { /** - * @return class-string + * @return class-string */ public function getNode(): string; + /** + * @param TNode $node + */ public function resolve(Node $node): ?string; } diff --git a/packages/NodeNameResolver/Error/InvalidNameNodeReporter.php b/packages/NodeNameResolver/Error/InvalidNameNodeReporter.php index 2b6cf7f64f9..32a66cc39ff 100644 --- a/packages/NodeNameResolver/Error/InvalidNameNodeReporter.php +++ b/packages/NodeNameResolver/Error/InvalidNameNodeReporter.php @@ -46,7 +46,7 @@ public function reportInvalidNodeForName(MethodCall | StaticCall $node): void $backtrace = debug_backtrace(); $rectorBacktrace = $this->matchRectorBacktraceCall($backtrace); - if ($rectorBacktrace) { + if ($rectorBacktrace !== null) { // issues to find the file in prefixed if (file_exists($rectorBacktrace[self::FILE])) { $smartFileInfo = new SmartFileInfo($rectorBacktrace[self::FILE]); diff --git a/packages/NodeNameResolver/NodeNameResolver/ClassConstFetchNameResolver.php b/packages/NodeNameResolver/NodeNameResolver/ClassConstFetchNameResolver.php index def3c9e6e32..b02f44886a1 100644 --- a/packages/NodeNameResolver/NodeNameResolver/ClassConstFetchNameResolver.php +++ b/packages/NodeNameResolver/NodeNameResolver/ClassConstFetchNameResolver.php @@ -10,19 +10,19 @@ use Rector\NodeNameResolver\NodeNameResolver; use Symfony\Contracts\Service\Attribute\Required; +/** + * @implements NodeNameResolverInterface + */ final class ClassConstFetchNameResolver implements NodeNameResolverInterface { private NodeNameResolver $nodeNameResolver; #[Required] - public function autowireClassConstFetchNameResolver(NodeNameResolver $nodeNameResolver): void + public function autowire(NodeNameResolver $nodeNameResolver): void { $this->nodeNameResolver = $nodeNameResolver; } - /** - * @return class-string - */ public function getNode(): string { return ClassConstFetch::class; diff --git a/packages/NodeNameResolver/NodeNameResolver/ClassConstNameResolver.php b/packages/NodeNameResolver/NodeNameResolver/ClassConstNameResolver.php index 3bc107ab916..ed57bffea6e 100644 --- a/packages/NodeNameResolver/NodeNameResolver/ClassConstNameResolver.php +++ b/packages/NodeNameResolver/NodeNameResolver/ClassConstNameResolver.php @@ -10,19 +10,19 @@ use Rector\NodeNameResolver\NodeNameResolver; use Symfony\Contracts\Service\Attribute\Required; +/** + * @implements NodeNameResolverInterface + */ final class ClassConstNameResolver implements NodeNameResolverInterface { private NodeNameResolver $nodeNameResolver; #[Required] - public function autowireClassConstNameResolver(NodeNameResolver $nodeNameResolver): void + public function autowire(NodeNameResolver $nodeNameResolver): void { $this->nodeNameResolver = $nodeNameResolver; } - /** - * @return class-string - */ public function getNode(): string { return ClassConst::class; diff --git a/packages/NodeNameResolver/NodeNameResolver/ClassNameResolver.php b/packages/NodeNameResolver/NodeNameResolver/ClassNameResolver.php index e6e1f59e4c2..6da2499f26f 100644 --- a/packages/NodeNameResolver/NodeNameResolver/ClassNameResolver.php +++ b/packages/NodeNameResolver/NodeNameResolver/ClassNameResolver.php @@ -5,32 +5,31 @@ namespace Rector\NodeNameResolver\NodeNameResolver; use PhpParser\Node; -use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassLike; use Rector\NodeNameResolver\Contract\NodeNameResolverInterface; use Rector\NodeNameResolver\NodeNameResolver; use Symfony\Contracts\Service\Attribute\Required; +/** + * @implements NodeNameResolverInterface + */ final class ClassNameResolver implements NodeNameResolverInterface { private NodeNameResolver $nodeNameResolver; #[Required] - public function autowireClassNameResolver(NodeNameResolver $nodeNameResolver): void + public function autowire(NodeNameResolver $nodeNameResolver): void { $this->nodeNameResolver = $nodeNameResolver; } - /** - * @return class-string - */ public function getNode(): string { return ClassLike::class; } /** - * @param Class_ $node + * @param ClassLike $node */ public function resolve(Node $node): ?string { diff --git a/packages/NodeNameResolver/NodeNameResolver/EmptyNameResolver.php b/packages/NodeNameResolver/NodeNameResolver/EmptyNameResolver.php index cabc52ff45e..8b452a41783 100644 --- a/packages/NodeNameResolver/NodeNameResolver/EmptyNameResolver.php +++ b/packages/NodeNameResolver/NodeNameResolver/EmptyNameResolver.php @@ -8,11 +8,11 @@ use PhpParser\Node\Expr\Empty_; use Rector\NodeNameResolver\Contract\NodeNameResolverInterface; +/** + * @implements NodeNameResolverInterface + */ final class EmptyNameResolver implements NodeNameResolverInterface { - /** - * @return class-string - */ public function getNode(): string { return Empty_::class; diff --git a/packages/NodeNameResolver/NodeNameResolver/FuncCallNameResolver.php b/packages/NodeNameResolver/NodeNameResolver/FuncCallNameResolver.php index d00ed5b3e0e..1ff9a8f7a0d 100644 --- a/packages/NodeNameResolver/NodeNameResolver/FuncCallNameResolver.php +++ b/packages/NodeNameResolver/NodeNameResolver/FuncCallNameResolver.php @@ -12,6 +12,9 @@ use Rector\NodeNameResolver\Contract\NodeNameResolverInterface; use Rector\NodeTypeResolver\Node\AttributeKey; +/** + * @implements NodeNameResolverInterface + */ final class FuncCallNameResolver implements NodeNameResolverInterface { public function __construct( @@ -19,9 +22,6 @@ public function __construct( ) { } - /** - * @return class-string - */ public function getNode(): string { return FuncCall::class; diff --git a/packages/NodeNameResolver/NodeNameResolver/FunctionNameResolver.php b/packages/NodeNameResolver/NodeNameResolver/FunctionNameResolver.php index 96fe1695dab..528bb11f2f6 100644 --- a/packages/NodeNameResolver/NodeNameResolver/FunctionNameResolver.php +++ b/packages/NodeNameResolver/NodeNameResolver/FunctionNameResolver.php @@ -10,11 +10,11 @@ use Rector\NodeNameResolver\Contract\NodeNameResolverInterface; use Rector\NodeTypeResolver\Node\AttributeKey; +/** + * @implements NodeNameResolverInterface + */ final class FunctionNameResolver implements NodeNameResolverInterface { - /** - * @return class-string - */ public function getNode(): string { return Function_::class; @@ -33,7 +33,7 @@ public function resolve(Node $node): ?string } $namespaceName = $scope->getNamespace(); - if ($namespaceName) { + if ($namespaceName !== null) { return $namespaceName . '\\' . $bareName; } diff --git a/packages/NodeNameResolver/NodeNameResolver/NameNameResolver.php b/packages/NodeNameResolver/NodeNameResolver/NameNameResolver.php index 8f8e221ca84..b2ca7ca6729 100644 --- a/packages/NodeNameResolver/NodeNameResolver/NameNameResolver.php +++ b/packages/NodeNameResolver/NodeNameResolver/NameNameResolver.php @@ -11,6 +11,9 @@ use Rector\NodeNameResolver\Contract\NodeNameResolverInterface; use Rector\NodeTypeResolver\Node\AttributeKey; +/** + * @implements NodeNameResolverInterface + */ final class NameNameResolver implements NodeNameResolverInterface { public function __construct( @@ -18,9 +21,6 @@ public function __construct( ) { } - /** - * @return class-string - */ public function getNode(): string { return Name::class; diff --git a/packages/NodeNameResolver/NodeNameResolver/ParamNameResolver.php b/packages/NodeNameResolver/NodeNameResolver/ParamNameResolver.php index dbd30dc93d1..4c8ca40849e 100644 --- a/packages/NodeNameResolver/NodeNameResolver/ParamNameResolver.php +++ b/packages/NodeNameResolver/NodeNameResolver/ParamNameResolver.php @@ -10,19 +10,19 @@ use Rector\NodeNameResolver\NodeNameResolver; use Symfony\Contracts\Service\Attribute\Required; +/** + * @implements NodeNameResolverInterface + */ final class ParamNameResolver implements NodeNameResolverInterface { private NodeNameResolver $nodeNameResolver; #[Required] - public function autowireParamNameResolver(NodeNameResolver $nodeNameResolver): void + public function autowire(NodeNameResolver $nodeNameResolver): void { $this->nodeNameResolver = $nodeNameResolver; } - /** - * @return class-string - */ public function getNode(): string { return Param::class; diff --git a/packages/NodeNameResolver/NodeNameResolver/PropertyNameResolver.php b/packages/NodeNameResolver/NodeNameResolver/PropertyNameResolver.php index 83c148c36cc..892720095d2 100644 --- a/packages/NodeNameResolver/NodeNameResolver/PropertyNameResolver.php +++ b/packages/NodeNameResolver/NodeNameResolver/PropertyNameResolver.php @@ -10,19 +10,19 @@ use Rector\NodeNameResolver\NodeNameResolver; use Symfony\Contracts\Service\Attribute\Required; +/** + * @implements NodeNameResolverInterface + */ final class PropertyNameResolver implements NodeNameResolverInterface { private NodeNameResolver $nodeNameResolver; #[Required] - public function autowirePropertyNameResolver(NodeNameResolver $nodeNameResolver): void + public function autowire(NodeNameResolver $nodeNameResolver): void { $this->nodeNameResolver = $nodeNameResolver; } - /** - * @return class-string - */ public function getNode(): string { return Property::class; diff --git a/packages/NodeNameResolver/NodeNameResolver/UseNameResolver.php b/packages/NodeNameResolver/NodeNameResolver/UseNameResolver.php index 6e534fcc3af..24c57a2b400 100644 --- a/packages/NodeNameResolver/NodeNameResolver/UseNameResolver.php +++ b/packages/NodeNameResolver/NodeNameResolver/UseNameResolver.php @@ -10,19 +10,19 @@ use Rector\NodeNameResolver\NodeNameResolver; use Symfony\Contracts\Service\Attribute\Required; +/** + * @implements NodeNameResolverInterface + */ final class UseNameResolver implements NodeNameResolverInterface { private NodeNameResolver $nodeNameResolver; #[Required] - public function autowireUseNameResolver(NodeNameResolver $nodeNameResolver): void + public function autowire(NodeNameResolver $nodeNameResolver): void { $this->nodeNameResolver = $nodeNameResolver; } - /** - * @return class-string - */ public function getNode(): string { return Use_::class; diff --git a/packages/NodeNameResolver/NodeNameResolver/VariableNameResolver.php b/packages/NodeNameResolver/NodeNameResolver/VariableNameResolver.php index 8a539270b6f..6b2ec89a19a 100644 --- a/packages/NodeNameResolver/NodeNameResolver/VariableNameResolver.php +++ b/packages/NodeNameResolver/NodeNameResolver/VariableNameResolver.php @@ -11,11 +11,11 @@ use Rector\NodeNameResolver\Contract\NodeNameResolverInterface; use Rector\NodeTypeResolver\Node\AttributeKey; +/** + * @implements NodeNameResolverInterface + */ final class VariableNameResolver implements NodeNameResolverInterface { - /** - * @return class-string - */ public function getNode(): string { return Variable::class; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/CastTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/CastTypeResolver.php index e84ffae54a9..61780d3105a 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/CastTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/CastTypeResolver.php @@ -23,6 +23,9 @@ use Rector\Core\Exception\NotImplementedYetException; use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface; +/** + * @implements NodeTypeResolverInterface + */ final class CastTypeResolver implements NodeTypeResolverInterface { /** @@ -35,9 +38,6 @@ final class CastTypeResolver implements NodeTypeResolverInterface Double::class => FloatType::class, ]; - /** - * @return array> - */ public function getNodeClasses(): array { return [Cast::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/ClassAndInterfaceTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/ClassAndInterfaceTypeResolver.php index 58a2f537d7f..3ecbd1012b7 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/ClassAndInterfaceTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/ClassAndInterfaceTypeResolver.php @@ -18,12 +18,11 @@ /** * @see \Rector\Tests\NodeTypeResolver\PerNodeTypeResolver\ClassAndInterfaceTypeResolver\ClassTypeResolverTest * @see \Rector\Tests\NodeTypeResolver\PerNodeTypeResolver\ClassAndInterfaceTypeResolver\InterfaceTypeResolverTest + * + * @implements NodeTypeResolverInterface */ final class ClassAndInterfaceTypeResolver implements NodeTypeResolverInterface { - /** - * @return array> - */ public function getNodeClasses(): array { return [Class_::class, Interface_::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php index d21a89f0cd2..2596446cb10 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php @@ -16,6 +16,9 @@ use Rector\NodeTypeResolver\NodeTypeResolver; use Symfony\Contracts\Service\Attribute\Required; +/** + * @implements NodeTypeResolverInterface + */ final class ClassMethodOrClassConstTypeResolver implements NodeTypeResolverInterface { private NodeTypeResolver $nodeTypeResolver; @@ -31,9 +34,6 @@ public function autowireClassMethodOrClassConstTypeResolver(NodeTypeResolver $no $this->nodeTypeResolver = $nodeTypeResolver; } - /** - * @return array> - */ public function getNodeClasses(): array { return [ClassMethod::class, ClassConst::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php index 2cea9bfd4f4..88461ebd072 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php @@ -23,6 +23,8 @@ /** * @see \Rector\Tests\NodeTypeResolver\PerNodeTypeResolver\NameTypeResolver\NameTypeResolverTest + * + * @implements NodeTypeResolverInterface */ final class NameTypeResolver implements NodeTypeResolverInterface { @@ -33,9 +35,6 @@ public function __construct( ) { } - /** - * @return array> - */ public function getNodeClasses(): array { return [Name::class, FullyQualified::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/NewTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/NewTypeResolver.php index f2c664893c7..6ab4fa48c81 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/NewTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/NewTypeResolver.php @@ -21,6 +21,9 @@ use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; +/** + * @implements NodeTypeResolverInterface + */ final class NewTypeResolver implements NodeTypeResolverInterface { public function __construct( @@ -29,9 +32,6 @@ public function __construct( ) { } - /** - * @return array> - */ public function getNodeClasses(): array { return [New_::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php index da8b5b085c5..7f3a0ee7302 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php @@ -27,6 +27,8 @@ /** * @see \Rector\Tests\NodeTypeResolver\PerNodeTypeResolver\ParamTypeResolver\ParamTypeResolverTest + * + * @implements NodeTypeResolverInterface */ final class ParamTypeResolver implements NodeTypeResolverInterface { @@ -43,17 +45,12 @@ public function __construct( } #[Required] - public function autowireParamTypeResolver( - NodeTypeResolver $nodeTypeResolver, - StaticTypeMapper $staticTypeMapper - ): void { + public function autowire(NodeTypeResolver $nodeTypeResolver, StaticTypeMapper $staticTypeMapper): void + { $this->nodeTypeResolver = $nodeTypeResolver; $this->staticTypeMapper = $staticTypeMapper; } - /** - * @return array> - */ public function getNodeClasses(): array { return [Param::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/PropertyFetchTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/PropertyFetchTypeResolver.php index b5463be43f8..dfb485a0642 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/PropertyFetchTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/PropertyFetchTypeResolver.php @@ -21,6 +21,8 @@ /** * @see \Rector\Tests\NodeTypeResolver\PerNodeTypeResolver\PropertyFetchTypeResolver\PropertyFetchTypeResolverTest + * + * @implements NodeTypeResolverInterface */ final class PropertyFetchTypeResolver implements NodeTypeResolverInterface { @@ -34,14 +36,11 @@ public function __construct( } #[Required] - public function autowirePropertyFetchTypeResolver(NodeTypeResolver $nodeTypeResolver): void + public function autowire(NodeTypeResolver $nodeTypeResolver): void { $this->nodeTypeResolver = $nodeTypeResolver; } - /** - * @return array> - */ public function getNodeClasses(): array { return [PropertyFetch::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/PropertyTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/PropertyTypeResolver.php index b276bcf47d1..d2bfdf5b1b5 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/PropertyTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/PropertyTypeResolver.php @@ -16,6 +16,8 @@ /** * @see \Rector\Tests\NodeTypeResolver\PerNodeTypeResolver\PropertyTypeResolver\PropertyTypeResolverTest + * + * @implements NodeTypeResolverInterface */ final class PropertyTypeResolver implements NodeTypeResolverInterface { @@ -27,9 +29,6 @@ public function autowirePropertyTypeResolver(NodeTypeResolver $nodeTypeResolver) $this->nodeTypeResolver = $nodeTypeResolver; } - /** - * @return array> - */ public function getNodeClasses(): array { return [Property::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/ReturnTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/ReturnTypeResolver.php index 1a5a513fcbb..d27279e086f 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/ReturnTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/ReturnTypeResolver.php @@ -12,19 +12,19 @@ use Rector\NodeTypeResolver\NodeTypeResolver; use Symfony\Contracts\Service\Attribute\Required; +/** + * @implements NodeTypeResolverInterface + */ final class ReturnTypeResolver implements NodeTypeResolverInterface { private NodeTypeResolver $nodeTypeResolver; #[Required] - public function autowireReturnTypeResolver(NodeTypeResolver $nodeTypeResolver): void + public function autowire(NodeTypeResolver $nodeTypeResolver): void { $this->nodeTypeResolver = $nodeTypeResolver; } - /** - * @return array> - */ public function getNodeClasses(): array { return [Return_::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/ScalarTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/ScalarTypeResolver.php index de148feabdb..4df54189c46 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/ScalarTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/ScalarTypeResolver.php @@ -19,11 +19,11 @@ use Rector\Core\Exception\NotImplementedYetException; use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface; +/** + * @implements NodeTypeResolverInterface + */ final class ScalarTypeResolver implements NodeTypeResolverInterface { - /** - * @return array> - */ public function getNodeClasses(): array { return [Scalar::class]; @@ -32,15 +32,15 @@ public function getNodeClasses(): array public function resolve(Node $node): Type { if ($node instanceof DNumber) { - return new ConstantFloatType((float) $node->value); + return new ConstantFloatType($node->value); } if ($node instanceof String_) { - return new ConstantStringType((string) $node->value); + return new ConstantStringType($node->value); } if ($node instanceof LNumber) { - return new ConstantIntegerType((int) $node->value); + return new ConstantIntegerType($node->value); } if ($node instanceof MagicConst) { diff --git a/packages/NodeTypeResolver/NodeTypeResolver/StaticCallMethodCallTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/StaticCallMethodCallTypeResolver.php index b5a4ff54607..1a1d0e8d150 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/StaticCallMethodCallTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/StaticCallMethodCallTypeResolver.php @@ -19,6 +19,9 @@ use Rector\NodeTypeResolver\NodeTypeResolver; use Symfony\Contracts\Service\Attribute\Required; +/** + * @implements NodeTypeResolverInterface + */ final class StaticCallMethodCallTypeResolver implements NodeTypeResolverInterface { private NodeTypeResolver $nodeTypeResolver; @@ -30,14 +33,11 @@ public function __construct( } #[Required] - public function autowireStaticCallMethodCallTypeResolver(NodeTypeResolver $nodeTypeResolver): void + public function autowire(NodeTypeResolver $nodeTypeResolver): void { $this->nodeTypeResolver = $nodeTypeResolver; } - /** - * @return array> - */ public function getNodeClasses(): array { return [StaticCall::class, MethodCall::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/TraitTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/TraitTypeResolver.php index 499d1dee100..28d0a08d52d 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/TraitTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/TraitTypeResolver.php @@ -15,6 +15,8 @@ /** * @see \Rector\Tests\NodeTypeResolver\PerNodeTypeResolver\TraitTypeResolver\TraitTypeResolverTest + * + * @implements NodeTypeResolverInterface */ final class TraitTypeResolver implements NodeTypeResolverInterface { @@ -23,9 +25,6 @@ public function __construct( ) { } - /** - * @return array> - */ public function getNodeClasses(): array { return [Trait_::class]; diff --git a/packages/NodeTypeResolver/NodeVisitor/StatementNodeVisitor.php b/packages/NodeTypeResolver/NodeVisitor/StatementNodeVisitor.php index e8593df1968..5399dbf9ae7 100644 --- a/packages/NodeTypeResolver/NodeVisitor/StatementNodeVisitor.php +++ b/packages/NodeTypeResolver/NodeVisitor/StatementNodeVisitor.php @@ -48,7 +48,7 @@ public function enterNode(Node $node): ?Node $currentStmt = $node->getAttribute(AttributeKey::CURRENT_STATEMENT); - if ($parent && ! $currentStmt) { + if ($parent instanceof \PhpParser\Node && ! $currentStmt instanceof \PhpParser\Node) { $node->setAttribute( AttributeKey::PREVIOUS_STATEMENT, $parent->getAttribute(AttributeKey::PREVIOUS_STATEMENT) diff --git a/packages/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php b/packages/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php index 2b9057812a3..bb0c2cd620b 100644 --- a/packages/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php +++ b/packages/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php @@ -4,6 +4,7 @@ namespace Rector\PhpAttribute\AnnotationToAttributeMapper; +use PhpParser\Node\Expr; use Rector\PhpAttribute\AnnotationToAttributeMapper; use Rector\PhpAttribute\Contract\AnnotationToAttributeMapperInterface; use Symfony\Contracts\Service\Attribute\Required; @@ -31,10 +32,10 @@ public function isCandidate(mixed $value): bool /** * @param mixed[] $value - * @return mixed[] + * @return Expr|Expr[] */ - public function map($value): array + public function map($value): array|Expr { - return array_map(fn ($item): mixed => $this->annotationToAttributeMapper->map($item), $value); + return array_map(fn ($item): Expr => $this->annotationToAttributeMapper->map($item), $value); } } diff --git a/packages/PhpAttribute/AnnotationToAttributeMapper/CurlyListNodeAnnotationToAttributeMapper.php b/packages/PhpAttribute/AnnotationToAttributeMapper/CurlyListNodeAnnotationToAttributeMapper.php index 8db611e0e25..c309b99a6e4 100644 --- a/packages/PhpAttribute/AnnotationToAttributeMapper/CurlyListNodeAnnotationToAttributeMapper.php +++ b/packages/PhpAttribute/AnnotationToAttributeMapper/CurlyListNodeAnnotationToAttributeMapper.php @@ -4,6 +4,7 @@ namespace Rector\PhpAttribute\AnnotationToAttributeMapper; +use PhpParser\Node\Expr; use Rector\BetterPhpDocParser\ValueObject\PhpDoc\DoctrineAnnotation\CurlyListNode; use Rector\PhpAttribute\AnnotationToAttributeMapper; use Rector\PhpAttribute\Contract\AnnotationToAttributeMapperInterface; @@ -32,9 +33,8 @@ public function isCandidate(mixed $value): bool /** * @param CurlyListNode $value - * @return mixed[] */ - public function map($value): array + public function map($value): array|Expr { return array_map( fn ($node): mixed => $this->annotationToAttributeMapper->map($node), diff --git a/phpstan.neon b/phpstan.neon index 5d341589a81..d292d68dda9 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -37,7 +37,7 @@ parameters: scanDirectories: - stubs - reportUnmatchedIgnoredErrors: false +# reportUnmatchedIgnoredErrors: false checkGenericClassInNonGenericObjectType: false excludePaths: @@ -146,7 +146,6 @@ parameters: - message: '#If condition is always false#' paths: - - rules/Renaming/Rector/FileWithoutNamespace/PseudoNamespaceToNamespaceRector.php - rules/CodeQuality/Rector/Concat/JoinStringConcatRector.php - packages/NodeNestingScope/NodeFinder/ScopeAwareNodeFinder.php @@ -259,11 +258,6 @@ parameters: - '#Cognitive complexity for "Rector\\CodeQuality\\Rector\\Isset_\\IssetOnPropertyObjectToPropertyExistsRector\:\:refactor\(\)" is \d+, keep it under 10#' - - - message: '#Argument and options "debug" got confused#' - paths: - - src/Console/Command/ProcessCommand.php - - '#(.*?) class\-string, string given#' # part of refactor() API, node must be returned, or does bring any value @@ -330,7 +324,6 @@ parameters: message: '#Function "function_exists\(\)" cannot be used/left in the code#' paths: - src/functions/node_helper.php - - packages/NodeTypeResolver/PHPStan/CollisionGuard/MixinGuard.php # special case - cleanup in the future - @@ -358,11 +351,6 @@ parameters: # false positive - '#Attribute class JetBrains\\PhpStorm\\Immutable does not exist#' - # allowed for ease api - - - message: '#Cannot return include_once/require_once#' - path: rules/Renaming/Rector/Name/RenameClassRector.php - # class-string miss match - '#Parameter \#1 \$classes of method Rector\\BetterPhpDocParser\\PhpDocInfo\\PhpDocInfo\:\:getByAnnotationClasses\(\) expects array, array given#' - '#Parameter \#1 \$classes of method Rector\\BetterPhpDocParser\\PhpDocInfo\\PhpDocInfo\:\:getByAnnotationClasses\(\) expects array, array given#' @@ -509,12 +497,6 @@ parameters: path: rules/EarlyReturn/Rector/If_/ChangeAndIfToEarlyReturnRector.php message: '#Class cognitive complexity is 31, keep it under 30#' - - - message: '#Autowired/inject method name must respect "autowire/inject" \+ class name#' - paths: - - packages/StaticTypeMapper/PhpDocParser/IntersectionTypeMapper.php - - packages/StaticTypeMapper/PhpParser/IntersectionTypeNodeMapper.php - - message: '#Use separate function calls with readable variable names#' path: src/DependencyInjection/Loader/Configurator/RectorServiceConfigurator.php @@ -523,9 +505,6 @@ parameters: message: '#\$service\-\>call\("configure", \[\[ \.\.\. \]\]\) must be followed by exact array#' path: src/DependencyInjection/Loader/Configurator/RectorServiceConfigurator.php - # this rule should only check parent autowire override case, @todo update in symplify - - '#Autowired/inject method name must respect "autowire/inject" \+ class name#' - # on purpose to make use of worker paralle pattern - message: '#Instead of abstract class, use specific service with composition#' @@ -581,9 +560,6 @@ parameters: - '#Method Rector\\Core\\PhpParser\\NodeTraverser\\RectorNodeTraverser\:\:traverse\(\) should return array but returns array#' - '#Parameter \#1 \$stmts of class Rector\\Core\\PhpParser\\Node\\CustomNode\\FileWithoutNamespace constructor expects array, array given#' - # skip === false compare - - '#Do not compare call directly, use a variable assign#' - # strict - resolve later - '#Foreach overwrites \$(.*?) with its value variable#' @@ -592,16 +568,20 @@ parameters: path: rules/Renaming/Rector/FileWithoutNamespace/PseudoNamespaceToNamespaceRector.php # stricter child type on purpose - - '#Parameter \#1 \$tokenIterator \(Rector\\BetterPhpDocParser\\ValueObject\\Parser\\BetterTokenIterator\) of method Rector\\BetterPhpDocParser\\PhpDocParser\\BetterPhpDocParser\:\:parseTagValue\(\) should be contravariant with parameter \$tokens \(PHPStan\\PhpDocParser\\Parser\\TokenIterator\) of method PHPStan\\PhpDocParser\\Parser\\PhpDocParser\:\:parseTagValue\(\)#' - '#Parameter \#1 \$nodes \(array\) of method Rector\\PostRector\\Rector\\(.*?)\:\:beforeTraverse\(\) should be contravariant with parameter \$nodes \(array\) of method PhpParser\\NodeVisitor\:\:beforeTraverse\(\)#' - # on purpose - - '#Instead of "instanceof/is_a\(\)" use ReflectionProvider service or "\(new ObjectType\(\)\)\-\>isSuperTypeOf\(\)" for static reflection to work#' - # stricter child type on purpose - '#Parameter \#1 \$tokenIterator \(Rector\\BetterPhpDocParser\\ValueObject\\Parser\\BetterTokenIterator\) of method Rector\\BetterPhpDocParser\\PhpDocParser\\BetterPhpDocParser\:\:parseTagValue\(\) should be contravariant with parameter \$tokens \(PHPStan\\PhpDocParser\\Parser\\TokenIterator\) of method PHPStan\\PhpDocParser\\Parser\\PhpDocParser\:\:parseTagValue\(\)#' + - '#Parameter \#1 \$nodes \(array\) of method Rector\\PostRector\\Rector\\(.*?)\:\:beforeTraverse\(\) should be contravariant with parameter \$nodes \(array\) of method PhpParser\\NodeVisitorAbstract\:\:beforeTraverse\(\)#' # property changed else-where - message: '#If condition is always false#' path: rules/TypeDeclaration/Rector/FunctionLike/ParamTypeDeclarationRector.php + + # on purpose, allows empty tokens + - '#Rector\\BetterPhpDocParser\\ValueObject\\Parser\\BetterTokenIterator\:\:__construct\(\) does not call parent constructor from PHPStan\\PhpDocParser\\Parser\\TokenIterator#' + - '#Rector\\Comments\\NodeTraverser\\CommentRemovingNodeTraverser\:\:__construct\(\) does not call parent constructor from PhpParser\\NodeTraverser#' + + # resolve later + - '#Method Rector\\PhpAttribute\\AnnotationToAttributeMapper\\CurlyListNodeAnnotationToAttributeMapper\:\:map\(\) should return array\|PhpParser\\Node\\Expr but returns array\|PhpParser\\Node\\Expr\>#' diff --git a/rules/CodingStyle/Node/NameImporter.php b/rules/CodingStyle/Node/NameImporter.php index c8a74b7bb34..754232958cf 100644 --- a/rules/CodingStyle/Node/NameImporter.php +++ b/rules/CodingStyle/Node/NameImporter.php @@ -16,7 +16,6 @@ use Rector\CodingStyle\ClassNameImport\ClassNameImportSkipper; use Rector\Core\Configuration\Option; use Rector\Core\ValueObject\Application\File; -use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PostRector\Collector\UseNodesToAddCollector; use Rector\StaticTypeMapper\StaticTypeMapper; @@ -33,7 +32,6 @@ final class NameImporter public function __construct( private AliasUsesResolver $aliasUsesResolver, private ClassNameImportSkipper $classNameImportSkipper, - private NodeNameResolver $nodeNameResolver, private ParameterProvider $parameterProvider, private StaticTypeMapper $staticTypeMapper, private UseNodesToAddCollector $useNodesToAddCollector, @@ -92,8 +90,8 @@ private function shouldSkipName(Name $name): bool // Importing root namespace classes (like \DateTime) is optional if (! $this->parameterProvider->provideBoolParameter(Option::IMPORT_SHORT_CLASSES)) { - $stringName = $this->nodeNameResolver->getName($name); - if ($stringName !== null && substr_count($stringName, '\\') === 0) { + $stringName = $name->toString(); + if (substr_count($stringName, '\\') === 0) { return true; } } From 92da5530b33954fc8e1ca1612421aa3183746479 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sun, 28 Nov 2021 21:29:35 +0300 Subject: [PATCH 3/4] normalize autowire to autowire() name --- build/target-repository/docs/rector_rules_overview.md | 4 ++-- .../StaticDoctrineAnnotationParser/PlainValueParser.php | 2 +- .../NodeTypeResolver/NodeTypeResolver/CastTypeResolver.php | 4 ++++ .../NodeTypeResolver/ClassAndInterfaceTypeResolver.php | 3 +++ .../ClassMethodOrClassConstTypeResolver.php | 5 ++++- .../NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php | 3 +++ .../NodeTypeResolver/NodeTypeResolver/NewTypeResolver.php | 4 ++++ .../NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php | 3 +++ .../NodeTypeResolver/PropertyFetchTypeResolver.php | 4 ++++ .../NodeTypeResolver/PropertyTypeResolver.php | 5 ++++- .../NodeTypeResolver/ReturnTypeResolver.php | 3 +++ .../NodeTypeResolver/ScalarTypeResolver.php | 4 ++++ .../NodeTypeResolver/StaticCallMethodCallTypeResolver.php | 3 +++ .../NodeTypeResolver/NodeTypeResolver/TraitTypeResolver.php | 3 +++ .../NodeTypeResolver/VariableTypeResolver.php | 4 ++++ .../NodeTypeResolver/NodeVisitor/StatementNodeVisitor.php | 2 +- .../PHPStanStaticTypeMapper/TypeMapper/ArrayTypeMapper.php | 2 +- .../TypeMapper/CallableTypeMapper.php | 2 +- .../TypeMapper/ClassStringTypeMapper.php | 2 +- .../TypeMapper/ClosureTypeMapper.php | 2 +- .../TypeMapper/IntersectionTypeMapper.php | 2 +- .../TypeMapper/IterableTypeMapper.php | 2 +- .../PHPStanStaticTypeMapper/TypeMapper/ObjectTypeMapper.php | 2 +- .../PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php | 2 +- .../ArrayAnnotationToAttributeMapper.php | 3 +-- .../Contract/AnnotationToAttributeMapperInterface.php | 2 +- packages/StaticTypeMapper/Naming/NameScopeFactory.php | 2 +- .../PhpDocParser/IntersectionTypeMapper.php | 2 +- packages/StaticTypeMapper/PhpDocParser/UnionTypeMapper.php | 2 +- .../PhpParser/IntersectionTypeNodeMapper.php | 2 +- .../StaticTypeMapper/PhpParser/NullableTypeNodeMapper.php | 2 +- packages/StaticTypeMapper/PhpParser/UnionTypeNodeMapper.php | 2 +- phpstan.neon | 2 +- .../Fixture/with_required_annotation.php.inc | 4 ++-- .../Fixture/with_required_attribute.php.inc | 4 ++-- .../Fixture/skip_autowired_method.php.inc | 2 +- .../Fixture/skip_autowired_method_annotation.php.inc | 2 +- rules/CodingStyle/ClassNameImport/ShortNameResolver.php | 2 +- .../RemoveUnusedParamInRequiredAutowireRector.php | 4 ++-- .../Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector.php | 6 +++++- .../PHPUnitDataProviderParamTypeInferer.php | 2 +- src/NodeAnalyzer/CallAnalyzer.php | 2 +- src/Rector/AbstractRector.php | 2 +- .../SourceLocator/ParentAttributeSourceLocator.php | 2 +- 44 files changed, 85 insertions(+), 38 deletions(-) diff --git a/build/target-repository/docs/rector_rules_overview.md b/build/target-repository/docs/rector_rules_overview.md index 46c72720637..30f8f087e3f 100644 --- a/build/target-repository/docs/rector_rules_overview.md +++ b/build/target-repository/docs/rector_rules_overview.md @@ -3684,8 +3684,8 @@ Remove unused parameter in required autowire method private $visibilityManipulator; #[Required] -- public function autowireSomeService(VisibilityManipulator $visibilityManipulator) -+ public function autowireSomeService() +- public function autowire(VisibilityManipulator $visibilityManipulator) ++ public function autowire() { } } diff --git a/packages/BetterPhpDocParser/PhpDocParser/StaticDoctrineAnnotationParser/PlainValueParser.php b/packages/BetterPhpDocParser/PhpDocParser/StaticDoctrineAnnotationParser/PlainValueParser.php index 7bca36a5346..81a21b9055e 100644 --- a/packages/BetterPhpDocParser/PhpDocParser/StaticDoctrineAnnotationParser/PlainValueParser.php +++ b/packages/BetterPhpDocParser/PhpDocParser/StaticDoctrineAnnotationParser/PlainValueParser.php @@ -33,7 +33,7 @@ public function __construct( } #[Required] - public function autowirePlainValueParser( + public function autowire( StaticDoctrineAnnotationParser $staticDoctrineAnnotationParser, ArrayParser $arrayParser ): void { diff --git a/packages/NodeTypeResolver/NodeTypeResolver/CastTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/CastTypeResolver.php index 61780d3105a..c633ea8371f 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/CastTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/CastTypeResolver.php @@ -5,6 +5,7 @@ namespace Rector\NodeTypeResolver\NodeTypeResolver; use PhpParser\Node; +use PhpParser\Node\Expr; use PhpParser\Node\Expr\Cast; use PhpParser\Node\Expr\Cast\Array_; use PhpParser\Node\Expr\Cast\Bool_; @@ -38,6 +39,9 @@ final class CastTypeResolver implements NodeTypeResolverInterface Double::class => FloatType::class, ]; + /** + * @return array> + */ public function getNodeClasses(): array { return [Cast::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/ClassAndInterfaceTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/ClassAndInterfaceTypeResolver.php index 3ecbd1012b7..9cea6602f51 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/ClassAndInterfaceTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/ClassAndInterfaceTypeResolver.php @@ -23,6 +23,9 @@ */ final class ClassAndInterfaceTypeResolver implements NodeTypeResolverInterface { + /** + * @return class-string[] + */ public function getNodeClasses(): array { return [Class_::class, Interface_::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php index 2596446cb10..973bbc78d3e 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php @@ -29,11 +29,14 @@ public function __construct( } #[Required] - public function autowireClassMethodOrClassConstTypeResolver(NodeTypeResolver $nodeTypeResolver): void + public function autowire(NodeTypeResolver $nodeTypeResolver): void { $this->nodeTypeResolver = $nodeTypeResolver; } + /** + * @return class-string[] + */ public function getNodeClasses(): array { return [ClassMethod::class, ClassConst::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php index 88461ebd072..defb9640261 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php @@ -35,6 +35,9 @@ public function __construct( ) { } + /** + * @return array> + */ public function getNodeClasses(): array { return [Name::class, FullyQualified::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/NewTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/NewTypeResolver.php index 6ab4fa48c81..c2cdd5efa7c 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/NewTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/NewTypeResolver.php @@ -5,6 +5,7 @@ namespace Rector\NodeTypeResolver\NodeTypeResolver; use PhpParser\Node; +use PhpParser\Node\Expr; use PhpParser\Node\Expr\New_; use PhpParser\Node\Name; use PhpParser\Node\Stmt\Class_; @@ -32,6 +33,9 @@ public function __construct( ) { } + /** + * @return array> + */ public function getNodeClasses(): array { return [New_::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php index 7f3a0ee7302..e63de0d6de6 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php @@ -51,6 +51,9 @@ public function autowire(NodeTypeResolver $nodeTypeResolver, StaticTypeMapper $s $this->staticTypeMapper = $staticTypeMapper; } + /** + * @return array> + */ public function getNodeClasses(): array { return [Param::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/PropertyFetchTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/PropertyFetchTypeResolver.php index dfb485a0642..d1cb4702679 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/PropertyFetchTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/PropertyFetchTypeResolver.php @@ -5,6 +5,7 @@ namespace Rector\NodeTypeResolver\NodeTypeResolver; use PhpParser\Node; +use PhpParser\Node\Expr; use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Stmt\ClassLike; use PHPStan\Analyser\Scope; @@ -41,6 +42,9 @@ public function autowire(NodeTypeResolver $nodeTypeResolver): void $this->nodeTypeResolver = $nodeTypeResolver; } + /** + * @return array> + */ public function getNodeClasses(): array { return [PropertyFetch::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/PropertyTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/PropertyTypeResolver.php index d2bfdf5b1b5..f0f3b4757a9 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/PropertyTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/PropertyTypeResolver.php @@ -24,11 +24,14 @@ final class PropertyTypeResolver implements NodeTypeResolverInterface private NodeTypeResolver $nodeTypeResolver; #[Required] - public function autowirePropertyTypeResolver(NodeTypeResolver $nodeTypeResolver): void + public function autowire(NodeTypeResolver $nodeTypeResolver): void { $this->nodeTypeResolver = $nodeTypeResolver; } + /** + * @return array> + */ public function getNodeClasses(): array { return [Property::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/ReturnTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/ReturnTypeResolver.php index d27279e086f..5fe2d53b947 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/ReturnTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/ReturnTypeResolver.php @@ -25,6 +25,9 @@ public function autowire(NodeTypeResolver $nodeTypeResolver): void $this->nodeTypeResolver = $nodeTypeResolver; } + /** + * @return array> + */ public function getNodeClasses(): array { return [Return_::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/ScalarTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/ScalarTypeResolver.php index 4df54189c46..e4646fb7326 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/ScalarTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/ScalarTypeResolver.php @@ -5,6 +5,7 @@ namespace Rector\NodeTypeResolver\NodeTypeResolver; use PhpParser\Node; +use PhpParser\Node\Expr; use PhpParser\Node\Scalar; use PhpParser\Node\Scalar\DNumber; use PhpParser\Node\Scalar\Encapsed; @@ -24,6 +25,9 @@ */ final class ScalarTypeResolver implements NodeTypeResolverInterface { + /** + * @return array> + */ public function getNodeClasses(): array { return [Scalar::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/StaticCallMethodCallTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/StaticCallMethodCallTypeResolver.php index 1a1d0e8d150..3fc1cd334dc 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/StaticCallMethodCallTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/StaticCallMethodCallTypeResolver.php @@ -38,6 +38,9 @@ public function autowire(NodeTypeResolver $nodeTypeResolver): void $this->nodeTypeResolver = $nodeTypeResolver; } + /** + * @return class-string[] + */ public function getNodeClasses(): array { return [StaticCall::class, MethodCall::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/TraitTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/TraitTypeResolver.php index 28d0a08d52d..9b552507ae3 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/TraitTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/TraitTypeResolver.php @@ -25,6 +25,9 @@ public function __construct( ) { } + /** + * @return array> + */ public function getNodeClasses(): array { return [Trait_::class]; diff --git a/packages/NodeTypeResolver/NodeTypeResolver/VariableTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/VariableTypeResolver.php index f41e5ec438b..a29015877cc 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/VariableTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/VariableTypeResolver.php @@ -5,6 +5,7 @@ namespace Rector\NodeTypeResolver\NodeTypeResolver; use PhpParser\Node; +use PhpParser\Node\Expr; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Param; use PHPStan\Analyser\Scope; @@ -28,6 +29,9 @@ public function __construct( ) { } + /** + * @return array> + */ public function getNodeClasses(): array { return [Variable::class]; diff --git a/packages/NodeTypeResolver/NodeVisitor/StatementNodeVisitor.php b/packages/NodeTypeResolver/NodeVisitor/StatementNodeVisitor.php index 5399dbf9ae7..1a3e69f8cb5 100644 --- a/packages/NodeTypeResolver/NodeVisitor/StatementNodeVisitor.php +++ b/packages/NodeTypeResolver/NodeVisitor/StatementNodeVisitor.php @@ -48,7 +48,7 @@ public function enterNode(Node $node): ?Node $currentStmt = $node->getAttribute(AttributeKey::CURRENT_STATEMENT); - if ($parent instanceof \PhpParser\Node && ! $currentStmt instanceof \PhpParser\Node) { + if ($parent instanceof Node && ! $currentStmt instanceof Node) { $node->setAttribute( AttributeKey::PREVIOUS_STATEMENT, $parent->getAttribute(AttributeKey::PREVIOUS_STATEMENT) diff --git a/packages/PHPStanStaticTypeMapper/TypeMapper/ArrayTypeMapper.php b/packages/PHPStanStaticTypeMapper/TypeMapper/ArrayTypeMapper.php index c0a89a45d80..2ae33a7ae81 100644 --- a/packages/PHPStanStaticTypeMapper/TypeMapper/ArrayTypeMapper.php +++ b/packages/PHPStanStaticTypeMapper/TypeMapper/ArrayTypeMapper.php @@ -56,7 +56,7 @@ final class ArrayTypeMapper implements TypeMapperInterface // To avoid circular dependency #[Required] - public function autowireArrayTypeMapper( + public function autowire( PHPStanStaticTypeMapper $phpStanStaticTypeMapper, UnionTypeCommonTypeNarrower $unionTypeCommonTypeNarrower, ReflectionProvider $reflectionProvider, diff --git a/packages/PHPStanStaticTypeMapper/TypeMapper/CallableTypeMapper.php b/packages/PHPStanStaticTypeMapper/TypeMapper/CallableTypeMapper.php index aced848f1b4..ba4612972b9 100644 --- a/packages/PHPStanStaticTypeMapper/TypeMapper/CallableTypeMapper.php +++ b/packages/PHPStanStaticTypeMapper/TypeMapper/CallableTypeMapper.php @@ -25,7 +25,7 @@ final class CallableTypeMapper implements TypeMapperInterface private PHPStanStaticTypeMapper $phpStanStaticTypeMapper; #[Required] - public function autowireCallableTypeMapper(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void + public function autowire(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void { $this->phpStanStaticTypeMapper = $phpStanStaticTypeMapper; } diff --git a/packages/PHPStanStaticTypeMapper/TypeMapper/ClassStringTypeMapper.php b/packages/PHPStanStaticTypeMapper/TypeMapper/ClassStringTypeMapper.php index a04c8a4675b..96ff48d78c0 100644 --- a/packages/PHPStanStaticTypeMapper/TypeMapper/ClassStringTypeMapper.php +++ b/packages/PHPStanStaticTypeMapper/TypeMapper/ClassStringTypeMapper.php @@ -64,7 +64,7 @@ public function mapToPhpParserNode(Type $type, TypeKind $typeKind): ?Node } #[Required] - public function autowireClassStringTypeMapper(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void + public function autowire(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void { $this->phpStanStaticTypeMapper = $phpStanStaticTypeMapper; } diff --git a/packages/PHPStanStaticTypeMapper/TypeMapper/ClosureTypeMapper.php b/packages/PHPStanStaticTypeMapper/TypeMapper/ClosureTypeMapper.php index e52171ce129..41e02809be3 100644 --- a/packages/PHPStanStaticTypeMapper/TypeMapper/ClosureTypeMapper.php +++ b/packages/PHPStanStaticTypeMapper/TypeMapper/ClosureTypeMapper.php @@ -59,7 +59,7 @@ public function mapToPhpParserNode(Type $type, TypeKind $typeKind): ?Node } #[Required] - public function autowireClosureTypeMapper(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void + public function autowire(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void { $this->phpStanStaticTypeMapper = $phpStanStaticTypeMapper; } diff --git a/packages/PHPStanStaticTypeMapper/TypeMapper/IntersectionTypeMapper.php b/packages/PHPStanStaticTypeMapper/TypeMapper/IntersectionTypeMapper.php index d6545f792b8..ae867ff6f7a 100644 --- a/packages/PHPStanStaticTypeMapper/TypeMapper/IntersectionTypeMapper.php +++ b/packages/PHPStanStaticTypeMapper/TypeMapper/IntersectionTypeMapper.php @@ -31,7 +31,7 @@ public function __construct( } #[Required] - public function autowireIntersectionTypeMapper(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void + public function autowire(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void { $this->phpStanStaticTypeMapper = $phpStanStaticTypeMapper; } diff --git a/packages/PHPStanStaticTypeMapper/TypeMapper/IterableTypeMapper.php b/packages/PHPStanStaticTypeMapper/TypeMapper/IterableTypeMapper.php index 33d491d6d57..7402a9e2276 100644 --- a/packages/PHPStanStaticTypeMapper/TypeMapper/IterableTypeMapper.php +++ b/packages/PHPStanStaticTypeMapper/TypeMapper/IterableTypeMapper.php @@ -26,7 +26,7 @@ final class IterableTypeMapper implements TypeMapperInterface private PHPStanStaticTypeMapper $phpStanStaticTypeMapper; #[Required] - public function autowireIterableTypeMapper(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void + public function autowire(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void { $this->phpStanStaticTypeMapper = $phpStanStaticTypeMapper; } diff --git a/packages/PHPStanStaticTypeMapper/TypeMapper/ObjectTypeMapper.php b/packages/PHPStanStaticTypeMapper/TypeMapper/ObjectTypeMapper.php index e9e0ab62946..b30a4171ecf 100644 --- a/packages/PHPStanStaticTypeMapper/TypeMapper/ObjectTypeMapper.php +++ b/packages/PHPStanStaticTypeMapper/TypeMapper/ObjectTypeMapper.php @@ -99,7 +99,7 @@ public function mapToPhpParserNode(Type $type, TypeKind $typeKind): ?Node } #[Required] - public function autowireObjectTypeMapper(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void + public function autowire(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void { $this->phpStanStaticTypeMapper = $phpStanStaticTypeMapper; } diff --git a/packages/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php b/packages/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php index 2c9b6a1d4db..970bb72423e 100644 --- a/packages/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php +++ b/packages/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php @@ -56,7 +56,7 @@ public function __construct( } #[Required] - public function autowireUnionTypeMapper(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void + public function autowire(PHPStanStaticTypeMapper $phpStanStaticTypeMapper): void { $this->phpStanStaticTypeMapper = $phpStanStaticTypeMapper; } diff --git a/packages/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php b/packages/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php index bb0c2cd620b..d6fdf21155d 100644 --- a/packages/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php +++ b/packages/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php @@ -32,10 +32,9 @@ public function isCandidate(mixed $value): bool /** * @param mixed[] $value - * @return Expr|Expr[] */ public function map($value): array|Expr { - return array_map(fn ($item): Expr => $this->annotationToAttributeMapper->map($item), $value); + return array_map(fn ($item): Expr|array => $this->annotationToAttributeMapper->map($item), $value); } } diff --git a/packages/PhpAttribute/Contract/AnnotationToAttributeMapperInterface.php b/packages/PhpAttribute/Contract/AnnotationToAttributeMapperInterface.php index 024bf3c3dca..80c5f664f44 100644 --- a/packages/PhpAttribute/Contract/AnnotationToAttributeMapperInterface.php +++ b/packages/PhpAttribute/Contract/AnnotationToAttributeMapperInterface.php @@ -15,7 +15,7 @@ public function isCandidate(mixed $value): bool; /** * @param T $value - * @return Expr|Expr[] + * @return Expr|mixed[] */ public function map($value): array|Expr; } diff --git a/packages/StaticTypeMapper/Naming/NameScopeFactory.php b/packages/StaticTypeMapper/Naming/NameScopeFactory.php index 758ffff824b..3a502d4b19f 100644 --- a/packages/StaticTypeMapper/Naming/NameScopeFactory.php +++ b/packages/StaticTypeMapper/Naming/NameScopeFactory.php @@ -33,7 +33,7 @@ final class NameScopeFactory // This is needed to avoid circular references #[Required] - public function autowireNameScopeFactory( + public function autowire( PhpDocInfoFactory $phpDocInfoFactory, StaticTypeMapper $staticTypeMapper, BetterNodeFinder $betterNodeFinder, diff --git a/packages/StaticTypeMapper/PhpDocParser/IntersectionTypeMapper.php b/packages/StaticTypeMapper/PhpDocParser/IntersectionTypeMapper.php index d0e0e7e437b..dc3775bc522 100644 --- a/packages/StaticTypeMapper/PhpDocParser/IntersectionTypeMapper.php +++ b/packages/StaticTypeMapper/PhpDocParser/IntersectionTypeMapper.php @@ -27,7 +27,7 @@ public function getNodeType(): string } #[Required] - public function autowireUnionTypeMapper(PhpDocTypeMapper $phpDocTypeMapper): void + public function autowire(PhpDocTypeMapper $phpDocTypeMapper): void { $this->phpDocTypeMapper = $phpDocTypeMapper; } diff --git a/packages/StaticTypeMapper/PhpDocParser/UnionTypeMapper.php b/packages/StaticTypeMapper/PhpDocParser/UnionTypeMapper.php index 08a9b0c7afa..55f64ad4a3a 100644 --- a/packages/StaticTypeMapper/PhpDocParser/UnionTypeMapper.php +++ b/packages/StaticTypeMapper/PhpDocParser/UnionTypeMapper.php @@ -32,7 +32,7 @@ public function getNodeType(): string } #[Required] - public function autowireUnionTypeMapper(PhpDocTypeMapper $phpDocTypeMapper): void + public function autowire(PhpDocTypeMapper $phpDocTypeMapper): void { $this->phpDocTypeMapper = $phpDocTypeMapper; } diff --git a/packages/StaticTypeMapper/PhpParser/IntersectionTypeNodeMapper.php b/packages/StaticTypeMapper/PhpParser/IntersectionTypeNodeMapper.php index 489130cf46c..a2c29ce2742 100644 --- a/packages/StaticTypeMapper/PhpParser/IntersectionTypeNodeMapper.php +++ b/packages/StaticTypeMapper/PhpParser/IntersectionTypeNodeMapper.php @@ -19,7 +19,7 @@ final class IntersectionTypeNodeMapper implements PhpParserNodeMapperInterface private PhpParserNodeMapper $phpParserNodeMapper; #[Required] - public function autowireUnionTypeNodeMapper(PhpParserNodeMapper $phpParserNodeMapper): void + public function autowire(PhpParserNodeMapper $phpParserNodeMapper): void { $this->phpParserNodeMapper = $phpParserNodeMapper; } diff --git a/packages/StaticTypeMapper/PhpParser/NullableTypeNodeMapper.php b/packages/StaticTypeMapper/PhpParser/NullableTypeNodeMapper.php index 633706e7c93..20c2f64d4c7 100644 --- a/packages/StaticTypeMapper/PhpParser/NullableTypeNodeMapper.php +++ b/packages/StaticTypeMapper/PhpParser/NullableTypeNodeMapper.php @@ -26,7 +26,7 @@ public function __construct( } #[Required] - public function autowireNullableTypeNodeMapper(PhpParserNodeMapper $phpParserNodeMapper): void + public function autowire(PhpParserNodeMapper $phpParserNodeMapper): void { $this->phpParserNodeMapper = $phpParserNodeMapper; } diff --git a/packages/StaticTypeMapper/PhpParser/UnionTypeNodeMapper.php b/packages/StaticTypeMapper/PhpParser/UnionTypeNodeMapper.php index 8e2cf2c4556..994b6eff080 100644 --- a/packages/StaticTypeMapper/PhpParser/UnionTypeNodeMapper.php +++ b/packages/StaticTypeMapper/PhpParser/UnionTypeNodeMapper.php @@ -25,7 +25,7 @@ public function __construct( } #[Required] - public function autowireUnionTypeNodeMapper(PhpParserNodeMapper $phpParserNodeMapper): void + public function autowire(PhpParserNodeMapper $phpParserNodeMapper): void { $this->phpParserNodeMapper = $phpParserNodeMapper; } diff --git a/phpstan.neon b/phpstan.neon index d292d68dda9..455aea97a8f 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -37,7 +37,7 @@ parameters: scanDirectories: - stubs -# reportUnmatchedIgnoredErrors: false + reportUnmatchedIgnoredErrors: false checkGenericClassInNonGenericObjectType: false excludePaths: diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUnusedParamInRequiredAutowireRector/Fixture/with_required_annotation.php.inc b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUnusedParamInRequiredAutowireRector/Fixture/with_required_annotation.php.inc index 3108f2fea5c..66aa3cf6dd1 100644 --- a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUnusedParamInRequiredAutowireRector/Fixture/with_required_annotation.php.inc +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUnusedParamInRequiredAutowireRector/Fixture/with_required_annotation.php.inc @@ -7,7 +7,7 @@ class WithRequiredAnnotation private $visibilityManipulator; /** @required */ - public function autowireSomeService(VisibilityManipulator $visibilityManipulator) + public function autowire(VisibilityManipulator $visibilityManipulator) { } } @@ -23,7 +23,7 @@ class WithRequiredAnnotation private $visibilityManipulator; /** @required */ - public function autowireSomeService() + public function autowire() { } } diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUnusedParamInRequiredAutowireRector/Fixture/with_required_attribute.php.inc b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUnusedParamInRequiredAutowireRector/Fixture/with_required_attribute.php.inc index 8e7ce9c73d3..13861e0f549 100644 --- a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUnusedParamInRequiredAutowireRector/Fixture/with_required_attribute.php.inc +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUnusedParamInRequiredAutowireRector/Fixture/with_required_attribute.php.inc @@ -9,7 +9,7 @@ class WithRequiredAttribute private $visibilityManipulator; #[Required] - public function autowireSomeService(VisibilityManipulator $visibilityManipulator) + public function autowire(VisibilityManipulator $visibilityManipulator) { } } @@ -27,7 +27,7 @@ class WithRequiredAttribute private $visibilityManipulator; #[Required] - public function autowireSomeService() + public function autowire() { } } diff --git a/rules-tests/DowngradePhp72/Rector/ClassMethod/DowngradeParameterTypeWideningRector/Fixture/skip_autowired_method.php.inc b/rules-tests/DowngradePhp72/Rector/ClassMethod/DowngradeParameterTypeWideningRector/Fixture/skip_autowired_method.php.inc index bff4bc6e19b..4c9f0acd847 100644 --- a/rules-tests/DowngradePhp72/Rector/ClassMethod/DowngradeParameterTypeWideningRector/Fixture/skip_autowired_method.php.inc +++ b/rules-tests/DowngradePhp72/Rector/ClassMethod/DowngradeParameterTypeWideningRector/Fixture/skip_autowired_method.php.inc @@ -8,7 +8,7 @@ use Symfony\Contracts\Service\Attribute\Required; class SkipAutowiredMethod { #[Required] - public function autowireSomeMethod(NodeNameResolver $nodeNameResolver) + public function autowire(NodeNameResolver $nodeNameResolver) { } } diff --git a/rules-tests/DowngradePhp72/Rector/ClassMethod/DowngradeParameterTypeWideningRector/Fixture/skip_autowired_method_annotation.php.inc b/rules-tests/DowngradePhp72/Rector/ClassMethod/DowngradeParameterTypeWideningRector/Fixture/skip_autowired_method_annotation.php.inc index 6e2362097eb..23871dc6bec 100644 --- a/rules-tests/DowngradePhp72/Rector/ClassMethod/DowngradeParameterTypeWideningRector/Fixture/skip_autowired_method_annotation.php.inc +++ b/rules-tests/DowngradePhp72/Rector/ClassMethod/DowngradeParameterTypeWideningRector/Fixture/skip_autowired_method_annotation.php.inc @@ -9,7 +9,7 @@ class SkipAutowiredMethodAnnotation /** * @required */ - public function autowireSomeMethod(NodeNameResolver $nodeNameResolver) + public function autowire(NodeNameResolver $nodeNameResolver) { } } diff --git a/rules/CodingStyle/ClassNameImport/ShortNameResolver.php b/rules/CodingStyle/ClassNameImport/ShortNameResolver.php index fccebe16aa5..2a7803f8ca0 100644 --- a/rules/CodingStyle/ClassNameImport/ShortNameResolver.php +++ b/rules/CodingStyle/ClassNameImport/ShortNameResolver.php @@ -57,7 +57,7 @@ public function __construct( // Avoids circular reference #[Required] - public function autowireShortNameResolver(PhpDocInfoFactory $phpDocInfoFactory): void + public function autowire(PhpDocInfoFactory $phpDocInfoFactory): void { $this->phpDocInfoFactory = $phpDocInfoFactory; } diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedParamInRequiredAutowireRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedParamInRequiredAutowireRector.php index 4a3fbdee94b..677af4a498a 100644 --- a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedParamInRequiredAutowireRector.php +++ b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedParamInRequiredAutowireRector.php @@ -34,7 +34,7 @@ final class SomeService private $visibilityManipulator; #[Required] - public function autowireSomeService(VisibilityManipulator $visibilityManipulator) + public function autowire(VisibilityManipulator $visibilityManipulator) { } } @@ -49,7 +49,7 @@ final class SomeService private $visibilityManipulator; #[Required] - public function autowireSomeService() + public function autowire() { } } diff --git a/rules/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector.php b/rules/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector.php index 8e782dc374d..797d217f36f 100644 --- a/rules/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector.php +++ b/rules/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector.php @@ -80,7 +80,11 @@ public function refactor(Node $node): ?array } // if is skipped - if ($result === true || $result > 0) { + if ($result === true) { + return $this->refactorIsMatch($node); + } + + if ($result > 0) { return $this->refactorIsMatch($node); } diff --git a/rules/TypeDeclaration/TypeInferer/ParamTypeInferer/PHPUnitDataProviderParamTypeInferer.php b/rules/TypeDeclaration/TypeInferer/ParamTypeInferer/PHPUnitDataProviderParamTypeInferer.php index 0f3bf860885..dd967215f3a 100644 --- a/rules/TypeDeclaration/TypeInferer/ParamTypeInferer/PHPUnitDataProviderParamTypeInferer.php +++ b/rules/TypeDeclaration/TypeInferer/ParamTypeInferer/PHPUnitDataProviderParamTypeInferer.php @@ -48,7 +48,7 @@ public function __construct( // Prevents circular reference #[Required] - public function autowirePHPUnitDataProviderParamTypeInferer(NodeTypeResolver $nodeTypeResolver): void + public function autowire(NodeTypeResolver $nodeTypeResolver): void { $this->nodeTypeResolver = $nodeTypeResolver; } diff --git a/src/NodeAnalyzer/CallAnalyzer.php b/src/NodeAnalyzer/CallAnalyzer.php index 883b04d42b6..d41143cdc43 100644 --- a/src/NodeAnalyzer/CallAnalyzer.php +++ b/src/NodeAnalyzer/CallAnalyzer.php @@ -34,7 +34,7 @@ public function __construct( } #[Required] - public function autowireCallAnalyzer(BetterNodeFinder $betterNodeFinder): void + public function autowire(BetterNodeFinder $betterNodeFinder): void { $this->betterNodeFinder = $betterNodeFinder; } diff --git a/src/Rector/AbstractRector.php b/src/Rector/AbstractRector.php index 6ec97f2ce90..28d3139f57d 100644 --- a/src/Rector/AbstractRector.php +++ b/src/Rector/AbstractRector.php @@ -131,7 +131,7 @@ abstract class AbstractRector extends NodeVisitorAbstract implements PhpRectorIn private RectifiedAnalyzer $rectifiedAnalyzer; #[Required] - public function autowireAbstractRector( + public function autowire( NodesToRemoveCollector $nodesToRemoveCollector, NodesToAddCollector $nodesToAddCollector, RectorChangeCollector $rectorChangeCollector, diff --git a/src/StaticReflection/SourceLocator/ParentAttributeSourceLocator.php b/src/StaticReflection/SourceLocator/ParentAttributeSourceLocator.php index edfe6a76df8..b19367c0775 100644 --- a/src/StaticReflection/SourceLocator/ParentAttributeSourceLocator.php +++ b/src/StaticReflection/SourceLocator/ParentAttributeSourceLocator.php @@ -35,7 +35,7 @@ public function __construct( } #[Required] - public function autowireParentAttributeSourceLocator(AstResolver $astResolver): void + public function autowire(AstResolver $astResolver): void { $this->astResolver = $astResolver; } From f3afe8cca747f7c75240509972ba5a6542424163 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 28 Nov 2021 18:42:52 +0000 Subject: [PATCH 4/4] [ci-review] Rector Rectify --- .../Contract/AnnotationToAttributeMapperInterface.php | 1 - phpstan.neon | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/PhpAttribute/Contract/AnnotationToAttributeMapperInterface.php b/packages/PhpAttribute/Contract/AnnotationToAttributeMapperInterface.php index 80c5f664f44..5cad297f9eb 100644 --- a/packages/PhpAttribute/Contract/AnnotationToAttributeMapperInterface.php +++ b/packages/PhpAttribute/Contract/AnnotationToAttributeMapperInterface.php @@ -15,7 +15,6 @@ public function isCandidate(mixed $value): bool; /** * @param T $value - * @return Expr|mixed[] */ public function map($value): array|Expr; } diff --git a/phpstan.neon b/phpstan.neon index 455aea97a8f..5c5abe58b87 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -585,3 +585,8 @@ parameters: # resolve later - '#Method Rector\\PhpAttribute\\AnnotationToAttributeMapper\\CurlyListNodeAnnotationToAttributeMapper\:\:map\(\) should return array\|PhpParser\\Node\\Expr but returns array\|PhpParser\\Node\\Expr\>#' + + # always Expr or mixed nested array + - '#Method Rector\\PhpAttribute\\Contract\\AnnotationToAttributeMapperInterface\:\:map\(\) return type has no value type specified in iterable type array#' + - '#Method Rector\\PhpAttribute\\AnnotationToAttributeMapper\\(.*?)AnnotationToAttributeMapper\:\:map\(\) return type has no value type specified in iterable type array#' +