@ ProgramNode (location: (1,0)-(5,9)) ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(5,9)) └── body: (length: 3) ├── @ ArrayNode (location: (1,0)-(1,6)) │ ├── flags: contains_splat │ ├── elements: (length: 1) │ │ └── @ SplatNode (location: (1,1)-(1,5)) │ │ ├── operator_loc: (1,1)-(1,2) = "*" │ │ └── expression: │ │ @ CallNode (location: (1,2)-(1,5)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo │ │ ├── message_loc: (1,2)-(1,5) = "foo" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── opening_loc: (1,0)-(1,1) = "[" │ └── closing_loc: (1,5)-(1,6) = "]" ├── @ ArrayNode (location: (3,0)-(3,12)) │ ├── flags: contains_splat │ ├── elements: (length: 3) │ │ ├── @ IntegerNode (location: (3,1)-(3,2)) │ │ │ ├── flags: decimal │ │ │ └── value: 1 │ │ ├── @ SplatNode (location: (3,4)-(3,8)) │ │ │ ├── operator_loc: (3,4)-(3,5) = "*" │ │ │ └── expression: │ │ │ @ CallNode (location: (3,5)-(3,8)) │ │ │ ├── flags: variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :foo │ │ │ ├── message_loc: (3,5)-(3,8) = "foo" │ │ │ ├── opening_loc: ∅ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ IntegerNode (location: (3,10)-(3,11)) │ │ ├── flags: decimal │ │ └── value: 2 │ ├── opening_loc: (3,0)-(3,1) = "[" │ └── closing_loc: (3,11)-(3,12) = "]" └── @ ArrayNode (location: (5,0)-(5,9)) ├── flags: contains_splat ├── elements: (length: 2) │ ├── @ IntegerNode (location: (5,1)-(5,2)) │ │ ├── flags: decimal │ │ └── value: 1 │ └── @ SplatNode (location: (5,4)-(5,8)) │ ├── operator_loc: (5,4)-(5,5) = "*" │ └── expression: │ @ CallNode (location: (5,5)-(5,8)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo │ ├── message_loc: (5,5)-(5,8) = "foo" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── opening_loc: (5,0)-(5,1) = "[" └── closing_loc: (5,8)-(5,9) = "]"