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