@ ProgramNode (location: (0...51))
├── locals: [:a, :foo]
└── statements:
    @ StatementsNode (location: (0...51))
    └── body: (length: 4)
        ├── @ MatchRequiredNode (location: (0...8))
        │   ├── value:
        │   │   @ IntegerNode (location: (0...1))
        │   │   └── flags: decimal
        │   ├── pattern:
        │   │   @ ArrayPatternNode (location: (5...8))
        │   │   ├── constant: ∅
        │   │   ├── requireds: (length: 1)
        │   │   │   └── @ LocalVariableTargetNode (location: (6...7))
        │   │   │       ├── name: :a
        │   │   │       └── depth: 0
        │   │   ├── rest: ∅
        │   │   ├── posts: (length: 0)
        │   │   ├── opening_loc: (5...6) = "["
        │   │   └── closing_loc: (7...8) = "]"
        │   └── operator_loc: (2...4) = "=>"
        ├── @ MatchRequiredNode (location: (9...17))
        │   ├── value:
        │   │   @ IntegerNode (location: (9...10))
        │   │   └── flags: decimal
        │   ├── pattern:
        │   │   @ ArrayPatternNode (location: (14...17))
        │   │   ├── constant: ∅
        │   │   ├── requireds: (length: 0)
        │   │   ├── rest:
        │   │   │   @ SplatNode (location: (15...16))
        │   │   │   ├── operator_loc: (15...16) = "*"
        │   │   │   └── expression: ∅
        │   │   ├── posts: (length: 0)
        │   │   ├── opening_loc: (14...15) = "["
        │   │   └── closing_loc: (16...17) = "]"
        │   └── operator_loc: (11...13) = "=>"
        ├── @ MatchPredicateNode (location: (18...33))
        │   ├── value:
        │   │   @ IntegerNode (location: (18...19))
        │   │   └── flags: decimal
        │   ├── pattern:
        │   │   @ FindPatternNode (location: (23...33))
        │   │   ├── constant: ∅
        │   │   ├── left:
        │   │   │   @ SplatNode (location: (24...25))
        │   │   │   ├── operator_loc: (24...25) = "*"
        │   │   │   └── expression: ∅
        │   │   ├── requireds: (length: 1)
        │   │   │   └── @ IntegerNode (location: (27...29))
        │   │   │       └── flags: decimal
        │   │   ├── right:
        │   │   │   @ SplatNode (location: (31...32))
        │   │   │   ├── operator_loc: (31...32) = "*"
        │   │   │   └── expression: ∅
        │   │   ├── opening_loc: (23...24) = "["
        │   │   └── closing_loc: (32...33) = "]"
        │   └── operator_loc: (20...22) = "in"
        └── @ MatchPredicateNode (location: (34...51))
            ├── value:
            │   @ IntegerNode (location: (34...35))
            │   └── flags: decimal
            ├── pattern:
            │   @ FindPatternNode (location: (39...51))
            │   ├── constant: ∅
            │   ├── left:
            │   │   @ SplatNode (location: (40...41))
            │   │   ├── operator_loc: (40...41) = "*"
            │   │   └── expression: ∅
            │   ├── requireds: (length: 1)
            │   │   └── @ LocalVariableTargetNode (location: (43...44))
            │   │       ├── name: :a
            │   │       └── depth: 0
            │   ├── right:
            │   │   @ SplatNode (location: (46...50))
            │   │   ├── operator_loc: (46...47) = "*"
            │   │   └── expression:
            │   │       @ LocalVariableTargetNode (location: (47...50))
            │   │       ├── name: :foo
            │   │       └── depth: 0
            │   ├── opening_loc: (39...40) = "["
            │   └── closing_loc: (50...51) = "]"
            └── operator_loc: (36...38) = "in"
