@ ProgramNode (location: (4,0)-(9,3)) ├── locals: [] └── statements: @ StatementsNode (location: (4,0)-(9,3)) └── body: (length: 1) └── @ ClassNode (location: (4,0)-(9,3)) ├── locals: [] ├── class_keyword_loc: (4,0)-(4,5) = "class" ├── constant_path: │ @ ConstantReadNode (location: (4,6)-(4,7)) │ └── name: :X ├── inheritance_operator_loc: ∅ ├── superclass: ∅ ├── body: │ @ StatementsNode (location: (6,2)-(8,5)) │ └── body: (length: 1) │ └── @ DefNode (location: (6,2)-(8,5)) │ ├── name: :blah │ ├── name_loc: (6,6)-(6,10) = "blah" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (6,2)-(6,5) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (8,2)-(8,5) = "end" ├── end_keyword_loc: (9,0)-(9,3) = "end" └── name: :X