From 7f9bb2ae807462486cec0d39f102f7037cab66c4 Mon Sep 17 00:00:00 2001
From: Tomas Votruba <tomas.vot@gmail.com>
Date: Sun, 11 Feb 2024 09:00:00 +0000
Subject: [PATCH] Updated Rector to commit
 df8d2b78edd46542e6426fec606c3ea98d712532

https://github.com/rectorphp/rector-src/commit/df8d2b78edd46542e6426fec606c3ea98d712532 Copy subtype phpdoc on ClassPropertyAssignToConstructorPromotionRector (#8438) (#5603)
---
 .../PhpDoc/TagRemover/VarTagRemover.php         | 17 ++++++++++++++++-
 src/Application/VersionResolver.php             |  4 ++--
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/rules/DeadCode/PhpDoc/TagRemover/VarTagRemover.php b/rules/DeadCode/PhpDoc/TagRemover/VarTagRemover.php
index 38048cc7772..9c0b8084c8c 100644
--- a/rules/DeadCode/PhpDoc/TagRemover/VarTagRemover.php
+++ b/rules/DeadCode/PhpDoc/TagRemover/VarTagRemover.php
@@ -14,6 +14,7 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
 use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
 use Rector\Comments\NodeDocBlock\DocBlockUpdater;
 use Rector\DeadCode\PhpDoc\DeadVarTagValueNodeAnalyzer;
+use Rector\NodeTypeResolver\TypeComparator\TypeComparator;
 use Rector\PHPStanStaticTypeMapper\DoctrineTypeAnalyzer;
 final class VarTagRemover
 {
@@ -42,13 +43,19 @@ final class VarTagRemover
      * @var \Rector\Comments\NodeDocBlock\DocBlockUpdater
      */
     private $docBlockUpdater;
-    public function __construct(DoctrineTypeAnalyzer $doctrineTypeAnalyzer, PhpDocInfoFactory $phpDocInfoFactory, DeadVarTagValueNodeAnalyzer $deadVarTagValueNodeAnalyzer, PhpDocTypeChanger $phpDocTypeChanger, DocBlockUpdater $docBlockUpdater)
+    /**
+     * @readonly
+     * @var \Rector\NodeTypeResolver\TypeComparator\TypeComparator
+     */
+    private $typeComparator;
+    public function __construct(DoctrineTypeAnalyzer $doctrineTypeAnalyzer, PhpDocInfoFactory $phpDocInfoFactory, DeadVarTagValueNodeAnalyzer $deadVarTagValueNodeAnalyzer, PhpDocTypeChanger $phpDocTypeChanger, DocBlockUpdater $docBlockUpdater, TypeComparator $typeComparator)
     {
         $this->doctrineTypeAnalyzer = $doctrineTypeAnalyzer;
         $this->phpDocInfoFactory = $phpDocInfoFactory;
         $this->deadVarTagValueNodeAnalyzer = $deadVarTagValueNodeAnalyzer;
         $this->phpDocTypeChanger = $phpDocTypeChanger;
         $this->docBlockUpdater = $docBlockUpdater;
+        $this->typeComparator = $typeComparator;
     }
     public function removeVarTagIfUseless(PhpDocInfo $phpDocInfo, Property $property) : bool
     {
@@ -92,7 +99,15 @@ final class VarTagRemover
         if ($this->phpDocTypeChanger->isAllowed($varTagValueNode->type)) {
             return;
         }
+        // keep subtypes like positive-int
+        if ($this->shouldKeepSubtypes($type, $phpDocInfo->getVarType())) {
+            return;
+        }
         $phpDocInfo->removeByType(VarTagValueNode::class);
         $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node);
     }
+    private function shouldKeepSubtypes(Type $type, Type $varType) : bool
+    {
+        return !$this->typeComparator->areTypesEqual($type, $varType) && $this->typeComparator->isSubtype($varType, $type);
+    }
 }
diff --git a/src/Application/VersionResolver.php b/src/Application/VersionResolver.php
index b99cfd762c8..f07357e6436 100644
--- a/src/Application/VersionResolver.php
+++ b/src/Application/VersionResolver.php
@@ -19,12 +19,12 @@ final class VersionResolver
      * @api
      * @var string
      */
-    public const PACKAGE_VERSION = '6980dc63c77d0214730c94e0c620fa729047f879';
+    public const PACKAGE_VERSION = 'df8d2b78edd46542e6426fec606c3ea98d712532';
     /**
      * @api
      * @var string
      */
-    public const RELEASE_DATE = '2024-02-11 15:15:49';
+    public const RELEASE_DATE = '2024-02-11 15:57:49';
     /**
      * @var int
      */