-
-
Notifications
You must be signed in to change notification settings - Fork 680
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fixup! fixup! fixup! fixup! fixup! fixup! fixup! fixup! fixup! add Pa…
…ramPhpDocNodeVisitor
- Loading branch information
1 parent
3d95544
commit 1789478
Showing
9 changed files
with
234 additions
and
70 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
56 changes: 56 additions & 0 deletions
56
packages/BetterPhpDocParser/PhpDocNodeVisitor/ArrayShapeItemNodePhpDocNodeVisitor.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Rector\BetterPhpDocParser\PhpDocNodeVisitor; | ||
|
||
use PHPStan\PhpDocParser\Ast\Node; | ||
use PHPStan\PhpDocParser\Ast\Type\ArrayShapeItemNode; | ||
use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode; | ||
use Rector\BetterPhpDocParser\DataProvider\CurrentTokenIteratorProvider; | ||
use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey; | ||
use Rector\BetterPhpDocParser\ValueObject\StartAndEnd; | ||
use Rector\BetterPhpDocParser\ValueObject\Type\SpacingAwareArrayShapeItemNode; | ||
use Rector\BetterPhpDocParser\ValueObject\Type\SpacingAwareArrayTypeNode; | ||
use Rector\Core\Exception\ShouldNotHappenException; | ||
use Symplify\SimplePhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; | ||
|
||
final class ArrayShapeItemNodePhpDocNodeVisitor extends AbstractPhpDocNodeVisitor | ||
{ | ||
/** | ||
* @var CurrentTokenIteratorProvider | ||
*/ | ||
private $currentTokenIteratorProvider; | ||
|
||
public function __construct(CurrentTokenIteratorProvider $currentTokenIteratorProvider) | ||
{ | ||
$this->currentTokenIteratorProvider = $currentTokenIteratorProvider; | ||
} | ||
|
||
public function enterNode(Node $node): ?Node | ||
{ | ||
if (! $node instanceof ArrayShapeItemNode) { | ||
return null; | ||
} | ||
|
||
if ($node instanceof SpacingAwareArrayShapeItemNode) { | ||
return null; | ||
} | ||
|
||
$betterTokenIterator = $this->currentTokenIteratorProvider->provide(); | ||
$startAndEnd = $node->getAttribute(PhpDocAttributeKey::START_AND_END); | ||
if (! $startAndEnd instanceof StartAndEnd) { | ||
throw new ShouldNotHappenException(); | ||
} | ||
|
||
$docContent = $betterTokenIterator->printFromTo($startAndEnd->getStart(), $startAndEnd->getEnd()); | ||
$spacingAwareArrayShapeItemNode = new SpacingAwareArrayShapeItemNode( | ||
$node->keyName, $node->optional, $node->valueType, $docContent | ||
); | ||
|
||
$parent = $node->getAttribute(PhpDocAttributeKey::PARENT); | ||
$spacingAwareArrayShapeItemNode->setAttribute(PhpDocAttributeKey::PARENT, $parent); | ||
|
||
return $spacingAwareArrayShapeItemNode; | ||
} | ||
} |
32 changes: 32 additions & 0 deletions
32
packages/BetterPhpDocParser/PhpDocNodeVisitor/ArrayTypePhpDocNodeVisitor.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Rector\BetterPhpDocParser\PhpDocNodeVisitor; | ||
|
||
use PHPStan\PhpDocParser\Ast\Node; | ||
use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode; | ||
use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey; | ||
use Rector\BetterPhpDocParser\ValueObject\Type\SpacingAwareArrayTypeNode; | ||
use Symplify\SimplePhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; | ||
|
||
final class ArrayTypePhpDocNodeVisitor extends AbstractPhpDocNodeVisitor | ||
{ | ||
public function enterNode(Node $node): ?Node | ||
{ | ||
if (! $node instanceof ArrayTypeNode) { | ||
return null; | ||
} | ||
|
||
if ($node instanceof SpacingAwareArrayTypeNode) { | ||
return null; | ||
} | ||
|
||
$spacingAwareArrayTypeNode = new SpacingAwareArrayTypeNode($node->type); | ||
|
||
$parent = $node->getAttribute(PhpDocAttributeKey::PARENT); | ||
$spacingAwareArrayTypeNode->setAttribute(PhpDocAttributeKey::PARENT, $parent); | ||
|
||
return $spacingAwareArrayTypeNode; | ||
} | ||
} |
36 changes: 36 additions & 0 deletions
36
packages/BetterPhpDocParser/PhpDocNodeVisitor/CallableTypePhpDocNodeVisitor.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Rector\BetterPhpDocParser\PhpDocNodeVisitor; | ||
|
||
use PHPStan\PhpDocParser\Ast\Node; | ||
use PHPStan\PhpDocParser\Ast\Type\CallableTypeNode; | ||
use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey; | ||
use Rector\BetterPhpDocParser\ValueObject\Type\SpacingAwareCallableTypeNode; | ||
use Symplify\SimplePhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; | ||
|
||
final class CallableTypePhpDocNodeVisitor extends AbstractPhpDocNodeVisitor | ||
{ | ||
public function enterNode(Node $node): ?Node | ||
{ | ||
if (! $node instanceof CallableTypeNode) { | ||
return null; | ||
} | ||
|
||
if ($node instanceof SpacingAwareCallableTypeNode) { | ||
return null; | ||
} | ||
|
||
$spacingAwareCallableTypeNode = new SpacingAwareCallableTypeNode( | ||
$node->identifier, | ||
$node->parameters, | ||
$node->returnType | ||
); | ||
|
||
$parent = $node->getAttribute(PhpDocAttributeKey::PARENT); | ||
$spacingAwareCallableTypeNode->setAttribute(PhpDocAttributeKey::PARENT, $parent); | ||
|
||
return $spacingAwareCallableTypeNode; | ||
} | ||
} |
32 changes: 32 additions & 0 deletions
32
packages/BetterPhpDocParser/PhpDocNodeVisitor/IntersectionTypeNodePhpDocNodeVisitor.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Rector\BetterPhpDocParser\PhpDocNodeVisitor; | ||
|
||
use PHPStan\PhpDocParser\Ast\Node; | ||
use PHPStan\PhpDocParser\Ast\Type\IntersectionTypeNode; | ||
use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey; | ||
use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareIntersectionTypeNode; | ||
use Symplify\SimplePhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; | ||
|
||
final class IntersectionTypeNodePhpDocNodeVisitor extends AbstractPhpDocNodeVisitor | ||
{ | ||
public function enterNode(Node $node): ?Node | ||
{ | ||
if (! $node instanceof IntersectionTypeNode) { | ||
return null; | ||
} | ||
|
||
if ($node instanceof BracketsAwareIntersectionTypeNode) { | ||
return null; | ||
} | ||
|
||
$bracketsAwareUnionTypeNode = new BracketsAwareIntersectionTypeNode($node->types); | ||
|
||
$parent = $node->getAttribute(PhpDocAttributeKey::PARENT); | ||
$bracketsAwareUnionTypeNode->setAttribute(PhpDocAttributeKey::PARENT, $parent); | ||
|
||
return $bracketsAwareUnionTypeNode; | ||
} | ||
} |
70 changes: 70 additions & 0 deletions
70
packages/BetterPhpDocParser/PhpDocNodeVisitor/UnionTypeNodePhpDocNodeVisitor.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Rector\BetterPhpDocParser\PhpDocNodeVisitor; | ||
|
||
use PHPStan\PhpDocParser\Ast\Node; | ||
use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode; | ||
use PHPStan\PhpDocParser\Ast\Type\UnionTypeNode; | ||
use Rector\BetterPhpDocParser\DataProvider\CurrentTokenIteratorProvider; | ||
use Rector\BetterPhpDocParser\ValueObject\Parser\BetterTokenIterator; | ||
use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey; | ||
use Rector\BetterPhpDocParser\ValueObject\StartAndEnd; | ||
use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareUnionTypeNode; | ||
use Rector\Core\Exception\ShouldNotHappenException; | ||
use Symplify\SimplePhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; | ||
|
||
final class UnionTypeNodePhpDocNodeVisitor extends AbstractPhpDocNodeVisitor | ||
{ | ||
/** | ||
* @var CurrentTokenIteratorProvider | ||
*/ | ||
private $currentTokenIteratorProvider; | ||
|
||
public function __construct(CurrentTokenIteratorProvider $currentTokenIteratorProvider) | ||
{ | ||
$this->currentTokenIteratorProvider = $currentTokenIteratorProvider; | ||
} | ||
|
||
public function enterNode(Node $node): ?Node | ||
{ | ||
if (! $node instanceof UnionTypeNode) { | ||
return null; | ||
} | ||
|
||
if ($node instanceof BracketsAwareUnionTypeNode) { | ||
return null; | ||
} | ||
|
||
// unwrap with parent array type... | ||
$startAndEnd = $node->getAttribute(PhpDocAttributeKey::START_AND_END); | ||
if (! $startAndEnd instanceof StartAndEnd) { | ||
throw new ShouldNotHappenException(); | ||
} | ||
|
||
$betterTokenProvider = $this->currentTokenIteratorProvider->provide(); | ||
$parent = $node->getAttribute(PhpDocAttributeKey::PARENT); | ||
|
||
$docContent = $this->resolveDocContent($parent, $betterTokenProvider, $startAndEnd); | ||
$bracketsAwareUnionTypeNode = new BracketsAwareUnionTypeNode($node->types, $docContent); | ||
$bracketsAwareUnionTypeNode->setAttribute(PhpDocAttributeKey::PARENT, $parent); | ||
|
||
return $bracketsAwareUnionTypeNode; | ||
} | ||
|
||
private function resolveDocContent(Node $parentNode, BetterTokenIterator $betterTokenProvider, StartAndEnd $startAndEnd): string | ||
{ | ||
if ($parentNode instanceof ArrayTypeNode) { | ||
$arrayTypeNodeStartAndEnd = $parentNode->getAttribute(PhpDocAttributeKey::START_AND_END); | ||
if ($arrayTypeNodeStartAndEnd instanceof StartAndEnd) { | ||
return $betterTokenProvider->printFromTo( | ||
$arrayTypeNodeStartAndEnd->getStart(), | ||
$arrayTypeNodeStartAndEnd->getEnd() | ||
); | ||
} | ||
} | ||
|
||
return $betterTokenProvider->printFromTo($startAndEnd->getStart(), $startAndEnd->getEnd()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters