aboutsummaryrefslogtreecommitdiffstats
path: root/test/yarp/snapshots/unparser/corpus/semantic/dstr.txt
blob: 080b3ab847a7aeebf1c90bb0d5f559d0ff80eb03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
@ ProgramNode (location: (0...608))
├── locals: []
└── statements:
    @ StatementsNode (location: (0...608))
    └── body: (length: 33)
        ├── @ InterpolatedStringNode (location: (0...5))
        │   ├── opening_loc: (0...5) = "<<DOC"
        │   ├── parts: (length: 0)
        │   └── closing_loc: (6...10) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (11...18))
        │   ├── opening_loc: (11...18) = "<<'DOC'"
        │   ├── parts: (length: 0)
        │   └── closing_loc: (19...23) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (24...30))
        │   ├── opening_loc: (24...30) = "<<~DOC"
        │   ├── parts: (length: 0)
        │   └── closing_loc: (31...35) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (36...44))
        │   ├── opening_loc: (36...44) = "<<~'DOC'"
        │   ├── parts: (length: 0)
        │   └── closing_loc: (45...49) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (50...55))
        │   ├── opening_loc: (50...55) = "<<DOC"
        │   ├── parts: (length: 1)
        │   │   └── @ StringNode (location: (56...60))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (56...60) = "  a\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "  a\n"
        │   └── closing_loc: (60...64) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (65...72))
        │   ├── opening_loc: (65...72) = "<<'DOC'"
        │   ├── parts: (length: 1)
        │   │   └── @ StringNode (location: (73...77))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (73...77) = "  a\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "  a\n"
        │   └── closing_loc: (77...81) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (82...87))
        │   ├── opening_loc: (82...87) = "<<DOC"
        │   ├── parts: (length: 3)
        │   │   ├── @ StringNode (location: (88...94))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (88...94) = "  a\n  "
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "  a\n  "
        │   │   ├── @ EmbeddedStatementsNode (location: (94...97))
        │   │   │   ├── opening_loc: (94...96) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (96...97) = "}"
        │   │   └── @ StringNode (location: (97...98))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (97...98) = "\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "\n"
        │   └── closing_loc: (98...102) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (103...109))
        │   ├── opening_loc: (103...109) = "<<~DOC"
        │   ├── parts: (length: 3)
        │   │   ├── @ StringNode (location: (110...116))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (110...116) = "  a\n  "
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "a\n"
        │   │   ├── @ EmbeddedStatementsNode (location: (116...119))
        │   │   │   ├── opening_loc: (116...118) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (118...119) = "}"
        │   │   └── @ StringNode (location: (119...120))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (119...120) = "\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "\n"
        │   └── closing_loc: (120...124) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (125...131))
        │   ├── opening_loc: (125...131) = "<<~DOC"
        │   ├── parts: (length: 3)
        │   │   ├── @ StringNode (location: (132...138))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (132...138) = "  a\n  "
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "a\n"
        │   │   ├── @ EmbeddedStatementsNode (location: (138...141))
        │   │   │   ├── opening_loc: (138...140) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (140...141) = "}"
        │   │   └── @ StringNode (location: (141...146))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (141...146) = "\n  b\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "\nb\n"
        │   └── closing_loc: (146...150) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (151...157))
        │   ├── opening_loc: (151...157) = "<<~DOC"
        │   ├── parts: (length: 1)
        │   │   └── @ StringNode (location: (158...168))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (158...168) = "  a\n    b\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "a\n  b\n"
        │   └── closing_loc: (168...172) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (173...180))
        │   ├── opening_loc: (173...180) = "<<'DOC'"
        │   ├── parts: (length: 1)
        │   │   └── @ StringNode (location: (181...186))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (181...186) = "a\n\nb\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "a\n\nb\n"
        │   └── closing_loc: (186...190) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (191...198))
        │   ├── opening_loc: (191...198) = "<<'DOC'"
        │   ├── parts: (length: 1)
        │   │   └── @ StringNode (location: (199...206))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (199...206) = " a\n\n b\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: " a\n\n b\n"
        │   └── closing_loc: (206...210) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (211...218))
        │   ├── opening_loc: (211...218) = "<<'DOC'"
        │   ├── parts: (length: 1)
        │   │   └── @ StringNode (location: (219...225))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (219...225) = " a\\nb\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: " a\\nb\n"
        │   └── closing_loc: (225...229) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (230...235))
        │   ├── opening_loc: (230...235) = "<<DOC"
        │   ├── parts: (length: 4)
        │   │   ├── @ EmbeddedStatementsNode (location: (236...239))
        │   │   │   ├── opening_loc: (236...238) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (238...239) = "}"
        │   │   ├── @ StringNode (location: (239...242))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (239...242) = "a\n "
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "a\n "
        │   │   ├── @ EmbeddedStatementsNode (location: (242...245))
        │   │   │   ├── opening_loc: (242...244) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (244...245) = "}"
        │   │   └── @ StringNode (location: (245...247))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (245...247) = "a\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "a\n"
        │   └── closing_loc: (247...251) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (252...257))
        │   ├── opening_loc: (252...257) = "<<DOC"
        │   ├── parts: (length: 3)
        │   │   ├── @ StringNode (location: (258...260))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (258...260) = "  "
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "  "
        │   │   ├── @ EmbeddedStatementsNode (location: (260...263))
        │   │   │   ├── opening_loc: (260...262) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (262...263) = "}"
        │   │   └── @ StringNode (location: (263...271))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (263...271) = "\n  \\\#{}\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "\n  \#{}\n"
        │   └── closing_loc: (271...275) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (276...281))
        │   ├── opening_loc: (276...281) = "<<DOC"
        │   ├── parts: (length: 3)
        │   │   ├── @ StringNode (location: (282...284))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (282...284) = " a"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: " a"
        │   │   ├── @ EmbeddedStatementsNode (location: (284...287))
        │   │   │   ├── opening_loc: (284...286) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (286...287) = "}"
        │   │   └── @ StringNode (location: (287...292))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (287...292) = "b\n c\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "b\n c\n"
        │   └── closing_loc: (292...296) = "DOC\n"
        ├── @ InterpolatedStringNode (location: (297...303))
        │   ├── opening_loc: (297...303) = "<<~DOC"
        │   ├── parts: (length: 2)
        │   │   ├── @ EmbeddedStatementsNode (location: (306...309))
        │   │   │   ├── opening_loc: (306...308) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (308...309) = "}"
        │   │   └── @ StringNode (location: (309...310))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (309...310) = "\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "\n"
        │   └── closing_loc: (310...314) = "DOC\n"
        ├── @ IfNode (location: (315...349))
        │   ├── if_keyword_loc: (315...317) = "if"
        │   ├── predicate:
        │   │   @ TrueNode (location: (318...322))
        │   ├── statements:
        │   │   @ StatementsNode (location: (325...331))
        │   │   └── body: (length: 1)
        │   │       └── @ InterpolatedStringNode (location: (325...331))
        │   │           ├── opening_loc: (325...331) = "<<~DOC"
        │   │           ├── parts: (length: 2)
        │   │           │   ├── @ EmbeddedStatementsNode (location: (336...339))
        │   │           │   │   ├── opening_loc: (336...338) = "\#{"
        │   │           │   │   ├── statements: ∅
        │   │           │   │   └── closing_loc: (338...339) = "}"
        │   │           │   └── @ StringNode (location: (339...340))
        │   │           │       ├── opening_loc: ∅
        │   │           │       ├── content_loc: (339...340) = "\n"
        │   │           │       ├── closing_loc: ∅
        │   │           │       └── unescaped: "\n"
        │   │           └── closing_loc: (340...346) = "  DOC\n"
        │   ├── consequent: ∅
        │   └── end_keyword_loc: (346...349) = "end"
        ├── @ IfNode (location: (351...386))
        │   ├── if_keyword_loc: (351...353) = "if"
        │   ├── predicate:
        │   │   @ TrueNode (location: (354...358))
        │   ├── statements:
        │   │   @ StatementsNode (location: (361...367))
        │   │   └── body: (length: 1)
        │   │       └── @ InterpolatedStringNode (location: (361...367))
        │   │           ├── opening_loc: (361...367) = "<<~DOC"
        │   │           ├── parts: (length: 3)
        │   │           │   ├── @ StringNode (location: (368...373))
        │   │           │   │   ├── opening_loc: ∅
        │   │           │   │   ├── content_loc: (368...373) = "    b"
        │   │           │   │   ├── closing_loc: ∅
        │   │           │   │   └── unescaped: "b"
        │   │           │   ├── @ EmbeddedStatementsNode (location: (373...376))
        │   │           │   │   ├── opening_loc: (373...375) = "\#{"
        │   │           │   │   ├── statements: ∅
        │   │           │   │   └── closing_loc: (375...376) = "}"
        │   │           │   └── @ StringNode (location: (376...377))
        │   │           │       ├── opening_loc: ∅
        │   │           │       ├── content_loc: (376...377) = "\n"
        │   │           │       ├── closing_loc: ∅
        │   │           │       └── unescaped: "\n"
        │   │           └── closing_loc: (377...383) = "  DOC\n"
        │   ├── consequent: ∅
        │   └── end_keyword_loc: (383...386) = "end"
        ├── @ IfNode (location: (388...423))
        │   ├── if_keyword_loc: (388...390) = "if"
        │   ├── predicate:
        │   │   @ TrueNode (location: (391...395))
        │   ├── statements:
        │   │   @ StatementsNode (location: (398...404))
        │   │   └── body: (length: 1)
        │   │       └── @ InterpolatedStringNode (location: (398...404))
        │   │           ├── opening_loc: (398...404) = "<<~DOC"
        │   │           ├── parts: (length: 2)
        │   │           │   ├── @ EmbeddedStatementsNode (location: (409...412))
        │   │           │   │   ├── opening_loc: (409...411) = "\#{"
        │   │           │   │   ├── statements: ∅
        │   │           │   │   └── closing_loc: (411...412) = "}"
        │   │           │   └── @ StringNode (location: (412...414))
        │   │           │       ├── opening_loc: ∅
        │   │           │       ├── content_loc: (412...414) = "a\n"
        │   │           │       ├── closing_loc: ∅
        │   │           │       └── unescaped: "a\n"
        │   │           └── closing_loc: (414...420) = "  DOC\n"
        │   ├── consequent: ∅
        │   └── end_keyword_loc: (420...423) = "end"
        ├── @ IfNode (location: (425...464))
        │   ├── if_keyword_loc: (425...427) = "if"
        │   ├── predicate:
        │   │   @ TrueNode (location: (428...432))
        │   ├── statements:
        │   │   @ StatementsNode (location: (435...443))
        │   │   └── body: (length: 1)
        │   │       └── @ InterpolatedStringNode (location: (435...443))
        │   │           ├── opening_loc: (435...443) = "<<-'DOC'"
        │   │           ├── parts: (length: 1)
        │   │           │   └── @ StringNode (location: (444...455))
        │   │           │       ├── opening_loc: ∅
        │   │           │       ├── content_loc: (444...455) = "   a\n\n   b\n"
        │   │           │       ├── closing_loc: ∅
        │   │           │       └── unescaped: "   a\n\n   b\n"
        │   │           └── closing_loc: (455...461) = "  DOC\n"
        │   ├── consequent: ∅
        │   └── end_keyword_loc: (461...464) = "end"
        ├── @ InterpolatedStringNode (location: (466...472))
        │   ├── opening_loc: (466...467) = "\""
        │   ├── parts: (length: 2)
        │   │   ├── @ EmbeddedStatementsNode (location: (467...470))
        │   │   │   ├── opening_loc: (467...469) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (469...470) = "}"
        │   │   └── @ StringNode (location: (470...471))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (470...471) = "a"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "a"
        │   └── closing_loc: (471...472) = "\""
        ├── @ InterpolatedStringNode (location: (474...486))
        │   ├── opening_loc: (474...476) = "%("
        │   ├── parts: (length: 3)
        │   │   ├── @ StringNode (location: (476...479))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (476...479) = "\\n\""
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "\n\""
        │   │   ├── @ EmbeddedStatementsNode (location: (479...482))
        │   │   │   ├── opening_loc: (479...481) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (481...482) = "}"
        │   │   └── @ StringNode (location: (482...485))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (482...485) = "\"\\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "\"\n"
        │   └── closing_loc: (485...486) = ")"
        ├── @ InterpolatedStringNode (location: (488...502))
        │   ├── opening_loc: (488...491) = "%Q("
        │   ├── parts: (length: 3)
        │   │   ├── @ StringNode (location: (491...495))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (491...495) = "-\\n\""
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "-\n\""
        │   │   ├── @ EmbeddedStatementsNode (location: (495...498))
        │   │   │   ├── opening_loc: (495...497) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (497...498) = "}"
        │   │   └── @ StringNode (location: (498...501))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (498...501) = "\"\\n"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "\"\n"
        │   └── closing_loc: (501...502) = ")"
        ├── @ InterpolatedStringNode (location: (504...513))
        │   ├── opening_loc: (504...505) = "\""
        │   ├── parts: (length: 3)
        │   │   ├── @ StringNode (location: (505...507))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (505...507) = "a\n"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "a\n"
        │   │   ├── @ EmbeddedStatementsNode (location: (507...510))
        │   │   │   ├── opening_loc: (507...509) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (509...510) = "}"
        │   │   └── @ StringNode (location: (510...512))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (510...512) = "\nb"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "\nb"
        │   └── closing_loc: (512...513) = "\""
        ├── @ InterpolatedStringNode (location: (515...525))
        │   ├── opening_loc: (515...516) = "\""
        │   ├── parts: (length: 3)
        │   │   ├── @ StringNode (location: (516...519))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (516...519) = "a\\n"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "a\n"
        │   │   ├── @ EmbeddedStatementsNode (location: (519...522))
        │   │   │   ├── opening_loc: (519...521) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (521...522) = "}"
        │   │   └── @ StringNode (location: (522...524))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (522...524) = "\nb"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "\nb"
        │   └── closing_loc: (524...525) = "\""
        ├── @ InterpolatedStringNode (location: (527...537))
        │   ├── opening_loc: (527...528) = "\""
        │   ├── parts: (length: 3)
        │   │   ├── @ StringNode (location: (528...530))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (528...530) = "a\n"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "a\n"
        │   │   ├── @ EmbeddedStatementsNode (location: (530...533))
        │   │   │   ├── opening_loc: (530...532) = "\#{"
        │   │   │   ├── statements: ∅
        │   │   │   └── closing_loc: (532...533) = "}"
        │   │   └── @ StringNode (location: (533...536))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (533...536) = "\\nb"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "\nb"
        │   └── closing_loc: (536...537) = "\""
        ├── @ StringConcatNode (location: (539...550))
        │   ├── left:
        │   │   @ StringNode (location: (539...542))
        │   │   ├── opening_loc: (539...540) = "'"
        │   │   ├── content_loc: (540...541) = "a"
        │   │   ├── closing_loc: (541...542) = "'"
        │   │   └── unescaped: "a"
        │   └── right:
        │       @ InterpolatedStringNode (location: (545...550))
        │       ├── opening_loc: (545...546) = "\""
        │       ├── parts: (length: 1)
        │       │   └── @ EmbeddedStatementsNode (location: (546...549))
        │       │       ├── opening_loc: (546...548) = "\#{"
        │       │       ├── statements: ∅
        │       │       └── closing_loc: (548...549) = "}"
        │       └── closing_loc: (549...550) = "\""
        ├── @ StringConcatNode (location: (552...560))
        │   ├── left:
        │   │   @ StringConcatNode (location: (552...557))
        │   │   ├── left:
        │   │   │   @ StringNode (location: (552...554))
        │   │   │   ├── opening_loc: (552...553) = "\""
        │   │   │   ├── content_loc: (553...553) = ""
        │   │   │   ├── closing_loc: (553...554) = "\""
        │   │   │   └── unescaped: ""
        │   │   └── right:
        │   │       @ StringNode (location: (555...557))
        │   │       ├── opening_loc: (555...556) = "\""
        │   │       ├── content_loc: (556...556) = ""
        │   │       ├── closing_loc: (556...557) = "\""
        │   │       └── unescaped: ""
        │   └── right:
        │       @ StringNode (location: (558...560))
        │       ├── opening_loc: (558...559) = "\""
        │       ├── content_loc: (559...559) = ""
        │       ├── closing_loc: (559...560) = "\""
        │       └── unescaped: ""
        ├── @ StringConcatNode (location: (562...574))
        │   ├── left:
        │   │   @ InterpolatedStringNode (location: (562...570))
        │   │   ├── opening_loc: (562...563) = "\""
        │   │   ├── parts: (length: 2)
        │   │   │   ├── @ StringNode (location: (563...564))
        │   │   │   │   ├── opening_loc: ∅
        │   │   │   │   ├── content_loc: (563...564) = "a"
        │   │   │   │   ├── closing_loc: ∅
        │   │   │   │   └── unescaped: "a"
        │   │   │   └── @ EmbeddedStatementsNode (location: (564...569))
        │   │   │       ├── opening_loc: (564...566) = "\#{"
        │   │   │       ├── statements:
        │   │   │       │   @ StatementsNode (location: (566...568))
        │   │   │       │   └── body: (length: 1)
        │   │   │       │       └── @ InstanceVariableReadNode (location: (566...568))
        │   │   │       │           └── name: :@a
        │   │   │       └── closing_loc: (568...569) = "}"
        │   │   └── closing_loc: (569...570) = "\""
        │   └── right:
        │       @ StringNode (location: (571...574))
        │       ├── opening_loc: (571...572) = "\""
        │       ├── content_loc: (572...573) = "b"
        │       ├── closing_loc: (573...574) = "\""
        │       └── unescaped: "b"
        ├── @ StringConcatNode (location: (575...585))
        │   ├── left:
        │   │   @ InterpolatedStringNode (location: (575...581))
        │   │   ├── opening_loc: (575...576) = "\""
        │   │   ├── parts: (length: 2)
        │   │   │   ├── @ StringNode (location: (576...577))
        │   │   │   │   ├── opening_loc: ∅
        │   │   │   │   ├── content_loc: (576...577) = "a"
        │   │   │   │   ├── closing_loc: ∅
        │   │   │   │   └── unescaped: "a"
        │   │   │   └── @ EmbeddedVariableNode (location: (577...580))
        │   │   │       ├── operator_loc: (577...578) = "#"
        │   │   │       └── variable:
        │   │   │           @ InstanceVariableReadNode (location: (578...580))
        │   │   │           └── name: :@a
        │   │   └── closing_loc: (580...581) = "\""
        │   └── right:
        │       @ StringNode (location: (582...585))
        │       ├── opening_loc: (582...583) = "\""
        │       ├── content_loc: (583...584) = "b"
        │       ├── closing_loc: (584...585) = "\""
        │       └── unescaped: "b"
        ├── @ StringConcatNode (location: (586...596))
        │   ├── left:
        │   │   @ InterpolatedStringNode (location: (586...592))
        │   │   ├── opening_loc: (586...587) = "\""
        │   │   ├── parts: (length: 2)
        │   │   │   ├── @ StringNode (location: (587...588))
        │   │   │   │   ├── opening_loc: ∅
        │   │   │   │   ├── content_loc: (587...588) = "a"
        │   │   │   │   ├── closing_loc: ∅
        │   │   │   │   └── unescaped: "a"
        │   │   │   └── @ EmbeddedVariableNode (location: (588...591))
        │   │   │       ├── operator_loc: (588...589) = "#"
        │   │   │       └── variable:
        │   │   │           @ GlobalVariableReadNode (location: (589...591))
        │   │   │           └── name: :$a
        │   │   └── closing_loc: (591...592) = "\""
        │   └── right:
        │       @ StringNode (location: (593...596))
        │       ├── opening_loc: (593...594) = "\""
        │       ├── content_loc: (594...595) = "b"
        │       ├── closing_loc: (595...596) = "\""
        │       └── unescaped: "b"
        └── @ StringConcatNode (location: (597...608))
            ├── left:
            │   @ InterpolatedStringNode (location: (597...604))
            │   ├── opening_loc: (597...598) = "\""
            │   ├── parts: (length: 2)
            │   │   ├── @ StringNode (location: (598...599))
            │   │   │   ├── opening_loc: ∅
            │   │   │   ├── content_loc: (598...599) = "a"
            │   │   │   ├── closing_loc: ∅
            │   │   │   └── unescaped: "a"
            │   │   └── @ EmbeddedVariableNode (location: (599...603))
            │   │       ├── operator_loc: (599...600) = "#"
            │   │       └── variable:
            │   │           @ ClassVariableReadNode (location: (600...603))
            │   │           └── name: :@@a
            │   └── closing_loc: (603...604) = "\""
            └── right:
                @ StringNode (location: (605...608))
                ├── opening_loc: (605...606) = "\""
                ├── content_loc: (606...607) = "b"
                ├── closing_loc: (607...608) = "\""
                └── unescaped: "b"