From bb59a7c99ad30770689fe011c89377402bf6c7ba Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Mon, 29 Aug 2022 22:44:20 +0200 Subject: [PATCH] [DX] Inline symplify/astral to use only active classes (#2851) --- composer.json | 1 - config/config.php | 25 +- easy-ci.php | 2 +- .../Fixture/SomeClassWithConstant.php | 10 + .../NodeValue/NodeValueResolverTest.php | 57 ++++ .../ParentConnectingPhpDocNodeVisitorTest.php | 68 +++++ .../PhpDocNodeTraverserTest.php | 47 ++++ .../Fixture/param_string_name.txt | 3 + .../SimplePhpDocParser/Fixture/var_int.txt | 3 + .../SimplePhpDocParserTest.php | 47 ++++ .../Comment/CommentsMerger.php | 2 +- .../BasePhpDocNodeVisitorInterface.php | 2 +- .../PhpDocInfo/PhpDocInfo.php | 2 +- .../PhpDocManipulator/PhpDocTagRemover.php | 2 +- .../PhpDocNodeByTypeFinder.php | 2 +- .../BetterPhpDocParser/PhpDocNodeMapper.php | 6 +- .../ArrayTypePhpDocNodeVisitor.php | 2 +- .../CallableTypePhpDocNodeVisitor.php | 2 +- .../ChangedPhpDocNodeVisitor.php | 2 +- .../IntersectionTypeNodePhpDocNodeVisitor.php | 2 +- .../TemplatePhpDocNodeVisitor.php | 2 +- .../UnionTypeNodePhpDocNodeVisitor.php | 2 +- .../ConstExprClassNameDecorator.php | 2 +- .../Printer/PhpDocInfoPrinter.php | 2 +- .../ValueObject/PhpDocAttributeKey.php | 2 +- .../NodeTypeResolver/ParamTypeResolver.php | 2 +- .../NodeAnalyzer/DocBlockClassRenamer.php | 2 +- .../NodeAnalyzer/DocBlockNameImporter.php | 2 +- .../NodeAnalyzer/DocBlockNamespaceRenamer.php | 2 +- .../PhpDoc/PhpDocTypeRenamer.php | 2 +- .../ClassRenamePhpDocNodeVisitor.php | 2 +- .../NameImportingPhpDocNodeVisitor.php | 2 +- .../UnderscoreRenamePhpDocNodeVisitor.php | 2 +- .../NodeValueResolverInterface.php | 23 ++ .../Exception/UnresolvableValueException.php | 11 + .../SimpleCallableNodeTraverser.php | 39 +++ .../NodeValue/NodeValueResolver.php | 94 +++++++ .../ClassConstFetchValueResolver.php | 64 +++++ .../ConstFetchValueResolver.php | 31 +++ .../FuncCallValueResolver.php | 78 ++++++ .../MagicConstValueResolver.php | 40 +++ .../NodeVisitor/CallableNodeVisitor.php | 43 +++ .../Contract/PhpDocNodeVisitorInterface.php | 24 ++ .../Exception/InvalidTraverseException.php | 11 + .../PhpDocParser/PhpDocNodeTraverser.php | 249 ++++++++++++++++++ .../AbstractPhpDocNodeVisitor.php | 35 +++ .../CallablePhpDocNodeVisitor.php | 31 +++ .../CloningPhpDocNodeVisitor.php | 24 ++ .../ParentConnectingPhpDocNodeVisitor.php | 49 ++++ .../PhpDocParser/SimplePhpDocParser.php | 47 ++++ .../SimplePhpDocParserStaticFactory.php | 23 ++ .../Ast/PhpDoc/SimplePhpDocNode.php | 41 +++ .../ValueObject/PhpDocAttributeKey.php | 18 ++ .../PhpDocParser/PhpParser/SmartPhpParser.php | 37 +++ .../PhpParser/SmartPhpParserFactory.php | 48 ++++ .../ClassMethodReturnTypeResolver.php | 38 +++ packages/PhpDocParser/TypeAwareNodeFinder.php | 47 ++++ .../PhpDocParser/ValueObject/AttributeKey.php | 50 ++++ .../ValueObject/NodeBuilder/ClassBuilder.php | 15 ++ .../ValueObject/NodeBuilder/MethodBuilder.php | 15 ++ .../NodeBuilder/NamespaceBuilder.php | 15 ++ .../ValueObject/NodeBuilder/ParamBuilder.php | 15 ++ .../NodeBuilder/PropertyBuilder.php | 15 ++ .../NodeBuilder/TraitUseBuilder.php | 15 ++ .../ValueObject/NodeBuilder/UseBuilder.php | 21 ++ phpstan.neon | 44 ++++ .../Fixture/param_and_var.php.inc | 4 +- .../Fixture/skip_reprint_union_array.php.inc | 2 +- .../NodeAnalyzer/ForeachAnalyzer.php | 2 +- .../NodeAnalyzer/LocalPropertyAnalyzer.php | 2 +- .../ClassNameImport/ShortNameResolver.php | 4 +- .../ClassNameImport/UseImportsTraverser.php | 2 +- .../ModifiedVariableNamesCollector.php | 2 +- .../VariadicFunctionLikeDetector.php | 2 +- .../PhpDoc/TagRemover/ParamTagRemover.php | 2 +- .../PropertyRenamer/PropertyFetchRenamer.php | 2 +- rules/Naming/VariableRenamer.php | 2 +- .../FullyQualifyStmtsAnalyzer.php | 2 +- .../UndefinedVariableResolver.php | 2 +- .../NodeFactory/AnonymousFunctionFactory.php | 2 +- .../NodeManipulator/TokenManipulator.php | 2 +- .../Class_/AnnotationToAttributeRector.php | 2 +- .../PropertyFetchWithConstFetchReplacer.php | 2 +- .../NodeManipulator/ComplexNodeRemover.php | 2 +- .../Renaming/NodeManipulator/ClassRenamer.php | 2 +- .../ConstructorAssignDetector.php | 2 +- .../NullTypeAssignDetector.php | 2 +- ...rrayShapeFromConstantArrayReturnRector.php | 2 +- .../ParamTypeByMethodCallTypeRector.php | 2 +- .../AssignToPropertyTypeInferer.php | 2 +- .../GetterNodeParamTypeInferer.php | 2 +- .../PropertyNodeParamTypeInferer.php | 2 +- .../TrustedClassMethodPropertyTypeInferer.php | 2 +- ...urnedNodesReturnTypeInfererTypeInferer.php | 2 +- ...YieldNodesReturnTypeInfererTypeInferer.php | 2 +- src/Kernel/RectorKernel.php | 2 - src/NodeAnalyzer/ParamAnalyzer.php | 2 +- src/NodeAnalyzer/PropertyFetchAnalyzer.php | 2 +- .../ArrayDestructVariableFilter.php | 2 +- .../ClassMethodPropertyFetchManipulator.php | 2 +- .../DependencyClassMethodDecorator.php | 2 +- .../FunctionLikeManipulator.php | 2 +- .../PropertyFetchAssignManipulator.php | 2 +- src/NodeManipulator/StmtsManipulator.php | 2 +- src/NodeManipulator/VariableManipulator.php | 2 +- src/PhpParser/AstResolver.php | 2 +- src/PhpParser/ClassLikeAstResolver.php | 2 +- src/PhpParser/Node/NodeFactory.php | 97 +------ src/Rector/AbstractRector.php | 2 +- .../RenamedClassesSourceLocator.php | 5 +- 110 files changed, 1690 insertions(+), 163 deletions(-) create mode 100644 packages-tests/PhpDocParser/NodeValue/Fixture/SomeClassWithConstant.php create mode 100644 packages-tests/PhpDocParser/NodeValue/NodeValueResolverTest.php create mode 100644 packages-tests/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/ParentConnectingPhpDocNodeVisitorTest.php create mode 100644 packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocNodeTraverser/PhpDocNodeTraverserTest.php create mode 100644 packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocParser/Fixture/param_string_name.txt create mode 100644 packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocParser/Fixture/var_int.txt create mode 100644 packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocParser/SimplePhpDocParserTest.php create mode 100644 packages/PhpDocParser/Contract/NodeValueResolver/NodeValueResolverInterface.php create mode 100644 packages/PhpDocParser/Exception/UnresolvableValueException.php create mode 100644 packages/PhpDocParser/NodeTraverser/SimpleCallableNodeTraverser.php create mode 100644 packages/PhpDocParser/NodeValue/NodeValueResolver.php create mode 100644 packages/PhpDocParser/NodeValue/NodeValueResolver/ClassConstFetchValueResolver.php create mode 100644 packages/PhpDocParser/NodeValue/NodeValueResolver/ConstFetchValueResolver.php create mode 100644 packages/PhpDocParser/NodeValue/NodeValueResolver/FuncCallValueResolver.php create mode 100644 packages/PhpDocParser/NodeValue/NodeValueResolver/MagicConstValueResolver.php create mode 100644 packages/PhpDocParser/NodeVisitor/CallableNodeVisitor.php create mode 100644 packages/PhpDocParser/PhpDocParser/Contract/PhpDocNodeVisitorInterface.php create mode 100644 packages/PhpDocParser/PhpDocParser/Exception/InvalidTraverseException.php create mode 100644 packages/PhpDocParser/PhpDocParser/PhpDocNodeTraverser.php create mode 100644 packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/AbstractPhpDocNodeVisitor.php create mode 100644 packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/CallablePhpDocNodeVisitor.php create mode 100644 packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/CloningPhpDocNodeVisitor.php create mode 100644 packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/ParentConnectingPhpDocNodeVisitor.php create mode 100644 packages/PhpDocParser/PhpDocParser/SimplePhpDocParser.php create mode 100644 packages/PhpDocParser/PhpDocParser/StaticFactory/SimplePhpDocParserStaticFactory.php create mode 100644 packages/PhpDocParser/PhpDocParser/ValueObject/Ast/PhpDoc/SimplePhpDocNode.php create mode 100644 packages/PhpDocParser/PhpDocParser/ValueObject/PhpDocAttributeKey.php create mode 100644 packages/PhpDocParser/PhpParser/SmartPhpParser.php create mode 100644 packages/PhpDocParser/PhpParser/SmartPhpParserFactory.php create mode 100644 packages/PhpDocParser/TypeAnalyzer/ClassMethodReturnTypeResolver.php create mode 100644 packages/PhpDocParser/TypeAwareNodeFinder.php create mode 100644 packages/PhpDocParser/ValueObject/AttributeKey.php create mode 100644 packages/PhpDocParser/ValueObject/NodeBuilder/ClassBuilder.php create mode 100644 packages/PhpDocParser/ValueObject/NodeBuilder/MethodBuilder.php create mode 100644 packages/PhpDocParser/ValueObject/NodeBuilder/NamespaceBuilder.php create mode 100644 packages/PhpDocParser/ValueObject/NodeBuilder/ParamBuilder.php create mode 100644 packages/PhpDocParser/ValueObject/NodeBuilder/PropertyBuilder.php create mode 100644 packages/PhpDocParser/ValueObject/NodeBuilder/TraitUseBuilder.php create mode 100644 packages/PhpDocParser/ValueObject/NodeBuilder/UseBuilder.php diff --git a/composer.json b/composer.json index a41521f9d59..af3de22c0a0 100644 --- a/composer.json +++ b/composer.json @@ -37,7 +37,6 @@ "symfony/dependency-injection": "^6.1", "symfony/finder": "^6.0", "symfony/string": "^6.0", - "symplify/astral": "^11.1", "symplify/autowire-array-parameter": "^11.1", "symplify/composer-json-manipulator": "^11.1", "symplify/easy-parallel": "^11.1", diff --git a/config/config.php b/config/config.php index b24e0e96834..a2cf752f10f 100644 --- a/config/config.php +++ b/config/config.php @@ -7,6 +7,7 @@ use Doctrine\Inflector\Rules\English\InflectorFactory; use OndraM\CiDetector\CiDetector; use PhpParser\BuilderFactory; +use PhpParser\ConstExprEvaluator; use PhpParser\Lexer; use PhpParser\NodeFinder; use PhpParser\NodeVisitor\CloningVisitor; @@ -17,6 +18,7 @@ use PHPStan\File\FileHelper; use PHPStan\Parser\Parser; use PHPStan\PhpDoc\TypeNodeResolver; +use PHPStan\PhpDocParser\Parser\ConstExprParser; use PHPStan\PhpDocParser\Parser\PhpDocParser; use PHPStan\PhpDocParser\Parser\TypeParser; use PHPStan\Reflection\ReflectionProvider; @@ -34,12 +36,14 @@ use Rector\NodeTypeResolver\DependencyInjection\PHPStanServicesFactory; use Rector\NodeTypeResolver\Reflection\BetterReflection\SourceLocator\IntermediateSourceLocator; use Rector\NodeTypeResolver\Reflection\BetterReflection\SourceLocatorProvider\DynamicSourceLocatorProvider; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\PhpParser\SmartPhpParser; +use Rector\PhpDocParser\PhpParser\SmartPhpParserFactory; use Rector\PSR4\Composer\PSR4NamespaceMatcher; use Rector\PSR4\Contract\PSR4AutoloadNamespaceMatcherInterface; use Rector\Utils\Command\MissingInSetCommand; use Symfony\Component\Console\Application; use function Symfony\Component\DependencyInjection\Loader\Configurator\service; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; use Symplify\EasyParallel\ValueObject\EasyParallelConfig; use Symplify\PackageBuilder\Parameter\ParameterProvider; use Symplify\PackageBuilder\Php\TypeChecker; @@ -85,6 +89,12 @@ __DIR__ . '/../packages/BetterPhpDocParser/PhpDocInfo/PhpDocInfo.php', __DIR__ . '/../packages/Testing/PHPUnit', __DIR__ . '/../packages/BetterPhpDocParser/PhpDoc', + + __DIR__ . '/../packages/PhpDocParser/NodeVisitor', + __DIR__ . '/../packages/PhpDocParser/PhpParser/SmartPhpParser.php', + __DIR__ . '/../packages/PhpDocParser/ValueObject', + __DIR__ . '/../packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/CallablePhpDocNodeVisitor.php', + __DIR__ . '/../packages/PHPStanStaticTypeMapper/Enum', __DIR__ . '/../packages/Caching/Cache.php', __DIR__ . '/../packages/NodeTypeResolver/PhpDocNodeVisitor/UnderscoreRenamePhpDocNodeVisitor.php', @@ -216,4 +226,17 @@ ->factory([service(PHPStanServicesFactory::class), 'createDynamicSourceLocatorProvider']); $services->set(MissingInSetCommand::class); + + // phpdoc parser + $services->set(SmartPhpParser::class) + ->factory([service(SmartPhpParserFactory::class), 'create']); + + $services->set(ConstExprEvaluator::class); + $services->set(NodeFinder::class); + + // phpdoc parser + $services->set(PhpDocParser::class); + $services->set(\PHPStan\PhpDocParser\Lexer\Lexer::class); + $services->set(TypeParser::class); + $services->set(ConstExprParser::class); }; diff --git a/easy-ci.php b/easy-ci.php index 7a1b32a0f55..713b98e6e23 100644 --- a/easy-ci.php +++ b/easy-ci.php @@ -33,6 +33,7 @@ use Rector\Php81\NodeFactory\ClassFromEnumFactory; use Rector\PhpAttribute\Contract\AnnotationToAttributeMapperInterface; use Rector\PhpAttribute\NodeFactory\DoctrineAnnotationFactory; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; use Rector\PHPStanStaticTypeMapper\Contract\TypeMapperInterface; use Rector\ReadWrite\Contract\ParentNodeReadAnalyzerInterface; use Rector\ReadWrite\Contract\ReadNodeAnalyzerInterface; @@ -45,7 +46,6 @@ use Rector\TypeDeclaration\Contract\TypeInferer\ReturnTypeInfererInterface; use Symfony\Component\Console\Application; use Symfony\Component\Console\Command\Command; -use Symplify\Astral\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; use Symplify\EasyCI\Config\EasyCIConfig; return static function (EasyCIConfig $easyCiConfig): void { diff --git a/packages-tests/PhpDocParser/NodeValue/Fixture/SomeClassWithConstant.php b/packages-tests/PhpDocParser/NodeValue/Fixture/SomeClassWithConstant.php new file mode 100644 index 00000000000..8b4ed8191af --- /dev/null +++ b/packages-tests/PhpDocParser/NodeValue/Fixture/SomeClassWithConstant.php @@ -0,0 +1,10 @@ +boot(); + $this->nodeValueResolver = $this->getService(NodeValueResolver::class); + } + + /** + * @dataProvider provideData() + * @param string|class-string<\Rector\Tests\PhpDocParser\NodeValue\NodeValueResolverTest>|bool $expectedValue + */ + public function test(Expr $expr, string|bool $expectedValue): void + { + $resolvedValue = $this->nodeValueResolver->resolve($expr, __FILE__); + $this->assertSame($expectedValue, $resolvedValue); + } + + /** + * @return Iterator + */ + public function provideData(): Iterator + { + yield [new String_('value'), 'value']; + yield [new ClassConstFetch(new FullyQualified(self::class), 'class'), self::class]; + yield [new ClassConstFetch(new FullyQualified(SomeClassWithConstant::class), 'NAME'), 'value']; + yield [new Dir(), __DIR__]; + yield [new ConstFetch(new Name('true')), true]; + yield [new Concat(new Dir(), new String_('/example.latte')), __DIR__ . '/example.latte']; + $args = [new Arg(new String_('.php')), new Arg(new String_('.latte')), new Arg(new File())]; + yield [new FuncCall(new Name('str_replace'), $args), __DIR__ . '/NodeValueResolverTest.latte']; + } +} diff --git a/packages-tests/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/ParentConnectingPhpDocNodeVisitorTest.php b/packages-tests/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/ParentConnectingPhpDocNodeVisitorTest.php new file mode 100644 index 00000000000..bd95220eb67 --- /dev/null +++ b/packages-tests/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/ParentConnectingPhpDocNodeVisitorTest.php @@ -0,0 +1,68 @@ +boot(); + + $this->phpDocNodeTraverser = $this->getService(PhpDocNodeTraverser::class); + + /** @var ParentConnectingPhpDocNodeVisitor $parentConnectingPhpDocNodeVisitor */ + $parentConnectingPhpDocNodeVisitor = $this->getService(ParentConnectingPhpDocNodeVisitor::class); + $this->phpDocNodeTraverser->addPhpDocNodeVisitor($parentConnectingPhpDocNodeVisitor); + } + + public function testTypeNode(): void + { + $phpDocNode = $this->createPhpDocNode(); + $this->phpDocNodeTraverser->traverse($phpDocNode); + + /** @var PhpDocTagNode $phpDocChildNode */ + $phpDocChildNode = $phpDocNode->children[0]; + + $returnTagValueNode = $phpDocChildNode->value; + + $this->assertInstanceOf(ReturnTagValueNode::class, $returnTagValueNode); + + /** @var ReturnTagValueNode $returnTagValueNode */ + $returnParent = $returnTagValueNode->getAttribute(PhpDocAttributeKey::PARENT); + $this->assertSame($phpDocChildNode, $returnParent); + + $returnTypeParent = $returnTagValueNode->type->getAttribute(PhpDocAttributeKey::PARENT); + $this->assertSame($returnTagValueNode, $returnTypeParent); + + // test child + parent node + $phpDocChildNode = $phpDocNode->children[0]; + $this->assertInstanceOf(PhpDocTagNode::class, $phpDocChildNode); + + $childParent = $phpDocChildNode->getAttribute(PhpDocAttributeKey::PARENT); + $this->assertSame($phpDocNode, $childParent); + } + + private function createPhpDocNode(): PhpDocNode + { + $returnTagValueNode = new ReturnTagValueNode(new IdentifierTypeNode('string'), ''); + + return new PhpDocNode([ + new PhpDocTagNode('@return', $returnTagValueNode), + new PhpDocTextNode('some text'), + ]); + } +} diff --git a/packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocNodeTraverser/PhpDocNodeTraverserTest.php b/packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocNodeTraverser/PhpDocNodeTraverserTest.php new file mode 100644 index 00000000000..4e839cdd364 --- /dev/null +++ b/packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocNodeTraverser/PhpDocNodeTraverserTest.php @@ -0,0 +1,47 @@ +boot(); + $this->phpDocNodeTraverser = $this->getService(PhpDocNodeTraverser::class); + } + + public function test(): void + { + $varTagValueNode = new VarTagValueNode(new IdentifierTypeNode('string'), '', ''); + $phpDocNode = new PhpDocNode([new PhpDocTagNode('@var', $varTagValueNode)]); + + $this->phpDocNodeTraverser->traverseWithCallable($phpDocNode, '', static function (Node $node): Node { + if (! $node instanceof VarTagValueNode) { + return $node; + } + + $node->description = self::SOME_DESCRIPTION; + return $node; + }); + + $varTagValueNodes = $phpDocNode->getVarTagValues(); + $this->assertSame(self::SOME_DESCRIPTION, $varTagValueNodes[0]->description); + } +} diff --git a/packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocParser/Fixture/param_string_name.txt b/packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocParser/Fixture/param_string_name.txt new file mode 100644 index 00000000000..99db73e8323 --- /dev/null +++ b/packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocParser/Fixture/param_string_name.txt @@ -0,0 +1,3 @@ +/** + * @param string $name + */ diff --git a/packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocParser/Fixture/var_int.txt b/packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocParser/Fixture/var_int.txt new file mode 100644 index 00000000000..00b065e588d --- /dev/null +++ b/packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocParser/Fixture/var_int.txt @@ -0,0 +1,3 @@ +/** + * @var int + */ diff --git a/packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocParser/SimplePhpDocParserTest.php b/packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocParser/SimplePhpDocParserTest.php new file mode 100644 index 00000000000..4d81283c18f --- /dev/null +++ b/packages-tests/PhpDocParser/PhpDocParser/SimplePhpDocParser/SimplePhpDocParserTest.php @@ -0,0 +1,47 @@ +boot(); + + $this->simplePhpDocParser = $this->getService(SimplePhpDocParser::class); + } + + public function testVar(): void + { + $fileContents = FileSystem::read(__DIR__ . '/Fixture/var_int.txt'); + + $simplePhpDocNode = $this->simplePhpDocParser->parseDocBlock($fileContents); + $this->assertInstanceOf(SimplePhpDocNode::class, $simplePhpDocNode); + + $varTagValues = $simplePhpDocNode->getVarTagValues(); + $this->assertCount(1, $varTagValues); + } + + public function testParam(): void + { + $fileContents = FileSystem::read(__DIR__ . '/Fixture/param_string_name.txt'); + + $simplePhpDocNode = $this->simplePhpDocParser->parseDocBlock($fileContents); + $this->assertInstanceOf(SimplePhpDocNode::class, $simplePhpDocNode); + + // DX friendly + $paramType = $simplePhpDocNode->getParamType('name'); + $withDollarParamType = $simplePhpDocNode->getParamType('$name'); + + $this->assertSame($paramType, $withDollarParamType); + } +} diff --git a/packages/BetterPhpDocParser/Comment/CommentsMerger.php b/packages/BetterPhpDocParser/Comment/CommentsMerger.php index 769803a041f..c63ebc39124 100644 --- a/packages/BetterPhpDocParser/Comment/CommentsMerger.php +++ b/packages/BetterPhpDocParser/Comment/CommentsMerger.php @@ -7,7 +7,7 @@ use PhpParser\Comment; use PhpParser\Node; use Rector\NodeTypeResolver\Node\AttributeKey; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class CommentsMerger { diff --git a/packages/BetterPhpDocParser/Contract/BasePhpDocNodeVisitorInterface.php b/packages/BetterPhpDocParser/Contract/BasePhpDocNodeVisitorInterface.php index e42e1b66832..3f11b38e534 100644 --- a/packages/BetterPhpDocParser/Contract/BasePhpDocNodeVisitorInterface.php +++ b/packages/BetterPhpDocParser/Contract/BasePhpDocNodeVisitorInterface.php @@ -4,7 +4,7 @@ namespace Rector\BetterPhpDocParser\Contract; -use Symplify\Astral\PhpDocParser\Contract\PhpDocNodeVisitorInterface; +use Rector\PhpDocParser\PhpDocParser\Contract\PhpDocNodeVisitorInterface; interface BasePhpDocNodeVisitorInterface extends PhpDocNodeVisitorInterface { diff --git a/packages/BetterPhpDocParser/PhpDocInfo/PhpDocInfo.php b/packages/BetterPhpDocParser/PhpDocInfo/PhpDocInfo.php index 3650d8e5171..4e50f75243a 100644 --- a/packages/BetterPhpDocParser/PhpDocInfo/PhpDocInfo.php +++ b/packages/BetterPhpDocParser/PhpDocInfo/PhpDocInfo.php @@ -29,8 +29,8 @@ use Rector\BetterPhpDocParser\ValueObject\Type\ShortenedIdentifierTypeNode; use Rector\ChangesReporting\Collector\RectorChangeCollector; use Rector\Core\Configuration\CurrentNodeProvider; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; use Rector\StaticTypeMapper\StaticTypeMapper; -use Symplify\Astral\PhpDocParser\PhpDocNodeTraverser; /** * @see \Rector\Tests\BetterPhpDocParser\PhpDocInfo\PhpDocInfo\PhpDocInfoTest diff --git a/packages/BetterPhpDocParser/PhpDocManipulator/PhpDocTagRemover.php b/packages/BetterPhpDocParser/PhpDocManipulator/PhpDocTagRemover.php index 2b4d49214de..8cef59ad093 100644 --- a/packages/BetterPhpDocParser/PhpDocManipulator/PhpDocTagRemover.php +++ b/packages/BetterPhpDocParser/PhpDocManipulator/PhpDocTagRemover.php @@ -8,7 +8,7 @@ use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode; use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; -use Symplify\Astral\PhpDocParser\PhpDocNodeTraverser; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; final class PhpDocTagRemover { diff --git a/packages/BetterPhpDocParser/PhpDocNodeFinder/PhpDocNodeByTypeFinder.php b/packages/BetterPhpDocParser/PhpDocNodeFinder/PhpDocNodeByTypeFinder.php index 3195bce32dc..fe2cce4af71 100644 --- a/packages/BetterPhpDocParser/PhpDocNodeFinder/PhpDocNodeByTypeFinder.php +++ b/packages/BetterPhpDocParser/PhpDocNodeFinder/PhpDocNodeByTypeFinder.php @@ -7,7 +7,7 @@ use PHPStan\PhpDocParser\Ast\Node; use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode; use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode; -use Symplify\Astral\PhpDocParser\PhpDocNodeTraverser; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; /** * @template TNode as \PHPStan\PhpDocParser\Ast\Node diff --git a/packages/BetterPhpDocParser/PhpDocNodeMapper.php b/packages/BetterPhpDocParser/PhpDocNodeMapper.php index 4ccb04b4f99..7c9132a643e 100644 --- a/packages/BetterPhpDocParser/PhpDocNodeMapper.php +++ b/packages/BetterPhpDocParser/PhpDocNodeMapper.php @@ -8,9 +8,9 @@ use Rector\BetterPhpDocParser\Contract\BasePhpDocNodeVisitorInterface; use Rector\BetterPhpDocParser\DataProvider\CurrentTokenIteratorProvider; use Rector\BetterPhpDocParser\ValueObject\Parser\BetterTokenIterator; -use Symplify\Astral\PhpDocParser\PhpDocNodeTraverser; -use Symplify\Astral\PhpDocParser\PhpDocNodeVisitor\CloningPhpDocNodeVisitor; -use Symplify\Astral\PhpDocParser\PhpDocNodeVisitor\ParentConnectingPhpDocNodeVisitor; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\CloningPhpDocNodeVisitor; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\ParentConnectingPhpDocNodeVisitor; /** * @see \Rector\Tests\BetterPhpDocParser\PhpDocNodeMapperTest diff --git a/packages/BetterPhpDocParser/PhpDocNodeVisitor/ArrayTypePhpDocNodeVisitor.php b/packages/BetterPhpDocParser/PhpDocNodeVisitor/ArrayTypePhpDocNodeVisitor.php index 25177c7a32c..86d01a30edd 100644 --- a/packages/BetterPhpDocParser/PhpDocNodeVisitor/ArrayTypePhpDocNodeVisitor.php +++ b/packages/BetterPhpDocParser/PhpDocNodeVisitor/ArrayTypePhpDocNodeVisitor.php @@ -9,7 +9,7 @@ use Rector\BetterPhpDocParser\Attributes\AttributeMirrorer; use Rector\BetterPhpDocParser\Contract\BasePhpDocNodeVisitorInterface; use Rector\BetterPhpDocParser\ValueObject\Type\SpacingAwareArrayTypeNode; -use Symplify\Astral\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; final class ArrayTypePhpDocNodeVisitor extends AbstractPhpDocNodeVisitor implements BasePhpDocNodeVisitorInterface { diff --git a/packages/BetterPhpDocParser/PhpDocNodeVisitor/CallableTypePhpDocNodeVisitor.php b/packages/BetterPhpDocParser/PhpDocNodeVisitor/CallableTypePhpDocNodeVisitor.php index 2db722da6c2..5b8a8e1e40b 100644 --- a/packages/BetterPhpDocParser/PhpDocNodeVisitor/CallableTypePhpDocNodeVisitor.php +++ b/packages/BetterPhpDocParser/PhpDocNodeVisitor/CallableTypePhpDocNodeVisitor.php @@ -9,7 +9,7 @@ use Rector\BetterPhpDocParser\Attributes\AttributeMirrorer; use Rector\BetterPhpDocParser\Contract\BasePhpDocNodeVisitorInterface; use Rector\BetterPhpDocParser\ValueObject\Type\SpacingAwareCallableTypeNode; -use Symplify\Astral\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; final class CallableTypePhpDocNodeVisitor extends AbstractPhpDocNodeVisitor implements BasePhpDocNodeVisitorInterface { diff --git a/packages/BetterPhpDocParser/PhpDocNodeVisitor/ChangedPhpDocNodeVisitor.php b/packages/BetterPhpDocParser/PhpDocNodeVisitor/ChangedPhpDocNodeVisitor.php index 1c9fed82a3a..f0c1bd016bd 100644 --- a/packages/BetterPhpDocParser/PhpDocNodeVisitor/ChangedPhpDocNodeVisitor.php +++ b/packages/BetterPhpDocParser/PhpDocNodeVisitor/ChangedPhpDocNodeVisitor.php @@ -6,7 +6,7 @@ use PHPStan\PhpDocParser\Ast\Node; use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey; -use Symplify\Astral\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; final class ChangedPhpDocNodeVisitor extends AbstractPhpDocNodeVisitor { diff --git a/packages/BetterPhpDocParser/PhpDocNodeVisitor/IntersectionTypeNodePhpDocNodeVisitor.php b/packages/BetterPhpDocParser/PhpDocNodeVisitor/IntersectionTypeNodePhpDocNodeVisitor.php index d8f838e0046..f6947cf0164 100644 --- a/packages/BetterPhpDocParser/PhpDocNodeVisitor/IntersectionTypeNodePhpDocNodeVisitor.php +++ b/packages/BetterPhpDocParser/PhpDocNodeVisitor/IntersectionTypeNodePhpDocNodeVisitor.php @@ -9,7 +9,7 @@ use Rector\BetterPhpDocParser\Attributes\AttributeMirrorer; use Rector\BetterPhpDocParser\Contract\BasePhpDocNodeVisitorInterface; use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareIntersectionTypeNode; -use Symplify\Astral\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; final class IntersectionTypeNodePhpDocNodeVisitor extends AbstractPhpDocNodeVisitor implements BasePhpDocNodeVisitorInterface { diff --git a/packages/BetterPhpDocParser/PhpDocNodeVisitor/TemplatePhpDocNodeVisitor.php b/packages/BetterPhpDocParser/PhpDocNodeVisitor/TemplatePhpDocNodeVisitor.php index 09cac0f1256..fc520d19591 100644 --- a/packages/BetterPhpDocParser/PhpDocNodeVisitor/TemplatePhpDocNodeVisitor.php +++ b/packages/BetterPhpDocParser/PhpDocNodeVisitor/TemplatePhpDocNodeVisitor.php @@ -15,7 +15,7 @@ use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey; use Rector\BetterPhpDocParser\ValueObject\StartAndEnd; use Rector\Core\Exception\ShouldNotHappenException; -use Symplify\Astral\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; final class TemplatePhpDocNodeVisitor extends AbstractPhpDocNodeVisitor implements BasePhpDocNodeVisitorInterface { diff --git a/packages/BetterPhpDocParser/PhpDocNodeVisitor/UnionTypeNodePhpDocNodeVisitor.php b/packages/BetterPhpDocParser/PhpDocNodeVisitor/UnionTypeNodePhpDocNodeVisitor.php index f0f8ebf67f2..90c60b89e2b 100644 --- a/packages/BetterPhpDocParser/PhpDocNodeVisitor/UnionTypeNodePhpDocNodeVisitor.php +++ b/packages/BetterPhpDocParser/PhpDocNodeVisitor/UnionTypeNodePhpDocNodeVisitor.php @@ -14,7 +14,7 @@ use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey; use Rector\BetterPhpDocParser\ValueObject\StartAndEnd; use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareUnionTypeNode; -use Symplify\Astral\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; final class UnionTypeNodePhpDocNodeVisitor extends AbstractPhpDocNodeVisitor implements BasePhpDocNodeVisitorInterface { diff --git a/packages/BetterPhpDocParser/PhpDocParser/ConstExprClassNameDecorator.php b/packages/BetterPhpDocParser/PhpDocParser/ConstExprClassNameDecorator.php index 5cf032bf39c..52415e67864 100644 --- a/packages/BetterPhpDocParser/PhpDocParser/ConstExprClassNameDecorator.php +++ b/packages/BetterPhpDocParser/PhpDocParser/ConstExprClassNameDecorator.php @@ -11,8 +11,8 @@ use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode; use Rector\BetterPhpDocParser\Contract\PhpDocParser\PhpDocNodeDecoratorInterface; use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; use Rector\StaticTypeMapper\Naming\NameScopeFactory; -use Symplify\Astral\PhpDocParser\PhpDocNodeTraverser; /** * Decorate node with fully qualified class name for const epxr, diff --git a/packages/BetterPhpDocParser/Printer/PhpDocInfoPrinter.php b/packages/BetterPhpDocParser/Printer/PhpDocInfoPrinter.php index af8d658ee83..67c104dcb3e 100644 --- a/packages/BetterPhpDocParser/Printer/PhpDocInfoPrinter.php +++ b/packages/BetterPhpDocParser/Printer/PhpDocInfoPrinter.php @@ -23,7 +23,7 @@ use Rector\BetterPhpDocParser\ValueObject\StartAndEnd; use Rector\Core\Exception\ShouldNotHappenException; use Rector\Core\Util\StringUtils; -use Symplify\Astral\PhpDocParser\PhpDocNodeTraverser; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; /** * @see \Rector\Tests\BetterPhpDocParser\PhpDocInfo\PhpDocInfoPrinter\PhpDocInfoPrinterTest diff --git a/packages/BetterPhpDocParser/ValueObject/PhpDocAttributeKey.php b/packages/BetterPhpDocParser/ValueObject/PhpDocAttributeKey.php index bc38f75b53e..42aee9fe0e1 100644 --- a/packages/BetterPhpDocParser/ValueObject/PhpDocAttributeKey.php +++ b/packages/BetterPhpDocParser/ValueObject/PhpDocAttributeKey.php @@ -4,7 +4,7 @@ namespace Rector\BetterPhpDocParser\ValueObject; -use Symplify\Astral\PhpDocParser\ValueObject\PhpDocAttributeKey as NativePhpDocAttributeKey; +use Rector\PhpDocParser\PhpDocParser\ValueObject\PhpDocAttributeKey as NativePhpDocAttributeKey; final class PhpDocAttributeKey { diff --git a/packages/NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php b/packages/NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php index f4c2668ed54..39bf9821799 100644 --- a/packages/NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php +++ b/packages/NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php @@ -21,9 +21,9 @@ use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\NodeTypeResolver; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\StaticTypeMapper\StaticTypeMapper; use Symfony\Contracts\Service\Attribute\Required; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; /** * @see \Rector\Tests\NodeTypeResolver\PerNodeTypeResolver\ParamTypeResolver\ParamTypeResolverTest diff --git a/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockClassRenamer.php b/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockClassRenamer.php index 1d0106f3f31..9ef23e9d833 100644 --- a/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockClassRenamer.php +++ b/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockClassRenamer.php @@ -7,7 +7,7 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\NodeTypeResolver\PhpDocNodeVisitor\ClassRenamePhpDocNodeVisitor; use Rector\NodeTypeResolver\ValueObject\OldToNewType; -use Symplify\Astral\PhpDocParser\PhpDocNodeTraverser; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; final class DocBlockClassRenamer { diff --git a/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockNameImporter.php b/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockNameImporter.php index 10720b0d405..6918c1eae22 100644 --- a/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockNameImporter.php +++ b/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockNameImporter.php @@ -7,7 +7,7 @@ use PhpParser\Node; use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode; use Rector\NodeTypeResolver\PhpDocNodeVisitor\NameImportingPhpDocNodeVisitor; -use Symplify\Astral\PhpDocParser\PhpDocNodeTraverser; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; final class DocBlockNameImporter { diff --git a/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockNamespaceRenamer.php b/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockNamespaceRenamer.php index 9458b43668b..8f4311aa0e9 100644 --- a/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockNamespaceRenamer.php +++ b/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockNamespaceRenamer.php @@ -15,8 +15,8 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\Core\PhpParser\Node\CustomNode\FileWithoutNamespace; use Rector\Naming\NamespaceMatcher; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; use Rector\Renaming\ValueObject\RenamedNamespace; -use Symplify\Astral\PhpDocParser\PhpDocNodeTraverser; final class DocBlockNamespaceRenamer { diff --git a/packages/NodeTypeResolver/PhpDoc/PhpDocTypeRenamer.php b/packages/NodeTypeResolver/PhpDoc/PhpDocTypeRenamer.php index 3164c60d25c..cc3789311c7 100644 --- a/packages/NodeTypeResolver/PhpDoc/PhpDocTypeRenamer.php +++ b/packages/NodeTypeResolver/PhpDoc/PhpDocTypeRenamer.php @@ -7,9 +7,9 @@ use PhpParser\Node; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\NodeTypeResolver\PhpDocNodeVisitor\UnderscoreRenamePhpDocNodeVisitor; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; use Rector\Renaming\ValueObject\PseudoNamespaceToNamespace; use Rector\StaticTypeMapper\StaticTypeMapper; -use Symplify\Astral\PhpDocParser\PhpDocNodeTraverser; final class PhpDocTypeRenamer { diff --git a/packages/NodeTypeResolver/PhpDocNodeVisitor/ClassRenamePhpDocNodeVisitor.php b/packages/NodeTypeResolver/PhpDocNodeVisitor/ClassRenamePhpDocNodeVisitor.php index 8c6f34b0300..972018d2eff 100644 --- a/packages/NodeTypeResolver/PhpDocNodeVisitor/ClassRenamePhpDocNodeVisitor.php +++ b/packages/NodeTypeResolver/PhpDocNodeVisitor/ClassRenamePhpDocNodeVisitor.php @@ -22,10 +22,10 @@ use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\ValueObject\OldToNewType; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\StaticTypeMapper\ValueObject\Type\ShortenedObjectType; -use Symplify\Astral\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; final class ClassRenamePhpDocNodeVisitor extends AbstractPhpDocNodeVisitor { diff --git a/packages/NodeTypeResolver/PhpDocNodeVisitor/NameImportingPhpDocNodeVisitor.php b/packages/NodeTypeResolver/PhpDocNodeVisitor/NameImportingPhpDocNodeVisitor.php index d67f84abff3..94a53da8785 100644 --- a/packages/NodeTypeResolver/PhpDocNodeVisitor/NameImportingPhpDocNodeVisitor.php +++ b/packages/NodeTypeResolver/PhpDocNodeVisitor/NameImportingPhpDocNodeVisitor.php @@ -18,10 +18,10 @@ use Rector\Core\Exception\ShouldNotHappenException; use Rector\Core\Provider\CurrentFileProvider; use Rector\Core\ValueObject\Application\File; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; use Rector\PostRector\Collector\UseNodesToAddCollector; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; -use Symplify\Astral\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; use Symplify\PackageBuilder\Parameter\ParameterProvider; use Symplify\PackageBuilder\Reflection\ClassLikeExistenceChecker; diff --git a/packages/NodeTypeResolver/PhpDocNodeVisitor/UnderscoreRenamePhpDocNodeVisitor.php b/packages/NodeTypeResolver/PhpDocNodeVisitor/UnderscoreRenamePhpDocNodeVisitor.php index dcbb6444cd0..48f618a6511 100644 --- a/packages/NodeTypeResolver/PhpDocNodeVisitor/UnderscoreRenamePhpDocNodeVisitor.php +++ b/packages/NodeTypeResolver/PhpDocNodeVisitor/UnderscoreRenamePhpDocNodeVisitor.php @@ -8,9 +8,9 @@ use PHPStan\PhpDocParser\Ast\Node; use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; use PHPStan\Type\ObjectType; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; use Rector\Renaming\ValueObject\PseudoNamespaceToNamespace; use Rector\StaticTypeMapper\StaticTypeMapper; -use Symplify\Astral\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; final class UnderscoreRenamePhpDocNodeVisitor extends AbstractPhpDocNodeVisitor { diff --git a/packages/PhpDocParser/Contract/NodeValueResolver/NodeValueResolverInterface.php b/packages/PhpDocParser/Contract/NodeValueResolver/NodeValueResolverInterface.php new file mode 100644 index 00000000000..e6d3ea1b379 --- /dev/null +++ b/packages/PhpDocParser/Contract/NodeValueResolver/NodeValueResolverInterface.php @@ -0,0 +1,23 @@ + + */ + public function getType(): string; + + /** + * @param TExpr $expr + */ + public function resolve(Expr $expr, string $currentFilePath): mixed; +} diff --git a/packages/PhpDocParser/Exception/UnresolvableValueException.php b/packages/PhpDocParser/Exception/UnresolvableValueException.php new file mode 100644 index 00000000000..236c4bcb1a8 --- /dev/null +++ b/packages/PhpDocParser/Exception/UnresolvableValueException.php @@ -0,0 +1,11 @@ +addVisitor($callableNodeVisitor); + $nodeTraverser->traverse($nodes); + } +} diff --git a/packages/PhpDocParser/NodeValue/NodeValueResolver.php b/packages/PhpDocParser/NodeValue/NodeValueResolver.php new file mode 100644 index 00000000000..c0c3b09b2eb --- /dev/null +++ b/packages/PhpDocParser/NodeValue/NodeValueResolver.php @@ -0,0 +1,94 @@ +getType() instead + */ +final class NodeValueResolver +{ + /** + * @var array> + */ + private const UNRESOLVABLE_TYPES = [ + Variable::class, Cast::class, MethodCall::class, PropertyFetch::class, Instanceof_::class, + ]; + + private readonly ConstExprEvaluator $constExprEvaluator; + + private ?string $currentFilePath = null; + + /** + * @var NodeValueResolverInterface[] + */ + private array $nodeValueResolvers = []; + + public function __construct(ReflectionProvider $reflectionProvider) + { + $this->constExprEvaluator = new ConstExprEvaluator(fn (Expr $expr) => $this->resolveByNode($expr)); + + $this->nodeValueResolvers[] = new ClassConstFetchValueResolver($reflectionProvider); + $this->nodeValueResolvers[] = new ConstFetchValueResolver(); + $this->nodeValueResolvers[] = new MagicConstValueResolver(); + $this->nodeValueResolvers[] = new FuncCallValueResolver($this->constExprEvaluator); + } + + /** + * @deprecated Use Scope->getType() with constant types instead + */ + public function resolve(Expr $expr, string $filePath): mixed + { + $this->currentFilePath = $filePath; + + try { + return $this->constExprEvaluator->evaluateDirectly($expr); + } catch (ConstExprEvaluationException) { + return null; + } + } + + private function resolveByNode(Expr $expr): mixed + { + if ($this->currentFilePath === null) { + throw new UnresolvableValueException(); + } + + foreach ($this->nodeValueResolvers as $nodeValueResolver) { + if (is_a($expr, $nodeValueResolver->getType(), true)) { + return $nodeValueResolver->resolve($expr, $this->currentFilePath); + } + } + + // these values cannot be resolved in reliable way + foreach (self::UNRESOLVABLE_TYPES as $unresolvableType) { + if (is_a($expr, $unresolvableType, true)) { + throw new ConstExprEvaluationException( + 'The node "%s" value is not possible to resolve. Provide different one.' + ); + } + } + + return null; + } +} diff --git a/packages/PhpDocParser/NodeValue/NodeValueResolver/ClassConstFetchValueResolver.php b/packages/PhpDocParser/NodeValue/NodeValueResolver/ClassConstFetchValueResolver.php new file mode 100644 index 00000000000..b7ceb3b3f60 --- /dev/null +++ b/packages/PhpDocParser/NodeValue/NodeValueResolver/ClassConstFetchValueResolver.php @@ -0,0 +1,64 @@ + + */ +final class ClassConstFetchValueResolver implements NodeValueResolverInterface +{ + public function __construct( + private readonly ReflectionProvider $reflectionProvider + ) { + } + + public function getType(): string + { + return ClassConstFetch::class; + } + + /** + * @param ClassConstFetch $expr + */ + public function resolve(Expr $expr, string $currentFilePath): mixed + { + if (! $expr->class instanceof Name) { + return null; + } + + $className = $expr->class->toString(); + if ($className === 'self') { + // unable to resolve + throw new ConstExprEvaluationException('Unable to resolve self class constant'); + } + + if (! $expr->name instanceof Identifier) { + return null; + } + + $constantName = $expr->name->toString(); + if ($constantName === 'class') { + return $className; + } + + if (! $this->reflectionProvider->hasClass($className)) { + return null; + } + + $reflectionClassConstant = new ReflectionClassConstant($className, $constantName); + return $reflectionClassConstant->getValue(); + } +} diff --git a/packages/PhpDocParser/NodeValue/NodeValueResolver/ConstFetchValueResolver.php b/packages/PhpDocParser/NodeValue/NodeValueResolver/ConstFetchValueResolver.php new file mode 100644 index 00000000000..3766f38ab5e --- /dev/null +++ b/packages/PhpDocParser/NodeValue/NodeValueResolver/ConstFetchValueResolver.php @@ -0,0 +1,31 @@ + + */ +final class ConstFetchValueResolver implements NodeValueResolverInterface +{ + public function getType(): string + { + return ConstFetch::class; + } + + /** + * @param ConstFetch $expr + */ + public function resolve(Expr $expr, string $currentFilePath): mixed + { + $constFetchName = $expr->name->toString(); + return constant($constFetchName); + } +} diff --git a/packages/PhpDocParser/NodeValue/NodeValueResolver/FuncCallValueResolver.php b/packages/PhpDocParser/NodeValue/NodeValueResolver/FuncCallValueResolver.php new file mode 100644 index 00000000000..1e07a2365dd --- /dev/null +++ b/packages/PhpDocParser/NodeValue/NodeValueResolver/FuncCallValueResolver.php @@ -0,0 +1,78 @@ + + */ +final class FuncCallValueResolver implements NodeValueResolverInterface +{ + /** + * @var string[] + */ + private const EXCLUDED_FUNC_NAMES = ['pg_*']; + + public function __construct( + private readonly ConstExprEvaluator $constExprEvaluator, + ) { + } + + public function getType(): string + { + return FuncCall::class; + } + + /** + * @param FuncCall $expr + */ + public function resolve(Expr $expr, string $currentFilePath): mixed + { + if ($expr->name instanceof Name && $expr->name->toString() === 'getcwd') { + return dirname($currentFilePath); + } + + $args = $expr->getArgs(); + $arguments = []; + foreach ($args as $arg) { + $arguments[] = $this->constExprEvaluator->evaluateDirectly($arg->value); + } + + if ($expr->name instanceof Name) { + $functionName = (string) $expr->name; + + if (! $this->isAllowedFunctionName($functionName)) { + return null; + } + + if (function_exists($functionName)) { + return $functionName(...$arguments); + } + + throw new UnresolvableValueException(); + } + + return null; + } + + private function isAllowedFunctionName(string $functionName): bool + { + foreach (self::EXCLUDED_FUNC_NAMES as $excludedFuncName) { + if (fnmatch($excludedFuncName, $functionName, FNM_NOESCAPE)) { + return false; + } + } + + return true; + } +} diff --git a/packages/PhpDocParser/NodeValue/NodeValueResolver/MagicConstValueResolver.php b/packages/PhpDocParser/NodeValue/NodeValueResolver/MagicConstValueResolver.php new file mode 100644 index 00000000000..ac66730f697 --- /dev/null +++ b/packages/PhpDocParser/NodeValue/NodeValueResolver/MagicConstValueResolver.php @@ -0,0 +1,40 @@ + + */ +final class MagicConstValueResolver implements NodeValueResolverInterface +{ + public function getType(): string + { + return MagicConst::class; + } + + /** + * @param MagicConst $expr + */ + public function resolve(Expr $expr, string $currentFilePath): ?string + { + if ($expr instanceof Dir) { + return dirname($currentFilePath); + } + + if ($expr instanceof File) { + return $currentFilePath; + } + + return null; + } +} diff --git a/packages/PhpDocParser/NodeVisitor/CallableNodeVisitor.php b/packages/PhpDocParser/NodeVisitor/CallableNodeVisitor.php new file mode 100644 index 00000000000..ce2898c91dd --- /dev/null +++ b/packages/PhpDocParser/NodeVisitor/CallableNodeVisitor.php @@ -0,0 +1,43 @@ +callable = $callable; + } + + public function enterNode(Node $node): int|Node|null + { + $originalNode = $node; + + $callable = $this->callable; + + /** @var int|Node|null $newNode */ + $newNode = $callable($node); + + if ($originalNode instanceof Stmt && $newNode instanceof Expr) { + return new Expression($newNode); + } + + return $newNode; + } +} diff --git a/packages/PhpDocParser/PhpDocParser/Contract/PhpDocNodeVisitorInterface.php b/packages/PhpDocParser/PhpDocParser/Contract/PhpDocNodeVisitorInterface.php new file mode 100644 index 00000000000..c2b0defd061 --- /dev/null +++ b/packages/PhpDocParser/PhpDocParser/Contract/PhpDocNodeVisitorInterface.php @@ -0,0 +1,24 @@ +phpDocNodeVisitors[] = $phpDocNodeVisitor; + } + + public function traverse(Node $node): void + { + foreach ($this->phpDocNodeVisitors as $phpDocNodeVisitor) { + $phpDocNodeVisitor->beforeTraverse($node); + } + + $node = $this->traverseNode($node); + + foreach ($this->phpDocNodeVisitors as $phpDocNodeVisitor) { + $phpDocNodeVisitor->afterTraverse($node); + } + } + + /** + * @param callable(Node $node): (int|null|Node) $callable + */ + public function traverseWithCallable(Node $node, string $docContent, callable $callable): void + { + $callablePhpDocNodeVisitor = new CallablePhpDocNodeVisitor($callable, $docContent); + $this->addPhpDocNodeVisitor($callablePhpDocNodeVisitor); + + $this->traverse($node); + } + + /** + * @template TNode of Node + * @param TNode $node + * @return TNode + */ + private function traverseNode(Node $node): Node + { + $objectPublicPropertiesToValues = get_object_vars($node); + $subNodeNames = array_keys($objectPublicPropertiesToValues); + + foreach ($subNodeNames as $subNodeName) { + $subNode = &$node->{$subNodeName}; + + if (\is_array($subNode)) { + $subNode = $this->traverseArray($subNode); + } elseif ($subNode instanceof Node) { + $breakVisitorIndex = null; + $traverseChildren = true; + + foreach ($this->phpDocNodeVisitors as $visitorIndex => $phpDocNodeVisitor) { + $return = $phpDocNodeVisitor->enterNode($subNode); + + if ($return !== null) { + if ($return instanceof Node) { + $subNode = $return; + } elseif ($return === self::DONT_TRAVERSE_CHILDREN) { + $traverseChildren = false; + } elseif ($return === self::DONT_TRAVERSE_CURRENT_AND_CHILDREN) { + $traverseChildren = false; + $breakVisitorIndex = $visitorIndex; + break; + } elseif ($return === self::STOP_TRAVERSAL) { + $this->stopTraversal = true; + } elseif ($return === self::NODE_REMOVE) { + $subNode = null; + continue 2; + } else { + throw new InvalidTraverseException( + 'enterNode() returned invalid value of type ' . gettype($return) + ); + } + } + } + + if ($traverseChildren) { + $subNode = $this->traverseNode($subNode); + if ($this->stopTraversal) { + break; + } + } + + foreach ($this->phpDocNodeVisitors as $visitorIndex => $phpDocNodeVisitor) { + $phpDocNodeVisitor->leaveNode($subNode); + + if ($breakVisitorIndex === $visitorIndex) { + break; + } + } + } + } + + return $node; + } + + /** + * @param array $nodes + * @return array + */ + private function traverseArray(array $nodes): array + { + foreach ($nodes as $key => &$node) { + // can be string or something else + if (! $node instanceof Node) { + continue; + } + + $traverseChildren = true; + $breakVisitorIndex = null; + + foreach ($this->phpDocNodeVisitors as $visitorIndex => $phpDocNodeVisitor) { + $return = $phpDocNodeVisitor->enterNode($node); + + if ($return !== null) { + if ($return instanceof Node) { + $node = $return; + } elseif ($return === self::DONT_TRAVERSE_CHILDREN) { + $traverseChildren = false; + } elseif ($return === self::DONT_TRAVERSE_CURRENT_AND_CHILDREN) { + $traverseChildren = false; + $breakVisitorIndex = $visitorIndex; + break; + } elseif ($return === self::STOP_TRAVERSAL) { + $this->stopTraversal = true; + } elseif ($return === self::NODE_REMOVE) { + // remove node + unset($nodes[$key]); + continue 2; + } else { + throw new InvalidTraverseException('enterNode() returned invalid value of type ' . gettype( + $return + )); + } + } + } + + // should traverse node childrens properties? + if ($traverseChildren) { + $node = $this->traverseNode($node); + if ($this->stopTraversal) { + break; + } + } + + foreach ($this->phpDocNodeVisitors as $visitorIndex => $phpDocNodeVisitor) { + $return = $phpDocNodeVisitor->leaveNode($node); + + if ($return !== null) { + if ($return instanceof Node) { + $node = $return; + } elseif (\is_array($return)) { + $doNodes[] = [$key, $return]; + break; + } elseif ($return === self::NODE_REMOVE) { + $doNodes[] = [$key, []]; + break; + } elseif ($return === self::STOP_TRAVERSAL) { + $this->stopTraversal = true; + break 2; + } else { + throw new InvalidTraverseException( + 'leaveNode() returned invalid value of type ' . gettype($return) + ); + } + } + + if ($breakVisitorIndex === $visitorIndex) { + break; + } + } + } + + return $nodes; + } +} diff --git a/packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/AbstractPhpDocNodeVisitor.php b/packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/AbstractPhpDocNodeVisitor.php new file mode 100644 index 00000000000..1f442f98baa --- /dev/null +++ b/packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/AbstractPhpDocNodeVisitor.php @@ -0,0 +1,35 @@ +callable = $callable; + } + + public function enterNode(Node $node): int|Node|null + { + $callable = $this->callable; + return $callable($node, $this->docContent); + } +} diff --git a/packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/CloningPhpDocNodeVisitor.php b/packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/CloningPhpDocNodeVisitor.php new file mode 100644 index 00000000000..5d2b64841a9 --- /dev/null +++ b/packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/CloningPhpDocNodeVisitor.php @@ -0,0 +1,24 @@ +setAttribute(PhpDocAttributeKey::ORIG_NODE, $node); + return $clonedNode; + } +} diff --git a/packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/ParentConnectingPhpDocNodeVisitor.php b/packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/ParentConnectingPhpDocNodeVisitor.php new file mode 100644 index 00000000000..b12645fba2b --- /dev/null +++ b/packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/ParentConnectingPhpDocNodeVisitor.php @@ -0,0 +1,49 @@ +stack = [$node]; + } + + public function enterNode(Node $node): Node + { + if ($this->stack !== []) { + $parentNode = $this->stack[count($this->stack) - 1]; + $node->setAttribute(PhpDocAttributeKey::PARENT, $parentNode); + } + + $this->stack[] = $node; + + return $node; + } + + /** + * @return null|int|\PhpParser\Node|Node[] Replacement node (or special return + */ + public function leaveNode(Node $node): int|\PhpParser\Node|array|null + { + array_pop($this->stack); + return null; + } +} diff --git a/packages/PhpDocParser/PhpDocParser/SimplePhpDocParser.php b/packages/PhpDocParser/PhpDocParser/SimplePhpDocParser.php new file mode 100644 index 00000000000..715eaa6ee90 --- /dev/null +++ b/packages/PhpDocParser/PhpDocParser/SimplePhpDocParser.php @@ -0,0 +1,47 @@ +getDocComment(); + if (! $docComment instanceof Doc) { + return null; + } + + return $this->parseDocBlock($docComment->getText()); + } + + /** + * @api + */ + public function parseDocBlock(string $docBlock): SimplePhpDocNode + { + $tokens = $this->lexer->tokenize($docBlock); + $tokenIterator = new TokenIterator($tokens); + + $phpDocNode = $this->phpDocParser->parse($tokenIterator); + return new SimplePhpDocNode($phpDocNode->children); + } +} diff --git a/packages/PhpDocParser/PhpDocParser/StaticFactory/SimplePhpDocParserStaticFactory.php b/packages/PhpDocParser/PhpDocParser/StaticFactory/SimplePhpDocParserStaticFactory.php new file mode 100644 index 00000000000..e06d3f67f3b --- /dev/null +++ b/packages/PhpDocParser/PhpDocParser/StaticFactory/SimplePhpDocParserStaticFactory.php @@ -0,0 +1,23 @@ +getParamTagValues() as $paramTagValueNode) { + if ($paramTagValueNode->parameterName !== $desiredParamNameWithDollar) { + continue; + } + + return $paramTagValueNode; + } + + return null; + } + + public function getParamType(string $desiredParamName): ?TypeNode + { + $paramTagValueNode = $this->getParam($desiredParamName); + if (! $paramTagValueNode instanceof ParamTagValueNode) { + return null; + } + + return $paramTagValueNode->type; + } +} diff --git a/packages/PhpDocParser/PhpDocParser/ValueObject/PhpDocAttributeKey.php b/packages/PhpDocParser/PhpDocParser/ValueObject/PhpDocAttributeKey.php new file mode 100644 index 00000000000..c5ac04342c3 --- /dev/null +++ b/packages/PhpDocParser/PhpDocParser/ValueObject/PhpDocAttributeKey.php @@ -0,0 +1,18 @@ +parser->parseFile($file); + } + + /** + * @return Stmt[] + */ + public function parseString(string $sourceCode): array + { + return $this->parser->parseString($sourceCode); + } +} diff --git a/packages/PhpDocParser/PhpParser/SmartPhpParserFactory.php b/packages/PhpDocParser/PhpParser/SmartPhpParserFactory.php new file mode 100644 index 00000000000..7f3eded687c --- /dev/null +++ b/packages/PhpDocParser/PhpParser/SmartPhpParserFactory.php @@ -0,0 +1,48 @@ +createNativePhpParser(); + $cachedParser = $this->createPHPStanParser($nativePhpParser); + + return new SmartPhpParser($cachedParser); + } + + private function createNativePhpParser(): Parser + { + $parserFactory = new ParserFactory(); + $lexerEmulative = new Emulative(); + + return $parserFactory->create(ParserFactory::PREFER_PHP7, $lexerEmulative); + } + + private function createPHPStanParser(Parser $parser): CachedParser + { + $nameResolver = new NameResolver(); + $simpleParser = new SimpleParser($parser, $nameResolver); + + return new CachedParser($simpleParser, 1024); + } +} diff --git a/packages/PhpDocParser/TypeAnalyzer/ClassMethodReturnTypeResolver.php b/packages/PhpDocParser/TypeAnalyzer/ClassMethodReturnTypeResolver.php new file mode 100644 index 00000000000..dd61c1318b3 --- /dev/null +++ b/packages/PhpDocParser/TypeAnalyzer/ClassMethodReturnTypeResolver.php @@ -0,0 +1,38 @@ +name->toString(); + + $classReflection = $scope->getClassReflection(); + if (! $classReflection instanceof ClassReflection) { + return new MixedType(); + } + + $extendedMethodReflection = $classReflection->getMethod($methodName, $scope); + + $parametersAcceptor = ParametersAcceptorSelector::selectSingle($extendedMethodReflection->getVariants()); + if (! $parametersAcceptor instanceof FunctionVariant) { + return new MixedType(); + } + + return $parametersAcceptor->getReturnType(); + } +} diff --git a/packages/PhpDocParser/TypeAwareNodeFinder.php b/packages/PhpDocParser/TypeAwareNodeFinder.php new file mode 100644 index 00000000000..127ccd962bc --- /dev/null +++ b/packages/PhpDocParser/TypeAwareNodeFinder.php @@ -0,0 +1,47 @@ +nodeFinder = new NodeFinder(); + } + + /** + * @template TNode as Node + * + * @param Node[]|Node $nodes + * @param class-string $type + * @return TNode|null + */ + public function findFirstInstanceOf(array|Node $nodes, string $type): ?Node + { + return $this->nodeFinder->findFirstInstanceOf($nodes, $type); + } + + /** + * @template TNode as Node + * + * @param Node[]|Node $nodes + * @param class-string $type + * @return TNode[] + */ + public function findInstanceOf(array|Node $nodes, string $type): array + { + return $this->nodeFinder->findInstanceOf($nodes, $type); + } +} diff --git a/packages/PhpDocParser/ValueObject/AttributeKey.php b/packages/PhpDocParser/ValueObject/AttributeKey.php new file mode 100644 index 00000000000..69e479a113e --- /dev/null +++ b/packages/PhpDocParser/ValueObject/AttributeKey.php @@ -0,0 +1,50 @@ +has\*\(\) instead#' + path: "packages/PhpDocParser/NodeValue/NodeValueResolver/FuncCallValueResolver.php" + + - + message: '#Creating new PHPStan\\Parser\\(CachedParser|SimpleParser) is not covered by backward compatibility promise\. The class might change in a minor PHPStan version#' + path: packages/PhpDocParser/PhpParser/SmartPhpParserFactory.php diff --git a/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/param_and_var.php.inc b/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/param_and_var.php.inc index f129ed5588a..48dcb1678ef 100644 --- a/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/param_and_var.php.inc +++ b/rules-tests/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector/Fixture/param_and_var.php.inc @@ -3,7 +3,7 @@ namespace Rector\Tests\Php80\Rector\Class_\ClassPropertyAssignToConstructorPromotionRector\Fixture; use Rector\BetterPhpDocParser\Contract\BasePhpDocNodeVisitorInterface; -use Symplify\Astral\PhpDocParser\Contract\PhpDocNodeVisitorInterface; +use Rector\PhpDocParser\PhpDocParser\Contract\PhpDocNodeVisitorInterface; final class ParamAndVar { @@ -28,7 +28,7 @@ final class ParamAndVar namespace Rector\Tests\Php80\Rector\Class_\ClassPropertyAssignToConstructorPromotionRector\Fixture; use Rector\BetterPhpDocParser\Contract\BasePhpDocNodeVisitorInterface; -use Symplify\Astral\PhpDocParser\Contract\PhpDocNodeVisitorInterface; +use Rector\PhpDocParser\PhpDocParser\Contract\PhpDocNodeVisitorInterface; final class ParamAndVar { diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddArrayReturnDocTypeRector/Fixture/skip_reprint_union_array.php.inc b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddArrayReturnDocTypeRector/Fixture/skip_reprint_union_array.php.inc index 711f0c7550f..4a21f07e2c3 100644 --- a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddArrayReturnDocTypeRector/Fixture/skip_reprint_union_array.php.inc +++ b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddArrayReturnDocTypeRector/Fixture/skip_reprint_union_array.php.inc @@ -5,7 +5,7 @@ namespace Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddArrayReturnDocTypeR use PhpParser\Node\Expr\Yield_; use PhpParser\Node\Expr\YieldFrom; use PhpParser\Node\FunctionLike; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; class SkipReprintUnionArray { diff --git a/rules/CodeQuality/NodeAnalyzer/ForeachAnalyzer.php b/rules/CodeQuality/NodeAnalyzer/ForeachAnalyzer.php index 85cf9cb3da7..b723b83baed 100644 --- a/rules/CodeQuality/NodeAnalyzer/ForeachAnalyzer.php +++ b/rules/CodeQuality/NodeAnalyzer/ForeachAnalyzer.php @@ -15,7 +15,7 @@ use Rector\Core\PhpParser\Comparing\NodeComparator; use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\NodeNameResolver\NodeNameResolver; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class ForeachAnalyzer { diff --git a/rules/CodeQuality/NodeAnalyzer/LocalPropertyAnalyzer.php b/rules/CodeQuality/NodeAnalyzer/LocalPropertyAnalyzer.php index fa4b634e669..f0897cf21a7 100644 --- a/rules/CodeQuality/NodeAnalyzer/LocalPropertyAnalyzer.php +++ b/rules/CodeQuality/NodeAnalyzer/LocalPropertyAnalyzer.php @@ -26,7 +26,7 @@ use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class LocalPropertyAnalyzer { diff --git a/rules/CodingStyle/ClassNameImport/ShortNameResolver.php b/rules/CodingStyle/ClassNameImport/ShortNameResolver.php index 6002312af4e..5305d57cb68 100644 --- a/rules/CodingStyle/ClassNameImport/ShortNameResolver.php +++ b/rules/CodingStyle/ClassNameImport/ShortNameResolver.php @@ -23,10 +23,10 @@ use Rector\Core\ValueObject\Application\File; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; use ReflectionClass; use Symfony\Contracts\Service\Attribute\Required; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; -use Symplify\Astral\PhpDocParser\PhpDocNodeTraverser; /** * @see \Rector\Tests\CodingStyle\ClassNameImport\ShortNameResolver\ShortNameResolverTest diff --git a/rules/CodingStyle/ClassNameImport/UseImportsTraverser.php b/rules/CodingStyle/ClassNameImport/UseImportsTraverser.php index 2003f6d9cce..438e2d8aef0 100644 --- a/rules/CodingStyle/ClassNameImport/UseImportsTraverser.php +++ b/rules/CodingStyle/ClassNameImport/UseImportsTraverser.php @@ -10,7 +10,7 @@ use PhpParser\Node\Stmt\Use_; use PhpParser\Node\Stmt\UseUse; use Rector\NodeNameResolver\NodeNameResolver; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class UseImportsTraverser { diff --git a/rules/DeadCode/NodeCollector/ModifiedVariableNamesCollector.php b/rules/DeadCode/NodeCollector/ModifiedVariableNamesCollector.php index 6e4255477e2..de15a28593c 100644 --- a/rules/DeadCode/NodeCollector/ModifiedVariableNamesCollector.php +++ b/rules/DeadCode/NodeCollector/ModifiedVariableNamesCollector.php @@ -12,7 +12,7 @@ use PhpParser\Node\Stmt; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class ModifiedVariableNamesCollector { diff --git a/rules/DeadCode/NodeManipulator/VariadicFunctionLikeDetector.php b/rules/DeadCode/NodeManipulator/VariadicFunctionLikeDetector.php index 98417755c19..b397d418509 100644 --- a/rules/DeadCode/NodeManipulator/VariadicFunctionLikeDetector.php +++ b/rules/DeadCode/NodeManipulator/VariadicFunctionLikeDetector.php @@ -9,7 +9,7 @@ use PhpParser\Node\FunctionLike; use PhpParser\NodeTraverser; use Rector\NodeNameResolver\NodeNameResolver; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class VariadicFunctionLikeDetector { diff --git a/rules/DeadCode/PhpDoc/TagRemover/ParamTagRemover.php b/rules/DeadCode/PhpDoc/TagRemover/ParamTagRemover.php index e54fc65db85..75e537168f7 100644 --- a/rules/DeadCode/PhpDoc/TagRemover/ParamTagRemover.php +++ b/rules/DeadCode/PhpDoc/TagRemover/ParamTagRemover.php @@ -10,7 +10,7 @@ use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\DeadCode\PhpDoc\DeadParamTagValueNodeAnalyzer; -use Symplify\Astral\PhpDocParser\PhpDocNodeTraverser; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; final class ParamTagRemover { diff --git a/rules/Naming/PropertyRenamer/PropertyFetchRenamer.php b/rules/Naming/PropertyRenamer/PropertyFetchRenamer.php index 63a189c5953..ce4438e93a9 100644 --- a/rules/Naming/PropertyRenamer/PropertyFetchRenamer.php +++ b/rules/Naming/PropertyRenamer/PropertyFetchRenamer.php @@ -11,7 +11,7 @@ use PhpParser\Node\Stmt\ClassLike; use PhpParser\Node\VarLikeIdentifier; use Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class PropertyFetchRenamer { diff --git a/rules/Naming/VariableRenamer.php b/rules/Naming/VariableRenamer.php index 1806385e78b..bc5904b741f 100644 --- a/rules/Naming/VariableRenamer.php +++ b/rules/Naming/VariableRenamer.php @@ -18,7 +18,7 @@ use Rector\Naming\PhpDoc\VarTagValueNodeRenamer; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class VariableRenamer { diff --git a/rules/PSR4/NodeManipulator/FullyQualifyStmtsAnalyzer.php b/rules/PSR4/NodeManipulator/FullyQualifyStmtsAnalyzer.php index bbd19b2e274..1c1058a2738 100644 --- a/rules/PSR4/NodeManipulator/FullyQualifyStmtsAnalyzer.php +++ b/rules/PSR4/NodeManipulator/FullyQualifyStmtsAnalyzer.php @@ -17,7 +17,7 @@ use Rector\Core\Enum\ObjectReference; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Symplify\PackageBuilder\Parameter\ParameterProvider; final class FullyQualifyStmtsAnalyzer diff --git a/rules/Php56/NodeAnalyzer/UndefinedVariableResolver.php b/rules/Php56/NodeAnalyzer/UndefinedVariableResolver.php index c15885682c0..b36c08882cc 100644 --- a/rules/Php56/NodeAnalyzer/UndefinedVariableResolver.php +++ b/rules/Php56/NodeAnalyzer/UndefinedVariableResolver.php @@ -31,7 +31,7 @@ use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class UndefinedVariableResolver { diff --git a/rules/Php72/NodeFactory/AnonymousFunctionFactory.php b/rules/Php72/NodeFactory/AnonymousFunctionFactory.php index 092a1ee2c7d..e89ecc42b75 100644 --- a/rules/Php72/NodeFactory/AnonymousFunctionFactory.php +++ b/rules/Php72/NodeFactory/AnonymousFunctionFactory.php @@ -45,10 +45,10 @@ use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Php72\NodeManipulator\ClosureNestedUsesDecorator; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\StaticTypeMapper\StaticTypeMapper; use ReflectionParameter; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; use Symplify\PackageBuilder\Reflection\PrivatesAccessor; final class AnonymousFunctionFactory diff --git a/rules/Php80/NodeManipulator/TokenManipulator.php b/rules/Php80/NodeManipulator/TokenManipulator.php index a07a381f5d8..2d500968fc2 100644 --- a/rules/Php80/NodeManipulator/TokenManipulator.php +++ b/rules/Php80/NodeManipulator/TokenManipulator.php @@ -26,8 +26,8 @@ use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\Php80\ValueObject\ArrayDimFetchAndConstFetch; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\PostRector\Collector\NodesToRemoveCollector; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; final class TokenManipulator { diff --git a/rules/Php80/Rector/Class_/AnnotationToAttributeRector.php b/rules/Php80/Rector/Class_/AnnotationToAttributeRector.php index 423aa233404..c296b31c4c0 100644 --- a/rules/Php80/Rector/Class_/AnnotationToAttributeRector.php +++ b/rules/Php80/Rector/Class_/AnnotationToAttributeRector.php @@ -29,8 +29,8 @@ use Rector\Php80\ValueObject\AnnotationToAttribute; use Rector\Php80\ValueObject\DoctrineTagAndAnnotationToAttribute; use Rector\PhpAttribute\NodeFactory\PhpAttributeGroupFactory; +use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; use Rector\VersionBonding\Contract\MinPhpVersionInterface; -use Symplify\Astral\PhpDocParser\PhpDocNodeTraverser; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Webmozart\Assert\Assert; diff --git a/rules/Privatization/NodeReplacer/PropertyFetchWithConstFetchReplacer.php b/rules/Privatization/NodeReplacer/PropertyFetchWithConstFetchReplacer.php index e20bdc6f6e2..8d558c2600d 100644 --- a/rules/Privatization/NodeReplacer/PropertyFetchWithConstFetchReplacer.php +++ b/rules/Privatization/NodeReplacer/PropertyFetchWithConstFetchReplacer.php @@ -13,8 +13,8 @@ use Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer; use Rector\Core\PhpParser\Node\NodeFactory; use Rector\NodeNameResolver\NodeNameResolver; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\Privatization\Naming\ConstantNaming; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; final class PropertyFetchWithConstFetchReplacer { diff --git a/rules/Removing/NodeManipulator/ComplexNodeRemover.php b/rules/Removing/NodeManipulator/ComplexNodeRemover.php index d103683beba..63aba82209f 100644 --- a/rules/Removing/NodeManipulator/ComplexNodeRemover.php +++ b/rules/Removing/NodeManipulator/ComplexNodeRemover.php @@ -24,7 +24,7 @@ use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeRemoval\NodeRemover; use Rector\NodeTypeResolver\Node\AttributeKey; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class ComplexNodeRemover { diff --git a/rules/Renaming/NodeManipulator/ClassRenamer.php b/rules/Renaming/NodeManipulator/ClassRenamer.php index 81bb494cff6..6f636865d74 100644 --- a/rules/Renaming/NodeManipulator/ClassRenamer.php +++ b/rules/Renaming/NodeManipulator/ClassRenamer.php @@ -33,8 +33,8 @@ use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\PhpDoc\NodeAnalyzer\DocBlockClassRenamer; use Rector\NodeTypeResolver\ValueObject\OldToNewType; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; use Symplify\PackageBuilder\Parameter\ParameterProvider; final class ClassRenamer diff --git a/rules/TypeDeclaration/AlreadyAssignDetector/ConstructorAssignDetector.php b/rules/TypeDeclaration/AlreadyAssignDetector/ConstructorAssignDetector.php index 8ba7558408c..d0252853eb2 100644 --- a/rules/TypeDeclaration/AlreadyAssignDetector/ConstructorAssignDetector.php +++ b/rules/TypeDeclaration/AlreadyAssignDetector/ConstructorAssignDetector.php @@ -15,9 +15,9 @@ use Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer; use Rector\Core\ValueObject\MethodName; use Rector\NodeTypeResolver\NodeTypeResolver; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\TypeDeclaration\Matcher\PropertyAssignMatcher; use Rector\TypeDeclaration\NodeAnalyzer\AutowiredClassMethodOrPropertyAnalyzer; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; final class ConstructorAssignDetector { diff --git a/rules/TypeDeclaration/AlreadyAssignDetector/NullTypeAssignDetector.php b/rules/TypeDeclaration/AlreadyAssignDetector/NullTypeAssignDetector.php index 6e6eb8d448f..7aa1b70ec46 100644 --- a/rules/TypeDeclaration/AlreadyAssignDetector/NullTypeAssignDetector.php +++ b/rules/TypeDeclaration/AlreadyAssignDetector/NullTypeAssignDetector.php @@ -11,9 +11,9 @@ use PhpParser\NodeTraverser; use Rector\NodeNestingScope\ScopeNestingComparator; use Rector\NodeTypeResolver\NodeTypeResolver; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\PHPStanStaticTypeMapper\DoctrineTypeAnalyzer; use Rector\TypeDeclaration\Matcher\PropertyAssignMatcher; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; /** * Should add extra null type diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ArrayShapeFromConstantArrayReturnRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ArrayShapeFromConstantArrayReturnRector.php index 118610341de..fe4bc457877 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ArrayShapeFromConstantArrayReturnRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ArrayShapeFromConstantArrayReturnRector.php @@ -20,8 +20,8 @@ use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\Util\StringUtils; use Rector\NodeTypeResolver\Node\AttributeKey; +use Rector\PhpDocParser\TypeAnalyzer\ClassMethodReturnTypeResolver; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Symplify\Astral\TypeAnalyzer\ClassMethodReturnTypeResolver; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php index 8eeb3bd1395..9ae7cf92953 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php @@ -22,9 +22,9 @@ use PHPStan\Reflection\ClassReflection; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\Reflection\ReflectionResolver; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\TypeDeclaration\NodeAnalyzer\CallerParamMatcher; use Rector\VendorLocker\ParentClassMethodTypeOverrideGuard; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; diff --git a/rules/TypeDeclaration/TypeInferer/AssignToPropertyTypeInferer.php b/rules/TypeDeclaration/TypeInferer/AssignToPropertyTypeInferer.php index 653ea3b4466..efab5a8da18 100644 --- a/rules/TypeDeclaration/TypeInferer/AssignToPropertyTypeInferer.php +++ b/rules/TypeDeclaration/TypeInferer/AssignToPropertyTypeInferer.php @@ -18,11 +18,11 @@ use Rector\Core\PhpParser\Node\Value\ValueResolver; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\TypeDeclaration\AlreadyAssignDetector\ConstructorAssignDetector; use Rector\TypeDeclaration\AlreadyAssignDetector\NullTypeAssignDetector; use Rector\TypeDeclaration\AlreadyAssignDetector\PropertyDefaultAssignDetector; use Rector\TypeDeclaration\Matcher\PropertyAssignMatcher; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; /** * @deprecated diff --git a/rules/TypeDeclaration/TypeInferer/ParamTypeInferer/GetterNodeParamTypeInferer.php b/rules/TypeDeclaration/TypeInferer/ParamTypeInferer/GetterNodeParamTypeInferer.php index 6fd5c5fc1fb..5d0f2a47a61 100644 --- a/rules/TypeDeclaration/TypeInferer/ParamTypeInferer/GetterNodeParamTypeInferer.php +++ b/rules/TypeDeclaration/TypeInferer/ParamTypeInferer/GetterNodeParamTypeInferer.php @@ -18,8 +18,8 @@ use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\TypeDeclaration\Contract\TypeInferer\ParamTypeInfererInterface; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; final class GetterNodeParamTypeInferer implements ParamTypeInfererInterface { diff --git a/rules/TypeDeclaration/TypeInferer/ParamTypeInferer/PropertyNodeParamTypeInferer.php b/rules/TypeDeclaration/TypeInferer/ParamTypeInferer/PropertyNodeParamTypeInferer.php index 29bf227b1db..c869deb858f 100644 --- a/rules/TypeDeclaration/TypeInferer/ParamTypeInferer/PropertyNodeParamTypeInferer.php +++ b/rules/TypeDeclaration/TypeInferer/ParamTypeInferer/PropertyNodeParamTypeInferer.php @@ -18,10 +18,10 @@ use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\TypeDeclaration\Contract\TypeInferer\ParamTypeInfererInterface; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; final class PropertyNodeParamTypeInferer implements ParamTypeInfererInterface { diff --git a/rules/TypeDeclaration/TypeInferer/PropertyTypeInferer/TrustedClassMethodPropertyTypeInferer.php b/rules/TypeDeclaration/TypeInferer/PropertyTypeInferer/TrustedClassMethodPropertyTypeInferer.php index 8b53933cb1b..1e18bb58908 100644 --- a/rules/TypeDeclaration/TypeInferer/PropertyTypeInferer/TrustedClassMethodPropertyTypeInferer.php +++ b/rules/TypeDeclaration/TypeInferer/PropertyTypeInferer/TrustedClassMethodPropertyTypeInferer.php @@ -30,11 +30,11 @@ use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\NodeTypeResolver\TypeComparator\TypeComparator; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\StaticTypeMapper\ValueObject\Type\AliasedObjectType; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; use Rector\TypeDeclaration\TypeInferer\AssignToPropertyTypeInferer; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; /** * @deprecated diff --git a/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer/ReturnedNodesReturnTypeInfererTypeInferer.php b/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer/ReturnedNodesReturnTypeInfererTypeInferer.php index d19026054ca..c40a12327e4 100644 --- a/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer/ReturnedNodesReturnTypeInfererTypeInferer.php +++ b/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer/ReturnedNodesReturnTypeInfererTypeInferer.php @@ -25,10 +25,10 @@ use Rector\Core\Reflection\ReflectionResolver; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\TypeDeclaration\Contract\TypeInferer\ReturnTypeInfererInterface; use Rector\TypeDeclaration\TypeInferer\SilentVoidResolver; use Rector\TypeDeclaration\TypeInferer\SplArrayFixedTypeNarrower; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; /** * @deprecated diff --git a/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer/YieldNodesReturnTypeInfererTypeInferer.php b/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer/YieldNodesReturnTypeInfererTypeInferer.php index aa1c88d2070..24004a3eda4 100644 --- a/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer/YieldNodesReturnTypeInfererTypeInferer.php +++ b/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer/YieldNodesReturnTypeInfererTypeInferer.php @@ -17,10 +17,10 @@ use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedGenericObjectType; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; use Rector\TypeDeclaration\Contract\TypeInferer\ReturnTypeInfererInterface; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; final class YieldNodesReturnTypeInfererTypeInferer implements ReturnTypeInfererInterface { diff --git a/src/Kernel/RectorKernel.php b/src/Kernel/RectorKernel.php index 6df810ed718..bed199e68ca 100644 --- a/src/Kernel/RectorKernel.php +++ b/src/Kernel/RectorKernel.php @@ -13,7 +13,6 @@ use Rector\Core\Exception\ShouldNotHappenException; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerInterface; -use Symplify\Astral\ValueObject\AstralConfig; use Symplify\AutowireArrayParameter\DependencyInjection\CompilerPass\AutowireArrayParameterCompilerPass; use Symplify\ComposerJsonManipulator\ValueObject\ComposerJsonManipulatorConfig; use Symplify\PackageBuilder\DependencyInjection\CompilerPass\AutowireInterfacesCompilerPass; @@ -97,7 +96,6 @@ private function createDefaultConfigFiles(): array { return [ __DIR__ . '/../../config/config.php', - AstralConfig::FILE_PATH, ComposerJsonManipulatorConfig::FILE_PATH, SkipperConfig::FILE_PATH, ConsoleColorDiffConfig::FILE_PATH, diff --git a/src/NodeAnalyzer/ParamAnalyzer.php b/src/NodeAnalyzer/ParamAnalyzer.php index 690c59893e2..1af447eca17 100644 --- a/src/NodeAnalyzer/ParamAnalyzer.php +++ b/src/NodeAnalyzer/ParamAnalyzer.php @@ -24,7 +24,7 @@ use Rector\Core\PhpParser\Node\Value\ValueResolver; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class ParamAnalyzer { diff --git a/src/NodeAnalyzer/PropertyFetchAnalyzer.php b/src/NodeAnalyzer/PropertyFetchAnalyzer.php index aea70b6c3fb..7d016aa9a02 100644 --- a/src/NodeAnalyzer/PropertyFetchAnalyzer.php +++ b/src/NodeAnalyzer/PropertyFetchAnalyzer.php @@ -23,7 +23,7 @@ use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\ValueObject\MethodName; use Rector\NodeNameResolver\NodeNameResolver; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class PropertyFetchAnalyzer { diff --git a/src/NodeManipulator/ArrayDestructVariableFilter.php b/src/NodeManipulator/ArrayDestructVariableFilter.php index b2aba89ba8d..5c60ff50083 100644 --- a/src/NodeManipulator/ArrayDestructVariableFilter.php +++ b/src/NodeManipulator/ArrayDestructVariableFilter.php @@ -11,7 +11,7 @@ use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\ClassMethod; use Rector\NodeNameResolver\NodeNameResolver; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class ArrayDestructVariableFilter { diff --git a/src/NodeManipulator/ClassMethodPropertyFetchManipulator.php b/src/NodeManipulator/ClassMethodPropertyFetchManipulator.php index a06a58db1e2..6d86b66fbac 100644 --- a/src/NodeManipulator/ClassMethodPropertyFetchManipulator.php +++ b/src/NodeManipulator/ClassMethodPropertyFetchManipulator.php @@ -14,7 +14,7 @@ use PhpParser\NodeTraverser; use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\NodeNameResolver\NodeNameResolver; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class ClassMethodPropertyFetchManipulator { diff --git a/src/NodeManipulator/Dependency/DependencyClassMethodDecorator.php b/src/NodeManipulator/Dependency/DependencyClassMethodDecorator.php index dbd4add5d4c..83b7041a3a9 100644 --- a/src/NodeManipulator/Dependency/DependencyClassMethodDecorator.php +++ b/src/NodeManipulator/Dependency/DependencyClassMethodDecorator.php @@ -18,7 +18,7 @@ use Rector\Core\ValueObject\MethodName; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\NodeTypeResolver; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class DependencyClassMethodDecorator { diff --git a/src/NodeManipulator/FunctionLikeManipulator.php b/src/NodeManipulator/FunctionLikeManipulator.php index 9f8bd03bb37..3cabb12d2ce 100644 --- a/src/NodeManipulator/FunctionLikeManipulator.php +++ b/src/NodeManipulator/FunctionLikeManipulator.php @@ -10,7 +10,7 @@ use PhpParser\Node\Stmt\Return_; use Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer; use Rector\NodeNameResolver\NodeNameResolver; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class FunctionLikeManipulator { diff --git a/src/NodeManipulator/PropertyFetchAssignManipulator.php b/src/NodeManipulator/PropertyFetchAssignManipulator.php index fc3e30c42aa..171235dbcb9 100644 --- a/src/NodeManipulator/PropertyFetchAssignManipulator.php +++ b/src/NodeManipulator/PropertyFetchAssignManipulator.php @@ -16,7 +16,7 @@ use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\ValueObject\MethodName; use Rector\NodeNameResolver\NodeNameResolver; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class PropertyFetchAssignManipulator { diff --git a/src/NodeManipulator/StmtsManipulator.php b/src/NodeManipulator/StmtsManipulator.php index 5f932c73b32..b6bca877411 100644 --- a/src/NodeManipulator/StmtsManipulator.php +++ b/src/NodeManipulator/StmtsManipulator.php @@ -9,7 +9,7 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Expression; use Rector\Core\PhpParser\Comparing\NodeComparator; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class StmtsManipulator { diff --git a/src/NodeManipulator/VariableManipulator.php b/src/NodeManipulator/VariableManipulator.php index 4da4df72602..4249a177100 100644 --- a/src/NodeManipulator/VariableManipulator.php +++ b/src/NodeManipulator/VariableManipulator.php @@ -23,8 +23,8 @@ use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\ReadWrite\Guard\VariableToConstantGuard; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; final class VariableManipulator { diff --git a/src/PhpParser/AstResolver.php b/src/PhpParser/AstResolver.php index 633e5e0d47e..794bb051f49 100644 --- a/src/PhpParser/AstResolver.php +++ b/src/PhpParser/AstResolver.php @@ -33,7 +33,7 @@ use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\NodeScopeAndMetadataDecorator; use Rector\NodeTypeResolver\NodeTypeResolver; -use Symplify\Astral\PhpParser\SmartPhpParser; +use Rector\PhpDocParser\PhpParser\SmartPhpParser; use Symplify\SmartFileSystem\SmartFileInfo; /** diff --git a/src/PhpParser/ClassLikeAstResolver.php b/src/PhpParser/ClassLikeAstResolver.php index 0ce9c75335a..80a2db94283 100644 --- a/src/PhpParser/ClassLikeAstResolver.php +++ b/src/PhpParser/ClassLikeAstResolver.php @@ -12,7 +12,7 @@ use PHPStan\Reflection\ClassReflection; use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\ValueObject\Application\File; -use Symplify\Astral\PhpParser\SmartPhpParser; +use Rector\PhpDocParser\PhpParser\SmartPhpParser; final class ClassLikeAstResolver { diff --git a/src/PhpParser/Node/NodeFactory.php b/src/PhpParser/Node/NodeFactory.php index d32cc7da69f..bc91148769a 100644 --- a/src/PhpParser/Node/NodeFactory.php +++ b/src/PhpParser/Node/NodeFactory.php @@ -4,11 +4,13 @@ namespace Rector\Core\PhpParser\Node; +use PhpParser\Builder\Method; +use PhpParser\Builder\Param as ParamBuilder; +use PhpParser\Builder\Property as PropertyBuilder; use PhpParser\BuilderFactory; use PhpParser\BuilderHelpers; use PhpParser\Node; use PhpParser\Node\Arg; -use PhpParser\Node\Const_; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\ArrayItem; @@ -32,33 +34,24 @@ use PhpParser\Node\Scalar; use PhpParser\Node\Scalar\String_; use PhpParser\Node\Stmt\Class_; -use PhpParser\Node\Stmt\ClassConst; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Property; -use PhpParser\Node\Stmt\Return_; use PhpParser\Node\Stmt\Use_; use PhpParser\Node\Stmt\UseUse; use PHPStan\PhpDocParser\Ast\PhpDoc\GenericTagValueNode; use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode; -use PHPStan\Type\MixedType; use PHPStan\Type\Type; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; -use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; use Rector\Core\Configuration\CurrentNodeProvider; use Rector\Core\Enum\ObjectReference; use Rector\Core\Exception\NotImplementedYetException; use Rector\Core\Exception\ShouldNotHappenException; use Rector\Core\NodeDecorator\PropertyTypeDecorator; -use Rector\Core\Php\PhpVersionProvider; use Rector\Core\ValueObject\MethodName; -use Rector\Core\ValueObject\PhpVersionFeature; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\PostRector\ValueObject\PropertyMetadata; use Rector\StaticTypeMapper\StaticTypeMapper; -use Symplify\Astral\ValueObject\NodeBuilder\MethodBuilder; -use Symplify\Astral\ValueObject\NodeBuilder\ParamBuilder; -use Symplify\Astral\ValueObject\NodeBuilder\PropertyBuilder; /** * @see \Rector\Core\Tests\PhpParser\Node\NodeFactoryTest @@ -73,9 +66,7 @@ final class NodeFactory public function __construct( private readonly BuilderFactory $builderFactory, private readonly PhpDocInfoFactory $phpDocInfoFactory, - private readonly PhpVersionProvider $phpVersionProvider, private readonly StaticTypeMapper $staticTypeMapper, - private readonly PhpDocTypeChanger $phpDocTypeChanger, private readonly CurrentNodeProvider $currentNodeProvider, private readonly PropertyTypeDecorator $propertyTypeDecorator ) { @@ -165,24 +156,24 @@ public function createArg(mixed $argument): Arg public function createPublicMethod(string $name): ClassMethod { - $methodBuilder = new MethodBuilder($name); - $methodBuilder->makePublic(); + $method = new Method($name); + $method->makePublic(); - return $methodBuilder->getNode(); + return $method->getNode(); } public function createParamFromNameAndType(string $name, ?Type $type): Param { - $paramBuilder = new ParamBuilder($name); + $param = new ParamBuilder($name); if ($type !== null) { $typeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($type, TypeKind::PARAM); if ($typeNode !== null) { - $paramBuilder->setType($typeNode); + $param->setType($typeNode); } } - return $paramBuilder->getNode(); + return $param->getNode(); } public function createPublicInjectPropertyFromNameAndType(string $name, ?Type $type): Property @@ -260,45 +251,6 @@ public function createPrivateProperty(string $name): Property return $property; } - public function createGetterClassMethod(string $propertyName, Type $type): ClassMethod - { - $methodBuilder = new MethodBuilder('get' . ucfirst($propertyName)); - $methodBuilder->makePublic(); - - $propertyFetch = new PropertyFetch(new Variable(self::THIS), $propertyName); - - $return = new Return_($propertyFetch); - $methodBuilder->addStmt($return); - - $typeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($type, TypeKind::RETURN); - if ($typeNode !== null) { - $methodBuilder->setReturnType($typeNode); - } - - return $methodBuilder->getNode(); - } - - public function createSetterClassMethod(string $propertyName, Type $type): ClassMethod - { - $methodBuilder = new MethodBuilder('set' . ucfirst($propertyName)); - $methodBuilder->makePublic(); - - $variable = new Variable($propertyName); - - $param = $this->createParamWithType($variable, $type); - $methodBuilder->addParam($param); - - $propertyFetch = new PropertyFetch(new Variable(self::THIS), $propertyName); - $assign = new Assign($propertyFetch, $variable); - $methodBuilder->addStmt($assign); - - if ($this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::VOID_TYPE)) { - $methodBuilder->setReturnType(new Name('void')); - } - - return $methodBuilder->getNode(); - } - /** * @param Expr[] $exprs */ @@ -447,28 +399,6 @@ public function createReturnBooleanAnd(array $newNodes): ?Expr return $this->createBooleanAndFromNodes($newNodes); } - /** - * @api - */ - public function createClassConstant(string $name, Expr $expr, int $modifier): ClassConst - { - $normalizedExpr = BuilderHelpers::normalizeValue($expr); - - $const = new Const_($name, $normalizedExpr); - $classConst = new ClassConst([$const]); - $classConst->flags |= $modifier; - - // add @var type by default - $staticType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($expr); - - if (! $staticType instanceof MixedType) { - $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($classConst); - $this->phpDocTypeChanger->changeVarType($phpDocInfo, $staticType); - } - - return $classConst; - } - private function createArrayItem(mixed $item, string | int | null $key = null): ArrayItem { $arrayItem = null; @@ -539,15 +469,6 @@ private function createBooleanAndFromNodes(array $exprs): BooleanAnd return $booleanAnd; } - private function createParamWithType(Variable $variable, Type $type): Param - { - $param = new Param($variable); - - $param->type = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($type, TypeKind::PARAM); - - return $param; - } - /** * @param string|ObjectReference::* $className */ diff --git a/src/Rector/AbstractRector.php b/src/Rector/AbstractRector.php index ec1441fafef..dc9409a77c2 100644 --- a/src/Rector/AbstractRector.php +++ b/src/Rector/AbstractRector.php @@ -39,10 +39,10 @@ use Rector\NodeRemoval\NodeRemover; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\NodeTypeResolver; +use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\PostRector\Collector\NodesToRemoveCollector; use Rector\StaticTypeMapper\StaticTypeMapper; use Symfony\Contracts\Service\Attribute\Required; -use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; use Symplify\Skipper\Skipper\Skipper; abstract class AbstractRector extends NodeVisitorAbstract implements PhpRectorInterface diff --git a/src/StaticReflection/SourceLocator/RenamedClassesSourceLocator.php b/src/StaticReflection/SourceLocator/RenamedClassesSourceLocator.php index 5e71df22fdd..080c861b2e0 100644 --- a/src/StaticReflection/SourceLocator/RenamedClassesSourceLocator.php +++ b/src/StaticReflection/SourceLocator/RenamedClassesSourceLocator.php @@ -4,6 +4,7 @@ namespace Rector\Core\StaticReflection\SourceLocator; +use PhpParser\Builder\Class_; use PHPStan\BetterReflection\Identifier\Identifier; use PHPStan\BetterReflection\Identifier\IdentifierType; use PHPStan\BetterReflection\Reflection\Reflection; @@ -13,7 +14,6 @@ use PHPStan\BetterReflection\SourceLocator\Located\LocatedSource; use PHPStan\BetterReflection\SourceLocator\Type\SourceLocator; use Rector\Core\Configuration\RenamedClassesDataCollector; -use Symplify\Astral\ValueObject\NodeBuilder\ClassBuilder; /** * Inspired from \PHPStan\BetterReflection\SourceLocator\Type\StringSourceLocator @@ -54,8 +54,9 @@ public function locateIdentifiersByType(Reflector $reflector, IdentifierType $id private function createFakeReflectionClassFromClassName(string $oldClass): ReflectionClass { - $classBuilder = new ClassBuilder($oldClass); + $classBuilder = new Class_($oldClass); $class = $classBuilder->getNode(); + $fakeLocatedSource = new LocatedSource('virtual', null); $classReflector = new ClassReflector($this);