@ ProgramNode (location: (1,0)-(8,1)) ├── locals: [:o] └── statements: @ StatementsNode (location: (1,0)-(8,1)) └── body: (length: 2) ├── @ DefNode (location: (1,0)-(3,3)) │ ├── name: :a │ ├── name_loc: (1,4)-(1,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,6)-(1,8)) │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) │ │ ├── keywords: (length: 1) │ │ │ └── @ RequiredKeywordParameterNode (location: (1,6)-(1,8)) │ │ │ ├── flags: ∅ │ │ │ ├── name: :b │ │ │ └── name_loc: (1,6)-(1,8) = "b:" │ │ ├── keyword_rest: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (2,0)-(2,6)) │ │ └── body: (length: 1) │ │ └── @ ReturnNode (location: (2,0)-(2,6)) │ │ ├── flags: redundant │ │ ├── keyword_loc: (2,0)-(2,6) = "return" │ │ └── arguments: ∅ │ ├── locals: [:b] │ ├── def_keyword_loc: (1,0)-(1,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" └── @ LocalVariableWriteNode (location: (5,0)-(8,1)) ├── name: :o ├── depth: 0 ├── name_loc: (5,0)-(5,1) = "o" ├── value: │ @ HashNode (location: (5,4)-(8,1)) │ ├── opening_loc: (5,4)-(5,5) = "{" │ ├── elements: (length: 1) │ │ └── @ AssocNode (location: (6,0)-(7,1)) │ │ ├── key: │ │ │ @ SymbolNode (location: (6,0)-(6,2)) │ │ │ ├── flags: forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (6,0)-(6,1) = "a" │ │ │ ├── closing_loc: (6,1)-(6,2) = ":" │ │ │ └── unescaped: "a" │ │ ├── value: │ │ │ @ IntegerNode (location: (7,0)-(7,1)) │ │ │ ├── flags: decimal │ │ │ └── value: 1 │ │ └── operator_loc: ∅ │ └── closing_loc: (8,0)-(8,1) = "}" └── operator_loc: (5,2)-(5,3) = "="