@ ProgramNode (location: (1,0)-(1,20)) ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,20)) └── body: (length: 1) └── @ BeginNode (location: (1,0)-(1,20)) ├── begin_keyword_loc: (1,0)-(1,5) = "begin" ├── statements: │ @ StatementsNode (location: (1,6)-(1,16)) │ └── body: (length: 2) │ ├── @ CallNode (location: (1,6)-(1,10)) │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo! │ │ ├── message_loc: (1,6)-(1,10) = "foo!" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ └── @ CallNode (location: (1,12)-(1,16)) │ ├── flags: ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar! │ ├── message_loc: (1,12)-(1,16) = "bar!" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── rescue_clause: ∅ ├── else_clause: ∅ ├── ensure_clause: ∅ └── end_keyword_loc: (1,17)-(1,20) = "end"