@ ProgramNode (location: (0...85))
├── locals: []
└── statements:
    @ StatementsNode (location: (0...85))
    └── body: (length: 9)
        ├── @ ParenthesesNode (location: (0...6))
        │   ├── body:
        │   │   @ StatementsNode (location: (1...5))
        │   │   └── body: (length: 1)
        │   │       └── @ RangeNode (location: (1...5))
        │   │           ├── left: ∅
        │   │           ├── right:
        │   │           │   @ IntegerNode (location: (4...5))
        │   │           │   └── flags: decimal
        │   │           ├── operator_loc: (1...4) = "..."
        │   │           └── flags: exclude_end
        │   ├── opening_loc: (0...1) = "("
        │   └── closing_loc: (5...6) = ")"
        ├── @ ParenthesesNode (location: (8...13))
        │   ├── body:
        │   │   @ StatementsNode (location: (9...12))
        │   │   └── body: (length: 1)
        │   │       └── @ RangeNode (location: (9...12))
        │   │           ├── left: ∅
        │   │           ├── right:
        │   │           │   @ IntegerNode (location: (11...12))
        │   │           │   └── flags: decimal
        │   │           ├── operator_loc: (9...11) = ".."
        │   │           └── flags: ∅
        │   ├── opening_loc: (8...9) = "("
        │   └── closing_loc: (12...13) = ")"
        ├── @ RangeNode (location: (15...20))
        │   ├── left:
        │   │   @ IntegerNode (location: (15...16))
        │   │   └── flags: decimal
        │   ├── right:
        │   │   @ IntegerNode (location: (19...20))
        │   │   └── flags: decimal
        │   ├── operator_loc: (16...19) = "..."
        │   └── flags: exclude_end
        ├── @ CallNode (location: (22...31))
        │   ├── receiver:
        │   │   @ CallNode (location: (22...25))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (22...25) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "foo"
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (25...31) = "[...2]"
        │   ├── opening_loc: (25...26) = "["
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (26...30))
        │   │   └── arguments: (length: 1)
        │   │       └── @ RangeNode (location: (26...30))
        │   │           ├── left: ∅
        │   │           ├── right:
        │   │           │   @ IntegerNode (location: (29...30))
        │   │           │   └── flags: decimal
        │   │           ├── operator_loc: (26...29) = "..."
        │   │           └── flags: exclude_end
        │   ├── closing_loc: (30...31) = "]"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "[]"
        ├── @ HashNode (location: (33...48))
        │   ├── opening_loc: (33...34) = "{"
        │   ├── elements: (length: 1)
        │   │   └── @ AssocNode (location: (35...46))
        │   │       ├── key:
        │   │       │   @ SymbolNode (location: (35...39))
        │   │       │   ├── opening_loc: ∅
        │   │       │   ├── value_loc: (35...38) = "foo"
        │   │       │   ├── closing_loc: (38...39) = ":"
        │   │       │   └── unescaped: "foo"
        │   │       ├── value:
        │   │       │   @ RangeNode (location: (40...46))
        │   │       │   ├── left: ∅
        │   │       │   ├── right:
        │   │       │   │   @ CallNode (location: (43...46))
        │   │       │   │   ├── receiver: ∅
        │   │       │   │   ├── call_operator_loc: ∅
        │   │       │   │   ├── message_loc: (43...46) = "bar"
        │   │       │   │   ├── opening_loc: ∅
        │   │       │   │   ├── arguments: ∅
        │   │       │   │   ├── closing_loc: ∅
        │   │       │   │   ├── block: ∅
        │   │       │   │   ├── flags: variable_call
        │   │       │   │   └── name: "bar"
        │   │       │   ├── operator_loc: (40...43) = "..."
        │   │       │   └── flags: exclude_end
        │   │       └── operator_loc: ∅
        │   └── closing_loc: (47...48) = "}"
        ├── @ ParenthesesNode (location: (50...56))
        │   ├── body:
        │   │   @ StatementsNode (location: (51...55))
        │   │   └── body: (length: 1)
        │   │       └── @ RangeNode (location: (51...55))
        │   │           ├── left:
        │   │           │   @ IntegerNode (location: (51...52))
        │   │           │   └── flags: decimal
        │   │           ├── right: ∅
        │   │           ├── operator_loc: (52...55) = "..."
        │   │           └── flags: exclude_end
        │   ├── opening_loc: (50...51) = "("
        │   └── closing_loc: (55...56) = ")"
        ├── @ RangeNode (location: (58...62))
        │   ├── left:
        │   │   @ IntegerNode (location: (58...59))
        │   │   └── flags: decimal
        │   ├── right:
        │   │   @ IntegerNode (location: (61...62))
        │   │   └── flags: decimal
        │   ├── operator_loc: (59...61) = ".."
        │   └── flags: ∅
        ├── @ HashNode (location: (64...78))
        │   ├── opening_loc: (64...65) = "{"
        │   ├── elements: (length: 1)
        │   │   └── @ AssocNode (location: (66...76))
        │   │       ├── key:
        │   │       │   @ SymbolNode (location: (66...70))
        │   │       │   ├── opening_loc: ∅
        │   │       │   ├── value_loc: (66...69) = "foo"
        │   │       │   ├── closing_loc: (69...70) = ":"
        │   │       │   └── unescaped: "foo"
        │   │       ├── value:
        │   │       │   @ RangeNode (location: (71...76))
        │   │       │   ├── left: ∅
        │   │       │   ├── right:
        │   │       │   │   @ CallNode (location: (73...76))
        │   │       │   │   ├── receiver: ∅
        │   │       │   │   ├── call_operator_loc: ∅
        │   │       │   │   ├── message_loc: (73...76) = "bar"
        │   │       │   │   ├── opening_loc: ∅
        │   │       │   │   ├── arguments: ∅
        │   │       │   │   ├── closing_loc: ∅
        │   │       │   │   ├── block: ∅
        │   │       │   │   ├── flags: variable_call
        │   │       │   │   └── name: "bar"
        │   │       │   ├── operator_loc: (71...73) = ".."
        │   │       │   └── flags: ∅
        │   │       └── operator_loc: ∅
        │   └── closing_loc: (77...78) = "}"
        └── @ ParenthesesNode (location: (80...85))
            ├── body:
            │   @ StatementsNode (location: (81...84))
            │   └── body: (length: 1)
            │       └── @ RangeNode (location: (81...84))
            │           ├── left:
            │           │   @ IntegerNode (location: (81...82))
            │           │   └── flags: decimal
            │           ├── right: ∅
            │           ├── operator_loc: (82...84) = ".."
            │           └── flags: ∅
            ├── opening_loc: (80...81) = "("
            └── closing_loc: (84...85) = ")"
