@ ProgramNode (location: (1,6)-(4,17)) ├── locals: [:string] └── statements: @ StatementsNode (location: (1,6)-(4,17)) └── body: (length: 2) ├── @ LocalVariableWriteNode (location: (1,6)-(1,22)) │ ├── name: :string │ ├── depth: 0 │ ├── name_loc: (1,6)-(1,12) = "string" │ ├── value: │ │ @ StringNode (location: (1,15)-(1,22)) │ │ ├── flags: ∅ │ │ ├── opening_loc: (1,15)-(1,22) = "<<-\"^D\"" │ │ ├── content_loc: (2,0)-(3,0) = " very long string\n" │ │ ├── closing_loc: (3,0)-(4,0) = " ^D\n" │ │ └── unescaped: " very long string\n" │ └── operator_loc: (1,13)-(1,14) = "=" └── @ CallNode (location: (4,6)-(4,17)) ├── flags: ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :puts ├── message_loc: (4,6)-(4,10) = "puts" ├── opening_loc: ∅ ├── arguments: │ @ ArgumentsNode (location: (4,11)-(4,17)) │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ LocalVariableReadNode (location: (4,11)-(4,17)) │ ├── name: :string │ └── depth: 0 ├── closing_loc: ∅ └── block: ∅