@@ -533,5 +533,87 @@ def test_double_aref_on_method_call
533
533
assert_equal ( 2 , argument . definitions [ 0 ] . start_line )
534
534
assert_equal ( 2 , argument . usages [ 0 ] . start_line )
535
535
end
536
+
537
+ def test_nested_arguments
538
+ tree = SyntaxTree . parse ( <<~RUBY )
539
+ [[1, [2, 3]]].each do |one, (two, three)|
540
+ one
541
+ two
542
+ three
543
+ end
544
+ RUBY
545
+
546
+ visitor = Collector . new
547
+ visitor . visit ( tree )
548
+
549
+ assert_equal ( 3 , visitor . arguments . length )
550
+ assert_equal ( 0 , visitor . variables . length )
551
+
552
+ argument = visitor . arguments [ "one" ]
553
+ assert_equal ( 1 , argument . definitions . length )
554
+ assert_equal ( 1 , argument . usages . length )
555
+
556
+ assert_equal ( 1 , argument . definitions [ 0 ] . start_line )
557
+ assert_equal ( 2 , argument . usages [ 0 ] . start_line )
558
+
559
+ argument = visitor . arguments [ "two" ]
560
+ assert_equal ( 1 , argument . definitions . length )
561
+ assert_equal ( 1 , argument . usages . length )
562
+
563
+ assert_equal ( 1 , argument . definitions [ 0 ] . start_line )
564
+ assert_equal ( 3 , argument . usages [ 0 ] . start_line )
565
+
566
+ argument = visitor . arguments [ "three" ]
567
+ assert_equal ( 1 , argument . definitions . length )
568
+ assert_equal ( 1 , argument . usages . length )
569
+
570
+ assert_equal ( 1 , argument . definitions [ 0 ] . start_line )
571
+ assert_equal ( 4 , argument . usages [ 0 ] . start_line )
572
+ end
573
+
574
+ def test_double_nested_arguments
575
+ tree = SyntaxTree . parse ( <<~RUBY )
576
+ [[1, [2, 3]]].each do |one, (two, (three, four))|
577
+ one
578
+ two
579
+ three
580
+ four
581
+ end
582
+ RUBY
583
+
584
+ visitor = Collector . new
585
+ visitor . visit ( tree )
586
+
587
+ assert_equal ( 4 , visitor . arguments . length )
588
+ assert_equal ( 0 , visitor . variables . length )
589
+
590
+ argument = visitor . arguments [ "one" ]
591
+ assert_equal ( 1 , argument . definitions . length )
592
+ assert_equal ( 1 , argument . usages . length )
593
+
594
+ assert_equal ( 1 , argument . definitions [ 0 ] . start_line )
595
+ assert_equal ( 2 , argument . usages [ 0 ] . start_line )
596
+
597
+ argument = visitor . arguments [ "two" ]
598
+ assert_equal ( 1 , argument . definitions . length )
599
+ assert_equal ( 1 , argument . usages . length )
600
+
601
+ assert_equal ( 1 , argument . definitions [ 0 ] . start_line )
602
+ assert_equal ( 3 , argument . usages [ 0 ] . start_line )
603
+
604
+ argument = visitor . arguments [ "three" ]
605
+ assert_equal ( 1 , argument . definitions . length )
606
+ assert_equal ( 1 , argument . usages . length )
607
+
608
+ assert_equal ( 1 , argument . definitions [ 0 ] . start_line )
609
+ assert_equal ( 4 , argument . usages [ 0 ] . start_line )
610
+
611
+ argument = visitor . arguments [ "four" ]
612
+ assert_equal ( 1 , argument . definitions . length )
613
+ assert_equal ( 1 , argument . usages . length )
614
+
615
+ assert_equal ( 1 , argument . definitions [ 0 ] . start_line )
616
+ assert_equal ( 5 , argument . usages [ 0 ] . start_line )
617
+ end
536
618
end
537
619
end
0 commit comments