1
1
<?php
2
2
3
- namespace Knuckles \Scribe \Docblock2Attributes ;
3
+ namespace Knuckles \Scribe \Tags2Attributes ;
4
4
5
5
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 ;
17
17
use PhpParser \Node ;
18
+ use PhpParser \Node \Attribute ;
19
+ use PhpParser \Node \Name \FullyQualified ;
18
20
use PHPStan \PhpDocParser \Ast \Node as DocNode ;
19
21
use PhpParser \Node \AttributeGroup ;
20
22
use PhpParser \Node \Expr \ArrowFunction ;
34
36
use Rector \Php80 \NodeManipulator \AttributeGroupNamedArgumentManipulator ;
35
37
use Rector \Php80 \PhpDoc \PhpDocNodeFinder ;
36
38
use Rector \Php80 \ValueObject \AnnotationToAttribute ;
39
+ use Rector \PhpAttribute \AttributeArrayNameInliner ;
37
40
use Rector \PhpAttribute \NodeFactory \PhpAttributeGroupFactory ;
38
41
use Rector \PhpAttribute \RemovableAnnotationAnalyzer ;
39
42
use Rector \PhpAttribute \UnwrapableAnnotationAnalyzer ;
51
54
*/
52
55
class RectorRule extends AbstractRector implements MinPhpVersionInterface
53
56
{
57
+ /**
58
+ * @var \Rector\PhpAttribute\AttributeArrayNameInliner
59
+ */
60
+ protected AttributeArrayNameInliner $ attributeArrayNameInliner ;
54
61
private $ annotationsToAttributes = [];
55
62
/**
56
63
* @readonly
@@ -97,7 +104,12 @@ class RectorRule extends AbstractRector implements MinPhpVersionInterface
97
104
* @var \Rector\Naming\Naming\UseImportsResolver
98
105
*/
99
106
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 )
101
113
{
102
114
$ this ->phpAttributeGroupFactory = $ phpAttributeGroupFactory ;
103
115
$ this ->attrGroupsFactory = $ attrGroupsFactory ;
@@ -108,6 +120,7 @@ public function __construct(PhpAttributeGroupFactory $phpAttributeGroupFactory,
108
120
$ this ->attributeGroupNamedArgumentManipulator = $ attributeGroupNamedArgumentManipulator ;
109
121
$ this ->phpVersionProvider = $ phpVersionProvider ;
110
122
$ this ->useImportsResolver = $ useImportsResolver ;
123
+ $ this ->attributeArrayNameInliner = $ attributeArrayNameInliner ;
111
124
112
125
$ configuration = [
113
126
new AnnotationToAttribute ('header ' , \Knuckles \Scribe \Attributes \Header::class),
@@ -226,12 +239,16 @@ private function processGenericTags(PhpDocInfo $phpDocInfo) : array
226
239
if (in_array (strtolower ($ tag ), $ removals )) {
227
240
return PhpDocNodeTraverser::NODE_REMOVE ;
228
241
}
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
234
246
);
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 ]);
235
252
$ phpDocInfo ->markAsChanged ();
236
253
return PhpDocNodeTraverser::NODE_REMOVE ;
237
254
}
0 commit comments