@ ProgramNode (location: (0...213))
├── locals: []
└── statements:
    @ StatementsNode (location: (0...213))
    └── body: (length: 10)
        ├── @ ClassNode (location: (0...11))
        │   ├── locals: []
        │   ├── class_keyword_loc: (0...5) = "class"
        │   ├── constant_path:
        │   │   @ ConstantReadNode (location: (6...7))
        │   │   └── name: :A
        │   ├── inheritance_operator_loc: ∅
        │   ├── superclass: ∅
        │   ├── body: ∅
        │   ├── end_keyword_loc: (8...11) = "end"
        │   └── name: :A
        ├── @ SingletonClassNode (location: (13...27))
        │   ├── locals: []
        │   ├── class_keyword_loc: (13...18) = "class"
        │   ├── operator_loc: (19...21) = "<<"
        │   ├── expression:
        │   │   @ CallNode (location: (22...23))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (22...23) = "a"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "a"
        │   ├── body: ∅
        │   └── end_keyword_loc: (24...27) = "end"
        ├── @ SingletonClassNode (location: (29...47))
        │   ├── locals: []
        │   ├── class_keyword_loc: (29...34) = "class"
        │   ├── operator_loc: (35...37) = "<<"
        │   ├── expression:
        │   │   @ CallNode (location: (38...39))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (38...39) = "a"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "a"
        │   ├── body:
        │   │   @ StatementsNode (location: (42...43))
        │   │   └── body: (length: 1)
        │   │       └── @ CallNode (location: (42...43))
        │   │           ├── receiver: ∅
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (42...43) = "b"
        │   │           ├── opening_loc: ∅
        │   │           ├── arguments: ∅
        │   │           ├── closing_loc: ∅
        │   │           ├── block: ∅
        │   │           ├── flags: variable_call
        │   │           └── name: "b"
        │   └── end_keyword_loc: (44...47) = "end"
        ├── @ ClassNode (location: (49...63))
        │   ├── locals: []
        │   ├── class_keyword_loc: (49...54) = "class"
        │   ├── constant_path:
        │   │   @ ConstantPathNode (location: (55...59))
        │   │   ├── parent:
        │   │   │   @ ConstantReadNode (location: (55...56))
        │   │   │   └── name: :A
        │   │   ├── child:
        │   │   │   @ ConstantReadNode (location: (58...59))
        │   │   │   └── name: :B
        │   │   └── delimiter_loc: (56...58) = "::"
        │   ├── inheritance_operator_loc: ∅
        │   ├── superclass: ∅
        │   ├── body: ∅
        │   ├── end_keyword_loc: (60...63) = "end"
        │   └── name: :B
        ├── @ ClassNode (location: (65...82))
        │   ├── locals: []
        │   ├── class_keyword_loc: (65...70) = "class"
        │   ├── constant_path:
        │   │   @ ConstantPathNode (location: (71...78))
        │   │   ├── parent:
        │   │   │   @ ConstantPathNode (location: (71...75))
        │   │   │   ├── parent:
        │   │   │   │   @ ConstantReadNode (location: (71...72))
        │   │   │   │   └── name: :A
        │   │   │   ├── child:
        │   │   │   │   @ ConstantReadNode (location: (74...75))
        │   │   │   │   └── name: :B
        │   │   │   └── delimiter_loc: (72...74) = "::"
        │   │   ├── child:
        │   │   │   @ ConstantReadNode (location: (77...78))
        │   │   │   └── name: :C
        │   │   └── delimiter_loc: (75...77) = "::"
        │   ├── inheritance_operator_loc: ∅
        │   ├── superclass: ∅
        │   ├── body: ∅
        │   ├── end_keyword_loc: (79...82) = "end"
        │   └── name: :C
        ├── @ ClassNode (location: (84...99))
        │   ├── locals: []
        │   ├── class_keyword_loc: (84...89) = "class"
        │   ├── constant_path:
        │   │   @ ConstantReadNode (location: (90...91))
        │   │   └── name: :A
        │   ├── inheritance_operator_loc: (92...93) = "<"
        │   ├── superclass:
        │   │   @ ConstantReadNode (location: (94...95))
        │   │   └── name: :B
        │   ├── body: ∅
        │   ├── end_keyword_loc: (96...99) = "end"
        │   └── name: :A
        ├── @ ClassNode (location: (101...119))
        │   ├── locals: []
        │   ├── class_keyword_loc: (101...106) = "class"
        │   ├── constant_path:
        │   │   @ ConstantReadNode (location: (107...108))
        │   │   └── name: :A
        │   ├── inheritance_operator_loc: (109...110) = "<"
        │   ├── superclass:
        │   │   @ ConstantPathNode (location: (111...115))
        │   │   ├── parent:
        │   │   │   @ ConstantReadNode (location: (111...112))
        │   │   │   └── name: :B
        │   │   ├── child:
        │   │   │   @ ConstantReadNode (location: (114...115))
        │   │   │   └── name: :C
        │   │   └── delimiter_loc: (112...114) = "::"
        │   ├── body: ∅
        │   ├── end_keyword_loc: (116...119) = "end"
        │   └── name: :A
        ├── @ ClassNode (location: (121...142))
        │   ├── locals: []
        │   ├── class_keyword_loc: (121...126) = "class"
        │   ├── constant_path:
        │   │   @ ConstantPathNode (location: (127...131))
        │   │   ├── parent:
        │   │   │   @ ConstantReadNode (location: (127...128))
        │   │   │   └── name: :A
        │   │   ├── child:
        │   │   │   @ ConstantReadNode (location: (130...131))
        │   │   │   └── name: :B
        │   │   └── delimiter_loc: (128...130) = "::"
        │   ├── inheritance_operator_loc: (132...133) = "<"
        │   ├── superclass:
        │   │   @ ConstantPathNode (location: (134...138))
        │   │   ├── parent:
        │   │   │   @ ConstantReadNode (location: (134...135))
        │   │   │   └── name: :C
        │   │   ├── child:
        │   │   │   @ ConstantReadNode (location: (137...138))
        │   │   │   └── name: :D
        │   │   └── delimiter_loc: (135...137) = "::"
        │   ├── body: ∅
        │   ├── end_keyword_loc: (139...142) = "end"
        │   └── name: :B
        ├── @ ClassNode (location: (144...198))
        │   ├── locals: []
        │   ├── class_keyword_loc: (144...149) = "class"
        │   ├── constant_path:
        │   │   @ ConstantReadNode (location: (150...151))
        │   │   └── name: :A
        │   ├── inheritance_operator_loc: ∅
        │   ├── superclass: ∅
        │   ├── body:
        │   │   @ StatementsNode (location: (154...194))
        │   │   └── body: (length: 2)
        │   │       ├── @ CallNode (location: (154...168))
        │   │       │   ├── receiver: ∅
        │   │       │   ├── call_operator_loc: ∅
        │   │       │   ├── message_loc: (154...161) = "include"
        │   │       │   ├── opening_loc: (161...162) = "("
        │   │       │   ├── arguments:
        │   │       │   │   @ ArgumentsNode (location: (162...167))
        │   │       │   │   └── arguments: (length: 1)
        │   │       │   │       └── @ CallNode (location: (162...167))
        │   │       │   │           ├── receiver:
        │   │       │   │           │   @ ConstantReadNode (location: (162...163))
        │   │       │   │           │   └── name: :B
        │   │       │   │           ├── call_operator_loc: (163...164) = "."
        │   │       │   │           ├── message_loc: (164...167) = "new"
        │   │       │   │           ├── opening_loc: ∅
        │   │       │   │           ├── arguments: ∅
        │   │       │   │           ├── closing_loc: ∅
        │   │       │   │           ├── block: ∅
        │   │       │   │           ├── flags: ∅
        │   │       │   │           └── name: "new"
        │   │       │   ├── closing_loc: (167...168) = ")"
        │   │       │   ├── block: ∅
        │   │       │   ├── flags: ∅
        │   │       │   └── name: "include"
        │   │       └── @ DefNode (location: (172...194))
        │   │           ├── name: :foo
        │   │           ├── name_loc: (176...179) = "foo"
        │   │           ├── receiver: ∅
        │   │           ├── parameters: ∅
        │   │           ├── body:
        │   │           │   @ StatementsNode (location: (184...188))
        │   │           │   └── body: (length: 1)
        │   │           │       └── @ SymbolNode (location: (184...188))
        │   │           │           ├── opening_loc: (184...185) = ":"
        │   │           │           ├── value_loc: (185...188) = "bar"
        │   │           │           ├── closing_loc: ∅
        │   │           │           └── unescaped: "bar"
        │   │           ├── locals: []
        │   │           ├── def_keyword_loc: (172...175) = "def"
        │   │           ├── operator_loc: ∅
        │   │           ├── lparen_loc: ∅
        │   │           ├── rparen_loc: ∅
        │   │           ├── equal_loc: ∅
        │   │           └── end_keyword_loc: (191...194) = "end"
        │   ├── end_keyword_loc: (195...198) = "end"
        │   └── name: :A
        └── @ ClassNode (location: (200...213))
            ├── locals: []
            ├── class_keyword_loc: (200...205) = "class"
            ├── constant_path:
            │   @ ConstantPathNode (location: (206...209))
            │   ├── parent: ∅
            │   ├── child:
            │   │   @ ConstantReadNode (location: (208...209))
            │   │   └── name: :A
            │   └── delimiter_loc: (206...208) = "::"
            ├── inheritance_operator_loc: ∅
            ├── superclass: ∅
            ├── body: ∅
            ├── end_keyword_loc: (210...213) = "end"
            └── name: :A
