@@ -533,5 +533,87 @@ def test_double_aref_on_method_call
533533 assert_equal ( 2 , argument . definitions [ 0 ] . start_line )
534534 assert_equal ( 2 , argument . usages [ 0 ] . start_line )
535535 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
536618 end
537619end
0 commit comments