Skip to content

Commit 61599a7

Browse files
committed
Fix inlining of attribute args
1 parent 37ab1c6 commit 61599a7

File tree

1 file changed

+35
-18
lines changed

1 file changed

+35
-18
lines changed

src/RectorRule.php

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
<?php
22

3-
namespace Knuckles\Scribe\Docblock2Attributes;
3+
namespace Knuckles\Scribe\Tags2Attributes;
44

55

6-
use Knuckles\Scribe\Docblock2Attributes\TagParsers\ApiResourceTagParser;
7-
use Knuckles\Scribe\Docblock2Attributes\TagParsers\AuthTagParser;
8-
use Knuckles\Scribe\Docblock2Attributes\TagParsers\BodyParamTagParser;
9-
use Knuckles\Scribe\Docblock2Attributes\TagParsers\GroupTagParser;
10-
use Knuckles\Scribe\Docblock2Attributes\TagParsers\QueryParamTagParser;
11-
use Knuckles\Scribe\Docblock2Attributes\TagParsers\ResponseFieldTagParser;
12-
use Knuckles\Scribe\Docblock2Attributes\TagParsers\ResponseFileTagParser;
13-
use Knuckles\Scribe\Docblock2Attributes\TagParsers\ResponseTagParser;
14-
use Knuckles\Scribe\Docblock2Attributes\TagParsers\SubgroupTagParser;
15-
use Knuckles\Scribe\Docblock2Attributes\TagParsers\TransformerTagParser;
16-
use Knuckles\Scribe\Docblock2Attributes\TagParsers\UrlParamTagParser;
6+
use Knuckles\Scribe\Tags2Attributes\TagParsers\ApiResourceTagParser;
7+
use Knuckles\Scribe\Tags2Attributes\TagParsers\AuthTagParser;
8+
use Knuckles\Scribe\Tags2Attributes\TagParsers\BodyParamTagParser;
9+
use Knuckles\Scribe\Tags2Attributes\TagParsers\GroupTagParser;
10+
use Knuckles\Scribe\Tags2Attributes\TagParsers\QueryParamTagParser;
11+
use Knuckles\Scribe\Tags2Attributes\TagParsers\ResponseFieldTagParser;
12+
use Knuckles\Scribe\Tags2Attributes\TagParsers\ResponseFileTagParser;
13+
use Knuckles\Scribe\Tags2Attributes\TagParsers\ResponseTagParser;
14+
use Knuckles\Scribe\Tags2Attributes\TagParsers\SubgroupTagParser;
15+
use Knuckles\Scribe\Tags2Attributes\TagParsers\TransformerTagParser;
16+
use Knuckles\Scribe\Tags2Attributes\TagParsers\UrlParamTagParser;
1717
use PhpParser\Node;
18+
use PhpParser\Node\Attribute;
19+
use PhpParser\Node\Name\FullyQualified;
1820
use PHPStan\PhpDocParser\Ast\Node as DocNode;
1921
use PhpParser\Node\AttributeGroup;
2022
use PhpParser\Node\Expr\ArrowFunction;
@@ -34,6 +36,7 @@
3436
use Rector\Php80\NodeManipulator\AttributeGroupNamedArgumentManipulator;
3537
use Rector\Php80\PhpDoc\PhpDocNodeFinder;
3638
use Rector\Php80\ValueObject\AnnotationToAttribute;
39+
use Rector\PhpAttribute\AttributeArrayNameInliner;
3740
use Rector\PhpAttribute\NodeFactory\PhpAttributeGroupFactory;
3841
use Rector\PhpAttribute\RemovableAnnotationAnalyzer;
3942
use Rector\PhpAttribute\UnwrapableAnnotationAnalyzer;
@@ -51,6 +54,10 @@
5154
*/
5255
class RectorRule extends AbstractRector implements MinPhpVersionInterface
5356
{
57+
/**
58+
* @var \Rector\PhpAttribute\AttributeArrayNameInliner
59+
*/
60+
protected AttributeArrayNameInliner $attributeArrayNameInliner;
5461
private $annotationsToAttributes = [];
5562
/**
5663
* @readonly
@@ -97,7 +104,12 @@ class RectorRule extends AbstractRector implements MinPhpVersionInterface
97104
* @var \Rector\Naming\Naming\UseImportsResolver
98105
*/
99106
private $useImportsResolver;
100-
public function __construct(PhpAttributeGroupFactory $phpAttributeGroupFactory, AttrGroupsFactory $attrGroupsFactory, PhpDocTagRemover $phpDocTagRemover, PhpDocNodeFinder $phpDocNodeFinder, UnwrapableAnnotationAnalyzer $unwrapableAnnotationAnalyzer, RemovableAnnotationAnalyzer $removableAnnotationAnalyzer, AttributeGroupNamedArgumentManipulator $attributeGroupNamedArgumentManipulator, PhpVersionProvider $phpVersionProvider, UseImportsResolver $useImportsResolver)
107+
public function __construct(
108+
PhpAttributeGroupFactory $phpAttributeGroupFactory, AttrGroupsFactory $attrGroupsFactory,
109+
PhpDocTagRemover $phpDocTagRemover, PhpDocNodeFinder $phpDocNodeFinder,
110+
UnwrapableAnnotationAnalyzer $unwrapableAnnotationAnalyzer, RemovableAnnotationAnalyzer $removableAnnotationAnalyzer,
111+
AttributeGroupNamedArgumentManipulator $attributeGroupNamedArgumentManipulator, PhpVersionProvider $phpVersionProvider,
112+
UseImportsResolver $useImportsResolver, AttributeArrayNameInliner $attributeArrayNameInliner)
101113
{
102114
$this->phpAttributeGroupFactory = $phpAttributeGroupFactory;
103115
$this->attrGroupsFactory = $attrGroupsFactory;
@@ -108,6 +120,7 @@ public function __construct(PhpAttributeGroupFactory $phpAttributeGroupFactory,
108120
$this->attributeGroupNamedArgumentManipulator = $attributeGroupNamedArgumentManipulator;
109121
$this->phpVersionProvider = $phpVersionProvider;
110122
$this->useImportsResolver = $useImportsResolver;
123+
$this->attributeArrayNameInliner = $attributeArrayNameInliner;
111124

112125
$configuration = [
113126
new AnnotationToAttribute('header', \Knuckles\Scribe\Attributes\Header::class),
@@ -226,12 +239,16 @@ private function processGenericTags(PhpDocInfo $phpDocInfo) : array
226239
if (in_array(strtolower($tag), $removals)) {
227240
return PhpDocNodeTraverser::NODE_REMOVE;
228241
}
229-
$attributeGroups[] = $this->phpAttributeGroupFactory->createFromClassWithItems(
230-
$annotationToAttribute->getAttributeClass(),
231-
$this->getArgs(
232-
$tag, $docNode->value?->value, $phpDocInfo
233-
)
242+
243+
$attributeClass = $annotationToAttribute->getAttributeClass();
244+
$items = $this->getArgs(
245+
$tag, $docNode->value?->value, $phpDocInfo
234246
);
247+
$fullyQualified = new FullyQualified($attributeClass);
248+
$args = $this->phpAttributeGroupFactory->createArgsFromItems($items, $attributeClass);
249+
$args = $this->attributeArrayNameInliner->inlineArrayToArgs($args);
250+
$attribute = new Attribute($fullyQualified, $args);
251+
$attributeGroups[] = new AttributeGroup([$attribute]);
235252
$phpDocInfo->markAsChanged();
236253
return PhpDocNodeTraverser::NODE_REMOVE;
237254
}

0 commit comments

Comments
 (0)