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