@@ -5949,6 +5949,67 @@ public function testLinesAndIndexes(string $phpDoc, array $childrenLines): void
5949
5949
}
5950
5950
}
5951
5951
5952
+
5953
+ /**
5954
+ * @return iterable<array{string, list<array{int, int, int, int}>}>
5955
+ */
5956
+ public function dataDeepNodesLinesAndIndexes (): iterable
5957
+ {
5958
+ yield [
5959
+ '/** ' . PHP_EOL .
5960
+ ' * @X({ ' . PHP_EOL .
5961
+ ' * 1, ' . PHP_EOL .
5962
+ ' * 2 ' . PHP_EOL .
5963
+ ' * , ' . PHP_EOL .
5964
+ ' * 3, ' . PHP_EOL .
5965
+ ' * } ' . PHP_EOL .
5966
+ ' * ) ' . PHP_EOL .
5967
+ ' */ ' ,
5968
+ [
5969
+ [1 , 9 , 0 , 25 ], // PhpDocNode
5970
+ [2 , 8 , 2 , 23 ], // PhpDocTagNode
5971
+ [2 , 8 , 3 , 23 ], // DoctrineTagValueNode
5972
+ [2 , 8 , 3 , 23 ], // DoctrineAnnotation
5973
+ [2 , 8 , 4 , 22 ], // DoctrineArgument
5974
+ [2 , 8 , 4 , 22 ], // DoctrineArray
5975
+ [3 , 3 , 7 , 7 ], // DoctrineArrayItem
5976
+ [3 , 3 , 7 , 7 ], // ConstExprIntegerNode
5977
+ [4 , 5 , 11 , 12 ], // DoctrineArrayItem
5978
+ [4 , 5 , 11 , 12 ], // ConstExprIntegerNode
5979
+ [6 , 6 , 18 , 18 ], // DoctrineArrayItem
5980
+ [6 , 6 , 18 , 18 ], // ConstExprIntegerNode
5981
+ ],
5982
+ ];
5983
+ }
5984
+
5985
+
5986
+ /**
5987
+ * @dataProvider dataDeepNodesLinesAndIndexes
5988
+ * @param list<array{int, int, int, int}> $nodeAttributes
5989
+ */
5990
+ public function testDeepNodesLinesAndIndexes (string $ phpDoc , array $ nodeAttributes ): void
5991
+ {
5992
+ $ tokens = new TokenIterator ($ this ->lexer ->tokenize ($ phpDoc ));
5993
+ $ usedAttributes = [
5994
+ 'lines ' => true ,
5995
+ 'indexes ' => true ,
5996
+ ];
5997
+ $ constExprParser = new ConstExprParser (true , true , $ usedAttributes );
5998
+ $ typeParser = new TypeParser ($ constExprParser , true , $ usedAttributes );
5999
+ $ phpDocParser = new PhpDocParser ($ typeParser , $ constExprParser , true , true , $ usedAttributes , true );
6000
+ $ visitor = new NodeCollectingVisitor ();
6001
+ $ traverser = new NodeTraverser ([$ visitor ]);
6002
+ $ traverser ->traverse ([$ phpDocParser ->parse ($ tokens )]);
6003
+ $ nodes = $ visitor ->nodes ;
6004
+ $ this ->assertCount (count ($ nodeAttributes ), $ nodes );
6005
+ foreach ($ nodes as $ i => $ node ) {
6006
+ $ this ->assertSame ($ nodeAttributes [$ i ][0 ], $ node ->getAttribute (Attribute::START_LINE ), sprintf ('Start line of %d. node ' , $ i + 1 ));
6007
+ $ this ->assertSame ($ nodeAttributes [$ i ][1 ], $ node ->getAttribute (Attribute::END_LINE ), sprintf ('End line of %d. node ' , $ i + 1 ));
6008
+ $ this ->assertSame ($ nodeAttributes [$ i ][2 ], $ node ->getAttribute (Attribute::START_INDEX ), sprintf ('Start index of %d. node ' , $ i + 1 ));
6009
+ $ this ->assertSame ($ nodeAttributes [$ i ][3 ], $ node ->getAttribute (Attribute::END_INDEX ), sprintf ('End index of %d. node ' , $ i + 1 ));
6010
+ }
6011
+ }
6012
+
5952
6013
/**
5953
6014
* @return array<mixed>
5954
6015
*/
0 commit comments