@ ProgramNode (location: (0...92)) ├── locals: [] └── statements: @ StatementsNode (location: (0...92)) └── body: (length: 5) ├── @ LambdaNode (location: (0...14)) │ ├── locals: [:foo] │ ├── operator_loc: (0...2) = "->" │ ├── opening_loc: (12...13) = "{" │ ├── closing_loc: (13...14) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (2...11)) │ │ ├── parameters: │ │ │ @ ParametersNode (location: (6...9)) │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (6...9)) │ │ │ │ └── name: :foo │ │ │ ├── optionals: (length: 0) │ │ │ ├── rest: ∅ │ │ │ ├── posts: (length: 0) │ │ │ ├── keywords: (length: 0) │ │ │ ├── keyword_rest: ∅ │ │ │ └── block: ∅ │ │ ├── locals: (length: 0) │ │ ├── opening_loc: (2...3) = "(" │ │ └── closing_loc: (10...11) = ")" │ └── body: ∅ ├── @ LambdaNode (location: (16...34)) │ ├── locals: [:x] │ ├── operator_loc: (16...18) = "->" │ ├── opening_loc: (31...32) = "{" │ ├── closing_loc: (33...34) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (18...30)) │ │ ├── parameters: │ │ │ @ ParametersNode (location: (19...29)) │ │ │ ├── requireds: (length: 0) │ │ │ ├── optionals: (length: 0) │ │ │ ├── rest: ∅ │ │ │ ├── posts: (length: 0) │ │ │ ├── keywords: (length: 1) │ │ │ │ └── @ KeywordParameterNode (location: (19...29)) │ │ │ │ ├── name: :x │ │ │ │ ├── name_loc: (19...21) = "x:" │ │ │ │ └── value: │ │ │ │ @ InterpolatedStringNode (location: (22...29)) │ │ │ │ ├── opening_loc: (22...23) = "\"" │ │ │ │ ├── parts: (length: 2) │ │ │ │ │ ├── @ StringNode (location: (23...24)) │ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ ├── content_loc: (23...24) = "b" │ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ └── unescaped: "b" │ │ │ │ │ └── @ EmbeddedStatementsNode (location: (24...28)) │ │ │ │ │ ├── opening_loc: (24...26) = "\#{" │ │ │ │ │ ├── statements: │ │ │ │ │ │ @ StatementsNode (location: (26...27)) │ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ │ └── @ CallNode (location: (26...27)) │ │ │ │ │ │ ├── receiver: ∅ │ │ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ │ │ ├── message_loc: (26...27) = "a" │ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ ├── arguments: ∅ │ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ ├── block: ∅ │ │ │ │ │ │ ├── flags: variable_call │ │ │ │ │ │ └── name: "a" │ │ │ │ │ └── closing_loc: (27...28) = "}" │ │ │ │ └── closing_loc: (28...29) = "\"" │ │ │ ├── keyword_rest: ∅ │ │ │ └── block: ∅ │ │ ├── locals: (length: 0) │ │ ├── opening_loc: (18...19) = "(" │ │ └── closing_loc: (29...30) = ")" │ └── body: ∅ ├── @ LambdaNode (location: (36...51)) │ ├── locals: [:a] │ ├── operator_loc: (36...38) = "->" │ ├── opening_loc: (49...50) = "{" │ ├── closing_loc: (50...51) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (38...48)) │ │ ├── parameters: │ │ │ @ ParametersNode (location: (39...47)) │ │ │ ├── requireds: (length: 0) │ │ │ ├── optionals: (length: 0) │ │ │ ├── rest: ∅ │ │ │ ├── posts: (length: 0) │ │ │ ├── keywords: (length: 1) │ │ │ │ └── @ KeywordParameterNode (location: (39...47)) │ │ │ │ ├── name: :a │ │ │ │ ├── name_loc: (39...41) = "a:" │ │ │ │ └── value: │ │ │ │ @ CallNode (location: (42...47)) │ │ │ │ ├── receiver: │ │ │ │ │ @ CallNode (location: (42...43)) │ │ │ │ │ ├── receiver: ∅ │ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ │ ├── message_loc: (42...43) = "b" │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── arguments: ∅ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── block: ∅ │ │ │ │ │ ├── flags: variable_call │ │ │ │ │ └── name: "b" │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── message_loc: (44...45) = "*" │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── arguments: │ │ │ │ │ @ ArgumentsNode (location: (46...47)) │ │ │ │ │ └── arguments: (length: 1) │ │ │ │ │ └── @ IntegerNode (location: (46...47)) │ │ │ │ │ └── flags: decimal │ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── block: ∅ │ │ │ │ ├── flags: │ │ │ │ └── name: "*" │ │ │ ├── keyword_rest: ∅ │ │ │ └── block: ∅ │ │ ├── locals: (length: 0) │ │ ├── opening_loc: (38...39) = "(" │ │ └── closing_loc: (47...48) = ")" │ └── body: ∅ ├── @ LambdaNode (location: (53...72)) │ ├── locals: [:foo] │ ├── operator_loc: (53...55) = "->" │ ├── opening_loc: (66...68) = "do" │ ├── closing_loc: (69...72) = "end" │ ├── parameters: │ │ @ BlockParametersNode (location: (56...65)) │ │ ├── parameters: │ │ │ @ ParametersNode (location: (56...65)) │ │ │ ├── requireds: (length: 0) │ │ │ ├── optionals: (length: 1) │ │ │ │ └── @ OptionalParameterNode (location: (56...65)) │ │ │ │ ├── name: :foo │ │ │ │ ├── name_loc: (56...59) = "foo" │ │ │ │ ├── operator_loc: (60...61) = "=" │ │ │ │ └── value: │ │ │ │ @ CallNode (location: (62...65)) │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── message_loc: (62...65) = "bar" │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── arguments: ∅ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── block: ∅ │ │ │ │ ├── flags: variable_call │ │ │ │ └── name: "bar" │ │ │ ├── rest: ∅ │ │ │ ├── posts: (length: 0) │ │ │ ├── keywords: (length: 0) │ │ │ ├── keyword_rest: ∅ │ │ │ └── block: ∅ │ │ ├── locals: (length: 0) │ │ ├── opening_loc: ∅ │ │ └── closing_loc: ∅ │ └── body: ∅ └── @ LambdaNode (location: (74...92)) ├── locals: [:foo] ├── operator_loc: (74...76) = "->" ├── opening_loc: (86...88) = "do" ├── closing_loc: (89...92) = "end" ├── parameters: │ @ BlockParametersNode (location: (77...85)) │ ├── parameters: │ │ @ ParametersNode (location: (77...85)) │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) │ │ ├── keywords: (length: 1) │ │ │ └── @ KeywordParameterNode (location: (77...85)) │ │ │ ├── name: :foo │ │ │ ├── name_loc: (77...81) = "foo:" │ │ │ └── value: │ │ │ @ CallNode (location: (82...85)) │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── message_loc: (82...85) = "bar" │ │ │ ├── opening_loc: ∅ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ ├── block: ∅ │ │ │ ├── flags: variable_call │ │ │ └── name: "bar" │ │ ├── keyword_rest: ∅ │ │ └── block: ∅ │ ├── locals: (length: 0) │ ├── opening_loc: ∅ │ └── closing_loc: ∅ └── body: ∅