[ruby/prism] Freeze internal parts, again

https://github.com/ruby/prism/commit/50372fee5c
This commit is contained in:
Kevin Newton 2024-03-25 15:32:54 -04:00
parent 19752cf4aa
commit 240fb3957b
82 changed files with 584 additions and 356 deletions

View File

@ -55,6 +55,7 @@ module Prism
def to_interpolated def to_interpolated
InterpolatedStringNode.new( InterpolatedStringNode.new(
source, source,
frozen? ? InterpolatedStringNodeFlags::FROZEN : 0,
opening_loc, opening_loc,
[copy(opening_loc: nil, closing_loc: nil, location: content_loc)], [copy(opening_loc: nil, closing_loc: nil, location: content_loc)],
closing_loc, closing_loc,

View File

@ -626,6 +626,13 @@ flags:
- name: HEXADECIMAL - name: HEXADECIMAL
comment: "0x prefix" comment: "0x prefix"
comment: Flags for integer nodes that correspond to the base of the integer. comment: Flags for integer nodes that correspond to the base of the integer.
- name: InterpolatedStringNodeFlags
values:
- name: FROZEN
comment: "frozen by virtue of a `frozen_string_literal: true` comment or `--enable-frozen-string-literal`"
- name: MUTABLE
comment: "mutable by virtue of a `frozen_string_literal: false` comment or `--disable-frozen-string-literal`"
comment: Flags for interpolated string nodes that indicated mutability if they are also marked as literals.
- name: KeywordHashNodeFlags - name: KeywordHashNodeFlags
values: values:
- name: SYMBOL_KEYS - name: SYMBOL_KEYS
@ -2260,6 +2267,9 @@ nodes:
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
- name: InterpolatedStringNode - name: InterpolatedStringNode
fields: fields:
- name: flags
type: flags
kind: InterpolatedStringNodeFlags
- name: opening_loc - name: opening_loc
type: location? type: location?
- name: parts - name: parts

View File

@ -4281,6 +4281,7 @@ pm_interpolated_regular_expression_node_create(pm_parser_t *parser, const pm_tok
*node = (pm_interpolated_regular_expression_node_t) { *node = (pm_interpolated_regular_expression_node_t) {
{ {
.type = PM_INTERPOLATED_REGULAR_EXPRESSION_NODE, .type = PM_INTERPOLATED_REGULAR_EXPRESSION_NODE,
.flags = PM_NODE_FLAG_STATIC_LITERAL,
.location = { .location = {
.start = opening->start, .start = opening->start,
.end = NULL, .end = NULL,
@ -4302,6 +4303,15 @@ pm_interpolated_regular_expression_node_append(pm_interpolated_regular_expressio
if (node->base.location.end < part->location.end) { if (node->base.location.end < part->location.end) {
node->base.location.end = part->location.end; node->base.location.end = part->location.end;
} }
if (PM_NODE_TYPE_P(part, PM_STRING_NODE)) {
pm_node_flag_set(part, PM_NODE_FLAG_STATIC_LITERAL | PM_STRING_FLAGS_FROZEN);
}
if (!PM_NODE_FLAG_P(part, PM_NODE_FLAG_STATIC_LITERAL)) {
pm_node_flag_unset((pm_node_t *) node, PM_NODE_FLAG_STATIC_LITERAL);
}
pm_node_list_append(&node->parts, part); pm_node_list_append(&node->parts, part);
} }
@ -4312,6 +4322,38 @@ pm_interpolated_regular_expression_node_closing_set(pm_parser_t *parser, pm_inte
pm_node_flag_set((pm_node_t *)node, pm_regular_expression_flags_create(parser, closing)); pm_node_flag_set((pm_node_t *)node, pm_regular_expression_flags_create(parser, closing));
} }
/**
* Append a part to an InterpolatedStringNode node.
*/
static inline void
pm_interpolated_string_node_append(pm_parser_t *parser, pm_interpolated_string_node_t *node, pm_node_t *part) {
if (node->parts.size == 0 && node->opening_loc.start == NULL) {
node->base.location.start = part->location.start;
}
if (PM_NODE_TYPE_P(part, PM_STRING_NODE)) {
pm_node_flag_set(part, PM_NODE_FLAG_STATIC_LITERAL | PM_STRING_FLAGS_FROZEN);
}
if (!PM_NODE_FLAG_P(part, PM_NODE_FLAG_STATIC_LITERAL)) {
pm_node_flag_unset((pm_node_t *) node, PM_NODE_FLAG_STATIC_LITERAL | PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN | PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE);
}
pm_node_list_append(&node->parts, part);
node->base.location.end = MAX(node->base.location.end, part->location.end);
if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) {
switch (parser->frozen_string_literal) {
case PM_OPTIONS_FROZEN_STRING_LITERAL_DISABLED:
pm_node_flag_set((pm_node_t *) node, PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN);
break;
case PM_OPTIONS_FROZEN_STRING_LITERAL_ENABLED:
pm_node_flag_set((pm_node_t *) node, PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE);
break;
}
}
}
/** /**
* Allocate and initialize a new InterpolatedStringNode node. * Allocate and initialize a new InterpolatedStringNode node.
*/ */
@ -4322,6 +4364,7 @@ pm_interpolated_string_node_create(pm_parser_t *parser, const pm_token_t *openin
*node = (pm_interpolated_string_node_t) { *node = (pm_interpolated_string_node_t) {
{ {
.type = PM_INTERPOLATED_STRING_NODE, .type = PM_INTERPOLATED_STRING_NODE,
.flags = PM_NODE_FLAG_STATIC_LITERAL,
.location = { .location = {
.start = opening->start, .start = opening->start,
.end = closing->end, .end = closing->end,
@ -4333,25 +4376,14 @@ pm_interpolated_string_node_create(pm_parser_t *parser, const pm_token_t *openin
}; };
if (parts != NULL) { if (parts != NULL) {
node->parts = *parts; for (size_t index = 0; index < parts->size; index++) {
pm_interpolated_string_node_append(parser, node, parts->nodes[index]);
}
} }
return node; return node;
} }
/**
* Append a part to an InterpolatedStringNode node.
*/
static inline void
pm_interpolated_string_node_append(pm_interpolated_string_node_t *node, pm_node_t *part) {
if (node->parts.size == 0 && node->opening_loc.start == NULL) {
node->base.location.start = part->location.start;
}
pm_node_list_append(&node->parts, part);
node->base.location.end = part->location.end;
}
/** /**
* Set the closing token of the given InterpolatedStringNode node. * Set the closing token of the given InterpolatedStringNode node.
*/ */
@ -4361,6 +4393,24 @@ pm_interpolated_string_node_closing_set(pm_interpolated_string_node_t *node, con
node->base.location.end = closing->end; node->base.location.end = closing->end;
} }
static void
pm_interpolated_symbol_node_append(pm_interpolated_symbol_node_t *node, pm_node_t *part) {
if (node->parts.size == 0 && node->opening_loc.start == NULL) {
node->base.location.start = part->location.start;
}
if (PM_NODE_TYPE_P(part, PM_STRING_NODE)) {
pm_node_flag_set(part, PM_NODE_FLAG_STATIC_LITERAL | PM_STRING_FLAGS_FROZEN);
}
if (!PM_NODE_FLAG_P(part, PM_NODE_FLAG_STATIC_LITERAL)) {
pm_node_flag_unset((pm_node_t *) node, PM_NODE_FLAG_STATIC_LITERAL);
}
pm_node_list_append(&node->parts, part);
node->base.location.end = MAX(node->base.location.end, part->location.end);
}
/** /**
* Allocate and initialize a new InterpolatedSymbolNode node. * Allocate and initialize a new InterpolatedSymbolNode node.
*/ */
@ -4371,6 +4421,7 @@ pm_interpolated_symbol_node_create(pm_parser_t *parser, const pm_token_t *openin
*node = (pm_interpolated_symbol_node_t) { *node = (pm_interpolated_symbol_node_t) {
{ {
.type = PM_INTERPOLATED_SYMBOL_NODE, .type = PM_INTERPOLATED_SYMBOL_NODE,
.flags = PM_NODE_FLAG_STATIC_LITERAL,
.location = { .location = {
.start = opening->start, .start = opening->start,
.end = closing->end, .end = closing->end,
@ -4382,22 +4433,14 @@ pm_interpolated_symbol_node_create(pm_parser_t *parser, const pm_token_t *openin
}; };
if (parts != NULL) { if (parts != NULL) {
node->parts = *parts; for (size_t index = 0; index < parts->size; index++) {
pm_interpolated_symbol_node_append(node, parts->nodes[index]);
}
} }
return node; return node;
} }
static inline void
pm_interpolated_symbol_node_append(pm_interpolated_symbol_node_t *node, pm_node_t *part) {
if (node->parts.size == 0 && node->opening_loc.start == NULL) {
node->base.location.start = part->location.start;
}
pm_node_list_append(&node->parts, part);
node->base.location.end = part->location.end;
}
/** /**
* Allocate a new InterpolatedXStringNode node. * Allocate a new InterpolatedXStringNode node.
*/ */
@ -4423,6 +4466,10 @@ pm_interpolated_xstring_node_create(pm_parser_t *parser, const pm_token_t *openi
static inline void static inline void
pm_interpolated_xstring_node_append(pm_interpolated_x_string_node_t *node, pm_node_t *part) { pm_interpolated_xstring_node_append(pm_interpolated_x_string_node_t *node, pm_node_t *part) {
if (PM_NODE_TYPE_P(part, PM_STRING_NODE)) {
pm_node_flag_set(part, PM_NODE_FLAG_STATIC_LITERAL | PM_STRING_FLAGS_FROZEN);
}
pm_node_list_append(&node->parts, part); pm_node_list_append(&node->parts, part);
node->base.location.end = part->location.end; node->base.location.end = part->location.end;
} }
@ -15427,11 +15474,11 @@ parse_strings(pm_parser_t *parser, pm_node_t *current) {
pm_token_t bounds = not_provided(parser); pm_token_t bounds = not_provided(parser);
pm_interpolated_string_node_t *container = pm_interpolated_string_node_create(parser, &bounds, NULL, &bounds); pm_interpolated_string_node_t *container = pm_interpolated_string_node_create(parser, &bounds, NULL, &bounds);
pm_interpolated_string_node_append(container, current); pm_interpolated_string_node_append(parser, container, current);
current = (pm_node_t *) container; current = (pm_node_t *) container;
} }
pm_interpolated_string_node_append((pm_interpolated_string_node_t *) current, node); pm_interpolated_string_node_append(parser, (pm_interpolated_string_node_t *) current, node);
} }
} }
@ -17365,15 +17412,15 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
// If we hit string content and the current node is // If we hit string content and the current node is
// an interpolated string, then we need to append // an interpolated string, then we need to append
// the string content to the list of child nodes. // the string content to the list of child nodes.
pm_interpolated_string_node_append((pm_interpolated_string_node_t *) current, string); pm_interpolated_string_node_append(parser, (pm_interpolated_string_node_t *) current, string);
} else if (PM_NODE_TYPE_P(current, PM_STRING_NODE)) { } else if (PM_NODE_TYPE_P(current, PM_STRING_NODE)) {
// If we hit string content and the current node is // If we hit string content and the current node is
// a string node, then we need to convert the // a string node, then we need to convert the
// current node into an interpolated string and add // current node into an interpolated string and add
// the string content to the list of child nodes. // the string content to the list of child nodes.
pm_interpolated_string_node_t *interpolated = pm_interpolated_string_node_create(parser, &opening, NULL, &closing); pm_interpolated_string_node_t *interpolated = pm_interpolated_string_node_create(parser, &opening, NULL, &closing);
pm_interpolated_string_node_append(interpolated, current); pm_interpolated_string_node_append(parser, interpolated, current);
pm_interpolated_string_node_append(interpolated, string); pm_interpolated_string_node_append(parser, interpolated, string);
current = (pm_node_t *) interpolated; current = (pm_node_t *) interpolated;
} else { } else {
assert(false && "unreachable"); assert(false && "unreachable");
@ -17398,7 +17445,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
pm_token_t opening = not_provided(parser); pm_token_t opening = not_provided(parser);
pm_token_t closing = not_provided(parser); pm_token_t closing = not_provided(parser);
pm_interpolated_string_node_t *interpolated = pm_interpolated_string_node_create(parser, &opening, NULL, &closing); pm_interpolated_string_node_t *interpolated = pm_interpolated_string_node_create(parser, &opening, NULL, &closing);
pm_interpolated_string_node_append(interpolated, current); pm_interpolated_string_node_append(parser, interpolated, current);
current = (pm_node_t *) interpolated; current = (pm_node_t *) interpolated;
} else { } else {
// If we hit an embedded variable and the current // If we hit an embedded variable and the current
@ -17407,7 +17454,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
} }
pm_node_t *part = parse_string_part(parser); pm_node_t *part = parse_string_part(parser);
pm_interpolated_string_node_append((pm_interpolated_string_node_t *) current, part); pm_interpolated_string_node_append(parser, (pm_interpolated_string_node_t *) current, part);
break; break;
} }
case PM_TOKEN_EMBEXPR_BEGIN: { case PM_TOKEN_EMBEXPR_BEGIN: {
@ -17427,7 +17474,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
pm_token_t opening = not_provided(parser); pm_token_t opening = not_provided(parser);
pm_token_t closing = not_provided(parser); pm_token_t closing = not_provided(parser);
pm_interpolated_string_node_t *interpolated = pm_interpolated_string_node_create(parser, &opening, NULL, &closing); pm_interpolated_string_node_t *interpolated = pm_interpolated_string_node_create(parser, &opening, NULL, &closing);
pm_interpolated_string_node_append(interpolated, current); pm_interpolated_string_node_append(parser, interpolated, current);
current = (pm_node_t *) interpolated; current = (pm_node_t *) interpolated;
} else if (PM_NODE_TYPE_P(current, PM_INTERPOLATED_STRING_NODE)) { } else if (PM_NODE_TYPE_P(current, PM_INTERPOLATED_STRING_NODE)) {
// If we hit an embedded expression and the current // If we hit an embedded expression and the current
@ -17438,7 +17485,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
} }
pm_node_t *part = parse_string_part(parser); pm_node_t *part = parse_string_part(parser);
pm_interpolated_string_node_append((pm_interpolated_string_node_t *) current, part); pm_interpolated_string_node_append(parser, (pm_interpolated_string_node_t *) current, part);
break; break;
} }
default: default:

View File

@ -57,7 +57,7 @@
│ │ ├── opening_loc: (7,6)-(7,8) = ":\"" │ │ ├── opening_loc: (7,6)-(7,8) = ":\""
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (7,8)-(7,11)) │ │ │ ├── @ StringNode (location: (7,8)-(7,11))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (7,8)-(7,11) = "abc" │ │ │ │ ├── content_loc: (7,8)-(7,11) = "abc"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅

View File

@ -79,10 +79,11 @@
│ ├── closing_loc: (23,0)-(24,0) = " EOF\n" │ ├── closing_loc: (23,0)-(24,0) = " EOF\n"
│ └── unescaped: " a\n b\n" │ └── unescaped: " a\n b\n"
├── @ InterpolatedStringNode (location: (25,0)-(25,8)) ├── @ InterpolatedStringNode (location: (25,0)-(25,8))
│ ├── flags: ∅
│ ├── opening_loc: (25,0)-(25,8) = "<<-\"EOF\"" │ ├── opening_loc: (25,0)-(25,8) = "<<-\"EOF\""
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (26,0)-(27,0)) │ │ ├── @ StringNode (location: (26,0)-(27,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (26,0)-(27,0) = " a\n" │ │ │ ├── content_loc: (26,0)-(27,0) = " a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -104,17 +105,18 @@
│ │ │ │ └── block: ∅ │ │ │ │ └── block: ∅
│ │ │ └── closing_loc: (27,3)-(27,4) = "}" │ │ │ └── closing_loc: (27,3)-(27,4) = "}"
│ │ └── @ StringNode (location: (27,4)-(28,0)) │ │ └── @ StringNode (location: (27,4)-(28,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (27,4)-(28,0) = "\n" │ │ ├── content_loc: (27,4)-(28,0) = "\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\n" │ │ └── unescaped: "\n"
│ └── closing_loc: (28,0)-(29,0) = "EOF\n" │ └── closing_loc: (28,0)-(29,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (30,0)-(30,6)) ├── @ InterpolatedStringNode (location: (30,0)-(30,6))
│ ├── flags: ∅
│ ├── opening_loc: (30,0)-(30,6) = "<<-EOF" │ ├── opening_loc: (30,0)-(30,6) = "<<-EOF"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (31,0)-(32,0)) │ │ ├── @ StringNode (location: (31,0)-(32,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (31,0)-(32,0) = " a\n" │ │ │ ├── content_loc: (31,0)-(32,0) = " a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -136,7 +138,7 @@
│ │ │ │ └── block: ∅ │ │ │ │ └── block: ∅
│ │ │ └── closing_loc: (32,3)-(32,4) = "}" │ │ │ └── closing_loc: (32,3)-(32,4) = "}"
│ │ └── @ StringNode (location: (32,4)-(33,0)) │ │ └── @ StringNode (location: (32,4)-(33,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (32,4)-(33,0) = "\n" │ │ ├── content_loc: (32,4)-(33,0) = "\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -184,10 +186,11 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (49,7)-(49,11)) │ │ └── @ InterpolatedStringNode (location: (49,7)-(49,11))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (49,7)-(49,11) = "<<-B" │ │ ├── opening_loc: (49,7)-(49,11) = "<<-B"
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (52,0)-(53,2)) │ │ │ ├── @ StringNode (location: (52,0)-(53,2))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (52,0)-(53,2) = " b\n " │ │ │ │ ├── content_loc: (52,0)-(53,2) = " b\n "
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -202,7 +205,7 @@
│ │ │ │ │ └── value: 2 │ │ │ │ │ └── value: 2
│ │ │ │ └── closing_loc: (54,2)-(54,3) = "}" │ │ │ │ └── closing_loc: (54,2)-(54,3) = "}"
│ │ │ └── @ StringNode (location: (54,3)-(55,0)) │ │ │ └── @ StringNode (location: (54,3)-(55,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (54,3)-(55,0) = "\n" │ │ │ ├── content_loc: (54,3)-(55,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -228,10 +231,11 @@
│ ├── flags: ∅ │ ├── flags: ∅
│ └── arguments: (length: 1) │ └── arguments: (length: 1)
│ └── @ InterpolatedStringNode (location: (57,7)-(57,11)) │ └── @ InterpolatedStringNode (location: (57,7)-(57,11))
│ ├── flags: ∅
│ ├── opening_loc: (57,7)-(57,11) = "<<-B" │ ├── opening_loc: (57,7)-(57,11) = "<<-B"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (60,0)-(61,2)) │ │ ├── @ StringNode (location: (60,0)-(61,2))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (60,0)-(61,2) = " b\n " │ │ │ ├── content_loc: (60,0)-(61,2) = " b\n "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -246,7 +250,7 @@
│ │ │ │ └── value: 2 │ │ │ │ └── value: 2
│ │ │ └── closing_loc: (62,3)-(62,4) = "}" │ │ │ └── closing_loc: (62,3)-(62,4) = "}"
│ │ └── @ StringNode (location: (62,4)-(63,0)) │ │ └── @ StringNode (location: (62,4)-(63,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (62,4)-(63,0) = "\n" │ │ ├── content_loc: (62,4)-(63,0) = "\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -15,16 +15,17 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (1,5)-(2,12)) │ │ └── @ InterpolatedStringNode (location: (1,5)-(2,12))
│ │ ├── flags: ∅
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (1,5)-(1,9)) │ │ │ ├── @ StringNode (location: (1,5)-(1,9))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: (1,5)-(1,6) = "\"" │ │ │ │ ├── opening_loc: (1,5)-(1,6) = "\""
│ │ │ │ ├── content_loc: (1,6)-(1,8) = "hi" │ │ │ │ ├── content_loc: (1,6)-(1,8) = "hi"
│ │ │ │ ├── closing_loc: (1,8)-(1,9) = "\"" │ │ │ │ ├── closing_loc: (1,8)-(1,9) = "\""
│ │ │ │ └── unescaped: "hi" │ │ │ │ └── unescaped: "hi"
│ │ │ └── @ StringNode (location: (2,5)-(2,12)) │ │ │ └── @ StringNode (location: (2,5)-(2,12))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: (2,5)-(2,6) = "\"" │ │ │ ├── opening_loc: (2,5)-(2,6) = "\""
│ │ │ ├── content_loc: (2,6)-(2,11) = "there" │ │ │ ├── content_loc: (2,6)-(2,11) = "there"
│ │ │ ├── closing_loc: (2,11)-(2,12) = "\"" │ │ │ ├── closing_loc: (2,11)-(2,12) = "\""
@ -81,16 +82,17 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ ├── receiver: │ │ ├── receiver:
│ │ │ @ InterpolatedStringNode (location: (17,8)-(17,14)) │ │ │ @ InterpolatedStringNode (location: (17,8)-(17,14))
│ │ │ ├── flags: ∅
│ │ │ ├── opening_loc: (17,8)-(17,14) = "<<~EOF" │ │ │ ├── opening_loc: (17,8)-(17,14) = "<<~EOF"
│ │ │ ├── parts: (length: 2) │ │ │ ├── parts: (length: 2)
│ │ │ │ ├── @ StringNode (location: (18,0)-(19,0)) │ │ │ │ ├── @ StringNode (location: (18,0)-(19,0))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (18,0)-(19,0) = "\r\n" │ │ │ │ │ ├── content_loc: (18,0)-(19,0) = "\r\n"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ │ └── unescaped: "\n" │ │ │ │ │ └── unescaped: "\n"
│ │ │ │ └── @ StringNode (location: (19,0)-(20,0)) │ │ │ │ └── @ StringNode (location: (19,0)-(20,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (19,0)-(20,0) = " baz\r\n" │ │ │ │ ├── content_loc: (19,0)-(20,0) = " baz\r\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅

View File

@ -10,10 +10,11 @@
│ ├── closing_loc: (2,5)-(2,6) = "\"" │ ├── closing_loc: (2,5)-(2,6) = "\""
│ └── unescaped: "foo\n bar" │ └── unescaped: "foo\n bar"
├── @ InterpolatedStringNode (location: (4,0)-(5,9)) ├── @ InterpolatedStringNode (location: (4,0)-(5,9))
│ ├── flags: ∅
│ ├── opening_loc: (4,0)-(4,1) = "\"" │ ├── opening_loc: (4,0)-(4,1) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (4,1)-(5,2)) │ │ ├── @ StringNode (location: (4,1)-(5,2))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (4,1)-(5,2) = "foo\n " │ │ │ ├── content_loc: (4,1)-(5,2) = "foo\n "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -36,16 +37,17 @@
│ │ └── closing_loc: (5,7)-(5,8) = "}" │ │ └── closing_loc: (5,7)-(5,8) = "}"
│ └── closing_loc: (5,8)-(5,9) = "\"" │ └── closing_loc: (5,8)-(5,9) = "\""
├── @ InterpolatedStringNode (location: (7,0)-(9,2)) ├── @ InterpolatedStringNode (location: (7,0)-(9,2))
│ ├── flags: ∅
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (7,0)-(8,2)) │ │ ├── @ StringNode (location: (7,0)-(8,2))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: (7,0)-(7,1) = "\"" │ │ │ ├── opening_loc: (7,0)-(7,1) = "\""
│ │ │ ├── content_loc: (7,1)-(8,1) = "fo\no" │ │ │ ├── content_loc: (7,1)-(8,1) = "fo\no"
│ │ │ ├── closing_loc: (8,1)-(8,2) = "\"" │ │ │ ├── closing_loc: (8,1)-(8,2) = "\""
│ │ │ └── unescaped: "fo\no" │ │ │ └── unescaped: "fo\no"
│ │ └── @ StringNode (location: (8,3)-(9,2)) │ │ └── @ StringNode (location: (8,3)-(9,2))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: (8,3)-(8,4) = "\"" │ │ ├── opening_loc: (8,3)-(8,4) = "\""
│ │ ├── content_loc: (8,4)-(9,1) = "ba\nr" │ │ ├── content_loc: (8,4)-(9,1) = "ba\nr"
│ │ ├── closing_loc: (9,1)-(9,2) = "\"" │ │ ├── closing_loc: (9,1)-(9,2) = "\""

View File

@ -28,32 +28,34 @@
│ ├── closing_loc: (19,0)-(20,0) = " FOO\n" │ ├── closing_loc: (19,0)-(20,0) = " FOO\n"
│ └── unescaped: "a\nb\n" │ └── unescaped: "a\nb\n"
├── @ InterpolatedStringNode (location: (21,0)-(21,10)) ├── @ InterpolatedStringNode (location: (21,0)-(21,10))
│ ├── flags: ∅
│ ├── opening_loc: (21,0)-(21,10) = "<<~' FOO'" │ ├── opening_loc: (21,0)-(21,10) = "<<~' FOO'"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (22,0)-(23,0)) │ │ ├── @ StringNode (location: (22,0)-(23,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (22,0)-(23,0) = "a\n" │ │ │ ├── content_loc: (22,0)-(23,0) = "a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a\n" │ │ │ └── unescaped: "a\n"
│ │ └── @ StringNode (location: (23,0)-(24,0)) │ │ └── @ StringNode (location: (23,0)-(24,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (23,0)-(24,0) = "b\n" │ │ ├── content_loc: (23,0)-(24,0) = "b\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "b\n" │ │ └── unescaped: "b\n"
│ └── closing_loc: (24,0)-(25,0) = " FOO\n" │ └── closing_loc: (24,0)-(25,0) = " FOO\n"
└── @ InterpolatedStringNode (location: (26,0)-(26,10)) └── @ InterpolatedStringNode (location: (26,0)-(26,10))
├── flags: ∅
├── opening_loc: (26,0)-(26,10) = "<<~' FOO'" ├── opening_loc: (26,0)-(26,10) = "<<~' FOO'"
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ StringNode (location: (27,0)-(28,0)) │ ├── @ StringNode (location: (27,0)-(28,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (27,0)-(28,0) = "a\n" │ │ ├── content_loc: (27,0)-(28,0) = "a\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "a\n" │ │ └── unescaped: "a\n"
│ └── @ StringNode (location: (28,0)-(29,0)) │ └── @ StringNode (location: (28,0)-(29,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (28,0)-(29,0) = "b\n" │ ├── content_loc: (28,0)-(29,0) = "b\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(12,4)) @ StatementsNode (location: (1,0)-(12,4))
└── body: (length: 2) └── body: (length: 2)
├── @ InterpolatedStringNode (location: (1,0)-(1,7)) ├── @ InterpolatedStringNode (location: (1,0)-(1,7))
│ ├── flags: ∅
│ ├── opening_loc: (1,0)-(1,7) = "<<~RUBY" │ ├── opening_loc: (1,0)-(1,7) = "<<~RUBY"
│ ├── parts: (length: 4) │ ├── parts: (length: 4)
│ │ ├── @ StringNode (location: (2,0)-(3,0)) │ │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (2,0)-(3,0) = "pre\n" │ │ │ ├── content_loc: (2,0)-(3,0) = "pre\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -25,19 +26,20 @@
│ │ │ │ └── unescaped: " hello\n" │ │ │ │ └── unescaped: " hello\n"
│ │ │ └── closing_loc: (7,0)-(7,1) = "}" │ │ │ └── closing_loc: (7,0)-(7,1) = "}"
│ │ ├── @ StringNode (location: (7,1)-(8,0)) │ │ ├── @ StringNode (location: (7,1)-(8,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (7,1)-(8,0) = "\n" │ │ │ ├── content_loc: (7,1)-(8,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "\n" │ │ │ └── unescaped: "\n"
│ │ └── @ StringNode (location: (8,0)-(9,0)) │ │ └── @ StringNode (location: (8,0)-(9,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (8,0)-(9,0) = "post\n" │ │ ├── content_loc: (8,0)-(9,0) = "post\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "post\n" │ │ └── unescaped: "post\n"
│ └── closing_loc: (9,0)-(10,0) = "RUBY\n" │ └── closing_loc: (9,0)-(10,0) = "RUBY\n"
└── @ InterpolatedStringNode (location: (12,0)-(12,4)) └── @ InterpolatedStringNode (location: (12,0)-(12,4))
├── flags: ∅
├── opening_loc: (12,0)-(12,4) = "<<-A" ├── opening_loc: (12,0)-(12,4) = "<<-A"
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ EmbeddedStatementsNode (location: (13,0)-(21,1)) │ ├── @ EmbeddedStatementsNode (location: (13,0)-(21,1))
@ -46,6 +48,7 @@
│ │ │ @ StatementsNode (location: (14,0)-(14,4)) │ │ │ @ StatementsNode (location: (14,0)-(14,4))
│ │ │ └── body: (length: 1) │ │ │ └── body: (length: 1)
│ │ │ └── @ InterpolatedStringNode (location: (14,0)-(14,4)) │ │ │ └── @ InterpolatedStringNode (location: (14,0)-(14,4))
│ │ │ ├── flags: ∅
│ │ │ ├── opening_loc: (14,0)-(14,4) = "<<-B" │ │ │ ├── opening_loc: (14,0)-(14,4) = "<<-B"
│ │ │ ├── parts: (length: 2) │ │ │ ├── parts: (length: 2)
│ │ │ │ ├── @ EmbeddedStatementsNode (location: (15,0)-(19,1)) │ │ │ │ ├── @ EmbeddedStatementsNode (location: (15,0)-(19,1))
@ -54,6 +57,7 @@
│ │ │ │ │ │ @ StatementsNode (location: (16,0)-(16,4)) │ │ │ │ │ │ @ StatementsNode (location: (16,0)-(16,4))
│ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ │ └── body: (length: 1)
│ │ │ │ │ │ └── @ InterpolatedStringNode (location: (16,0)-(16,4)) │ │ │ │ │ │ └── @ InterpolatedStringNode (location: (16,0)-(16,4))
│ │ │ │ │ │ ├── flags: ∅
│ │ │ │ │ │ ├── opening_loc: (16,0)-(16,4) = "<<-C" │ │ │ │ │ │ ├── opening_loc: (16,0)-(16,4) = "<<-C"
│ │ │ │ │ │ ├── parts: (length: 2) │ │ │ │ │ │ ├── parts: (length: 2)
│ │ │ │ │ │ │ ├── @ EmbeddedStatementsNode (location: (17,0)-(17,4)) │ │ │ │ │ │ │ ├── @ EmbeddedStatementsNode (location: (17,0)-(17,4))
@ -66,7 +70,7 @@
│ │ │ │ │ │ │ │ │ └── value: 3 │ │ │ │ │ │ │ │ │ └── value: 3
│ │ │ │ │ │ │ │ └── closing_loc: (17,3)-(17,4) = "}" │ │ │ │ │ │ │ │ └── closing_loc: (17,3)-(17,4) = "}"
│ │ │ │ │ │ │ └── @ StringNode (location: (17,4)-(18,0)) │ │ │ │ │ │ │ └── @ StringNode (location: (17,4)-(18,0))
│ │ │ │ │ │ │ ├── flags: │ │ │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ │ │ ├── content_loc: (17,4)-(18,0) = "\n" │ │ │ │ │ │ │ ├── content_loc: (17,4)-(18,0) = "\n"
│ │ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ │ ├── closing_loc: ∅
@ -74,7 +78,7 @@
│ │ │ │ │ │ └── closing_loc: (18,0)-(19,0) = "C\n" │ │ │ │ │ │ └── closing_loc: (18,0)-(19,0) = "C\n"
│ │ │ │ │ └── closing_loc: (19,0)-(19,1) = "}" │ │ │ │ │ └── closing_loc: (19,0)-(19,1) = "}"
│ │ │ │ └── @ StringNode (location: (19,1)-(20,0)) │ │ │ │ └── @ StringNode (location: (19,1)-(20,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (19,1)-(20,0) = "\n" │ │ │ │ ├── content_loc: (19,1)-(20,0) = "\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -82,7 +86,7 @@
│ │ │ └── closing_loc: (20,0)-(21,0) = "B\n" │ │ │ └── closing_loc: (20,0)-(21,0) = "B\n"
│ │ └── closing_loc: (21,0)-(21,1) = "}" │ │ └── closing_loc: (21,0)-(21,1) = "}"
│ └── @ StringNode (location: (21,1)-(22,0)) │ └── @ StringNode (location: (21,1)-(22,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (21,1)-(22,0) = "\n" │ ├── content_loc: (21,1)-(22,0) = "\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -10,58 +10,59 @@
│ ├── closing_loc: (2,0)-(3,0) = "HERE\n" │ ├── closing_loc: (2,0)-(3,0) = "HERE\n"
│ └── unescaped: "" │ └── unescaped: ""
└── @ InterpolatedStringNode (location: (4,0)-(4,8)) └── @ InterpolatedStringNode (location: (4,0)-(4,8))
├── flags: ∅
├── opening_loc: (4,0)-(4,8) = "<<~THERE" ├── opening_loc: (4,0)-(4,8) = "<<~THERE"
├── parts: (length: 9) ├── parts: (length: 9)
│ ├── @ StringNode (location: (5,0)-(6,0)) │ ├── @ StringNode (location: (5,0)-(6,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (5,0)-(6,0) = " way over\n" │ │ ├── content_loc: (5,0)-(6,0) = " way over\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "way over\n" │ │ └── unescaped: "way over\n"
│ ├── @ StringNode (location: (6,0)-(7,0)) │ ├── @ StringNode (location: (6,0)-(7,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (6,0)-(7,0) = " <<HERE\n" │ │ ├── content_loc: (6,0)-(7,0) = " <<HERE\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "<<HERE\n" │ │ └── unescaped: "<<HERE\n"
│ ├── @ StringNode (location: (7,0)-(8,0)) │ ├── @ StringNode (location: (7,0)-(8,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (7,0)-(8,0) = " not here\n" │ │ ├── content_loc: (7,0)-(8,0) = " not here\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: " not here\n" │ │ └── unescaped: " not here\n"
│ ├── @ StringNode (location: (8,0)-(9,0)) │ ├── @ StringNode (location: (8,0)-(9,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (8,0)-(9,0) = " HERE\n" │ │ ├── content_loc: (8,0)-(9,0) = " HERE\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "HERE\n" │ │ └── unescaped: "HERE\n"
│ ├── @ StringNode (location: (9,0)-(10,0)) │ ├── @ StringNode (location: (9,0)-(10,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (9,0)-(10,0) = "\n" │ │ ├── content_loc: (9,0)-(10,0) = "\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\n" │ │ └── unescaped: "\n"
│ ├── @ StringNode (location: (10,0)-(11,0)) │ ├── @ StringNode (location: (10,0)-(11,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (10,0)-(11,0) = " <<~BUT\\\n" │ │ ├── content_loc: (10,0)-(11,0) = " <<~BUT\\\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "<<~BUT" │ │ └── unescaped: "<<~BUT"
│ ├── @ StringNode (location: (11,0)-(12,0)) │ ├── @ StringNode (location: (11,0)-(12,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (11,0)-(12,0) = " but\n" │ │ ├── content_loc: (11,0)-(12,0) = " but\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: " but\n" │ │ └── unescaped: " but\n"
│ ├── @ StringNode (location: (12,0)-(13,0)) │ ├── @ StringNode (location: (12,0)-(13,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (12,0)-(13,0) = " BUT\n" │ │ ├── content_loc: (12,0)-(13,0) = " BUT\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "BUT\n" │ │ └── unescaped: "BUT\n"
│ └── @ StringNode (location: (13,0)-(14,0)) │ └── @ StringNode (location: (13,0)-(14,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (13,0)-(14,0) = " there\n" │ ├── content_loc: (13,0)-(14,0) = " there\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -46,10 +46,11 @@
│ │ │ │ ├── name_loc: (5,3)-(5,5) = "x:" │ │ │ │ ├── name_loc: (5,3)-(5,5) = "x:"
│ │ │ │ └── value: │ │ │ │ └── value:
│ │ │ │ @ InterpolatedStringNode (location: (5,6)-(5,13)) │ │ │ │ @ InterpolatedStringNode (location: (5,6)-(5,13))
│ │ │ │ ├── flags: ∅
│ │ │ │ ├── opening_loc: (5,6)-(5,7) = "\"" │ │ │ │ ├── opening_loc: (5,6)-(5,7) = "\""
│ │ │ │ ├── parts: (length: 2) │ │ │ │ ├── parts: (length: 2)
│ │ │ │ │ ├── @ StringNode (location: (5,7)-(5,8)) │ │ │ │ │ ├── @ StringNode (location: (5,7)-(5,8))
│ │ │ │ │ │ ├── flags: │ │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ │ ├── content_loc: (5,7)-(5,8) = "b" │ │ │ │ │ │ ├── content_loc: (5,7)-(5,8) = "b"
│ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ ├── closing_loc: ∅

View File

@ -1669,6 +1669,7 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (109,4)-(109,29)) │ │ └── @ InterpolatedStringNode (location: (109,4)-(109,29))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (109,4)-(109,5) = "\"" │ │ ├── opening_loc: (109,4)-(109,5) = "\""
│ │ ├── parts: (length: 1) │ │ ├── parts: (length: 1)
│ │ │ └── @ EmbeddedStatementsNode (location: (109,5)-(109,28)) │ │ │ └── @ EmbeddedStatementsNode (location: (109,5)-(109,28))
@ -2237,6 +2238,7 @@
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅
│ └── block: ∅ │ └── block: ∅
├── @ InterpolatedStringNode (location: (145,0)-(145,17)) ├── @ InterpolatedStringNode (location: (145,0)-(145,17))
│ ├── flags: ∅
│ ├── opening_loc: (145,0)-(145,1) = "\"" │ ├── opening_loc: (145,0)-(145,1) = "\""
│ ├── parts: (length: 1) │ ├── parts: (length: 1)
│ │ └── @ EmbeddedStatementsNode (location: (145,1)-(145,16)) │ │ └── @ EmbeddedStatementsNode (location: (145,1)-(145,16))
@ -2272,6 +2274,7 @@
│ │ └── closing_loc: (145,15)-(145,16) = "}" │ │ └── closing_loc: (145,15)-(145,16) = "}"
│ └── closing_loc: (145,16)-(145,17) = "\"" │ └── closing_loc: (145,16)-(145,17) = "\""
├── @ InterpolatedStringNode (location: (147,0)-(147,8)) ├── @ InterpolatedStringNode (location: (147,0)-(147,8))
│ ├── flags: ∅
│ ├── opening_loc: (147,0)-(147,1) = "\"" │ ├── opening_loc: (147,0)-(147,1) = "\""
│ ├── parts: (length: 1) │ ├── parts: (length: 1)
│ │ └── @ EmbeddedStatementsNode (location: (147,1)-(147,7)) │ │ └── @ EmbeddedStatementsNode (location: (147,1)-(147,7))
@ -2425,7 +2428,7 @@
│ │ ├── opening_loc: (156,5)-(156,6) = "\"" │ │ ├── opening_loc: (156,5)-(156,6) = "\""
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (156,6)-(156,7)) │ │ │ ├── @ StringNode (location: (156,6)-(156,7))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (156,6)-(156,7) = "c" │ │ │ │ ├── content_loc: (156,6)-(156,7) = "c"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅

View File

@ -1237,10 +1237,11 @@
│ │ @ StatementsNode (location: (136,12)-(136,26)) │ │ @ StatementsNode (location: (136,12)-(136,26))
│ │ └── body: (length: 1) │ │ └── body: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (136,12)-(136,26)) │ │ └── @ InterpolatedStringNode (location: (136,12)-(136,26))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (136,12)-(136,13) = "\"" │ │ ├── opening_loc: (136,12)-(136,13) = "\""
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (136,13)-(136,16)) │ │ │ ├── @ StringNode (location: (136,13)-(136,16))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (136,13)-(136,16) = "foo" │ │ │ │ ├── content_loc: (136,13)-(136,16) = "foo"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅

View File

@ -24,10 +24,11 @@
│ ├── end_keyword_loc: (1,15)-(1,18) = "end" │ ├── end_keyword_loc: (1,15)-(1,18) = "end"
│ └── name: :A │ └── name: :A
├── @ InterpolatedStringNode (location: (3,0)-(3,18)) ├── @ InterpolatedStringNode (location: (3,0)-(3,18))
│ ├── flags: ∅
│ ├── opening_loc: (3,0)-(3,3) = "%Q{" │ ├── opening_loc: (3,0)-(3,3) = "%Q{"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (3,3)-(3,7)) │ │ ├── @ StringNode (location: (3,3)-(3,7))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (3,3)-(3,7) = "aaa " │ │ │ ├── content_loc: (3,3)-(3,7) = "aaa "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -49,7 +50,7 @@
│ │ │ │ └── block: ∅ │ │ │ │ └── block: ∅
│ │ │ └── closing_loc: (3,12)-(3,13) = "}" │ │ │ └── closing_loc: (3,12)-(3,13) = "}"
│ │ └── @ StringNode (location: (3,13)-(3,17)) │ │ └── @ StringNode (location: (3,13)-(3,17))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (3,13)-(3,17) = " ccc" │ │ ├── content_loc: (3,13)-(3,17) = " ccc"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -39,7 +39,7 @@
│ ├── opening_loc: (7,0)-(7,1) = "/" │ ├── opening_loc: (7,0)-(7,1) = "/"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (7,1)-(7,5)) │ │ ├── @ StringNode (location: (7,1)-(7,5))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (7,1)-(7,5) = "aaa " │ │ │ ├── content_loc: (7,1)-(7,5) = "aaa "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -55,7 +55,7 @@
│ ├── opening_loc: (9,0)-(9,1) = "/" │ ├── opening_loc: (9,0)-(9,1) = "/"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (9,1)-(9,5)) │ │ ├── @ StringNode (location: (9,1)-(9,5))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (9,1)-(9,5) = "aaa " │ │ │ ├── content_loc: (9,1)-(9,5) = "aaa "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -77,7 +77,7 @@
│ │ │ │ └── block: ∅ │ │ │ │ └── block: ∅
│ │ │ └── closing_loc: (9,10)-(9,11) = "}" │ │ │ └── closing_loc: (9,10)-(9,11) = "}"
│ │ └── @ StringNode (location: (9,11)-(9,15)) │ │ └── @ StringNode (location: (9,11)-(9,15))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (9,11)-(9,15) = " ccc" │ │ ├── content_loc: (9,11)-(9,15) = " ccc"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -192,7 +192,7 @@
│ ├── opening_loc: (30,0)-(30,1) = "/" │ ├── opening_loc: (30,0)-(30,1) = "/"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (30,1)-(30,5)) │ │ ├── @ StringNode (location: (30,1)-(30,5))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (30,1)-(30,5) = "aaa " │ │ │ ├── content_loc: (30,1)-(30,5) = "aaa "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅

View File

@ -35,16 +35,17 @@
│ │ │ ├── flags: ∅ │ │ │ ├── flags: ∅
│ │ │ └── arguments: (length: 1) │ │ │ └── arguments: (length: 1)
│ │ │ └── @ InterpolatedStringNode (location: (1,9)-(4,4)) │ │ │ └── @ InterpolatedStringNode (location: (1,9)-(4,4))
│ │ │ ├── flags: ∅
│ │ │ ├── opening_loc: (1,9)-(1,10) = "'" │ │ │ ├── opening_loc: (1,9)-(1,10) = "'"
│ │ │ ├── parts: (length: 2) │ │ │ ├── parts: (length: 2)
│ │ │ │ ├── @ StringNode (location: (1,10)-(2,0)) │ │ │ │ ├── @ StringNode (location: (1,10)-(2,0))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (1,10)-(2,0) = "b\n" │ │ │ │ │ ├── content_loc: (1,10)-(2,0) = "b\n"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ │ └── unescaped: "b\n" │ │ │ │ │ └── unescaped: "b\n"
│ │ │ │ └── @ StringNode (location: (4,0)-(4,3)) │ │ │ │ └── @ StringNode (location: (4,0)-(4,3))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (4,0)-(4,3) = " c" │ │ │ │ ├── content_loc: (4,0)-(4,3) = " c"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅

View File

@ -4,6 +4,7 @@
@ StatementsNode (location: (1,0)-(1,12)) @ StatementsNode (location: (1,0)-(1,12))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,12)) └── @ InterpolatedStringNode (location: (1,0)-(1,12))
├── flags: ∅
├── opening_loc: (1,0)-(1,1) = "\"" ├── opening_loc: (1,0)-(1,1) = "\""
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,7)) │ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,7))

View File

@ -4,6 +4,7 @@
@ StatementsNode (location: (1,0)-(1,8)) @ StatementsNode (location: (1,0)-(1,8))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,8)) └── @ InterpolatedStringNode (location: (1,0)-(1,8))
├── flags: ∅
├── opening_loc: (1,0)-(1,1) = "\"" ├── opening_loc: (1,0)-(1,1) = "\""
├── parts: (length: 1) ├── parts: (length: 1)
│ └── @ EmbeddedStatementsNode (location: (1,1)-(1,7)) │ └── @ EmbeddedStatementsNode (location: (1,1)-(1,7))

View File

@ -4,6 +4,7 @@
@ StatementsNode (location: (1,0)-(1,10)) @ StatementsNode (location: (1,0)-(1,10))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,10)) └── @ InterpolatedStringNode (location: (1,0)-(1,10))
├── flags: ∅
├── opening_loc: (1,0)-(1,1) = "\"" ├── opening_loc: (1,0)-(1,1) = "\""
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,7)) │ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,7))
@ -19,7 +20,7 @@
│ │ │ └── unescaped: "a" │ │ │ └── unescaped: "a"
│ │ └── closing_loc: (1,6)-(1,7) = "}" │ │ └── closing_loc: (1,6)-(1,7) = "}"
│ └── @ StringNode (location: (1,7)-(1,9)) │ └── @ StringNode (location: (1,7)-(1,9))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (1,7)-(1,9) = " b" │ ├── content_loc: (1,7)-(1,9) = " b"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -4,6 +4,7 @@
@ StatementsNode (location: (1,0)-(1,10)) @ StatementsNode (location: (1,0)-(1,10))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,10)) └── @ InterpolatedStringNode (location: (1,0)-(1,10))
├── flags: ∅
├── opening_loc: (1,0)-(1,1) = "\"" ├── opening_loc: (1,0)-(1,1) = "\""
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,5)) │ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,5))

View File

@ -4,6 +4,7 @@
@ StatementsNode (location: (1,0)-(1,8)) @ StatementsNode (location: (1,0)-(1,8))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,8)) └── @ InterpolatedStringNode (location: (1,0)-(1,8))
├── flags: ∅
├── opening_loc: (1,0)-(1,1) = "\"" ├── opening_loc: (1,0)-(1,1) = "\""
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,5)) │ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,5))
@ -23,7 +24,7 @@
│ │ │ └── block: ∅ │ │ │ └── block: ∅
│ │ └── closing_loc: (1,4)-(1,5) = "}" │ │ └── closing_loc: (1,4)-(1,5) = "}"
│ └── @ StringNode (location: (1,5)-(1,7)) │ └── @ StringNode (location: (1,5)-(1,7))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (1,5)-(1,7) = " b" │ ├── content_loc: (1,5)-(1,7) = " b"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -7,6 +7,7 @@
├── flags: ∅ ├── flags: ∅
├── elements: (length: 2) ├── elements: (length: 2)
│ ├── @ InterpolatedStringNode (location: (1,1)-(1,4)) │ ├── @ InterpolatedStringNode (location: (1,1)-(1,4))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (1,1)-(1,4) = "<<A" │ │ ├── opening_loc: (1,1)-(1,4) = "<<A"
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ EmbeddedStatementsNode (location: (2,0)-(2,6)) │ │ │ ├── @ EmbeddedStatementsNode (location: (2,0)-(2,6))
@ -22,13 +23,13 @@
│ │ │ │ │ └── unescaped: "b\n" │ │ │ │ │ └── unescaped: "b\n"
│ │ │ │ └── closing_loc: (2,5)-(2,6) = "}" │ │ │ │ └── closing_loc: (2,5)-(2,6) = "}"
│ │ │ ├── @ StringNode (location: (2,6)-(3,0)) │ │ │ ├── @ StringNode (location: (2,6)-(3,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (2,6)-(3,0) = "\n" │ │ │ │ ├── content_loc: (2,6)-(3,0) = "\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: "\n" │ │ │ │ └── unescaped: "\n"
│ │ │ └── @ StringNode (location: (5,0)-(6,0)) │ │ │ └── @ StringNode (location: (5,0)-(6,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (5,0)-(6,0) = "a\n" │ │ │ ├── content_loc: (5,0)-(6,0) = "a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅

View File

@ -9,22 +9,23 @@
├── name_loc: (1,0)-(1,1) = "a" ├── name_loc: (1,0)-(1,1) = "a"
├── value: ├── value:
│ @ InterpolatedStringNode (location: (1,4)-(1,12)) │ @ InterpolatedStringNode (location: (1,4)-(1,12))
│ ├── flags: ∅
│ ├── opening_loc: (1,4)-(1,12) = "<<~\"EOF\"" │ ├── opening_loc: (1,4)-(1,12) = "<<~\"EOF\""
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (2,0)-(3,0)) │ │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (2,0)-(3,0) = " x\n" │ │ │ ├── content_loc: (2,0)-(3,0) = " x\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "x\n" │ │ │ └── unescaped: "x\n"
│ │ ├── @ StringNode (location: (3,0)-(4,0)) │ │ ├── @ StringNode (location: (3,0)-(4,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (3,0)-(4,0) = " y\n" │ │ │ ├── content_loc: (3,0)-(4,0) = " y\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "y\n" │ │ │ └── unescaped: "y\n"
│ │ └── @ StringNode (location: (4,0)-(5,0)) │ │ └── @ StringNode (location: (4,0)-(5,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (4,0)-(5,0) = " z\n" │ │ ├── content_loc: (4,0)-(5,0) = " z\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -23,10 +23,11 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ ├── receiver: │ │ ├── receiver:
│ │ │ @ InterpolatedStringNode (location: (1,8)-(1,14)) │ │ │ @ InterpolatedStringNode (location: (1,8)-(1,14))
│ │ │ ├── flags: ∅
│ │ │ ├── opening_loc: (1,8)-(1,14) = "<<~EOF" │ │ │ ├── opening_loc: (1,8)-(1,14) = "<<~EOF"
│ │ │ ├── parts: (length: 3) │ │ │ ├── parts: (length: 3)
│ │ │ │ ├── @ StringNode (location: (2,0)-(3,0)) │ │ │ │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (2,0)-(3,0) = "\n" │ │ │ │ │ ├── content_loc: (2,0)-(3,0) = "\n"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
@ -48,7 +49,7 @@
│ │ │ │ │ │ └── block: ∅ │ │ │ │ │ │ └── block: ∅
│ │ │ │ │ └── closing_loc: (3,9)-(3,10) = "}" │ │ │ │ │ └── closing_loc: (3,9)-(3,10) = "}"
│ │ │ │ └── @ StringNode (location: (3,10)-(4,0)) │ │ │ │ └── @ StringNode (location: (3,10)-(4,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (3,10)-(4,0) = "baz\n" │ │ │ │ ├── content_loc: (3,10)-(4,0) = "baz\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅

View File

@ -9,22 +9,23 @@
├── name_loc: (1,0)-(1,1) = "a" ├── name_loc: (1,0)-(1,1) = "a"
├── value: ├── value:
│ @ InterpolatedStringNode (location: (1,4)-(1,10)) │ @ InterpolatedStringNode (location: (1,4)-(1,10))
│ ├── flags: ∅
│ ├── opening_loc: (1,4)-(1,10) = "<<~EOF" │ ├── opening_loc: (1,4)-(1,10) = "<<~EOF"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (2,0)-(3,0)) │ │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (2,0)-(3,0) = " x\n" │ │ │ ├── content_loc: (2,0)-(3,0) = " x\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "x\n" │ │ │ └── unescaped: "x\n"
│ │ ├── @ StringNode (location: (3,0)-(4,0)) │ │ ├── @ StringNode (location: (3,0)-(4,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (3,0)-(4,0) = "\n" │ │ │ ├── content_loc: (3,0)-(4,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "\n" │ │ │ └── unescaped: "\n"
│ │ └── @ StringNode (location: (4,0)-(5,0)) │ │ └── @ StringNode (location: (4,0)-(5,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (4,0)-(5,0) = " z\n" │ │ ├── content_loc: (4,0)-(5,0) = " z\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -9,16 +9,17 @@
├── name_loc: (1,0)-(1,1) = "a" ├── name_loc: (1,0)-(1,1) = "a"
├── value: ├── value:
│ @ InterpolatedStringNode (location: (1,4)-(1,10)) │ @ InterpolatedStringNode (location: (1,4)-(1,10))
│ ├── flags: ∅
│ ├── opening_loc: (1,4)-(1,10) = "<<~EOF" │ ├── opening_loc: (1,4)-(1,10) = "<<~EOF"
│ ├── parts: (length: 5) │ ├── parts: (length: 5)
│ │ ├── @ StringNode (location: (2,0)-(3,0)) │ │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (2,0)-(3,0) = " w\n" │ │ │ ├── content_loc: (2,0)-(3,0) = " w\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: " w\n" │ │ │ └── unescaped: " w\n"
│ │ ├── @ StringNode (location: (3,0)-(3,3)) │ │ ├── @ StringNode (location: (3,0)-(3,3))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (3,0)-(3,3) = " x" │ │ │ ├── content_loc: (3,0)-(3,3) = " x"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -33,13 +34,13 @@
│ │ │ │ └── value: 42 │ │ │ │ └── value: 42
│ │ │ └── closing_loc: (3,7)-(3,8) = "}" │ │ │ └── closing_loc: (3,7)-(3,8) = "}"
│ │ ├── @ StringNode (location: (3,8)-(4,0)) │ │ ├── @ StringNode (location: (3,8)-(4,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (3,8)-(4,0) = " y\n" │ │ │ ├── content_loc: (3,8)-(4,0) = " y\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: " y\n" │ │ │ └── unescaped: " y\n"
│ │ └── @ StringNode (location: (4,0)-(5,0)) │ │ └── @ StringNode (location: (4,0)-(5,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (4,0)-(5,0) = " z\n" │ │ ├── content_loc: (4,0)-(5,0) = " z\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -9,16 +9,17 @@
├── name_loc: (1,0)-(1,1) = "a" ├── name_loc: (1,0)-(1,1) = "a"
├── value: ├── value:
│ @ InterpolatedStringNode (location: (1,4)-(1,12)) │ @ InterpolatedStringNode (location: (1,4)-(1,12))
│ ├── flags: ∅
│ ├── opening_loc: (1,4)-(1,12) = "<<~\"EOF\"" │ ├── opening_loc: (1,4)-(1,12) = "<<~\"EOF\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (2,0)-(3,0)) │ │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (2,0)-(3,0) = " blah blah\n" │ │ │ ├── content_loc: (2,0)-(3,0) = " blah blah\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "blah blah\n" │ │ │ └── unescaped: "blah blah\n"
│ │ └── @ StringNode (location: (3,0)-(4,0)) │ │ └── @ StringNode (location: (3,0)-(4,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (3,0)-(4,0) = "\t blah blah\n" │ │ ├── content_loc: (3,0)-(4,0) = "\t blah blah\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -9,16 +9,17 @@
├── name_loc: (1,0)-(1,1) = "a" ├── name_loc: (1,0)-(1,1) = "a"
├── value: ├── value:
│ @ InterpolatedStringNode (location: (1,4)-(1,12)) │ @ InterpolatedStringNode (location: (1,4)-(1,12))
│ ├── flags: ∅
│ ├── opening_loc: (1,4)-(1,12) = "<<~\"EOF\"" │ ├── opening_loc: (1,4)-(1,12) = "<<~\"EOF\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (2,0)-(3,0)) │ │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (2,0)-(3,0) = " blah blah\n" │ │ │ ├── content_loc: (2,0)-(3,0) = " blah blah\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "blah blah\n" │ │ │ └── unescaped: "blah blah\n"
│ │ └── @ StringNode (location: (3,0)-(4,0)) │ │ └── @ StringNode (location: (3,0)-(4,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (3,0)-(4,0) = " \tblah blah\n" │ │ ├── content_loc: (3,0)-(4,0) = " \tblah blah\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -9,22 +9,23 @@
├── name_loc: (1,0)-(1,1) = "a" ├── name_loc: (1,0)-(1,1) = "a"
├── value: ├── value:
│ @ InterpolatedStringNode (location: (1,4)-(1,10)) │ @ InterpolatedStringNode (location: (1,4)-(1,10))
│ ├── flags: ∅
│ ├── opening_loc: (1,4)-(1,10) = "<<~EOF" │ ├── opening_loc: (1,4)-(1,10) = "<<~EOF"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (2,0)-(3,0)) │ │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (2,0)-(3,0) = " x\n" │ │ │ ├── content_loc: (2,0)-(3,0) = " x\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "x\n" │ │ │ └── unescaped: "x\n"
│ │ ├── @ StringNode (location: (3,0)-(4,0)) │ │ ├── @ StringNode (location: (3,0)-(4,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (3,0)-(4,0) = " \n" │ │ │ ├── content_loc: (3,0)-(4,0) = " \n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "\n" │ │ │ └── unescaped: "\n"
│ │ └── @ StringNode (location: (4,0)-(5,0)) │ │ └── @ StringNode (location: (4,0)-(5,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (4,0)-(5,0) = " z\n" │ │ ├── content_loc: (4,0)-(5,0) = " z\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(1,5)) @ StatementsNode (location: (1,0)-(1,5))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,5)) └── @ InterpolatedStringNode (location: (1,0)-(1,5))
├── flags: ∅
├── opening_loc: (1,0)-(1,5) = "<<EOS" ├── opening_loc: (1,0)-(1,5) = "<<EOS"
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (2,0)-(2,5)) │ ├── @ StringNode (location: (2,0)-(2,5))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (2,0)-(2,5) = "foo\\r" │ │ ├── content_loc: (2,0)-(2,5) = "foo\\r"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -18,7 +19,7 @@
│ │ @ InstanceVariableReadNode (location: (2,6)-(2,10)) │ │ @ InstanceVariableReadNode (location: (2,6)-(2,10))
│ │ └── name: :@bar │ │ └── name: :@bar
│ └── @ StringNode (location: (2,10)-(3,0)) │ └── @ StringNode (location: (2,10)-(3,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (2,10)-(3,0) = "\n" │ ├── content_loc: (2,10)-(3,0) = "\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(1,5)) @ StatementsNode (location: (1,0)-(1,5))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,5)) └── @ InterpolatedStringNode (location: (1,0)-(1,5))
├── flags: ∅
├── opening_loc: (1,0)-(1,5) = "<<EOS" ├── opening_loc: (1,0)-(1,5) = "<<EOS"
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (2,0)-(2,5)) │ ├── @ StringNode (location: (2,0)-(2,5))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (2,0)-(2,5) = "foo\\r" │ │ ├── content_loc: (2,0)-(2,5) = "foo\\r"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -18,7 +19,7 @@
│ │ @ InstanceVariableReadNode (location: (2,6)-(2,10)) │ │ @ InstanceVariableReadNode (location: (2,6)-(2,10))
│ │ └── name: :@bar │ │ └── name: :@bar
│ └── @ StringNode (location: (2,10)-(3,0)) │ └── @ StringNode (location: (2,10)-(3,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (2,10)-(3,0) = "\r\n" │ ├── content_loc: (2,10)-(3,0) = "\r\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(3,4)) @ StatementsNode (location: (1,0)-(3,4))
└── body: (length: 2) └── body: (length: 2)
├── @ InterpolatedStringNode (location: (1,0)-(2,2)) ├── @ InterpolatedStringNode (location: (1,0)-(2,2))
│ ├── flags: ∅
│ ├── opening_loc: (1,0)-(1,1) = "\"" │ ├── opening_loc: (1,0)-(1,1) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (1,1)-(1,4)) │ │ ├── @ StringNode (location: (1,1)-(1,4))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (1,1)-(1,4) = "a\\n" │ │ │ ├── content_loc: (1,1)-(1,4) = "a\\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(4,4)) @ StatementsNode (location: (1,0)-(4,4))
└── body: (length: 2) └── body: (length: 2)
├── @ InterpolatedStringNode (location: (1,0)-(3,2)) ├── @ InterpolatedStringNode (location: (1,0)-(3,2))
│ ├── flags: ∅
│ ├── opening_loc: (1,0)-(1,1) = "\"" │ ├── opening_loc: (1,0)-(1,1) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (1,1)-(2,0)) │ │ ├── @ StringNode (location: (1,1)-(2,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (1,1)-(2,0) = "a\n" │ │ │ ├── content_loc: (1,1)-(2,0) = "a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅

View File

@ -4,15 +4,17 @@
@ StatementsNode (location: (1,0)-(2,6)) @ StatementsNode (location: (1,0)-(2,6))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(2,6)) └── @ InterpolatedStringNode (location: (1,0)-(2,6))
├── flags: ∅
├── opening_loc: ∅ ├── opening_loc: ∅
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ StringNode (location: (1,0)-(1,3)) │ ├── @ StringNode (location: (1,0)-(1,3))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: (1,0)-(1,1) = "\"" │ │ ├── opening_loc: (1,0)-(1,1) = "\""
│ │ ├── content_loc: (1,1)-(1,2) = "a" │ │ ├── content_loc: (1,1)-(1,2) = "a"
│ │ ├── closing_loc: (1,2)-(1,3) = "\"" │ │ ├── closing_loc: (1,2)-(1,3) = "\""
│ │ └── unescaped: "a" │ │ └── unescaped: "a"
│ └── @ InterpolatedStringNode (location: (2,0)-(2,6)) │ └── @ InterpolatedStringNode (location: (2,0)-(2,6))
│ ├── flags: ∅
│ ├── opening_loc: (2,0)-(2,1) = "\"" │ ├── opening_loc: (2,0)-(2,1) = "\""
│ ├── parts: (length: 1) │ ├── parts: (length: 1)
│ │ └── @ EmbeddedStatementsNode (location: (2,1)-(2,5)) │ │ └── @ EmbeddedStatementsNode (location: (2,1)-(2,5))

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(1,4)) @ StatementsNode (location: (1,0)-(1,4))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,4)) └── @ InterpolatedStringNode (location: (1,0)-(1,4))
├── flags: ∅
├── opening_loc: (1,0)-(1,4) = "<<-A" ├── opening_loc: (1,0)-(1,4) = "<<-A"
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (2,0)-(3,0)) │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (2,0)-(3,0) = "a\n" │ │ ├── content_loc: (2,0)-(3,0) = "a\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -29,7 +30,7 @@
│ │ │ └── block: ∅ │ │ │ └── block: ∅
│ │ └── closing_loc: (3,3)-(3,4) = "}" │ │ └── closing_loc: (3,3)-(3,4) = "}"
│ └── @ StringNode (location: (3,4)-(4,0)) │ └── @ StringNode (location: (3,4)-(4,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (3,4)-(4,0) = "\n" │ ├── content_loc: (3,4)-(4,0) = "\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -13,6 +13,7 @@
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "1" │ │ └── unescaped: "1"
│ ├── @ InterpolatedStringNode (location: (1,6)-(1,12)) │ ├── @ InterpolatedStringNode (location: (1,6)-(1,12))
│ │ ├── flags: ∅
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── parts: (length: 1) │ │ ├── parts: (length: 1)
│ │ │ └── @ EmbeddedStatementsNode (location: (1,6)-(1,12)) │ │ │ └── @ EmbeddedStatementsNode (location: (1,6)-(1,12))

View File

@ -16,7 +16,7 @@
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (1,5)-(1,6)) │ │ │ ├── @ StringNode (location: (1,5)-(1,6))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (1,5)-(1,6) = "b" │ │ │ │ ├── content_loc: (1,5)-(1,6) = "b"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(1,8)) @ StatementsNode (location: (1,0)-(1,8))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,8)) └── @ InterpolatedStringNode (location: (1,0)-(1,8))
├── flags: ∅
├── opening_loc: (1,0)-(1,1) = "\"" ├── opening_loc: (1,0)-(1,1) = "\""
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ StringNode (location: (1,1)-(1,3)) │ ├── @ StringNode (location: (1,1)-(1,3))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,1)-(1,3) = "a " │ │ ├── content_loc: (1,1)-(1,3) = "a "
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(1,16)) @ StatementsNode (location: (1,0)-(1,16))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,16)) └── @ InterpolatedStringNode (location: (1,0)-(1,16))
├── flags: ∅
├── opening_loc: (1,0)-(1,1) = "\"" ├── opening_loc: (1,0)-(1,1) = "\""
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (1,1)-(1,3)) │ ├── @ StringNode (location: (1,1)-(1,3))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,1)-(1,3) = "a " │ │ ├── content_loc: (1,1)-(1,3) = "a "
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -29,7 +30,7 @@
│ │ │ └── block: ∅ │ │ │ └── block: ∅
│ │ └── closing_loc: (1,6)-(1,7) = "}" │ │ └── closing_loc: (1,6)-(1,7) = "}"
│ └── @ StringNode (location: (1,7)-(1,15)) │ └── @ StringNode (location: (1,7)-(1,15))
│ ├── flags: forced_utf8_encoding │ ├── flags: forced_utf8_encoding, frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (1,7)-(1,15) = "\\302\\275" │ ├── content_loc: (1,7)-(1,15) = "\\302\\275"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -4,6 +4,7 @@
@ StatementsNode (location: (1,0)-(1,4)) @ StatementsNode (location: (1,0)-(1,4))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,4)) └── @ InterpolatedStringNode (location: (1,0)-(1,4))
├── flags: ∅
├── opening_loc: (1,0)-(1,4) = "<<\"\"" ├── opening_loc: (1,0)-(1,4) = "<<\"\""
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ EmbeddedStatementsNode (location: (2,0)-(2,4)) │ ├── @ EmbeddedStatementsNode (location: (2,0)-(2,4))
@ -23,7 +24,7 @@
│ │ │ └── block: ∅ │ │ │ └── block: ∅
│ │ └── closing_loc: (2,3)-(2,4) = "}" │ │ └── closing_loc: (2,3)-(2,4) = "}"
│ └── @ StringNode (location: (2,4)-(4,0)) │ └── @ StringNode (location: (2,4)-(4,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (2,4)-(4,0) = "\nblah2\n" │ ├── content_loc: (2,4)-(4,0) = "\nblah2\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -4,6 +4,7 @@
@ StatementsNode (location: (1,0)-(1,23)) @ StatementsNode (location: (1,0)-(1,23))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,23)) └── @ InterpolatedStringNode (location: (1,0)-(1,23))
├── flags: ∅
├── opening_loc: (1,0)-(1,1) = "\"" ├── opening_loc: (1,0)-(1,1) = "\""
├── parts: (length: 1) ├── parts: (length: 1)
│ └── @ EmbeddedStatementsNode (location: (1,1)-(1,22)) │ └── @ EmbeddedStatementsNode (location: (1,1)-(1,22))

View File

@ -4,16 +4,17 @@
@ StatementsNode (location: (1,0)-(2,66)) @ StatementsNode (location: (1,0)-(2,66))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(2,66)) └── @ InterpolatedStringNode (location: (1,0)-(2,66))
├── flags: ∅
├── opening_loc: ∅ ├── opening_loc: ∅
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ StringNode (location: (1,0)-(1,62)) │ ├── @ StringNode (location: (1,0)-(1,62))
│ │ ├── flags: forced_utf8_encoding │ │ ├── flags: forced_utf8_encoding, frozen
│ │ ├── opening_loc: (1,0)-(1,1) = "\"" │ │ ├── opening_loc: (1,0)-(1,1) = "\""
│ │ ├── content_loc: (1,1)-(1,61) = "\\xE3\\xD3\\x8B\\xE3\\x83\\xBC\\x83\\xE3\\x83\\xE3\\x82\\xB3\\xA3\\x82\\x99" │ │ ├── content_loc: (1,1)-(1,61) = "\\xE3\\xD3\\x8B\\xE3\\x83\\xBC\\x83\\xE3\\x83\\xE3\\x82\\xB3\\xA3\\x82\\x99"
│ │ ├── closing_loc: (1,61)-(1,62) = "\"" │ │ ├── closing_loc: (1,61)-(1,62) = "\""
│ │ └── unescaped: "\xE3Ӌー\x83\xE3\x83コ\xA3\x82\x99" │ │ └── unescaped: "\xE3Ӌー\x83\xE3\x83コ\xA3\x82\x99"
│ └── @ StringNode (location: (2,8)-(2,66)) │ └── @ StringNode (location: (2,8)-(2,66))
│ ├── flags: forced_utf8_encoding │ ├── flags: forced_utf8_encoding, frozen
│ ├── opening_loc: (2,8)-(2,9) = "\"" │ ├── opening_loc: (2,8)-(2,9) = "\""
│ ├── content_loc: (2,9)-(2,65) = "\\xE3\\x83\\xB3\\xE3\\x83\\x8F\\xE3\\x82\\x9A\\xC3\\xBD;foo@bar.com" │ ├── content_loc: (2,9)-(2,65) = "\\xE3\\x83\\xB3\\xE3\\x83\\x8F\\xE3\\x82\\x9A\\xC3\\xBD;foo@bar.com"
│ ├── closing_loc: (2,65)-(2,66) = "\"" │ ├── closing_loc: (2,65)-(2,66) = "\""

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(1,26)) @ StatementsNode (location: (1,0)-(1,26))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,26)) └── @ InterpolatedStringNode (location: (1,0)-(1,26))
├── flags: ∅
├── opening_loc: (1,0)-(1,3) = "%Q[" ├── opening_loc: (1,0)-(1,3) = "%Q["
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (1,3)-(1,11)) │ ├── @ StringNode (location: (1,3)-(1,11))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,3)-(1,11) = "before [" │ │ ├── content_loc: (1,3)-(1,11) = "before ["
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -29,7 +30,7 @@
│ │ │ └── block: ∅ │ │ │ └── block: ∅
│ │ └── closing_loc: (1,17)-(1,18) = "}" │ │ └── closing_loc: (1,17)-(1,18) = "}"
│ └── @ StringNode (location: (1,18)-(1,25)) │ └── @ StringNode (location: (1,18)-(1,25))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (1,18)-(1,25) = "] after" │ ├── content_loc: (1,18)-(1,25) = "] after"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(1,20)) @ StatementsNode (location: (1,0)-(1,20))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,20)) └── @ InterpolatedStringNode (location: (1,0)-(1,20))
├── flags: ∅
├── opening_loc: (1,0)-(1,2) = "%{" ├── opening_loc: (1,0)-(1,2) = "%{"
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (1,2)-(1,5)) │ ├── @ StringNode (location: (1,2)-(1,5))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,2)-(1,5) = " { " │ │ ├── content_loc: (1,2)-(1,5) = " { "
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -18,6 +19,7 @@
│ │ │ @ StatementsNode (location: (1,8)-(1,14)) │ │ │ @ StatementsNode (location: (1,8)-(1,14))
│ │ │ └── body: (length: 1) │ │ │ └── body: (length: 1)
│ │ │ └── @ InterpolatedStringNode (location: (1,8)-(1,14)) │ │ │ └── @ InterpolatedStringNode (location: (1,8)-(1,14))
│ │ │ ├── flags: ∅
│ │ │ ├── opening_loc: (1,8)-(1,9) = "\"" │ │ │ ├── opening_loc: (1,8)-(1,9) = "\""
│ │ │ ├── parts: (length: 1) │ │ │ ├── parts: (length: 1)
│ │ │ │ └── @ EmbeddedStatementsNode (location: (1,9)-(1,13)) │ │ │ │ └── @ EmbeddedStatementsNode (location: (1,9)-(1,13))
@ -32,7 +34,7 @@
│ │ │ └── closing_loc: (1,13)-(1,14) = "\"" │ │ │ └── closing_loc: (1,13)-(1,14) = "\""
│ │ └── closing_loc: (1,15)-(1,16) = "}" │ │ └── closing_loc: (1,15)-(1,16) = "}"
│ └── @ StringNode (location: (1,16)-(1,19)) │ └── @ StringNode (location: (1,16)-(1,19))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (1,16)-(1,19) = " } " │ ├── content_loc: (1,16)-(1,19) = " } "
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(1,10)) @ StatementsNode (location: (1,0)-(1,10))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,10)) └── @ InterpolatedStringNode (location: (1,0)-(1,10))
├── flags: ∅
├── opening_loc: (1,0)-(1,1) = "\"" ├── opening_loc: (1,0)-(1,1) = "\""
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ StringNode (location: (1,1)-(1,3)) │ ├── @ StringNode (location: (1,1)-(1,3))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,1)-(1,3) = "a " │ │ ├── content_loc: (1,1)-(1,3) = "a "
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(1,12)) @ StatementsNode (location: (1,0)-(1,12))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,12)) └── @ InterpolatedStringNode (location: (1,0)-(1,12))
├── flags: ∅
├── opening_loc: (1,0)-(1,1) = "\"" ├── opening_loc: (1,0)-(1,1) = "\""
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (1,1)-(1,3)) │ ├── @ StringNode (location: (1,1)-(1,3))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,1)-(1,3) = "a " │ │ ├── content_loc: (1,1)-(1,3) = "a "
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -25,7 +26,7 @@
│ │ │ └── unescaped: "b" │ │ │ └── unescaped: "b"
│ │ └── closing_loc: (1,8)-(1,9) = "}" │ │ └── closing_loc: (1,8)-(1,9) = "}"
│ └── @ StringNode (location: (1,9)-(1,11)) │ └── @ StringNode (location: (1,9)-(1,11))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (1,9)-(1,11) = " c" │ ├── content_loc: (1,9)-(1,11) = " c"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -7,6 +7,7 @@
├── flags: ∅ ├── flags: ∅
├── elements: (length: 1) ├── elements: (length: 1)
│ └── @ InterpolatedStringNode (location: (1,3)-(1,8)) │ └── @ InterpolatedStringNode (location: (1,3)-(1,8))
│ ├── flags: ∅
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ EmbeddedStatementsNode (location: (1,3)-(1,7)) │ │ ├── @ EmbeddedStatementsNode (location: (1,3)-(1,7))
@ -19,7 +20,7 @@
│ │ │ │ └── value: 1 │ │ │ │ └── value: 1
│ │ │ └── closing_loc: (1,6)-(1,7) = "}" │ │ │ └── closing_loc: (1,6)-(1,7) = "}"
│ │ └── @ StringNode (location: (1,7)-(1,8)) │ │ └── @ StringNode (location: (1,7)-(1,8))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,7)-(1,8) = "b" │ │ ├── content_loc: (1,7)-(1,8) = "b"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -36,13 +36,13 @@
│ │ │ │ ├── opening_loc: (4,13)-(4,14) = "/" │ │ │ │ ├── opening_loc: (4,13)-(4,14) = "/"
│ │ │ │ ├── parts: (length: 2) │ │ │ │ ├── parts: (length: 2)
│ │ │ │ │ ├── @ StringNode (location: (4,14)-(4,16)) │ │ │ │ │ ├── @ StringNode (location: (4,14)-(4,16))
│ │ │ │ │ │ ├── flags: │ │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ │ ├── content_loc: (4,14)-(4,16) = "b\\" │ │ │ │ │ │ ├── content_loc: (4,14)-(4,16) = "b\\"
│ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ │ │ └── unescaped: "b" │ │ │ │ │ │ └── unescaped: "b"
│ │ │ │ │ └── @ StringNode (location: (7,0)-(7,1)) │ │ │ │ │ └── @ StringNode (location: (7,0)-(7,1))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (7,0)-(7,1) = "b" │ │ │ │ │ ├── content_loc: (7,0)-(7,1) = "b"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
@ -76,16 +76,17 @@
│ │ │ ├── closing_loc: (12,0)-(13,0) = "A\n" │ │ │ ├── closing_loc: (12,0)-(13,0) = "A\n"
│ │ │ └── unescaped: "c\n" │ │ │ └── unescaped: "c\n"
│ │ └── @ InterpolatedStringNode (location: (10,9)-(13,2)) │ │ └── @ InterpolatedStringNode (location: (10,9)-(13,2))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (10,9)-(10,10) = "\"" │ │ ├── opening_loc: (10,9)-(10,10) = "\""
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (10,10)-(10,12)) │ │ │ ├── @ StringNode (location: (10,10)-(10,12))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (10,10)-(10,12) = "d\\" │ │ │ │ ├── content_loc: (10,10)-(10,12) = "d\\"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: "d" │ │ │ │ └── unescaped: "d"
│ │ │ └── @ StringNode (location: (13,0)-(13,1)) │ │ │ └── @ StringNode (location: (13,0)-(13,1))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (13,0)-(13,1) = "d" │ │ │ ├── content_loc: (13,0)-(13,1) = "d"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -111,16 +112,17 @@
│ │ │ ├── closing_loc: (18,0)-(19,0) = "A\n" │ │ │ ├── closing_loc: (18,0)-(19,0) = "A\n"
│ │ │ └── unescaped: "e\n" │ │ │ └── unescaped: "e\n"
│ │ └── @ InterpolatedStringNode (location: (16,9)-(19,2)) │ │ └── @ InterpolatedStringNode (location: (16,9)-(19,2))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (16,9)-(16,12) = "%q[" │ │ ├── opening_loc: (16,9)-(16,12) = "%q["
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (16,12)-(16,14)) │ │ │ ├── @ StringNode (location: (16,12)-(16,14))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (16,12)-(16,14) = "f\\" │ │ │ │ ├── content_loc: (16,12)-(16,14) = "f\\"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: "f\\\n" │ │ │ │ └── unescaped: "f\\\n"
│ │ │ └── @ StringNode (location: (19,0)-(19,1)) │ │ │ └── @ StringNode (location: (19,0)-(19,1))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (19,0)-(19,1) = "f" │ │ │ ├── content_loc: (19,0)-(19,1) = "f"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -146,16 +148,17 @@
│ │ │ ├── closing_loc: (24,0)-(25,0) = "A\n" │ │ │ ├── closing_loc: (24,0)-(25,0) = "A\n"
│ │ │ └── unescaped: "g\n" │ │ │ └── unescaped: "g\n"
│ │ └── @ InterpolatedStringNode (location: (22,9)-(25,2)) │ │ └── @ InterpolatedStringNode (location: (22,9)-(25,2))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (22,9)-(22,12) = "%Q[" │ │ ├── opening_loc: (22,9)-(22,12) = "%Q["
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (22,12)-(22,14)) │ │ │ ├── @ StringNode (location: (22,12)-(22,14))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (22,12)-(22,14) = "h\\" │ │ │ │ ├── content_loc: (22,12)-(22,14) = "h\\"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: "h" │ │ │ │ └── unescaped: "h"
│ │ │ └── @ StringNode (location: (25,0)-(25,1)) │ │ │ └── @ StringNode (location: (25,0)-(25,1))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (25,0)-(25,1) = "h" │ │ │ ├── content_loc: (25,0)-(25,1) = "h"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -220,16 +223,17 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ ├── elements: (length: 1) │ │ ├── elements: (length: 1)
│ │ │ └── @ InterpolatedStringNode (location: (35,12)-(38,1)) │ │ │ └── @ InterpolatedStringNode (location: (35,12)-(38,1))
│ │ │ ├── flags: ∅
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── parts: (length: 2) │ │ │ ├── parts: (length: 2)
│ │ │ │ ├── @ StringNode (location: (35,12)-(35,14)) │ │ │ │ ├── @ StringNode (location: (35,12)-(35,14))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (35,12)-(35,14) = "l\\" │ │ │ │ │ ├── content_loc: (35,12)-(35,14) = "l\\"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ │ └── unescaped: "l\n" │ │ │ │ │ └── unescaped: "l\n"
│ │ │ │ └── @ StringNode (location: (38,0)-(38,1)) │ │ │ │ └── @ StringNode (location: (38,0)-(38,1))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (38,0)-(38,1) = "l" │ │ │ │ ├── content_loc: (38,0)-(38,1) = "l"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -299,13 +303,13 @@
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── parts: (length: 2) │ │ │ ├── parts: (length: 2)
│ │ │ │ ├── @ StringNode (location: (48,12)-(48,14)) │ │ │ │ ├── @ StringNode (location: (48,12)-(48,14))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (48,12)-(48,14) = "p\\" │ │ │ │ │ ├── content_loc: (48,12)-(48,14) = "p\\"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ │ └── unescaped: "p\n" │ │ │ │ │ └── unescaped: "p\n"
│ │ │ │ └── @ StringNode (location: (48,12)-(48,14)) │ │ │ │ └── @ StringNode (location: (48,12)-(48,14))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (48,12)-(48,14) = "p\\" │ │ │ │ ├── content_loc: (48,12)-(48,14) = "p\\"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -331,13 +335,13 @@
│ │ │ ├── opening_loc: (53,5)-(53,6) = "/" │ │ │ ├── opening_loc: (53,5)-(53,6) = "/"
│ │ │ ├── parts: (length: 2) │ │ │ ├── parts: (length: 2)
│ │ │ │ ├── @ StringNode (location: (53,6)-(53,7)) │ │ │ │ ├── @ StringNode (location: (53,6)-(53,7))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (53,6)-(53,7) = "\\" │ │ │ │ │ ├── content_loc: (53,6)-(53,7) = "\\"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ │ └── unescaped: "" │ │ │ │ │ └── unescaped: ""
│ │ │ │ └── @ StringNode (location: (55,0)-(55,6)) │ │ │ │ └── @ StringNode (location: (55,0)-(55,6))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (55,0)-(55,6) = "(?<a>)" │ │ │ │ ├── content_loc: (55,0)-(55,6) = "(?<a>)"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -373,13 +377,13 @@
│ ├── opening_loc: (57,5)-(57,7) = ":'" │ ├── opening_loc: (57,5)-(57,7) = ":'"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (57,7)-(58,0)) │ │ ├── @ StringNode (location: (57,7)-(58,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (57,7)-(58,0) = "a\n" │ │ │ ├── content_loc: (57,7)-(58,0) = "a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a\n" │ │ │ └── unescaped: "a\n"
│ │ └── @ StringNode (location: (59,0)-(59,1)) │ │ └── @ StringNode (location: (59,0)-(59,1))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (59,0)-(59,1) = "b" │ │ ├── content_loc: (59,0)-(59,1) = "b"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -395,13 +399,13 @@
├── opening_loc: (61,5)-(61,7) = ":\"" ├── opening_loc: (61,5)-(61,7) = ":\""
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ StringNode (location: (61,7)-(62,0)) │ ├── @ StringNode (location: (61,7)-(62,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (61,7)-(62,0) = "a\n" │ │ ├── content_loc: (61,7)-(62,0) = "a\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "a\n" │ │ └── unescaped: "a\n"
│ └── @ StringNode (location: (63,0)-(63,1)) │ └── @ StringNode (location: (63,0)-(63,1))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (63,0)-(63,1) = "b" │ ├── content_loc: (63,0)-(63,1) = "b"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -93,6 +93,7 @@
│ ├── closing_loc: (29,5)-(29,6) = "`" │ ├── closing_loc: (29,5)-(29,6) = "`"
│ └── unescaped: "abc" │ └── unescaped: "abc"
├── @ InterpolatedStringNode (location: (31,0)-(31,8)) ├── @ InterpolatedStringNode (location: (31,0)-(31,8))
│ ├── flags: ∅
│ ├── opening_loc: (31,0)-(31,1) = "\"" │ ├── opening_loc: (31,0)-(31,1) = "\""
│ ├── parts: (length: 1) │ ├── parts: (length: 1)
│ │ └── @ EmbeddedVariableNode (location: (31,1)-(31,7)) │ │ └── @ EmbeddedVariableNode (location: (31,1)-(31,7))
@ -108,10 +109,11 @@
│ ├── closing_loc: (33,5)-(33,6) = "\\" │ ├── closing_loc: (33,5)-(33,6) = "\\"
│ └── unescaped: "abc" │ └── unescaped: "abc"
├── @ InterpolatedStringNode (location: (35,0)-(35,17)) ├── @ InterpolatedStringNode (location: (35,0)-(35,17))
│ ├── flags: ∅
│ ├── opening_loc: (35,0)-(35,2) = "%{" │ ├── opening_loc: (35,0)-(35,2) = "%{"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (35,2)-(35,6)) │ │ ├── @ StringNode (location: (35,2)-(35,6))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (35,2)-(35,6) = "aaa " │ │ │ ├── content_loc: (35,2)-(35,6) = "aaa "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -133,7 +135,7 @@
│ │ │ │ └── block: ∅ │ │ │ │ └── block: ∅
│ │ │ └── closing_loc: (35,11)-(35,12) = "}" │ │ │ └── closing_loc: (35,11)-(35,12) = "}"
│ │ └── @ StringNode (location: (35,12)-(35,16)) │ │ └── @ StringNode (location: (35,12)-(35,16))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (35,12)-(35,16) = " ccc" │ │ ├── content_loc: (35,12)-(35,16) = " ccc"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -207,10 +209,11 @@
│ ├── closing_loc: (53,6)-(53,7) = "\"" │ ├── closing_loc: (53,6)-(53,7) = "\""
│ └── unescaped: "\#@---" │ └── unescaped: "\#@---"
├── @ InterpolatedStringNode (location: (55,0)-(55,16)) ├── @ InterpolatedStringNode (location: (55,0)-(55,16))
│ ├── flags: ∅
│ ├── opening_loc: (55,0)-(55,1) = "\"" │ ├── opening_loc: (55,0)-(55,1) = "\""
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (55,1)-(55,5)) │ │ ├── @ StringNode (location: (55,1)-(55,5))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (55,1)-(55,5) = "aaa " │ │ │ ├── content_loc: (55,1)-(55,5) = "aaa "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -232,7 +235,7 @@
│ │ │ │ └── block: ∅ │ │ │ │ └── block: ∅
│ │ │ └── closing_loc: (55,10)-(55,11) = "}" │ │ │ └── closing_loc: (55,10)-(55,11) = "}"
│ │ └── @ StringNode (location: (55,11)-(55,15)) │ │ └── @ StringNode (location: (55,11)-(55,15))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (55,11)-(55,15) = " ccc" │ │ ├── content_loc: (55,11)-(55,15) = " ccc"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -334,10 +337,11 @@
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a" │ │ │ └── unescaped: "a"
│ │ ├── @ InterpolatedStringNode (location: (67,5)-(67,11)) │ │ ├── @ InterpolatedStringNode (location: (67,5)-(67,11))
│ │ │ ├── flags: ∅
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── parts: (length: 3) │ │ │ ├── parts: (length: 3)
│ │ │ │ ├── @ StringNode (location: (67,5)-(67,6)) │ │ │ │ ├── @ StringNode (location: (67,5)-(67,6))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (67,5)-(67,6) = "b" │ │ │ │ │ ├── content_loc: (67,5)-(67,6) = "b"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
@ -359,7 +363,7 @@
│ │ │ │ │ │ └── block: ∅ │ │ │ │ │ │ └── block: ∅
│ │ │ │ │ └── closing_loc: (67,9)-(67,10) = "}" │ │ │ │ │ └── closing_loc: (67,9)-(67,10) = "}"
│ │ │ │ └── @ StringNode (location: (67,10)-(67,11)) │ │ │ │ └── @ StringNode (location: (67,10)-(67,11))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (67,10)-(67,11) = "d" │ │ │ │ ├── content_loc: (67,10)-(67,11) = "d"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -432,6 +436,7 @@
│ ├── closing_loc: (79,14)-(79,15) = "'" │ ├── closing_loc: (79,14)-(79,15) = "'"
│ └── unescaped: "\\ foo \\ bar" │ └── unescaped: "\\ foo \\ bar"
├── @ InterpolatedStringNode (location: (81,0)-(81,7)) ├── @ InterpolatedStringNode (location: (81,0)-(81,7))
│ ├── flags: ∅
│ ├── opening_loc: (81,0)-(81,1) = "\"" │ ├── opening_loc: (81,0)-(81,1) = "\""
│ ├── parts: (length: 1) │ ├── parts: (length: 1)
│ │ └── @ EmbeddedVariableNode (location: (81,1)-(81,6)) │ │ └── @ EmbeddedVariableNode (location: (81,1)-(81,6))
@ -441,6 +446,7 @@
│ │ └── name: :$foo │ │ └── name: :$foo
│ └── closing_loc: (81,6)-(81,7) = "\"" │ └── closing_loc: (81,6)-(81,7) = "\""
├── @ InterpolatedStringNode (location: (83,0)-(83,7)) ├── @ InterpolatedStringNode (location: (83,0)-(83,7))
│ ├── flags: ∅
│ ├── opening_loc: (83,0)-(83,1) = "\"" │ ├── opening_loc: (83,0)-(83,1) = "\""
│ ├── parts: (length: 1) │ ├── parts: (length: 1)
│ │ └── @ EmbeddedVariableNode (location: (83,1)-(83,6)) │ │ └── @ EmbeddedVariableNode (location: (83,1)-(83,6))
@ -492,16 +498,17 @@
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅
│ └── unescaped: "a" │ └── unescaped: "a"
├── @ InterpolatedStringNode (location: (99,0)-(99,6)) ├── @ InterpolatedStringNode (location: (99,0)-(99,6))
│ ├── flags: ∅
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (99,0)-(99,2)) │ │ ├── @ StringNode (location: (99,0)-(99,2))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: (99,0)-(99,1) = "?" │ │ │ ├── opening_loc: (99,0)-(99,1) = "?"
│ │ │ ├── content_loc: (99,1)-(99,2) = "a" │ │ │ ├── content_loc: (99,1)-(99,2) = "a"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a" │ │ │ └── unescaped: "a"
│ │ └── @ StringNode (location: (99,3)-(99,6)) │ │ └── @ StringNode (location: (99,3)-(99,6))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: (99,3)-(99,4) = "\"" │ │ ├── opening_loc: (99,3)-(99,4) = "\""
│ │ ├── content_loc: (99,4)-(99,5) = "a" │ │ ├── content_loc: (99,4)-(99,5) = "a"
│ │ ├── closing_loc: (99,5)-(99,6) = "\"" │ │ ├── closing_loc: (99,5)-(99,6) = "\""

View File

@ -33,7 +33,7 @@
│ ├── opening_loc: (5,0)-(5,2) = ":\"" │ ├── opening_loc: (5,0)-(5,2) = ":\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (5,2)-(5,5)) │ │ ├── @ StringNode (location: (5,2)-(5,5))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (5,2)-(5,5) = "abc" │ │ │ ├── content_loc: (5,2)-(5,5) = "abc"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -234,7 +234,7 @@
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── parts: (length: 2) │ │ │ ├── parts: (length: 2)
│ │ │ │ ├── @ StringNode (location: (39,5)-(39,6)) │ │ │ │ ├── @ StringNode (location: (39,5)-(39,6))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (39,5)-(39,6) = "b" │ │ │ │ │ ├── content_loc: (39,5)-(39,6) = "b"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
@ -262,7 +262,7 @@
│ │ │ │ │ │ └── value: 2 │ │ │ │ │ │ └── value: 2
│ │ │ │ │ └── closing_loc: (39,14)-(39,15) = "}" │ │ │ │ │ └── closing_loc: (39,14)-(39,15) = "}"
│ │ │ │ └── @ StringNode (location: (39,15)-(39,16)) │ │ │ │ └── @ StringNode (location: (39,15)-(39,16))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (39,15)-(39,16) = "c" │ │ │ │ ├── content_loc: (39,15)-(39,16) = "c"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -272,7 +272,7 @@
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (39,17)-(39,18)) │ │ │ ├── @ StringNode (location: (39,17)-(39,18))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (39,17)-(39,18) = "d" │ │ │ │ ├── content_loc: (39,17)-(39,18) = "d"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -287,7 +287,7 @@
│ │ │ │ │ └── value: 3 │ │ │ │ │ └── value: 3
│ │ │ │ └── closing_loc: (39,21)-(39,22) = "}" │ │ │ │ └── closing_loc: (39,21)-(39,22) = "}"
│ │ │ └── @ StringNode (location: (39,22)-(39,23)) │ │ │ └── @ StringNode (location: (39,22)-(39,23))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (39,22)-(39,23) = "f" │ │ │ ├── content_loc: (39,22)-(39,23) = "f"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(94,6)) @ StatementsNode (location: (1,0)-(94,6))
└── body: (length: 19) └── body: (length: 19)
├── @ InterpolatedStringNode (location: (1,0)-(1,6)) ├── @ InterpolatedStringNode (location: (1,0)-(1,6))
│ ├── flags: ∅
│ ├── opening_loc: (1,0)-(1,6) = "<<~EOF" │ ├── opening_loc: (1,0)-(1,6) = "<<~EOF"
│ ├── parts: (length: 4) │ ├── parts: (length: 4)
│ │ ├── @ StringNode (location: (2,0)-(3,0)) │ │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (2,0)-(3,0) = " a\n" │ │ │ ├── content_loc: (2,0)-(3,0) = " a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -22,13 +23,13 @@
│ │ │ │ └── value: 1 │ │ │ │ └── value: 1
│ │ │ └── closing_loc: (3,3)-(3,4) = "}" │ │ │ └── closing_loc: (3,3)-(3,4) = "}"
│ │ ├── @ StringNode (location: (3,4)-(4,0)) │ │ ├── @ StringNode (location: (3,4)-(4,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (3,4)-(4,0) = "\n" │ │ │ ├── content_loc: (3,4)-(4,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "\n" │ │ │ └── unescaped: "\n"
│ │ └── @ StringNode (location: (4,0)-(5,0)) │ │ └── @ StringNode (location: (4,0)-(5,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (4,0)-(5,0) = " a\n" │ │ ├── content_loc: (4,0)-(5,0) = " a\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -41,28 +42,30 @@
│ ├── closing_loc: (9,0)-(10,0) = "EOF\n" │ ├── closing_loc: (9,0)-(10,0) = "EOF\n"
│ └── unescaped: "a\n" │ └── unescaped: "a\n"
├── @ InterpolatedStringNode (location: (11,0)-(11,6)) ├── @ InterpolatedStringNode (location: (11,0)-(11,6))
│ ├── flags: ∅
│ ├── opening_loc: (11,0)-(11,6) = "<<~EOF" │ ├── opening_loc: (11,0)-(11,6) = "<<~EOF"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (12,0)-(13,0)) │ │ ├── @ StringNode (location: (12,0)-(13,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (12,0)-(13,0) = "\ta\n" │ │ │ ├── content_loc: (12,0)-(13,0) = "\ta\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "\ta\n" │ │ │ └── unescaped: "\ta\n"
│ │ ├── @ StringNode (location: (13,0)-(14,0)) │ │ ├── @ StringNode (location: (13,0)-(14,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (13,0)-(14,0) = " b\n" │ │ │ ├── content_loc: (13,0)-(14,0) = " b\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "b\n" │ │ │ └── unescaped: "b\n"
│ │ └── @ StringNode (location: (14,0)-(15,0)) │ │ └── @ StringNode (location: (14,0)-(15,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (14,0)-(15,0) = "\t\tc\n" │ │ ├── content_loc: (14,0)-(15,0) = "\t\tc\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\t\tc\n" │ │ └── unescaped: "\t\tc\n"
│ └── closing_loc: (15,0)-(16,0) = "EOF\n" │ └── closing_loc: (15,0)-(16,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (17,0)-(17,6)) ├── @ InterpolatedStringNode (location: (17,0)-(17,6))
│ ├── flags: ∅
│ ├── opening_loc: (17,0)-(17,6) = "<<~EOF" │ ├── opening_loc: (17,0)-(17,6) = "<<~EOF"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ EmbeddedStatementsNode (location: (18,2)-(18,6)) │ │ ├── @ EmbeddedStatementsNode (location: (18,2)-(18,6))
@ -75,17 +78,18 @@
│ │ │ │ └── value: 1 │ │ │ │ └── value: 1
│ │ │ └── closing_loc: (18,5)-(18,6) = "}" │ │ │ └── closing_loc: (18,5)-(18,6) = "}"
│ │ └── @ StringNode (location: (18,6)-(19,0)) │ │ └── @ StringNode (location: (18,6)-(19,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (18,6)-(19,0) = " a\n" │ │ ├── content_loc: (18,6)-(19,0) = " a\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: " a\n" │ │ └── unescaped: " a\n"
│ └── closing_loc: (19,0)-(20,0) = "EOF\n" │ └── closing_loc: (19,0)-(20,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (21,0)-(21,6)) ├── @ InterpolatedStringNode (location: (21,0)-(21,6))
│ ├── flags: ∅
│ ├── opening_loc: (21,0)-(21,6) = "<<~EOF" │ ├── opening_loc: (21,0)-(21,6) = "<<~EOF"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (22,0)-(22,4)) │ │ ├── @ StringNode (location: (22,0)-(22,4))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (22,0)-(22,4) = " a " │ │ │ ├── content_loc: (22,0)-(22,4) = " a "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -100,17 +104,18 @@
│ │ │ │ └── value: 1 │ │ │ │ └── value: 1
│ │ │ └── closing_loc: (22,7)-(22,8) = "}" │ │ │ └── closing_loc: (22,7)-(22,8) = "}"
│ │ └── @ StringNode (location: (22,8)-(23,0)) │ │ └── @ StringNode (location: (22,8)-(23,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (22,8)-(23,0) = "\n" │ │ ├── content_loc: (22,8)-(23,0) = "\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\n" │ │ └── unescaped: "\n"
│ └── closing_loc: (23,0)-(24,0) = "EOF\n" │ └── closing_loc: (23,0)-(24,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (25,0)-(25,6)) ├── @ InterpolatedStringNode (location: (25,0)-(25,6))
│ ├── flags: ∅
│ ├── opening_loc: (25,0)-(25,6) = "<<~EOF" │ ├── opening_loc: (25,0)-(25,6) = "<<~EOF"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (26,0)-(27,0)) │ │ ├── @ StringNode (location: (26,0)-(27,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (26,0)-(27,0) = " a\n" │ │ │ ├── content_loc: (26,0)-(27,0) = " a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -125,17 +130,18 @@
│ │ │ │ └── value: 1 │ │ │ │ └── value: 1
│ │ │ └── closing_loc: (27,4)-(27,5) = "}" │ │ │ └── closing_loc: (27,4)-(27,5) = "}"
│ │ └── @ StringNode (location: (27,5)-(28,0)) │ │ └── @ StringNode (location: (27,5)-(28,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (27,5)-(28,0) = "\n" │ │ ├── content_loc: (27,5)-(28,0) = "\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\n" │ │ └── unescaped: "\n"
│ └── closing_loc: (28,0)-(29,0) = "EOF\n" │ └── closing_loc: (28,0)-(29,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (30,0)-(30,6)) ├── @ InterpolatedStringNode (location: (30,0)-(30,6))
│ ├── flags: ∅
│ ├── opening_loc: (30,0)-(30,6) = "<<~EOF" │ ├── opening_loc: (30,0)-(30,6) = "<<~EOF"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (31,0)-(32,0)) │ │ ├── @ StringNode (location: (31,0)-(32,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (31,0)-(32,0) = " a\n" │ │ │ ├── content_loc: (31,0)-(32,0) = " a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -150,55 +156,58 @@
│ │ │ │ └── value: 1 │ │ │ │ └── value: 1
│ │ │ └── closing_loc: (32,5)-(32,6) = "}" │ │ │ └── closing_loc: (32,5)-(32,6) = "}"
│ │ └── @ StringNode (location: (32,6)-(33,0)) │ │ └── @ StringNode (location: (32,6)-(33,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (32,6)-(33,0) = "\n" │ │ ├── content_loc: (32,6)-(33,0) = "\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\n" │ │ └── unescaped: "\n"
│ └── closing_loc: (33,0)-(34,0) = "EOF\n" │ └── closing_loc: (33,0)-(34,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (35,0)-(35,6)) ├── @ InterpolatedStringNode (location: (35,0)-(35,6))
│ ├── flags: ∅
│ ├── opening_loc: (35,0)-(35,6) = "<<~EOF" │ ├── opening_loc: (35,0)-(35,6) = "<<~EOF"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (36,0)-(37,0)) │ │ ├── @ StringNode (location: (36,0)-(37,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (36,0)-(37,0) = " a\n" │ │ │ ├── content_loc: (36,0)-(37,0) = " a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a\n" │ │ │ └── unescaped: "a\n"
│ │ └── @ StringNode (location: (37,0)-(38,0)) │ │ └── @ StringNode (location: (37,0)-(38,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (37,0)-(38,0) = " b\n" │ │ ├── content_loc: (37,0)-(38,0) = " b\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "b\n" │ │ └── unescaped: "b\n"
│ └── closing_loc: (38,0)-(39,0) = "EOF\n" │ └── closing_loc: (38,0)-(39,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (40,0)-(40,6)) ├── @ InterpolatedStringNode (location: (40,0)-(40,6))
│ ├── flags: ∅
│ ├── opening_loc: (40,0)-(40,6) = "<<~EOF" │ ├── opening_loc: (40,0)-(40,6) = "<<~EOF"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (41,0)-(42,0)) │ │ ├── @ StringNode (location: (41,0)-(42,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (41,0)-(42,0) = " a\n" │ │ │ ├── content_loc: (41,0)-(42,0) = " a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a\n" │ │ │ └── unescaped: "a\n"
│ │ └── @ StringNode (location: (42,0)-(43,0)) │ │ └── @ StringNode (location: (42,0)-(43,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (42,0)-(43,0) = " b\n" │ │ ├── content_loc: (42,0)-(43,0) = " b\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: " b\n" │ │ └── unescaped: " b\n"
│ └── closing_loc: (43,0)-(44,0) = "EOF\n" │ └── closing_loc: (43,0)-(44,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (45,0)-(45,6)) ├── @ InterpolatedStringNode (location: (45,0)-(45,6))
│ ├── flags: ∅
│ ├── opening_loc: (45,0)-(45,6) = "<<~EOF" │ ├── opening_loc: (45,0)-(45,6) = "<<~EOF"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (46,0)-(47,0)) │ │ ├── @ StringNode (location: (46,0)-(47,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (46,0)-(47,0) = "\t\t\ta\n" │ │ │ ├── content_loc: (46,0)-(47,0) = "\t\t\ta\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "\ta\n" │ │ │ └── unescaped: "\ta\n"
│ │ └── @ StringNode (location: (47,0)-(48,0)) │ │ └── @ StringNode (location: (47,0)-(48,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (47,0)-(48,0) = "\t\tb\n" │ │ ├── content_loc: (47,0)-(48,0) = "\t\tb\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -211,136 +220,143 @@
│ ├── closing_loc: (52,0)-(53,0) = "EOF\n" │ ├── closing_loc: (52,0)-(53,0) = "EOF\n"
│ └── unescaped: "a \#{1}\n" │ └── unescaped: "a \#{1}\n"
├── @ InterpolatedStringNode (location: (54,0)-(54,6)) ├── @ InterpolatedStringNode (location: (54,0)-(54,6))
│ ├── flags: ∅
│ ├── opening_loc: (54,0)-(54,6) = "<<~EOF" │ ├── opening_loc: (54,0)-(54,6) = "<<~EOF"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (55,0)-(56,0)) │ │ ├── @ StringNode (location: (55,0)-(56,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (55,0)-(56,0) = "\ta\n" │ │ │ ├── content_loc: (55,0)-(56,0) = "\ta\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a\n" │ │ │ └── unescaped: "a\n"
│ │ └── @ StringNode (location: (56,0)-(57,0)) │ │ └── @ StringNode (location: (56,0)-(57,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (56,0)-(57,0) = "\t b\n" │ │ ├── content_loc: (56,0)-(57,0) = "\t b\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: " b\n" │ │ └── unescaped: " b\n"
│ └── closing_loc: (57,0)-(58,0) = "EOF\n" │ └── closing_loc: (57,0)-(58,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (59,0)-(59,6)) ├── @ InterpolatedStringNode (location: (59,0)-(59,6))
│ ├── flags: ∅
│ ├── opening_loc: (59,0)-(59,6) = "<<~EOF" │ ├── opening_loc: (59,0)-(59,6) = "<<~EOF"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (60,0)-(61,0)) │ │ ├── @ StringNode (location: (60,0)-(61,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (60,0)-(61,0) = "\t a\n" │ │ │ ├── content_loc: (60,0)-(61,0) = "\t a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: " a\n" │ │ │ └── unescaped: " a\n"
│ │ └── @ StringNode (location: (61,0)-(62,0)) │ │ └── @ StringNode (location: (61,0)-(62,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (61,0)-(62,0) = "\tb\n" │ │ ├── content_loc: (61,0)-(62,0) = "\tb\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "b\n" │ │ └── unescaped: "b\n"
│ └── closing_loc: (62,0)-(63,0) = "EOF\n" │ └── closing_loc: (62,0)-(63,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (64,0)-(64,6)) ├── @ InterpolatedStringNode (location: (64,0)-(64,6))
│ ├── flags: ∅
│ ├── opening_loc: (64,0)-(64,6) = "<<~EOF" │ ├── opening_loc: (64,0)-(64,6) = "<<~EOF"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (65,0)-(66,0)) │ │ ├── @ StringNode (location: (65,0)-(66,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (65,0)-(66,0) = " \ta\n" │ │ │ ├── content_loc: (65,0)-(66,0) = " \ta\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a\n" │ │ │ └── unescaped: "a\n"
│ │ └── @ StringNode (location: (66,0)-(67,0)) │ │ └── @ StringNode (location: (66,0)-(67,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (66,0)-(67,0) = " b\n" │ │ ├── content_loc: (66,0)-(67,0) = " b\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "b\n" │ │ └── unescaped: "b\n"
│ └── closing_loc: (67,0)-(68,0) = "EOF\n" │ └── closing_loc: (67,0)-(68,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (69,0)-(69,6)) ├── @ InterpolatedStringNode (location: (69,0)-(69,6))
│ ├── flags: ∅
│ ├── opening_loc: (69,0)-(69,6) = "<<~EOF" │ ├── opening_loc: (69,0)-(69,6) = "<<~EOF"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (70,0)-(71,0)) │ │ ├── @ StringNode (location: (70,0)-(71,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (70,0)-(71,0) = " a\n" │ │ │ ├── content_loc: (70,0)-(71,0) = " a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a\n" │ │ │ └── unescaped: "a\n"
│ │ ├── @ StringNode (location: (71,0)-(72,0)) │ │ ├── @ StringNode (location: (71,0)-(72,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (71,0)-(72,0) = "\n" │ │ │ ├── content_loc: (71,0)-(72,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "\n" │ │ │ └── unescaped: "\n"
│ │ └── @ StringNode (location: (72,0)-(73,0)) │ │ └── @ StringNode (location: (72,0)-(73,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (72,0)-(73,0) = " b\n" │ │ ├── content_loc: (72,0)-(73,0) = " b\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "b\n" │ │ └── unescaped: "b\n"
│ └── closing_loc: (73,0)-(74,0) = "EOF\n" │ └── closing_loc: (73,0)-(74,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (75,0)-(75,6)) ├── @ InterpolatedStringNode (location: (75,0)-(75,6))
│ ├── flags: ∅
│ ├── opening_loc: (75,0)-(75,6) = "<<~EOF" │ ├── opening_loc: (75,0)-(75,6) = "<<~EOF"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (76,0)-(77,0)) │ │ ├── @ StringNode (location: (76,0)-(77,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (76,0)-(77,0) = " a\n" │ │ │ ├── content_loc: (76,0)-(77,0) = " a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a\n" │ │ │ └── unescaped: "a\n"
│ │ ├── @ StringNode (location: (77,0)-(78,0)) │ │ ├── @ StringNode (location: (77,0)-(78,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (77,0)-(78,0) = "\n" │ │ │ ├── content_loc: (77,0)-(78,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "\n" │ │ │ └── unescaped: "\n"
│ │ └── @ StringNode (location: (78,0)-(79,0)) │ │ └── @ StringNode (location: (78,0)-(79,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (78,0)-(79,0) = " b\n" │ │ ├── content_loc: (78,0)-(79,0) = " b\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "b\n" │ │ └── unescaped: "b\n"
│ └── closing_loc: (79,0)-(80,0) = "EOF\n" │ └── closing_loc: (79,0)-(80,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (81,0)-(81,6)) ├── @ InterpolatedStringNode (location: (81,0)-(81,6))
│ ├── flags: ∅
│ ├── opening_loc: (81,0)-(81,6) = "<<~EOF" │ ├── opening_loc: (81,0)-(81,6) = "<<~EOF"
│ ├── parts: (length: 5) │ ├── parts: (length: 5)
│ │ ├── @ StringNode (location: (82,0)-(83,0)) │ │ ├── @ StringNode (location: (82,0)-(83,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (82,0)-(83,0) = " a\n" │ │ │ ├── content_loc: (82,0)-(83,0) = " a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a\n" │ │ │ └── unescaped: "a\n"
│ │ ├── @ StringNode (location: (83,0)-(84,0)) │ │ ├── @ StringNode (location: (83,0)-(84,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (83,0)-(84,0) = "\n" │ │ │ ├── content_loc: (83,0)-(84,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "\n" │ │ │ └── unescaped: "\n"
│ │ ├── @ StringNode (location: (84,0)-(85,0)) │ │ ├── @ StringNode (location: (84,0)-(85,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (84,0)-(85,0) = "\n" │ │ │ ├── content_loc: (84,0)-(85,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "\n" │ │ │ └── unescaped: "\n"
│ │ ├── @ StringNode (location: (85,0)-(86,0)) │ │ ├── @ StringNode (location: (85,0)-(86,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (85,0)-(86,0) = "\n" │ │ │ ├── content_loc: (85,0)-(86,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "\n" │ │ │ └── unescaped: "\n"
│ │ └── @ StringNode (location: (86,0)-(87,0)) │ │ └── @ StringNode (location: (86,0)-(87,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (86,0)-(87,0) = " b\n" │ │ ├── content_loc: (86,0)-(87,0) = " b\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "b\n" │ │ └── unescaped: "b\n"
│ └── closing_loc: (87,0)-(88,0) = "EOF\n" │ └── closing_loc: (87,0)-(88,0) = "EOF\n"
├── @ InterpolatedStringNode (location: (89,0)-(89,6)) ├── @ InterpolatedStringNode (location: (89,0)-(89,6))
│ ├── flags: ∅
│ ├── opening_loc: (89,0)-(89,6) = "<<~EOF" │ ├── opening_loc: (89,0)-(89,6) = "<<~EOF"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (90,0)-(91,0)) │ │ ├── @ StringNode (location: (90,0)-(91,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (90,0)-(91,0) = "\n" │ │ │ ├── content_loc: (90,0)-(91,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -355,13 +371,14 @@
│ │ │ │ └── value: 1 │ │ │ │ └── value: 1
│ │ │ └── closing_loc: (91,5)-(91,6) = "}" │ │ │ └── closing_loc: (91,5)-(91,6) = "}"
│ │ └── @ StringNode (location: (91,6)-(92,0)) │ │ └── @ StringNode (location: (91,6)-(92,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (91,6)-(92,0) = "a\n" │ │ ├── content_loc: (91,6)-(92,0) = "a\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "a\n" │ │ └── unescaped: "a\n"
│ └── closing_loc: (92,0)-(93,0) = " EOF\n" │ └── closing_loc: (92,0)-(93,0) = " EOF\n"
└── @ InterpolatedStringNode (location: (94,0)-(94,6)) └── @ InterpolatedStringNode (location: (94,0)-(94,6))
├── flags: ∅
├── opening_loc: (94,0)-(94,6) = "<<~EOT" ├── opening_loc: (94,0)-(94,6) = "<<~EOT"
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ EmbeddedStatementsNode (location: (95,2)-(95,6)) │ ├── @ EmbeddedStatementsNode (location: (95,2)-(95,6))
@ -374,13 +391,13 @@
│ │ │ └── value: 1 │ │ │ └── value: 1
│ │ └── closing_loc: (95,5)-(95,6) = "}" │ │ └── closing_loc: (95,5)-(95,6) = "}"
│ ├── @ StringNode (location: (95,6)-(96,0)) │ ├── @ StringNode (location: (95,6)-(96,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (95,6)-(96,0) = "\n" │ │ ├── content_loc: (95,6)-(96,0) = "\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\n" │ │ └── unescaped: "\n"
│ └── @ StringNode (location: (96,0)-(97,0)) │ └── @ StringNode (location: (96,0)-(97,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (96,0)-(97,0) = "\tb\n" │ ├── content_loc: (96,0)-(97,0) = "\tb\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -90,7 +90,7 @@
│ │ ├── opening_loc: (15,6)-(15,8) = ":\"" │ │ ├── opening_loc: (15,6)-(15,8) = ":\""
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (15,8)-(15,11)) │ │ │ ├── @ StringNode (location: (15,8)-(15,11))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (15,8)-(15,11) = "abc" │ │ │ │ ├── content_loc: (15,8)-(15,11) = "abc"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅

View File

@ -910,10 +910,11 @@
│ ├── name_loc: (39,0)-(39,1) = "x" │ ├── name_loc: (39,0)-(39,1) = "x"
│ ├── value: │ ├── value:
│ │ @ InterpolatedStringNode (location: (39,4)-(39,14)) │ │ @ InterpolatedStringNode (location: (39,4)-(39,14))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (39,4)-(39,14) = "<<-HEREDOC" │ │ ├── opening_loc: (39,4)-(39,14) = "<<-HEREDOC"
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (40,0)-(40,2)) │ │ │ ├── @ StringNode (location: (40,0)-(40,2))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (40,0)-(40,2) = " " │ │ │ │ ├── content_loc: (40,0)-(40,2) = " "
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -923,7 +924,7 @@
│ │ │ │ ├── statements: ∅ │ │ │ │ ├── statements: ∅
│ │ │ │ └── closing_loc: (40,4)-(40,5) = "}" │ │ │ │ └── closing_loc: (40,4)-(40,5) = "}"
│ │ │ └── @ StringNode (location: (40,5)-(41,0)) │ │ │ └── @ StringNode (location: (40,5)-(41,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (40,5)-(41,0) = "\n" │ │ │ ├── content_loc: (40,5)-(41,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -945,10 +946,11 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (42,4)-(42,14)) │ │ └── @ InterpolatedStringNode (location: (42,4)-(42,14))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (42,4)-(42,14) = "<<-HEREDOC" │ │ ├── opening_loc: (42,4)-(42,14) = "<<-HEREDOC"
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (43,0)-(43,2)) │ │ │ ├── @ StringNode (location: (43,0)-(43,2))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (43,0)-(43,2) = " " │ │ │ │ ├── content_loc: (43,0)-(43,2) = " "
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -958,7 +960,7 @@
│ │ │ │ ├── statements: ∅ │ │ │ │ ├── statements: ∅
│ │ │ │ └── closing_loc: (43,4)-(43,5) = "}" │ │ │ │ └── closing_loc: (43,4)-(43,5) = "}"
│ │ │ └── @ StringNode (location: (43,5)-(44,0)) │ │ │ └── @ StringNode (location: (43,5)-(44,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (43,5)-(44,0) = "\n" │ │ │ ├── content_loc: (43,5)-(44,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -981,10 +983,11 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (45,6)-(45,16)) │ │ └── @ InterpolatedStringNode (location: (45,6)-(45,16))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (45,6)-(45,16) = "<<-HEREDOC" │ │ ├── opening_loc: (45,6)-(45,16) = "<<-HEREDOC"
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (46,0)-(46,2)) │ │ │ ├── @ StringNode (location: (46,0)-(46,2))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (46,0)-(46,2) = " " │ │ │ │ ├── content_loc: (46,0)-(46,2) = " "
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -994,7 +997,7 @@
│ │ │ │ ├── statements: ∅ │ │ │ │ ├── statements: ∅
│ │ │ │ └── closing_loc: (46,4)-(46,5) = "}" │ │ │ │ └── closing_loc: (46,4)-(46,5) = "}"
│ │ │ └── @ StringNode (location: (46,5)-(47,0)) │ │ │ └── @ StringNode (location: (46,5)-(47,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (46,5)-(47,0) = "\n" │ │ │ ├── content_loc: (46,5)-(47,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -1015,10 +1018,11 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (48,2)-(48,12)) │ │ └── @ InterpolatedStringNode (location: (48,2)-(48,12))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (48,2)-(48,12) = "<<-HEREDOC" │ │ ├── opening_loc: (48,2)-(48,12) = "<<-HEREDOC"
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (49,0)-(49,2)) │ │ │ ├── @ StringNode (location: (49,0)-(49,2))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (49,0)-(49,2) = " " │ │ │ │ ├── content_loc: (49,0)-(49,2) = " "
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -1028,7 +1032,7 @@
│ │ │ │ ├── statements: ∅ │ │ │ │ ├── statements: ∅
│ │ │ │ └── closing_loc: (49,4)-(49,5) = "}" │ │ │ │ └── closing_loc: (49,4)-(49,5) = "}"
│ │ │ └── @ StringNode (location: (49,5)-(50,0)) │ │ │ └── @ StringNode (location: (49,5)-(50,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (49,5)-(50,0) = "\n" │ │ │ ├── content_loc: (49,5)-(50,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -1054,10 +1058,11 @@
├── operator_loc: (51,3)-(51,6) = "||=" ├── operator_loc: (51,3)-(51,6) = "||="
└── value: └── value:
@ InterpolatedStringNode (location: (51,7)-(51,17)) @ InterpolatedStringNode (location: (51,7)-(51,17))
├── flags: ∅
├── opening_loc: (51,7)-(51,17) = "<<-HEREDOC" ├── opening_loc: (51,7)-(51,17) = "<<-HEREDOC"
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (52,0)-(52,2)) │ ├── @ StringNode (location: (52,0)-(52,2))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (52,0)-(52,2) = " " │ │ ├── content_loc: (52,0)-(52,2) = " "
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -1067,7 +1072,7 @@
│ │ ├── statements: ∅ │ │ ├── statements: ∅
│ │ └── closing_loc: (52,4)-(52,5) = "}" │ │ └── closing_loc: (52,4)-(52,5) = "}"
│ └── @ StringNode (location: (52,5)-(53,0)) │ └── @ StringNode (location: (52,5)-(53,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (52,5)-(53,0) = "\n" │ ├── content_loc: (52,5)-(53,0) = "\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -1154,10 +1154,11 @@
│ │ @ StatementsNode (location: (127,2)-(127,12)) │ │ @ StatementsNode (location: (127,2)-(127,12))
│ │ └── body: (length: 1) │ │ └── body: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (127,2)-(127,12)) │ │ └── @ InterpolatedStringNode (location: (127,2)-(127,12))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (127,2)-(127,12) = "<<-HEREDOC" │ │ ├── opening_loc: (127,2)-(127,12) = "<<-HEREDOC"
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (128,0)-(128,4)) │ │ │ ├── @ StringNode (location: (128,0)-(128,4))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (128,0)-(128,4) = " " │ │ │ │ ├── content_loc: (128,0)-(128,4) = " "
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -1167,7 +1168,7 @@
│ │ │ │ ├── statements: ∅ │ │ │ │ ├── statements: ∅
│ │ │ │ └── closing_loc: (128,6)-(128,7) = "}" │ │ │ │ └── closing_loc: (128,6)-(128,7) = "}"
│ │ │ └── @ StringNode (location: (128,7)-(129,0)) │ │ │ └── @ StringNode (location: (128,7)-(129,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (128,7)-(129,0) = "\n" │ │ │ ├── content_loc: (128,7)-(129,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅

View File

@ -12,6 +12,7 @@
│ │ @ StatementsNode (location: (2,2)-(2,8)) │ │ @ StatementsNode (location: (2,2)-(2,8))
│ │ └── body: (length: 1) │ │ └── body: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (2,2)-(2,8)) │ │ └── @ InterpolatedStringNode (location: (2,2)-(2,8))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (2,2)-(2,3) = "\"" │ │ ├── opening_loc: (2,2)-(2,3) = "\""
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ EmbeddedStatementsNode (location: (2,3)-(2,6)) │ │ │ ├── @ EmbeddedStatementsNode (location: (2,3)-(2,6))
@ -19,7 +20,7 @@
│ │ │ │ ├── statements: ∅ │ │ │ │ ├── statements: ∅
│ │ │ │ └── closing_loc: (2,5)-(2,6) = "}" │ │ │ │ └── closing_loc: (2,5)-(2,6) = "}"
│ │ │ └── @ StringNode (location: (2,6)-(2,7)) │ │ │ └── @ StringNode (location: (2,6)-(2,7))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (2,6)-(2,7) = "a" │ │ │ ├── content_loc: (2,6)-(2,7) = "a"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -36,10 +37,11 @@
│ │ @ StatementsNode (location: (5,2)-(10,3)) │ │ @ StatementsNode (location: (5,2)-(10,3))
│ │ └── body: (length: 2) │ │ └── body: (length: 2)
│ │ ├── @ InterpolatedStringNode (location: (5,2)-(5,12)) │ │ ├── @ InterpolatedStringNode (location: (5,2)-(5,12))
│ │ │ ├── flags: ∅
│ │ │ ├── opening_loc: (5,2)-(5,12) = "<<-HEREDOC" │ │ │ ├── opening_loc: (5,2)-(5,12) = "<<-HEREDOC"
│ │ │ ├── parts: (length: 3) │ │ │ ├── parts: (length: 3)
│ │ │ │ ├── @ StringNode (location: (6,0)-(7,0)) │ │ │ │ ├── @ StringNode (location: (6,0)-(7,0))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (6,0)-(7,0) = "a\n" │ │ │ │ │ ├── content_loc: (6,0)-(7,0) = "a\n"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
@ -49,7 +51,7 @@
│ │ │ │ │ ├── statements: ∅ │ │ │ │ │ ├── statements: ∅
│ │ │ │ │ └── closing_loc: (7,2)-(7,3) = "}" │ │ │ │ │ └── closing_loc: (7,2)-(7,3) = "}"
│ │ │ │ └── @ StringNode (location: (7,3)-(9,0)) │ │ │ │ └── @ StringNode (location: (7,3)-(9,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (7,3)-(9,0) = "a\nb\n" │ │ │ │ ├── content_loc: (7,3)-(9,0) = "a\nb\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -68,10 +70,11 @@
│ ├── consequent: ∅ │ ├── consequent: ∅
│ └── end_keyword_loc: (11,0)-(11,3) = "end" │ └── end_keyword_loc: (11,0)-(11,3) = "end"
├── @ InterpolatedStringNode (location: (12,0)-(12,10)) ├── @ InterpolatedStringNode (location: (12,0)-(12,10))
│ ├── flags: ∅
│ ├── opening_loc: (12,0)-(12,10) = "<<-HEREDOC" │ ├── opening_loc: (12,0)-(12,10) = "<<-HEREDOC"
│ ├── parts: (length: 7) │ ├── parts: (length: 7)
│ │ ├── @ StringNode (location: (13,0)-(14,0)) │ │ ├── @ StringNode (location: (13,0)-(14,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (13,0)-(14,0) = "\\\#{}\\\#{}\n" │ │ │ ├── content_loc: (13,0)-(14,0) = "\\\#{}\\\#{}\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -81,7 +84,7 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (14,2)-(14,3) = "}" │ │ │ └── closing_loc: (14,2)-(14,3) = "}"
│ │ ├── @ StringNode (location: (14,3)-(15,0)) │ │ ├── @ StringNode (location: (14,3)-(15,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (14,3)-(15,0) = "\n" │ │ │ ├── content_loc: (14,3)-(15,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -91,7 +94,7 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (15,2)-(15,3) = "}" │ │ │ └── closing_loc: (15,2)-(15,3) = "}"
│ │ ├── @ StringNode (location: (15,3)-(16,0)) │ │ ├── @ StringNode (location: (15,3)-(16,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (15,3)-(16,0) = "\n" │ │ │ ├── content_loc: (15,3)-(16,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -101,7 +104,7 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (16,2)-(16,3) = "}" │ │ │ └── closing_loc: (16,2)-(16,3) = "}"
│ │ └── @ StringNode (location: (16,3)-(17,0)) │ │ └── @ StringNode (location: (16,3)-(17,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (16,3)-(17,0) = "\n" │ │ ├── content_loc: (16,3)-(17,0) = "\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -110,6 +113,7 @@
├── @ RescueModifierNode (location: (18,0)-(18,21)) ├── @ RescueModifierNode (location: (18,0)-(18,21))
│ ├── expression: │ ├── expression:
│ │ @ InterpolatedStringNode (location: (18,0)-(18,10)) │ │ @ InterpolatedStringNode (location: (18,0)-(18,10))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (18,0)-(18,10) = "<<-HEREDOC" │ │ ├── opening_loc: (18,0)-(18,10) = "<<-HEREDOC"
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ EmbeddedStatementsNode (location: (19,0)-(19,3)) │ │ │ ├── @ EmbeddedStatementsNode (location: (19,0)-(19,3))
@ -117,7 +121,7 @@
│ │ │ │ ├── statements: ∅ │ │ │ │ ├── statements: ∅
│ │ │ │ └── closing_loc: (19,2)-(19,3) = "}" │ │ │ │ └── closing_loc: (19,2)-(19,3) = "}"
│ │ │ └── @ StringNode (location: (19,3)-(21,0)) │ │ │ └── @ StringNode (location: (19,3)-(21,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (19,3)-(21,0) = "\na\n" │ │ │ ├── content_loc: (19,3)-(21,0) = "\na\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -127,10 +131,11 @@
│ └── rescue_expression: │ └── rescue_expression:
│ @ NilNode (location: (18,18)-(18,21)) │ @ NilNode (location: (18,18)-(18,21))
├── @ InterpolatedStringNode (location: (22,0)-(22,6)) ├── @ InterpolatedStringNode (location: (22,0)-(22,6))
│ ├── flags: ∅
│ ├── opening_loc: (22,0)-(22,1) = "\"" │ ├── opening_loc: (22,0)-(22,1) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (22,1)-(22,2)) │ │ ├── @ StringNode (location: (22,1)-(22,2))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (22,1)-(22,2) = "a" │ │ │ ├── content_loc: (22,1)-(22,2) = "a"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -142,10 +147,11 @@
│ │ └── number: 1 │ │ └── number: 1
│ └── closing_loc: (22,5)-(22,6) = "\"" │ └── closing_loc: (22,5)-(22,6) = "\""
├── @ InterpolatedStringNode (location: (23,0)-(23,6)) ├── @ InterpolatedStringNode (location: (23,0)-(23,6))
│ ├── flags: ∅
│ ├── opening_loc: (23,0)-(23,1) = "\"" │ ├── opening_loc: (23,0)-(23,1) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (23,1)-(23,2)) │ │ ├── @ StringNode (location: (23,1)-(23,2))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (23,1)-(23,2) = "a" │ │ │ ├── content_loc: (23,1)-(23,2) = "a"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -157,10 +163,11 @@
│ │ └── name: :$a │ │ └── name: :$a
│ └── closing_loc: (23,5)-(23,6) = "\"" │ └── closing_loc: (23,5)-(23,6) = "\""
├── @ InterpolatedStringNode (location: (24,0)-(24,6)) ├── @ InterpolatedStringNode (location: (24,0)-(24,6))
│ ├── flags: ∅
│ ├── opening_loc: (24,0)-(24,1) = "\"" │ ├── opening_loc: (24,0)-(24,1) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (24,1)-(24,2)) │ │ ├── @ StringNode (location: (24,1)-(24,2))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (24,1)-(24,2) = "a" │ │ │ ├── content_loc: (24,1)-(24,2) = "a"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -172,10 +179,11 @@
│ │ └── name: :@a │ │ └── name: :@a
│ └── closing_loc: (24,5)-(24,6) = "\"" │ └── closing_loc: (24,5)-(24,6) = "\""
├── @ InterpolatedStringNode (location: (25,0)-(25,7)) ├── @ InterpolatedStringNode (location: (25,0)-(25,7))
│ ├── flags: ∅
│ ├── opening_loc: (25,0)-(25,1) = "\"" │ ├── opening_loc: (25,0)-(25,1) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (25,1)-(25,2)) │ │ ├── @ StringNode (location: (25,1)-(25,2))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (25,1)-(25,2) = "a" │ │ │ ├── content_loc: (25,1)-(25,2) = "a"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -201,10 +209,11 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (27,9)-(27,19)) │ │ └── @ InterpolatedStringNode (location: (27,9)-(27,19))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (27,9)-(27,19) = "<<-HEREDOC" │ │ ├── opening_loc: (27,9)-(27,19) = "<<-HEREDOC"
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (28,0)-(28,4)) │ │ │ ├── @ StringNode (location: (28,0)-(28,4))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (28,0)-(28,4) = " " │ │ │ │ ├── content_loc: (28,0)-(28,4) = " "
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -219,7 +228,7 @@
│ │ │ │ │ └── value: 42 │ │ │ │ │ └── value: 42
│ │ │ │ └── closing_loc: (28,8)-(28,9) = "}" │ │ │ │ └── closing_loc: (28,8)-(28,9) = "}"
│ │ │ └── @ StringNode (location: (28,9)-(29,0)) │ │ │ └── @ StringNode (location: (28,9)-(29,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (28,9)-(29,0) = "\n" │ │ │ ├── content_loc: (28,9)-(29,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -239,10 +248,11 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (31,4)-(31,14)) │ │ └── @ InterpolatedStringNode (location: (31,4)-(31,14))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (31,4)-(31,14) = "<<-HEREDOC" │ │ ├── opening_loc: (31,4)-(31,14) = "<<-HEREDOC"
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (32,0)-(32,2)) │ │ │ ├── @ StringNode (location: (32,0)-(32,2))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (32,0)-(32,2) = " " │ │ │ │ ├── content_loc: (32,0)-(32,2) = " "
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -264,7 +274,7 @@
│ │ │ │ │ └── block: ∅ │ │ │ │ │ └── block: ∅
│ │ │ │ └── closing_loc: (32,7)-(32,8) = "}" │ │ │ │ └── closing_loc: (32,7)-(32,8) = "}"
│ │ │ └── @ StringNode (location: (32,8)-(33,0)) │ │ │ └── @ StringNode (location: (32,8)-(33,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (32,8)-(33,0) = "\n" │ │ │ ├── content_loc: (32,8)-(33,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -284,10 +294,11 @@
│ ├── flags: ∅ │ ├── flags: ∅
│ └── arguments: (length: 1) │ └── arguments: (length: 1)
│ └── @ InterpolatedStringNode (location: (34,4)-(34,14)) │ └── @ InterpolatedStringNode (location: (34,4)-(34,14))
│ ├── flags: ∅
│ ├── opening_loc: (34,4)-(34,14) = "<<-HEREDOC" │ ├── opening_loc: (34,4)-(34,14) = "<<-HEREDOC"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (35,0)-(35,2)) │ │ ├── @ StringNode (location: (35,0)-(35,2))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (35,0)-(35,2) = " " │ │ │ ├── content_loc: (35,0)-(35,2) = " "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -309,7 +320,7 @@
│ │ │ │ └── block: ∅ │ │ │ │ └── block: ∅
│ │ │ └── closing_loc: (35,7)-(35,8) = "}" │ │ │ └── closing_loc: (35,7)-(35,8) = "}"
│ │ └── @ StringNode (location: (35,8)-(36,0)) │ │ └── @ StringNode (location: (35,8)-(36,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (35,8)-(36,0) = "\n" │ │ ├── content_loc: (35,8)-(36,0) = "\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -16,10 +16,11 @@
│ │ │ │ └── unescaped: "foo" │ │ │ │ └── unescaped: "foo"
│ │ │ ├── value: │ │ │ ├── value:
│ │ │ │ @ InterpolatedStringNode (location: (1,11)-(1,21)) │ │ │ │ @ InterpolatedStringNode (location: (1,11)-(1,21))
│ │ │ │ ├── flags: ∅
│ │ │ │ ├── opening_loc: (1,11)-(1,21) = "<<-HEREDOC" │ │ │ │ ├── opening_loc: (1,11)-(1,21) = "<<-HEREDOC"
│ │ │ │ ├── parts: (length: 3) │ │ │ │ ├── parts: (length: 3)
│ │ │ │ │ ├── @ StringNode (location: (2,0)-(2,2)) │ │ │ │ │ ├── @ StringNode (location: (2,0)-(2,2))
│ │ │ │ │ │ ├── flags: │ │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ │ ├── content_loc: (2,0)-(2,2) = " " │ │ │ │ │ │ ├── content_loc: (2,0)-(2,2) = " "
│ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ ├── closing_loc: ∅
@ -29,7 +30,7 @@
│ │ │ │ │ │ ├── statements: ∅ │ │ │ │ │ │ ├── statements: ∅
│ │ │ │ │ │ └── closing_loc: (2,4)-(2,5) = "}" │ │ │ │ │ │ └── closing_loc: (2,4)-(2,5) = "}"
│ │ │ │ │ └── @ StringNode (location: (2,5)-(3,0)) │ │ │ │ │ └── @ StringNode (location: (2,5)-(3,0))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (2,5)-(3,0) = "\n" │ │ │ │ │ ├── content_loc: (2,5)-(3,0) = "\n"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
@ -121,10 +122,11 @@
│ │ │ ├── flags: ∅ │ │ │ ├── flags: ∅
│ │ │ └── arguments: (length: 1) │ │ │ └── arguments: (length: 1)
│ │ │ └── @ InterpolatedStringNode (location: (6,2)-(6,12)) │ │ │ └── @ InterpolatedStringNode (location: (6,2)-(6,12))
│ │ │ ├── flags: ∅
│ │ │ ├── opening_loc: (6,2)-(6,12) = "<<-HEREDOC" │ │ │ ├── opening_loc: (6,2)-(6,12) = "<<-HEREDOC"
│ │ │ ├── parts: (length: 3) │ │ │ ├── parts: (length: 3)
│ │ │ │ ├── @ StringNode (location: (7,0)-(7,2)) │ │ │ │ ├── @ StringNode (location: (7,0)-(7,2))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (7,0)-(7,2) = " " │ │ │ │ │ ├── content_loc: (7,0)-(7,2) = " "
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
@ -134,7 +136,7 @@
│ │ │ │ │ ├── statements: ∅ │ │ │ │ │ ├── statements: ∅
│ │ │ │ │ └── closing_loc: (7,4)-(7,5) = "}" │ │ │ │ │ └── closing_loc: (7,4)-(7,5) = "}"
│ │ │ │ └── @ StringNode (location: (7,5)-(8,0)) │ │ │ │ └── @ StringNode (location: (7,5)-(8,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (7,5)-(8,0) = "\n" │ │ │ │ ├── content_loc: (7,5)-(8,0) = "\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -191,10 +193,11 @@
│ │ │ │ └── unescaped: "foo" │ │ │ │ └── unescaped: "foo"
│ │ │ ├── value: │ │ │ ├── value:
│ │ │ │ @ InterpolatedStringNode (location: (10,11)-(10,21)) │ │ │ │ @ InterpolatedStringNode (location: (10,11)-(10,21))
│ │ │ │ ├── flags: ∅
│ │ │ │ ├── opening_loc: (10,11)-(10,21) = "<<-HEREDOC" │ │ │ │ ├── opening_loc: (10,11)-(10,21) = "<<-HEREDOC"
│ │ │ │ ├── parts: (length: 3) │ │ │ │ ├── parts: (length: 3)
│ │ │ │ │ ├── @ StringNode (location: (11,0)-(11,2)) │ │ │ │ │ ├── @ StringNode (location: (11,0)-(11,2))
│ │ │ │ │ │ ├── flags: │ │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ │ ├── content_loc: (11,0)-(11,2) = " " │ │ │ │ │ │ ├── content_loc: (11,0)-(11,2) = " "
│ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ ├── closing_loc: ∅
@ -204,7 +207,7 @@
│ │ │ │ │ │ ├── statements: ∅ │ │ │ │ │ │ ├── statements: ∅
│ │ │ │ │ │ └── closing_loc: (11,4)-(11,5) = "}" │ │ │ │ │ │ └── closing_loc: (11,4)-(11,5) = "}"
│ │ │ │ │ └── @ StringNode (location: (11,5)-(12,0)) │ │ │ │ │ └── @ StringNode (location: (11,5)-(12,0))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (11,5)-(12,0) = "\n" │ │ │ │ │ ├── content_loc: (11,5)-(12,0) = "\n"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
@ -259,6 +262,7 @@
│ │ └── operator_loc: (13,16)-(13,18) = "**" │ │ └── operator_loc: (13,16)-(13,18) = "**"
│ └── closing_loc: (13,22)-(13,23) = "}" │ └── closing_loc: (13,22)-(13,23) = "}"
├── @ InterpolatedStringNode (location: (14,0)-(14,14)) ├── @ InterpolatedStringNode (location: (14,0)-(14,14))
│ ├── flags: ∅
│ ├── opening_loc: (14,0)-(14,1) = "\"" │ ├── opening_loc: (14,0)-(14,1) = "\""
│ ├── parts: (length: 5) │ ├── parts: (length: 5)
│ │ ├── @ EmbeddedVariableNode (location: (14,1)-(14,4)) │ │ ├── @ EmbeddedVariableNode (location: (14,1)-(14,4))
@ -267,7 +271,7 @@
│ │ │ @ InstanceVariableReadNode (location: (14,2)-(14,4)) │ │ │ @ InstanceVariableReadNode (location: (14,2)-(14,4))
│ │ │ └── name: :@a │ │ │ └── name: :@a
│ │ ├── @ StringNode (location: (14,4)-(14,5)) │ │ ├── @ StringNode (location: (14,4)-(14,5))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (14,4)-(14,5) = " " │ │ │ ├── content_loc: (14,4)-(14,5) = " "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -278,7 +282,7 @@
│ │ │ @ ClassVariableReadNode (location: (14,6)-(14,9)) │ │ │ @ ClassVariableReadNode (location: (14,6)-(14,9))
│ │ │ └── name: :@@a │ │ │ └── name: :@@a
│ │ ├── @ StringNode (location: (14,9)-(14,10)) │ │ ├── @ StringNode (location: (14,9)-(14,10))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (14,9)-(14,10) = " " │ │ │ ├── content_loc: (14,9)-(14,10) = " "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -355,26 +359,28 @@
│ ├── flags: decimal │ ├── flags: decimal
│ └── value: 1 │ └── value: 1
├── @ InterpolatedStringNode (location: (28,0)-(28,11)) ├── @ InterpolatedStringNode (location: (28,0)-(28,11))
│ ├── flags: ∅
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (28,0)-(28,5)) │ │ ├── @ StringNode (location: (28,0)-(28,5))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: (28,0)-(28,1) = "\"" │ │ │ ├── opening_loc: (28,0)-(28,1) = "\""
│ │ │ ├── content_loc: (28,1)-(28,4) = "foo" │ │ │ ├── content_loc: (28,1)-(28,4) = "foo"
│ │ │ ├── closing_loc: (28,4)-(28,5) = "\"" │ │ │ ├── closing_loc: (28,4)-(28,5) = "\""
│ │ │ └── unescaped: "foo" │ │ │ └── unescaped: "foo"
│ │ └── @ StringNode (location: (28,6)-(28,11)) │ │ └── @ StringNode (location: (28,6)-(28,11))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: (28,6)-(28,7) = "\"" │ │ ├── opening_loc: (28,6)-(28,7) = "\""
│ │ ├── content_loc: (28,7)-(28,10) = "bar" │ │ ├── content_loc: (28,7)-(28,10) = "bar"
│ │ ├── closing_loc: (28,10)-(28,11) = "\"" │ │ ├── closing_loc: (28,10)-(28,11) = "\""
│ │ └── unescaped: "bar" │ │ └── unescaped: "bar"
│ └── closing_loc: ∅ │ └── closing_loc: ∅
├── @ InterpolatedStringNode (location: (29,0)-(29,15)) ├── @ InterpolatedStringNode (location: (29,0)-(29,15))
│ ├── flags: ∅
│ ├── opening_loc: (29,0)-(29,1) = "\"" │ ├── opening_loc: (29,0)-(29,1) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (29,1)-(29,8)) │ │ ├── @ StringNode (location: (29,1)-(29,8))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (29,1)-(29,8) = "foobar " │ │ │ ├── content_loc: (29,1)-(29,8) = "foobar "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -397,10 +403,11 @@
│ │ └── closing_loc: (29,13)-(29,14) = "}" │ │ └── closing_loc: (29,13)-(29,14) = "}"
│ └── closing_loc: (29,14)-(29,15) = "\"" │ └── closing_loc: (29,14)-(29,15) = "\""
├── @ InterpolatedStringNode (location: (30,0)-(30,12)) ├── @ InterpolatedStringNode (location: (30,0)-(30,12))
│ ├── flags: ∅
│ ├── opening_loc: (30,0)-(30,1) = "\"" │ ├── opening_loc: (30,0)-(30,1) = "\""
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (30,1)-(30,4)) │ │ ├── @ StringNode (location: (30,1)-(30,4))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (30,1)-(30,4) = "foo" │ │ │ ├── content_loc: (30,1)-(30,4) = "foo"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -415,17 +422,18 @@
│ │ │ │ └── value: 1 │ │ │ │ └── value: 1
│ │ │ └── closing_loc: (30,7)-(30,8) = "}" │ │ │ └── closing_loc: (30,7)-(30,8) = "}"
│ │ └── @ StringNode (location: (30,8)-(30,11)) │ │ └── @ StringNode (location: (30,8)-(30,11))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (30,8)-(30,11) = "bar" │ │ ├── content_loc: (30,8)-(30,11) = "bar"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "bar" │ │ └── unescaped: "bar"
│ └── closing_loc: (30,11)-(30,12) = "\"" │ └── closing_loc: (30,11)-(30,12) = "\""
├── @ InterpolatedStringNode (location: (31,0)-(31,9)) ├── @ InterpolatedStringNode (location: (31,0)-(31,9))
│ ├── flags: ∅
│ ├── opening_loc: (31,0)-(31,1) = "\"" │ ├── opening_loc: (31,0)-(31,1) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (31,1)-(31,5)) │ │ ├── @ StringNode (location: (31,1)-(31,5))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (31,1)-(31,5) = "\\\\\\\\" │ │ │ ├── content_loc: (31,1)-(31,5) = "\\\\\\\\"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -436,6 +444,7 @@
│ │ └── closing_loc: (31,7)-(31,8) = "}" │ │ └── closing_loc: (31,7)-(31,8) = "}"
│ └── closing_loc: (31,8)-(31,9) = "\"" │ └── closing_loc: (31,8)-(31,9) = "\""
├── @ InterpolatedStringNode (location: (32,0)-(32,9)) ├── @ InterpolatedStringNode (location: (32,0)-(32,9))
│ ├── flags: ∅
│ ├── opening_loc: (32,0)-(32,1) = "\"" │ ├── opening_loc: (32,0)-(32,1) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ EmbeddedStatementsNode (location: (32,1)-(32,4)) │ │ ├── @ EmbeddedStatementsNode (location: (32,1)-(32,4))
@ -443,17 +452,18 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (32,3)-(32,4) = "}" │ │ │ └── closing_loc: (32,3)-(32,4) = "}"
│ │ └── @ StringNode (location: (32,4)-(32,8)) │ │ └── @ StringNode (location: (32,4)-(32,8))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (32,4)-(32,8) = "\\\#{}" │ │ ├── content_loc: (32,4)-(32,8) = "\\\#{}"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\#{}" │ │ └── unescaped: "\#{}"
│ └── closing_loc: (32,8)-(32,9) = "\"" │ └── closing_loc: (32,8)-(32,9) = "\""
├── @ InterpolatedStringNode (location: (33,0)-(33,9)) ├── @ InterpolatedStringNode (location: (33,0)-(33,9))
│ ├── flags: ∅
│ ├── opening_loc: (33,0)-(33,1) = "\"" │ ├── opening_loc: (33,0)-(33,1) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (33,1)-(33,5)) │ │ ├── @ StringNode (location: (33,1)-(33,5))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (33,1)-(33,5) = "\\\#{}" │ │ │ ├── content_loc: (33,1)-(33,5) = "\\\#{}"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -497,7 +507,7 @@
│ ├── opening_loc: (39,0)-(39,1) = "`" │ ├── opening_loc: (39,0)-(39,1) = "`"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (39,1)-(39,4)) │ │ ├── @ StringNode (location: (39,1)-(39,4))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (39,1)-(39,4) = "foo" │ │ │ ├── content_loc: (39,1)-(39,4) = "foo"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -582,7 +592,7 @@
│ ├── opening_loc: (51,0)-(51,1) = "/" │ ├── opening_loc: (51,0)-(51,1) = "/"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (51,1)-(51,4)) │ │ ├── @ StringNode (location: (51,1)-(51,4))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (51,1)-(51,4) = "foo" │ │ │ ├── content_loc: (51,1)-(51,4) = "foo"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -601,7 +611,7 @@
│ ├── opening_loc: (52,0)-(52,1) = "/" │ ├── opening_loc: (52,0)-(52,1) = "/"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (52,1)-(52,4)) │ │ ├── @ StringNode (location: (52,1)-(52,4))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (52,1)-(52,4) = "foo" │ │ │ ├── content_loc: (52,1)-(52,4) = "foo"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -660,7 +670,7 @@
│ ├── opening_loc: (58,0)-(58,2) = ":\"" │ ├── opening_loc: (58,0)-(58,2) = ":\""
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (58,2)-(58,5)) │ │ ├── @ StringNode (location: (58,2)-(58,5))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (58,2)-(58,5) = "foo" │ │ │ ├── content_loc: (58,2)-(58,5) = "foo"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -682,7 +692,7 @@
│ │ │ │ └── block: ∅ │ │ │ │ └── block: ∅
│ │ │ └── closing_loc: (58,10)-(58,11) = "}" │ │ │ └── closing_loc: (58,10)-(58,11) = "}"
│ │ └── @ StringNode (location: (58,11)-(58,14)) │ │ └── @ StringNode (location: (58,11)-(58,14))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (58,11)-(58,14) = "baz" │ │ ├── content_loc: (58,11)-(58,14) = "baz"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -1081,6 +1091,7 @@
│ │ └── operator_loc: (80,6)-(80,8) = "=>" │ │ └── operator_loc: (80,6)-(80,8) = "=>"
│ └── closing_loc: (80,11)-(80,12) = "}" │ └── closing_loc: (80,11)-(80,12) = "}"
├── @ InterpolatedStringNode (location: (81,0)-(82,7)) ├── @ InterpolatedStringNode (location: (81,0)-(82,7))
│ ├── flags: ∅
│ ├── opening_loc: (81,0)-(81,1) = "\"" │ ├── opening_loc: (81,0)-(81,1) = "\""
│ ├── parts: (length: 4) │ ├── parts: (length: 4)
│ │ ├── @ EmbeddedStatementsNode (location: (81,1)-(81,4)) │ │ ├── @ EmbeddedStatementsNode (location: (81,1)-(81,4))
@ -1088,7 +1099,7 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (81,3)-(81,4) = "}" │ │ │ └── closing_loc: (81,3)-(81,4) = "}"
│ │ ├── @ StringNode (location: (81,4)-(82,0)) │ │ ├── @ StringNode (location: (81,4)-(82,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (81,4)-(82,0) = "\n" │ │ │ ├── content_loc: (81,4)-(82,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -1098,7 +1109,7 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (82,2)-(82,3) = "}" │ │ │ └── closing_loc: (82,2)-(82,3) = "}"
│ │ └── @ StringNode (location: (82,3)-(82,6)) │ │ └── @ StringNode (location: (82,3)-(82,6))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (82,3)-(82,6) = "\\na" │ │ ├── content_loc: (82,3)-(82,6) = "\\na"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -1121,6 +1132,7 @@
│ │ @ StatementsNode (location: (84,2)-(85,7)) │ │ @ StatementsNode (location: (84,2)-(85,7))
│ │ └── body: (length: 1) │ │ └── body: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (84,2)-(85,7)) │ │ └── @ InterpolatedStringNode (location: (84,2)-(85,7))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (84,2)-(84,3) = "\"" │ │ ├── opening_loc: (84,2)-(84,3) = "\""
│ │ ├── parts: (length: 4) │ │ ├── parts: (length: 4)
│ │ │ ├── @ EmbeddedStatementsNode (location: (84,3)-(84,6)) │ │ │ ├── @ EmbeddedStatementsNode (location: (84,3)-(84,6))
@ -1128,7 +1140,7 @@
│ │ │ │ ├── statements: ∅ │ │ │ │ ├── statements: ∅
│ │ │ │ └── closing_loc: (84,5)-(84,6) = "}" │ │ │ │ └── closing_loc: (84,5)-(84,6) = "}"
│ │ │ ├── @ StringNode (location: (84,6)-(85,0)) │ │ │ ├── @ StringNode (location: (84,6)-(85,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (84,6)-(85,0) = "\n" │ │ │ │ ├── content_loc: (84,6)-(85,0) = "\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -1138,7 +1150,7 @@
│ │ │ │ ├── statements: ∅ │ │ │ │ ├── statements: ∅
│ │ │ │ └── closing_loc: (85,2)-(85,3) = "}" │ │ │ │ └── closing_loc: (85,2)-(85,3) = "}"
│ │ │ └── @ StringNode (location: (85,3)-(85,6)) │ │ │ └── @ StringNode (location: (85,3)-(85,6))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (85,3)-(85,6) = "\\na" │ │ │ ├── content_loc: (85,3)-(85,6) = "\\na"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -1156,7 +1168,7 @@
├── opening_loc: (89,0)-(89,1) = "`" ├── opening_loc: (89,0)-(89,1) = "`"
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (89,1)-(90,0)) │ ├── @ StringNode (location: (89,1)-(90,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (89,1)-(90,0) = " x\n" │ │ ├── content_loc: (89,1)-(90,0) = " x\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -1178,7 +1190,7 @@
│ │ │ └── block: ∅ │ │ │ └── block: ∅
│ │ └── closing_loc: (90,5)-(90,6) = "}" │ │ └── closing_loc: (90,5)-(90,6) = "}"
│ └── @ StringNode (location: (90,6)-(91,1)) │ └── @ StringNode (location: (90,6)-(91,1))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (90,6)-(91,1) = "\n#" │ ├── content_loc: (90,6)-(91,1) = "\n#"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -40,10 +40,11 @@
│ ├── closing_loc: (19,0)-(20,0) = "DOC\n" │ ├── closing_loc: (19,0)-(20,0) = "DOC\n"
│ └── unescaped: " a\n" │ └── unescaped: " a\n"
├── @ InterpolatedStringNode (location: (21,0)-(21,5)) ├── @ InterpolatedStringNode (location: (21,0)-(21,5))
│ ├── flags: ∅
│ ├── opening_loc: (21,0)-(21,5) = "<<DOC" │ ├── opening_loc: (21,0)-(21,5) = "<<DOC"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (22,0)-(23,2)) │ │ ├── @ StringNode (location: (22,0)-(23,2))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (22,0)-(23,2) = " a\n " │ │ │ ├── content_loc: (22,0)-(23,2) = " a\n "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -53,17 +54,18 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (23,4)-(23,5) = "}" │ │ │ └── closing_loc: (23,4)-(23,5) = "}"
│ │ └── @ StringNode (location: (23,5)-(24,0)) │ │ └── @ StringNode (location: (23,5)-(24,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (23,5)-(24,0) = "\n" │ │ ├── content_loc: (23,5)-(24,0) = "\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\n" │ │ └── unescaped: "\n"
│ └── closing_loc: (24,0)-(25,0) = "DOC\n" │ └── closing_loc: (24,0)-(25,0) = "DOC\n"
├── @ InterpolatedStringNode (location: (26,0)-(26,6)) ├── @ InterpolatedStringNode (location: (26,0)-(26,6))
│ ├── flags: ∅
│ ├── opening_loc: (26,0)-(26,6) = "<<~DOC" │ ├── opening_loc: (26,0)-(26,6) = "<<~DOC"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (27,0)-(28,0)) │ │ ├── @ StringNode (location: (27,0)-(28,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (27,0)-(28,0) = " a\n" │ │ │ ├── content_loc: (27,0)-(28,0) = " a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -73,17 +75,18 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (28,4)-(28,5) = "}" │ │ │ └── closing_loc: (28,4)-(28,5) = "}"
│ │ └── @ StringNode (location: (28,5)-(29,0)) │ │ └── @ StringNode (location: (28,5)-(29,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (28,5)-(29,0) = "\n" │ │ ├── content_loc: (28,5)-(29,0) = "\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\n" │ │ └── unescaped: "\n"
│ └── closing_loc: (29,0)-(30,0) = "DOC\n" │ └── closing_loc: (29,0)-(30,0) = "DOC\n"
├── @ InterpolatedStringNode (location: (31,0)-(31,6)) ├── @ InterpolatedStringNode (location: (31,0)-(31,6))
│ ├── flags: ∅
│ ├── opening_loc: (31,0)-(31,6) = "<<~DOC" │ ├── opening_loc: (31,0)-(31,6) = "<<~DOC"
│ ├── parts: (length: 4) │ ├── parts: (length: 4)
│ │ ├── @ StringNode (location: (32,0)-(33,0)) │ │ ├── @ StringNode (location: (32,0)-(33,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (32,0)-(33,0) = " a\n" │ │ │ ├── content_loc: (32,0)-(33,0) = " a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -93,29 +96,30 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (33,4)-(33,5) = "}" │ │ │ └── closing_loc: (33,4)-(33,5) = "}"
│ │ ├── @ StringNode (location: (33,5)-(34,0)) │ │ ├── @ StringNode (location: (33,5)-(34,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (33,5)-(34,0) = "\n" │ │ │ ├── content_loc: (33,5)-(34,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "\n" │ │ │ └── unescaped: "\n"
│ │ └── @ StringNode (location: (34,0)-(35,0)) │ │ └── @ StringNode (location: (34,0)-(35,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (34,0)-(35,0) = " b\n" │ │ ├── content_loc: (34,0)-(35,0) = " b\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "b\n" │ │ └── unescaped: "b\n"
│ └── closing_loc: (35,0)-(36,0) = "DOC\n" │ └── closing_loc: (35,0)-(36,0) = "DOC\n"
├── @ InterpolatedStringNode (location: (37,0)-(37,6)) ├── @ InterpolatedStringNode (location: (37,0)-(37,6))
│ ├── flags: ∅
│ ├── opening_loc: (37,0)-(37,6) = "<<~DOC" │ ├── opening_loc: (37,0)-(37,6) = "<<~DOC"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (38,0)-(39,0)) │ │ ├── @ StringNode (location: (38,0)-(39,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (38,0)-(39,0) = " a\n" │ │ │ ├── content_loc: (38,0)-(39,0) = " a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a\n" │ │ │ └── unescaped: "a\n"
│ │ └── @ StringNode (location: (39,0)-(40,0)) │ │ └── @ StringNode (location: (39,0)-(40,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (39,0)-(40,0) = " b\n" │ │ ├── content_loc: (39,0)-(40,0) = " b\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -140,6 +144,7 @@
│ ├── closing_loc: (56,0)-(57,0) = "DOC\n" │ ├── closing_loc: (56,0)-(57,0) = "DOC\n"
│ └── unescaped: " a\\nb\n" │ └── unescaped: " a\\nb\n"
├── @ InterpolatedStringNode (location: (58,0)-(58,5)) ├── @ InterpolatedStringNode (location: (58,0)-(58,5))
│ ├── flags: ∅
│ ├── opening_loc: (58,0)-(58,5) = "<<DOC" │ ├── opening_loc: (58,0)-(58,5) = "<<DOC"
│ ├── parts: (length: 4) │ ├── parts: (length: 4)
│ │ ├── @ EmbeddedStatementsNode (location: (59,0)-(59,3)) │ │ ├── @ EmbeddedStatementsNode (location: (59,0)-(59,3))
@ -147,7 +152,7 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (59,2)-(59,3) = "}" │ │ │ └── closing_loc: (59,2)-(59,3) = "}"
│ │ ├── @ StringNode (location: (59,3)-(60,1)) │ │ ├── @ StringNode (location: (59,3)-(60,1))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (59,3)-(60,1) = "a\n " │ │ │ ├── content_loc: (59,3)-(60,1) = "a\n "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -157,17 +162,18 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (60,3)-(60,4) = "}" │ │ │ └── closing_loc: (60,3)-(60,4) = "}"
│ │ └── @ StringNode (location: (60,4)-(61,0)) │ │ └── @ StringNode (location: (60,4)-(61,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (60,4)-(61,0) = "a\n" │ │ ├── content_loc: (60,4)-(61,0) = "a\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "a\n" │ │ └── unescaped: "a\n"
│ └── closing_loc: (61,0)-(62,0) = "DOC\n" │ └── closing_loc: (61,0)-(62,0) = "DOC\n"
├── @ InterpolatedStringNode (location: (63,0)-(63,5)) ├── @ InterpolatedStringNode (location: (63,0)-(63,5))
│ ├── flags: ∅
│ ├── opening_loc: (63,0)-(63,5) = "<<DOC" │ ├── opening_loc: (63,0)-(63,5) = "<<DOC"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (64,0)-(64,2)) │ │ ├── @ StringNode (location: (64,0)-(64,2))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (64,0)-(64,2) = " " │ │ │ ├── content_loc: (64,0)-(64,2) = " "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -177,17 +183,18 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (64,4)-(64,5) = "}" │ │ │ └── closing_loc: (64,4)-(64,5) = "}"
│ │ └── @ StringNode (location: (64,5)-(66,0)) │ │ └── @ StringNode (location: (64,5)-(66,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (64,5)-(66,0) = "\n \\\#{}\n" │ │ ├── content_loc: (64,5)-(66,0) = "\n \\\#{}\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\n \#{}\n" │ │ └── unescaped: "\n \#{}\n"
│ └── closing_loc: (66,0)-(67,0) = "DOC\n" │ └── closing_loc: (66,0)-(67,0) = "DOC\n"
├── @ InterpolatedStringNode (location: (68,0)-(68,5)) ├── @ InterpolatedStringNode (location: (68,0)-(68,5))
│ ├── flags: ∅
│ ├── opening_loc: (68,0)-(68,5) = "<<DOC" │ ├── opening_loc: (68,0)-(68,5) = "<<DOC"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (69,0)-(69,2)) │ │ ├── @ StringNode (location: (69,0)-(69,2))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (69,0)-(69,2) = " a" │ │ │ ├── content_loc: (69,0)-(69,2) = " a"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -197,13 +204,14 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (69,4)-(69,5) = "}" │ │ │ └── closing_loc: (69,4)-(69,5) = "}"
│ │ └── @ StringNode (location: (69,5)-(71,0)) │ │ └── @ StringNode (location: (69,5)-(71,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (69,5)-(71,0) = "b\n c\n" │ │ ├── content_loc: (69,5)-(71,0) = "b\n c\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "b\n c\n" │ │ └── unescaped: "b\n c\n"
│ └── closing_loc: (71,0)-(72,0) = "DOC\n" │ └── closing_loc: (71,0)-(72,0) = "DOC\n"
├── @ InterpolatedStringNode (location: (73,0)-(73,6)) ├── @ InterpolatedStringNode (location: (73,0)-(73,6))
│ ├── flags: ∅
│ ├── opening_loc: (73,0)-(73,6) = "<<~DOC" │ ├── opening_loc: (73,0)-(73,6) = "<<~DOC"
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ EmbeddedStatementsNode (location: (74,2)-(74,5)) │ │ ├── @ EmbeddedStatementsNode (location: (74,2)-(74,5))
@ -211,7 +219,7 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (74,4)-(74,5) = "}" │ │ │ └── closing_loc: (74,4)-(74,5) = "}"
│ │ └── @ StringNode (location: (74,5)-(75,0)) │ │ └── @ StringNode (location: (74,5)-(75,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (74,5)-(75,0) = "\n" │ │ ├── content_loc: (74,5)-(75,0) = "\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -226,6 +234,7 @@
│ │ @ StatementsNode (location: (78,2)-(78,8)) │ │ @ StatementsNode (location: (78,2)-(78,8))
│ │ └── body: (length: 1) │ │ └── body: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (78,2)-(78,8)) │ │ └── @ InterpolatedStringNode (location: (78,2)-(78,8))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (78,2)-(78,8) = "<<~DOC" │ │ ├── opening_loc: (78,2)-(78,8) = "<<~DOC"
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ EmbeddedStatementsNode (location: (79,4)-(79,7)) │ │ │ ├── @ EmbeddedStatementsNode (location: (79,4)-(79,7))
@ -233,7 +242,7 @@
│ │ │ │ ├── statements: ∅ │ │ │ │ ├── statements: ∅
│ │ │ │ └── closing_loc: (79,6)-(79,7) = "}" │ │ │ │ └── closing_loc: (79,6)-(79,7) = "}"
│ │ │ └── @ StringNode (location: (79,7)-(80,0)) │ │ │ └── @ StringNode (location: (79,7)-(80,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (79,7)-(80,0) = "\n" │ │ │ ├── content_loc: (79,7)-(80,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -250,10 +259,11 @@
│ │ @ StatementsNode (location: (84,2)-(84,8)) │ │ @ StatementsNode (location: (84,2)-(84,8))
│ │ └── body: (length: 1) │ │ └── body: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (84,2)-(84,8)) │ │ └── @ InterpolatedStringNode (location: (84,2)-(84,8))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (84,2)-(84,8) = "<<~DOC" │ │ ├── opening_loc: (84,2)-(84,8) = "<<~DOC"
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (85,0)-(85,5)) │ │ │ ├── @ StringNode (location: (85,0)-(85,5))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (85,0)-(85,5) = " b" │ │ │ │ ├── content_loc: (85,0)-(85,5) = " b"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -263,7 +273,7 @@
│ │ │ │ ├── statements: ∅ │ │ │ │ ├── statements: ∅
│ │ │ │ └── closing_loc: (85,7)-(85,8) = "}" │ │ │ │ └── closing_loc: (85,7)-(85,8) = "}"
│ │ │ └── @ StringNode (location: (85,8)-(86,0)) │ │ │ └── @ StringNode (location: (85,8)-(86,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (85,8)-(86,0) = "\n" │ │ │ ├── content_loc: (85,8)-(86,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -280,6 +290,7 @@
│ │ @ StatementsNode (location: (90,2)-(90,8)) │ │ @ StatementsNode (location: (90,2)-(90,8))
│ │ └── body: (length: 1) │ │ └── body: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (90,2)-(90,8)) │ │ └── @ InterpolatedStringNode (location: (90,2)-(90,8))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (90,2)-(90,8) = "<<~DOC" │ │ ├── opening_loc: (90,2)-(90,8) = "<<~DOC"
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ EmbeddedStatementsNode (location: (91,4)-(91,7)) │ │ │ ├── @ EmbeddedStatementsNode (location: (91,4)-(91,7))
@ -287,7 +298,7 @@
│ │ │ │ ├── statements: ∅ │ │ │ │ ├── statements: ∅
│ │ │ │ └── closing_loc: (91,6)-(91,7) = "}" │ │ │ │ └── closing_loc: (91,6)-(91,7) = "}"
│ │ │ └── @ StringNode (location: (91,7)-(92,0)) │ │ │ └── @ StringNode (location: (91,7)-(92,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (91,7)-(92,0) = "a\n" │ │ │ ├── content_loc: (91,7)-(92,0) = "a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -312,6 +323,7 @@
│ ├── consequent: ∅ │ ├── consequent: ∅
│ └── end_keyword_loc: (101,0)-(101,3) = "end" │ └── end_keyword_loc: (101,0)-(101,3) = "end"
├── @ InterpolatedStringNode (location: (103,0)-(103,6)) ├── @ InterpolatedStringNode (location: (103,0)-(103,6))
│ ├── flags: ∅
│ ├── opening_loc: (103,0)-(103,1) = "\"" │ ├── opening_loc: (103,0)-(103,1) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ EmbeddedStatementsNode (location: (103,1)-(103,4)) │ │ ├── @ EmbeddedStatementsNode (location: (103,1)-(103,4))
@ -319,17 +331,18 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (103,3)-(103,4) = "}" │ │ │ └── closing_loc: (103,3)-(103,4) = "}"
│ │ └── @ StringNode (location: (103,4)-(103,5)) │ │ └── @ StringNode (location: (103,4)-(103,5))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (103,4)-(103,5) = "a" │ │ ├── content_loc: (103,4)-(103,5) = "a"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "a" │ │ └── unescaped: "a"
│ └── closing_loc: (103,5)-(103,6) = "\"" │ └── closing_loc: (103,5)-(103,6) = "\""
├── @ InterpolatedStringNode (location: (105,0)-(105,12)) ├── @ InterpolatedStringNode (location: (105,0)-(105,12))
│ ├── flags: ∅
│ ├── opening_loc: (105,0)-(105,2) = "%(" │ ├── opening_loc: (105,0)-(105,2) = "%("
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (105,2)-(105,5)) │ │ ├── @ StringNode (location: (105,2)-(105,5))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (105,2)-(105,5) = "\\n\"" │ │ │ ├── content_loc: (105,2)-(105,5) = "\\n\""
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -339,17 +352,18 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (105,7)-(105,8) = "}" │ │ │ └── closing_loc: (105,7)-(105,8) = "}"
│ │ └── @ StringNode (location: (105,8)-(105,11)) │ │ └── @ StringNode (location: (105,8)-(105,11))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (105,8)-(105,11) = "\"\\n" │ │ ├── content_loc: (105,8)-(105,11) = "\"\\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\"\n" │ │ └── unescaped: "\"\n"
│ └── closing_loc: (105,11)-(105,12) = ")" │ └── closing_loc: (105,11)-(105,12) = ")"
├── @ InterpolatedStringNode (location: (107,0)-(107,14)) ├── @ InterpolatedStringNode (location: (107,0)-(107,14))
│ ├── flags: ∅
│ ├── opening_loc: (107,0)-(107,3) = "%Q(" │ ├── opening_loc: (107,0)-(107,3) = "%Q("
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (107,3)-(107,7)) │ │ ├── @ StringNode (location: (107,3)-(107,7))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (107,3)-(107,7) = "-\\n\"" │ │ │ ├── content_loc: (107,3)-(107,7) = "-\\n\""
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -359,17 +373,18 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (107,9)-(107,10) = "}" │ │ │ └── closing_loc: (107,9)-(107,10) = "}"
│ │ └── @ StringNode (location: (107,10)-(107,13)) │ │ └── @ StringNode (location: (107,10)-(107,13))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (107,10)-(107,13) = "\"\\n" │ │ ├── content_loc: (107,10)-(107,13) = "\"\\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\"\n" │ │ └── unescaped: "\"\n"
│ └── closing_loc: (107,13)-(107,14) = ")" │ └── closing_loc: (107,13)-(107,14) = ")"
├── @ InterpolatedStringNode (location: (109,0)-(111,2)) ├── @ InterpolatedStringNode (location: (109,0)-(111,2))
│ ├── flags: ∅
│ ├── opening_loc: (109,0)-(109,1) = "\"" │ ├── opening_loc: (109,0)-(109,1) = "\""
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (109,1)-(110,0)) │ │ ├── @ StringNode (location: (109,1)-(110,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (109,1)-(110,0) = "a\n" │ │ │ ├── content_loc: (109,1)-(110,0) = "a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -379,17 +394,18 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (110,2)-(110,3) = "}" │ │ │ └── closing_loc: (110,2)-(110,3) = "}"
│ │ └── @ StringNode (location: (110,3)-(111,1)) │ │ └── @ StringNode (location: (110,3)-(111,1))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (110,3)-(111,1) = "\nb" │ │ ├── content_loc: (110,3)-(111,1) = "\nb"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\nb" │ │ └── unescaped: "\nb"
│ └── closing_loc: (111,1)-(111,2) = "\"" │ └── closing_loc: (111,1)-(111,2) = "\""
├── @ InterpolatedStringNode (location: (113,0)-(114,2)) ├── @ InterpolatedStringNode (location: (113,0)-(114,2))
│ ├── flags: ∅
│ ├── opening_loc: (113,0)-(113,1) = "\"" │ ├── opening_loc: (113,0)-(113,1) = "\""
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (113,1)-(113,4)) │ │ ├── @ StringNode (location: (113,1)-(113,4))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (113,1)-(113,4) = "a\\n" │ │ │ ├── content_loc: (113,1)-(113,4) = "a\\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -399,17 +415,18 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (113,6)-(113,7) = "}" │ │ │ └── closing_loc: (113,6)-(113,7) = "}"
│ │ └── @ StringNode (location: (113,7)-(114,1)) │ │ └── @ StringNode (location: (113,7)-(114,1))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (113,7)-(114,1) = "\nb" │ │ ├── content_loc: (113,7)-(114,1) = "\nb"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\nb" │ │ └── unescaped: "\nb"
│ └── closing_loc: (114,1)-(114,2) = "\"" │ └── closing_loc: (114,1)-(114,2) = "\""
├── @ InterpolatedStringNode (location: (116,0)-(117,7)) ├── @ InterpolatedStringNode (location: (116,0)-(117,7))
│ ├── flags: ∅
│ ├── opening_loc: (116,0)-(116,1) = "\"" │ ├── opening_loc: (116,0)-(116,1) = "\""
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (116,1)-(117,0)) │ │ ├── @ StringNode (location: (116,1)-(117,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (116,1)-(117,0) = "a\n" │ │ │ ├── content_loc: (116,1)-(117,0) = "a\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -419,22 +436,24 @@
│ │ │ ├── statements: ∅ │ │ │ ├── statements: ∅
│ │ │ └── closing_loc: (117,2)-(117,3) = "}" │ │ │ └── closing_loc: (117,2)-(117,3) = "}"
│ │ └── @ StringNode (location: (117,3)-(117,6)) │ │ └── @ StringNode (location: (117,3)-(117,6))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (117,3)-(117,6) = "\\nb" │ │ ├── content_loc: (117,3)-(117,6) = "\\nb"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "\nb" │ │ └── unescaped: "\nb"
│ └── closing_loc: (117,6)-(117,7) = "\"" │ └── closing_loc: (117,6)-(117,7) = "\""
├── @ InterpolatedStringNode (location: (119,0)-(120,5)) ├── @ InterpolatedStringNode (location: (119,0)-(120,5))
│ ├── flags: ∅
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (119,0)-(119,3)) │ │ ├── @ StringNode (location: (119,0)-(119,3))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: (119,0)-(119,1) = "'" │ │ │ ├── opening_loc: (119,0)-(119,1) = "'"
│ │ │ ├── content_loc: (119,1)-(119,2) = "a" │ │ │ ├── content_loc: (119,1)-(119,2) = "a"
│ │ │ ├── closing_loc: (119,2)-(119,3) = "'" │ │ │ ├── closing_loc: (119,2)-(119,3) = "'"
│ │ │ └── unescaped: "a" │ │ │ └── unescaped: "a"
│ │ └── @ InterpolatedStringNode (location: (120,0)-(120,5)) │ │ └── @ InterpolatedStringNode (location: (120,0)-(120,5))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (120,0)-(120,1) = "\"" │ │ ├── opening_loc: (120,0)-(120,1) = "\""
│ │ ├── parts: (length: 1) │ │ ├── parts: (length: 1)
│ │ │ └── @ EmbeddedStatementsNode (location: (120,1)-(120,4)) │ │ │ └── @ EmbeddedStatementsNode (location: (120,1)-(120,4))
@ -444,35 +463,38 @@
│ │ └── closing_loc: (120,4)-(120,5) = "\"" │ │ └── closing_loc: (120,4)-(120,5) = "\""
│ └── closing_loc: ∅ │ └── closing_loc: ∅
├── @ InterpolatedStringNode (location: (122,0)-(122,8)) ├── @ InterpolatedStringNode (location: (122,0)-(122,8))
│ ├── flags: ∅
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (122,0)-(122,2)) │ │ ├── @ StringNode (location: (122,0)-(122,2))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: (122,0)-(122,1) = "\"" │ │ │ ├── opening_loc: (122,0)-(122,1) = "\""
│ │ │ ├── content_loc: (122,1)-(122,1) = "" │ │ │ ├── content_loc: (122,1)-(122,1) = ""
│ │ │ ├── closing_loc: (122,1)-(122,2) = "\"" │ │ │ ├── closing_loc: (122,1)-(122,2) = "\""
│ │ │ └── unescaped: "" │ │ │ └── unescaped: ""
│ │ ├── @ StringNode (location: (122,3)-(122,5)) │ │ ├── @ StringNode (location: (122,3)-(122,5))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: (122,3)-(122,4) = "\"" │ │ │ ├── opening_loc: (122,3)-(122,4) = "\""
│ │ │ ├── content_loc: (122,4)-(122,4) = "" │ │ │ ├── content_loc: (122,4)-(122,4) = ""
│ │ │ ├── closing_loc: (122,4)-(122,5) = "\"" │ │ │ ├── closing_loc: (122,4)-(122,5) = "\""
│ │ │ └── unescaped: "" │ │ │ └── unescaped: ""
│ │ └── @ StringNode (location: (122,6)-(122,8)) │ │ └── @ StringNode (location: (122,6)-(122,8))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: (122,6)-(122,7) = "\"" │ │ ├── opening_loc: (122,6)-(122,7) = "\""
│ │ ├── content_loc: (122,7)-(122,7) = "" │ │ ├── content_loc: (122,7)-(122,7) = ""
│ │ ├── closing_loc: (122,7)-(122,8) = "\"" │ │ ├── closing_loc: (122,7)-(122,8) = "\""
│ │ └── unescaped: "" │ │ └── unescaped: ""
│ └── closing_loc: ∅ │ └── closing_loc: ∅
├── @ InterpolatedStringNode (location: (124,0)-(124,12)) ├── @ InterpolatedStringNode (location: (124,0)-(124,12))
│ ├── flags: ∅
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ InterpolatedStringNode (location: (124,0)-(124,8)) │ │ ├── @ InterpolatedStringNode (location: (124,0)-(124,8))
│ │ │ ├── flags: ∅
│ │ │ ├── opening_loc: (124,0)-(124,1) = "\"" │ │ │ ├── opening_loc: (124,0)-(124,1) = "\""
│ │ │ ├── parts: (length: 2) │ │ │ ├── parts: (length: 2)
│ │ │ │ ├── @ StringNode (location: (124,1)-(124,2)) │ │ │ │ ├── @ StringNode (location: (124,1)-(124,2))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (124,1)-(124,2) = "a" │ │ │ │ │ ├── content_loc: (124,1)-(124,2) = "a"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
@ -487,20 +509,22 @@
│ │ │ │ └── closing_loc: (124,6)-(124,7) = "}" │ │ │ │ └── closing_loc: (124,6)-(124,7) = "}"
│ │ │ └── closing_loc: (124,7)-(124,8) = "\"" │ │ │ └── closing_loc: (124,7)-(124,8) = "\""
│ │ └── @ StringNode (location: (124,9)-(124,12)) │ │ └── @ StringNode (location: (124,9)-(124,12))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: (124,9)-(124,10) = "\"" │ │ ├── opening_loc: (124,9)-(124,10) = "\""
│ │ ├── content_loc: (124,10)-(124,11) = "b" │ │ ├── content_loc: (124,10)-(124,11) = "b"
│ │ ├── closing_loc: (124,11)-(124,12) = "\"" │ │ ├── closing_loc: (124,11)-(124,12) = "\""
│ │ └── unescaped: "b" │ │ └── unescaped: "b"
│ └── closing_loc: ∅ │ └── closing_loc: ∅
├── @ InterpolatedStringNode (location: (125,0)-(125,10)) ├── @ InterpolatedStringNode (location: (125,0)-(125,10))
│ ├── flags: ∅
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ InterpolatedStringNode (location: (125,0)-(125,6)) │ │ ├── @ InterpolatedStringNode (location: (125,0)-(125,6))
│ │ │ ├── flags: ∅
│ │ │ ├── opening_loc: (125,0)-(125,1) = "\"" │ │ │ ├── opening_loc: (125,0)-(125,1) = "\""
│ │ │ ├── parts: (length: 2) │ │ │ ├── parts: (length: 2)
│ │ │ │ ├── @ StringNode (location: (125,1)-(125,2)) │ │ │ │ ├── @ StringNode (location: (125,1)-(125,2))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (125,1)-(125,2) = "a" │ │ │ │ │ ├── content_loc: (125,1)-(125,2) = "a"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
@ -512,20 +536,22 @@
│ │ │ │ └── name: :@a │ │ │ │ └── name: :@a
│ │ │ └── closing_loc: (125,5)-(125,6) = "\"" │ │ │ └── closing_loc: (125,5)-(125,6) = "\""
│ │ └── @ StringNode (location: (125,7)-(125,10)) │ │ └── @ StringNode (location: (125,7)-(125,10))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: (125,7)-(125,8) = "\"" │ │ ├── opening_loc: (125,7)-(125,8) = "\""
│ │ ├── content_loc: (125,8)-(125,9) = "b" │ │ ├── content_loc: (125,8)-(125,9) = "b"
│ │ ├── closing_loc: (125,9)-(125,10) = "\"" │ │ ├── closing_loc: (125,9)-(125,10) = "\""
│ │ └── unescaped: "b" │ │ └── unescaped: "b"
│ └── closing_loc: ∅ │ └── closing_loc: ∅
├── @ InterpolatedStringNode (location: (126,0)-(126,10)) ├── @ InterpolatedStringNode (location: (126,0)-(126,10))
│ ├── flags: ∅
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ InterpolatedStringNode (location: (126,0)-(126,6)) │ │ ├── @ InterpolatedStringNode (location: (126,0)-(126,6))
│ │ │ ├── flags: ∅
│ │ │ ├── opening_loc: (126,0)-(126,1) = "\"" │ │ │ ├── opening_loc: (126,0)-(126,1) = "\""
│ │ │ ├── parts: (length: 2) │ │ │ ├── parts: (length: 2)
│ │ │ │ ├── @ StringNode (location: (126,1)-(126,2)) │ │ │ │ ├── @ StringNode (location: (126,1)-(126,2))
│ │ │ │ │ ├── flags: │ │ │ │ │ ├── flags: frozen
│ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ │ ├── content_loc: (126,1)-(126,2) = "a" │ │ │ │ │ ├── content_loc: (126,1)-(126,2) = "a"
│ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── closing_loc: ∅
@ -537,20 +563,22 @@
│ │ │ │ └── name: :$a │ │ │ │ └── name: :$a
│ │ │ └── closing_loc: (126,5)-(126,6) = "\"" │ │ │ └── closing_loc: (126,5)-(126,6) = "\""
│ │ └── @ StringNode (location: (126,7)-(126,10)) │ │ └── @ StringNode (location: (126,7)-(126,10))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: (126,7)-(126,8) = "\"" │ │ ├── opening_loc: (126,7)-(126,8) = "\""
│ │ ├── content_loc: (126,8)-(126,9) = "b" │ │ ├── content_loc: (126,8)-(126,9) = "b"
│ │ ├── closing_loc: (126,9)-(126,10) = "\"" │ │ ├── closing_loc: (126,9)-(126,10) = "\""
│ │ └── unescaped: "b" │ │ └── unescaped: "b"
│ └── closing_loc: ∅ │ └── closing_loc: ∅
└── @ InterpolatedStringNode (location: (127,0)-(127,11)) └── @ InterpolatedStringNode (location: (127,0)-(127,11))
├── flags: ∅
├── opening_loc: ∅ ├── opening_loc: ∅
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ InterpolatedStringNode (location: (127,0)-(127,7)) │ ├── @ InterpolatedStringNode (location: (127,0)-(127,7))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (127,0)-(127,1) = "\"" │ │ ├── opening_loc: (127,0)-(127,1) = "\""
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (127,1)-(127,2)) │ │ │ ├── @ StringNode (location: (127,1)-(127,2))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (127,1)-(127,2) = "a" │ │ │ │ ├── content_loc: (127,1)-(127,2) = "a"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -562,7 +590,7 @@
│ │ │ └── name: :@@a │ │ │ └── name: :@@a
│ │ └── closing_loc: (127,6)-(127,7) = "\"" │ │ └── closing_loc: (127,6)-(127,7) = "\""
│ └── @ StringNode (location: (127,8)-(127,11)) │ └── @ StringNode (location: (127,8)-(127,11))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: (127,8)-(127,9) = "\"" │ ├── opening_loc: (127,8)-(127,9) = "\""
│ ├── content_loc: (127,9)-(127,10) = "b" │ ├── content_loc: (127,9)-(127,10) = "b"
│ ├── closing_loc: (127,10)-(127,11) = "\"" │ ├── closing_loc: (127,10)-(127,11) = "\""

View File

@ -55,7 +55,7 @@
│ │ │ │ └── name: :@bar │ │ │ │ └── name: :@bar
│ │ │ └── closing_loc: (11,9)-(11,10) = "}" │ │ │ └── closing_loc: (11,9)-(11,10) = "}"
│ │ └── @ StringNode (location: (11,10)-(11,13)) │ │ └── @ StringNode (location: (11,10)-(11,13))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (11,10)-(11,13) = "baz" │ │ ├── content_loc: (11,10)-(11,13) = "baz"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -41,7 +41,7 @@
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (3,3)-(3,6)) │ │ ├── @ StringNode (location: (3,3)-(3,6))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (3,3)-(3,6) = "foo" │ │ │ ├── content_loc: (3,3)-(3,6) = "foo"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅

View File

@ -13,6 +13,7 @@
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "foo" │ │ │ └── unescaped: "foo"
│ │ └── @ InterpolatedStringNode (location: (1,7)-(1,13)) │ │ └── @ InterpolatedStringNode (location: (1,7)-(1,13))
│ │ ├── flags: ∅
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── parts: (length: 1) │ │ ├── parts: (length: 1)
│ │ │ └── @ EmbeddedStatementsNode (location: (1,7)-(1,13)) │ │ │ └── @ EmbeddedStatementsNode (location: (1,7)-(1,13))
@ -44,6 +45,7 @@
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "foo" │ │ └── unescaped: "foo"
│ └── @ InterpolatedStringNode (location: (3,7)-(3,21)) │ └── @ InterpolatedStringNode (location: (3,7)-(3,21))
│ ├── flags: ∅
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ EmbeddedStatementsNode (location: (3,7)-(3,13)) │ │ ├── @ EmbeddedStatementsNode (location: (3,7)-(3,13))
@ -63,7 +65,7 @@
│ │ │ │ └── block: ∅ │ │ │ │ └── block: ∅
│ │ │ └── closing_loc: (3,12)-(3,13) = "}" │ │ │ └── closing_loc: (3,12)-(3,13) = "}"
│ │ ├── @ StringNode (location: (3,13)-(3,16)) │ │ ├── @ StringNode (location: (3,13)-(3,16))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (3,13)-(3,16) = "foo" │ │ │ ├── content_loc: (3,13)-(3,16) = "foo"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅

View File

@ -4,6 +4,7 @@
@ StatementsNode (location: (1,0)-(1,14)) @ StatementsNode (location: (1,0)-(1,14))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,14)) └── @ InterpolatedStringNode (location: (1,0)-(1,14))
├── flags: ∅
├── opening_loc: (1,0)-(1,1) = "\"" ├── opening_loc: (1,0)-(1,1) = "\""
├── parts: (length: 1) ├── parts: (length: 1)
│ └── @ EmbeddedStatementsNode (location: (1,1)-(1,13)) │ └── @ EmbeddedStatementsNode (location: (1,1)-(1,13))

View File

@ -15,6 +15,7 @@
│ ├── flags: ∅ │ ├── flags: ∅
│ └── arguments: (length: 1) │ └── arguments: (length: 1)
│ └── @ InterpolatedStringNode (location: (1,4)-(1,19)) │ └── @ InterpolatedStringNode (location: (1,4)-(1,19))
│ ├── flags: ∅
│ ├── opening_loc: (1,4)-(1,5) = "\"" │ ├── opening_loc: (1,4)-(1,5) = "\""
│ ├── parts: (length: 1) │ ├── parts: (length: 1)
│ │ └── @ EmbeddedStatementsNode (location: (1,5)-(1,18)) │ │ └── @ EmbeddedStatementsNode (location: (1,5)-(1,18))

View File

@ -15,6 +15,7 @@
│ ├── flags: ∅ │ ├── flags: ∅
│ └── arguments: (length: 1) │ └── arguments: (length: 1)
│ └── @ InterpolatedStringNode (location: (1,2)-(1,9)) │ └── @ InterpolatedStringNode (location: (1,2)-(1,9))
│ ├── flags: ∅
│ ├── opening_loc: (1,2)-(1,3) = "\"" │ ├── opening_loc: (1,2)-(1,3) = "\""
│ ├── parts: (length: 1) │ ├── parts: (length: 1)
│ │ └── @ EmbeddedStatementsNode (location: (1,3)-(1,8)) │ │ └── @ EmbeddedStatementsNode (location: (1,3)-(1,8))

View File

@ -15,6 +15,7 @@
│ ├── flags: ∅ │ ├── flags: ∅
│ └── arguments: (length: 1) │ └── arguments: (length: 1)
│ └── @ InterpolatedStringNode (location: (1,2)-(1,12)) │ └── @ InterpolatedStringNode (location: (1,2)-(1,12))
│ ├── flags: ∅
│ ├── opening_loc: (1,2)-(1,3) = "\"" │ ├── opening_loc: (1,2)-(1,3) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ EmbeddedStatementsNode (location: (1,3)-(1,6)) │ │ ├── @ EmbeddedStatementsNode (location: (1,3)-(1,6))

View File

@ -4,6 +4,7 @@
@ StatementsNode (location: (1,0)-(3,8)) @ StatementsNode (location: (1,0)-(3,8))
└── body: (length: 2) └── body: (length: 2)
├── @ InterpolatedStringNode (location: (1,0)-(1,6)) ├── @ InterpolatedStringNode (location: (1,0)-(1,6))
│ ├── flags: ∅
│ ├── opening_loc: (1,0)-(1,1) = "\"" │ ├── opening_loc: (1,0)-(1,1) = "\""
│ ├── parts: (length: 1) │ ├── parts: (length: 1)
│ │ └── @ EmbeddedStatementsNode (location: (1,1)-(1,5)) │ │ └── @ EmbeddedStatementsNode (location: (1,1)-(1,5))
@ -20,6 +21,7 @@
├── flags: ∅ ├── flags: ∅
├── elements: (length: 1) ├── elements: (length: 1)
│ └── @ InterpolatedStringNode (location: (3,3)-(3,7)) │ └── @ InterpolatedStringNode (location: (3,3)-(3,7))
│ ├── flags: ∅
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── parts: (length: 1) │ ├── parts: (length: 1)
│ │ └── @ EmbeddedStatementsNode (location: (3,3)-(3,7)) │ │ └── @ EmbeddedStatementsNode (location: (3,3)-(3,7))

View File

@ -15,10 +15,11 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (1,2)-(1,8)) │ │ └── @ InterpolatedStringNode (location: (1,2)-(1,8))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (1,2)-(1,8) = "<<~\"E\"" │ │ ├── opening_loc: (1,2)-(1,8) = "<<~\"E\""
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (2,0)-(3,0)) │ │ │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (2,0)-(3,0) = " x\n" │ │ │ │ ├── content_loc: (2,0)-(3,0) = " x\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -36,7 +37,7 @@
│ │ │ │ │ └── unescaped: " y" │ │ │ │ │ └── unescaped: " y"
│ │ │ │ └── closing_loc: (3,9)-(3,10) = "}" │ │ │ │ └── closing_loc: (3,9)-(3,10) = "}"
│ │ │ └── @ StringNode (location: (3,10)-(4,0)) │ │ │ └── @ StringNode (location: (3,10)-(4,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (3,10)-(4,0) = "\n" │ │ │ ├── content_loc: (3,10)-(4,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -56,10 +57,11 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (6,2)-(6,8)) │ │ └── @ InterpolatedStringNode (location: (6,2)-(6,8))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (6,2)-(6,8) = "<<~\"E\"" │ │ ├── opening_loc: (6,2)-(6,8) = "<<~\"E\""
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (7,0)-(8,0)) │ │ │ ├── @ StringNode (location: (7,0)-(8,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (7,0)-(8,0) = " x\n" │ │ │ │ ├── content_loc: (7,0)-(8,0) = " x\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -81,7 +83,7 @@
│ │ │ │ │ └── block: ∅ │ │ │ │ │ └── block: ∅
│ │ │ │ └── closing_loc: (8,7)-(8,8) = "}" │ │ │ │ └── closing_loc: (8,7)-(8,8) = "}"
│ │ │ └── @ StringNode (location: (8,8)-(9,0)) │ │ │ └── @ StringNode (location: (8,8)-(9,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (8,8)-(9,0) = "\n" │ │ │ ├── content_loc: (8,8)-(9,0) = "\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -101,16 +103,17 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (11,2)-(11,6)) │ │ └── @ InterpolatedStringNode (location: (11,2)-(11,6))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (11,2)-(11,6) = "<<~E" │ │ ├── opening_loc: (11,2)-(11,6) = "<<~E"
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (12,0)-(13,0)) │ │ │ ├── @ StringNode (location: (12,0)-(13,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (12,0)-(13,0) = "\tx\n" │ │ │ │ ├── content_loc: (12,0)-(13,0) = "\tx\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: "x\n" │ │ │ │ └── unescaped: "x\n"
│ │ │ └── @ StringNode (location: (13,0)-(14,0)) │ │ │ └── @ StringNode (location: (13,0)-(14,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (13,0)-(14,0) = " y\n" │ │ │ ├── content_loc: (13,0)-(14,0) = " y\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -130,16 +133,17 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (16,2)-(16,6)) │ │ └── @ InterpolatedStringNode (location: (16,2)-(16,6))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (16,2)-(16,6) = "<<~E" │ │ ├── opening_loc: (16,2)-(16,6) = "<<~E"
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (17,0)-(18,0)) │ │ │ ├── @ StringNode (location: (17,0)-(18,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (17,0)-(18,0) = "\tx\n" │ │ │ │ ├── content_loc: (17,0)-(18,0) = "\tx\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: "\tx\n" │ │ │ │ └── unescaped: "\tx\n"
│ │ │ └── @ StringNode (location: (18,0)-(19,0)) │ │ │ └── @ StringNode (location: (18,0)-(19,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (18,0)-(19,0) = " y\n" │ │ │ ├── content_loc: (18,0)-(19,0) = " y\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -159,16 +163,17 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (21,2)-(21,6)) │ │ └── @ InterpolatedStringNode (location: (21,2)-(21,6))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (21,2)-(21,6) = "<<~E" │ │ ├── opening_loc: (21,2)-(21,6) = "<<~E"
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (22,0)-(23,0)) │ │ │ ├── @ StringNode (location: (22,0)-(23,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (22,0)-(23,0) = " \tx\n" │ │ │ │ ├── content_loc: (22,0)-(23,0) = " \tx\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: "x\n" │ │ │ │ └── unescaped: "x\n"
│ │ │ └── @ StringNode (location: (23,0)-(24,0)) │ │ │ └── @ StringNode (location: (23,0)-(24,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (23,0)-(24,0) = " y\n" │ │ │ ├── content_loc: (23,0)-(24,0) = " y\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -188,16 +193,17 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (26,2)-(26,6)) │ │ └── @ InterpolatedStringNode (location: (26,2)-(26,6))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (26,2)-(26,6) = "<<~E" │ │ ├── opening_loc: (26,2)-(26,6) = "<<~E"
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (27,0)-(28,0)) │ │ │ ├── @ StringNode (location: (27,0)-(28,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (27,0)-(28,0) = " \tx\n" │ │ │ │ ├── content_loc: (27,0)-(28,0) = " \tx\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: "\tx\n" │ │ │ │ └── unescaped: "\tx\n"
│ │ │ └── @ StringNode (location: (28,0)-(29,0)) │ │ │ └── @ StringNode (location: (28,0)-(29,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (28,0)-(29,0) = "\ty\n" │ │ │ ├── content_loc: (28,0)-(29,0) = "\ty\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -217,16 +223,17 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (31,2)-(31,6)) │ │ └── @ InterpolatedStringNode (location: (31,2)-(31,6))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (31,2)-(31,6) = "<<~E" │ │ ├── opening_loc: (31,2)-(31,6) = "<<~E"
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (32,0)-(33,0)) │ │ │ ├── @ StringNode (location: (32,0)-(33,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (32,0)-(33,0) = " x\n" │ │ │ │ ├── content_loc: (32,0)-(33,0) = " x\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: " x\n" │ │ │ │ └── unescaped: " x\n"
│ │ │ └── @ StringNode (location: (33,0)-(34,0)) │ │ │ └── @ StringNode (location: (33,0)-(34,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (33,0)-(34,0) = " \\\ty\n" │ │ │ ├── content_loc: (33,0)-(34,0) = " \\\ty\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -246,16 +253,17 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (36,2)-(36,6)) │ │ └── @ InterpolatedStringNode (location: (36,2)-(36,6))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (36,2)-(36,6) = "<<~E" │ │ ├── opening_loc: (36,2)-(36,6) = "<<~E"
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (37,0)-(38,0)) │ │ │ ├── @ StringNode (location: (37,0)-(38,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (37,0)-(38,0) = " x\n" │ │ │ │ ├── content_loc: (37,0)-(38,0) = " x\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: " x\n" │ │ │ │ └── unescaped: " x\n"
│ │ │ └── @ StringNode (location: (38,0)-(39,0)) │ │ │ └── @ StringNode (location: (38,0)-(39,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (38,0)-(39,0) = " \\ y\n" │ │ │ ├── content_loc: (38,0)-(39,0) = " \\ y\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -294,22 +302,23 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (44,2)-(44,6)) │ │ └── @ InterpolatedStringNode (location: (44,2)-(44,6))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (44,2)-(44,6) = "<<~E" │ │ ├── opening_loc: (44,2)-(44,6) = "<<~E"
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (45,0)-(46,0)) │ │ │ ├── @ StringNode (location: (45,0)-(46,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (45,0)-(46,0) = " x\n" │ │ │ │ ├── content_loc: (45,0)-(46,0) = " x\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: " x\n" │ │ │ │ └── unescaped: " x\n"
│ │ │ ├── @ StringNode (location: (46,0)-(47,0)) │ │ │ ├── @ StringNode (location: (46,0)-(47,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (46,0)-(47,0) = "\n" │ │ │ │ ├── content_loc: (46,0)-(47,0) = "\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: "\n" │ │ │ │ └── unescaped: "\n"
│ │ │ └── @ StringNode (location: (47,0)-(48,0)) │ │ │ └── @ StringNode (location: (47,0)-(48,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (47,0)-(48,0) = "y\n" │ │ │ ├── content_loc: (47,0)-(48,0) = "y\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -329,22 +338,23 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (50,2)-(50,6)) │ │ └── @ InterpolatedStringNode (location: (50,2)-(50,6))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (50,2)-(50,6) = "<<~E" │ │ ├── opening_loc: (50,2)-(50,6) = "<<~E"
│ │ ├── parts: (length: 3) │ │ ├── parts: (length: 3)
│ │ │ ├── @ StringNode (location: (51,0)-(52,0)) │ │ │ ├── @ StringNode (location: (51,0)-(52,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (51,0)-(52,0) = " x\n" │ │ │ │ ├── content_loc: (51,0)-(52,0) = " x\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: "x\n" │ │ │ │ └── unescaped: "x\n"
│ │ │ ├── @ StringNode (location: (52,0)-(53,0)) │ │ │ ├── @ StringNode (location: (52,0)-(53,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (52,0)-(53,0) = " \n" │ │ │ │ ├── content_loc: (52,0)-(53,0) = " \n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: " \n" │ │ │ │ └── unescaped: " \n"
│ │ │ └── @ StringNode (location: (53,0)-(54,0)) │ │ │ └── @ StringNode (location: (53,0)-(54,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (53,0)-(54,0) = " y\n" │ │ │ ├── content_loc: (53,0)-(54,0) = " y\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -364,16 +374,17 @@
│ │ ├── flags: ∅ │ │ ├── flags: ∅
│ │ └── arguments: (length: 1) │ │ └── arguments: (length: 1)
│ │ └── @ InterpolatedStringNode (location: (56,2)-(56,6)) │ │ └── @ InterpolatedStringNode (location: (56,2)-(56,6))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (56,2)-(56,6) = "<<~E" │ │ ├── opening_loc: (56,2)-(56,6) = "<<~E"
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (57,0)-(58,0)) │ │ │ ├── @ StringNode (location: (57,0)-(58,0))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (57,0)-(58,0) = " x\n" │ │ │ │ ├── content_loc: (57,0)-(58,0) = " x\n"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
│ │ │ │ └── unescaped: "x\n" │ │ │ │ └── unescaped: "x\n"
│ │ │ └── @ StringNode (location: (58,0)-(59,0)) │ │ │ └── @ StringNode (location: (58,0)-(59,0))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (58,0)-(59,0) = " y\n" │ │ │ ├── content_loc: (58,0)-(59,0) = " y\n"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅

View File

@ -4,16 +4,17 @@
@ StatementsNode (location: (1,0)-(1,8)) @ StatementsNode (location: (1,0)-(1,8))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,8)) └── @ InterpolatedStringNode (location: (1,0)-(1,8))
├── flags: ∅
├── opening_loc: (1,0)-(1,8) = "<<~'FOO'" ├── opening_loc: (1,0)-(1,8) = "<<~'FOO'"
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ StringNode (location: (2,0)-(3,0)) │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (2,0)-(3,0) = " baz\\\\\n" │ │ ├── content_loc: (2,0)-(3,0) = " baz\\\\\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "baz\\\\\n" │ │ └── unescaped: "baz\\\\\n"
│ └── @ StringNode (location: (3,0)-(4,0)) │ └── @ StringNode (location: (3,0)-(4,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (3,0)-(4,0) = " qux\n" │ ├── content_loc: (3,0)-(4,0) = " qux\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -4,16 +4,17 @@
@ StatementsNode (location: (1,0)-(1,8)) @ StatementsNode (location: (1,0)-(1,8))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,8)) └── @ InterpolatedStringNode (location: (1,0)-(1,8))
├── flags: ∅
├── opening_loc: (1,0)-(1,8) = "<<~'FOO'" ├── opening_loc: (1,0)-(1,8) = "<<~'FOO'"
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ StringNode (location: (2,0)-(3,0)) │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (2,0)-(3,0) = " baz\\\n" │ │ ├── content_loc: (2,0)-(3,0) = " baz\\\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "baz\\\n" │ │ └── unescaped: "baz\\\n"
│ └── @ StringNode (location: (3,0)-(4,0)) │ └── @ StringNode (location: (3,0)-(4,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (3,0)-(4,0) = " qux\n" │ ├── content_loc: (3,0)-(4,0) = " qux\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -296,10 +296,11 @@
│ │ ├── keyword_loc: (13,38)-(13,44) = "rescue" │ │ ├── keyword_loc: (13,38)-(13,44) = "rescue"
│ │ └── rescue_expression: │ │ └── rescue_expression:
│ │ @ InterpolatedStringNode (location: (13,45)-(13,60)) │ │ @ InterpolatedStringNode (location: (13,45)-(13,60))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (13,45)-(13,46) = "\"" │ │ ├── opening_loc: (13,45)-(13,46) = "\""
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (13,46)-(13,55)) │ │ │ ├── @ StringNode (location: (13,46)-(13,55))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (13,46)-(13,55) = "instance " │ │ │ │ ├── content_loc: (13,46)-(13,55) = "instance "
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -365,10 +366,11 @@
│ ├── keyword_loc: (15,43)-(15,49) = "rescue" │ ├── keyword_loc: (15,43)-(15,49) = "rescue"
│ └── rescue_expression: │ └── rescue_expression:
│ @ InterpolatedStringNode (location: (15,50)-(15,62)) │ @ InterpolatedStringNode (location: (15,50)-(15,62))
│ ├── flags: ∅
│ ├── opening_loc: (15,50)-(15,51) = "\"" │ ├── opening_loc: (15,50)-(15,51) = "\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (15,51)-(15,57)) │ │ ├── @ StringNode (location: (15,51)-(15,57))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (15,51)-(15,57) = "class " │ │ │ ├── content_loc: (15,51)-(15,57) = "class "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅

View File

@ -20,7 +20,7 @@
│ │ │ │ └── value: 1 │ │ │ │ └── value: 1
│ │ │ └── closing_loc: (1,4)-(1,5) = "}" │ │ │ └── closing_loc: (1,4)-(1,5) = "}"
│ │ └── @ StringNode (location: (1,5)-(1,18)) │ │ └── @ StringNode (location: (1,5)-(1,18))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,5)-(1,18) = "(?<match>bar)" │ │ ├── content_loc: (1,5)-(1,18) = "(?<match>bar)"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -4,16 +4,17 @@
@ StatementsNode (location: (1,0)-(1,6)) @ StatementsNode (location: (1,0)-(1,6))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,6)) └── @ InterpolatedStringNode (location: (1,0)-(1,6))
├── flags: ∅
├── opening_loc: (1,0)-(1,6) = "<<~FOO" ├── opening_loc: (1,0)-(1,6) = "<<~FOO"
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ StringNode (location: (2,0)-(3,0)) │ ├── @ StringNode (location: (2,0)-(3,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (2,0)-(3,0) = " baz\\\n" │ │ ├── content_loc: (2,0)-(3,0) = " baz\\\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "baz" │ │ └── unescaped: "baz"
│ └── @ StringNode (location: (3,0)-(4,0)) │ └── @ StringNode (location: (3,0)-(4,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (3,0)-(4,0) = " qux\n" │ ├── content_loc: (3,0)-(4,0) = " qux\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -4,6 +4,7 @@
@ StatementsNode (location: (1,0)-(1,7)) @ StatementsNode (location: (1,0)-(1,7))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,7)) └── @ InterpolatedStringNode (location: (1,0)-(1,7))
├── flags: ∅
├── opening_loc: (1,0)-(1,7) = "<<~HERE" ├── opening_loc: (1,0)-(1,7) = "<<~HERE"
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ EmbeddedStatementsNode (location: (2,2)-(2,5)) │ ├── @ EmbeddedStatementsNode (location: (2,2)-(2,5))
@ -11,7 +12,7 @@
│ │ ├── statements: ∅ │ │ ├── statements: ∅
│ │ └── closing_loc: (2,4)-(2,5) = "}" │ │ └── closing_loc: (2,4)-(2,5) = "}"
│ └── @ StringNode (location: (2,5)-(3,0)) │ └── @ StringNode (location: (2,5)-(3,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (2,5)-(3,0) = "\n" │ ├── content_loc: (2,5)-(3,0) = "\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -8,7 +8,7 @@
├── opening_loc: (1,0)-(1,1) = "/" ├── opening_loc: (1,0)-(1,1) = "/"
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (1,1)-(1,4)) │ ├── @ StringNode (location: (1,1)-(1,4))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,1)-(1,4) = "foo" │ │ ├── content_loc: (1,1)-(1,4) = "foo"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -30,7 +30,7 @@
│ │ │ └── block: ∅ │ │ │ └── block: ∅
│ │ └── closing_loc: (1,9)-(1,10) = "}" │ │ └── closing_loc: (1,9)-(1,10) = "}"
│ └── @ StringNode (location: (1,10)-(1,13)) │ └── @ StringNode (location: (1,10)-(1,13))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (1,10)-(1,13) = "baz" │ ├── content_loc: (1,10)-(1,13) = "baz"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -15,16 +15,17 @@
│ ├── flags: ∅ │ ├── flags: ∅
│ └── arguments: (length: 1) │ └── arguments: (length: 1)
│ └── @ InterpolatedStringNode (location: (1,2)-(1,12)) │ └── @ InterpolatedStringNode (location: (1,2)-(1,12))
│ ├── flags: ∅
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (1,2)-(1,6)) │ │ ├── @ StringNode (location: (1,2)-(1,6))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: (1,2)-(1,6) = "<<~E" │ │ │ ├── opening_loc: (1,2)-(1,6) = "<<~E"
│ │ │ ├── content_loc: (2,0)-(3,0) = " x\n" │ │ │ ├── content_loc: (2,0)-(3,0) = " x\n"
│ │ │ ├── closing_loc: (3,0)-(4,0) = "E\n" │ │ │ ├── closing_loc: (3,0)-(4,0) = "E\n"
│ │ │ └── unescaped: "x\n" │ │ │ └── unescaped: "x\n"
│ │ └── @ StringNode (location: (1,7)-(1,12)) │ │ └── @ StringNode (location: (1,7)-(1,12))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: (1,7)-(1,8) = "\"" │ │ ├── opening_loc: (1,7)-(1,8) = "\""
│ │ ├── content_loc: (1,8)-(1,11) = " y" │ │ ├── content_loc: (1,8)-(1,11) = " y"
│ │ ├── closing_loc: (1,11)-(1,12) = "\"" │ │ ├── closing_loc: (1,11)-(1,12) = "\""

View File

@ -10,22 +10,23 @@
│ ├── closing_loc: (5,0)-(6,0) = "E\n" │ ├── closing_loc: (5,0)-(6,0) = "E\n"
│ └── unescaped: " 1 2\n 3\n" │ └── unescaped: " 1 2\n 3\n"
└── @ InterpolatedStringNode (location: (8,0)-(8,4)) └── @ InterpolatedStringNode (location: (8,0)-(8,4))
├── flags: ∅
├── opening_loc: (8,0)-(8,4) = "<<~E" ├── opening_loc: (8,0)-(8,4) = "<<~E"
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (9,0)-(10,0)) │ ├── @ StringNode (location: (9,0)-(10,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (9,0)-(10,0) = " 1 \\\n" │ │ ├── content_loc: (9,0)-(10,0) = " 1 \\\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "1 " │ │ └── unescaped: "1 "
│ ├── @ StringNode (location: (10,0)-(11,0)) │ ├── @ StringNode (location: (10,0)-(11,0))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (10,0)-(11,0) = " 2\n" │ │ ├── content_loc: (10,0)-(11,0) = " 2\n"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
│ │ └── unescaped: "2\n" │ │ └── unescaped: "2\n"
│ └── @ StringNode (location: (11,0)-(12,0)) │ └── @ StringNode (location: (11,0)-(12,0))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (11,0)-(12,0) = " 3\n" │ ├── content_loc: (11,0)-(12,0) = " 3\n"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -4,13 +4,15 @@
@ StatementsNode (location: (1,0)-(1,14)) @ StatementsNode (location: (1,0)-(1,14))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,14)) └── @ InterpolatedStringNode (location: (1,0)-(1,14))
├── flags: ∅
├── opening_loc: ∅ ├── opening_loc: ∅
├── parts: (length: 2) ├── parts: (length: 2)
│ ├── @ InterpolatedStringNode (location: (1,0)-(1,8)) │ ├── @ InterpolatedStringNode (location: (1,0)-(1,8))
│ │ ├── flags: ∅
│ │ ├── opening_loc: (1,0)-(1,1) = "\"" │ │ ├── opening_loc: (1,0)-(1,1) = "\""
│ │ ├── parts: (length: 2) │ │ ├── parts: (length: 2)
│ │ │ ├── @ StringNode (location: (1,1)-(1,4)) │ │ │ ├── @ StringNode (location: (1,1)-(1,4))
│ │ │ │ ├── flags: │ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── opening_loc: ∅
│ │ │ │ ├── content_loc: (1,1)-(1,4) = "foo" │ │ │ │ ├── content_loc: (1,1)-(1,4) = "foo"
│ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── closing_loc: ∅
@ -22,7 +24,7 @@
│ │ │ └── name: :@a │ │ │ └── name: :@a
│ │ └── closing_loc: (1,7)-(1,8) = "\"" │ │ └── closing_loc: (1,7)-(1,8) = "\""
│ └── @ StringNode (location: (1,9)-(1,14)) │ └── @ StringNode (location: (1,9)-(1,14))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: (1,9)-(1,10) = "\"" │ ├── opening_loc: (1,9)-(1,10) = "\""
│ ├── content_loc: (1,10)-(1,13) = "bar" │ ├── content_loc: (1,10)-(1,13) = "bar"
│ ├── closing_loc: (1,13)-(1,14) = "\"" │ ├── closing_loc: (1,13)-(1,14) = "\""

View File

@ -4,6 +4,7 @@
@ StatementsNode (location: (1,0)-(1,14)) @ StatementsNode (location: (1,0)-(1,14))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,14)) └── @ InterpolatedStringNode (location: (1,0)-(1,14))
├── flags: ∅
├── opening_loc: (1,0)-(1,1) = "\"" ├── opening_loc: (1,0)-(1,1) = "\""
├── parts: (length: 5) ├── parts: (length: 5)
│ ├── @ EmbeddedVariableNode (location: (1,1)-(1,4)) │ ├── @ EmbeddedVariableNode (location: (1,1)-(1,4))
@ -12,7 +13,7 @@
│ │ @ InstanceVariableReadNode (location: (1,2)-(1,4)) │ │ @ InstanceVariableReadNode (location: (1,2)-(1,4))
│ │ └── name: :@a │ │ └── name: :@a
│ ├── @ StringNode (location: (1,4)-(1,5)) │ ├── @ StringNode (location: (1,4)-(1,5))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,4)-(1,5) = " " │ │ ├── content_loc: (1,4)-(1,5) = " "
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -23,7 +24,7 @@
│ │ @ ClassVariableReadNode (location: (1,6)-(1,9)) │ │ @ ClassVariableReadNode (location: (1,6)-(1,9))
│ │ └── name: :@@a │ │ └── name: :@@a
│ ├── @ StringNode (location: (1,9)-(1,10)) │ ├── @ StringNode (location: (1,9)-(1,10))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,9)-(1,10) = " " │ │ ├── content_loc: (1,9)-(1,10) = " "
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅

View File

@ -4,10 +4,11 @@
@ StatementsNode (location: (1,0)-(1,14)) @ StatementsNode (location: (1,0)-(1,14))
└── body: (length: 1) └── body: (length: 1)
└── @ InterpolatedStringNode (location: (1,0)-(1,14)) └── @ InterpolatedStringNode (location: (1,0)-(1,14))
├── flags: ∅
├── opening_loc: (1,0)-(1,1) = "\"" ├── opening_loc: (1,0)-(1,1) = "\""
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (1,1)-(1,4)) │ ├── @ StringNode (location: (1,1)-(1,4))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,1)-(1,4) = "foo" │ │ ├── content_loc: (1,1)-(1,4) = "foo"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -29,7 +30,7 @@
│ │ │ └── block: ∅ │ │ │ └── block: ∅
│ │ └── closing_loc: (1,9)-(1,10) = "}" │ │ └── closing_loc: (1,9)-(1,10) = "}"
│ └── @ StringNode (location: (1,10)-(1,13)) │ └── @ StringNode (location: (1,10)-(1,13))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (1,10)-(1,13) = "baz" │ ├── content_loc: (1,10)-(1,13) = "baz"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -7,7 +7,7 @@
├── opening_loc: (1,0)-(1,2) = ":\"" ├── opening_loc: (1,0)-(1,2) = ":\""
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (1,2)-(1,5)) │ ├── @ StringNode (location: (1,2)-(1,5))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,2)-(1,5) = "foo" │ │ ├── content_loc: (1,2)-(1,5) = "foo"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -29,7 +29,7 @@
│ │ │ └── block: ∅ │ │ │ └── block: ∅
│ │ └── closing_loc: (1,10)-(1,11) = "}" │ │ └── closing_loc: (1,10)-(1,11) = "}"
│ └── @ StringNode (location: (1,11)-(1,14)) │ └── @ StringNode (location: (1,11)-(1,14))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (1,11)-(1,14) = "baz" │ ├── content_loc: (1,11)-(1,14) = "baz"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -21,7 +21,7 @@
│ ├── opening_loc: (1,17)-(1,19) = ":\"" │ ├── opening_loc: (1,17)-(1,19) = ":\""
│ ├── parts: (length: 2) │ ├── parts: (length: 2)
│ │ ├── @ StringNode (location: (1,19)-(1,22)) │ │ ├── @ StringNode (location: (1,19)-(1,22))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (1,19)-(1,22) = "foo" │ │ │ ├── content_loc: (1,19)-(1,22) = "foo"
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅

View File

@ -7,7 +7,7 @@
├── opening_loc: (1,0)-(1,1) = "`" ├── opening_loc: (1,0)-(1,1) = "`"
├── parts: (length: 3) ├── parts: (length: 3)
│ ├── @ StringNode (location: (1,1)-(1,4)) │ ├── @ StringNode (location: (1,1)-(1,4))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (1,1)-(1,4) = "foo" │ │ ├── content_loc: (1,1)-(1,4) = "foo"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅
@ -29,7 +29,7 @@
│ │ │ └── block: ∅ │ │ │ └── block: ∅
│ │ └── closing_loc: (1,9)-(1,10) = "}" │ │ └── closing_loc: (1,9)-(1,10) = "}"
│ └── @ StringNode (location: (1,10)-(1,13)) │ └── @ StringNode (location: (1,10)-(1,13))
│ ├── flags: │ ├── flags: frozen
│ ├── opening_loc: ∅ │ ├── opening_loc: ∅
│ ├── content_loc: (1,10)-(1,13) = "baz" │ ├── content_loc: (1,10)-(1,13) = "baz"
│ ├── closing_loc: ∅ │ ├── closing_loc: ∅

View File

@ -13,7 +13,7 @@
│ ├── opening_loc: (3,0)-(3,1) = "`" │ ├── opening_loc: (3,0)-(3,1) = "`"
│ ├── parts: (length: 3) │ ├── parts: (length: 3)
│ │ ├── @ StringNode (location: (3,1)-(3,5)) │ │ ├── @ StringNode (location: (3,1)-(3,5))
│ │ │ ├── flags: │ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: ∅ │ │ │ ├── opening_loc: ∅
│ │ │ ├── content_loc: (3,1)-(3,5) = "foo " │ │ │ ├── content_loc: (3,1)-(3,5) = "foo "
│ │ │ ├── closing_loc: ∅ │ │ │ ├── closing_loc: ∅
@ -35,7 +35,7 @@
│ │ │ │ └── block: ∅ │ │ │ │ └── block: ∅
│ │ │ └── closing_loc: (3,10)-(3,11) = "}" │ │ │ └── closing_loc: (3,10)-(3,11) = "}"
│ │ └── @ StringNode (location: (3,11)-(3,15)) │ │ └── @ StringNode (location: (3,11)-(3,15))
│ │ ├── flags: │ │ ├── flags: frozen
│ │ ├── opening_loc: ∅ │ │ ├── opening_loc: ∅
│ │ ├── content_loc: (3,11)-(3,15) = " baz" │ │ ├── content_loc: (3,11)-(3,15) = " baz"
│ │ ├── closing_loc: ∅ │ │ ├── closing_loc: ∅