@ ProgramNode (location: (1,0)-(11,17))
├── locals: []
└── statements:
    @ StatementsNode (location: (1,0)-(11,17))
    └── body: (length: 6)
        ├── @ CallNode (location: (1,0)-(1,14))
        │   ├── receiver: ∅
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (1,0)-(1,3) = "fun"
        │   ├── opening_loc: (1,3)-(1,4) = "("
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (1,4)-(1,13))
        │   │   ├── arguments: (length: 1)
        │   │   │   └── @ KeywordHashNode (location: (1,4)-(1,13))
        │   │   │       └── elements: (length: 1)
        │   │   │           └── @ AssocNode (location: (1,4)-(1,13))
        │   │   │               ├── key:
        │   │   │               │   @ SymbolNode (location: (1,4)-(1,8))
        │   │   │               │   ├── opening_loc: (1,4)-(1,5) = ":"
        │   │   │               │   ├── value_loc: (1,5)-(1,8) = "foo"
        │   │   │               │   ├── closing_loc: ∅
        │   │   │               │   └── unescaped: "foo"
        │   │   │               ├── value:
        │   │   │               │   @ IntegerNode (location: (1,12)-(1,13))
        │   │   │               │   └── flags: decimal
        │   │   │               └── operator_loc: (1,9)-(1,11) = "=>"
        │   │   └── flags: ∅
        │   ├── closing_loc: (1,13)-(1,14) = ")"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: :fun
        ├── @ CallNode (location: (3,0)-(3,19))
        │   ├── receiver: ∅
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (3,0)-(3,3) = "fun"
        │   ├── opening_loc: (3,3)-(3,4) = "("
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (3,4)-(3,13))
        │   │   ├── arguments: (length: 1)
        │   │   │   └── @ KeywordHashNode (location: (3,4)-(3,13))
        │   │   │       └── elements: (length: 1)
        │   │   │           └── @ AssocNode (location: (3,4)-(3,13))
        │   │   │               ├── key:
        │   │   │               │   @ SymbolNode (location: (3,4)-(3,8))
        │   │   │               │   ├── opening_loc: (3,4)-(3,5) = ":"
        │   │   │               │   ├── value_loc: (3,5)-(3,8) = "foo"
        │   │   │               │   ├── closing_loc: ∅
        │   │   │               │   └── unescaped: "foo"
        │   │   │               ├── value:
        │   │   │               │   @ IntegerNode (location: (3,12)-(3,13))
        │   │   │               │   └── flags: decimal
        │   │   │               └── operator_loc: (3,9)-(3,11) = "=>"
        │   │   └── flags: ∅
        │   ├── closing_loc: (3,19)-(3,20) = ")"
        │   ├── block:
        │   │   @ BlockArgumentNode (location: (3,15)-(3,19))
        │   │   ├── expression:
        │   │   │   @ CallNode (location: (3,16)-(3,19))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (3,16)-(3,19) = "baz"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: :baz
        │   │   └── operator_loc: (3,15)-(3,16) = "&"
        │   ├── flags: ∅
        │   └── name: :fun
        ├── @ CallNode (location: (5,0)-(5,21))
        │   ├── receiver:
        │   │   @ SelfNode (location: (5,0)-(5,4))
        │   ├── call_operator_loc: (5,4)-(5,5) = "."
        │   ├── message_loc: (5,5)-(5,8) = "[]="
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (5,9)-(5,21))
        │   │   ├── arguments: (length: 2)
        │   │   │   ├── @ CallNode (location: (5,9)-(5,12))
        │   │   │   │   ├── receiver: ∅
        │   │   │   │   ├── call_operator_loc: ∅
        │   │   │   │   ├── message_loc: (5,9)-(5,12) = "foo"
        │   │   │   │   ├── opening_loc: ∅
        │   │   │   │   ├── arguments: ∅
        │   │   │   │   ├── closing_loc: ∅
        │   │   │   │   ├── block: ∅
        │   │   │   │   ├── flags: variable_call
        │   │   │   │   └── name: :foo
        │   │   │   └── @ KeywordHashNode (location: (5,14)-(5,21))
        │   │   │       └── elements: (length: 1)
        │   │   │           └── @ AssocNode (location: (5,14)-(5,21))
        │   │   │               ├── key:
        │   │   │               │   @ SymbolNode (location: (5,14)-(5,16))
        │   │   │               │   ├── opening_loc: (5,14)-(5,15) = ":"
        │   │   │               │   ├── value_loc: (5,15)-(5,16) = "a"
        │   │   │               │   ├── closing_loc: ∅
        │   │   │               │   └── unescaped: "a"
        │   │   │               ├── value:
        │   │   │               │   @ IntegerNode (location: (5,20)-(5,21))
        │   │   │               │   └── flags: decimal
        │   │   │               └── operator_loc: (5,17)-(5,19) = "=>"
        │   │   └── flags: ∅
        │   ├── closing_loc: ∅
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: :[]=
        ├── @ CallNode (location: (7,0)-(7,15))
        │   ├── receiver:
        │   │   @ SelfNode (location: (7,0)-(7,4))
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (7,4)-(7,15) = "[:bar => 1]"
        │   ├── opening_loc: (7,4)-(7,5) = "["
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (7,5)-(7,14))
        │   │   ├── arguments: (length: 1)
        │   │   │   └── @ KeywordHashNode (location: (7,5)-(7,14))
        │   │   │       └── elements: (length: 1)
        │   │   │           └── @ AssocNode (location: (7,5)-(7,14))
        │   │   │               ├── key:
        │   │   │               │   @ SymbolNode (location: (7,5)-(7,9))
        │   │   │               │   ├── opening_loc: (7,5)-(7,6) = ":"
        │   │   │               │   ├── value_loc: (7,6)-(7,9) = "bar"
        │   │   │               │   ├── closing_loc: ∅
        │   │   │               │   └── unescaped: "bar"
        │   │   │               ├── value:
        │   │   │               │   @ IntegerNode (location: (7,13)-(7,14))
        │   │   │               │   └── flags: decimal
        │   │   │               └── operator_loc: (7,10)-(7,12) = "=>"
        │   │   └── flags: ∅
        │   ├── closing_loc: (7,14)-(7,15) = "]"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: :[]
        ├── @ SuperNode (location: (9,0)-(9,17))
        │   ├── keyword_loc: (9,0)-(9,5) = "super"
        │   ├── lparen_loc: (9,5)-(9,6) = "("
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (9,6)-(9,16))
        │   │   ├── arguments: (length: 1)
        │   │   │   └── @ KeywordHashNode (location: (9,6)-(9,16))
        │   │   │       └── elements: (length: 1)
        │   │   │           └── @ AssocNode (location: (9,6)-(9,16))
        │   │   │               ├── key:
        │   │   │               │   @ SymbolNode (location: (9,6)-(9,10))
        │   │   │               │   ├── opening_loc: (9,6)-(9,7) = ":"
        │   │   │               │   ├── value_loc: (9,7)-(9,10) = "foo"
        │   │   │               │   ├── closing_loc: ∅
        │   │   │               │   └── unescaped: "foo"
        │   │   │               ├── value:
        │   │   │               │   @ IntegerNode (location: (9,14)-(9,16))
        │   │   │               │   └── flags: decimal
        │   │   │               └── operator_loc: (9,11)-(9,13) = "=>"
        │   │   └── flags: ∅
        │   ├── rparen_loc: (9,16)-(9,17) = ")"
        │   └── block: ∅
        └── @ YieldNode (location: (11,0)-(11,17))
            ├── keyword_loc: (11,0)-(11,5) = "yield"
            ├── lparen_loc: (11,5)-(11,6) = "("
            ├── arguments:
            │   @ ArgumentsNode (location: (11,6)-(11,16))
            │   ├── arguments: (length: 1)
            │   │   └── @ KeywordHashNode (location: (11,6)-(11,16))
            │   │       └── elements: (length: 1)
            │   │           └── @ AssocNode (location: (11,6)-(11,16))
            │   │               ├── key:
            │   │               │   @ SymbolNode (location: (11,6)-(11,10))
            │   │               │   ├── opening_loc: (11,6)-(11,7) = ":"
            │   │               │   ├── value_loc: (11,7)-(11,10) = "foo"
            │   │               │   ├── closing_loc: ∅
            │   │               │   └── unescaped: "foo"
            │   │               ├── value:
            │   │               │   @ IntegerNode (location: (11,14)-(11,16))
            │   │               │   └── flags: decimal
            │   │               └── operator_loc: (11,11)-(11,13) = "=>"
            │   └── flags: ∅
            └── rparen_loc: (11,16)-(11,17) = ")"
