From b817cd25c5b53405c9005f63e90f98464c8c9b5f Mon Sep 17 00:00:00 2001 From: Herwin Date: Sat, 15 Jun 2024 12:21:58 +0200 Subject: [PATCH 001/109] Document MultiTargetNode --- config.yml | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/config.yml b/config.yml index 98443af774c..f606d5dca06 100644 --- a/config.yml +++ b/config.yml @@ -2916,8 +2916,36 @@ nodes: - RequiredParameterNode - BackReferenceReadNode # On parsing error of `$',` - NumberedReferenceReadNode # On parsing error of `$1,` + comment: | + Represents the targets expressions before a splat node. + + a, (b, c, *) = 1, 2, 3, 4, 5 + ^^^^ + + The splat node can be absent, in that case all target expressions are in the left field. + + a, (b, c) = 1, 2, 3, 4, 5 + ^^^^ - name: rest type: node? + kind: + - ImplicitRestNode + - SplatNode + comment: | + Represents a splat node in the target expression. + + a, (b, *c) = 1, 2, 3, 4 + ^^ + + The variable can be empty, this results in a `SplatNode` with a `nil` expression field. + + a, (b, *) = 1, 2, 3, 4 + ^ + + If the `*` is omitted, the field will containt an `ImplicitRestNode` + + a, (b,) = 1, 2, 3, 4 + ^ - name: rights type: node[] kind: @@ -2932,15 +2960,35 @@ nodes: - MultiTargetNode - RequiredParameterNode - BackReferenceReadNode # On parsing error of `*,$'` + comment: | + Represents the targets expressions after a splat node. + + a, (*, b, c) = 1, 2, 3, 4, 5 + ^^^^ - name: lparen_loc type: location? + comment: | + The location of the opening parenthesis. + + a, (b, c) = 1, 2, 3 + ^ - name: rparen_loc type: location? + comment: | + The location of the closing parenthesis. + + a, (b, c) = 1, 2, 3 + ^ comment: | Represents a multi-target expression. a, (b, c) = 1, 2, 3 ^^^^^^ + + This can be a part of `MultiWriteNode` as above, or the target of a `for` loop + + for a, b in [[1, 2], [3, 4]] + ^^^^ - name: MultiWriteNode fields: - name: lefts From b6a97a43c2b5f8529e026125c7fe2779454692ca Mon Sep 17 00:00:00 2001 From: Herwin Date: Sat, 15 Jun 2024 14:54:43 +0200 Subject: [PATCH 002/109] Document MultiWriteNode fields --- config.yml | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/config.yml b/config.yml index f606d5dca06..16d042dbdcc 100644 --- a/config.yml +++ b/config.yml @@ -3003,8 +3003,36 @@ nodes: - CallTargetNode - IndexTargetNode - MultiTargetNode + comment: | + Represents the targets expressions before a splat node. + + a, b, * = 1, 2, 3, 4, 5 + ^^^^ + + The splat node can be absent, in that case all target expressions are in the left field. + + a, b, c = 1, 2, 3, 4, 5 + ^^^^^^^ - name: rest type: node? + kind: + - ImplicitRestNode + - SplatNode + comment: | + Represents a splat node in the target expression. + + a, b, *c = 1, 2, 3, 4 + ^^ + + The variable can be empty, this results in a `SplatNode` with a `nil` expression field. + + a, b, * = 1, 2, 3, 4 + ^ + + If the `*` is omitted, the field will containt an `ImplicitRestNode` + + a, b, = 1, 2, 3, 4 + ^ - name: rights type: node[] kind: @@ -3017,14 +3045,39 @@ nodes: - CallTargetNode - IndexTargetNode - MultiTargetNode + comment: | + Represents the targets expressions after a splat node. + + a, *, b, c = 1, 2, 3, 4, 5 + ^^^^ - name: lparen_loc type: location? + comment: | + The location of the opening parenthesis. + + (a, b, c) = 1, 2, 3 + ^ - name: rparen_loc type: location? + comment: | + The location of the closing parenthesis. + + (a, b, c) = 1, 2, 3 + ^ - name: operator_loc type: location + comment: | + The location of the operator. + + a, b, c = 1, 2, 3 + ^ - name: value type: node + comment: | + The value to write to the targets. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). + + a, b, c = 1, 2, 3 + ^^^^^^^ comment: | Represents a write to a multi-target expression. From fc78cdd1b4fb881e58e4bae03a3de6b4063eb15f Mon Sep 17 00:00:00 2001 From: Cameron Dutro Date: Sun, 16 Jun 2024 13:58:23 -0700 Subject: [PATCH 003/109] Correctly deserialize non-UTF-8 strings for JavaScript --- templates/javascript/src/deserialize.js.erb | 32 +++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/templates/javascript/src/deserialize.js.erb b/templates/javascript/src/deserialize.js.erb index 5bed36e7fd2..faac085197f 100644 --- a/templates/javascript/src/deserialize.js.erb +++ b/templates/javascript/src/deserialize.js.erb @@ -41,7 +41,7 @@ class SerializationBuffer { } readString(length) { - return new TextDecoder().decode(this.readBytes(length)); + return this.decodeString(this.readBytes(length)); } // Read a 32-bit unsigned integer in little-endian format. @@ -92,7 +92,7 @@ class SerializationBuffer { case 1: { const startOffset = this.readVarInt(); const length = this.readVarInt(); - return new TextDecoder().decode(this.source.slice(startOffset, startOffset + length)); + return this.decodeString(this.source.slice(startOffset, startOffset + length)); } case 2: return this.readString(this.readVarInt()); @@ -122,6 +122,34 @@ class SerializationBuffer { return view.getFloat64(0, LITTLE_ENDIAN); } + + decodeString(bytes) { + try { + return this.utf8Decoder.decode(bytes); + } catch (e) { + if (e.code === "ERR_ENCODING_INVALID_ENCODED_DATA") { + return this.asciiDecoder.decode(bytes); + } + + throw e; + } + } + + get utf8Decoder() { + if (!this._utf8Decoder) { + this._utf8Decoder = new TextDecoder("utf8", {fatal: true}); + } + + return this._utf8Decoder; + } + + get asciiDecoder() { + if (!this._asciiDecoder) { + this._asciiDecoder = new TextDecoder("ascii"); + } + + return this._asciiDecoder; + } } /** From 7f65e4b1b9a1dcc6138df45807b0989196389b26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 16:38:52 +0000 Subject: [PATCH 004/109] Bump org.apache.maven.plugins:maven-surefire-plugin in /java-wasm Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.2.5 to 3.3.0. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.2.5...surefire-3.3.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-wasm/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index 792d2d4dde3..998160486c3 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -37,7 +37,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.2.5 + 3.3.0 From cd1f14c717ffdc8cac21cc37b036eb8f8c71d307 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 16:28:27 +0000 Subject: [PATCH 005/109] Bump steep from 1.7.0 to 1.7.1 in /gemfiles/typecheck Bumps [steep](https://github.com/soutaro/steep) from 1.7.0 to 1.7.1. - [Release notes](https://github.com/soutaro/steep/releases) - [Changelog](https://github.com/soutaro/steep/blob/master/CHANGELOG.md) - [Commits](https://github.com/soutaro/steep/compare/v1.7.0...v1.7.1) --- updated-dependencies: - dependency-name: steep dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/typecheck/Gemfile.lock | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index a3218387af0..5c2a645bcb3 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -24,7 +24,8 @@ GEM csv (3.3.0) drb (2.2.1) erubi (1.12.0) - ffi (1.17.0) + ffi (1.17.0-arm64-darwin) + ffi (1.17.0-x86_64-linux-gnu) fileutils (1.7.2) i18n (1.14.5) concurrent-ruby (~> 1.0) @@ -73,7 +74,7 @@ GEM prism (>= 0.19.0) sorbet-static-and-runtime (>= 0.5.10187) thor (>= 0.19.2) - steep (1.7.0) + steep (1.7.1) activesupport (>= 5.1) concurrent-ruby (>= 1.1.10) csv (>= 3.0.9) From 664a69622c86562db02fadf52c5cad3b0bcf1704 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 16:24:48 +0000 Subject: [PATCH 006/109] Bump parser from 3.3.2.0 to 3.3.3.0 in /gemfiles/2.7 Bumps [parser](https://github.com/whitequark/parser) from 3.3.2.0 to 3.3.3.0. - [Changelog](https://github.com/whitequark/parser/blob/master/CHANGELOG.md) - [Commits](https://github.com/whitequark/parser/compare/v3.3.2.0...v3.3.3.0) --- updated-dependencies: - dependency-name: parser dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/2.7/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/2.7/Gemfile.lock b/gemfiles/2.7/Gemfile.lock index a349a137bfc..c166d2e2a9c 100644 --- a/gemfiles/2.7/Gemfile.lock +++ b/gemfiles/2.7/Gemfile.lock @@ -9,7 +9,7 @@ GEM ast (2.4.2) ffi (1.16.3) onigmo (0.1.0) - parser (3.3.2.0) + parser (3.3.3.0) ast (~> 2.4.1) racc power_assert (2.0.3) From 350a7ade650d2e559789cc88738fd42da75bc2cb Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 18 Jun 2024 19:56:37 -0400 Subject: [PATCH 007/109] Upstream sync extension.c --- ext/prism/extension.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/prism/extension.c b/ext/prism/extension.c index d0bc5e7f0c1..1fb858491ec 100644 --- a/ext/prism/extension.c +++ b/ext/prism/extension.c @@ -1103,7 +1103,7 @@ parse_file_failure_p(int argc, VALUE *argv, VALUE self) { /** * The init function that Ruby calls when loading this extension. */ -RUBY_FUNC_EXPORTED void +PRISM_EXPORTED_FUNCTION void Init_prism(void) { // Make sure that the prism library version matches the expected version. // Otherwise something was compiled incorrectly. From 0d3943cbd5d32b1dda96f25a2a8b0ef0a478ee59 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 18 Jun 2024 19:57:55 -0400 Subject: [PATCH 008/109] Upstream sync locals_test.rb --- test/prism/locals_test.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/prism/locals_test.rb b/test/prism/locals_test.rb index 27fdfc90ef4..3c45d8b08b1 100644 --- a/test/prism/locals_test.rb +++ b/test/prism/locals_test.rb @@ -169,7 +169,11 @@ def prism_locals(source) sorted << AnonymousLocal if params.keywords.any? if params.keyword_rest.is_a?(ForwardingParameterNode) - sorted.push(:*, :**, :&, :"...") + if sorted.length == 0 + sorted.push(:"...") + else + sorted.push(:*, :**, :&, :"...") + end elsif params.keyword_rest.is_a?(KeywordRestParameterNode) sorted << (params.keyword_rest.name || :**) end From 4601d3adfd1a5d937daa1c2ad732749348a8eda5 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 18 Jun 2024 20:05:55 -0400 Subject: [PATCH 009/109] Make sure Init_prism is visible for extension --- ext/prism/extension.c | 2 +- ext/prism/extension.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/prism/extension.c b/ext/prism/extension.c index 1fb858491ec..d0bc5e7f0c1 100644 --- a/ext/prism/extension.c +++ b/ext/prism/extension.c @@ -1103,7 +1103,7 @@ parse_file_failure_p(int argc, VALUE *argv, VALUE self) { /** * The init function that Ruby calls when loading this extension. */ -PRISM_EXPORTED_FUNCTION void +RUBY_FUNC_EXPORTED void Init_prism(void) { // Make sure that the prism library version matches the expected version. // Otherwise something was compiled incorrectly. diff --git a/ext/prism/extension.h b/ext/prism/extension.h index fe1b238ff89..d49e4f3b9e9 100644 --- a/ext/prism/extension.h +++ b/ext/prism/extension.h @@ -14,6 +14,6 @@ VALUE pm_integer_new(const pm_integer_t *integer); void Init_prism_api_node(void); void Init_prism_pack(void); -PRISM_EXPORTED_FUNCTION void Init_prism(void); +RUBY_FUNC_EXPORTED void Init_prism(void); #endif From 0020da09137dd88f98d9597286c039648da0ce65 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jun 2024 00:16:03 +0000 Subject: [PATCH 010/109] Bump sorbet from 0.5.11428 to 0.5.11435 in /gemfiles/typecheck Bumps [sorbet](https://github.com/sorbet/sorbet) from 0.5.11428 to 0.5.11435. - [Release notes](https://github.com/sorbet/sorbet/releases) - [Commits](https://github.com/sorbet/sorbet/commits) --- updated-dependencies: - dependency-name: sorbet dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/typecheck/Gemfile.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index 5c2a645bcb3..f785434c7e9 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -61,14 +61,14 @@ GEM sexp_processor (~> 4.16) securerandom (0.3.1) sexp_processor (4.17.1) - sorbet (0.5.11428) - sorbet-static (= 0.5.11428) - sorbet-runtime (0.5.11428) - sorbet-static (0.5.11428-universal-darwin) - sorbet-static (0.5.11428-x86_64-linux) - sorbet-static-and-runtime (0.5.11428) - sorbet (= 0.5.11428) - sorbet-runtime (= 0.5.11428) + sorbet (0.5.11435) + sorbet-static (= 0.5.11435) + sorbet-runtime (0.5.11435) + sorbet-static (0.5.11435-universal-darwin) + sorbet-static (0.5.11435-x86_64-linux) + sorbet-static-and-runtime (0.5.11435) + sorbet (= 0.5.11435) + sorbet-runtime (= 0.5.11435) spoom (1.3.2) erubi (>= 1.10.0) prism (>= 0.19.0) From 1a2626be275dddc8552774d471a703151c5c8262 Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Thu, 20 Jun 2024 12:15:25 +0900 Subject: [PATCH 011/109] Set `#line" directives to respect the path in ruby/ruby repo ruby/ruby measures test coverage of C code, but the `#line` directive generated by prism points to a file that does not exist, so coverage is not taken properly. This changeset specifies the location of the source files as a relative path in terms of ruby/ruby repo. --- templates/ext/prism/api_node.c.erb | 32 +++++++++++++++--------------- templates/src/node.c.erb | 4 ++-- templates/src/serialize.c.erb | 2 +- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/templates/ext/prism/api_node.c.erb b/templates/ext/prism/api_node.c.erb index 0e3e4d63cc2..de6f4b95fd4 100644 --- a/templates/ext/prism/api_node.c.erb +++ b/templates/ext/prism/api_node.c.erb @@ -1,4 +1,4 @@ -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" #include "prism/extension.h" extern VALUE rb_cPrism; @@ -142,7 +142,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi switch (PM_NODE_TYPE(node)) { <%- nodes.each do |node| -%> <%- if node.fields.any? { |field| [Prism::Template::NodeField, Prism::Template::OptionalNodeField, Prism::Template::NodeListField].include?(field.class) } -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" case <%= node.type %>: { pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node; <%- node.fields.each do |field| -%> @@ -162,13 +162,13 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi default: break; } -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" } else { const pm_node_t *node = pm_node_stack_pop(&node_stack); switch (PM_NODE_TYPE(node)) { <%- nodes.each do |node| -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" case <%= node.type %>: { <%- if node.fields.any? { |field| ![Prism::Template::NodeField, Prism::Template::OptionalNodeField, Prism::Template::FlagsField].include?(field.class) } -%> pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node; @@ -182,50 +182,50 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi // <%= field.name %> <%- case field -%> <%- when Prism::Template::NodeField, Prism::Template::OptionalNodeField -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" argv[<%= index %>] = rb_ary_pop(value_stack); <%- when Prism::Template::NodeListField -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" argv[<%= index %>] = rb_ary_new_capa(cast-><%= field.name %>.size); for (size_t index = 0; index < cast-><%= field.name %>.size; index++) { rb_ary_push(argv[<%= index %>], rb_ary_pop(value_stack)); } <%- when Prism::Template::StringField -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" argv[<%= index %>] = pm_string_new(&cast-><%= field.name %>, encoding); <%- when Prism::Template::ConstantField -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" assert(cast-><%= field.name %> != 0); argv[<%= index %>] = RARRAY_AREF(constants, cast-><%= field.name %> - 1); <%- when Prism::Template::OptionalConstantField -%> argv[<%= index %>] = cast-><%= field.name %> == 0 ? Qnil : RARRAY_AREF(constants, cast-><%= field.name %> - 1); <%- when Prism::Template::ConstantListField -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" argv[<%= index %>] = rb_ary_new_capa(cast-><%= field.name %>.size); for (size_t index = 0; index < cast-><%= field.name %>.size; index++) { assert(cast-><%= field.name %>.ids[index] != 0); rb_ary_push(argv[<%= index %>], RARRAY_AREF(constants, cast-><%= field.name %>.ids[index] - 1)); } <%- when Prism::Template::LocationField -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" argv[<%= index %>] = pm_location_new(parser, cast-><%= field.name %>.start, cast-><%= field.name %>.end); <%- when Prism::Template::OptionalLocationField -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" argv[<%= index %>] = cast-><%= field.name %>.start == NULL ? Qnil : pm_location_new(parser, cast-><%= field.name %>.start, cast-><%= field.name %>.end); <%- when Prism::Template::UInt8Field -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" argv[<%= index %>] = UINT2NUM(cast-><%= field.name %>); <%- when Prism::Template::UInt32Field -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" argv[<%= index %>] = ULONG2NUM(cast-><%= field.name %>); <%- when Prism::Template::FlagsField -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" argv[<%= index %>] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK); <%- when Prism::Template::IntegerField -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" argv[<%= index %>] = pm_integer_new(&cast-><%= field.name %>); <%- when Prism::Template::DoubleField -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" argv[<%= index %>] = DBL2NUM(cast-><%= field.name %>); <%- else -%> <%- raise -%> diff --git a/templates/src/node.c.erb b/templates/src/node.c.erb index deb2ea49fce..2700dba1e64 100644 --- a/templates/src/node.c.erb +++ b/templates/src/node.c.erb @@ -106,7 +106,7 @@ PRISM_EXPORTED_FUNCTION void pm_node_destroy(pm_parser_t *parser, pm_node_t *node) { switch (PM_NODE_TYPE(node)) { <%- nodes.each do |node| -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/src/<%= File.basename(__FILE__) %>" case <%= node.type %>: { <%- if node.fields.any? { |field| ![Prism::Template::LocationField, Prism::Template::OptionalLocationField, Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::FlagsField, Prism::Template::ConstantField, Prism::Template::OptionalConstantField, Prism::Template::DoubleField].include?(field.class) } -%> pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node; @@ -135,7 +135,7 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) { break; } <%- end -%> -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/src/<%= File.basename(__FILE__) %>" default: assert(false && "unreachable"); break; diff --git a/templates/src/serialize.c.erb b/templates/src/serialize.c.erb index 97101e36d52..dd4b3fa5f04 100644 --- a/templates/src/serialize.c.erb +++ b/templates/src/serialize.c.erb @@ -267,7 +267,7 @@ pm_serialize_metadata(pm_parser_t *parser, pm_buffer_t *buffer) { pm_serialize_diagnostic_list(parser, &parser->warning_list, buffer); } -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/src/<%= File.basename(__FILE__) %>" /** * Serialize the metadata, nodes, and constant pool. */ From 8174aac92995da9b6de1b623fde9ea91403f09a0 Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Fri, 21 Jun 2024 12:32:10 +0900 Subject: [PATCH 012/109] Update `#line` that was missed to update Follow up 1a2626be275dddc8552774d471a703151c5c8262 --- templates/src/node.c.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/src/node.c.erb b/templates/src/node.c.erb index 2700dba1e64..da30a96ec43 100644 --- a/templates/src/node.c.erb +++ b/templates/src/node.c.erb @@ -1,4 +1,4 @@ -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" +#line <%= __LINE__ + 1 %> "prism/templates/src/<%= File.basename(__FILE__) %>" #include "prism/node.h" /** From 3024bee60c7029007c5eb8bfb3a2c10b2873dd6e Mon Sep 17 00:00:00 2001 From: Stan Lo Date: Thu, 20 Jun 2024 22:30:12 +0100 Subject: [PATCH 013/109] Prevent optional block parameter from accepting certain prefixed values This commit prevents the following unary operators from being accepted as the value prefix of a block's optional parameter: - `+` - `-` - `~` - `!` For example, `f { |a = +b| }` will now raise a syntax error. Co-authored-by: Kevin Newton --- config.yml | 1 + src/prism.c | 17 +++++++++++++++++ templates/src/diagnostic.c.erb | 1 + test/prism/errors_test.rb | 11 +++++++++++ 4 files changed, 30 insertions(+) diff --git a/config.yml b/config.yml index 16d042dbdcc..879b1158a34 100644 --- a/config.yml +++ b/config.yml @@ -261,6 +261,7 @@ errors: - TERNARY_COLON - TERNARY_EXPRESSION_FALSE - TERNARY_EXPRESSION_TRUE + - UNARY_DISALLOWED - UNARY_RECEIVER - UNDEF_ARGUMENT - UNEXPECTED_BLOCK_ARGUMENT diff --git a/src/prism.c b/src/prism.c index 2c9d3d9c56f..0ad9dcff9a1 100644 --- a/src/prism.c +++ b/src/prism.c @@ -17142,6 +17142,10 @@ pm_parser_err_prefix(pm_parser_t *parser, pm_diagnostic_id_t diag_id) { PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->previous, diag_id, human, parser->previous.start[0]); break; } + case PM_ERR_UNARY_DISALLOWED: { + PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->current, diag_id, pm_token_type_human(parser->current.type)); + break; + } default: pm_parser_err_previous(parser, diag_id); break; @@ -19675,6 +19679,10 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } } case PM_TOKEN_BANG: { + if (binding_power > PM_BINDING_POWER_UNARY) { + pm_parser_err_prefix(parser, PM_ERR_UNARY_DISALLOWED); + } + parser_lex(parser); pm_token_t operator = parser->previous; @@ -19685,6 +19693,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b return (pm_node_t *) node; } case PM_TOKEN_TILDE: { + if (binding_power > PM_BINDING_POWER_UNARY) { + pm_parser_err_prefix(parser, PM_ERR_UNARY_DISALLOWED); + } parser_lex(parser); pm_token_t operator = parser->previous; @@ -19694,6 +19705,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b return (pm_node_t *) node; } case PM_TOKEN_UMINUS: { + if (binding_power > PM_BINDING_POWER_UNARY) { + pm_parser_err_prefix(parser, PM_ERR_UNARY_DISALLOWED); + } parser_lex(parser); pm_token_t operator = parser->previous; @@ -19810,6 +19824,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b return (pm_node_t *) pm_lambda_node_create(parser, &locals, &operator, &opening, &parser->previous, parameters, body); } case PM_TOKEN_UPLUS: { + if (binding_power > PM_BINDING_POWER_UNARY) { + pm_parser_err_prefix(parser, PM_ERR_UNARY_DISALLOWED); + } parser_lex(parser); pm_token_t operator = parser->previous; diff --git a/templates/src/diagnostic.c.erb b/templates/src/diagnostic.c.erb index f94f83a7a19..b6b2f532a87 100644 --- a/templates/src/diagnostic.c.erb +++ b/templates/src/diagnostic.c.erb @@ -344,6 +344,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_ERR_TERNARY_EXPRESSION_TRUE] = { "expected an expression after `?` in the ternary operator", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_UNDEF_ARGUMENT] = { "invalid argument being passed to `undef`; expected a bare word, constant, or symbol argument", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_UNARY_RECEIVER] = { "unexpected %s, expected a receiver for unary `%c`", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_UNARY_DISALLOWED] = { "unexpected %s; unary calls are not allowed in this context", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_UNEXPECTED_BLOCK_ARGUMENT] = { "block argument should not be given", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_UNEXPECTED_INDEX_BLOCK] = { "unexpected block arg given in index assignment; blocks are not allowed in index assignment expressions", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_UNEXPECTED_INDEX_KEYWORDS] = { "unexpected keyword arg given in index assignment; keywords are not allowed in index assignment expressions", PM_ERROR_LEVEL_SYNTAX }, diff --git a/test/prism/errors_test.rb b/test/prism/errors_test.rb index 2d8ddd7a113..fcdfc4a0bbd 100644 --- a/test/prism/errors_test.rb +++ b/test/prism/errors_test.rb @@ -1493,6 +1493,17 @@ def test_shadow_args_in_block ] end + def test_optional_block_parameters_with_unary_operator + [ + ["foo { |a = +b| }", ["unexpected '+'; unary calls are not allowed in this context", 11..12]], + ["foo { |a = -b| }", ["unexpected '-'; unary calls are not allowed in this context", 11..12]], + ["foo { |a = !b| }", ["unexpected '!'; unary calls are not allowed in this context", 11..12]], + ["foo { |a = ~b| }", ["unexpected '~'; unary calls are not allowed in this context", 11..12]], + ].each do |source, *errors| + assert_errors expression(source), source, errors + end + end + def test_repeated_parameter_name_in_destructured_params source = "def f(a, (b, (a))); end" From c83d7844b876dfb90c580a64b0023d8fb3c75761 Mon Sep 17 00:00:00 2001 From: Andrew Konchin Date: Tue, 25 Jun 2024 16:14:12 +0300 Subject: [PATCH 014/109] Fix documentation comment in generated with templates files Fix warning ``` /******************************************************************************/ ^ warning: [dangling-doc-comments] documentation comment is not attached to any declaration ``` in Nodes.java and AbstractNodeVisitor.java files. /** is treated as a starting of a javadoc comment. --- templates/template.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/template.rb b/templates/template.rb index 6f79a853712..7a330f5e27c 100755 --- a/templates/template.rb +++ b/templates/template.rb @@ -559,13 +559,13 @@ def render(name, write_to: nil) HEADING else <<~HEADING - /******************************************************************************/ + /*----------------------------------------------------------------------------*/ /* This file is generated by the templates/template.rb script and should not */ /* be modified manually. See */ /* #{filepath + " " * (74 - filepath.size) } */ /* if you are looking to modify the */ /* template */ - /******************************************************************************/ + /*----------------------------------------------------------------------------*/ HEADING end From 8d887c9a361a5cb390afccedcfca2113abd7747e Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 25 Jun 2024 09:34:21 -0400 Subject: [PATCH 015/109] Bump dependencies --- Gemfile.lock | 4 ++-- gemfiles/3.0/Gemfile.lock | 4 ++-- gemfiles/3.1/Gemfile.lock | 4 ++-- gemfiles/3.2/Gemfile.lock | 4 ++-- gemfiles/3.3/Gemfile.lock | 4 ++-- gemfiles/3.4/Gemfile.lock | 4 ++-- gemfiles/jruby/Gemfile.lock | 2 +- gemfiles/truffleruby/Gemfile.lock | 2 +- gemfiles/typecheck/Gemfile.lock | 29 ++++++++++++++--------------- 9 files changed, 28 insertions(+), 29 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 27196be614e..63676222c57 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,11 +10,11 @@ GEM benchmark-ips (2.13.0) ffi (1.17.0) mini_portile2 (2.8.7) - nokogiri (1.16.5) + nokogiri (1.16.6) mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) - parser (3.3.2.0) + parser (3.3.3.0) ast (~> 2.4.1) racc power_assert (2.0.3) diff --git a/gemfiles/3.0/Gemfile.lock b/gemfiles/3.0/Gemfile.lock index 1a28f17f752..1b42cdb60b9 100644 --- a/gemfiles/3.0/Gemfile.lock +++ b/gemfiles/3.0/Gemfile.lock @@ -10,11 +10,11 @@ GEM ffi (1.17.0) logger (1.6.0) mini_portile2 (2.8.7) - nokogiri (1.16.5) + nokogiri (1.16.6) mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) - parser (3.3.2.0) + parser (3.3.3.0) ast (~> 2.4.1) racc power_assert (2.0.3) diff --git a/gemfiles/3.1/Gemfile.lock b/gemfiles/3.1/Gemfile.lock index f83387a477e..472ba5fa9ae 100644 --- a/gemfiles/3.1/Gemfile.lock +++ b/gemfiles/3.1/Gemfile.lock @@ -10,11 +10,11 @@ GEM ffi (1.17.0) logger (1.6.0) mini_portile2 (2.8.7) - nokogiri (1.16.5) + nokogiri (1.16.6) mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) - parser (3.3.2.0) + parser (3.3.3.0) ast (~> 2.4.1) racc power_assert (2.0.3) diff --git a/gemfiles/3.2/Gemfile.lock b/gemfiles/3.2/Gemfile.lock index bf0f3078885..b36ca16a164 100644 --- a/gemfiles/3.2/Gemfile.lock +++ b/gemfiles/3.2/Gemfile.lock @@ -10,11 +10,11 @@ GEM ffi (1.17.0) logger (1.6.0) mini_portile2 (2.8.7) - nokogiri (1.16.5) + nokogiri (1.16.6) mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) - parser (3.3.2.0) + parser (3.3.3.0) ast (~> 2.4.1) racc power_assert (2.0.3) diff --git a/gemfiles/3.3/Gemfile.lock b/gemfiles/3.3/Gemfile.lock index a4d8429ed79..efc68554809 100644 --- a/gemfiles/3.3/Gemfile.lock +++ b/gemfiles/3.3/Gemfile.lock @@ -10,11 +10,11 @@ GEM ffi (1.17.0) logger (1.6.0) mini_portile2 (2.8.7) - nokogiri (1.16.5) + nokogiri (1.16.6) mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) - parser (3.3.2.0) + parser (3.3.3.0) ast (~> 2.4.1) racc power_assert (2.0.3) diff --git a/gemfiles/3.4/Gemfile.lock b/gemfiles/3.4/Gemfile.lock index 797afe9cf36..332d0f9dda2 100644 --- a/gemfiles/3.4/Gemfile.lock +++ b/gemfiles/3.4/Gemfile.lock @@ -10,11 +10,11 @@ GEM ffi (1.17.0) logger (1.6.0) mini_portile2 (2.8.7) - nokogiri (1.16.5) + nokogiri (1.16.6) mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) - parser (3.3.2.0) + parser (3.3.3.0) ast (~> 2.4.1) racc power_assert (2.0.3) diff --git a/gemfiles/jruby/Gemfile.lock b/gemfiles/jruby/Gemfile.lock index 8b296a045a9..4e52d73994d 100644 --- a/gemfiles/jruby/Gemfile.lock +++ b/gemfiles/jruby/Gemfile.lock @@ -7,7 +7,7 @@ GEM remote: https://rubygems.org/ specs: ast (2.4.2) - parser (3.3.2.0) + parser (3.3.3.0) ast (~> 2.4.1) racc power_assert (2.0.3) diff --git a/gemfiles/truffleruby/Gemfile.lock b/gemfiles/truffleruby/Gemfile.lock index e60f6f04776..b87abd5cf25 100644 --- a/gemfiles/truffleruby/Gemfile.lock +++ b/gemfiles/truffleruby/Gemfile.lock @@ -7,7 +7,7 @@ GEM remote: https://rubygems.org/ specs: ast (2.4.2) - parser (3.3.2.0) + parser (3.3.3.0) ast (~> 2.4.1) racc power_assert (2.0.3) diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index f785434c7e9..190e5770c28 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -23,9 +23,8 @@ GEM connection_pool (2.4.1) csv (3.3.0) drb (2.2.1) - erubi (1.12.0) - ffi (1.17.0-arm64-darwin) - ffi (1.17.0-x86_64-linux-gnu) + erubi (1.13.0) + ffi (1.17.0) fileutils (1.7.2) i18n (1.14.5) concurrent-ruby (~> 1.0) @@ -35,11 +34,11 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) logger (1.6.0) - minitest (5.23.1) + minitest (5.24.0) mutex_m (0.2.0) netrc (0.11.0) parallel (1.25.1) - parser (3.3.2.0) + parser (3.3.3.0) ast (~> 2.4.1) racc power_assert (2.0.3) @@ -61,20 +60,20 @@ GEM sexp_processor (~> 4.16) securerandom (0.3.1) sexp_processor (4.17.1) - sorbet (0.5.11435) - sorbet-static (= 0.5.11435) - sorbet-runtime (0.5.11435) - sorbet-static (0.5.11435-universal-darwin) - sorbet-static (0.5.11435-x86_64-linux) - sorbet-static-and-runtime (0.5.11435) - sorbet (= 0.5.11435) - sorbet-runtime (= 0.5.11435) + sorbet (0.5.11444) + sorbet-static (= 0.5.11444) + sorbet-runtime (0.5.11444) + sorbet-static (0.5.11444-universal-darwin) + sorbet-static (0.5.11444-x86_64-linux) + sorbet-static-and-runtime (0.5.11444) + sorbet (= 0.5.11444) + sorbet-runtime (= 0.5.11444) spoom (1.3.2) erubi (>= 1.10.0) prism (>= 0.19.0) sorbet-static-and-runtime (>= 0.5.10187) thor (>= 0.19.2) - steep (1.7.1) + steep (1.8.0.dev.1) activesupport (>= 5.1) concurrent-ruby (>= 1.1.10) csv (>= 3.0.9) @@ -90,7 +89,7 @@ GEM strscan (>= 1.0.0) terminal-table (>= 2, < 4) strscan (3.1.0) - tapioca (0.14.3) + tapioca (0.14.4) bundler (>= 2.2.25) netrc (>= 0.11.0) parallel (>= 1.21.0) From 6b78f5309b8e6c5a75d6ac48f54f30ea80fec99d Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 26 Jun 2024 15:48:13 -0400 Subject: [PATCH 016/109] Handle block exits under modifiers --- bin/prism | 11 ++- src/prism.c | 164 ++++++++++++++++++++++++-------------- test/prism/errors_test.rb | 8 +- 3 files changed, 113 insertions(+), 70 deletions(-) diff --git a/bin/prism b/bin/prism index 246447d743a..03615ebd2ce 100755 --- a/bin/prism +++ b/bin/prism @@ -368,14 +368,17 @@ module Prism # Parse the source code indicated by the command-line arguments. def parse_source(argv) + command_line = +"" + command_line << argv.shift[1] while argv.first&.match?(/^-[alnpx]$/) + case argv.first when "-e" - argv.shift - Prism.parse(argv.shift, command_line: "e") + command_line << argv.shift[1] + Prism.parse(argv.shift, command_line: command_line) when nil - Prism.parse_file("test.rb") + Prism.parse_file("test.rb", command_line: command_line) else - Prism.parse_file(argv.shift) + Prism.parse_file(argv.shift, command_line: command_line) end end diff --git a/src/prism.c b/src/prism.c index 0ad9dcff9a1..a6077d24195 100644 --- a/src/prism.c +++ b/src/prism.c @@ -7538,6 +7538,29 @@ pm_unless_node_end_keyword_loc_set(pm_unless_node_t *node, const pm_token_t *end node->base.location.end = end_keyword->end; } +/** + * Loop modifiers could potentially modify an expression that contains block + * exits. In this case we need to loop through them and remove them from the + * list of block exits so that they do not later get marked as invalid. + */ +static void +pm_loop_modifier_block_exits(pm_parser_t *parser, pm_statements_node_t *statements) { + assert(parser->current_block_exits != NULL); + + // All of the block exits that we want to remove should be within the + // statements, and since we are modifying the statements, we shouldn't have + // to check the end location. + const uint8_t *start = statements->base.location.start; + + for (size_t index = parser->current_block_exits->size; index > 0; index--) { + pm_node_t *block_exit = parser->current_block_exits->nodes[index - 1]; + if (block_exit->location.start < start) break; + + // Implicitly remove from the list by lowering the size. + parser->current_block_exits->size--; + } +} + /** * Allocate a new UntilNode node. */ @@ -7571,6 +7594,7 @@ static pm_until_node_t * pm_until_node_modifier_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t *predicate, pm_statements_node_t *statements, pm_node_flags_t flags) { pm_until_node_t *node = PM_ALLOC_NODE(parser, pm_until_node_t); pm_conditional_predicate(parser, predicate, PM_CONDITIONAL_PREDICATE_TYPE_CONDITIONAL); + pm_loop_modifier_block_exits(parser, statements); *node = (pm_until_node_t) { { @@ -7677,6 +7701,7 @@ static pm_while_node_t * pm_while_node_modifier_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t *predicate, pm_statements_node_t *statements, pm_node_flags_t flags) { pm_while_node_t *node = PM_ALLOC_NODE(parser, pm_while_node_t); pm_conditional_predicate(parser, predicate, PM_CONDITIONAL_PREDICATE_TYPE_CONDITIONAL); + pm_loop_modifier_block_exits(parser, statements); *node = (pm_while_node_t) { { @@ -15052,11 +15077,8 @@ parse_arguments_list(pm_parser_t *parser, pm_arguments_t *arguments, bool accept * context. If it isn't, add an error to the parser. */ static void -parse_block_exit(pm_parser_t *parser, pm_node_t *node, const char *type) { - pm_context_node_t *context_node = parser->current_context; - bool through_expression = false; - - while (context_node != NULL) { +parse_block_exit(pm_parser_t *parser, pm_node_t *node) { + for (pm_context_node_t *context_node = parser->current_context; context_node != NULL; context_node = context_node->prev) { switch (context_node->context) { case PM_CONTEXT_BLOCK_BRACES: case PM_CONTEXT_BLOCK_KEYWORDS: @@ -15090,65 +15112,49 @@ parse_block_exit(pm_parser_t *parser, pm_node_t *node, const char *type) { case PM_CONTEXT_SCLASS_RESCUE: // These are the bad cases. We're not allowed to have a block // exit in these contexts. - - if (through_expression) { - // If we get here, then we're about to mark this block exit - // as invalid. However, it could later _become_ valid if we - // find a trailing while/until on the expression. In this - // case instead of adding the error here, we'll add the - // block exit to the list of exits for the expression, and - // the node parsing will handle validating it instead. - assert(parser->current_block_exits != NULL); - pm_node_list_append(parser->current_block_exits, node); - } else { - // Otherwise, if we haven't gone through an expression - // context, then this is just invalid and we'll add the - // error here. - PM_PARSER_ERR_NODE_FORMAT(parser, node, PM_ERR_INVALID_BLOCK_EXIT, type); - } - + // + // If we get here, then we're about to mark this block exit + // as invalid. However, it could later _become_ valid if we + // find a trailing while/until on the expression. In this + // case instead of adding the error here, we'll add the + // block exit to the list of exits for the expression, and + // the node parsing will handle validating it instead. + assert(parser->current_block_exits != NULL); + pm_node_list_append(parser->current_block_exits, node); return; - case PM_CONTEXT_NONE: - // This case should never happen. - assert(false && "unreachable"); - break; - case PM_CONTEXT_BEGIN: case PM_CONTEXT_BEGIN_ELSE: case PM_CONTEXT_BEGIN_ENSURE: case PM_CONTEXT_BEGIN_RESCUE: + case PM_CONTEXT_BEGIN: case PM_CONTEXT_CASE_IN: case PM_CONTEXT_CASE_WHEN: - case PM_CONTEXT_CLASS: case PM_CONTEXT_CLASS_ELSE: case PM_CONTEXT_CLASS_ENSURE: case PM_CONTEXT_CLASS_RESCUE: + case PM_CONTEXT_CLASS: + case PM_CONTEXT_DEFAULT_PARAMS: case PM_CONTEXT_ELSE: case PM_CONTEXT_ELSIF: + case PM_CONTEXT_EMBEXPR: + case PM_CONTEXT_FOR_INDEX: case PM_CONTEXT_IF: - case PM_CONTEXT_MODULE: case PM_CONTEXT_MODULE_ELSE: case PM_CONTEXT_MODULE_ENSURE: case PM_CONTEXT_MODULE_RESCUE: + case PM_CONTEXT_MODULE: case PM_CONTEXT_PARENS: + case PM_CONTEXT_PREDICATE: case PM_CONTEXT_RESCUE_MODIFIER: case PM_CONTEXT_TERNARY: case PM_CONTEXT_UNLESS: - // If we got to an expression that could be modified by a - // trailing while/until, then we'll track that we have gotten - // here because we need to know it if this block exit is later - // marked as invalid. - through_expression = true; - break; - case PM_CONTEXT_EMBEXPR: - case PM_CONTEXT_DEFAULT_PARAMS: - case PM_CONTEXT_FOR_INDEX: - case PM_CONTEXT_PREDICATE: // In these contexts we should continue walking up the list of // contexts. break; + case PM_CONTEXT_NONE: + // This case should never happen. + assert(false && "unreachable"); + break; } - - context_node = context_node->prev; } } @@ -15163,6 +15169,30 @@ push_block_exits(pm_parser_t *parser, pm_node_list_t *current_block_exits) { return previous_block_exits; } +/** + * If we did not match a trailing while/until and this was the last chance to do + * so, then all of the block exits in the list are invalid and we need to add an + * error for each of them. + */ +static void +flush_block_exits(pm_parser_t *parser, pm_node_list_t *previous_block_exits) { + pm_node_t *block_exit; + PM_NODE_LIST_FOREACH(parser->current_block_exits, index, block_exit) { + const char *type; + + switch (PM_NODE_TYPE(block_exit)) { + case PM_BREAK_NODE: type = "break"; break; + case PM_NEXT_NODE: type = "next"; break; + case PM_REDO_NODE: type = "redo"; break; + default: assert(false && "unreachable"); type = ""; break; + } + + PM_PARSER_ERR_NODE_FORMAT(parser, block_exit, PM_ERR_INVALID_BLOCK_EXIT, type); + } + + parser->current_block_exits = previous_block_exits; +} + /** * Pop the current level of block exits from the parser, and add errors to the * parser if any of them are deemed to be invalid. @@ -15173,6 +15203,7 @@ pop_block_exits(pm_parser_t *parser, pm_node_list_t *previous_block_exits) { // If we matched a trailing while/until, then all of the block exits in // the contained list are valid. In this case we do not need to do // anything. + parser->current_block_exits = previous_block_exits; } else if (previous_block_exits != NULL) { // If we did not matching a trailing while/until, then all of the block // exits contained in the list are invalid for this specific context. @@ -15180,26 +15211,13 @@ pop_block_exits(pm_parser_t *parser, pm_node_list_t *previous_block_exits) { // there is another list above this one. In this case we'll push all of // the block exits up to the previous list. pm_node_list_concat(previous_block_exits, parser->current_block_exits); + parser->current_block_exits = previous_block_exits; } else { // If we did not match a trailing while/until and this was the last // chance to do so, then all of the block exits in the list are invalid // and we need to add an error for each of them. - pm_node_t *block_exit; - PM_NODE_LIST_FOREACH(parser->current_block_exits, index, block_exit) { - const char *type; - - switch (PM_NODE_TYPE(block_exit)) { - case PM_BREAK_NODE: type = "break"; break; - case PM_NEXT_NODE: type = "next"; break; - case PM_REDO_NODE: type = "redo"; break; - default: assert(false && "unreachable"); type = ""; break; - } - - PM_PARSER_ERR_NODE_FORMAT(parser, block_exit, PM_ERR_INVALID_BLOCK_EXIT, type); - } + flush_block_exits(parser, previous_block_exits); } - - parser->current_block_exits = previous_block_exits; } static inline pm_node_t * @@ -18309,6 +18327,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b return (pm_node_t *) begin_node; } case PM_TOKEN_KEYWORD_BEGIN_UPCASE: { + pm_node_list_t current_block_exits = { 0 }; + pm_node_list_t *previous_block_exits = push_block_exits(parser, ¤t_block_exits); + if (binding_power != PM_BINDING_POWER_STATEMENT) { pm_parser_err_current(parser, PM_ERR_STATEMENT_PREEXE_BEGIN); } @@ -18325,6 +18346,10 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if ((context != PM_CONTEXT_MAIN) && (context != PM_CONTEXT_PREEXE)) { pm_parser_err_token(parser, &keyword, PM_ERR_BEGIN_UPCASE_TOPLEVEL); } + + flush_block_exits(parser, previous_block_exits); + pm_node_list_free(¤t_block_exits); + return (pm_node_t *) pm_pre_execution_node_create(parser, &keyword, &opening, statements, &parser->previous); } case PM_TOKEN_KEYWORD_BREAK: @@ -18349,12 +18374,12 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b switch (keyword.type) { case PM_TOKEN_KEYWORD_BREAK: { pm_node_t *node = (pm_node_t *) pm_break_node_create(parser, &keyword, arguments.arguments); - if (!parser->parsing_eval) parse_block_exit(parser, node, "break"); + if (!parser->parsing_eval) parse_block_exit(parser, node); return node; } case PM_TOKEN_KEYWORD_NEXT: { pm_node_t *node = (pm_node_t *) pm_next_node_create(parser, &keyword, arguments.arguments); - if (!parser->parsing_eval) parse_block_exit(parser, node, "next"); + if (!parser->parsing_eval) parse_block_exit(parser, node); return node; } case PM_TOKEN_KEYWORD_RETURN: { @@ -18415,6 +18440,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_token_t class_keyword = parser->previous; pm_do_loop_stack_push(parser, false); + pm_node_list_t current_block_exits = { 0 }; + pm_node_list_t *previous_block_exits = push_block_exits(parser, ¤t_block_exits); + if (accept1(parser, PM_TOKEN_LESS_LESS)) { pm_token_t operator = parser->previous; pm_node_t *expression = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, PM_ERR_EXPECT_EXPRESSION_AFTER_LESS_LESS); @@ -18442,12 +18470,12 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_parser_scope_pop(parser); pm_do_loop_stack_pop(parser); + flush_block_exits(parser, previous_block_exits); + pm_node_list_free(¤t_block_exits); + return (pm_node_t *) pm_singleton_class_node_create(parser, &locals, &class_keyword, &operator, expression, statements, &parser->previous); } - pm_node_list_t current_block_exits = { 0 }; - pm_node_list_t *previous_block_exits = push_block_exits(parser, ¤t_block_exits); - pm_node_t *constant_path = parse_expression(parser, PM_BINDING_POWER_INDEX, false, PM_ERR_CLASS_NAME); pm_token_t name = parser->previous; if (name.type != PM_TOKEN_CONSTANT) { @@ -18512,6 +18540,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b return (pm_node_t *) pm_class_node_create(parser, &locals, &class_keyword, constant_path, &name, &inheritance_operator, superclass, statements, &parser->previous); } case PM_TOKEN_KEYWORD_DEF: { + pm_node_list_t current_block_exits = { 0 }; + pm_node_list_t *previous_block_exits = push_block_exits(parser, ¤t_block_exits); + pm_token_t def_keyword = parser->current; pm_node_t *receiver = NULL; @@ -18772,6 +18803,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b */ pm_constant_id_t name_id = pm_parser_constant_id_location(parser, name.start, parse_operator_symbol_name(&name)); + flush_block_exits(parser, previous_block_exits); + pm_node_list_free(¤t_block_exits); + return (pm_node_t *) pm_def_node_create( parser, name_id, @@ -19043,7 +19077,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); pm_node_t *node = (pm_node_t *) pm_redo_node_create(parser, &parser->previous); - if (!parser->parsing_eval) parse_block_exit(parser, node, "redo"); + if (!parser->parsing_eval) parse_block_exit(parser, node); return node; } @@ -21203,6 +21237,9 @@ parse_program(pm_parser_t *parser) { pm_parser_scope_push(parser, true); } + pm_node_list_t current_block_exits = { 0 }; + pm_node_list_t *previous_block_exits = push_block_exits(parser, ¤t_block_exits); + parser_lex(parser); pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_MAIN); @@ -21231,6 +21268,9 @@ parse_program(pm_parser_t *parser) { // node with a while loop based on the options. if (parser->command_line & (PM_OPTIONS_COMMAND_LINE_P | PM_OPTIONS_COMMAND_LINE_N)) { statements = wrap_statements(parser, statements); + } else { + flush_block_exits(parser, previous_block_exits); + pm_node_list_free(¤t_block_exits); } return (pm_node_t *) pm_program_node_create(parser, &locals, statements); diff --git a/test/prism/errors_test.rb b/test/prism/errors_test.rb index fcdfc4a0bbd..bb9f5eae8be 100644 --- a/test/prism/errors_test.rb +++ b/test/prism/errors_test.rb @@ -261,9 +261,9 @@ def test_next_1_2_3 ["unexpected ',', expecting end-of-input", 6..7], ["unexpected ',', ignoring it", 6..7], ["expected a matching `)`", 6..6], - ["Invalid next", 0..12], ["unexpected ')', expecting end-of-input", 12..13], - ["unexpected ')', ignoring it", 12..13] + ["unexpected ')', ignoring it", 12..13], + ["Invalid next", 0..12] ] end @@ -279,9 +279,9 @@ def test_break_1_2_3 ["unexpected ',', expecting end-of-input", 7..8], ["unexpected ',', ignoring it", 7..8], ["expected a matching `)`", 7..7], - ["Invalid break", 0..13], ["unexpected ')', expecting end-of-input", 13..14], - ["unexpected ')', ignoring it", 13..14] + ["unexpected ')', ignoring it", 13..14], + ["Invalid break", 0..13] ] end From e7c64933e8c921c7db9e57f89b0044c79899d9a6 Mon Sep 17 00:00:00 2001 From: Cameron Dutro Date: Fri, 28 Jun 2024 15:36:03 -0700 Subject: [PATCH 017/109] Use flags to intelligently represent strings in the file's encoding, falling back to binary --- config.yml | 12 +-- javascript/test.js | 79 +++++++++++++- templates/javascript/src/deserialize.js.erb | 111 +++++++++++++------- templates/javascript/src/nodes.js.erb | 7 ++ templates/template.rb | 32 +++--- 5 files changed, 184 insertions(+), 57 deletions(-) diff --git a/config.yml b/config.yml index 934574b3eac..1ba171e65e2 100644 --- a/config.yml +++ b/config.yml @@ -2494,7 +2494,7 @@ nodes: - name: closing_loc type: location - name: unescaped - type: string + type: encodedstring comment: | Represents a regular expression literal used in the predicate of a conditional to implicitly match against the last line read by an IO object. @@ -2958,7 +2958,7 @@ nodes: - name: closing_loc type: location - name: unescaped - type: string + type: encodedstring comment: | Represents a regular expression literal with no interpolation. @@ -3127,7 +3127,7 @@ nodes: type: flags kind: StringFlags - name: filepath - type: string + type: encodedstring comment: | Represents the use of the `__FILE__` keyword. @@ -3171,7 +3171,7 @@ nodes: - name: closing_loc type: location? - name: unescaped - type: string + type: encodedstring comment: | Represents a string literal, a string contained within a `%w` list, or plain string content within an interpolated string. @@ -3216,7 +3216,7 @@ nodes: - name: closing_loc type: location? - name: unescaped - type: string + type: encodedstring comment: | Represents a symbol literal or a symbol contained within a `%i` list. @@ -3346,7 +3346,7 @@ nodes: - name: closing_loc type: location - name: unescaped - type: string + type: encodedstring comment: | Represents an xstring literal with no interpolation. diff --git a/javascript/test.js b/javascript/test.js index 5b8e17d08cc..6ae30e32a80 100644 --- a/javascript/test.js +++ b/javascript/test.js @@ -27,7 +27,84 @@ test("node[]", () => { test("string", () => { const result = parse('"foo"'); - assert(result.value.statements.body[0].unescaped === "foo"); + const node = result.value.statements.body[0]; + + assert(!node.isForcedUtf8Encoding()) + assert(!node.isForcedBinaryEncoding()) + + assert(node.unescaped.value === "foo"); + assert(node.unescaped.encoding === "utf-8"); + assert(node.unescaped.validEncoding); +}); + +test("forced utf-8 string using \\u syntax", () => { + const result = parse('# encoding: utf-8\n"\\u{9E7F}"'); + const node = result.value.statements.body[0]; + const str = node.unescaped; + + assert(node.isForcedUtf8Encoding()); + assert(!node.isForcedBinaryEncoding()); + + assert(str.value === "鹿"); + assert(str.encoding === "utf-8"); + assert(str.validEncoding); +}); + +test("forced utf-8 string with invalid byte sequence", () => { + const result = parse('# encoding: utf-8\n"\\xFF\\xFF\\xFF"'); + const node = result.value.statements.body[0]; + const str = node.unescaped; + + assert(node.isForcedUtf8Encoding()); + assert(!node.isForcedBinaryEncoding()); + + assert(str.value === "ÿÿÿ"); + assert(str.encoding === "utf-8"); + assert(!str.validEncoding); +}); + +test("ascii string with embedded utf-8 character", () => { + // # encoding: ascii\n"鹿"' + // # encoding: ascii\n"鹿"' + const ascii_str = new Buffer.from([35, 32, 101, 110, 99, 111, 100, 105, 110, 103, 58, 32, 97, 115, 99, 105, 105, 10, 34, 233, 185, 191, 34]); + const result = parse(ascii_str); + const node = result.value.statements.body[0]; + const str = node.unescaped; + + assert(!node.isForcedUtf8Encoding()); + assert(!node.isForcedBinaryEncoding()); + + assert(str.value === "鹿"); + assert(str.encoding === "us-ascii"); + assert(str.validEncoding); +}); + +test("forced binary string", () => { + const result = parse('# encoding: ascii\n"\\xFF\\xFF\\xFF"'); + const node = result.value.statements.body[0]; + const str = node.unescaped; + + assert(!node.isForcedUtf8Encoding()); + assert(node.isForcedBinaryEncoding()); + + assert(str.value === "ÿÿÿ"); + assert(str.encoding === "ascii"); + assert(str.validEncoding); +}); + +test("forced binary string with Unicode character", () => { + // # encoding: us-ascii\n"\\xFF鹿\\xFF" + const ascii_str = Buffer.from([35, 32, 101, 110, 99, 111, 100, 105, 110, 103, 58, 32, 97, 115, 99, 105, 105, 10, 34, 92, 120, 70, 70, 233, 185, 191, 92, 120, 70, 70, 34]); + const result = parse(ascii_str); + const node = result.value.statements.body[0]; + const str = node.unescaped; + + assert(!node.isForcedUtf8Encoding()); + assert(node.isForcedBinaryEncoding()); + + assert(str.value === "ÿ鹿ÿ"); + assert(str.encoding === "ascii"); + assert(str.validEncoding); }); test("constant", () => { diff --git a/templates/javascript/src/deserialize.js.erb b/templates/javascript/src/deserialize.js.erb index faac085197f..7717c9ff972 100644 --- a/templates/javascript/src/deserialize.js.erb +++ b/templates/javascript/src/deserialize.js.erb @@ -22,10 +22,15 @@ const LITTLE_ENDIAN = (() => { })(); class SerializationBuffer { + FORCED_UTF8_ENCODING_FLAG = 1; + FORCED_BINARY_ENCODING_FLAG = 2; + constructor(source, array) { this.source = source; this.array = array; this.index = 0; + this.fileEncoding = "utf-8"; + this.decoders = new Map(); } readByte() { @@ -40,8 +45,8 @@ class SerializationBuffer { return result; } - readString(length) { - return this.decodeString(this.readBytes(length)); + readString(length, flags) { + return this.decodeString(this.readBytes(length), flags).value; } // Read a 32-bit unsigned integer in little-endian format. @@ -85,17 +90,18 @@ class SerializationBuffer { } } - readStringField() { + readStringField(flags) { + if (flags === undefined) flags = 0; const type = this.readByte(); switch (type) { case 1: { const startOffset = this.readVarInt(); const length = this.readVarInt(); - return this.decodeString(this.source.slice(startOffset, startOffset + length)); + return this.decodeString(this.source.slice(startOffset, startOffset + length), flags); } case 2: - return this.readString(this.readVarInt()); + return this.decodeString(this.readBytes(this.readVarInt()), flags); default: throw new Error(`Unknown serialized string type: ${type}`); } @@ -123,24 +129,46 @@ class SerializationBuffer { return view.getFloat64(0, LITTLE_ENDIAN); } - decodeString(bytes) { - try { - return this.utf8Decoder.decode(bytes); - } catch (e) { - if (e.code === "ERR_ENCODING_INVALID_ENCODED_DATA") { - return this.asciiDecoder.decode(bytes); + decodeString(bytes, flags) { + if (flags & this.FORCED_BINARY_ENCODING_FLAG) { + // just use raw bytes + return { + encoding: "ascii", + validEncoding: true, + value: this.asciiDecoder.decode(bytes) + }; + } else { + const encoding = flags & this.FORCED_UTF8_ENCODING_FLAG ? "utf-8" : this.fileEncoding.toLowerCase(); + const decoder = this.getDecoder(encoding); + + try { + // decode with encoding + return { + encoding, + validEncoding: true, + value: decoder.decode(bytes) + }; + } catch(e) { + // just use raw bytes, capture what the encoding should be, set flag saying valid_encoding? is false + if (e.code === "ERR_ENCODING_INVALID_ENCODED_DATA") { + return { + encoding, + validEncoding: false, + value: this.asciiDecoder.decode(bytes) + }; + } + + throw e; } - - throw e; } } - get utf8Decoder() { - if (!this._utf8Decoder) { - this._utf8Decoder = new TextDecoder("utf8", {fatal: true}); + getDecoder(encoding) { + if (!this.decoders.has(encoding)) { + this.decoders.set(encoding, new TextDecoder(encoding, {fatal: true})); } - return this._utf8Decoder; + return this.decoders.get(encoding); } get asciiDecoder() { @@ -276,8 +304,8 @@ export function deserialize(source, array) { throw new Error("Invalid serialization (location fields must be included but are not)"); } - // Skip past the encoding, it means nothing to us in JavaScript. - buffer.readString(buffer.readVarInt()); + // Read the file's encoding. + buffer.fileEncoding = buffer.readString(buffer.readVarInt()); // Skip past the start line, as we don't support that option yet in // JavaScript. @@ -327,28 +355,39 @@ export function deserialize(source, array) { switch (type) { <%- nodes.each.with_index(1) do |node, index| -%> - case <%= index %>: + <%- use_string_flags_local = false -%> + case <%= index %>: { + <%- first_field = node.fields[0] -%> + <%- if first_field&.name == "flags" && %w(StringFlags SymbolFlags).include?(first_field&.kind) -%> + const stringFlags = buffer.readVarInt(); + <%- use_string_flags_local = true -%> + <%- end -%> <%- if node.needs_serialized_length? -%> buffer.readUint32(); <%- end -%> - return new nodes.<%= node.name %>(<%= (node.fields.map { |field| - case field - when Prism::Template::NodeField then "readRequiredNode()" - when Prism::Template::OptionalNodeField then "readOptionalNode()" - when Prism::Template::StringField then "buffer.readStringField()" - when Prism::Template::NodeListField then "Array.from({ length: buffer.readVarInt() }, readRequiredNode)" - when Prism::Template::ConstantField then "readRequiredConstant()" - when Prism::Template::OptionalConstantField then "readOptionalConstant()" - when Prism::Template::ConstantListField then "Array.from({ length: buffer.readVarInt() }, readRequiredConstant)" - when Prism::Template::LocationField then "buffer.readLocation()" - when Prism::Template::OptionalLocationField then "buffer.readOptionalLocation()" - when Prism::Template::UInt8Field then "buffer.readByte()" - when Prism::Template::UInt32Field, Prism::Template::FlagsField then "buffer.readVarInt()" - when Prism::Template::IntegerField then "readInteger()" - when Prism::Template::DoubleField then "buffer.readDouble()" - else raise + return new nodes.<%= node.name %>(<%= (node.fields.map.with_index { |field, index| + if index == 0 && field.name == "flags" && field.kind == "StringFlags" + "stringFlags" + else + case field + when Prism::Template::NodeField then "readRequiredNode()" + when Prism::Template::OptionalNodeField then "readOptionalNode()" + when Prism::Template::StringField then use_string_flags_local ? "buffer.readStringField(stringFlags)" : "buffer.readStringField()" + when Prism::Template::NodeListField then "Array.from({ length: buffer.readVarInt() }, readRequiredNode)" + when Prism::Template::ConstantField then "readRequiredConstant()" + when Prism::Template::OptionalConstantField then "readOptionalConstant()" + when Prism::Template::ConstantListField then "Array.from({ length: buffer.readVarInt() }, readRequiredConstant)" + when Prism::Template::LocationField then "buffer.readLocation()" + when Prism::Template::OptionalLocationField then "buffer.readOptionalLocation()" + when Prism::Template::UInt8Field then "buffer.readByte()" + when Prism::Template::UInt32Field, Prism::Template::FlagsField then "buffer.readVarInt()" + when Prism::Template::IntegerField then "readInteger()" + when Prism::Template::DoubleField then "buffer.readDouble()" + else raise + end end } + ["location"]).join(", ") -%>); + } <%- end -%> default: throw new Error(`Unknown node type: ${type}`); diff --git a/templates/javascript/src/nodes.js.erb b/templates/javascript/src/nodes.js.erb index 6a535285b38..3a4b1350c42 100644 --- a/templates/javascript/src/nodes.js.erb +++ b/templates/javascript/src/nodes.js.erb @@ -13,6 +13,7 @@ def jstype(field) when Prism::Template::NodeField then field.ruby_type when Prism::Template::OptionalNodeField then "#{field.ruby_type} | null" when Prism::Template::NodeListField then "Node[]" + when Prism::Template::EncodedStringField then "EncodedString" when Prism::Template::StringField then "string" when Prism::Template::ConstantField then "string" when Prism::Template::OptionalConstantField then "string | null" @@ -44,6 +45,12 @@ const <%= flag.name %> = { * @typedef {{ startOffset: number, length: number }} Location */ +/** + * A string with associated encoding information. + * + * @typedef {{ encoding: string, validEncoding: boolean, value: string }} EncodedString + */ + /** * A generic node in the tree. * diff --git a/templates/template.rb b/templates/template.rb index 31257ef1a15..14bd2d8ba5f 100755 --- a/templates/template.rb +++ b/templates/template.rb @@ -289,6 +289,9 @@ def java_type end end + class EncodedStringField < StringField + end + # This represents a field on a node that is a location. class LocationField < Field def semantic_field? @@ -463,20 +466,21 @@ def needs_serialized_length? def field_type_for(name) case name - when "node" then NodeField - when "node?" then OptionalNodeField - when "node[]" then NodeListField - when "string" then StringField - when "constant" then ConstantField - when "constant?" then OptionalConstantField - when "constant[]" then ConstantListField - when "location" then LocationField - when "location?" then OptionalLocationField - when "uint8" then UInt8Field - when "uint32" then UInt32Field - when "flags" then FlagsField - when "integer" then IntegerField - when "double" then DoubleField + when "node" then NodeField + when "node?" then OptionalNodeField + when "node[]" then NodeListField + when "string" then StringField + when "encodedstring" then EncodedStringField + when "constant" then ConstantField + when "constant?" then OptionalConstantField + when "constant[]" then ConstantListField + when "location" then LocationField + when "location?" then OptionalLocationField + when "uint8" then UInt8Field + when "uint32" then UInt32Field + when "flags" then FlagsField + when "integer" then IntegerField + when "double" then DoubleField else raise("Unknown field type: #{name.inspect}") end end From 29833c86da3745c09d6e7576c778b972e37515d6 Mon Sep 17 00:00:00 2001 From: Cameron Dutro Date: Sat, 29 Jun 2024 20:36:20 -0700 Subject: [PATCH 018/109] Adjust comment wording --- templates/javascript/src/deserialize.js.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/javascript/src/deserialize.js.erb b/templates/javascript/src/deserialize.js.erb index 95f3511f019..1ab6576adbf 100644 --- a/templates/javascript/src/deserialize.js.erb +++ b/templates/javascript/src/deserialize.js.erb @@ -149,7 +149,7 @@ class SerializationBuffer { value: decoder.decode(bytes) }; } catch(e) { - // just use raw bytes, capture what the encoding should be, set flag saying valid_encoding? is false + // just use raw bytes, capture what the encoding should be, set flag saying encoding is invalid if (e.code === "ERR_ENCODING_INVALID_ENCODED_DATA") { return { encoding, From cd4a5f9e236da1e70b31e0ab4555ee859c668e40 Mon Sep 17 00:00:00 2001 From: Cameron Dutro Date: Sat, 29 Jun 2024 21:22:46 -0700 Subject: [PATCH 019/109] Fix rust bindings --- rust/ruby-prism/build.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/rust/ruby-prism/build.rs b/rust/ruby-prism/build.rs index 958b658191c..6039c7a63b3 100644 --- a/rust/ruby-prism/build.rs +++ b/rust/ruby-prism/build.rs @@ -19,6 +19,9 @@ enum NodeFieldType { #[serde(rename = "string")] String, + #[serde(rename = "encodedstring")] + EncodedString, + #[serde(rename = "constant")] Constant, @@ -282,7 +285,7 @@ fn write_node(file: &mut File, flags: &[Flags], node: &Node) -> Result<(), Box { + NodeFieldType::String | NodeFieldType::EncodedString => { writeln!(file, " pub const fn {}(&self) -> &str {{", field.name)?; writeln!(file, " \"\"")?; writeln!(file, " }}")?; @@ -758,7 +761,7 @@ impl TryInto for Integer<'_> {{ let length = unsafe {{ (*self.pointer).length }}; if length == 0 {{ - i32::try_from(unsafe {{ (*self.pointer).value }}).map_or(Err(()), |value| + i32::try_from(unsafe {{ (*self.pointer).value }}).map_or(Err(()), |value| if negative {{ Ok(-value) }} else {{ From 20ed05f06b149a6e476f2b63996855c118e80229 Mon Sep 17 00:00:00 2001 From: Cameron Dutro Date: Sat, 29 Jun 2024 21:26:57 -0700 Subject: [PATCH 020/109] Woops, fix js tests --- javascript/test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript/test.js b/javascript/test.js index 6ae30e32a80..58801708cc7 100644 --- a/javascript/test.js +++ b/javascript/test.js @@ -72,10 +72,10 @@ test("ascii string with embedded utf-8 character", () => { const str = node.unescaped; assert(!node.isForcedUtf8Encoding()); - assert(!node.isForcedBinaryEncoding()); + assert(node.isForcedBinaryEncoding()); assert(str.value === "鹿"); - assert(str.encoding === "us-ascii"); + assert(str.encoding === "ascii"); assert(str.validEncoding); }); From bedc4585ed810709bebb4c146dfbcccf2cc35626 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Mon, 1 Jul 2024 10:28:52 -0400 Subject: [PATCH 021/109] Properly support parsing regexp in extended mode --- fuzz/regexp.c | 2 +- include/prism/regexp.h | 3 ++- src/prism.c | 10 +++---- src/regexp.c | 60 +++++++++++++++++++++++++++++++++++++++--- 4 files changed, 64 insertions(+), 11 deletions(-) diff --git a/fuzz/regexp.c b/fuzz/regexp.c index c6cfca1bcb7..3837d74d572 100644 --- a/fuzz/regexp.c +++ b/fuzz/regexp.c @@ -15,7 +15,7 @@ harness(const uint8_t *input, size_t size) { pm_parser_t parser; pm_parser_init(&parser, input, size, NULL); - pm_regexp_parse(&parser, input, size, regexp_name_callback, NULL, regexp_error_callback, NULL); + pm_regexp_parse(&parser, input, size, false, regexp_name_callback, NULL, regexp_error_callback, NULL); pm_parser_free(&parser); } diff --git a/include/prism/regexp.h b/include/prism/regexp.h index 42bc5041074..c0b3163e93b 100644 --- a/include/prism/regexp.h +++ b/include/prism/regexp.h @@ -32,11 +32,12 @@ typedef void (*pm_regexp_error_callback_t)(const uint8_t *start, const uint8_t * * @param parser The parser that is currently being used. * @param source The source code to parse. * @param size The size of the source code. + * @param extended_mode Whether to parse the regular expression in extended mode. * @param name_callback The optional callback to call when a named capture group is found. * @param name_data The optional data to pass to the name callback. * @param error_callback The callback to call when a parse error is found. * @param error_data The data to pass to the error callback. */ -PRISM_EXPORTED_FUNCTION void pm_regexp_parse(pm_parser_t *parser, const uint8_t *source, size_t size, pm_regexp_name_callback_t name_callback, void *name_data, pm_regexp_error_callback_t error_callback, void *error_data); +PRISM_EXPORTED_FUNCTION void pm_regexp_parse(pm_parser_t *parser, const uint8_t *source, size_t size, bool extended_mode, pm_regexp_name_callback_t name_callback, void *name_data, pm_regexp_error_callback_t error_callback, void *error_data); #endif diff --git a/src/prism.c b/src/prism.c index a6077d24195..a5c6817ec45 100644 --- a/src/prism.c +++ b/src/prism.c @@ -17393,7 +17393,7 @@ parse_regular_expression_errors(pm_parser_t *parser, pm_regular_expression_node_ .shared = unescaped->type == PM_STRING_SHARED }; - pm_regexp_parse(parser, pm_string_source(unescaped), pm_string_length(unescaped), NULL, NULL, parse_regular_expression_error, &error_data); + pm_regexp_parse(parser, pm_string_source(unescaped), pm_string_length(unescaped), PM_NODE_FLAG_P(node, PM_REGULAR_EXPRESSION_FLAGS_EXTENDED), NULL, NULL, parse_regular_expression_error, &error_data); } /** @@ -20164,7 +20164,7 @@ parse_regular_expression_named_capture(const pm_string_t *capture, void *data) { * match write node. */ static pm_node_t * -parse_regular_expression_named_captures(pm_parser_t *parser, const pm_string_t *content, pm_call_node_t *call) { +parse_regular_expression_named_captures(pm_parser_t *parser, const pm_string_t *content, pm_call_node_t *call, bool extended_mode) { parse_regular_expression_named_capture_data_t callback_data = { .parser = parser, .call = call, @@ -20179,7 +20179,7 @@ parse_regular_expression_named_captures(pm_parser_t *parser, const pm_string_t * .shared = content->type == PM_STRING_SHARED }; - pm_regexp_parse(parser, pm_string_source(content), pm_string_length(content), parse_regular_expression_named_capture, &callback_data, parse_regular_expression_error, &error_data); + pm_regexp_parse(parser, pm_string_source(content), pm_string_length(content), extended_mode, parse_regular_expression_named_capture, &callback_data, parse_regular_expression_error, &error_data); pm_constant_id_list_free(&callback_data.names); if (callback_data.match != NULL) { @@ -20674,14 +20674,14 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_string_t owned; pm_string_owned_init(&owned, (uint8_t *) memory, total_length); - result = parse_regular_expression_named_captures(parser, &owned, call); + result = parse_regular_expression_named_captures(parser, &owned, call, PM_NODE_FLAG_P(node, PM_REGULAR_EXPRESSION_FLAGS_EXTENDED)); pm_string_free(&owned); } } else if (PM_NODE_TYPE_P(node, PM_REGULAR_EXPRESSION_NODE)) { // If we have a regular expression node, then we can just parse // the named captures directly off the unescaped string. const pm_string_t *content = &((pm_regular_expression_node_t *) node)->unescaped; - result = parse_regular_expression_named_captures(parser, content, call); + result = parse_regular_expression_named_captures(parser, content, call, PM_NODE_FLAG_P(node, PM_REGULAR_EXPRESSION_FLAGS_EXTENDED)); } return result; diff --git a/src/regexp.c b/src/regexp.c index 9eea90e12f1..9c24e952e8f 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -18,6 +18,12 @@ typedef struct { /** A pointer to the end of the source that we are parsing. */ const uint8_t *end; + /** + * Whether or not the regular expression currently being parsed is in + * extended mode, wherein whitespace is ignored and comments are allowed. + */ + bool extended_mode; + /** Whether the encoding has changed from the default. */ bool encoding_changed; @@ -418,6 +424,19 @@ pm_regexp_options_remove(pm_regexp_options_t *options, uint8_t key) { return false; } +/** + * True if the given key is set in the options. + */ +static bool +pm_regexp_options_added_p(pm_regexp_options_t *options, uint8_t key) { + if (key >= PRISM_REGEXP_OPTION_STATE_SLOT_MINIMUM && key <= PRISM_REGEXP_OPTION_STATE_SLOT_MAXIMUM) { + key = (uint8_t) (key - PRISM_REGEXP_OPTION_STATE_SLOT_MINIMUM); + return options->values[key] == PM_REGEXP_OPTION_STATE_ADDED; + } + + return false; +} + /** * Groups can have quite a few different patterns for syntax. They basically * just wrap a set of expressions, but they can potentially have options after a @@ -443,6 +462,9 @@ static bool pm_regexp_parse_group(pm_regexp_parser_t *parser, uint16_t depth) { const uint8_t *group_start = parser->cursor; + pm_regexp_options_t options; + pm_regexp_options_init(&options); + // First, parse any options for the group. if (pm_regexp_char_accept(parser, '?')) { if (pm_regexp_char_is_eof(parser)) { @@ -450,9 +472,6 @@ pm_regexp_parse_group(pm_regexp_parser_t *parser, uint16_t depth) { return false; } - pm_regexp_options_t options; - pm_regexp_options_init(&options); - switch (*parser->cursor) { case '#': { // inline comments parser->cursor++; @@ -560,6 +579,15 @@ pm_regexp_parse_group(pm_regexp_parser_t *parser, uint16_t depth) { return false; } + // If we are at the end of the group of options and there is no + // subexpression, then we are going to be setting the options + // for the parent group. In this case we are safe to return now. + if (*parser->cursor == ')') { + if (pm_regexp_options_added_p(&options, 'x')) parser->extended_mode = true; + parser->cursor++; + return true; + } + // If we hit a -, then we're done parsing options. if (*parser->cursor != '-') break; @@ -577,6 +605,16 @@ pm_regexp_parse_group(pm_regexp_parser_t *parser, uint16_t depth) { if (pm_regexp_char_is_eof(parser)) { return false; } + + // If we are at the end of the group of options and there is no + // subexpression, then we are going to be setting the options + // for the parent group. In this case we are safe to return now. + if (*parser->cursor == ')') { + if (pm_regexp_options_added_p(&options, 'x')) parser->extended_mode = true; + parser->cursor++; + return true; + } + break; default: parser->cursor++; @@ -585,15 +623,22 @@ pm_regexp_parse_group(pm_regexp_parser_t *parser, uint16_t depth) { } } + bool extended_mode = parser->extended_mode; + if (pm_regexp_options_added_p(&options, 'x')) { + parser->extended_mode = true; + } + // Now, parse the expressions within this group. while (!pm_regexp_char_is_eof(parser) && *parser->cursor != ')') { if (!pm_regexp_parse_expression(parser, (uint16_t) (depth + 1))) { + parser->extended_mode = extended_mode; return false; } pm_regexp_char_accept(parser, '|'); } // Finally, make sure we have a closing parenthesis. + parser->extended_mode = extended_mode; if (pm_regexp_char_expect(parser, ')')) return true; pm_regexp_parse_error(parser, group_start, parser->cursor, "end pattern with unmatched parenthesis"); @@ -641,6 +686,12 @@ pm_regexp_parse_item(pm_regexp_parser_t *parser, uint16_t depth) { parser->cursor++; pm_regexp_parse_error(parser, parser->cursor - 1, parser->cursor, "unmatched close parenthesis"); return true; + case '#': + if (parser->extended_mode) { + if (!pm_regexp_char_find(parser, '\n')) parser->cursor = parser->end; + return true; + } + /* fallthrough */ default: { size_t width; if (!parser->encoding_changed) { @@ -702,12 +753,13 @@ pm_regexp_parse_pattern(pm_regexp_parser_t *parser) { * groups. */ PRISM_EXPORTED_FUNCTION void -pm_regexp_parse(pm_parser_t *parser, const uint8_t *source, size_t size, pm_regexp_name_callback_t name_callback, void *name_data, pm_regexp_error_callback_t error_callback, void *error_data) { +pm_regexp_parse(pm_parser_t *parser, const uint8_t *source, size_t size, bool extended_mode, pm_regexp_name_callback_t name_callback, void *name_data, pm_regexp_error_callback_t error_callback, void *error_data) { pm_regexp_parse_pattern(&(pm_regexp_parser_t) { .parser = parser, .start = source, .cursor = source, .end = source + size, + .extended_mode = extended_mode, .encoding_changed = parser->encoding_changed, .encoding = parser->encoding, .name_callback = name_callback, From 035890a83973b2a28a7061c93eb8bd69d29a8e95 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Mon, 1 Jul 2024 10:59:51 -0400 Subject: [PATCH 022/109] Fix up find and array patterns with multiple rests --- config.yml | 2 ++ src/prism.c | 34 +++++++++++++++++++++------------- templates/src/diagnostic.c.erb | 2 ++ 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/config.yml b/config.yml index 879b1158a34..a1e54f34628 100644 --- a/config.yml +++ b/config.yml @@ -208,6 +208,7 @@ errors: - PARAMETER_UNEXPECTED_FWD - PARAMETER_UNEXPECTED_NO_KW - PARAMETER_WILD_LOOSE_COMMA + - PATTERN_ARRAY_MULTIPLE_RESTS - PATTERN_CAPTURE_DUPLICATE - PATTERN_EXPRESSION_AFTER_BRACKET - PATTERN_EXPRESSION_AFTER_COMMA @@ -219,6 +220,7 @@ errors: - PATTERN_EXPRESSION_AFTER_PIPE - PATTERN_EXPRESSION_AFTER_RANGE - PATTERN_EXPRESSION_AFTER_REST + - PATTERN_FIND_MISSING_INNER - PATTERN_HASH_IMPLICIT - PATTERN_HASH_KEY - PATTERN_HASH_KEY_DUPLICATE diff --git a/src/prism.c b/src/prism.c index a5c6817ec45..36f3a829eda 100644 --- a/src/prism.c +++ b/src/prism.c @@ -17049,9 +17049,9 @@ parse_pattern(pm_parser_t *parser, pm_constant_id_list_t *captures, uint8_t flag } if ((flags & PM_PARSE_PATTERN_MULTI) && match1(parser, PM_TOKEN_COMMA)) { - // If we have a comma, then we are now parsing either an array pattern or a - // find pattern. We need to parse all of the patterns, put them into a big - // list, and then determine which type of node we have. + // If we have a comma, then we are now parsing either an array pattern + // or a find pattern. We need to parse all of the patterns, put them + // into a big list, and then determine which type of node we have. pm_node_list_t nodes = { 0 }; pm_node_list_append(&nodes, node); @@ -17067,9 +17067,9 @@ parse_pattern(pm_parser_t *parser, pm_constant_id_list_t *captures, uint8_t flag if (accept1(parser, PM_TOKEN_USTAR)) { node = (pm_node_t *) parse_pattern_rest(parser, captures); - // If we have already parsed a splat pattern, then this is an error. We - // will continue to parse the rest of the patterns, but we will indicate - // it as an error. + // If we have already parsed a splat pattern, then this is an + // error. We will continue to parse the rest of the patterns, + // but we will indicate it as an error. if (trailing_rest) { pm_parser_err_previous(parser, PM_ERR_PATTERN_REST); } @@ -17082,20 +17082,28 @@ parse_pattern(pm_parser_t *parser, pm_constant_id_list_t *captures, uint8_t flag pm_node_list_append(&nodes, node); } - // If the first pattern and the last pattern are rest patterns, then we will - // call this a find pattern, regardless of how many rest patterns are in - // between because we know we already added the appropriate errors. - // Otherwise we will create an array pattern. - if (PM_NODE_TYPE_P(nodes.nodes[0], PM_SPLAT_NODE) && PM_NODE_TYPE_P(nodes.nodes[nodes.size - 1], PM_SPLAT_NODE)) { + // If the first pattern and the last pattern are rest patterns, then we + // will call this a find pattern, regardless of how many rest patterns + // are in between because we know we already added the appropriate + // errors. Otherwise we will create an array pattern. + if (leading_rest && PM_NODE_TYPE_P(nodes.nodes[nodes.size - 1], PM_SPLAT_NODE)) { node = (pm_node_t *) pm_find_pattern_node_create(parser, &nodes); + + if (nodes.size == 2) { + pm_parser_err_node(parser, node, PM_ERR_PATTERN_FIND_MISSING_INNER); + } } else { node = (pm_node_t *) pm_array_pattern_node_node_list_create(parser, &nodes); + + if (leading_rest && trailing_rest) { + pm_parser_err_node(parser, node, PM_ERR_PATTERN_ARRAY_MULTIPLE_RESTS); + } } xfree(nodes.nodes); } else if (leading_rest) { - // Otherwise, if we parsed a single splat pattern, then we know we have an - // array pattern, so we can go ahead and create that node. + // Otherwise, if we parsed a single splat pattern, then we know we have + // an array pattern, so we can go ahead and create that node. node = (pm_node_t *) pm_array_pattern_node_rest_create(parser, node); } diff --git a/templates/src/diagnostic.c.erb b/templates/src/diagnostic.c.erb index b6b2f532a87..064063d9f46 100644 --- a/templates/src/diagnostic.c.erb +++ b/templates/src/diagnostic.c.erb @@ -290,6 +290,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_ERR_PARAMETER_UNEXPECTED_FWD] = { "unexpected `...` in parameters", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_PARAMETER_WILD_LOOSE_COMMA] = { "unexpected `,` in parameters", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_PARAMETER_UNEXPECTED_NO_KW] = { "unexpected **nil; no keywords marker disallowed after keywords", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_PATTERN_ARRAY_MULTIPLE_RESTS] = { "unexpected multiple '*' rest patterns in an array pattern", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_PATTERN_CAPTURE_DUPLICATE] = { "duplicated variable name", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_PATTERN_EXPRESSION_AFTER_BRACKET] = { "expected a pattern expression after the `[` operator", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_PATTERN_EXPRESSION_AFTER_COMMA] = { "expected a pattern expression after `,`", PM_ERROR_LEVEL_SYNTAX }, @@ -301,6 +302,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_ERR_PATTERN_EXPRESSION_AFTER_PIPE] = { "expected a pattern expression after the `|` operator", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_PATTERN_EXPRESSION_AFTER_RANGE] = { "expected a pattern expression after the range operator", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_PATTERN_EXPRESSION_AFTER_REST] = { "unexpected pattern expression after the `**` expression", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_PATTERN_FIND_MISSING_INNER] = { "find patterns need at least one required inner pattern", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_PATTERN_HASH_IMPLICIT] = { "unexpected implicit hash in pattern; use '{' to delineate", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_PATTERN_HASH_KEY] = { "unexpected %s; expected a key in the hash pattern", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_PATTERN_HASH_KEY_DUPLICATE] = { "duplicated key name", PM_ERROR_LEVEL_SYNTAX }, From fb7e1ebb7fef92aa0c3851ec4a178d0b8728a593 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 2 Jul 2024 12:23:02 -0400 Subject: [PATCH 023/109] Reconfigure error tests --- bin/prism | 25 + lib/prism/parse_result.rb | 7 + lib/prism/parse_result/errors.rb | 60 + test/prism/errors/1_2_3.txt | 11 + ...l_variable_with_global_number_variable.txt | 3 + ...obal_variable_with_non_global_variable.txt | 3 + ...n_global_variable_with_global_variable.txt | 3 + test/prism/errors/alnum_delimiters.txt | 3 + test/prism/errors/alnum_delimiters_2.txt | 3 + test/prism/errors/alnum_delimiters_3.txt | 3 + test/prism/errors/alnum_delimiters_4.txt | 3 + test/prism/errors/alnum_delimiters_5.txt | 3 + test/prism/errors/alnum_delimiters_6.txt | 3 + test/prism/errors/alnum_delimiters_7.txt | 3 + test/prism/errors/alnum_delimiters_8.txt | 3 + test/prism/errors/alnum_delimiters_9.txt | 3 + test/prism/errors/argument_after_ellipsis.txt | 3 + ...warding_only_effects_its_own_internals.txt | 3 + ...rwarding_when_parent_is_not_forwarding.txt | 3 + test/prism/errors/arguments_after_block.txt | 3 + .../arguments_binding_power_for_and.txt | 5 + .../errors/assign_to_numbered_parameter.txt | 11 + test/prism/errors/bad_arguments.txt | 6 + test/prism/errors/begin_at_toplevel.txt | 3 + .../binary_range_with_left_unary_range.txt | 7 + test/prism/errors/block_arg_and_block.txt | 3 + ...ginning_with_brace_and_ending_with_end.txt | 6 + test/prism/errors/break_1.txt | 4 + test/prism/errors/break_1_2_3.txt | 8 + .../errors/call_with_block_and_write.txt | 4 + .../errors/call_with_block_operator_write.txt | 4 + .../prism/errors/call_with_block_or_write.txt | 4 + ...ssign_to_a_reserved_numbered_parameter.txt | 14 + test/prism/errors/case_without_clauses.txt | 4 + ...out_when_clauses_errors_on_else_clause.txt | 5 + test/prism/errors/check_value_expression.txt | 20 + .../class_definition_in_method_body.txt | 3 + .../class_definition_in_method_defs.txt | 7 + test/prism/errors/class_name.txt | 3 + test/prism/errors/command_call_in.txt | 7 + test/prism/errors/command_calls.txt | 3 + test/prism/errors/command_calls_10.txt | 3 + test/prism/errors/command_calls_11.txt | 3 + test/prism/errors/command_calls_12.txt | 3 + test/prism/errors/command_calls_13.txt | 3 + test/prism/errors/command_calls_14.txt | 3 + test/prism/errors/command_calls_15.txt | 3 + test/prism/errors/command_calls_16.txt | 3 + test/prism/errors/command_calls_17.txt | 5 + test/prism/errors/command_calls_18.txt | 3 + test/prism/errors/command_calls_19.txt | 3 + test/prism/errors/command_calls_2.txt | 6 + test/prism/errors/command_calls_20.txt | 3 + test/prism/errors/command_calls_21.txt | 5 + test/prism/errors/command_calls_22.txt | 3 + test/prism/errors/command_calls_23.txt | 3 + test/prism/errors/command_calls_24.txt | 5 + test/prism/errors/command_calls_25.txt | 8 + test/prism/errors/command_calls_26.txt | 3 + test/prism/errors/command_calls_27.txt | 3 + test/prism/errors/command_calls_28.txt | 3 + test/prism/errors/command_calls_29.txt | 3 + test/prism/errors/command_calls_3.txt | 3 + test/prism/errors/command_calls_30.txt | 3 + test/prism/errors/command_calls_4.txt | 3 + test/prism/errors/command_calls_5.txt | 3 + test/prism/errors/command_calls_6.txt | 6 + test/prism/errors/command_calls_7.txt | 6 + test/prism/errors/command_calls_8.txt | 6 + test/prism/errors/command_calls_9.txt | 6 + .../errors/conditional_predicate_closed.txt | 6 + .../errors/constant_assignment_in_method.txt | 3 + ...constant_path_with_invalid_token_after.txt | 4 + .../content_after_unterminated_heredoc.txt | 2 + .../cr_without_lf_in_percent_expression.txt | 3 + .../def_with_empty_expression_receiver.txt | 3 + ..._expression_receiver_and_no_identifier.txt | 4 + .../def_with_multiple_statements_receiver.txt | 10 + .../errors/defining_numbered_parameter.txt | 3 + .../errors/defining_numbered_parameter_2.txt | 3 + ...nd_A_F_in_u_Unicode_character_notation.txt | 4 + ..._not_allow_forward_arguments_in_blocks.txt | 3 + ...w_forward_arguments_in_lambda_literals.txt | 3 + ...digits_in_u_Unicode_character_notation.txt | 3 + ...depoints_in_a_single_character_literal.txt | 3 + ...w_trailing_commas_in_lambda_parameters.txt | 3 + ...w_trailing_commas_in_method_parameters.txt | 3 + .../dont_allow_return_inside_class_body.txt | 3 + .../dont_allow_return_inside_module_body.txt | 3 + ...llow_setting_to_back_and_nth_reference.txt | 7 + .../errors/double_arguments_forwarding.txt | 4 + .../double_scope_numbered_parameters.txt | 3 + ...ouble_splat_followed_by_splat_argument.txt | 3 + .../errors/duplicate_pattern_capture.txt | 17 + .../errors/duplicate_pattern_hash_key.txt | 4 + .../errors/duplicate_pattern_hash_key_2.txt | 3 + .../errors/duplicated_parameter_names.txt | 3 + .../errors/duplicated_parameter_names_2.txt | 3 + .../errors/duplicated_parameter_names_3.txt | 3 + .../errors/duplicated_parameter_names_4.txt | 3 + .../errors/duplicated_parameter_names_5.txt | 3 + .../errors/ellipsis_in_no_paren_call.txt | 3 + test/prism/errors/for_loops_index_missing.txt | 5 + test/prism/errors/for_loops_only_end.txt | 5 + .../forwarding_arg_after_keyword_rest.txt | 3 + .../prism/errors/forwarding_arg_and_block.txt | 3 + .../errors/incomplete_instance_var_string.txt | 4 + .../index_call_with_block_and_write.txt | 5 + .../index_call_with_block_operator_write.txt | 5 + .../errors/index_call_with_block_or_write.txt | 5 + ...expression_with_unknown_regexp_options.txt | 3 + .../errors/invalid_global_variable_write.txt | 4 + test/prism/errors/invalid_hex_escape.txt | 3 + test/prism/errors/invalid_multi_target.txt | 3 + test/prism/errors/invalid_multi_target_10.txt | 3 + test/prism/errors/invalid_multi_target_11.txt | 3 + test/prism/errors/invalid_multi_target_12.txt | 3 + test/prism/errors/invalid_multi_target_13.txt | 3 + test/prism/errors/invalid_multi_target_14.txt | 3 + test/prism/errors/invalid_multi_target_15.txt | 3 + test/prism/errors/invalid_multi_target_16.txt | 3 + test/prism/errors/invalid_multi_target_17.txt | 3 + test/prism/errors/invalid_multi_target_18.txt | 3 + test/prism/errors/invalid_multi_target_19.txt | 3 + test/prism/errors/invalid_multi_target_2.txt | 3 + test/prism/errors/invalid_multi_target_20.txt | 3 + test/prism/errors/invalid_multi_target_3.txt | 3 + test/prism/errors/invalid_multi_target_4.txt | 3 + test/prism/errors/invalid_multi_target_5.txt | 3 + test/prism/errors/invalid_multi_target_6.txt | 3 + test/prism/errors/invalid_multi_target_7.txt | 3 + test/prism/errors/invalid_multi_target_8.txt | 4 + test/prism/errors/invalid_multi_target_9.txt | 4 + .../errors/invalid_number_underscores.txt | 3 + .../errors/invalid_number_underscores_10.txt | 3 + .../errors/invalid_number_underscores_11.txt | 3 + .../errors/invalid_number_underscores_12.txt | 3 + .../errors/invalid_number_underscores_2.txt | 3 + .../errors/invalid_number_underscores_3.txt | 3 + .../errors/invalid_number_underscores_4.txt | 3 + .../errors/invalid_number_underscores_5.txt | 3 + .../errors/invalid_number_underscores_6.txt | 3 + .../errors/invalid_number_underscores_7.txt | 3 + .../errors/invalid_number_underscores_8.txt | 3 + .../errors/invalid_number_underscores_9.txt | 3 + .../errors/invalid_operator_write_dot.txt | 3 + .../errors/invalid_operator_write_fcall.txt | 3 + .../errors/it_with_ordinary_parameter.txt | 3 + ..._parameters_before_required_parameters.txt | 4 + .../errors/loop_conditional_is_closed.txt | 4 + test/prism/errors/match_plus.txt | 7 + ..._parameters_after_arguments_forwarding.txt | 4 + .../errors/method_parameters_after_block.txt | 4 + ...d_with_arguments_after_anonymous_block.txt | 4 + .../missing_terminator_in_parentheses.txt | 3 + .../module_definition_in_method_body.txt | 3 + ...definition_in_method_body_within_block.txt | 7 + .../module_definition_in_method_defs.txt | 7 + test/prism/errors/module_name_recoverable.txt | 4 + .../multiple_error_in_parameters_order.txt | 5 + test/prism/errors/next_1.txt | 4 + test/prism/errors/next_1_2_3.txt | 8 + test/prism/errors/non_assoc_equality.txt | 19 + test/prism/errors/non_assoc_range.txt | 4 + ...numbered_parameters_in_block_arguments.txt | 3 + ...l_block_parameters_with_unary_operator.txt | 3 + ...block_parameters_with_unary_operator_2.txt | 3 + ...block_parameters_with_unary_operator_3.txt | 3 + ...block_parameters_with_unary_operator_4.txt | 3 + ...name_ending_with_bang_or_question_mark.txt | 4 + test/prism/errors/pre_execution_context.txt | 4 + .../errors/pre_execution_missing_brace.txt | 3 + test/prism/errors/range_and_bin_op.txt | 4 + test/prism/errors/range_and_bin_op_2.txt | 4 + test/prism/errors/range_and_bin_op_3.txt | 3 + test/prism/errors/range_and_bin_op_4.txt | 4 + test/prism/errors/range_and_bin_op_5.txt | 5 + test/prism/errors/range_and_bin_op_6.txt | 3 + test/prism/errors/range_and_bin_op_7.txt | 3 + test/prism/errors/range_and_bin_op_8.txt | 4 + ...tional_number_with_exponential_portion.txt | 4 + ...expression_with_unknown_regexp_options.txt | 3 + ..._parameter_name_in_destructured_params.txt | 3 + ..._parameters_before_required_parameters.txt | 4 + test/prism/errors/return_1.txt | 3 + test/prism/errors/return_1_2_3.txt | 7 + ..._to_optional_parameters_multiple_times.txt | 4 + .../semicolon_after_inheritance_operator.txt | 3 + ...efined_in_an_endless_method_definition.txt | 3 + test/prism/errors/shadow_args_in_block.txt | 3 + test/prism/errors/shadow_args_in_lambda.txt | 5 + .../errors/singleton_method_for_literals.txt | 39 + .../splat_argument_after_keyword_argument.txt | 3 + .../errors/statement_at_non_statement.txt | 9 + test/prism/errors/statement_operators.txt | 25 + .../switching_to_named_arguments_twice.txt | 5 + .../switching_to_optional_arguments_twice.txt | 5 + test/prism/errors/symbol_in_hash.txt | 3 + .../errors/symbol_in_keyword_parameter.txt | 3 + .../errors/targeting_numbered_parameter.txt | 3 + ...ant_starting_with_downcased_identifier.txt | 4 + ...vel_constant_with_downcased_identifier.txt | 4 + test/prism/errors/trailing_comma_in_calls.txt | 3 + test/prism/errors/unexpected_block.txt | 3 + test/prism/errors/unterminated_W_list.txt | 3 + .../unterminated_argument_expression.txt | 5 + test/prism/errors/unterminated_embdoc.txt | 3 + test/prism/errors/unterminated_embdoc_2.txt | 3 + .../errors/unterminated_empty_string.txt | 3 + .../errors/unterminated_global_variable.txt | 3 + .../errors/unterminated_global_variable_2.txt | 3 + test/prism/errors/unterminated_i_list.txt | 3 + .../unterminated_interpolated_string.txt | 3 + .../unterminated_interpolated_symbol.txt | 3 + .../unterminated_parenthesized_expression.txt | 4 + .../unterminated_regular_expression.txt | 3 + ...inated_regular_expression_with_heredoc.txt | 4 + test/prism/errors/unterminated_s_symbol.txt | 3 + test/prism/errors/unterminated_string.txt | 3 + ...code_brackets_should_be_a_syntax_error.txt | 3 + test/prism/errors/unterminated_xstring.txt | 3 + .../void_value_expression_in_arguments.txt | 17 + .../errors/void_value_expression_in_array.txt | 15 + .../void_value_expression_in_assignment.txt | 9 + ...id_value_expression_in_begin_statement.txt | 21 + .../void_value_expression_in_binary_call.txt | 11 + .../errors/void_value_expression_in_call.txt | 11 + ...void_value_expression_in_constant_path.txt | 5 + .../errors/void_value_expression_in_def.txt | 10 + .../void_value_expression_in_expression.txt | 19 + .../errors/void_value_expression_in_hash.txt | 9 + .../void_value_expression_in_modifier.txt | 13 + .../void_value_expression_in_statement.txt | 26 + .../void_value_expression_in_unary_call.txt | 5 + test/prism/errors/while_endless_method.txt | 5 + .../errors/writing_numbered_parameter.txt | 3 + test/prism/errors_test.rb | 2295 +---------------- test/prism/fixtures/patterns.txt | 3 + test/prism/result/warnings_test.rb | 43 +- 239 files changed, 1299 insertions(+), 2249 deletions(-) create mode 100644 lib/prism/parse_result/errors.rb create mode 100644 test/prism/errors/1_2_3.txt create mode 100644 test/prism/errors/aliasing_global_variable_with_global_number_variable.txt create mode 100644 test/prism/errors/aliasing_global_variable_with_non_global_variable.txt create mode 100644 test/prism/errors/aliasing_non_global_variable_with_global_variable.txt create mode 100644 test/prism/errors/alnum_delimiters.txt create mode 100644 test/prism/errors/alnum_delimiters_2.txt create mode 100644 test/prism/errors/alnum_delimiters_3.txt create mode 100644 test/prism/errors/alnum_delimiters_4.txt create mode 100644 test/prism/errors/alnum_delimiters_5.txt create mode 100644 test/prism/errors/alnum_delimiters_6.txt create mode 100644 test/prism/errors/alnum_delimiters_7.txt create mode 100644 test/prism/errors/alnum_delimiters_8.txt create mode 100644 test/prism/errors/alnum_delimiters_9.txt create mode 100644 test/prism/errors/argument_after_ellipsis.txt create mode 100644 test/prism/errors/argument_forwarding_only_effects_its_own_internals.txt create mode 100644 test/prism/errors/argument_forwarding_when_parent_is_not_forwarding.txt create mode 100644 test/prism/errors/arguments_after_block.txt create mode 100644 test/prism/errors/arguments_binding_power_for_and.txt create mode 100644 test/prism/errors/assign_to_numbered_parameter.txt create mode 100644 test/prism/errors/bad_arguments.txt create mode 100644 test/prism/errors/begin_at_toplevel.txt create mode 100644 test/prism/errors/binary_range_with_left_unary_range.txt create mode 100644 test/prism/errors/block_arg_and_block.txt create mode 100644 test/prism/errors/block_beginning_with_brace_and_ending_with_end.txt create mode 100644 test/prism/errors/break_1.txt create mode 100644 test/prism/errors/break_1_2_3.txt create mode 100644 test/prism/errors/call_with_block_and_write.txt create mode 100644 test/prism/errors/call_with_block_operator_write.txt create mode 100644 test/prism/errors/call_with_block_or_write.txt create mode 100644 test/prism/errors/cannot_assign_to_a_reserved_numbered_parameter.txt create mode 100644 test/prism/errors/case_without_clauses.txt create mode 100644 test/prism/errors/case_without_when_clauses_errors_on_else_clause.txt create mode 100644 test/prism/errors/check_value_expression.txt create mode 100644 test/prism/errors/class_definition_in_method_body.txt create mode 100644 test/prism/errors/class_definition_in_method_defs.txt create mode 100644 test/prism/errors/class_name.txt create mode 100644 test/prism/errors/command_call_in.txt create mode 100644 test/prism/errors/command_calls.txt create mode 100644 test/prism/errors/command_calls_10.txt create mode 100644 test/prism/errors/command_calls_11.txt create mode 100644 test/prism/errors/command_calls_12.txt create mode 100644 test/prism/errors/command_calls_13.txt create mode 100644 test/prism/errors/command_calls_14.txt create mode 100644 test/prism/errors/command_calls_15.txt create mode 100644 test/prism/errors/command_calls_16.txt create mode 100644 test/prism/errors/command_calls_17.txt create mode 100644 test/prism/errors/command_calls_18.txt create mode 100644 test/prism/errors/command_calls_19.txt create mode 100644 test/prism/errors/command_calls_2.txt create mode 100644 test/prism/errors/command_calls_20.txt create mode 100644 test/prism/errors/command_calls_21.txt create mode 100644 test/prism/errors/command_calls_22.txt create mode 100644 test/prism/errors/command_calls_23.txt create mode 100644 test/prism/errors/command_calls_24.txt create mode 100644 test/prism/errors/command_calls_25.txt create mode 100644 test/prism/errors/command_calls_26.txt create mode 100644 test/prism/errors/command_calls_27.txt create mode 100644 test/prism/errors/command_calls_28.txt create mode 100644 test/prism/errors/command_calls_29.txt create mode 100644 test/prism/errors/command_calls_3.txt create mode 100644 test/prism/errors/command_calls_30.txt create mode 100644 test/prism/errors/command_calls_4.txt create mode 100644 test/prism/errors/command_calls_5.txt create mode 100644 test/prism/errors/command_calls_6.txt create mode 100644 test/prism/errors/command_calls_7.txt create mode 100644 test/prism/errors/command_calls_8.txt create mode 100644 test/prism/errors/command_calls_9.txt create mode 100644 test/prism/errors/conditional_predicate_closed.txt create mode 100644 test/prism/errors/constant_assignment_in_method.txt create mode 100644 test/prism/errors/constant_path_with_invalid_token_after.txt create mode 100644 test/prism/errors/content_after_unterminated_heredoc.txt create mode 100644 test/prism/errors/cr_without_lf_in_percent_expression.txt create mode 100644 test/prism/errors/def_with_empty_expression_receiver.txt create mode 100644 test/prism/errors/def_with_expression_receiver_and_no_identifier.txt create mode 100644 test/prism/errors/def_with_multiple_statements_receiver.txt create mode 100644 test/prism/errors/defining_numbered_parameter.txt create mode 100644 test/prism/errors/defining_numbered_parameter_2.txt create mode 100644 test/prism/errors/do_not_allow_characters_other_than_0_9_a_f_and_A_F_in_u_Unicode_character_notation.txt create mode 100644 test/prism/errors/do_not_allow_forward_arguments_in_blocks.txt create mode 100644 test/prism/errors/do_not_allow_forward_arguments_in_lambda_literals.txt create mode 100644 test/prism/errors/do_not_allow_more_than_6_hexadecimal_digits_in_u_Unicode_character_notation.txt create mode 100644 test/prism/errors/do_not_allow_multiple_codepoints_in_a_single_character_literal.txt create mode 100644 test/prism/errors/do_not_allow_trailing_commas_in_lambda_parameters.txt create mode 100644 test/prism/errors/do_not_allow_trailing_commas_in_method_parameters.txt create mode 100644 test/prism/errors/dont_allow_return_inside_class_body.txt create mode 100644 test/prism/errors/dont_allow_return_inside_module_body.txt create mode 100644 test/prism/errors/dont_allow_setting_to_back_and_nth_reference.txt create mode 100644 test/prism/errors/double_arguments_forwarding.txt create mode 100644 test/prism/errors/double_scope_numbered_parameters.txt create mode 100644 test/prism/errors/double_splat_followed_by_splat_argument.txt create mode 100644 test/prism/errors/duplicate_pattern_capture.txt create mode 100644 test/prism/errors/duplicate_pattern_hash_key.txt create mode 100644 test/prism/errors/duplicate_pattern_hash_key_2.txt create mode 100644 test/prism/errors/duplicated_parameter_names.txt create mode 100644 test/prism/errors/duplicated_parameter_names_2.txt create mode 100644 test/prism/errors/duplicated_parameter_names_3.txt create mode 100644 test/prism/errors/duplicated_parameter_names_4.txt create mode 100644 test/prism/errors/duplicated_parameter_names_5.txt create mode 100644 test/prism/errors/ellipsis_in_no_paren_call.txt create mode 100644 test/prism/errors/for_loops_index_missing.txt create mode 100644 test/prism/errors/for_loops_only_end.txt create mode 100644 test/prism/errors/forwarding_arg_after_keyword_rest.txt create mode 100644 test/prism/errors/forwarding_arg_and_block.txt create mode 100644 test/prism/errors/incomplete_instance_var_string.txt create mode 100644 test/prism/errors/index_call_with_block_and_write.txt create mode 100644 test/prism/errors/index_call_with_block_operator_write.txt create mode 100644 test/prism/errors/index_call_with_block_or_write.txt create mode 100644 test/prism/errors/interpolated_regular_expression_with_unknown_regexp_options.txt create mode 100644 test/prism/errors/invalid_global_variable_write.txt create mode 100644 test/prism/errors/invalid_hex_escape.txt create mode 100644 test/prism/errors/invalid_multi_target.txt create mode 100644 test/prism/errors/invalid_multi_target_10.txt create mode 100644 test/prism/errors/invalid_multi_target_11.txt create mode 100644 test/prism/errors/invalid_multi_target_12.txt create mode 100644 test/prism/errors/invalid_multi_target_13.txt create mode 100644 test/prism/errors/invalid_multi_target_14.txt create mode 100644 test/prism/errors/invalid_multi_target_15.txt create mode 100644 test/prism/errors/invalid_multi_target_16.txt create mode 100644 test/prism/errors/invalid_multi_target_17.txt create mode 100644 test/prism/errors/invalid_multi_target_18.txt create mode 100644 test/prism/errors/invalid_multi_target_19.txt create mode 100644 test/prism/errors/invalid_multi_target_2.txt create mode 100644 test/prism/errors/invalid_multi_target_20.txt create mode 100644 test/prism/errors/invalid_multi_target_3.txt create mode 100644 test/prism/errors/invalid_multi_target_4.txt create mode 100644 test/prism/errors/invalid_multi_target_5.txt create mode 100644 test/prism/errors/invalid_multi_target_6.txt create mode 100644 test/prism/errors/invalid_multi_target_7.txt create mode 100644 test/prism/errors/invalid_multi_target_8.txt create mode 100644 test/prism/errors/invalid_multi_target_9.txt create mode 100644 test/prism/errors/invalid_number_underscores.txt create mode 100644 test/prism/errors/invalid_number_underscores_10.txt create mode 100644 test/prism/errors/invalid_number_underscores_11.txt create mode 100644 test/prism/errors/invalid_number_underscores_12.txt create mode 100644 test/prism/errors/invalid_number_underscores_2.txt create mode 100644 test/prism/errors/invalid_number_underscores_3.txt create mode 100644 test/prism/errors/invalid_number_underscores_4.txt create mode 100644 test/prism/errors/invalid_number_underscores_5.txt create mode 100644 test/prism/errors/invalid_number_underscores_6.txt create mode 100644 test/prism/errors/invalid_number_underscores_7.txt create mode 100644 test/prism/errors/invalid_number_underscores_8.txt create mode 100644 test/prism/errors/invalid_number_underscores_9.txt create mode 100644 test/prism/errors/invalid_operator_write_dot.txt create mode 100644 test/prism/errors/invalid_operator_write_fcall.txt create mode 100644 test/prism/errors/it_with_ordinary_parameter.txt create mode 100644 test/prism/errors/keywords_parameters_before_required_parameters.txt create mode 100644 test/prism/errors/loop_conditional_is_closed.txt create mode 100644 test/prism/errors/match_plus.txt create mode 100644 test/prism/errors/method_parameters_after_arguments_forwarding.txt create mode 100644 test/prism/errors/method_parameters_after_block.txt create mode 100644 test/prism/errors/method_with_arguments_after_anonymous_block.txt create mode 100644 test/prism/errors/missing_terminator_in_parentheses.txt create mode 100644 test/prism/errors/module_definition_in_method_body.txt create mode 100644 test/prism/errors/module_definition_in_method_body_within_block.txt create mode 100644 test/prism/errors/module_definition_in_method_defs.txt create mode 100644 test/prism/errors/module_name_recoverable.txt create mode 100644 test/prism/errors/multiple_error_in_parameters_order.txt create mode 100644 test/prism/errors/next_1.txt create mode 100644 test/prism/errors/next_1_2_3.txt create mode 100644 test/prism/errors/non_assoc_equality.txt create mode 100644 test/prism/errors/non_assoc_range.txt create mode 100644 test/prism/errors/numbered_parameters_in_block_arguments.txt create mode 100644 test/prism/errors/optional_block_parameters_with_unary_operator.txt create mode 100644 test/prism/errors/optional_block_parameters_with_unary_operator_2.txt create mode 100644 test/prism/errors/optional_block_parameters_with_unary_operator_3.txt create mode 100644 test/prism/errors/optional_block_parameters_with_unary_operator_4.txt create mode 100644 test/prism/errors/parameter_name_ending_with_bang_or_question_mark.txt create mode 100644 test/prism/errors/pre_execution_context.txt create mode 100644 test/prism/errors/pre_execution_missing_brace.txt create mode 100644 test/prism/errors/range_and_bin_op.txt create mode 100644 test/prism/errors/range_and_bin_op_2.txt create mode 100644 test/prism/errors/range_and_bin_op_3.txt create mode 100644 test/prism/errors/range_and_bin_op_4.txt create mode 100644 test/prism/errors/range_and_bin_op_5.txt create mode 100644 test/prism/errors/range_and_bin_op_6.txt create mode 100644 test/prism/errors/range_and_bin_op_7.txt create mode 100644 test/prism/errors/range_and_bin_op_8.txt create mode 100644 test/prism/errors/rational_number_with_exponential_portion.txt create mode 100644 test/prism/errors/regular_expression_with_unknown_regexp_options.txt create mode 100644 test/prism/errors/repeated_parameter_name_in_destructured_params.txt create mode 100644 test/prism/errors/rest_keywords_parameters_before_required_parameters.txt create mode 100644 test/prism/errors/return_1.txt create mode 100644 test/prism/errors/return_1_2_3.txt create mode 100644 test/prism/errors/returning_to_optional_parameters_multiple_times.txt create mode 100644 test/prism/errors/semicolon_after_inheritance_operator.txt create mode 100644 test/prism/errors/setter_method_cannot_be_defined_in_an_endless_method_definition.txt create mode 100644 test/prism/errors/shadow_args_in_block.txt create mode 100644 test/prism/errors/shadow_args_in_lambda.txt create mode 100644 test/prism/errors/singleton_method_for_literals.txt create mode 100644 test/prism/errors/splat_argument_after_keyword_argument.txt create mode 100644 test/prism/errors/statement_at_non_statement.txt create mode 100644 test/prism/errors/statement_operators.txt create mode 100644 test/prism/errors/switching_to_named_arguments_twice.txt create mode 100644 test/prism/errors/switching_to_optional_arguments_twice.txt create mode 100644 test/prism/errors/symbol_in_hash.txt create mode 100644 test/prism/errors/symbol_in_keyword_parameter.txt create mode 100644 test/prism/errors/targeting_numbered_parameter.txt create mode 100644 test/prism/errors/top_level_constant_starting_with_downcased_identifier.txt create mode 100644 test/prism/errors/top_level_constant_with_downcased_identifier.txt create mode 100644 test/prism/errors/trailing_comma_in_calls.txt create mode 100644 test/prism/errors/unexpected_block.txt create mode 100644 test/prism/errors/unterminated_W_list.txt create mode 100644 test/prism/errors/unterminated_argument_expression.txt create mode 100644 test/prism/errors/unterminated_embdoc.txt create mode 100644 test/prism/errors/unterminated_embdoc_2.txt create mode 100644 test/prism/errors/unterminated_empty_string.txt create mode 100644 test/prism/errors/unterminated_global_variable.txt create mode 100644 test/prism/errors/unterminated_global_variable_2.txt create mode 100644 test/prism/errors/unterminated_i_list.txt create mode 100644 test/prism/errors/unterminated_interpolated_string.txt create mode 100644 test/prism/errors/unterminated_interpolated_symbol.txt create mode 100644 test/prism/errors/unterminated_parenthesized_expression.txt create mode 100644 test/prism/errors/unterminated_regular_expression.txt create mode 100644 test/prism/errors/unterminated_regular_expression_with_heredoc.txt create mode 100644 test/prism/errors/unterminated_s_symbol.txt create mode 100644 test/prism/errors/unterminated_string.txt create mode 100644 test/prism/errors/unterminated_unicode_brackets_should_be_a_syntax_error.txt create mode 100644 test/prism/errors/unterminated_xstring.txt create mode 100644 test/prism/errors/void_value_expression_in_arguments.txt create mode 100644 test/prism/errors/void_value_expression_in_array.txt create mode 100644 test/prism/errors/void_value_expression_in_assignment.txt create mode 100644 test/prism/errors/void_value_expression_in_begin_statement.txt create mode 100644 test/prism/errors/void_value_expression_in_binary_call.txt create mode 100644 test/prism/errors/void_value_expression_in_call.txt create mode 100644 test/prism/errors/void_value_expression_in_constant_path.txt create mode 100644 test/prism/errors/void_value_expression_in_def.txt create mode 100644 test/prism/errors/void_value_expression_in_expression.txt create mode 100644 test/prism/errors/void_value_expression_in_hash.txt create mode 100644 test/prism/errors/void_value_expression_in_modifier.txt create mode 100644 test/prism/errors/void_value_expression_in_statement.txt create mode 100644 test/prism/errors/void_value_expression_in_unary_call.txt create mode 100644 test/prism/errors/while_endless_method.txt create mode 100644 test/prism/errors/writing_numbered_parameter.txt diff --git a/bin/prism b/bin/prism index 03615ebd2ce..9750c8a9f00 100755 --- a/bin/prism +++ b/bin/prism @@ -13,6 +13,7 @@ module Prism when "console" then console when "dot" then dot(argv) when "encoding" then encoding(argv) + when "error" then error(argv) when "lex" then lex(argv) when "locals" then locals(argv) when "parse" then parse(argv) @@ -27,6 +28,7 @@ module Prism bin/prism console bin/prism dot [source] bin/prism encoding [encoding] + bin/prism error [name] [source] bin/prism lex [source] bin/prism locals [source] bin/prism parse [source] @@ -157,6 +159,29 @@ module Prism unicode_lists(found) if found == Encoding::UTF_8 || found == Encoding::UTF8_MAC end + # bin/prism error [name] [source] + def error(argv) + name = argv.shift + source, _ = read_source(argv) + + result = Prism.parse(source) + raise "Expected #{source.inspect} to have errors" if result.success? + + filepath = File.expand_path("../test/prism/errors/#{name}.txt", __dir__) + + if File.file?(filepath) + counter = 1 + + begin + current = "#{File.dirname(filepath)}/#{File.basename(filepath, ".txt")}_#{counter += 1}.txt" + end while File.file?(current) + + filepath = current + end + + File.write(filepath, result.errors_format) + end + # bin/prism lex [source] def lex(argv) source, filepath = read_source(argv) diff --git a/lib/prism/parse_result.rb b/lib/prism/parse_result.rb index 798fde09e5a..cc4f9422833 100644 --- a/lib/prism/parse_result.rb +++ b/lib/prism/parse_result.rb @@ -575,6 +575,7 @@ def failure? # This is a result specific to the `parse` and `parse_file` methods. class ParseResult < Result autoload :Comments, "prism/parse_result/comments" + autoload :Errors, "prism/parse_result/errors" autoload :Newlines, "prism/parse_result/newlines" private_constant :Comments @@ -604,6 +605,12 @@ def attach_comments! def mark_newlines! value.accept(Newlines.new(source.offsets.size)) # steep:ignore end + + # Returns a string representation of the syntax tree with the errors + # displayed inline. + def errors_format + Errors.new(self).format + end end # This is a result specific to the `lex` and `lex_file` methods. diff --git a/lib/prism/parse_result/errors.rb b/lib/prism/parse_result/errors.rb new file mode 100644 index 00000000000..40dda3c2642 --- /dev/null +++ b/lib/prism/parse_result/errors.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +require "stringio" + +module Prism + class ParseResult < Result + class Errors + attr_reader :parse_result + + def initialize(parse_result) + @parse_result = parse_result + end + + def format + error_lines = {} + parse_result.errors.each do |error| + location = error.location + (location.start_line..location.end_line).each do |line| + error_lines[line] ||= [] + error_lines[line] << error + end + end + + source_lines = parse_result.source.source.lines + source_lines << "" if error_lines.key?(source_lines.size + 1) + + io = StringIO.new + source_lines.each.with_index(1) do |line, line_number| + io.puts(line) + + (error_lines.delete(line_number) || []).each do |error| + location = error.location + + case line_number + when location.start_line + io.print(" " * location.start_column + "^") + + if location.start_line == location.end_line + if location.start_column != location.end_column + io.print("~" * (location.end_column - location.start_column - 1)) + end + + io.puts(" " + error.message) + else + io.puts("~" * (line.bytesize - location.start_column)) + end + when location.end_line + io.puts("~" * location.end_column + " " + error.message) + else + io.puts("~" * line.bytesize) + end + end + end + + io.puts + io.string + end + end + end +end diff --git a/test/prism/errors/1_2_3.txt b/test/prism/errors/1_2_3.txt new file mode 100644 index 00000000000..345452911f3 --- /dev/null +++ b/test/prism/errors/1_2_3.txt @@ -0,0 +1,11 @@ +(1, 2, 3) + ^ unexpected ',', expecting end-of-input + ^ unexpected ',', ignoring it + ^ expected a matching `)` + ^ unexpected ',', expecting end-of-input + ^ unexpected ',', ignoring it + ^ unexpected ',', expecting end-of-input + ^ unexpected ',', ignoring it + ^ unexpected ')', expecting end-of-input + ^ unexpected ')', ignoring it + diff --git a/test/prism/errors/aliasing_global_variable_with_global_number_variable.txt b/test/prism/errors/aliasing_global_variable_with_global_number_variable.txt new file mode 100644 index 00000000000..2f40a6a3288 --- /dev/null +++ b/test/prism/errors/aliasing_global_variable_with_global_number_variable.txt @@ -0,0 +1,3 @@ +alias $a $1 + ^~ invalid argument being passed to `alias`; can't make alias for the number variables + diff --git a/test/prism/errors/aliasing_global_variable_with_non_global_variable.txt b/test/prism/errors/aliasing_global_variable_with_non_global_variable.txt new file mode 100644 index 00000000000..b6f013bab52 --- /dev/null +++ b/test/prism/errors/aliasing_global_variable_with_non_global_variable.txt @@ -0,0 +1,3 @@ +alias $a b + ^ invalid argument being passed to `alias`; expected a bare word, symbol, constant, or global variable + diff --git a/test/prism/errors/aliasing_non_global_variable_with_global_variable.txt b/test/prism/errors/aliasing_non_global_variable_with_global_variable.txt new file mode 100644 index 00000000000..8863f342f0f --- /dev/null +++ b/test/prism/errors/aliasing_non_global_variable_with_global_variable.txt @@ -0,0 +1,3 @@ +alias a $b + ^~ invalid argument being passed to `alias`; expected a bare word, symbol, constant, or global variable + diff --git a/test/prism/errors/alnum_delimiters.txt b/test/prism/errors/alnum_delimiters.txt new file mode 100644 index 00000000000..c9ed06ae51d --- /dev/null +++ b/test/prism/errors/alnum_delimiters.txt @@ -0,0 +1,3 @@ +%qXfooX +^ unknown type of %string + diff --git a/test/prism/errors/alnum_delimiters_2.txt b/test/prism/errors/alnum_delimiters_2.txt new file mode 100644 index 00000000000..3f78b434d6c --- /dev/null +++ b/test/prism/errors/alnum_delimiters_2.txt @@ -0,0 +1,3 @@ +%QXfooX +^ unknown type of %string + diff --git a/test/prism/errors/alnum_delimiters_3.txt b/test/prism/errors/alnum_delimiters_3.txt new file mode 100644 index 00000000000..55ef8d29a54 --- /dev/null +++ b/test/prism/errors/alnum_delimiters_3.txt @@ -0,0 +1,3 @@ +%wXfooX +^ unknown type of %string + diff --git a/test/prism/errors/alnum_delimiters_4.txt b/test/prism/errors/alnum_delimiters_4.txt new file mode 100644 index 00000000000..603b54debdc --- /dev/null +++ b/test/prism/errors/alnum_delimiters_4.txt @@ -0,0 +1,3 @@ +%WxfooX +^ unknown type of %string + diff --git a/test/prism/errors/alnum_delimiters_5.txt b/test/prism/errors/alnum_delimiters_5.txt new file mode 100644 index 00000000000..31c344ea902 --- /dev/null +++ b/test/prism/errors/alnum_delimiters_5.txt @@ -0,0 +1,3 @@ +%iXfooX +^ unknown type of %string + diff --git a/test/prism/errors/alnum_delimiters_6.txt b/test/prism/errors/alnum_delimiters_6.txt new file mode 100644 index 00000000000..79ffbbb1b84 --- /dev/null +++ b/test/prism/errors/alnum_delimiters_6.txt @@ -0,0 +1,3 @@ +%IXfooX +^ unknown type of %string + diff --git a/test/prism/errors/alnum_delimiters_7.txt b/test/prism/errors/alnum_delimiters_7.txt new file mode 100644 index 00000000000..809192e031f --- /dev/null +++ b/test/prism/errors/alnum_delimiters_7.txt @@ -0,0 +1,3 @@ +%xXfooX +^ unknown type of %string + diff --git a/test/prism/errors/alnum_delimiters_8.txt b/test/prism/errors/alnum_delimiters_8.txt new file mode 100644 index 00000000000..abfcf119c00 --- /dev/null +++ b/test/prism/errors/alnum_delimiters_8.txt @@ -0,0 +1,3 @@ +%rXfooX +^ unknown type of %string + diff --git a/test/prism/errors/alnum_delimiters_9.txt b/test/prism/errors/alnum_delimiters_9.txt new file mode 100644 index 00000000000..ae56d7be4fb --- /dev/null +++ b/test/prism/errors/alnum_delimiters_9.txt @@ -0,0 +1,3 @@ +%sXfooX +^ unknown type of %string + diff --git a/test/prism/errors/argument_after_ellipsis.txt b/test/prism/errors/argument_after_ellipsis.txt new file mode 100644 index 00000000000..3d708648a40 --- /dev/null +++ b/test/prism/errors/argument_after_ellipsis.txt @@ -0,0 +1,3 @@ +def foo(...); foo(..., 1); end + ^ unexpected argument after `...` + diff --git a/test/prism/errors/argument_forwarding_only_effects_its_own_internals.txt b/test/prism/errors/argument_forwarding_only_effects_its_own_internals.txt new file mode 100644 index 00000000000..9c3f0ae3f76 --- /dev/null +++ b/test/prism/errors/argument_forwarding_only_effects_its_own_internals.txt @@ -0,0 +1,3 @@ +def a(...); b(...); end; def c(x, y, z); b(...); end + ^~~ unexpected ... when the parent method is not forwarding + diff --git a/test/prism/errors/argument_forwarding_when_parent_is_not_forwarding.txt b/test/prism/errors/argument_forwarding_when_parent_is_not_forwarding.txt new file mode 100644 index 00000000000..017ba7eec9e --- /dev/null +++ b/test/prism/errors/argument_forwarding_when_parent_is_not_forwarding.txt @@ -0,0 +1,3 @@ +def a(x, y, z); b(...); end + ^~~ unexpected ... when the parent method is not forwarding + diff --git a/test/prism/errors/arguments_after_block.txt b/test/prism/errors/arguments_after_block.txt new file mode 100644 index 00000000000..2d5e06ff777 --- /dev/null +++ b/test/prism/errors/arguments_after_block.txt @@ -0,0 +1,3 @@ +a(&block, foo) + ^~~ unexpected argument after a block argument + diff --git a/test/prism/errors/arguments_binding_power_for_and.txt b/test/prism/errors/arguments_binding_power_for_and.txt new file mode 100644 index 00000000000..0585a091f4d --- /dev/null +++ b/test/prism/errors/arguments_binding_power_for_and.txt @@ -0,0 +1,5 @@ +foo(*bar and baz) + ^~~ unexpected 'and'; expected a `)` to close the arguments + ^ unexpected ')', expecting end-of-input + ^ unexpected ')', ignoring it + diff --git a/test/prism/errors/assign_to_numbered_parameter.txt b/test/prism/errors/assign_to_numbered_parameter.txt new file mode 100644 index 00000000000..74cc0c40324 --- /dev/null +++ b/test/prism/errors/assign_to_numbered_parameter.txt @@ -0,0 +1,11 @@ +a in _1 + ^~ _1 is reserved for numbered parameters +a => _1 + ^~ _1 is reserved for numbered parameters +1 => a, _1 + ^~ _1 is reserved for numbered parameters +1 in a, _1 + ^~ _1 is reserved for numbered parameters +/(?<_1>)/ =~ a + ^~ _1 is reserved for numbered parameters + diff --git a/test/prism/errors/bad_arguments.txt b/test/prism/errors/bad_arguments.txt new file mode 100644 index 00000000000..ea19efd3c8f --- /dev/null +++ b/test/prism/errors/bad_arguments.txt @@ -0,0 +1,6 @@ +def foo(A, @a, $A, @@a);end + ^ invalid formal argument; formal argument cannot be a constant + ^~ invalid formal argument; formal argument cannot be an instance variable + ^~ invalid formal argument; formal argument cannot be a global variable + ^~~ invalid formal argument; formal argument cannot be a class variable + diff --git a/test/prism/errors/begin_at_toplevel.txt b/test/prism/errors/begin_at_toplevel.txt new file mode 100644 index 00000000000..ce3d3b8d002 --- /dev/null +++ b/test/prism/errors/begin_at_toplevel.txt @@ -0,0 +1,3 @@ +def foo; BEGIN {}; end + ^~~~~ BEGIN is permitted only at toplevel + diff --git a/test/prism/errors/binary_range_with_left_unary_range.txt b/test/prism/errors/binary_range_with_left_unary_range.txt new file mode 100644 index 00000000000..37e41f39717 --- /dev/null +++ b/test/prism/errors/binary_range_with_left_unary_range.txt @@ -0,0 +1,7 @@ +..1.. + ^~ unexpected range operator; .. and ... are non-associative and cannot be chained +...1.. + ^~ unexpected range operator; .. and ... are non-associative and cannot be chained + ^~ unexpected .., expecting end-of-input + ^~ unexpected .., ignoring it + diff --git a/test/prism/errors/block_arg_and_block.txt b/test/prism/errors/block_arg_and_block.txt new file mode 100644 index 00000000000..c355c404758 --- /dev/null +++ b/test/prism/errors/block_arg_and_block.txt @@ -0,0 +1,3 @@ +foo(&1) { } + ^~~ both block arg and actual block given; only one block is allowed + diff --git a/test/prism/errors/block_beginning_with_brace_and_ending_with_end.txt b/test/prism/errors/block_beginning_with_brace_and_ending_with_end.txt new file mode 100644 index 00000000000..f0fa964c8a7 --- /dev/null +++ b/test/prism/errors/block_beginning_with_brace_and_ending_with_end.txt @@ -0,0 +1,6 @@ +x.each { x end + ^~~ unexpected 'end', expecting end-of-input + ^~~ unexpected 'end', ignoring it + ^ unexpected end-of-input, assuming it is closing the parent top level context + ^ expected a block beginning with `{` to end with `}` + diff --git a/test/prism/errors/break_1.txt b/test/prism/errors/break_1.txt new file mode 100644 index 00000000000..e7b26ad3a01 --- /dev/null +++ b/test/prism/errors/break_1.txt @@ -0,0 +1,4 @@ +break 1,; + ^ expected an argument +^~~~~~~~ Invalid break + diff --git a/test/prism/errors/break_1_2_3.txt b/test/prism/errors/break_1_2_3.txt new file mode 100644 index 00000000000..817207cbfe3 --- /dev/null +++ b/test/prism/errors/break_1_2_3.txt @@ -0,0 +1,8 @@ +break(1, 2, 3) + ^ unexpected ',', expecting end-of-input + ^ unexpected ',', ignoring it + ^ expected a matching `)` + ^ unexpected ')', expecting end-of-input + ^ unexpected ')', ignoring it +^~~~~~~~~~~~~ Invalid break + diff --git a/test/prism/errors/call_with_block_and_write.txt b/test/prism/errors/call_with_block_and_write.txt new file mode 100644 index 00000000000..f63d94770eb --- /dev/null +++ b/test/prism/errors/call_with_block_and_write.txt @@ -0,0 +1,4 @@ +foo {} &&= 1 +^~~~~~ unexpected write target + ^~~ unexpected operator after a call with a block + diff --git a/test/prism/errors/call_with_block_operator_write.txt b/test/prism/errors/call_with_block_operator_write.txt new file mode 100644 index 00000000000..3c36050b34f --- /dev/null +++ b/test/prism/errors/call_with_block_operator_write.txt @@ -0,0 +1,4 @@ +foo {} += 1 +^~~~~~ unexpected write target + ^~ unexpected operator after a call with a block + diff --git a/test/prism/errors/call_with_block_or_write.txt b/test/prism/errors/call_with_block_or_write.txt new file mode 100644 index 00000000000..2cced0db75d --- /dev/null +++ b/test/prism/errors/call_with_block_or_write.txt @@ -0,0 +1,4 @@ +foo {} ||= 1 +^~~~~~ unexpected write target + ^~~ unexpected operator after a call with a block + diff --git a/test/prism/errors/cannot_assign_to_a_reserved_numbered_parameter.txt b/test/prism/errors/cannot_assign_to_a_reserved_numbered_parameter.txt new file mode 100644 index 00000000000..750915fb1fb --- /dev/null +++ b/test/prism/errors/cannot_assign_to_a_reserved_numbered_parameter.txt @@ -0,0 +1,14 @@ +begin + _1=:a;_2=:a;_3=:a;_4=:a;_5=:a + ^~ _1 is reserved for numbered parameters + ^~ _2 is reserved for numbered parameters + ^~ _3 is reserved for numbered parameters + ^~ _4 is reserved for numbered parameters + ^~ _5 is reserved for numbered parameters + _6=:a;_7=:a;_8=:a;_9=:a;_10=:a + ^~ _6 is reserved for numbered parameters + ^~ _7 is reserved for numbered parameters + ^~ _8 is reserved for numbered parameters + ^~ _9 is reserved for numbered parameters +end + diff --git a/test/prism/errors/case_without_clauses.txt b/test/prism/errors/case_without_clauses.txt new file mode 100644 index 00000000000..3bbbfdd97fa --- /dev/null +++ b/test/prism/errors/case_without_clauses.txt @@ -0,0 +1,4 @@ +case :a +^~~~ expected a `when` or `in` clause after `case` +end + diff --git a/test/prism/errors/case_without_when_clauses_errors_on_else_clause.txt b/test/prism/errors/case_without_when_clauses_errors_on_else_clause.txt new file mode 100644 index 00000000000..c5a1179fb9d --- /dev/null +++ b/test/prism/errors/case_without_when_clauses_errors_on_else_clause.txt @@ -0,0 +1,5 @@ +case :a +^~~~ expected a `when` or `in` clause after `case` +else +end + diff --git a/test/prism/errors/check_value_expression.txt b/test/prism/errors/check_value_expression.txt new file mode 100644 index 00000000000..33a472d94c1 --- /dev/null +++ b/test/prism/errors/check_value_expression.txt @@ -0,0 +1,20 @@ +1 => ^(return) + ^~~~~~ unexpected void value expression +while true + 1 => ^(break) + ^~~~~ unexpected void value expression + 1 => ^(next) + ^~~~ unexpected void value expression + 1 => ^(redo) + ^~~~ unexpected void value expression + 1 => ^(retry) + ^~~~~ Invalid retry without rescue + ^~~~~ unexpected void value expression + 1 => ^(2 => a) + ^~~~~~ unexpected void value expression +end +1 => ^(if 1; (return) else (return) end) + ^~~~~~ unexpected void value expression +1 => ^(unless 1; (return) else (return) end) + ^~~~~~ unexpected void value expression + diff --git a/test/prism/errors/class_definition_in_method_body.txt b/test/prism/errors/class_definition_in_method_body.txt new file mode 100644 index 00000000000..fcdc5746eec --- /dev/null +++ b/test/prism/errors/class_definition_in_method_body.txt @@ -0,0 +1,3 @@ +def foo;class A;end;end + ^~~~~ unexpected class definition in method body + diff --git a/test/prism/errors/class_definition_in_method_defs.txt b/test/prism/errors/class_definition_in_method_defs.txt new file mode 100644 index 00000000000..23bee0b6fb3 --- /dev/null +++ b/test/prism/errors/class_definition_in_method_defs.txt @@ -0,0 +1,7 @@ +def foo(bar = class A;end);end + ^~~~~ unexpected class definition in method body +def foo;rescue;class A;end;end + ^~~~~ unexpected class definition in method body +def foo;ensure;class A;end;end + ^~~~~ unexpected class definition in method body + diff --git a/test/prism/errors/class_name.txt b/test/prism/errors/class_name.txt new file mode 100644 index 00000000000..8b75896ddba --- /dev/null +++ b/test/prism/errors/class_name.txt @@ -0,0 +1,3 @@ +class 0.X end + ^~~ unexpected constant path after `class`; class/module name must be CONSTANT + diff --git a/test/prism/errors/command_call_in.txt b/test/prism/errors/command_call_in.txt new file mode 100644 index 00000000000..a4357028c67 --- /dev/null +++ b/test/prism/errors/command_call_in.txt @@ -0,0 +1,7 @@ +foo 1 in a + ^ unexpected `in` keyword in arguments + ^ unexpected local variable or method, expecting end-of-input +a = foo 2 in b + ^ unexpected `in` keyword in arguments + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls.txt b/test/prism/errors/command_calls.txt new file mode 100644 index 00000000000..19812a1d0a6 --- /dev/null +++ b/test/prism/errors/command_calls.txt @@ -0,0 +1,3 @@ +[a b] + ^ unexpected local variable or method; expected a `,` separator for the array elements + diff --git a/test/prism/errors/command_calls_10.txt b/test/prism/errors/command_calls_10.txt new file mode 100644 index 00000000000..f4d9f0fabcf --- /dev/null +++ b/test/prism/errors/command_calls_10.txt @@ -0,0 +1,3 @@ ++a b + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls_11.txt b/test/prism/errors/command_calls_11.txt new file mode 100644 index 00000000000..868476c0c31 --- /dev/null +++ b/test/prism/errors/command_calls_11.txt @@ -0,0 +1,3 @@ +a + b c + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls_12.txt b/test/prism/errors/command_calls_12.txt new file mode 100644 index 00000000000..50c9ae88e3a --- /dev/null +++ b/test/prism/errors/command_calls_12.txt @@ -0,0 +1,3 @@ +a && b c + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls_13.txt b/test/prism/errors/command_calls_13.txt new file mode 100644 index 00000000000..50dc4a84a02 --- /dev/null +++ b/test/prism/errors/command_calls_13.txt @@ -0,0 +1,3 @@ +a =~ b c + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls_14.txt b/test/prism/errors/command_calls_14.txt new file mode 100644 index 00000000000..1b16fd32453 --- /dev/null +++ b/test/prism/errors/command_calls_14.txt @@ -0,0 +1,3 @@ +a = b, c d + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls_15.txt b/test/prism/errors/command_calls_15.txt new file mode 100644 index 00000000000..d2409fd0023 --- /dev/null +++ b/test/prism/errors/command_calls_15.txt @@ -0,0 +1,3 @@ +a = *b c + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls_16.txt b/test/prism/errors/command_calls_16.txt new file mode 100644 index 00000000000..ceb07dfe30a --- /dev/null +++ b/test/prism/errors/command_calls_16.txt @@ -0,0 +1,3 @@ +a, b = c = d f + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls_17.txt b/test/prism/errors/command_calls_17.txt new file mode 100644 index 00000000000..a78ac0985d1 --- /dev/null +++ b/test/prism/errors/command_calls_17.txt @@ -0,0 +1,5 @@ +a ? b c : d e + ^ expected a `:` after the true expression of a ternary operator + ^ unexpected ':', expecting end-of-input + ^ unexpected ':', ignoring it + diff --git a/test/prism/errors/command_calls_18.txt b/test/prism/errors/command_calls_18.txt new file mode 100644 index 00000000000..393e7e0ae63 --- /dev/null +++ b/test/prism/errors/command_calls_18.txt @@ -0,0 +1,3 @@ +defined? a b + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls_19.txt b/test/prism/errors/command_calls_19.txt new file mode 100644 index 00000000000..e045187f1e4 --- /dev/null +++ b/test/prism/errors/command_calls_19.txt @@ -0,0 +1,3 @@ +! ! a b + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls_2.txt b/test/prism/errors/command_calls_2.txt new file mode 100644 index 00000000000..b0983c015bb --- /dev/null +++ b/test/prism/errors/command_calls_2.txt @@ -0,0 +1,6 @@ +{a: b c} + ^ expected a `}` to close the hash literal + ^ unexpected local variable or method, expecting end-of-input + ^ unexpected '}', expecting end-of-input + ^ unexpected '}', ignoring it + diff --git a/test/prism/errors/command_calls_20.txt b/test/prism/errors/command_calls_20.txt new file mode 100644 index 00000000000..3058ebce963 --- /dev/null +++ b/test/prism/errors/command_calls_20.txt @@ -0,0 +1,3 @@ +def f a = b c; end + ^ expected a delimiter to close the parameters + diff --git a/test/prism/errors/command_calls_21.txt b/test/prism/errors/command_calls_21.txt new file mode 100644 index 00000000000..73d8f83539a --- /dev/null +++ b/test/prism/errors/command_calls_21.txt @@ -0,0 +1,5 @@ +def f(a = b c); end + ^ unexpected local variable or method; expected a `)` to close the parameters + ^ unexpected ')', expecting end-of-input + ^ unexpected ')', ignoring it + diff --git a/test/prism/errors/command_calls_22.txt b/test/prism/errors/command_calls_22.txt new file mode 100644 index 00000000000..5a234e04e8b --- /dev/null +++ b/test/prism/errors/command_calls_22.txt @@ -0,0 +1,3 @@ +a = b rescue c d + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls_23.txt b/test/prism/errors/command_calls_23.txt new file mode 100644 index 00000000000..db85589ffde --- /dev/null +++ b/test/prism/errors/command_calls_23.txt @@ -0,0 +1,3 @@ +def a = b rescue c d + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls_24.txt b/test/prism/errors/command_calls_24.txt new file mode 100644 index 00000000000..3046b36dc12 --- /dev/null +++ b/test/prism/errors/command_calls_24.txt @@ -0,0 +1,5 @@ +->a=b c{} + ^ expected a `do` keyword or a `{` to open the lambda block + ^ unexpected end-of-input, assuming it is closing the parent top level context + ^ expected a lambda block beginning with `do` to end with `end` + diff --git a/test/prism/errors/command_calls_25.txt b/test/prism/errors/command_calls_25.txt new file mode 100644 index 00000000000..5fddd90fdd0 --- /dev/null +++ b/test/prism/errors/command_calls_25.txt @@ -0,0 +1,8 @@ +->(a=b c){} + ^ expected a matching `)` + ^ expected a `do` keyword or a `{` to open the lambda block + ^ unexpected ')', expecting end-of-input + ^ unexpected ')', ignoring it + ^ unexpected end-of-input, assuming it is closing the parent top level context + ^ expected a lambda block beginning with `do` to end with `end` + diff --git a/test/prism/errors/command_calls_26.txt b/test/prism/errors/command_calls_26.txt new file mode 100644 index 00000000000..29ed4cb903b --- /dev/null +++ b/test/prism/errors/command_calls_26.txt @@ -0,0 +1,3 @@ +case; when a b; end + ^ expected a delimiter after the predicates of a `when` clause + diff --git a/test/prism/errors/command_calls_27.txt b/test/prism/errors/command_calls_27.txt new file mode 100644 index 00000000000..8d1c3ee0779 --- /dev/null +++ b/test/prism/errors/command_calls_27.txt @@ -0,0 +1,3 @@ +case; in a if a b; end +^~~~ expected a predicate for a case matching statement + diff --git a/test/prism/errors/command_calls_28.txt b/test/prism/errors/command_calls_28.txt new file mode 100644 index 00000000000..4bfe88d67ba --- /dev/null +++ b/test/prism/errors/command_calls_28.txt @@ -0,0 +1,3 @@ +case; in a unless a b; end +^~~~ expected a predicate for a case matching statement + diff --git a/test/prism/errors/command_calls_29.txt b/test/prism/errors/command_calls_29.txt new file mode 100644 index 00000000000..eae012ab44c --- /dev/null +++ b/test/prism/errors/command_calls_29.txt @@ -0,0 +1,3 @@ +begin; rescue a b; end + ^ expected a closing delimiter for the `rescue` clause + diff --git a/test/prism/errors/command_calls_3.txt b/test/prism/errors/command_calls_3.txt new file mode 100644 index 00000000000..77af72b9048 --- /dev/null +++ b/test/prism/errors/command_calls_3.txt @@ -0,0 +1,3 @@ +...a b + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls_30.txt b/test/prism/errors/command_calls_30.txt new file mode 100644 index 00000000000..48e35685cba --- /dev/null +++ b/test/prism/errors/command_calls_30.txt @@ -0,0 +1,3 @@ +begin; rescue a b => c; end + ^ expected a closing delimiter for the `rescue` clause + diff --git a/test/prism/errors/command_calls_4.txt b/test/prism/errors/command_calls_4.txt new file mode 100644 index 00000000000..4be14e57e47 --- /dev/null +++ b/test/prism/errors/command_calls_4.txt @@ -0,0 +1,3 @@ +if ...a b; end + ^ expected `then` or `;` or '\n' + diff --git a/test/prism/errors/command_calls_5.txt b/test/prism/errors/command_calls_5.txt new file mode 100644 index 00000000000..799a6c1136b --- /dev/null +++ b/test/prism/errors/command_calls_5.txt @@ -0,0 +1,3 @@ +a b, c d + ^ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/command_calls_6.txt b/test/prism/errors/command_calls_6.txt new file mode 100644 index 00000000000..6f09d36e942 --- /dev/null +++ b/test/prism/errors/command_calls_6.txt @@ -0,0 +1,6 @@ +a(b, c d) + ^ unexpected local variable or method; expected a `)` to close the arguments + ^ unexpected local variable or method, expecting end-of-input + ^ unexpected ')', expecting end-of-input + ^ unexpected ')', ignoring it + diff --git a/test/prism/errors/command_calls_7.txt b/test/prism/errors/command_calls_7.txt new file mode 100644 index 00000000000..b5d74209fa6 --- /dev/null +++ b/test/prism/errors/command_calls_7.txt @@ -0,0 +1,6 @@ +a(*b c) + ^ unexpected local variable or method; expected a `)` to close the arguments + ^ unexpected local variable or method, expecting end-of-input + ^ unexpected ')', expecting end-of-input + ^ unexpected ')', ignoring it + diff --git a/test/prism/errors/command_calls_8.txt b/test/prism/errors/command_calls_8.txt new file mode 100644 index 00000000000..e574063e72a --- /dev/null +++ b/test/prism/errors/command_calls_8.txt @@ -0,0 +1,6 @@ +a(**b c) + ^ unexpected local variable or method; expected a `)` to close the arguments + ^ unexpected local variable or method, expecting end-of-input + ^ unexpected ')', expecting end-of-input + ^ unexpected ')', ignoring it + diff --git a/test/prism/errors/command_calls_9.txt b/test/prism/errors/command_calls_9.txt new file mode 100644 index 00000000000..69515d959c0 --- /dev/null +++ b/test/prism/errors/command_calls_9.txt @@ -0,0 +1,6 @@ +a(&b c) + ^ unexpected local variable or method; expected a `)` to close the arguments + ^ unexpected local variable or method, expecting end-of-input + ^ unexpected ')', expecting end-of-input + ^ unexpected ')', ignoring it + diff --git a/test/prism/errors/conditional_predicate_closed.txt b/test/prism/errors/conditional_predicate_closed.txt new file mode 100644 index 00000000000..6655fd2b1ce --- /dev/null +++ b/test/prism/errors/conditional_predicate_closed.txt @@ -0,0 +1,6 @@ +if 0 0; elsif 0 0; end + ^ expected `then` or `;` or '\n' + ^ expected `then` or `;` or '\n' +unless 0 0; end + ^ expected `then` or `;` or '\n' + diff --git a/test/prism/errors/constant_assignment_in_method.txt b/test/prism/errors/constant_assignment_in_method.txt new file mode 100644 index 00000000000..1ee49bffe6f --- /dev/null +++ b/test/prism/errors/constant_assignment_in_method.txt @@ -0,0 +1,3 @@ +def foo();A=1;end + ^~~ dynamic constant assignment + diff --git a/test/prism/errors/constant_path_with_invalid_token_after.txt b/test/prism/errors/constant_path_with_invalid_token_after.txt new file mode 100644 index 00000000000..acb6dba30a3 --- /dev/null +++ b/test/prism/errors/constant_path_with_invalid_token_after.txt @@ -0,0 +1,4 @@ +A::$b + ^ expected a constant after the `::` operator + ^~ unexpected global variable, expecting end-of-input + diff --git a/test/prism/errors/content_after_unterminated_heredoc.txt b/test/prism/errors/content_after_unterminated_heredoc.txt new file mode 100644 index 00000000000..43815cd9d05 --- /dev/null +++ b/test/prism/errors/content_after_unterminated_heredoc.txt @@ -0,0 +1,2 @@ +<<~FOO.foo + ^~~ unterminated heredoc; can't find string "FOO" anywhere before EOF diff --git a/test/prism/errors/cr_without_lf_in_percent_expression.txt b/test/prism/errors/cr_without_lf_in_percent_expression.txt new file mode 100644 index 00000000000..903f8b4b4af --- /dev/null +++ b/test/prism/errors/cr_without_lf_in_percent_expression.txt @@ -0,0 +1,3 @@ +% + ^ unterminated string meets end of file + diff --git a/test/prism/errors/def_with_empty_expression_receiver.txt b/test/prism/errors/def_with_empty_expression_receiver.txt new file mode 100644 index 00000000000..153fe8a1c6f --- /dev/null +++ b/test/prism/errors/def_with_empty_expression_receiver.txt @@ -0,0 +1,3 @@ +def ().a; end + ^ expected a receiver for the method definition + diff --git a/test/prism/errors/def_with_expression_receiver_and_no_identifier.txt b/test/prism/errors/def_with_expression_receiver_and_no_identifier.txt new file mode 100644 index 00000000000..1aefc07f1a2 --- /dev/null +++ b/test/prism/errors/def_with_expression_receiver_and_no_identifier.txt @@ -0,0 +1,4 @@ +def (a); end + ^ expected a `.` or `::` after the receiver in a method definition + ^ unexpected ';'; expected a method name + diff --git a/test/prism/errors/def_with_multiple_statements_receiver.txt b/test/prism/errors/def_with_multiple_statements_receiver.txt new file mode 100644 index 00000000000..80c9d4c1901 --- /dev/null +++ b/test/prism/errors/def_with_multiple_statements_receiver.txt @@ -0,0 +1,10 @@ +def ( +a +b +^ expected a matching `)` +^ expected a `.` or `::` after the receiver in a method definition + ^ expected a delimiter to close the parameters +).c; end +^ unexpected ')', ignoring it + ^ unexpected '.', ignoring it + diff --git a/test/prism/errors/defining_numbered_parameter.txt b/test/prism/errors/defining_numbered_parameter.txt new file mode 100644 index 00000000000..2bf05d95631 --- /dev/null +++ b/test/prism/errors/defining_numbered_parameter.txt @@ -0,0 +1,3 @@ +def _1; end + ^~ _1 is reserved for numbered parameters + diff --git a/test/prism/errors/defining_numbered_parameter_2.txt b/test/prism/errors/defining_numbered_parameter_2.txt new file mode 100644 index 00000000000..dc4739b126a --- /dev/null +++ b/test/prism/errors/defining_numbered_parameter_2.txt @@ -0,0 +1,3 @@ +def self._1; end + ^~ _1 is reserved for numbered parameters + diff --git a/test/prism/errors/do_not_allow_characters_other_than_0_9_a_f_and_A_F_in_u_Unicode_character_notation.txt b/test/prism/errors/do_not_allow_characters_other_than_0_9_a_f_and_A_F_in_u_Unicode_character_notation.txt new file mode 100644 index 00000000000..953b9589d1f --- /dev/null +++ b/test/prism/errors/do_not_allow_characters_other_than_0_9_a_f_and_A_F_in_u_Unicode_character_notation.txt @@ -0,0 +1,4 @@ +"\u{000z}" + ^ invalid Unicode escape sequence + ^ unterminated Unicode escape + diff --git a/test/prism/errors/do_not_allow_forward_arguments_in_blocks.txt b/test/prism/errors/do_not_allow_forward_arguments_in_blocks.txt new file mode 100644 index 00000000000..df495576177 --- /dev/null +++ b/test/prism/errors/do_not_allow_forward_arguments_in_blocks.txt @@ -0,0 +1,3 @@ +a {|...|} + ^~~ unexpected ... when the parent method is not forwarding + diff --git a/test/prism/errors/do_not_allow_forward_arguments_in_lambda_literals.txt b/test/prism/errors/do_not_allow_forward_arguments_in_lambda_literals.txt new file mode 100644 index 00000000000..c2405a5c66f --- /dev/null +++ b/test/prism/errors/do_not_allow_forward_arguments_in_lambda_literals.txt @@ -0,0 +1,3 @@ +->(...) {} + ^~~ unexpected ... when the parent method is not forwarding + diff --git a/test/prism/errors/do_not_allow_more_than_6_hexadecimal_digits_in_u_Unicode_character_notation.txt b/test/prism/errors/do_not_allow_more_than_6_hexadecimal_digits_in_u_Unicode_character_notation.txt new file mode 100644 index 00000000000..50795c93533 --- /dev/null +++ b/test/prism/errors/do_not_allow_more_than_6_hexadecimal_digits_in_u_Unicode_character_notation.txt @@ -0,0 +1,3 @@ +"\u{0000001}" + ^~~~~~~ invalid Unicode escape sequence; maximum length is 6 digits + diff --git a/test/prism/errors/do_not_allow_multiple_codepoints_in_a_single_character_literal.txt b/test/prism/errors/do_not_allow_multiple_codepoints_in_a_single_character_literal.txt new file mode 100644 index 00000000000..1a93dc6c694 --- /dev/null +++ b/test/prism/errors/do_not_allow_multiple_codepoints_in_a_single_character_literal.txt @@ -0,0 +1,3 @@ +?\u{0001 0002} + ^~~ invalid Unicode escape sequence; Multiple codepoints at single character literal are disallowed + diff --git a/test/prism/errors/do_not_allow_trailing_commas_in_lambda_parameters.txt b/test/prism/errors/do_not_allow_trailing_commas_in_lambda_parameters.txt new file mode 100644 index 00000000000..11f23f03457 --- /dev/null +++ b/test/prism/errors/do_not_allow_trailing_commas_in_lambda_parameters.txt @@ -0,0 +1,3 @@ +-> (a, b, ) {} + ^ unexpected `,` in parameters + diff --git a/test/prism/errors/do_not_allow_trailing_commas_in_method_parameters.txt b/test/prism/errors/do_not_allow_trailing_commas_in_method_parameters.txt new file mode 100644 index 00000000000..c0fec0c7048 --- /dev/null +++ b/test/prism/errors/do_not_allow_trailing_commas_in_method_parameters.txt @@ -0,0 +1,3 @@ +def foo(a,b,c,);end + ^ unexpected `,` in parameters + diff --git a/test/prism/errors/dont_allow_return_inside_class_body.txt b/test/prism/errors/dont_allow_return_inside_class_body.txt new file mode 100644 index 00000000000..286eba21033 --- /dev/null +++ b/test/prism/errors/dont_allow_return_inside_class_body.txt @@ -0,0 +1,3 @@ +class A; return; end + ^~~~~~ Invalid return in class/module body + diff --git a/test/prism/errors/dont_allow_return_inside_module_body.txt b/test/prism/errors/dont_allow_return_inside_module_body.txt new file mode 100644 index 00000000000..85dd619a932 --- /dev/null +++ b/test/prism/errors/dont_allow_return_inside_module_body.txt @@ -0,0 +1,3 @@ +module A; return; end + ^~~~~~ Invalid return in class/module body + diff --git a/test/prism/errors/dont_allow_setting_to_back_and_nth_reference.txt b/test/prism/errors/dont_allow_setting_to_back_and_nth_reference.txt new file mode 100644 index 00000000000..71b5b94589c --- /dev/null +++ b/test/prism/errors/dont_allow_setting_to_back_and_nth_reference.txt @@ -0,0 +1,7 @@ +begin +$+ = nil +^~ Can't set variable $+ +$1466 = nil +^~~~~ Can't set variable $1466 +end + diff --git a/test/prism/errors/double_arguments_forwarding.txt b/test/prism/errors/double_arguments_forwarding.txt new file mode 100644 index 00000000000..29c78f8c802 --- /dev/null +++ b/test/prism/errors/double_arguments_forwarding.txt @@ -0,0 +1,4 @@ +def foo(..., ...) + ^~~ unexpected parameter order +end + diff --git a/test/prism/errors/double_scope_numbered_parameters.txt b/test/prism/errors/double_scope_numbered_parameters.txt new file mode 100644 index 00000000000..0bb9df4ede0 --- /dev/null +++ b/test/prism/errors/double_scope_numbered_parameters.txt @@ -0,0 +1,3 @@ +-> { _1 + -> { _2 } } + ^~ numbered parameter is already used in outer block + diff --git a/test/prism/errors/double_splat_followed_by_splat_argument.txt b/test/prism/errors/double_splat_followed_by_splat_argument.txt new file mode 100644 index 00000000000..b2aec1167e8 --- /dev/null +++ b/test/prism/errors/double_splat_followed_by_splat_argument.txt @@ -0,0 +1,3 @@ +a(**kwargs, *args) + ^~~~~ unexpected `*` splat argument after a `**` keyword splat argument + diff --git a/test/prism/errors/duplicate_pattern_capture.txt b/test/prism/errors/duplicate_pattern_capture.txt new file mode 100644 index 00000000000..4b48fd31188 --- /dev/null +++ b/test/prism/errors/duplicate_pattern_capture.txt @@ -0,0 +1,17 @@ +case (); in [a, a]; end + ^ duplicated variable name +case (); in [a, *a]; end + ^ duplicated variable name +case (); in {a: a, b: a}; end + ^ duplicated variable name +case (); in {a: a, **a}; end + ^ duplicated variable name +case (); in [a, {a:}]; end + ^ duplicated variable name +case (); in [a, {a: {a: {a: [a]}}}]; end + ^ duplicated variable name +case (); in a => a; end + ^ duplicated variable name +case (); in [A => a, {a: b => a}]; end + ^ duplicated variable name + diff --git a/test/prism/errors/duplicate_pattern_hash_key.txt b/test/prism/errors/duplicate_pattern_hash_key.txt new file mode 100644 index 00000000000..201b51234fa --- /dev/null +++ b/test/prism/errors/duplicate_pattern_hash_key.txt @@ -0,0 +1,4 @@ +case (); in {a:, a:}; end + ^~ duplicated key name + ^ duplicated variable name + diff --git a/test/prism/errors/duplicate_pattern_hash_key_2.txt b/test/prism/errors/duplicate_pattern_hash_key_2.txt new file mode 100644 index 00000000000..66756c454a5 --- /dev/null +++ b/test/prism/errors/duplicate_pattern_hash_key_2.txt @@ -0,0 +1,3 @@ +case (); in {a:1, a:2}; end + ^~ duplicated key name + diff --git a/test/prism/errors/duplicated_parameter_names.txt b/test/prism/errors/duplicated_parameter_names.txt new file mode 100644 index 00000000000..7b82685ca36 --- /dev/null +++ b/test/prism/errors/duplicated_parameter_names.txt @@ -0,0 +1,3 @@ +def foo(a,b,a);end + ^ duplicated argument name + diff --git a/test/prism/errors/duplicated_parameter_names_2.txt b/test/prism/errors/duplicated_parameter_names_2.txt new file mode 100644 index 00000000000..8396993d569 --- /dev/null +++ b/test/prism/errors/duplicated_parameter_names_2.txt @@ -0,0 +1,3 @@ +def foo(a,b,*a);end + ^ duplicated argument name + diff --git a/test/prism/errors/duplicated_parameter_names_3.txt b/test/prism/errors/duplicated_parameter_names_3.txt new file mode 100644 index 00000000000..437a6623c3e --- /dev/null +++ b/test/prism/errors/duplicated_parameter_names_3.txt @@ -0,0 +1,3 @@ +def foo(a,b,**a);end + ^ duplicated argument name + diff --git a/test/prism/errors/duplicated_parameter_names_4.txt b/test/prism/errors/duplicated_parameter_names_4.txt new file mode 100644 index 00000000000..a420dd8a695 --- /dev/null +++ b/test/prism/errors/duplicated_parameter_names_4.txt @@ -0,0 +1,3 @@ +def foo(a,b,&a);end + ^ duplicated argument name + diff --git a/test/prism/errors/duplicated_parameter_names_5.txt b/test/prism/errors/duplicated_parameter_names_5.txt new file mode 100644 index 00000000000..694d3a668c0 --- /dev/null +++ b/test/prism/errors/duplicated_parameter_names_5.txt @@ -0,0 +1,3 @@ +def foo(a = 1,b,*c);end + ^ unexpected parameter `*` + diff --git a/test/prism/errors/ellipsis_in_no_paren_call.txt b/test/prism/errors/ellipsis_in_no_paren_call.txt new file mode 100644 index 00000000000..87a847d1927 --- /dev/null +++ b/test/prism/errors/ellipsis_in_no_paren_call.txt @@ -0,0 +1,3 @@ +def foo(...); foo 1, ...; end + ^~~ unexpected `...` in an non-parenthesized call + diff --git a/test/prism/errors/for_loops_index_missing.txt b/test/prism/errors/for_loops_index_missing.txt new file mode 100644 index 00000000000..a57c22b0449 --- /dev/null +++ b/test/prism/errors/for_loops_index_missing.txt @@ -0,0 +1,5 @@ +for in 1..10 +^~~ expected an index after `for` +i +end + diff --git a/test/prism/errors/for_loops_only_end.txt b/test/prism/errors/for_loops_only_end.txt new file mode 100644 index 00000000000..94cc5270b56 --- /dev/null +++ b/test/prism/errors/for_loops_only_end.txt @@ -0,0 +1,5 @@ +for end +^~~ expected an index after `for` + ^ expected an `in` after the index in a `for` statement + ^ expected a collection after the `in` in a `for` statement + diff --git a/test/prism/errors/forwarding_arg_after_keyword_rest.txt b/test/prism/errors/forwarding_arg_after_keyword_rest.txt new file mode 100644 index 00000000000..86fe4aad93f --- /dev/null +++ b/test/prism/errors/forwarding_arg_after_keyword_rest.txt @@ -0,0 +1,3 @@ +def f(**,...);end + ^~~ unexpected parameter order + diff --git a/test/prism/errors/forwarding_arg_and_block.txt b/test/prism/errors/forwarding_arg_and_block.txt new file mode 100644 index 00000000000..65c75a5d7cf --- /dev/null +++ b/test/prism/errors/forwarding_arg_and_block.txt @@ -0,0 +1,3 @@ +def foo(...) = foo(...) { } + ^~~ both block arg and actual block given; only one block is allowed + diff --git a/test/prism/errors/incomplete_instance_var_string.txt b/test/prism/errors/incomplete_instance_var_string.txt new file mode 100644 index 00000000000..b28947fc0e3 --- /dev/null +++ b/test/prism/errors/incomplete_instance_var_string.txt @@ -0,0 +1,4 @@ +%@#@@# + ^ '@' without identifiers is not allowed as an instance variable name + ^ unexpected instance variable, expecting end-of-input + diff --git a/test/prism/errors/index_call_with_block_and_write.txt b/test/prism/errors/index_call_with_block_and_write.txt new file mode 100644 index 00000000000..3d92fbfea74 --- /dev/null +++ b/test/prism/errors/index_call_with_block_and_write.txt @@ -0,0 +1,5 @@ +foo[1] {} &&= 1 +^~~~~~~~~ unexpected write target + ^~~ unexpected operator after a call with arguments + ^~~ unexpected operator after a call with a block + diff --git a/test/prism/errors/index_call_with_block_operator_write.txt b/test/prism/errors/index_call_with_block_operator_write.txt new file mode 100644 index 00000000000..96c413cd39f --- /dev/null +++ b/test/prism/errors/index_call_with_block_operator_write.txt @@ -0,0 +1,5 @@ +foo[1] {} += 1 +^~~~~~~~~ unexpected write target + ^~ unexpected operator after a call with arguments + ^~ unexpected operator after a call with a block + diff --git a/test/prism/errors/index_call_with_block_or_write.txt b/test/prism/errors/index_call_with_block_or_write.txt new file mode 100644 index 00000000000..2d250fba063 --- /dev/null +++ b/test/prism/errors/index_call_with_block_or_write.txt @@ -0,0 +1,5 @@ +foo[1] {} ||= 1 +^~~~~~~~~ unexpected write target + ^~~ unexpected operator after a call with arguments + ^~~ unexpected operator after a call with a block + diff --git a/test/prism/errors/interpolated_regular_expression_with_unknown_regexp_options.txt b/test/prism/errors/interpolated_regular_expression_with_unknown_regexp_options.txt new file mode 100644 index 00000000000..8e78753b1cc --- /dev/null +++ b/test/prism/errors/interpolated_regular_expression_with_unknown_regexp_options.txt @@ -0,0 +1,3 @@ +/#{foo}/AZaz + ^~~~~ unknown regexp options - AZaz + diff --git a/test/prism/errors/invalid_global_variable_write.txt b/test/prism/errors/invalid_global_variable_write.txt new file mode 100644 index 00000000000..9d9018bcf14 --- /dev/null +++ b/test/prism/errors/invalid_global_variable_write.txt @@ -0,0 +1,4 @@ +$', +^~ Can't set variable $' +^~ unexpected write target + diff --git a/test/prism/errors/invalid_hex_escape.txt b/test/prism/errors/invalid_hex_escape.txt new file mode 100644 index 00000000000..4fb847f6d24 --- /dev/null +++ b/test/prism/errors/invalid_hex_escape.txt @@ -0,0 +1,3 @@ +"\xx" + ^~ invalid hex escape sequence + diff --git a/test/prism/errors/invalid_multi_target.txt b/test/prism/errors/invalid_multi_target.txt new file mode 100644 index 00000000000..9756278b0cf --- /dev/null +++ b/test/prism/errors/invalid_multi_target.txt @@ -0,0 +1,3 @@ +foo, +^~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_10.txt b/test/prism/errors/invalid_multi_target_10.txt new file mode 100644 index 00000000000..0e87b67d36d --- /dev/null +++ b/test/prism/errors/invalid_multi_target_10.txt @@ -0,0 +1,3 @@ +Foo, +^~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_11.txt b/test/prism/errors/invalid_multi_target_11.txt new file mode 100644 index 00000000000..8185cde79e9 --- /dev/null +++ b/test/prism/errors/invalid_multi_target_11.txt @@ -0,0 +1,3 @@ +::Foo, +^~~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_12.txt b/test/prism/errors/invalid_multi_target_12.txt new file mode 100644 index 00000000000..f511a8a76f1 --- /dev/null +++ b/test/prism/errors/invalid_multi_target_12.txt @@ -0,0 +1,3 @@ +Foo::Foo, +^~~~~~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_13.txt b/test/prism/errors/invalid_multi_target_13.txt new file mode 100644 index 00000000000..7c9a3fb4e1e --- /dev/null +++ b/test/prism/errors/invalid_multi_target_13.txt @@ -0,0 +1,3 @@ +Foo::foo, +^~~~~~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_14.txt b/test/prism/errors/invalid_multi_target_14.txt new file mode 100644 index 00000000000..88dc08de922 --- /dev/null +++ b/test/prism/errors/invalid_multi_target_14.txt @@ -0,0 +1,3 @@ +foo[foo], +^~~~~~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_15.txt b/test/prism/errors/invalid_multi_target_15.txt new file mode 100644 index 00000000000..c140833467c --- /dev/null +++ b/test/prism/errors/invalid_multi_target_15.txt @@ -0,0 +1,3 @@ +(foo, bar) +^~~~~~~~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_16.txt b/test/prism/errors/invalid_multi_target_16.txt new file mode 100644 index 00000000000..20ea56331f5 --- /dev/null +++ b/test/prism/errors/invalid_multi_target_16.txt @@ -0,0 +1,3 @@ +foo((foo, bar)) + ^~~~~~~~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_17.txt b/test/prism/errors/invalid_multi_target_17.txt new file mode 100644 index 00000000000..da1ced0c595 --- /dev/null +++ b/test/prism/errors/invalid_multi_target_17.txt @@ -0,0 +1,3 @@ +foo((*)) + ^~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_18.txt b/test/prism/errors/invalid_multi_target_18.txt new file mode 100644 index 00000000000..2beed193b44 --- /dev/null +++ b/test/prism/errors/invalid_multi_target_18.txt @@ -0,0 +1,3 @@ +foo(((foo, bar), *)) + ^~~~~~~~~~~~~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_19.txt b/test/prism/errors/invalid_multi_target_19.txt new file mode 100644 index 00000000000..b5e3e6999ad --- /dev/null +++ b/test/prism/errors/invalid_multi_target_19.txt @@ -0,0 +1,3 @@ +(foo, bar) + 1 +^~~~~~~~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_2.txt b/test/prism/errors/invalid_multi_target_2.txt new file mode 100644 index 00000000000..68a7bbc305b --- /dev/null +++ b/test/prism/errors/invalid_multi_target_2.txt @@ -0,0 +1,3 @@ +foo = 1; foo, + ^~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_20.txt b/test/prism/errors/invalid_multi_target_20.txt new file mode 100644 index 00000000000..e800bcf2044 --- /dev/null +++ b/test/prism/errors/invalid_multi_target_20.txt @@ -0,0 +1,3 @@ +(foo, bar) in baz +^~~~~~~~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_3.txt b/test/prism/errors/invalid_multi_target_3.txt new file mode 100644 index 00000000000..51e62076038 --- /dev/null +++ b/test/prism/errors/invalid_multi_target_3.txt @@ -0,0 +1,3 @@ +foo.bar, +^~~~~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_4.txt b/test/prism/errors/invalid_multi_target_4.txt new file mode 100644 index 00000000000..f4c3599ffea --- /dev/null +++ b/test/prism/errors/invalid_multi_target_4.txt @@ -0,0 +1,3 @@ +*foo, +^~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_5.txt b/test/prism/errors/invalid_multi_target_5.txt new file mode 100644 index 00000000000..5d143a3f5dc --- /dev/null +++ b/test/prism/errors/invalid_multi_target_5.txt @@ -0,0 +1,3 @@ +@foo, +^~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_6.txt b/test/prism/errors/invalid_multi_target_6.txt new file mode 100644 index 00000000000..6d15893f57d --- /dev/null +++ b/test/prism/errors/invalid_multi_target_6.txt @@ -0,0 +1,3 @@ +@@foo, +^~~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_7.txt b/test/prism/errors/invalid_multi_target_7.txt new file mode 100644 index 00000000000..451f9f0a00e --- /dev/null +++ b/test/prism/errors/invalid_multi_target_7.txt @@ -0,0 +1,3 @@ +$foo, +^~~~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_8.txt b/test/prism/errors/invalid_multi_target_8.txt new file mode 100644 index 00000000000..fdbe272f9a0 --- /dev/null +++ b/test/prism/errors/invalid_multi_target_8.txt @@ -0,0 +1,4 @@ +$1, +^~ Can't set variable $1 +^~ unexpected write target + diff --git a/test/prism/errors/invalid_multi_target_9.txt b/test/prism/errors/invalid_multi_target_9.txt new file mode 100644 index 00000000000..038f355c5da --- /dev/null +++ b/test/prism/errors/invalid_multi_target_9.txt @@ -0,0 +1,4 @@ +$+, +^~ Can't set variable $+ +^~ unexpected write target + diff --git a/test/prism/errors/invalid_number_underscores.txt b/test/prism/errors/invalid_number_underscores.txt new file mode 100644 index 00000000000..8fc79ed7a27 --- /dev/null +++ b/test/prism/errors/invalid_number_underscores.txt @@ -0,0 +1,3 @@ +1__1 + ^ invalid underscore placement in number + diff --git a/test/prism/errors/invalid_number_underscores_10.txt b/test/prism/errors/invalid_number_underscores_10.txt new file mode 100644 index 00000000000..53b0cc07196 --- /dev/null +++ b/test/prism/errors/invalid_number_underscores_10.txt @@ -0,0 +1,3 @@ +01_1_ + ^ trailing '_' in number + diff --git a/test/prism/errors/invalid_number_underscores_11.txt b/test/prism/errors/invalid_number_underscores_11.txt new file mode 100644 index 00000000000..469110f86fe --- /dev/null +++ b/test/prism/errors/invalid_number_underscores_11.txt @@ -0,0 +1,3 @@ +0d1_1_ + ^ trailing '_' in number + diff --git a/test/prism/errors/invalid_number_underscores_12.txt b/test/prism/errors/invalid_number_underscores_12.txt new file mode 100644 index 00000000000..a9b63a4b6c2 --- /dev/null +++ b/test/prism/errors/invalid_number_underscores_12.txt @@ -0,0 +1,3 @@ +0x1_1_ + ^ trailing '_' in number + diff --git a/test/prism/errors/invalid_number_underscores_2.txt b/test/prism/errors/invalid_number_underscores_2.txt new file mode 100644 index 00000000000..2762e087907 --- /dev/null +++ b/test/prism/errors/invalid_number_underscores_2.txt @@ -0,0 +1,3 @@ +0b1__1 + ^ invalid underscore placement in number + diff --git a/test/prism/errors/invalid_number_underscores_3.txt b/test/prism/errors/invalid_number_underscores_3.txt new file mode 100644 index 00000000000..23f1e0b10be --- /dev/null +++ b/test/prism/errors/invalid_number_underscores_3.txt @@ -0,0 +1,3 @@ +0o1__1 + ^ invalid underscore placement in number + diff --git a/test/prism/errors/invalid_number_underscores_4.txt b/test/prism/errors/invalid_number_underscores_4.txt new file mode 100644 index 00000000000..ced149752fa --- /dev/null +++ b/test/prism/errors/invalid_number_underscores_4.txt @@ -0,0 +1,3 @@ +01__1 + ^ invalid underscore placement in number + diff --git a/test/prism/errors/invalid_number_underscores_5.txt b/test/prism/errors/invalid_number_underscores_5.txt new file mode 100644 index 00000000000..5e3f2bf6824 --- /dev/null +++ b/test/prism/errors/invalid_number_underscores_5.txt @@ -0,0 +1,3 @@ +0d1__1 + ^ invalid underscore placement in number + diff --git a/test/prism/errors/invalid_number_underscores_6.txt b/test/prism/errors/invalid_number_underscores_6.txt new file mode 100644 index 00000000000..225b654248f --- /dev/null +++ b/test/prism/errors/invalid_number_underscores_6.txt @@ -0,0 +1,3 @@ +0x1__1 + ^ invalid underscore placement in number + diff --git a/test/prism/errors/invalid_number_underscores_7.txt b/test/prism/errors/invalid_number_underscores_7.txt new file mode 100644 index 00000000000..d953b4cbc4e --- /dev/null +++ b/test/prism/errors/invalid_number_underscores_7.txt @@ -0,0 +1,3 @@ +1_1_ + ^ trailing '_' in number + diff --git a/test/prism/errors/invalid_number_underscores_8.txt b/test/prism/errors/invalid_number_underscores_8.txt new file mode 100644 index 00000000000..cbdcd95d8f4 --- /dev/null +++ b/test/prism/errors/invalid_number_underscores_8.txt @@ -0,0 +1,3 @@ +0b1_1_ + ^ trailing '_' in number + diff --git a/test/prism/errors/invalid_number_underscores_9.txt b/test/prism/errors/invalid_number_underscores_9.txt new file mode 100644 index 00000000000..173282ffb2e --- /dev/null +++ b/test/prism/errors/invalid_number_underscores_9.txt @@ -0,0 +1,3 @@ +0o1_1_ + ^ trailing '_' in number + diff --git a/test/prism/errors/invalid_operator_write_dot.txt b/test/prism/errors/invalid_operator_write_dot.txt new file mode 100644 index 00000000000..666817e60f0 --- /dev/null +++ b/test/prism/errors/invalid_operator_write_dot.txt @@ -0,0 +1,3 @@ +foo.+= 1 + ^ unexpected write target + diff --git a/test/prism/errors/invalid_operator_write_fcall.txt b/test/prism/errors/invalid_operator_write_fcall.txt new file mode 100644 index 00000000000..2748bf32918 --- /dev/null +++ b/test/prism/errors/invalid_operator_write_fcall.txt @@ -0,0 +1,3 @@ +foo! += 1 +^~~~ unexpected write target + diff --git a/test/prism/errors/it_with_ordinary_parameter.txt b/test/prism/errors/it_with_ordinary_parameter.txt new file mode 100644 index 00000000000..0fc34e9cc88 --- /dev/null +++ b/test/prism/errors/it_with_ordinary_parameter.txt @@ -0,0 +1,3 @@ +proc { || it } + ^~ `it` is not allowed when an ordinary parameter is defined + diff --git a/test/prism/errors/keywords_parameters_before_required_parameters.txt b/test/prism/errors/keywords_parameters_before_required_parameters.txt new file mode 100644 index 00000000000..42d036e9501 --- /dev/null +++ b/test/prism/errors/keywords_parameters_before_required_parameters.txt @@ -0,0 +1,4 @@ +def foo(b:, a) + ^ unexpected parameter order +end + diff --git a/test/prism/errors/loop_conditional_is_closed.txt b/test/prism/errors/loop_conditional_is_closed.txt new file mode 100644 index 00000000000..2be13533199 --- /dev/null +++ b/test/prism/errors/loop_conditional_is_closed.txt @@ -0,0 +1,4 @@ +while 0 0; foo; end; until 0 0; foo; end + ^ expected a predicate expression for the `while` statement + ^ expected a predicate expression for the `until` statement + diff --git a/test/prism/errors/match_plus.txt b/test/prism/errors/match_plus.txt new file mode 100644 index 00000000000..5e349a96ad6 --- /dev/null +++ b/test/prism/errors/match_plus.txt @@ -0,0 +1,7 @@ +a in b + c + ^ unexpected '+', expecting end-of-input + ^ unexpected '+', ignoring it +a => b + c + ^ unexpected '+', expecting end-of-input + ^ unexpected '+', ignoring it + diff --git a/test/prism/errors/method_parameters_after_arguments_forwarding.txt b/test/prism/errors/method_parameters_after_arguments_forwarding.txt new file mode 100644 index 00000000000..ec2aefda1de --- /dev/null +++ b/test/prism/errors/method_parameters_after_arguments_forwarding.txt @@ -0,0 +1,4 @@ +def foo(..., a) + ^ unexpected parameter order +end + diff --git a/test/prism/errors/method_parameters_after_block.txt b/test/prism/errors/method_parameters_after_block.txt new file mode 100644 index 00000000000..6e2091d5d1e --- /dev/null +++ b/test/prism/errors/method_parameters_after_block.txt @@ -0,0 +1,4 @@ +def foo(&block, a) + ^ unexpected parameter order +end + diff --git a/test/prism/errors/method_with_arguments_after_anonymous_block.txt b/test/prism/errors/method_with_arguments_after_anonymous_block.txt new file mode 100644 index 00000000000..0d986b3c010 --- /dev/null +++ b/test/prism/errors/method_with_arguments_after_anonymous_block.txt @@ -0,0 +1,4 @@ +def foo(&, a) + ^ unexpected parameter order +end + diff --git a/test/prism/errors/missing_terminator_in_parentheses.txt b/test/prism/errors/missing_terminator_in_parentheses.txt new file mode 100644 index 00000000000..af4b698f0c9 --- /dev/null +++ b/test/prism/errors/missing_terminator_in_parentheses.txt @@ -0,0 +1,3 @@ +(0 0) + ^ unexpected integer, expecting end-of-input + diff --git a/test/prism/errors/module_definition_in_method_body.txt b/test/prism/errors/module_definition_in_method_body.txt new file mode 100644 index 00000000000..59900c96dde --- /dev/null +++ b/test/prism/errors/module_definition_in_method_body.txt @@ -0,0 +1,3 @@ +def foo;module A;end;end + ^~~~~~ unexpected module definition in method body + diff --git a/test/prism/errors/module_definition_in_method_body_within_block.txt b/test/prism/errors/module_definition_in_method_body_within_block.txt new file mode 100644 index 00000000000..204be356079 --- /dev/null +++ b/test/prism/errors/module_definition_in_method_body_within_block.txt @@ -0,0 +1,7 @@ +def foo + bar do + module Foo;end + ^~~~~~ unexpected module definition in method body + end +end + diff --git a/test/prism/errors/module_definition_in_method_defs.txt b/test/prism/errors/module_definition_in_method_defs.txt new file mode 100644 index 00000000000..c5a6a8a2e8a --- /dev/null +++ b/test/prism/errors/module_definition_in_method_defs.txt @@ -0,0 +1,7 @@ +def foo(bar = module A;end);end + ^~~~~~ unexpected module definition in method body +def foo;rescue;module A;end;end + ^~~~~~ unexpected module definition in method body +def foo;ensure;module A;end;end + ^~~~~~ unexpected module definition in method body + diff --git a/test/prism/errors/module_name_recoverable.txt b/test/prism/errors/module_name_recoverable.txt new file mode 100644 index 00000000000..58a28a60c56 --- /dev/null +++ b/test/prism/errors/module_name_recoverable.txt @@ -0,0 +1,4 @@ +module Parent module end + ^~~~~~ unexpected constant path after `module`; class/module name must be CONSTANT + ^~~ unexpected 'end', assuming it is closing the parent module definition + diff --git a/test/prism/errors/multiple_error_in_parameters_order.txt b/test/prism/errors/multiple_error_in_parameters_order.txt new file mode 100644 index 00000000000..5dae0a105ac --- /dev/null +++ b/test/prism/errors/multiple_error_in_parameters_order.txt @@ -0,0 +1,5 @@ +def foo(**args, a, b:) + ^ unexpected parameter order + ^~ unexpected parameter order +end + diff --git a/test/prism/errors/next_1.txt b/test/prism/errors/next_1.txt new file mode 100644 index 00000000000..b56b7f6ae63 --- /dev/null +++ b/test/prism/errors/next_1.txt @@ -0,0 +1,4 @@ +next 1,; + ^ expected an argument +^~~~~~~ Invalid next + diff --git a/test/prism/errors/next_1_2_3.txt b/test/prism/errors/next_1_2_3.txt new file mode 100644 index 00000000000..7abe577ab34 --- /dev/null +++ b/test/prism/errors/next_1_2_3.txt @@ -0,0 +1,8 @@ +next(1, 2, 3) + ^ unexpected ',', expecting end-of-input + ^ unexpected ',', ignoring it + ^ expected a matching `)` + ^ unexpected ')', expecting end-of-input + ^ unexpected ')', ignoring it +^~~~~~~~~~~~ Invalid next + diff --git a/test/prism/errors/non_assoc_equality.txt b/test/prism/errors/non_assoc_equality.txt new file mode 100644 index 00000000000..6ce8da88d6a --- /dev/null +++ b/test/prism/errors/non_assoc_equality.txt @@ -0,0 +1,19 @@ +1 == 2 == 3 + ^~ unexpected '==', expecting end-of-input + ^~ unexpected '==', ignoring it +1 != 2 != 3 + ^~ unexpected '!=', expecting end-of-input + ^~ unexpected '!=', ignoring it +1 === 2 === 3 + ^~~ unexpected '===', expecting end-of-input + ^~~ unexpected '===', ignoring it +1 =~ 2 =~ 3 + ^~ unexpected '=~', expecting end-of-input + ^~ unexpected '=~', ignoring it +1 !~ 2 !~ 3 + ^~ unexpected '!~', expecting end-of-input + ^~ unexpected '!~', ignoring it +1 <=> 2 <=> 3 + ^~~ unexpected '<=>', expecting end-of-input + ^~~ unexpected '<=>', ignoring it + diff --git a/test/prism/errors/non_assoc_range.txt b/test/prism/errors/non_assoc_range.txt new file mode 100644 index 00000000000..072cf6d3c6e --- /dev/null +++ b/test/prism/errors/non_assoc_range.txt @@ -0,0 +1,4 @@ +1....2 + ^ unexpected '.', expecting end-of-input + ^ unexpected '.', ignoring it + diff --git a/test/prism/errors/numbered_parameters_in_block_arguments.txt b/test/prism/errors/numbered_parameters_in_block_arguments.txt new file mode 100644 index 00000000000..d01999c53ea --- /dev/null +++ b/test/prism/errors/numbered_parameters_in_block_arguments.txt @@ -0,0 +1,3 @@ +foo { |_1| } + ^~ _1 is reserved for numbered parameters + diff --git a/test/prism/errors/optional_block_parameters_with_unary_operator.txt b/test/prism/errors/optional_block_parameters_with_unary_operator.txt new file mode 100644 index 00000000000..fd45f126487 --- /dev/null +++ b/test/prism/errors/optional_block_parameters_with_unary_operator.txt @@ -0,0 +1,3 @@ +foo { |a = +b| } + ^ unexpected '+'; unary calls are not allowed in this context + diff --git a/test/prism/errors/optional_block_parameters_with_unary_operator_2.txt b/test/prism/errors/optional_block_parameters_with_unary_operator_2.txt new file mode 100644 index 00000000000..ba98f36f84e --- /dev/null +++ b/test/prism/errors/optional_block_parameters_with_unary_operator_2.txt @@ -0,0 +1,3 @@ +foo { |a = -b| } + ^ unexpected '-'; unary calls are not allowed in this context + diff --git a/test/prism/errors/optional_block_parameters_with_unary_operator_3.txt b/test/prism/errors/optional_block_parameters_with_unary_operator_3.txt new file mode 100644 index 00000000000..97700598918 --- /dev/null +++ b/test/prism/errors/optional_block_parameters_with_unary_operator_3.txt @@ -0,0 +1,3 @@ +foo { |a = !b| } + ^ unexpected '!'; unary calls are not allowed in this context + diff --git a/test/prism/errors/optional_block_parameters_with_unary_operator_4.txt b/test/prism/errors/optional_block_parameters_with_unary_operator_4.txt new file mode 100644 index 00000000000..9bec68d7b35 --- /dev/null +++ b/test/prism/errors/optional_block_parameters_with_unary_operator_4.txt @@ -0,0 +1,3 @@ +foo { |a = ~b| } + ^ unexpected '~'; unary calls are not allowed in this context + diff --git a/test/prism/errors/parameter_name_ending_with_bang_or_question_mark.txt b/test/prism/errors/parameter_name_ending_with_bang_or_question_mark.txt new file mode 100644 index 00000000000..db4fd6928ab --- /dev/null +++ b/test/prism/errors/parameter_name_ending_with_bang_or_question_mark.txt @@ -0,0 +1,4 @@ +def foo(x!,y?); end + ^~ unexpected name for a parameter + ^~ unexpected name for a parameter + diff --git a/test/prism/errors/pre_execution_context.txt b/test/prism/errors/pre_execution_context.txt new file mode 100644 index 00000000000..18b11bae97a --- /dev/null +++ b/test/prism/errors/pre_execution_context.txt @@ -0,0 +1,4 @@ +BEGIN { 1 + } + ^ unexpected '}'; expected an expression after the operator + ^ unexpected '}', assuming it is closing the parent 'BEGIN' block + diff --git a/test/prism/errors/pre_execution_missing_brace.txt b/test/prism/errors/pre_execution_missing_brace.txt new file mode 100644 index 00000000000..e51cd0732e2 --- /dev/null +++ b/test/prism/errors/pre_execution_missing_brace.txt @@ -0,0 +1,3 @@ +BEGIN 1 } + ^ expected a `{` after `BEGIN` + diff --git a/test/prism/errors/range_and_bin_op.txt b/test/prism/errors/range_and_bin_op.txt new file mode 100644 index 00000000000..4a7a396d0d6 --- /dev/null +++ b/test/prism/errors/range_and_bin_op.txt @@ -0,0 +1,4 @@ +1..2..3 + ^~ unexpected .., expecting end-of-input + ^~ unexpected .., ignoring it + diff --git a/test/prism/errors/range_and_bin_op_2.txt b/test/prism/errors/range_and_bin_op_2.txt new file mode 100644 index 00000000000..f2a31dcf82c --- /dev/null +++ b/test/prism/errors/range_and_bin_op_2.txt @@ -0,0 +1,4 @@ +1..2.. + ^~ unexpected .., expecting end-of-input + ^~ unexpected .., ignoring it + diff --git a/test/prism/errors/range_and_bin_op_3.txt b/test/prism/errors/range_and_bin_op_3.txt new file mode 100644 index 00000000000..34390d0776a --- /dev/null +++ b/test/prism/errors/range_and_bin_op_3.txt @@ -0,0 +1,3 @@ +1.. || 2 + ^ unexpected '|'; expected an expression after the operator + diff --git a/test/prism/errors/range_and_bin_op_4.txt b/test/prism/errors/range_and_bin_op_4.txt new file mode 100644 index 00000000000..56226480cfc --- /dev/null +++ b/test/prism/errors/range_and_bin_op_4.txt @@ -0,0 +1,4 @@ +1.. & 2 + ^ unexpected '&', expecting end-of-input + ^ unexpected '&', ignoring it + diff --git a/test/prism/errors/range_and_bin_op_5.txt b/test/prism/errors/range_and_bin_op_5.txt new file mode 100644 index 00000000000..bc8b4679147 --- /dev/null +++ b/test/prism/errors/range_and_bin_op_5.txt @@ -0,0 +1,5 @@ +1.. * 2 + ^ unexpected *, expecting end-of-input + ^ unexpected write target + ^~~ unexpected write target + diff --git a/test/prism/errors/range_and_bin_op_6.txt b/test/prism/errors/range_and_bin_op_6.txt new file mode 100644 index 00000000000..5cdd7a4f44d --- /dev/null +++ b/test/prism/errors/range_and_bin_op_6.txt @@ -0,0 +1,3 @@ +1.. / 2 + ^ unterminated regexp meets end of file; expected a closing delimiter + diff --git a/test/prism/errors/range_and_bin_op_7.txt b/test/prism/errors/range_and_bin_op_7.txt new file mode 100644 index 00000000000..3f91b5e97ff --- /dev/null +++ b/test/prism/errors/range_and_bin_op_7.txt @@ -0,0 +1,3 @@ +1.. % 2 + ^ unterminated string meets end of file + diff --git a/test/prism/errors/range_and_bin_op_8.txt b/test/prism/errors/range_and_bin_op_8.txt new file mode 100644 index 00000000000..afbf3719d55 --- /dev/null +++ b/test/prism/errors/range_and_bin_op_8.txt @@ -0,0 +1,4 @@ +1.. ** 2 + ^~ unexpected **, expecting end-of-input + ^~ unexpected **, ignoring it + diff --git a/test/prism/errors/rational_number_with_exponential_portion.txt b/test/prism/errors/rational_number_with_exponential_portion.txt new file mode 100644 index 00000000000..01a03d538f8 --- /dev/null +++ b/test/prism/errors/rational_number_with_exponential_portion.txt @@ -0,0 +1,4 @@ +1e1r; 1e1ri + ^ unexpected local variable or method, expecting end-of-input + ^~ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/regular_expression_with_unknown_regexp_options.txt b/test/prism/errors/regular_expression_with_unknown_regexp_options.txt new file mode 100644 index 00000000000..c37291ca40f --- /dev/null +++ b/test/prism/errors/regular_expression_with_unknown_regexp_options.txt @@ -0,0 +1,3 @@ +/foo/AZaz + ^~~~~ unknown regexp options - AZaz + diff --git a/test/prism/errors/repeated_parameter_name_in_destructured_params.txt b/test/prism/errors/repeated_parameter_name_in_destructured_params.txt new file mode 100644 index 00000000000..766c235325b --- /dev/null +++ b/test/prism/errors/repeated_parameter_name_in_destructured_params.txt @@ -0,0 +1,3 @@ +def f(a, (b, (a))); end + ^ duplicated argument name + diff --git a/test/prism/errors/rest_keywords_parameters_before_required_parameters.txt b/test/prism/errors/rest_keywords_parameters_before_required_parameters.txt new file mode 100644 index 00000000000..406f326712e --- /dev/null +++ b/test/prism/errors/rest_keywords_parameters_before_required_parameters.txt @@ -0,0 +1,4 @@ +def foo(**rest, b:) + ^~ unexpected parameter order +end + diff --git a/test/prism/errors/return_1.txt b/test/prism/errors/return_1.txt new file mode 100644 index 00000000000..b4ce8f1f2a6 --- /dev/null +++ b/test/prism/errors/return_1.txt @@ -0,0 +1,3 @@ +return 1,; + ^ expected an argument + diff --git a/test/prism/errors/return_1_2_3.txt b/test/prism/errors/return_1_2_3.txt new file mode 100644 index 00000000000..8f6dbaf1941 --- /dev/null +++ b/test/prism/errors/return_1_2_3.txt @@ -0,0 +1,7 @@ +return(1, 2, 3) + ^ unexpected ',', expecting end-of-input + ^ unexpected ',', ignoring it + ^ expected a matching `)` + ^ unexpected ')', expecting end-of-input + ^ unexpected ')', ignoring it + diff --git a/test/prism/errors/returning_to_optional_parameters_multiple_times.txt b/test/prism/errors/returning_to_optional_parameters_multiple_times.txt new file mode 100644 index 00000000000..83ca7318509 --- /dev/null +++ b/test/prism/errors/returning_to_optional_parameters_multiple_times.txt @@ -0,0 +1,4 @@ +def foo(a, b = 1, c, d = 2, e) + ^ unexpected parameter order +end + diff --git a/test/prism/errors/semicolon_after_inheritance_operator.txt b/test/prism/errors/semicolon_after_inheritance_operator.txt new file mode 100644 index 00000000000..6b67e6048ac --- /dev/null +++ b/test/prism/errors/semicolon_after_inheritance_operator.txt @@ -0,0 +1,3 @@ +class Foo < Bar end + ^ unexpected `end`, expecting ';' or '\n' + diff --git a/test/prism/errors/setter_method_cannot_be_defined_in_an_endless_method_definition.txt b/test/prism/errors/setter_method_cannot_be_defined_in_an_endless_method_definition.txt new file mode 100644 index 00000000000..c4440ccc7ec --- /dev/null +++ b/test/prism/errors/setter_method_cannot_be_defined_in_an_endless_method_definition.txt @@ -0,0 +1,3 @@ +def a=() = 42 + ^~ invalid method name; a setter method cannot be defined in an endless method definition + diff --git a/test/prism/errors/shadow_args_in_block.txt b/test/prism/errors/shadow_args_in_block.txt new file mode 100644 index 00000000000..1e7d5f9cd45 --- /dev/null +++ b/test/prism/errors/shadow_args_in_block.txt @@ -0,0 +1,3 @@ +tap{|a;a|} + ^ duplicated argument name + diff --git a/test/prism/errors/shadow_args_in_lambda.txt b/test/prism/errors/shadow_args_in_lambda.txt new file mode 100644 index 00000000000..2399a0ebd54 --- /dev/null +++ b/test/prism/errors/shadow_args_in_lambda.txt @@ -0,0 +1,5 @@ +->a;b{} + ^ expected a `do` keyword or a `{` to open the lambda block + ^ unexpected end-of-input, assuming it is closing the parent top level context + ^ expected a lambda block beginning with `do` to end with `end` + diff --git a/test/prism/errors/singleton_method_for_literals.txt b/test/prism/errors/singleton_method_for_literals.txt new file mode 100644 index 00000000000..6247b4f0255 --- /dev/null +++ b/test/prism/errors/singleton_method_for_literals.txt @@ -0,0 +1,39 @@ +def (1).g; end + ^ cannot define singleton method for literals +def ((a; 1)).foo; end + ^ cannot define singleton method for literals +def ((return; 1)).bar; end + ^ cannot define singleton method for literals +def (((1))).foo; end + ^ cannot define singleton method for literals +def (__FILE__).foo; end + ^~~~~~~~ cannot define singleton method for literals +def (__ENCODING__).foo; end + ^~~~~~~~~~~~ cannot define singleton method for literals +def (__LINE__).foo; end + ^~~~~~~~ cannot define singleton method for literals +def ("foo").foo; end + ^~~~~ cannot define singleton method for literals +def (3.14).foo; end + ^~~~ cannot define singleton method for literals +def (3.14i).foo; end + ^~~~~ cannot define singleton method for literals +def (:foo).foo; end + ^~~~ cannot define singleton method for literals +def (:'foo').foo; end + ^~~~~~ cannot define singleton method for literals +def (:'f{o}').foo; end + ^~~~~~~ cannot define singleton method for literals +def ('foo').foo; end + ^~~~~ cannot define singleton method for literals +def ("foo").foo; end + ^~~~~ cannot define singleton method for literals +def ("#{fo}o").foo; end + ^~~~~~~~ cannot define singleton method for literals +def (/foo/).foo; end + ^~~~~ cannot define singleton method for literals +def (/f#{oo}/).foo; end + ^~~~~~~~ cannot define singleton method for literals +def ([1]).foo; end + ^~~ cannot define singleton method for literals + diff --git a/test/prism/errors/splat_argument_after_keyword_argument.txt b/test/prism/errors/splat_argument_after_keyword_argument.txt new file mode 100644 index 00000000000..fd2dbd0003e --- /dev/null +++ b/test/prism/errors/splat_argument_after_keyword_argument.txt @@ -0,0 +1,3 @@ +a(foo: bar, *args) + ^~~~~ unexpected `*` splat argument after a `**` keyword splat argument + diff --git a/test/prism/errors/statement_at_non_statement.txt b/test/prism/errors/statement_at_non_statement.txt new file mode 100644 index 00000000000..40fe7d862e1 --- /dev/null +++ b/test/prism/errors/statement_at_non_statement.txt @@ -0,0 +1,9 @@ +foo(alias x y) + ^~~~~ unexpected an `alias` at a non-statement position +foo(BEGIN { bar }) + ^~~~~ unexpected a `BEGIN` at a non-statement position +foo(END { bar }) + ^~~ unexpected an `END` at a non-statement position +foo(undef x) + ^~~~~ unexpected an `undef` at a non-statement position + diff --git a/test/prism/errors/statement_operators.txt b/test/prism/errors/statement_operators.txt new file mode 100644 index 00000000000..04b7c574773 --- /dev/null +++ b/test/prism/errors/statement_operators.txt @@ -0,0 +1,25 @@ +alias x y + 1 + ^ unexpected '+', expecting end-of-input + ^ unexpected '+', ignoring it +alias x y.z + ^ unexpected '.', expecting end-of-input + ^ unexpected '.', ignoring it +BEGIN { bar } + 1 + ^ unexpected '+', expecting end-of-input + ^ unexpected '+', ignoring it +BEGIN { bar }.z + ^ unexpected '.', expecting end-of-input + ^ unexpected '.', ignoring it +END { bar } + 1 + ^ unexpected '+', expecting end-of-input + ^ unexpected '+', ignoring it +END { bar }.z + ^ unexpected '.', expecting end-of-input + ^ unexpected '.', ignoring it +undef x + 1 + ^ unexpected '+', expecting end-of-input + ^ unexpected '+', ignoring it +undef x.z + ^ unexpected '.', expecting end-of-input + ^ unexpected '.', ignoring it + diff --git a/test/prism/errors/switching_to_named_arguments_twice.txt b/test/prism/errors/switching_to_named_arguments_twice.txt new file mode 100644 index 00000000000..5dae0a105ac --- /dev/null +++ b/test/prism/errors/switching_to_named_arguments_twice.txt @@ -0,0 +1,5 @@ +def foo(**args, a, b:) + ^ unexpected parameter order + ^~ unexpected parameter order +end + diff --git a/test/prism/errors/switching_to_optional_arguments_twice.txt b/test/prism/errors/switching_to_optional_arguments_twice.txt new file mode 100644 index 00000000000..5dae0a105ac --- /dev/null +++ b/test/prism/errors/switching_to_optional_arguments_twice.txt @@ -0,0 +1,5 @@ +def foo(**args, a, b:) + ^ unexpected parameter order + ^~ unexpected parameter order +end + diff --git a/test/prism/errors/symbol_in_hash.txt b/test/prism/errors/symbol_in_hash.txt new file mode 100644 index 00000000000..148040aa610 --- /dev/null +++ b/test/prism/errors/symbol_in_hash.txt @@ -0,0 +1,3 @@ +{x:'y':} + ^~ unexpected label terminator, expected a string literal terminator + diff --git a/test/prism/errors/symbol_in_keyword_parameter.txt b/test/prism/errors/symbol_in_keyword_parameter.txt new file mode 100644 index 00000000000..22d03cccb21 --- /dev/null +++ b/test/prism/errors/symbol_in_keyword_parameter.txt @@ -0,0 +1,3 @@ +def foo(x:'y':); end + ^~ unexpected label terminator, expected a string literal terminator + diff --git a/test/prism/errors/targeting_numbered_parameter.txt b/test/prism/errors/targeting_numbered_parameter.txt new file mode 100644 index 00000000000..39c40ad7b96 --- /dev/null +++ b/test/prism/errors/targeting_numbered_parameter.txt @@ -0,0 +1,3 @@ +-> { _1, = 0 } + ^~ _1 is reserved for numbered parameters + diff --git a/test/prism/errors/top_level_constant_starting_with_downcased_identifier.txt b/test/prism/errors/top_level_constant_starting_with_downcased_identifier.txt new file mode 100644 index 00000000000..b7b54dd74e0 --- /dev/null +++ b/test/prism/errors/top_level_constant_starting_with_downcased_identifier.txt @@ -0,0 +1,4 @@ +::foo::A + ^ expected a constant after the `::` operator + ^~~ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/top_level_constant_with_downcased_identifier.txt b/test/prism/errors/top_level_constant_with_downcased_identifier.txt new file mode 100644 index 00000000000..032bcfaebb7 --- /dev/null +++ b/test/prism/errors/top_level_constant_with_downcased_identifier.txt @@ -0,0 +1,4 @@ +::foo + ^ expected a constant after the `::` operator + ^~~ unexpected local variable or method, expecting end-of-input + diff --git a/test/prism/errors/trailing_comma_in_calls.txt b/test/prism/errors/trailing_comma_in_calls.txt new file mode 100644 index 00000000000..44e8a1f0b3b --- /dev/null +++ b/test/prism/errors/trailing_comma_in_calls.txt @@ -0,0 +1,3 @@ +foo 1, + ^ expected an argument + diff --git a/test/prism/errors/unexpected_block.txt b/test/prism/errors/unexpected_block.txt new file mode 100644 index 00000000000..2c0741cd306 --- /dev/null +++ b/test/prism/errors/unexpected_block.txt @@ -0,0 +1,3 @@ +def foo = yield(&:+) + ^~~ block argument should not be given + diff --git a/test/prism/errors/unterminated_W_list.txt b/test/prism/errors/unterminated_W_list.txt new file mode 100644 index 00000000000..89cab68abb8 --- /dev/null +++ b/test/prism/errors/unterminated_W_list.txt @@ -0,0 +1,3 @@ +%w[ +^~~ unterminated list; expected a closing delimiter for the `%w` + diff --git a/test/prism/errors/unterminated_argument_expression.txt b/test/prism/errors/unterminated_argument_expression.txt new file mode 100644 index 00000000000..c250a94becb --- /dev/null +++ b/test/prism/errors/unterminated_argument_expression.txt @@ -0,0 +1,5 @@ +a % + ^ unterminated quoted string meets end of file + ^ unexpected end-of-input; expected an expression after the operator + ^ unexpected end-of-input, assuming it is closing the parent top level context + diff --git a/test/prism/errors/unterminated_embdoc.txt b/test/prism/errors/unterminated_embdoc.txt new file mode 100644 index 00000000000..1dd9ea3ac49 --- /dev/null +++ b/test/prism/errors/unterminated_embdoc.txt @@ -0,0 +1,3 @@ +=begin +^~~~~~ embedded document meets end of file + diff --git a/test/prism/errors/unterminated_embdoc_2.txt b/test/prism/errors/unterminated_embdoc_2.txt new file mode 100644 index 00000000000..1dd9ea3ac49 --- /dev/null +++ b/test/prism/errors/unterminated_embdoc_2.txt @@ -0,0 +1,3 @@ +=begin +^~~~~~ embedded document meets end of file + diff --git a/test/prism/errors/unterminated_empty_string.txt b/test/prism/errors/unterminated_empty_string.txt new file mode 100644 index 00000000000..597102f7ee7 --- /dev/null +++ b/test/prism/errors/unterminated_empty_string.txt @@ -0,0 +1,3 @@ +" + ^ unterminated string meets end of file + diff --git a/test/prism/errors/unterminated_global_variable.txt b/test/prism/errors/unterminated_global_variable.txt new file mode 100644 index 00000000000..ce3e960b2e2 --- /dev/null +++ b/test/prism/errors/unterminated_global_variable.txt @@ -0,0 +1,3 @@ +$ +^ '$' without identifiers is not allowed as a global variable name + diff --git a/test/prism/errors/unterminated_global_variable_2.txt b/test/prism/errors/unterminated_global_variable_2.txt new file mode 100644 index 00000000000..302293b538d --- /dev/null +++ b/test/prism/errors/unterminated_global_variable_2.txt @@ -0,0 +1,3 @@ +$ +^ '$' without identifiers is not allowed as a global variable name + diff --git a/test/prism/errors/unterminated_i_list.txt b/test/prism/errors/unterminated_i_list.txt new file mode 100644 index 00000000000..c48be9971d5 --- /dev/null +++ b/test/prism/errors/unterminated_i_list.txt @@ -0,0 +1,3 @@ +%i[ +^~~ unterminated list; expected a closing delimiter for the `%i` + diff --git a/test/prism/errors/unterminated_interpolated_string.txt b/test/prism/errors/unterminated_interpolated_string.txt new file mode 100644 index 00000000000..e74a4c9e204 --- /dev/null +++ b/test/prism/errors/unterminated_interpolated_string.txt @@ -0,0 +1,3 @@ +"hello + ^ unterminated string meets end of file + diff --git a/test/prism/errors/unterminated_interpolated_symbol.txt b/test/prism/errors/unterminated_interpolated_symbol.txt new file mode 100644 index 00000000000..faa75972809 --- /dev/null +++ b/test/prism/errors/unterminated_interpolated_symbol.txt @@ -0,0 +1,3 @@ +:"# + ^ unterminated symbol; expected a closing delimiter for the interpolated symbol + diff --git a/test/prism/errors/unterminated_parenthesized_expression.txt b/test/prism/errors/unterminated_parenthesized_expression.txt new file mode 100644 index 00000000000..9025eec453d --- /dev/null +++ b/test/prism/errors/unterminated_parenthesized_expression.txt @@ -0,0 +1,4 @@ +(1 + 2 + ^ unexpected end-of-input, assuming it is closing the parent top level context + ^ expected a matching `)` + diff --git a/test/prism/errors/unterminated_regular_expression.txt b/test/prism/errors/unterminated_regular_expression.txt new file mode 100644 index 00000000000..48f3a308108 --- /dev/null +++ b/test/prism/errors/unterminated_regular_expression.txt @@ -0,0 +1,3 @@ +/hello +^ unterminated regexp meets end of file; expected a closing delimiter + diff --git a/test/prism/errors/unterminated_regular_expression_with_heredoc.txt b/test/prism/errors/unterminated_regular_expression_with_heredoc.txt new file mode 100644 index 00000000000..d4688d6c9e6 --- /dev/null +++ b/test/prism/errors/unterminated_regular_expression_with_heredoc.txt @@ -0,0 +1,4 @@ +<<-END + /b + ^ unterminated regexp meets end of file; expected a closing delimiter +END + diff --git a/test/prism/errors/unterminated_s_symbol.txt b/test/prism/errors/unterminated_s_symbol.txt new file mode 100644 index 00000000000..0f4be932b3b --- /dev/null +++ b/test/prism/errors/unterminated_s_symbol.txt @@ -0,0 +1,3 @@ +%s[abc +^~~ unterminated quoted string; expected a closing delimiter for the dynamic symbol + diff --git a/test/prism/errors/unterminated_string.txt b/test/prism/errors/unterminated_string.txt new file mode 100644 index 00000000000..89c0a08b3e8 --- /dev/null +++ b/test/prism/errors/unterminated_string.txt @@ -0,0 +1,3 @@ +'hello +^ unterminated string meets end of file + diff --git a/test/prism/errors/unterminated_unicode_brackets_should_be_a_syntax_error.txt b/test/prism/errors/unterminated_unicode_brackets_should_be_a_syntax_error.txt new file mode 100644 index 00000000000..1a65c6149ac --- /dev/null +++ b/test/prism/errors/unterminated_unicode_brackets_should_be_a_syntax_error.txt @@ -0,0 +1,3 @@ +?\u{3 + ^~~~ unterminated Unicode escape + diff --git a/test/prism/errors/unterminated_xstring.txt b/test/prism/errors/unterminated_xstring.txt new file mode 100644 index 00000000000..ccd529774c3 --- /dev/null +++ b/test/prism/errors/unterminated_xstring.txt @@ -0,0 +1,3 @@ +`hello +^ expected a closing delimiter for the `%x` or backtick string + diff --git a/test/prism/errors/void_value_expression_in_arguments.txt b/test/prism/errors/void_value_expression_in_arguments.txt new file mode 100644 index 00000000000..f57aee14543 --- /dev/null +++ b/test/prism/errors/void_value_expression_in_arguments.txt @@ -0,0 +1,17 @@ +foo(return) + ^~~~~~ unexpected void value expression +foo(1, return) + ^~~~~~ unexpected void value expression +foo(*return) + ^~~~~~ unexpected void value expression +foo(**return) + ^~~~~~ unexpected void value expression +foo(&return) + ^~~~~~ unexpected void value expression +foo(return => 1) + ^~~~~~ unexpected void value expression +foo(:a => return) + ^~~~~~ unexpected void value expression +foo(a: return) + ^~~~~~ unexpected void value expression + diff --git a/test/prism/errors/void_value_expression_in_array.txt b/test/prism/errors/void_value_expression_in_array.txt new file mode 100644 index 00000000000..a0e86fb1356 --- /dev/null +++ b/test/prism/errors/void_value_expression_in_array.txt @@ -0,0 +1,15 @@ +[return] + ^~~~~~ unexpected void value expression +[1, return] + ^~~~~~ unexpected void value expression +[ return => 1 ] + ^~~~~~ unexpected void value expression +[ 1 => return ] + ^~~~~~ unexpected void value expression +[ a: return ] + ^~~~~~ unexpected void value expression +[ *return ] + ^~~~~~ unexpected void value expression +[ **return ] + ^~~~~~ unexpected void value expression + diff --git a/test/prism/errors/void_value_expression_in_assignment.txt b/test/prism/errors/void_value_expression_in_assignment.txt new file mode 100644 index 00000000000..c651d7f39ee --- /dev/null +++ b/test/prism/errors/void_value_expression_in_assignment.txt @@ -0,0 +1,9 @@ +a = return + ^~~~~~ unexpected void value expression +a = 1, return + ^~~~~~ unexpected void value expression +a, b = return, 1 + ^~~~~~ unexpected void value expression +a, b = 1, *return + ^~~~~~ unexpected void value expression + diff --git a/test/prism/errors/void_value_expression_in_begin_statement.txt b/test/prism/errors/void_value_expression_in_begin_statement.txt new file mode 100644 index 00000000000..4ad40b684dc --- /dev/null +++ b/test/prism/errors/void_value_expression_in_begin_statement.txt @@ -0,0 +1,21 @@ +x = return 1 + ^~~~~~~~ unexpected void value expression +x = return, 1 + ^~~~~~ unexpected void value expression +x = 1, return + ^~~~~~ unexpected void value expression +x, y = return + ^~~~~~ unexpected void value expression +x = begin return ensure end + ^~~~~~ unexpected void value expression +x = begin ensure return end + ^~~~~~ unexpected void value expression +x = begin return ensure return end + ^~~~~~ unexpected void value expression +x = begin return; rescue; return end + ^~~~~~ unexpected void value expression +x = begin return; rescue; return; else return end + ^~~~~~ unexpected void value expression +x = begin; return; rescue; retry; end + ^~~~~~ unexpected void value expression + diff --git a/test/prism/errors/void_value_expression_in_binary_call.txt b/test/prism/errors/void_value_expression_in_binary_call.txt new file mode 100644 index 00000000000..096b42be4de --- /dev/null +++ b/test/prism/errors/void_value_expression_in_binary_call.txt @@ -0,0 +1,11 @@ +1 + (return) + ^~~~~~ unexpected void value expression +(return) + 1 + ^~~~~~ unexpected void value expression +1 and (return) +(return) and 1 + ^~~~~~ unexpected void value expression +1 or (return) +(return) or 1 + ^~~~~~ unexpected void value expression + diff --git a/test/prism/errors/void_value_expression_in_call.txt b/test/prism/errors/void_value_expression_in_call.txt new file mode 100644 index 00000000000..90e6481c4ce --- /dev/null +++ b/test/prism/errors/void_value_expression_in_call.txt @@ -0,0 +1,11 @@ +(return).foo + ^~~~~~ unexpected void value expression +(return).(1) + ^~~~~~ unexpected void value expression +(return)[1] + ^~~~~~ unexpected void value expression +(return)[1] = 2 + ^~~~~~ unexpected void value expression +(return)::foo + ^~~~~~ unexpected void value expression + diff --git a/test/prism/errors/void_value_expression_in_constant_path.txt b/test/prism/errors/void_value_expression_in_constant_path.txt new file mode 100644 index 00000000000..1dab6902a27 --- /dev/null +++ b/test/prism/errors/void_value_expression_in_constant_path.txt @@ -0,0 +1,5 @@ +(return)::A + ^~~~~~ unexpected void value expression +class (return)::A; end + ^~~~~~ unexpected void value expression + diff --git a/test/prism/errors/void_value_expression_in_def.txt b/test/prism/errors/void_value_expression_in_def.txt new file mode 100644 index 00000000000..fed52a66776 --- /dev/null +++ b/test/prism/errors/void_value_expression_in_def.txt @@ -0,0 +1,10 @@ +def (return).x + ^~~~~~ unexpected void value expression +end +def x(a = return) + ^~~~~~ unexpected void value expression +end +def x(a: return) + ^~~~~~ unexpected void value expression +end + diff --git a/test/prism/errors/void_value_expression_in_expression.txt b/test/prism/errors/void_value_expression_in_expression.txt new file mode 100644 index 00000000000..f6165a7ba63 --- /dev/null +++ b/test/prism/errors/void_value_expression_in_expression.txt @@ -0,0 +1,19 @@ +(return) ? 1 : 1 + ^~~~~~ unexpected void value expression +(return)..1 + ^~~~~~ unexpected void value expression +1..(return) + ^~~~~~ unexpected void value expression +(return)...1 + ^~~~~~ unexpected void value expression +1...(return) + ^~~~~~ unexpected void value expression +(..(return)) + ^~~~~~ unexpected void value expression +(...(return)) + ^~~~~~ unexpected void value expression +((return)..) + ^~~~~~ unexpected void value expression +((return)...) + ^~~~~~ unexpected void value expression + diff --git a/test/prism/errors/void_value_expression_in_hash.txt b/test/prism/errors/void_value_expression_in_hash.txt new file mode 100644 index 00000000000..77955114437 --- /dev/null +++ b/test/prism/errors/void_value_expression_in_hash.txt @@ -0,0 +1,9 @@ +{ return => 1 } + ^~~~~~ unexpected void value expression +{ 1 => return } + ^~~~~~ unexpected void value expression +{ a: return } + ^~~~~~ unexpected void value expression +{ **return } + ^~~~~~ unexpected void value expression + diff --git a/test/prism/errors/void_value_expression_in_modifier.txt b/test/prism/errors/void_value_expression_in_modifier.txt new file mode 100644 index 00000000000..7d7b444e331 --- /dev/null +++ b/test/prism/errors/void_value_expression_in_modifier.txt @@ -0,0 +1,13 @@ +1 if (return) + ^~~~~~ unexpected void value expression +1 unless (return) + ^~~~~~ unexpected void value expression +1 while (return) + ^~~~~~ unexpected void value expression +1 until (return) + ^~~~~~ unexpected void value expression +(return) => a + ^~~~~~ unexpected void value expression +(return) in a + ^~~~~~ unexpected void value expression + diff --git a/test/prism/errors/void_value_expression_in_statement.txt b/test/prism/errors/void_value_expression_in_statement.txt new file mode 100644 index 00000000000..87dbfa5cc92 --- /dev/null +++ b/test/prism/errors/void_value_expression_in_statement.txt @@ -0,0 +1,26 @@ +if (return) + ^~~~~~ unexpected void value expression +end +unless (return) + ^~~~~~ unexpected void value expression +end +while (return) + ^~~~~~ unexpected void value expression +end +until (return) + ^~~~~~ unexpected void value expression +end +case (return) + ^~~~~~ unexpected void value expression +when 1 +end +class A < (return) + ^~~~~~ unexpected void value expression +end +class << (return) + ^~~~~~ unexpected void value expression +end +for x in (return) + ^~~~~~ unexpected void value expression +end + diff --git a/test/prism/errors/void_value_expression_in_unary_call.txt b/test/prism/errors/void_value_expression_in_unary_call.txt new file mode 100644 index 00000000000..61e849255c7 --- /dev/null +++ b/test/prism/errors/void_value_expression_in_unary_call.txt @@ -0,0 +1,5 @@ ++(return) + ^~~~~~ unexpected void value expression +not return + ^~~~~~ unexpected void value expression + diff --git a/test/prism/errors/while_endless_method.txt b/test/prism/errors/while_endless_method.txt new file mode 100644 index 00000000000..6f062d89d0f --- /dev/null +++ b/test/prism/errors/while_endless_method.txt @@ -0,0 +1,5 @@ +while def f = g do end + ^ expected a predicate expression for the `while` statement + ^ unexpected end-of-input, assuming it is closing the parent top level context + ^ expected an `end` to close the `while` statement + diff --git a/test/prism/errors/writing_numbered_parameter.txt b/test/prism/errors/writing_numbered_parameter.txt new file mode 100644 index 00000000000..17dcc6e8f03 --- /dev/null +++ b/test/prism/errors/writing_numbered_parameter.txt @@ -0,0 +1,3 @@ +-> { _1 = 0 } + ^~ _1 is reserved for numbered parameters + diff --git a/test/prism/errors_test.rb b/test/prism/errors_test.rb index bb9f5eae8be..4c5f93cc9f1 100644 --- a/test/prism/errors_test.rb +++ b/test/prism/errors_test.rb @@ -4,1996 +4,63 @@ module Prism class ErrorsTest < TestCase - include DSL + base = File.expand_path("errors", __dir__) + filepaths = Dir["*.txt", base: base] - def test_constant_path_with_invalid_token_after - assert_error_messages "A::$b", [ - "expected a constant after the `::` operator", - "unexpected global variable, expecting end-of-input" + if RUBY_VERSION < "3.0" + filepaths -= [ + "cannot_assign_to_a_reserved_numbered_parameter.txt", + "writing_numbered_parameter.txt", + "targeting_numbered_parameter.txt", + "defining_numbered_parameter.txt", + "defining_numbered_parameter_2.txt", + "numbered_parameters_in_block_arguments.txt" ] end - def test_module_name_recoverable - expected = ModuleNode( - [], - Location(), - ConstantReadNode(:Parent), - StatementsNode( - [ModuleNode([], Location(), MissingNode(), nil, Location(), :"")] - ), - Location(), - :Parent - ) - - assert_errors expected, "module Parent module end", [ - ["unexpected constant path after `module`; class/module name must be CONSTANT", 14..20], - ["unexpected 'end', assuming it is closing the parent module definition", 21..24] - ] - end - - def test_for_loops_index_missing - expected = ForNode( - MissingNode(), - expression("1..10"), - StatementsNode([expression("i")]), - Location(), - Location(), - nil, - Location() - ) - - assert_errors expected, "for in 1..10\ni\nend", [ - ["expected an index after `for`", 0..3] - ] - end - - def test_for_loops_only_end - expected = ForNode( - MissingNode(), - MissingNode(), - nil, - Location(), - Location(), - nil, - Location() - ) - - assert_errors expected, "for end", [ - ["expected an index after `for`", 0..3], - ["expected an `in` after the index in a `for` statement", 3..3], - ["expected a collection after the `in` in a `for` statement", 3..3] - ] - end - - def test_pre_execution_missing_brace - expected = PreExecutionNode( - StatementsNode([expression("1")]), - Location(), - Location(), - Location() - ) - - assert_errors expected, "BEGIN 1 }", [ - ["expected a `{` after `BEGIN`", 5..5] - ] - end - - def test_pre_execution_context - expected = PreExecutionNode( - StatementsNode([ - CallNode( - 0, - expression("1"), - nil, - :+, - Location(), - nil, - ArgumentsNode(0, [MissingNode()]), - nil, - nil - ) - ]), - Location(), - Location(), - Location() - ) - - assert_errors expected, "BEGIN { 1 + }", [ - ["unexpected '}'; expected an expression after the operator", 12..13], - ["unexpected '}', assuming it is closing the parent 'BEGIN' block", 12..13] - ] - end - - def test_unterminated_embdoc - message = "embedded document meets end of file" - assert_error_messages "=begin", [message] - assert_error_messages "=begin\n", [message] - - refute_error_messages "=begin\n=end" - refute_error_messages "=begin\n=end\0" - refute_error_messages "=begin\n=end\C-d" - refute_error_messages "=begin\n=end\C-z" - end - - def test_unterminated_i_list - assert_errors expression("%i["), "%i[", [ - ["unterminated list; expected a closing delimiter for the `%i`", 0..3] - ] - end - - def test_unterminated_w_list - assert_errors expression("%w["), "%w[", [ - ["unterminated list; expected a closing delimiter for the `%w`", 0..3] - ] - end - - def test_unterminated_W_list - assert_errors expression("%W["), "%W[", [ - ["unterminated list; expected a closing delimiter for the `%W`", 0..3] - ] - end - - def test_unterminated_regular_expression - assert_errors expression("/hello"), "/hello", [ - ["unterminated regexp meets end of file; expected a closing delimiter", 0..1] - ] - end - - def test_unterminated_regular_expression_with_heredoc - source = "<<-END + /b\nEND\n" - - assert_errors expression(source), source, [ - ["unterminated regexp meets end of file; expected a closing delimiter", 9..10] - ] - end - - def test_unterminated_xstring - assert_errors expression("`hello"), "`hello", [ - ["expected a closing delimiter for the `%x` or backtick string", 0..1] - ] - end - - def test_unterminated_interpolated_string - expr = expression('"hello') - assert_errors expr, '"hello', [ - ["unterminated string meets end of file", 6..6] - ] - assert_equal expr.unescaped, "hello" - assert_equal expr.closing, "" - end - - def test_unterminated_string - expr = expression("'hello") - assert_errors expr, "'hello", [ - ["unterminated string meets end of file", 0..1] - ] - assert_equal expr.unescaped, "hello" - assert_equal expr.closing, "" - end - - def test_unterminated_empty_string - expr = expression('"') - assert_errors expr, '"', [ - ["unterminated string meets end of file", 1..1] - ] - assert_equal expr.unescaped, "" - assert_equal expr.closing, "" - end - - def test_incomplete_instance_var_string - assert_errors expression('%@#@@#'), '%@#@@#', [ - ["'@' without identifiers is not allowed as an instance variable name", 4..5], - ["unexpected instance variable, expecting end-of-input", 4..5] - ] - end - - def test_unterminated_s_symbol - assert_errors expression("%s[abc"), "%s[abc", [ - ["unterminated quoted string; expected a closing delimiter for the dynamic symbol", 0..3] - ] - end - - def test_unterminated_parenthesized_expression - assert_errors expression('(1 + 2'), '(1 + 2', [ - ["unexpected end-of-input, assuming it is closing the parent top level context", 6..6], - ["expected a matching `)`", 6..6] - ] - end - - def test_missing_terminator_in_parentheses - assert_error_messages "(0 0)", [ - "unexpected integer, expecting end-of-input" - ] - end - - def test_unterminated_argument_expression - assert_errors expression('a %'), 'a %', [ - ["unterminated quoted string meets end of file", 2..3], - ["unexpected end-of-input; expected an expression after the operator", 3..3], - ["unexpected end-of-input, assuming it is closing the parent top level context", 3..3] - ] - end - - def test_unterminated_interpolated_symbol - assert_error_messages ":\"#", [ - "unterminated symbol; expected a closing delimiter for the interpolated symbol" - ] - end - - def test_cr_without_lf_in_percent_expression - assert_errors expression("%\r"), "%\r", [ - ["unterminated string meets end of file", 2..2], - ] - end - - def test_1_2_3 - assert_errors expression("(1, 2, 3)"), "(1, 2, 3)", [ - ["unexpected ',', expecting end-of-input", 2..3], - ["unexpected ',', ignoring it", 2..3], - ["expected a matching `)`", 2..2], - ["unexpected ',', expecting end-of-input", 2..3], - ["unexpected ',', ignoring it", 2..3], - ["unexpected ',', expecting end-of-input", 5..6], - ["unexpected ',', ignoring it", 5..6], - ["unexpected ')', expecting end-of-input", 8..9], - ["unexpected ')', ignoring it", 8..9] - ] - end - - def test_return_1_2_3 - assert_error_messages "return(1, 2, 3)", [ - "unexpected ',', expecting end-of-input", - "unexpected ',', ignoring it", - "expected a matching `)`", - "unexpected ')', expecting end-of-input", - "unexpected ')', ignoring it" - ] - end - - def test_return_1 - assert_errors expression("return 1,;"), "return 1,;", [ - ["expected an argument", 8..9] - ] - end - - def test_next_1_2_3 - assert_errors expression("next(1, 2, 3)"), "next(1, 2, 3)", [ - ["unexpected ',', expecting end-of-input", 6..7], - ["unexpected ',', ignoring it", 6..7], - ["expected a matching `)`", 6..6], - ["unexpected ')', expecting end-of-input", 12..13], - ["unexpected ')', ignoring it", 12..13], - ["Invalid next", 0..12] - ] - end - - def test_next_1 - assert_errors expression("next 1,;"), "next 1,;", [ - ["expected an argument", 6..7], - ["Invalid next", 0..7] - ] - end - - def test_break_1_2_3 - assert_errors expression("break(1, 2, 3)"), "break(1, 2, 3)", [ - ["unexpected ',', expecting end-of-input", 7..8], - ["unexpected ',', ignoring it", 7..8], - ["expected a matching `)`", 7..7], - ["unexpected ')', expecting end-of-input", 13..14], - ["unexpected ')', ignoring it", 13..14], - ["Invalid break", 0..13] - ] - end - - def test_break_1 - assert_errors expression("break 1,;"), "break 1,;", [ - ["expected an argument", 7..8], - ["Invalid break", 0..8] - ] - end - - def test_argument_forwarding_when_parent_is_not_forwarding - assert_errors expression('def a(x, y, z); b(...); end'), 'def a(x, y, z); b(...); end', [ - ["unexpected ... when the parent method is not forwarding", 18..21] - ] - end - - def test_argument_forwarding_only_effects_its_own_internals - assert_errors expression('def a(...); b(...); end; def c(x, y, z); b(...); end'), - 'def a(...); b(...); end; def c(x, y, z); b(...); end', [ - ["unexpected ... when the parent method is not forwarding", 43..46] - ] - end - - def test_top_level_constant_with_downcased_identifier - assert_error_messages "::foo", [ - "expected a constant after the `::` operator", - "unexpected local variable or method, expecting end-of-input" - ] - end - - def test_top_level_constant_starting_with_downcased_identifier - assert_error_messages "::foo::A", [ - "expected a constant after the `::` operator", - "unexpected local variable or method, expecting end-of-input" - ] - end - - def test_aliasing_global_variable_with_non_global_variable - assert_errors expression("alias $a b"), "alias $a b", [ - ["invalid argument being passed to `alias`; expected a bare word, symbol, constant, or global variable", 9..10] - ] - end - - def test_aliasing_non_global_variable_with_global_variable - assert_errors expression("alias a $b"), "alias a $b", [ - ["invalid argument being passed to `alias`; expected a bare word, symbol, constant, or global variable", 8..10] - ] - end - - def test_aliasing_global_variable_with_global_number_variable - assert_errors expression("alias $a $1"), "alias $a $1", [ - ["invalid argument being passed to `alias`; can't make alias for the number variables", 9..11] - ] - end - - def test_def_with_expression_receiver_and_no_identifier - assert_errors expression("def (a); end"), "def (a); end", [ - ["expected a `.` or `::` after the receiver in a method definition", 7..7], - ["unexpected ';'; expected a method name", 7..8] - ] - end - - def test_def_with_multiple_statements_receiver - assert_errors expression("def (\na\nb\n).c; end"), "def (\na\nb\n).c; end", [ - ["expected a matching `)`", 8..8], - ["expected a `.` or `::` after the receiver in a method definition", 8..8], - ["expected a delimiter to close the parameters", 9..9], - ["unexpected ')', ignoring it", 10..11], - ["unexpected '.', ignoring it", 11..12] - ] - end - - def test_def_with_empty_expression_receiver - assert_errors expression("def ().a; end"), "def ().a; end", [ - ["expected a receiver for the method definition", 4..5] - ] - end - - def test_block_beginning_with_brace_and_ending_with_end - assert_error_messages "x.each { x end", [ - "unexpected 'end', expecting end-of-input", - "unexpected 'end', ignoring it", - "unexpected end-of-input, assuming it is closing the parent top level context", - "expected a block beginning with `{` to end with `}`" - ] - end - - def test_double_splat_followed_by_splat_argument - expected = CallNode( - CallNodeFlags::IGNORE_VISIBILITY, - nil, - nil, - :a, - Location(), - Location(), - ArgumentsNode( - ArgumentsNodeFlags::CONTAINS_KEYWORDS | ArgumentsNodeFlags::CONTAINS_KEYWORD_SPLAT, - [ - KeywordHashNode(0, [AssocSplatNode(expression("kwargs"), Location())]), - SplatNode(Location(), expression("args")) - ] - ), - Location(), - nil - ) - - assert_errors expected, "a(**kwargs, *args)", [ - ["unexpected `*` splat argument after a `**` keyword splat argument", 12..17] - ] - end - - def test_arguments_after_block - expected = CallNode( - CallNodeFlags::IGNORE_VISIBILITY, - nil, - nil, - :a, - Location(), - Location(), - ArgumentsNode(0, [expression("foo")]), - Location(), - BlockArgumentNode(expression("block"), Location()) - ) - - assert_errors expected, "a(&block, foo)", [ - ["unexpected argument after a block argument", 10..13] - ] - end - - def test_arguments_binding_power_for_and - assert_error_messages "foo(*bar and baz)", [ - "unexpected 'and'; expected a `)` to close the arguments", - "unexpected ')', expecting end-of-input", - "unexpected ')', ignoring it" - ] - end - - def test_splat_argument_after_keyword_argument - expected = CallNode( - CallNodeFlags::IGNORE_VISIBILITY, - nil, - nil, - :a, - Location(), - Location(), - ArgumentsNode(ArgumentsNodeFlags::CONTAINS_KEYWORDS, [ - KeywordHashNode(1, [ - AssocNode( - SymbolNode(SymbolFlags::FORCED_US_ASCII_ENCODING, nil, Location(), Location(), "foo"), - expression("bar"), - nil - ) - ]), - SplatNode(Location(), expression("args")) - ]), - Location(), - nil - ) - - assert_errors expected, "a(foo: bar, *args)", [ - ["unexpected `*` splat argument after a `**` keyword splat argument", 12..17] - ] - end - - def test_module_definition_in_method_body - expected = DefNode( - :foo, - Location(), - nil, - nil, - StatementsNode([ModuleNode([], Location(), ConstantReadNode(:A), nil, Location(), :A)]), - [], - Location(), - nil, - nil, - nil, - nil, - Location() - ) - - assert_errors expected, "def foo;module A;end;end", [ - ["unexpected module definition in method body", 8..14] - ] - end - - def test_module_definition_in_method_body_within_block - expected = DefNode( - :foo, - Location(), - nil, - nil, - StatementsNode( - [CallNode( - CallNodeFlags::IGNORE_VISIBILITY, - nil, - nil, - :bar, - Location(), - nil, - nil, - nil, - BlockNode( - [], - nil, - StatementsNode([ModuleNode([], Location(), ConstantReadNode(:Foo), nil, Location(), :Foo)]), - Location(), - Location() - ) - )] - ), - [], - Location(), - nil, - nil, - nil, - nil, - Location() - ) - - assert_errors expected, <<~RUBY, [["unexpected module definition in method body", 21..27]] - def foo - bar do - module Foo;end - end - end - RUBY - end - - def test_module_definition_in_method_defs - source = <<~RUBY - def foo(bar = module A;end);end - def foo;rescue;module A;end;end - def foo;ensure;module A;end;end - RUBY - message = "unexpected module definition in method body" - assert_errors expression(source), source, [ - [message, 14..20], - [message, 47..53], - [message, 79..85], - ] - end - - def test_class_definition_in_method_body - expected = DefNode( - :foo, - Location(), - nil, - nil, - StatementsNode( - [ClassNode( - [], - Location(), - ConstantReadNode(:A), - nil, - nil, - nil, - Location(), - :A - )] - ), - [], - Location(), - nil, - nil, - nil, - nil, - Location() - ) - - assert_errors expected, "def foo;class A;end;end", [ - ["unexpected class definition in method body", 8..13] - ] - end - - def test_class_definition_in_method_defs - source = <<~RUBY - def foo(bar = class A;end);end - def foo;rescue;class A;end;end - def foo;ensure;class A;end;end - RUBY - message = "unexpected class definition in method body" - assert_errors expression(source), source, [ - [message, 14..19], - [message, 46..51], - [message, 77..82], - ] - end - - def test_bad_arguments - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode([ - RequiredParameterNode(0, :A), - RequiredParameterNode(0, :@a), - RequiredParameterNode(0, :$A), - RequiredParameterNode(0, :@@a), - ], [], nil, [], [], nil, nil), - nil, - [:A, :@a, :$A, :@@a], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - - assert_errors expected, "def foo(A, @a, $A, @@a);end", [ - ["invalid formal argument; formal argument cannot be a constant", 8..9], - ["invalid formal argument; formal argument cannot be an instance variable", 11..13], - ["invalid formal argument; formal argument cannot be a global variable", 15..17], - ["invalid formal argument; formal argument cannot be a class variable", 19..22], - ] - end - - if RUBY_VERSION >= "3.0" - def test_cannot_assign_to_a_reserved_numbered_parameter - expected = BeginNode( - Location(), - StatementsNode([ - LocalVariableWriteNode(:_1, 0, Location(), SymbolNode(SymbolFlags::FORCED_US_ASCII_ENCODING, Location(), Location(), nil, "a"), Location()), - LocalVariableWriteNode(:_2, 0, Location(), SymbolNode(SymbolFlags::FORCED_US_ASCII_ENCODING, Location(), Location(), nil, "a"), Location()), - LocalVariableWriteNode(:_3, 0, Location(), SymbolNode(SymbolFlags::FORCED_US_ASCII_ENCODING, Location(), Location(), nil, "a"), Location()), - LocalVariableWriteNode(:_4, 0, Location(), SymbolNode(SymbolFlags::FORCED_US_ASCII_ENCODING, Location(), Location(), nil, "a"), Location()), - LocalVariableWriteNode(:_5, 0, Location(), SymbolNode(SymbolFlags::FORCED_US_ASCII_ENCODING, Location(), Location(), nil, "a"), Location()), - LocalVariableWriteNode(:_6, 0, Location(), SymbolNode(SymbolFlags::FORCED_US_ASCII_ENCODING, Location(), Location(), nil, "a"), Location()), - LocalVariableWriteNode(:_7, 0, Location(), SymbolNode(SymbolFlags::FORCED_US_ASCII_ENCODING, Location(), Location(), nil, "a"), Location()), - LocalVariableWriteNode(:_8, 0, Location(), SymbolNode(SymbolFlags::FORCED_US_ASCII_ENCODING, Location(), Location(), nil, "a"), Location()), - LocalVariableWriteNode(:_9, 0, Location(), SymbolNode(SymbolFlags::FORCED_US_ASCII_ENCODING, Location(), Location(), nil, "a"), Location()), - LocalVariableWriteNode(:_10, 0, Location(), SymbolNode(SymbolFlags::FORCED_US_ASCII_ENCODING, Location(), Location(), nil, "a"), Location()) - ]), - nil, - nil, - nil, - Location() - ) - source = <<~RUBY - begin - _1=:a;_2=:a;_3=:a;_4=:a;_5=:a - _6=:a;_7=:a;_8=:a;_9=:a;_10=:a - end - RUBY - assert_errors expected, source, [ - ["_1 is reserved for numbered parameters", 8..10], - ["_2 is reserved for numbered parameters", 14..16], - ["_3 is reserved for numbered parameters", 20..22], - ["_4 is reserved for numbered parameters", 26..28], - ["_5 is reserved for numbered parameters", 32..34], - ["_6 is reserved for numbered parameters", 40..42], - ["_7 is reserved for numbered parameters", 46..48], - ["_8 is reserved for numbered parameters", 52..54], - ["_9 is reserved for numbered parameters", 58..60], - ] - end - end - - def test_do_not_allow_trailing_commas_in_method_parameters - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode( - [RequiredParameterNode(0, :a), RequiredParameterNode(0, :b), RequiredParameterNode(0, :c)], - [], - nil, - [], - [], - nil, - nil - ), - nil, - [:a, :b, :c], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - - assert_errors expected, "def foo(a,b,c,);end", [ - ["unexpected `,` in parameters", 13..14] - ] - end - - def test_do_not_allow_trailing_commas_in_lambda_parameters - expected = LambdaNode( - [:a, :b], - Location(), - Location(), - Location(), - BlockParametersNode( - ParametersNode([RequiredParameterNode(0, :a), RequiredParameterNode(0, :b)], [], nil, [], [], nil, nil), - [], - Location(), - Location() - ), - nil - ) - assert_errors expected, "-> (a, b, ) {}", [ - ["unexpected `,` in parameters", 8..9] - ] - end - - def test_do_not_allow_multiple_codepoints_in_a_single_character_literal - expected = StringNode(StringFlags::FORCED_UTF8_ENCODING, Location(), Location(), nil, "\u0001\u0002") - - assert_errors expected, '?\u{0001 0002}', [ - ["invalid Unicode escape sequence; Multiple codepoints at single character literal are disallowed", 9..12] - ] - end - - def test_invalid_hex_escape - assert_errors expression('"\\xx"'), '"\\xx"', [ - ["invalid hex escape sequence", 1..3], - ] - end - - def test_do_not_allow_more_than_6_hexadecimal_digits_in_u_Unicode_character_notation - expected = StringNode(0, Location(), Location(), Location(), "\u0001") - - assert_errors expected, '"\u{0000001}"', [ - ["invalid Unicode escape sequence; maximum length is 6 digits", 4..11], - ] - end - - def test_do_not_allow_characters_other_than_0_9_a_f_and_A_F_in_u_Unicode_character_notation - expected = StringNode(0, Location(), Location(), Location(), "\u0000z}") - - assert_errors expected, '"\u{000z}"', [ - ["invalid Unicode escape sequence", 7..7], - ["unterminated Unicode escape", 7..7] - ] - end - - def test_unterminated_unicode_brackets_should_be_a_syntax_error - assert_errors expression('?\\u{3'), '?\\u{3', [ - ["unterminated Unicode escape", 1..5], - ] - end - - def test_method_parameters_after_block - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode( - [], - [], - nil, - [RequiredParameterNode(0, :a)], - [], - nil, - BlockParameterNode(0, :block, Location(), Location()) - ), - nil, - [:block, :a], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - assert_errors expected, "def foo(&block, a)\nend", [ - ["unexpected parameter order", 16..17] - ] - end - - def test_method_with_arguments_after_anonymous_block - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode([], [], nil, [RequiredParameterNode(0, :a)], [], nil, BlockParameterNode(0, nil, nil, Location())), - nil, - [:a], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - - assert_errors expected, "def foo(&, a)\nend", [ - ["unexpected parameter order", 11..12] - ] - end - - def test_method_parameters_after_arguments_forwarding - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode( - [], - [], - nil, - [RequiredParameterNode(0, :a)], - [], - ForwardingParameterNode(), - nil - ), - nil, - [:a], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - assert_errors expected, "def foo(..., a)\nend", [ - ["unexpected parameter order", 13..14] - ] - end - - def test_keywords_parameters_before_required_parameters - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode( - [], - [], - nil, - [RequiredParameterNode(0, :a)], - [RequiredKeywordParameterNode(0, :b, Location())], - nil, - nil - ), - nil, - [:b, :a], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - assert_errors expected, "def foo(b:, a)\nend", [ - ["unexpected parameter order", 12..13] - ] - end - - def test_rest_keywords_parameters_before_required_parameters - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode( - [], - [], - nil, - [], - [RequiredKeywordParameterNode(0, :b, Location())], - KeywordRestParameterNode(0, :rest, Location(), Location()), - nil - ), - nil, - [:rest, :b], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - - assert_errors expected, "def foo(**rest, b:)\nend", [ - ["unexpected parameter order", 16..18] - ] - end - - def test_double_arguments_forwarding - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode([], [], nil, [ForwardingParameterNode()], [], ForwardingParameterNode(), nil), - nil, - [], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - - assert_errors expected, "def foo(..., ...)\nend", [ - ["unexpected parameter order", 13..16] - ] - end - - def test_multiple_error_in_parameters_order - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode( - [], - [], - nil, - [RequiredParameterNode(0, :a)], - [RequiredKeywordParameterNode(0, :b, Location())], - KeywordRestParameterNode(0, :args, Location(), Location()), - nil - ), - nil, - [:args, :a, :b], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - - assert_errors expected, "def foo(**args, a, b:)\nend", [ - ["unexpected parameter order", 16..17], - ["unexpected parameter order", 19..21] - ] - end - - def test_switching_to_optional_arguments_twice - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode( - [], - [], - nil, - [RequiredParameterNode(0, :a)], - [RequiredKeywordParameterNode(0, :b, Location())], - KeywordRestParameterNode(0, :args, Location(), Location()), - nil - ), - nil, - [:args, :a, :b], - Location(), - nil, - Location(), - Location(), - nil, - Location(), - ) - - assert_errors expected, "def foo(**args, a, b:)\nend", [ - ["unexpected parameter order", 16..17], - ["unexpected parameter order", 19..21] - ] - end - - def test_switching_to_named_arguments_twice - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode( - [], - [], - nil, - [RequiredParameterNode(0, :a)], - [RequiredKeywordParameterNode(0, :b, Location())], - KeywordRestParameterNode(0, :args, Location(), Location()), - nil - ), - nil, - [:args, :a, :b], - Location(), - nil, - Location(), - Location(), - nil, - Location(), - ) - - assert_errors expected, "def foo(**args, a, b:)\nend", [ - ["unexpected parameter order", 16..17], - ["unexpected parameter order", 19..21] - ] - end - - def test_returning_to_optional_parameters_multiple_times - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode( - [RequiredParameterNode(0, :a)], - [ - OptionalParameterNode(0, :b, Location(), Location(), IntegerNode(IntegerBaseFlags::DECIMAL, 1)), - OptionalParameterNode(0, :d, Location(), Location(), IntegerNode(IntegerBaseFlags::DECIMAL, 2)) - ], - nil, - [RequiredParameterNode(0, :c), RequiredParameterNode(0, :e)], - [], - nil, - nil - ), - nil, - [:a, :b, :c, :d, :e], - Location(), - nil, - Location(), - Location(), - nil, - Location(), - ) - - assert_errors expected, "def foo(a, b = 1, c, d = 2, e)\nend", [ - ["unexpected parameter order", 23..24] - ] - end - - def test_case_without_when_clauses_errors_on_else_clause - expected = CaseMatchNode( - SymbolNode(SymbolFlags::FORCED_US_ASCII_ENCODING, Location(), Location(), nil, "a"), - [], - ElseNode(Location(), nil, Location()), - Location(), - Location() - ) - - assert_errors expected, "case :a\nelse\nend", [ - ["expected a `when` or `in` clause after `case`", 0..4] - ] - end - - def test_case_without_clauses - expected = CaseNode( - SymbolNode(SymbolFlags::FORCED_US_ASCII_ENCODING, Location(), Location(), nil, "a"), - [], - nil, - Location(), - Location() - ) - - assert_errors expected, "case :a\nend", [ - ["expected a `when` or `in` clause after `case`", 0..4] - ] - end - - def test_setter_method_cannot_be_defined_in_an_endless_method_definition - expected = DefNode( - :a=, - Location(), - nil, - nil, - StatementsNode([IntegerNode(IntegerBaseFlags::DECIMAL, 42)]), - [], - Location(), - nil, - Location(), - Location(), - Location(), - nil - ) - - assert_errors expected, "def a=() = 42", [ - ["invalid method name; a setter method cannot be defined in an endless method definition", 4..6] - ] - end - - def test_do_not_allow_forward_arguments_in_lambda_literals - expected = LambdaNode( - [], - Location(), - Location(), - Location(), - BlockParametersNode(ParametersNode([], [], nil, [], [], ForwardingParameterNode(), nil), [], Location(), Location()), - nil - ) - - assert_errors expected, "->(...) {}", [ - ["unexpected ... when the parent method is not forwarding", 3..6] - ] - end - - def test_do_not_allow_forward_arguments_in_blocks - expected = CallNode( - CallNodeFlags::IGNORE_VISIBILITY, - nil, - nil, - :a, - Location(), - nil, - nil, - nil, - BlockNode( - [], - BlockParametersNode(ParametersNode([], [], nil, [], [], ForwardingParameterNode(), nil), [], Location(), Location()), - nil, - Location(), - Location() - ) - ) - - assert_errors expected, "a {|...|}", [ - ["unexpected ... when the parent method is not forwarding", 4..7] - ] - end - - def test_dont_allow_return_inside_class_body - expected = ClassNode( - [], - Location(), - ConstantReadNode(:A), - nil, - nil, - StatementsNode([ReturnNode(0, Location(), nil)]), - Location(), - :A - ) - - assert_errors expected, "class A; return; end", [ - ["Invalid return in class/module body", 9..15] - ] - end - - def test_dont_allow_return_inside_module_body - expected = ModuleNode( - [], - Location(), - ConstantReadNode(:A), - StatementsNode([ReturnNode(0, Location(), nil)]), - Location(), - :A - ) - - assert_errors expected, "module A; return; end", [ - ["Invalid return in class/module body", 10..16] - ] - end - - def test_dont_allow_setting_to_back_and_nth_reference - expected = BeginNode( - Location(), - StatementsNode([ - GlobalVariableWriteNode(:$+, Location(), NilNode(), Location()), - GlobalVariableWriteNode(:$1466, Location(), NilNode(), Location()) - ]), - nil, - nil, - nil, - Location() - ) - - assert_errors expected, "begin\n$+ = nil\n$1466 = nil\nend", [ - ["Can't set variable $+", 6..8], - ["Can't set variable $1466", 15..20] - ] - end - - def test_duplicated_parameter_names - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode([RequiredParameterNode(0, :a), RequiredParameterNode(0, :b), RequiredParameterNode(ParameterFlags::REPEATED_PARAMETER, :a)], [], nil, [], [], nil, nil), - nil, - [:a, :b], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - - assert_errors expected, "def foo(a,b,a);end", [ - ["duplicated argument name", 12..13] - ] - - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode([RequiredParameterNode(0, :a), RequiredParameterNode(0, :b)], [], RestParameterNode(ParameterFlags::REPEATED_PARAMETER, :a, Location(), Location()), [], [], nil, nil), - nil, - [:a, :b], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - - assert_errors expected, "def foo(a,b,*a);end", [ - ["duplicated argument name", 13..14] - ] - - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode([RequiredParameterNode(0, :a), RequiredParameterNode(0, :b)], [], nil, [], [], KeywordRestParameterNode(ParameterFlags::REPEATED_PARAMETER, :a, Location(), Location()), nil), - nil, - [:a, :b], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - - assert_errors expected, "def foo(a,b,**a);end", [ - ["duplicated argument name", 14..15] - ] - - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode([RequiredParameterNode(0, :a), RequiredParameterNode(0, :b)], [], nil, [], [], nil, BlockParameterNode(ParameterFlags::REPEATED_PARAMETER, :a, Location(), Location())), - nil, - [:a, :b], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - - assert_errors expected, "def foo(a,b,&a);end", [ - ["duplicated argument name", 13..14] - ] - - expected = DefNode( - :foo, - Location(), - nil, - ParametersNode([], [OptionalParameterNode(0, :a, Location(), Location(), IntegerNode(IntegerBaseFlags::DECIMAL, 1))], RestParameterNode(0, :c, Location(), Location()), [RequiredParameterNode(0, :b)], [], nil, nil), - nil, - [:a, :b, :c], - Location(), - nil, - Location(), - Location(), - nil, - Location() - ) - - assert_errors expected, "def foo(a = 1,b,*c);end", [["unexpected parameter `*`", 16..17]] - end - - def test_content_after_unterminated_heredoc - receiver = StringNode(0, Location(), Location(), Location(), "") - expected = CallNode(0, receiver, Location(), :foo, Location(), nil, nil, nil, nil) - - assert_errors expected, "<<~FOO.foo\n", [ - ["unterminated heredoc; can't find string \"FOO\" anywhere before EOF", 3..6] - ] - end - - def test_invalid_message_name - assert_equal :"", Prism.parse_statement("+.@foo,+=foo").write_name - end - - def test_invalid_operator_write_fcall - source = "foo! += 1" - assert_errors expression(source), source, [ - ["unexpected write target", 0..4] - ] - end - - def test_invalid_operator_write_dot - source = "foo.+= 1" - assert_errors expression(source), source, [ - ["unexpected write target", 5..6] - ] - end - - def test_unterminated_global_variable - message = "'$' without identifiers is not allowed as a global variable name" - - assert_errors expression("$"), "$", [[message, 0..1]] - assert_errors expression("$ "), "$ ", [[message, 0..1]] - end - - def test_invalid_global_variable_write - assert_errors expression("$',"), "$',", [ - ["Can't set variable $'", 0..2], - ["unexpected write target", 0..2] - ] - end - - def test_invalid_multi_target - error_messages = ["unexpected write target"] - - assert_error_messages "foo,", error_messages - assert_error_messages "foo = 1; foo,", error_messages - assert_error_messages "foo.bar,", error_messages - assert_error_messages "*foo,", error_messages - assert_error_messages "@foo,", error_messages - assert_error_messages "@@foo,", error_messages - assert_error_messages "$foo,", error_messages - assert_error_messages "$1,", ["Can't set variable $1", *error_messages] - assert_error_messages "$+,", ["Can't set variable $+", *error_messages] - assert_error_messages "Foo,", error_messages - assert_error_messages "::Foo,", error_messages - assert_error_messages "Foo::Foo,", error_messages - assert_error_messages "Foo::foo,", error_messages - assert_error_messages "foo[foo],", error_messages - assert_error_messages "(foo, bar)", error_messages - assert_error_messages "foo((foo, bar))", error_messages - assert_error_messages "foo((*))", error_messages - assert_error_messages "foo(((foo, bar), *))", error_messages - assert_error_messages "(foo, bar) + 1", error_messages - assert_error_messages "(foo, bar) in baz", error_messages - end - - def test_call_with_block_and_write - source = "foo {} &&= 1" - assert_errors expression(source), source, [ - ["unexpected write target", 0..6], - ["unexpected operator after a call with a block", 7..10] - ] - end - - def test_call_with_block_or_write - source = "foo {} ||= 1" - assert_errors expression(source), source, [ - ["unexpected write target", 0..6], - ["unexpected operator after a call with a block", 7..10] - ] - end - - def test_call_with_block_operator_write - source = "foo {} += 1" - assert_errors expression(source), source, [ - ["unexpected write target", 0..6], - ["unexpected operator after a call with a block", 7..9] - ] - end - - def test_index_call_with_block_and_write - source = "foo[1] {} &&= 1" - assert_errors expression(source), source, [ - ["unexpected write target", 0..9], - ["unexpected operator after a call with arguments", 10..13], - ["unexpected operator after a call with a block", 10..13] - ] - end - - def test_index_call_with_block_or_write - source = "foo[1] {} ||= 1" - assert_errors expression(source), source, [ - ["unexpected write target", 0..9], - ["unexpected operator after a call with arguments", 10..13], - ["unexpected operator after a call with a block", 10..13] - ] - end - - def test_index_call_with_block_operator_write - source = "foo[1] {} += 1" - assert_errors expression(source), source, [ - ["unexpected write target", 0..9], - ["unexpected operator after a call with arguments", 10..12], - ["unexpected operator after a call with a block", 10..12] - ] - end - - if RUBY_VERSION >= "3.0" - def test_writing_numbered_parameter - assert_error_messages "-> { _1 = 0 }", [ - "_1 is reserved for numbered parameters" - ] - end - - def test_targeting_numbered_parameter - assert_error_messages "-> { _1, = 0 }", [ - "_1 is reserved for numbered parameters" - ] - end - - def test_defining_numbered_parameter - error_messages = ["_1 is reserved for numbered parameters"] - - assert_error_messages "def _1; end", error_messages - assert_error_messages "def self._1; end", error_messages - end - end - - def test_double_scope_numbered_parameters - source = "-> { _1 + -> { _2 } }" - errors = [["numbered parameter is already used in outer block", 15..17]] - - assert_errors expression(source), source, errors - end - - def test_invalid_number_underscores - error_messages = ["invalid underscore placement in number"] - assert_error_messages "1__1", error_messages - assert_error_messages "0b1__1", error_messages - assert_error_messages "0o1__1", error_messages - assert_error_messages "01__1", error_messages - assert_error_messages "0d1__1", error_messages - assert_error_messages "0x1__1", error_messages - - error_messages = ["trailing '_' in number"] - assert_error_messages "1_1_", error_messages - assert_error_messages "0b1_1_", error_messages - assert_error_messages "0o1_1_", error_messages - assert_error_messages "01_1_", error_messages - assert_error_messages "0d1_1_", error_messages - assert_error_messages "0x1_1_", error_messages - end - - def test_alnum_delimiters - error_messages = ["unknown type of %string"] - - assert_error_messages "%qXfooX", error_messages - assert_error_messages "%QXfooX", error_messages - assert_error_messages "%wXfooX", error_messages - assert_error_messages "%WxfooX", error_messages - assert_error_messages "%iXfooX", error_messages - assert_error_messages "%IXfooX", error_messages - assert_error_messages "%xXfooX", error_messages - assert_error_messages "%rXfooX", error_messages - assert_error_messages "%sXfooX", error_messages - end - - def test_begin_at_toplevel - source = "def foo; BEGIN {}; end" - assert_errors expression(source), source, [ - ["BEGIN is permitted only at toplevel", 9..14], - ] - end - - if RUBY_VERSION >= "3.0" - def test_numbered_parameters_in_block_arguments - source = "foo { |_1| }" - assert_errors expression(source), source, [ - ["_1 is reserved for numbered parameters", 7..9], - ] - end - end - - def test_conditional_predicate_closed - source = "if 0 0; elsif 0 0; end\nunless 0 0; end" - assert_errors expression(source), source, [ - ["expected `then` or `;` or '\\n" + "'", 5..6], - ["expected `then` or `;` or '\\n" + "'", 16..17], - ["expected `then` or `;` or '\\n" + "'", 32..33], - ] - end - - def test_parameter_name_ending_with_bang_or_question_mark - source = "def foo(x!,y?); end" - errors = [ - ["unexpected name for a parameter", 8..10], - ["unexpected name for a parameter", 11..13] - ] - assert_errors expression(source), source, errors - end - - def test_class_name - source = "class 0.X end" - assert_errors expression(source), source, [ - ["unexpected constant path after `class`; class/module name must be CONSTANT", 6..9], - ] - end - - def test_loop_conditional_is_closed - source = "while 0 0; foo; end; until 0 0; foo; end" - assert_errors expression(source), source, [ - ["expected a predicate expression for the `while` statement", 7..7], - ["expected a predicate expression for the `until` statement", 28..28], - ] - end - - def test_forwarding_arg_after_keyword_rest - source = "def f(**,...);end" - assert_errors expression(source), source, [ - ["unexpected parameter order", 9..12] - ] - end - - def test_semicolon_after_inheritance_operator - source = "class Foo < Bar end" - assert_errors expression(source), source, [ - ["unexpected `end`, expecting ';' or '\\n'", 15..15], - ] - end - - def test_shadow_args_in_lambda - source = "->a;b{}" - - assert_errors expression(source), source, [ - ["expected a `do` keyword or a `{` to open the lambda block", 3..3], - ["unexpected end-of-input, assuming it is closing the parent top level context", 7..7], - ["expected a lambda block beginning with `do` to end with `end`", 7..7] - ] - end - - def test_shadow_args_in_block - source = "tap{|a;a|}" - assert_errors expression(source), source, [ - ["duplicated argument name", 7..8], - ] - end - - def test_optional_block_parameters_with_unary_operator - [ - ["foo { |a = +b| }", ["unexpected '+'; unary calls are not allowed in this context", 11..12]], - ["foo { |a = -b| }", ["unexpected '-'; unary calls are not allowed in this context", 11..12]], - ["foo { |a = !b| }", ["unexpected '!'; unary calls are not allowed in this context", 11..12]], - ["foo { |a = ~b| }", ["unexpected '~'; unary calls are not allowed in this context", 11..12]], - ].each do |source, *errors| - assert_errors expression(source), source, errors + filepaths.each do |filepath| + define_method(:"test_#{File.basename(filepath, ".txt")}") do + assert_errors(File.join(base, filepath)) end end - def test_repeated_parameter_name_in_destructured_params - source = "def f(a, (b, (a))); end" - - assert_errors expression(source), source, [ - ["duplicated argument name", 14..15], - ] - end - - def test_assign_to_numbered_parameter - source = <<~RUBY - a in _1 - a => _1 - 1 => a, _1 - 1 in a, _1 - /(?<_1>)/ =~ a - RUBY - - message = "_1 is reserved for numbered parameters" - assert_errors expression(source), source, [ - [message, 5..7], - [message, 13..15], - [message, 24..26], - [message, 35..37], - [message, 42..44] - ] - end - - def test_symbol_in_keyword_parameter - source = "def foo(x:'y':); end" - assert_errors expression(source), source, [ - ["unexpected label terminator, expected a string literal terminator", 12..14] - ] - end - - def test_symbol_in_hash - source = "{x:'y':}" - assert_errors expression(source), source, [ - ["unexpected label terminator, expected a string literal terminator", 5..7] - ] - end - - def test_while_endless_method - source = "while def f = g do end" - - assert_errors expression(source), source, [ - ["expected a predicate expression for the `while` statement", 22..22], - ["unexpected end-of-input, assuming it is closing the parent top level context", 22..22], - ["expected an `end` to close the `while` statement", 22..22] - ] - end - - def test_match_plus - source = <<~RUBY - a in b + c - a => b + c - RUBY - - assert_errors expression(source), source, [ - ["unexpected '+', expecting end-of-input", 7..8], - ["unexpected '+', ignoring it", 7..8], - ["unexpected '+', expecting end-of-input", 18..19], - ["unexpected '+', ignoring it", 18..19] - ] - end - - def test_rational_number_with_exponential_portion - source = '1e1r; 1e1ri' - - assert_errors expression(source), source, [ - ["unexpected local variable or method, expecting end-of-input", 3..4], - ["unexpected local variable or method, expecting end-of-input", 9..11] - ] - end - - def test_check_value_expression - source = <<~RUBY - 1 => ^(return) - while true - 1 => ^(break) - 1 => ^(next) - 1 => ^(redo) - 1 => ^(retry) - 1 => ^(2 => a) - end - 1 => ^(if 1; (return) else (return) end) - 1 => ^(unless 1; (return) else (return) end) - RUBY - - message = "unexpected void value expression" - assert_errors expression(source), source, [ - [message, 7..13], - [message, 35..40], - [message, 51..55], - [message, 66..70], - ["Invalid retry without rescue", 81..86], - [message, 81..86], - [message, 97..103], - [message, 123..129], - [message, 168..174], - ] - end - - def test_void_value_expression_in_statement - source = <<~RUBY - if (return) - end - unless (return) - end - while (return) - end - until (return) - end - case (return) - when 1 - end - class A < (return) - end - class << (return) - end - for x in (return) - end - RUBY - - message = 'unexpected void value expression' - assert_errors expression(source), source, [ - [message, 4..10], - [message, 24..30], - [message, 43..49], - [message, 62..68], - [message, 80..86], - [message, 110..116], - [message, 132..138], - [message, 154..160], - ] - end - - def test_void_value_expression_in_begin_statement - source = <<~RUBY - x = return 1 - x = return, 1 - x = 1, return - x, y = return - x = begin return ensure end - x = begin ensure return end - x = begin return ensure return end - x = begin return; rescue; return end - x = begin return; rescue; return; else return end - x = begin; return; rescue; retry; end - RUBY - - message = 'unexpected void value expression' - assert_errors expression(source), source, [ - [message, 4..12], - [message, 17..23], - [message, 34..40], - [message, 48..54], - [message, 65..71], - [message, 100..106], - [message, 121..127], - [message, 156..162], - [message, 222..228], - [message, 244..250], - ] - - refute_error_messages("x = begin return; rescue; end") - refute_error_messages("x = begin return; rescue; return; else end") - refute_error_messages("x = begin; rescue; retry; end") - refute_error_messages("x = begin 1; rescue; retry; ensure; end") - refute_error_messages("x = begin 1; rescue; return; end") - end - - def test_void_value_expression_in_def - source = <<~RUBY - def (return).x - end - def x(a = return) - end - def x(a: return) - end - RUBY - - message = 'unexpected void value expression' - assert_errors expression(source), source, [ - [message, 5..11], - [message, 29..35], - [message, 50..56], - ] - end - - def test_void_value_expression_in_assignment - source = <<~RUBY - a = return - a = 1, return - a, b = return, 1 - a, b = 1, *return - RUBY - - message = 'unexpected void value expression' - assert_errors expression(source), source, [ - [message, 4..10], - [message, 18..24], - [message, 32..38], - [message, 53..59], - ] - end - - def test_void_value_expression_in_modifier - source = <<~RUBY - 1 if (return) - 1 unless (return) - 1 while (return) - 1 until (return) - (return) => a - (return) in a - RUBY - - message = 'unexpected void value expression' - assert_errors expression(source), source, [ - [message, 6..12], - [message, 24..30], - [message, 41..47], - [message, 58..64], - [message, 67..73], - [message, 81..87] - ] - end - - def test_void_value_expression_in_expression - source = <<~RUBY - (return) ? 1 : 1 - (return)..1 - 1..(return) - (return)...1 - 1...(return) - (..(return)) - (...(return)) - ((return)..) - ((return)...) - RUBY - - message = 'unexpected void value expression' - assert_errors expression(source), source, [ - [message, 1..7], - [message, 18..24], - [message, 33..39], - [message, 42..48], - [message, 59..65], - [message, 71..77], - [message, 85..91], - [message, 96..102], - [message, 109..115] - ] - end - - def test_void_value_expression_in_array - source = <<~RUBY - [return] - [1, return] - [ return => 1 ] - [ 1 => return ] - [ a: return ] - [ *return ] - [ **return ] - RUBY - - message = 'unexpected void value expression' - assert_errors expression(source), source, [ - [message, 1..7], - [message, 13..19], - [message, 23..29], - [message, 44..50], - [message, 58..64], - [message, 70..76], - [message, 83..89], - ] - end - - def test_void_value_expression_in_hash - source = <<~RUBY - { return => 1 } - { 1 => return } - { a: return } - { **return } - RUBY - - message = 'unexpected void value expression' - assert_errors expression(source), source, [ - [message, 2..8], - [message, 23..29], - [message, 37..43], - [message, 50..56], - ] - end - - def test_void_value_expression_in_call - source = <<~RUBY - (return).foo - (return).(1) - (return)[1] - (return)[1] = 2 - (return)::foo - RUBY - - message = 'unexpected void value expression' - assert_errors expression(source), source, [ - [message, 1..7], - [message, 14..20], - [message, 27..33], - [message, 39..45], - [message, 55..61], - ] - end - - def test_void_value_expression_in_constant_path - source = <<~RUBY - (return)::A - class (return)::A; end - RUBY - - message = 'unexpected void value expression' - assert_errors expression(source), source, [ - [message, 1..7], - [message, 19..25], - ] - end - - def test_void_value_expression_in_arguments - source = <<~RUBY - foo(return) - foo(1, return) - foo(*return) - foo(**return) - foo(&return) - foo(return => 1) - foo(:a => return) - foo(a: return) - RUBY - - message = 'unexpected void value expression' - assert_errors expression(source), source, [ - [message, 4..10], - [message, 19..25], - [message, 32..38], - [message, 46..52], - [message, 59..65], - [message, 71..77], - [message, 94..100], - [message, 109..115], - ] - end - - def test_void_value_expression_in_unary_call - source = <<~RUBY - +(return) - not return - RUBY - - message = 'unexpected void value expression' - assert_errors expression(source), source, [ - [message, 2..8], - [message, 14..20], - ] - end - - def test_void_value_expression_in_binary_call + def test_embdoc_ending source = <<~RUBY - 1 + (return) - (return) + 1 - 1 and (return) - (return) and 1 - 1 or (return) - (return) or 1 + =begin\n=end + =begin\n=end\0 + =begin\n=end\C-d + =begin\n=end\C-z RUBY - message = 'unexpected void value expression' - assert_errors expression(source), source, [ - [message, 5..11], - [message, 14..20], - [message, 42..48], - [message, 71..77], - ] - end - - def test_trailing_comma_in_calls - assert_errors expression("foo 1,"), "foo 1,", [ - ["expected an argument", 5..6] - ] - end - - def test_argument_after_ellipsis - source = 'def foo(...); foo(..., 1); end' - assert_errors expression(source), source, [ - ['unexpected argument after `...`', 23..24] - ] - end - - def test_ellipsis_in_no_paren_call - source = 'def foo(...); foo 1, ...; end' - assert_errors expression(source), source, [ - ['unexpected `...` in an non-parenthesized call', 21..24] - ] - end - - def test_non_assoc_range - source = '1....2' - - assert_errors expression(source), source, [ - ["unexpected '.', expecting end-of-input", 4..5], - ["unexpected '.', ignoring it", 4..5] - ] - end - - def test_upcase_end_in_def - assert_warning_messages "def foo; END { }; end", [ - "END in method; use at_exit" - ] + source.each_line do |line| + assert_valid_syntax(source) + assert_predicate Prism.parse(source), :success? + end end - def test_warnings_verbosity - warning = Prism.parse("def foo; END { }; end").warnings[0] - assert_equal "END in method; use at_exit", warning.message - assert_equal :default, warning.level - - warning = Prism.parse("foo /regexp/").warnings[0] - assert_equal "ambiguous `/`; wrap regexp in parentheses or add a space after `/` operator", warning.message - assert_equal :verbose, warning.level + def test_unterminated_string_closing + statement = Prism.parse_statement("'hello") + assert_equal statement.unescaped, "hello" + assert_empty statement.closing end - def test_statement_operators - source = <<~RUBY - alias x y + 1 - alias x y.z - BEGIN { bar } + 1 - BEGIN { bar }.z - END { bar } + 1 - END { bar }.z - undef x + 1 - undef x.z - RUBY - - assert_errors expression(source), source, [ - ["unexpected '+', expecting end-of-input", 10..11], - ["unexpected '+', ignoring it", 10..11], - ["unexpected '.', expecting end-of-input", 23..24], - ["unexpected '.', ignoring it", 23..24], - ["unexpected '+', expecting end-of-input", 40..41], - ["unexpected '+', ignoring it", 40..41], - ["unexpected '.', expecting end-of-input", 57..58], - ["unexpected '.', ignoring it", 57..58], - ["unexpected '+', expecting end-of-input", 72..73], - ["unexpected '+', ignoring it", 72..73], - ["unexpected '.', expecting end-of-input", 87..88], - ["unexpected '.', ignoring it", 87..88], - ["unexpected '+', expecting end-of-input", 98..99], - ["unexpected '+', ignoring it", 98..99], - ["unexpected '.', expecting end-of-input", 109..110], - ["unexpected '.', ignoring it", 109..110] - ] + def test_unterminated_interpolated_string_closing + statement = Prism.parse_statement('"hello') + assert_equal statement.unescaped, "hello" + assert_empty statement.closing end - def test_statement_at_non_statement - source = <<~RUBY - foo(alias x y) - foo(BEGIN { bar }) - foo(END { bar }) - foo(undef x) - RUBY - assert_errors expression(source), source, [ - ['unexpected an `alias` at a non-statement position', 4..9], - ['unexpected a `BEGIN` at a non-statement position', 19..24], - ['unexpected an `END` at a non-statement position', 38..41], - ['unexpected an `undef` at a non-statement position', 55..60], - ] + def test_unterminated_empty_string_closing + statement = Prism.parse_statement('"') + assert_empty statement.unescaped + assert_empty statement.closing end - def test_binary_range_with_left_unary_range - source = <<~RUBY - ..1.. - ...1.. - RUBY - - assert_errors expression(source), source, [ - ["unexpected range operator; .. and ... are non-associative and cannot be chained", 3..5], - ["unexpected range operator; .. and ... are non-associative and cannot be chained", 10..12], - ["unexpected .., expecting end-of-input", 10..12], - ["unexpected .., ignoring it", 10..12] - ] + def test_invalid_message_name + assert_equal :"", Prism.parse_statement("+.@foo,+=foo").write_name end - def test_circular_param + def test_circular_parameters source = <<~RUBY def foo(bar = bar) = 42 def foo(bar: bar) = 42 @@ -2001,294 +68,26 @@ def foo(bar: bar) = 42 proc { |foo: foo| } RUBY - assert_errors( - expression(source), - source, - [ - ["circular argument reference - bar", 8..11], - ["circular argument reference - bar", 32..35], - ["circular argument reference - foo", 55..58], - ["circular argument reference - foo", 76..79] - ], - check_valid_syntax: false, - version: "3.3.0" - ) - - refute_error_messages("def foo(bar: bar = 1); end") - end - - def test_command_calls - sources = <<~RUBY.lines - [a b] - {a: b c} - ...a b - if ...a b; end - a b, c d - a(b, c d) - a(*b c) - a(**b c) - a(&b c) - +a b - a + b c - a && b c - a =~ b c - a = b, c d - a = *b c - a, b = c = d f - a ? b c : d e - defined? a b - ! ! a b - def f a = b c; end - def f(a = b c); end - a = b rescue c d - def a = b rescue c d - ->a=b c{} - ->(a=b c){} - case; when a b; end - case; in a if a b; end - case; in a unless a b; end - begin; rescue a b; end - begin; rescue a b => c; end - RUBY - - sources.each do |source| - refute_valid_syntax(source) - assert_false(Prism.parse(source).success?) - end - end - - def test_range_and_bin_op - sources = <<~RUBY.lines - 1..2..3 - 1..2.. - 1.. || 2 - 1.. & 2 - 1.. * 2 - 1.. / 2 - 1.. % 2 - 1.. ** 2 - RUBY - - sources.each do |source| - refute_valid_syntax(source) - assert_false(Prism.parse(source).success?) + source.each_line do |line| + assert_predicate Prism.parse(line, version: "3.3.0"), :failure? + assert_predicate Prism.parse(line), :success? end end - def test_command_call_in - source = <<~RUBY - foo 1 in a - a = foo 2 in b - RUBY - - assert_errors expression(source), source, [ - ["unexpected `in` keyword in arguments", 9..10], - ["unexpected local variable or method, expecting end-of-input", 9..10], - ["unexpected `in` keyword in arguments", 24..25], - ["unexpected local variable or method, expecting end-of-input", 24..25] - ] - end - - def test_constant_assignment_in_method - source = 'def foo();A=1;end' - assert_errors expression(source), source, [ - ['dynamic constant assignment', 10..13] - ] - end - - def test_non_assoc_equality - source = <<~RUBY - 1 == 2 == 3 - 1 != 2 != 3 - 1 === 2 === 3 - 1 =~ 2 =~ 3 - 1 !~ 2 !~ 3 - 1 <=> 2 <=> 3 - RUBY - - assert_errors expression(source), source, [ - ["unexpected '==', expecting end-of-input", 7..9], - ["unexpected '==', ignoring it", 7..9], - ["unexpected '!=', expecting end-of-input", 19..21], - ["unexpected '!=', ignoring it", 19..21], - ["unexpected '===', expecting end-of-input", 32..35], - ["unexpected '===', ignoring it", 32..35], - ["unexpected '=~', expecting end-of-input", 45..47], - ["unexpected '=~', ignoring it", 45..47], - ["unexpected '!~', expecting end-of-input", 57..59], - ["unexpected '!~', ignoring it", 57..59], - ["unexpected '<=>', expecting end-of-input", 70..73], - ["unexpected '<=>', ignoring it", 70..73] - ] - end - - def test_block_arg_and_block - source = 'foo(&1) { }' - assert_errors expression(source), source, [ - ["both block arg and actual block given; only one block is allowed", 8..11] - ] - end - - def test_forwarding_arg_and_block - source = 'def foo(...) = foo(...) { }' - assert_errors expression(source), source, [ - ['both block arg and actual block given; only one block is allowed', 24..27] - ] - end - - def test_it_with_ordinary_parameter - source = "proc { || it }" - errors = [["`it` is not allowed when an ordinary parameter is defined", 10..12]] - - assert_errors expression(source), source, errors, check_valid_syntax: RUBY_VERSION >= "3.4.0" - end - - def test_regular_expression_with_unknown_regexp_options - source = "/foo/AZaz" - errors = [["unknown regexp options - AZaz", 4..9]] - - assert_errors expression(source), source, errors - end - - def test_interpolated_regular_expression_with_unknown_regexp_options - source = "/\#{foo}/AZaz" - errors = [["unknown regexp options - AZaz", 7..12]] - - assert_errors expression(source), source, errors - end - - def test_singleton_method_for_literals - source = <<~'RUBY' - def (1).g; end - def ((a; 1)).foo; end - def ((return; 1)).bar; end - def (((1))).foo; end - def (__FILE__).foo; end - def (__ENCODING__).foo; end - def (__LINE__).foo; end - def ("foo").foo; end - def (3.14).foo; end - def (3.14i).foo; end - def (:foo).foo; end - def (:'foo').foo; end - def (:'f{o}').foo; end - def ('foo').foo; end - def ("foo").foo; end - def ("#{fo}o").foo; end - def (/foo/).foo; end - def (/f#{oo}/).foo; end - def ([1]).foo; end - RUBY - errors = [ - ["cannot define singleton method for literals", 5..6], - ["cannot define singleton method for literals", 24..25], - ["cannot define singleton method for literals", 51..52], - ["cannot define singleton method for literals", 71..72], - ["cannot define singleton method for literals", 90..98], - ["cannot define singleton method for literals", 114..126], - ["cannot define singleton method for literals", 142..150], - ["cannot define singleton method for literals", 166..171], - ["cannot define singleton method for literals", 187..191], - ["cannot define singleton method for literals", 207..212], - ["cannot define singleton method for literals", 228..232], - ["cannot define singleton method for literals", 248..254], - ["cannot define singleton method for literals", 270..277], - ["cannot define singleton method for literals", 293..298], - ["cannot define singleton method for literals", 314..319], - ["cannot define singleton method for literals", 335..343], - ["cannot define singleton method for literals", 359..364], - ["cannot define singleton method for literals", 380..388], - ["cannot define singleton method for literals", 404..407] - ] - assert_errors expression(source), source, errors - end - - def test_assignment_to_literal_in_conditionals - source = <<~RUBY - if (a = 2); end - if ($a = 2); end - if (@a = 2); end - if (@@a = 2); end - if a elsif b = 2; end - unless (a = 2); end - unless ($a = 2); end - unless (@a = 2); end - unless (@@a = 2); end - while (a = 2); end - while ($a = 2); end - while (@a = 2); end - while (@@a = 2); end - until (a = 2); end - until ($a = 2); end - until (@a = 2); end - until (@@a = 2); end - foo if a = 2 - foo if (a, b = 2) - (@foo = 1) ? a : b - !(a = 2) - not a = 2 - RUBY - assert_warning_messages source, [ - "found '= literal' in conditional, should be ==" - ] * source.lines.count - end - - def test_duplicate_pattern_capture - source = <<~RUBY - case (); in [a, a]; end - case (); in [a, *a]; end - case (); in {a: a, b: a}; end - case (); in {a: a, **a}; end - case (); in [a, {a:}]; end - case (); in [a, {a: {a: {a: [a]}}}]; end - case (); in a => a; end - case (); in [A => a, {a: b => a}]; end - RUBY - - assert_error_messages source, Array.new(source.lines.length, "duplicated variable name") - refute_error_messages "case (); in [_a, _a]; end" - end - - def test_duplicate_pattern_hash_key - assert_error_messages "case (); in {a:, a:}; end", ["duplicated key name", "duplicated variable name"] - assert_error_messages "case (); in {a:1, a:2}; end", ["duplicated key name"] - refute_error_messages "case (); in [{a:1}, {a:2}]; end" - end - - def test_unexpected_block - assert_error_messages "def foo = yield(&:+)", ["block argument should not be given"] - end - private - def assert_errors(expected, source, errors, check_valid_syntax: true, **options) - refute_valid_syntax(source) if check_valid_syntax + def assert_errors(filepath) + expected = File.read(filepath) - result = Prism.parse(source, **options) - node = result.value.statements.body.last - - assert_equal_nodes(expected, node, compare_location: false) - assert_equal(errors, result.errors.map { |e| [e.message, e.location.start_offset..e.location.end_offset] }) - end - - def assert_error_messages(source, errors) + source = expected.lines.grep_v(/^\s*\^/).join.gsub(/\n*\z/, "") refute_valid_syntax(source) - result = Prism.parse(source) - assert_equal(errors, result.errors.map(&:message)) - end - - def refute_error_messages(source) - assert_valid_syntax(source) - assert Prism.parse_success?(source), "Expected #{source.inspect} to parse successfully" - end - def assert_warning_messages(source, warnings) result = Prism.parse(source) - assert_equal(warnings, result.warnings.map(&:message)) - end + errors = result.errors + refute_empty errors, "Expected errors in #{filepath}" - def expression(source) - Prism.parse(source).value.statements.body.last + actual = result.errors_format + assert_equal expected, actual, "Expected errors to match for #{filepath}" end end end diff --git a/test/prism/fixtures/patterns.txt b/test/prism/fixtures/patterns.txt index 7ce3b9e4a8e..29f8b4cf808 100644 --- a/test/prism/fixtures/patterns.txt +++ b/test/prism/fixtures/patterns.txt @@ -215,3 +215,6 @@ foo => Object[{x:}] a, b ) = c + +case (); in [_a, _a]; end +case (); in [{a:1}, {a:2}]; end diff --git a/test/prism/result/warnings_test.rb b/test/prism/result/warnings_test.rb index ea062d42215..747440dd76e 100644 --- a/test/prism/result/warnings_test.rb +++ b/test/prism/result/warnings_test.rb @@ -75,6 +75,37 @@ def test_integer_in_flip_flop assert_warning("1 if 2..foo", "integer") end + def test_literal_in_conditionals + source = <<~RUBY + if (a = 2); a; end + if ($a = 2); end + if (@a = 2); end + if (@@a = 2); end + if a; elsif b = 2; b end + unless (a = 2); a; end + unless ($a = 2); end + unless (@a = 2); end + unless (@@a = 2); end + while (a = 2); a; end + while ($a = 2); end + while (@a = 2); end + while (@@a = 2); end + until (a = 2); a; end + until ($a = 2); end + until (@a = 2); end + until (@@a = 2); end + foo if (a, b = 2); [a, b] + foo if a = 2 and a + (@foo = 1) ? a : b + !(a = 2) and a + not a = 2 and a + RUBY + + source.each_line(chomp: true) do |line| + assert_warning(line, "found '= literal' in conditional, should be ==") + end + end + def test_keyword_eol assert_warning("if\ntrue; end", "end of line") assert_warning("if true\nelsif\nfalse; end", "end of line") @@ -227,12 +258,22 @@ def test_unreachable_statement assert_warning("tap { redo; foo }", "statement not reached") end + def test_warnings_verbosity + warning = Prism.parse("def foo; END { }; end").warnings.first + assert_equal "END in method; use at_exit", warning.message + assert_equal :default, warning.level + + warning = Prism.parse("foo /regexp/").warnings.first + assert_equal "ambiguous `/`; wrap regexp in parentheses or add a space after `/` operator", warning.message + assert_equal :verbose, warning.level + end + private def assert_warning(source, message) warnings = Prism.parse(source).warnings - assert_equal 1, warnings.length + assert_equal 1, warnings.length, "Expected only one warning in #{source.inspect}, got #{warnings.map(&:message).inspect}" assert_include warnings.first.message, message if defined?(RubyVM::AbstractSyntaxTree) From 4cc0eda4cacc6791f926af96567a8ee8acc68b3e Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 2 Jul 2024 14:27:04 -0400 Subject: [PATCH 024/109] Move location to second position for node initializers --- lib/prism/desugar_compiler.rb | 185 +++++++++++------- lib/prism/node_ext.rb | 20 +- lib/prism/parse_result.rb | 13 +- lib/prism/parse_result/errors.rb | 5 + templates/ext/prism/api_node.c.erb | 8 +- templates/lib/prism/dsl.rb.erb | 115 +++++++++-- templates/lib/prism/node.rb.erb | 10 +- templates/lib/prism/serialize.rb.erb | 12 +- .../content_after_unterminated_heredoc.txt | 2 + test/prism/snapshots/patterns.txt | 144 +++++++++++--- 10 files changed, 363 insertions(+), 151 deletions(-) diff --git a/lib/prism/desugar_compiler.rb b/lib/prism/desugar_compiler.rb index de024451493..c51bdd2b1cf 100644 --- a/lib/prism/desugar_compiler.rb +++ b/lib/prism/desugar_compiler.rb @@ -2,11 +2,13 @@ module Prism class DesugarAndWriteNode # :nodoc: - attr_reader :node, :source, :read_class, :write_class, :arguments + include DSL - def initialize(node, source, read_class, write_class, *arguments) + attr_reader :node, :default_source, :read_class, :write_class, :arguments + + def initialize(node, default_source, read_class, write_class, **arguments) @node = node - @source = source + @default_source = default_source @read_class = read_class @write_class = write_class @arguments = arguments @@ -14,22 +16,30 @@ def initialize(node, source, read_class, write_class, *arguments) # Desugar `x &&= y` to `x && x = y` def compile - AndNode.new( - source, - read_class.new(source, *arguments, node.name_loc), - write_class.new(source, *arguments, node.name_loc, node.value, node.operator_loc, node.location), - node.operator_loc, - node.location + and_node( + location: node.location, + left: public_send(read_class, location: node.name_loc, **arguments), + right: public_send( + write_class, + location: node.location, + **arguments, + name_loc: node.name_loc, + value: node.value, + operator_loc: node.operator_loc + ), + operator_loc: node.operator_loc ) end end class DesugarOrWriteDefinedNode # :nodoc: - attr_reader :node, :source, :read_class, :write_class, :arguments + include DSL + + attr_reader :node, :default_source, :read_class, :write_class, :arguments - def initialize(node, source, read_class, write_class, *arguments) + def initialize(node, default_source, read_class, write_class, **arguments) @node = node - @source = source + @default_source = default_source @read_class = read_class @write_class = write_class @arguments = arguments @@ -37,35 +47,50 @@ def initialize(node, source, read_class, write_class, *arguments) # Desugar `x ||= y` to `defined?(x) ? x : x = y` def compile - IfNode.new( - source, - node.operator_loc, - DefinedNode.new(source, nil, read_class.new(source, *arguments, node.name_loc), nil, node.operator_loc, node.name_loc), - node.operator_loc, - StatementsNode.new(source, [read_class.new(source, *arguments, node.name_loc)], node.location), - ElseNode.new( - source, - node.operator_loc, - StatementsNode.new( - source, - [write_class.new(source, *arguments, node.name_loc, node.value, node.operator_loc, node.location)], - node.location + if_node( + location: node.location, + if_keyword_loc: node.operator_loc, + predicate: defined_node( + location: node.name_loc, + value: public_send(read_class, location: node.name_loc, **arguments), + keyword_loc: node.operator_loc + ), + then_keyword_loc: node.operator_loc, + statements: statements_node( + location: node.location, + body: [public_send(read_class, location: node.name_loc, **arguments)] + ), + consequent: else_node( + location: node.location, + else_keyword_loc: node.operator_loc, + statements: statements_node( + location: node.location, + body: [ + public_send( + write_class, + location: node.location, + **arguments, + name_loc: node.name_loc, + value: node.value, + operator_loc: node.operator_loc + ) + ] ), - node.operator_loc, - node.location + end_keyword_loc: node.operator_loc ), - node.operator_loc, - node.location + end_keyword_loc: node.operator_loc ) end end class DesugarOperatorWriteNode # :nodoc: - attr_reader :node, :source, :read_class, :write_class, :arguments + include DSL - def initialize(node, source, read_class, write_class, *arguments) + attr_reader :node, :default_source, :read_class, :write_class, :arguments + + def initialize(node, default_source, read_class, write_class, **arguments) @node = node - @source = source + @default_source = default_source @read_class = read_class @write_class = write_class @arguments = arguments @@ -75,35 +100,41 @@ def initialize(node, source, read_class, write_class, *arguments) def compile binary_operator_loc = node.binary_operator_loc.chop - write_class.new( - source, - *arguments, - node.name_loc, - CallNode.new( - source, - 0, - read_class.new(source, *arguments, node.name_loc), - nil, - binary_operator_loc.slice.to_sym, - binary_operator_loc, - nil, - ArgumentsNode.new(source, 0, [node.value], node.value.location), - nil, - nil, - node.location + public_send( + write_class, + location: node.location, + **arguments, + name_loc: node.name_loc, + value: call_node( + location: node.location, + receiver: public_send( + read_class, + location: node.name_loc, + **arguments + ), + name: binary_operator_loc.slice.to_sym, + message_loc: binary_operator_loc, + arguments: arguments_node( + location: node.value.location, + arguments: [node.value] + ) ), - node.binary_operator_loc.copy(start_offset: node.binary_operator_loc.end_offset - 1, length: 1), - node.location + operator_loc: node.binary_operator_loc.copy( + start_offset: node.binary_operator_loc.end_offset - 1, + length: 1 + ) ) end end class DesugarOrWriteNode # :nodoc: - attr_reader :node, :source, :read_class, :write_class, :arguments + include DSL - def initialize(node, source, read_class, write_class, *arguments) + attr_reader :node, :default_source, :read_class, :write_class, :arguments + + def initialize(node, default_source, read_class, write_class, **arguments) @node = node - @source = source + @default_source = default_source @read_class = read_class @write_class = write_class @arguments = arguments @@ -111,12 +142,18 @@ def initialize(node, source, read_class, write_class, *arguments) # Desugar `x ||= y` to `x || x = y` def compile - OrNode.new( - source, - read_class.new(source, *arguments, node.name_loc), - write_class.new(source, *arguments, node.name_loc, node.value, node.operator_loc, node.location), - node.operator_loc, - node.location + or_node( + location: node.location, + left: public_send(read_class, location: node.name_loc, **arguments), + right: public_send( + write_class, + location: node.location, + **arguments, + name_loc: node.name_loc, + value: node.value, + operator_loc: node.operator_loc + ), + operator_loc: node.operator_loc ) end end @@ -125,91 +162,91 @@ def compile class ClassVariableAndWriteNode def desugar # :nodoc: - DesugarAndWriteNode.new(self, source, ClassVariableReadNode, ClassVariableWriteNode, name).compile + DesugarAndWriteNode.new(self, source, :class_variable_read_node, :class_variable_write_node, name: name).compile end end class ClassVariableOrWriteNode def desugar # :nodoc: - DesugarOrWriteDefinedNode.new(self, source, ClassVariableReadNode, ClassVariableWriteNode, name).compile + DesugarOrWriteDefinedNode.new(self, source, :class_variable_read_node, :class_variable_write_node, name: name).compile end end class ClassVariableOperatorWriteNode def desugar # :nodoc: - DesugarOperatorWriteNode.new(self, source, ClassVariableReadNode, ClassVariableWriteNode, name).compile + DesugarOperatorWriteNode.new(self, source, :class_variable_read_node, :class_variable_write_node, name: name).compile end end class ConstantAndWriteNode def desugar # :nodoc: - DesugarAndWriteNode.new(self, source, ConstantReadNode, ConstantWriteNode, name).compile + DesugarAndWriteNode.new(self, source, :constant_read_node, :constant_write_node, name: name).compile end end class ConstantOrWriteNode def desugar # :nodoc: - DesugarOrWriteDefinedNode.new(self, source, ConstantReadNode, ConstantWriteNode, name).compile + DesugarOrWriteDefinedNode.new(self, source, :constant_read_node, :constant_write_node, name: name).compile end end class ConstantOperatorWriteNode def desugar # :nodoc: - DesugarOperatorWriteNode.new(self, source, ConstantReadNode, ConstantWriteNode, name).compile + DesugarOperatorWriteNode.new(self, source, :constant_read_node, :constant_write_node, name: name).compile end end class GlobalVariableAndWriteNode def desugar # :nodoc: - DesugarAndWriteNode.new(self, source, GlobalVariableReadNode, GlobalVariableWriteNode, name).compile + DesugarAndWriteNode.new(self, source, :global_variable_read_node, :global_variable_write_node, name: name).compile end end class GlobalVariableOrWriteNode def desugar # :nodoc: - DesugarOrWriteDefinedNode.new(self, source, GlobalVariableReadNode, GlobalVariableWriteNode, name).compile + DesugarOrWriteDefinedNode.new(self, source, :global_variable_read_node, :global_variable_write_node, name: name).compile end end class GlobalVariableOperatorWriteNode def desugar # :nodoc: - DesugarOperatorWriteNode.new(self, source, GlobalVariableReadNode, GlobalVariableWriteNode, name).compile + DesugarOperatorWriteNode.new(self, source, :global_variable_read_node, :global_variable_write_node, name: name).compile end end class InstanceVariableAndWriteNode def desugar # :nodoc: - DesugarAndWriteNode.new(self, source, InstanceVariableReadNode, InstanceVariableWriteNode, name).compile + DesugarAndWriteNode.new(self, source, :instance_variable_read_node, :instance_variable_write_node, name: name).compile end end class InstanceVariableOrWriteNode def desugar # :nodoc: - DesugarOrWriteNode.new(self, source, InstanceVariableReadNode, InstanceVariableWriteNode, name).compile + DesugarOrWriteNode.new(self, source, :instance_variable_read_node, :instance_variable_write_node, name: name).compile end end class InstanceVariableOperatorWriteNode def desugar # :nodoc: - DesugarOperatorWriteNode.new(self, source, InstanceVariableReadNode, InstanceVariableWriteNode, name).compile + DesugarOperatorWriteNode.new(self, source, :instance_variable_read_node, :instance_variable_write_node, name: name).compile end end class LocalVariableAndWriteNode def desugar # :nodoc: - DesugarAndWriteNode.new(self, source, LocalVariableReadNode, LocalVariableWriteNode, name, depth).compile + DesugarAndWriteNode.new(self, source, :local_variable_read_node, :local_variable_write_node, name: name, depth: depth).compile end end class LocalVariableOrWriteNode def desugar # :nodoc: - DesugarOrWriteNode.new(self, source, LocalVariableReadNode, LocalVariableWriteNode, name, depth).compile + DesugarOrWriteNode.new(self, source, :local_variable_read_node, :local_variable_write_node, name: name, depth: depth).compile end end class LocalVariableOperatorWriteNode def desugar # :nodoc: - DesugarOperatorWriteNode.new(self, source, LocalVariableReadNode, LocalVariableWriteNode, name, depth).compile + DesugarOperatorWriteNode.new(self, source, :local_variable_read_node, :local_variable_write_node, name: name, depth: depth).compile end end diff --git a/lib/prism/node_ext.rb b/lib/prism/node_ext.rb index aa6a18cf296..fe36be8541b 100644 --- a/lib/prism/node_ext.rb +++ b/lib/prism/node_ext.rb @@ -69,11 +69,11 @@ class StringNode < Node def to_interpolated InterpolatedStringNode.new( source, + location, frozen? ? InterpolatedStringNodeFlags::FROZEN : 0, opening_loc, - [copy(opening_loc: nil, closing_loc: nil, location: content_loc)], - closing_loc, - location + [copy(location: content_loc, opening_loc: nil, closing_loc: nil)], + closing_loc ) end end @@ -86,10 +86,10 @@ class XStringNode < Node def to_interpolated InterpolatedXStringNode.new( source, + location, opening_loc, - [StringNode.new(source, 0, nil, content_loc, nil, unescaped, content_loc)], - closing_loc, - location + [StringNode.new(source, content_loc, 0, nil, content_loc, nil, unescaped)], + closing_loc ) end end @@ -115,9 +115,9 @@ def numeric deprecated("value", "numerator", "denominator") if denominator == 1 - IntegerNode.new(source, flags, numerator, location.chop) + IntegerNode.new(source, location.chop, flags, numerator) else - FloatNode.new(source, numerator.to_f / denominator, location.chop) + FloatNode.new(source, location.chop, numerator.to_f / denominator) end end end @@ -195,7 +195,7 @@ def full_name # continue to supply that API. def child deprecated("name", "name_loc") - name ? ConstantReadNode.new(source, name, name_loc) : MissingNode.new(source, location) + name ? ConstantReadNode.new(source, name_loc, name) : MissingNode.new(source, location) end end @@ -231,7 +231,7 @@ def full_name # continue to supply that API. def child deprecated("name", "name_loc") - name ? ConstantReadNode.new(source, name, name_loc) : MissingNode.new(source, location) + name ? ConstantReadNode.new(source, name_loc, name) : MissingNode.new(source, location) end end diff --git a/lib/prism/parse_result.rb b/lib/prism/parse_result.rb index cc4f9422833..ae572427077 100644 --- a/lib/prism/parse_result.rb +++ b/lib/prism/parse_result.rb @@ -10,7 +10,11 @@ class Source # specialized and more performant `ASCIISource` if no multibyte characters # are present in the source code. def self.for(source, start_line = 1, offsets = []) - source.ascii_only? ? ASCIISource.new(source, start_line, offsets): new(source, start_line, offsets) + if source.ascii_only? + ASCIISource.new(source, start_line, offsets) + else + new(source, start_line, offsets) + end end # The source code that this source object represents. @@ -87,7 +91,12 @@ def character_column(byte_offset) # encodings, it is not captured here. def code_units_offset(byte_offset, encoding) byteslice = (source.byteslice(0, byte_offset) or raise).encode(encoding) - (encoding == Encoding::UTF_16LE || encoding == Encoding::UTF_16BE) ? (byteslice.bytesize / 2) : byteslice.length + + if encoding == Encoding::UTF_16LE || encoding == Encoding::UTF_16BE + byteslice.bytesize / 2 + else + byteslice.length + end end # Returns the column number in code units for the given encoding for the diff --git a/lib/prism/parse_result/errors.rb b/lib/prism/parse_result/errors.rb index 40dda3c2642..1eaeebee6e4 100644 --- a/lib/prism/parse_result/errors.rb +++ b/lib/prism/parse_result/errors.rb @@ -4,13 +4,18 @@ module Prism class ParseResult < Result + # An object to represent the set of errors on a parse result. This object + # can be used to format the errors in a human-readable way. class Errors + # The parse result that contains the errors. attr_reader :parse_result + # Initialize a new set of errors from the given parse result. def initialize(parse_result) @parse_result = parse_result end + # Formats the errors in a human-readable way and return them as a string. def format error_lines = {} parse_result.errors.each do |error| diff --git a/templates/ext/prism/api_node.c.erb b/templates/ext/prism/api_node.c.erb index de6f4b95fd4..258c61f3198 100644 --- a/templates/ext/prism/api_node.c.erb +++ b/templates/ext/prism/api_node.c.erb @@ -177,7 +177,10 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi // source argv[0] = source; - <%- node.fields.each.with_index(1) do |field, index| -%> + + // location + argv[1] = pm_location_new(parser, node->location.start, node->location.end); + <%- node.fields.each.with_index(2) do |field, index| -%> // <%= field.name %> <%- case field -%> @@ -232,9 +235,6 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi <%- end -%> <%- end -%> - // location - argv[<%= node.fields.length + 1 %>] = pm_location_new(parser, node->location.start, node->location.end); - rb_ary_push(value_stack, rb_class_new_instance(<%= node.fields.length + 2 %>, argv, rb_cPrism<%= node.name %>)); break; } diff --git a/templates/lib/prism/dsl.rb.erb b/templates/lib/prism/dsl.rb.erb index eff0d1c4fcf..4f61d71a2a0 100644 --- a/templates/lib/prism/dsl.rb.erb +++ b/templates/lib/prism/dsl.rb.erb @@ -5,45 +5,118 @@ module Prism # source = Prism::Source.for("[1]") # # Prism::ArrayNode.new( + # source, + # Prism::Location.new(source, 0, 3), + # 0, # [ # Prism::IntegerNode.new( - # Prism::IntegerBaseFlags::DECIMAL, - # 1, + # source, # Prism::Location.new(source, 1, 1), - # source + # Prism::IntegerBaseFlags::DECIMAL, + # 1 # ) # ], # Prism::Location.new(source, 0, 1), - # Prism::Location.new(source, 2, 1), - # source + # Prism::Location.new(source, 2, 1) # ) # # you could instead write: # - # source = Prism::Source.for("[1]") + # class Builder + # include Prism::DSL # - # ArrayNode( - # IntegerNode(Prism::IntegerBaseFlags::DECIMAL, 1, Location(source, 1, 1)), source), - # Location(source, 0, 1), - # Location(source, 2, 1), - # source - # ) + # attr_reader :default_source + # + # def initialize + # @default_source = source("[1]") + # end # - # This is mostly helpful in the context of writing tests, but can also be used - # to generate trees programmatically. + # def build + # array_node( + # location: location(start_offset: 0, length: 3), + # elements: [ + # integer_node( + # location: location(start_offset: 1, length: 1), + # flags: integer_base_flag(:decimal), + # value: 1 + # ) + # ], + # opening_loc: location(start_offset: 0, length: 1), + # closing_loc: location(start_offset: 2, length: 1) + # ) + # end + # end + # + # This is mostly helpful in the context of generating trees programmatically. module DSL - private + # Provide all of these methods as module methods as well, to allow for + # building nodes like Prism::DSL.nil_node. + extend self - # Create a new Location object - def Location(source = nil, start_offset = 0, length = 0) - Location.new(source, start_offset, length) # steep:ignore + # Create a new Source object. + def source(string) + Source.for(string) + end + + # Create a new Location object. + def location(source: default_source, start_offset: 0, length: 0) + Location.new(source, start_offset, length) end <%- nodes.each do |node| -%> - # Create a new <%= node.name %> node - def <%= node.name %>(<%= (node.fields.map(&:name) + ["source = nil, location = Location()"]).join(", ") %>) - <%= node.name %>.new(<%= ["source", *node.fields.map(&:name), "location"].join(", ") %>) + # Create a new <%= node.name %> node. + def <%= node.human %>(<%= ["source: default_source", "location: default_location", *node.fields.map { |field| + case field + when Prism::Template::NodeField, Prism::Template::ConstantField + "#{field.name}: default_node(source, location)" + when Prism::Template::OptionalNodeField, Prism::Template::OptionalConstantField, Prism::Template::OptionalLocationField + "#{field.name}: nil" + when Prism::Template::NodeListField, Prism::Template::ConstantListField + "#{field.name}: []" + when Prism::Template::StringField + "#{field.name}: \"\"" + when Prism::Template::LocationField + "#{field.name}: location" + when Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::FlagsField, Prism::Template::IntegerField, Prism::Template::DoubleField + "#{field.name}: 0" + else + raise + end + }].join(", ") %>) + <%= node.name %>.new(<%= ["source", "location", *node.fields.map(&:name)].join(", ") %>) end <%- end -%> + <%- flags.each do |flag| -%> + + # Retrieve the value of one of the <%= flag.name %> flags. + def <%= flag.human.chomp("s") %>(name) + case name + <%- flag.values.each do |value| -%> + when :<%= value.name.downcase %> then <%= flag.name %>::<%= value.name %> + <%- end -%> + else raise ArgumentError, "invalid <%= flag.name %> flag: #{name.inspect}" + end + end + <%- end -%> + + private + + # The default source object that gets attached to nodes and locations if no + # source is specified. + def default_source + Source.for("") + end + + # The default location object that gets attached to nodes if no location is + # specified, which uses the given source. + def default_location + Location.new(default_source, 0, 0) + end + + # The default node that gets attached to nodes if no node is specified for a + # required node field. + def default_node(source, location) + MissingNode.new(source, location) + end end end diff --git a/templates/lib/prism/node.rb.erb b/templates/lib/prism/node.rb.erb index f0ce226defc..945b62fadbb 100644 --- a/templates/lib/prism/node.rb.erb +++ b/templates/lib/prism/node.rb.erb @@ -166,8 +166,8 @@ module Prism #<%= line %> <%- end -%> class <%= node.name -%> < Node - # def initialize: (<%= (node.fields.map { |field| "#{field.rbs_class} #{field.name}" } + ["Location location"]).join(", ") %>) -> void - def initialize(source, <%= (node.fields.map(&:name) + ["location"]).join(", ") %>) + # Initialize a new <%= node.name %> node. + def initialize(<%= ["source", "location", *node.fields.map(&:name)].join(", ") %>) @source = source @location = location <%- node.fields.each do |field| -%> @@ -228,9 +228,9 @@ module Prism }.compact.join(", ") %>] #: Array[Prism::node | Location] end - # def copy: (<%= (node.fields.map { |field| "?#{field.name}: #{field.rbs_class}" } + ["?location: Location"]).join(", ") %>) -> <%= node.name %> - def copy(<%= (node.fields.map(&:name) + ["location"]).map { |field| "#{field}: self.#{field}" }.join(", ") %>) - <%= node.name %>.new(<%= ["source", *node.fields.map(&:name), "location"].join(", ") %>) + # def copy: (<%= (["?location: Location"] + node.fields.map { |field| "?#{field.name}: #{field.rbs_class}" }).join(", ") %>) -> <%= node.name %> + def copy(<%= (["location"] + node.fields.map(&:name)).map { |field| "#{field}: self.#{field}" }.join(", ") %>) + <%= node.name %>.new(<%= ["source", "location", *node.fields.map(&:name)].join(", ") %>) end # def deconstruct: () -> Array[nil | Node] diff --git a/templates/lib/prism/serialize.rb.erb b/templates/lib/prism/serialize.rb.erb index 19116b9e6b4..5532a7fd6a6 100644 --- a/templates/lib/prism/serialize.rb.erb +++ b/templates/lib/prism/serialize.rb.erb @@ -319,7 +319,7 @@ module Prism end end - if RUBY_ENGINE == 'ruby' + if RUBY_ENGINE == "ruby" def load_node type = io.getbyte location = load_location @@ -330,8 +330,7 @@ module Prism <%- if node.needs_serialized_length? -%> load_uint32 <%- end -%> - <%= node.name %>.new( - source, <%= (node.fields.map { |field| + <%= node.name %>.new(<%= ["source", "location", *node.fields.map { |field| case field when Prism::Template::NodeField then "load_node" when Prism::Template::OptionalNodeField then "load_optional_node" @@ -348,7 +347,7 @@ module Prism when Prism::Template::DoubleField then "load_double" else raise end - } + ["location"]).join(", ") -%>) + }].join(", ") -%>) <%- end -%> end end @@ -367,8 +366,7 @@ module Prism <%- if node.needs_serialized_length? -%> load_uint32 <%- end -%> - <%= node.name %>.new( - source, <%= (node.fields.map { |field| + <%= node.name %>.new(<%= ["source", "location", *node.fields.map { |field| case field when Prism::Template::NodeField then "load_node" when Prism::Template::OptionalNodeField then "load_optional_node" @@ -385,7 +383,7 @@ module Prism when Prism::Template::DoubleField then "load_double" else raise end - } + ["location"]).join(", ") -%>) + }].join(", ") -%>) }, <%- end -%> ] diff --git a/test/prism/errors/content_after_unterminated_heredoc.txt b/test/prism/errors/content_after_unterminated_heredoc.txt index 43815cd9d05..c0446a8c39f 100644 --- a/test/prism/errors/content_after_unterminated_heredoc.txt +++ b/test/prism/errors/content_after_unterminated_heredoc.txt @@ -1,2 +1,4 @@ <<~FOO.foo ^~~ unterminated heredoc; can't find string "FOO" anywhere before EOF + ^~~ unterminated heredoc; can't find string "FOO" anywhere before EOF + diff --git a/test/prism/snapshots/patterns.txt b/test/prism/snapshots/patterns.txt index 17aa23b4b94..51026972e12 100644 --- a/test/prism/snapshots/patterns.txt +++ b/test/prism/snapshots/patterns.txt @@ -1,8 +1,8 @@ -@ ProgramNode (location: (1,0)-(217,5)) -├── locals: [:bar, :baz, :qux, :b, :a, :foo, :x] +@ ProgramNode (location: (1,0)-(220,31)) +├── locals: [:bar, :baz, :qux, :b, :a, :foo, :x, :_a] └── statements: - @ StatementsNode (location: (1,0)-(217,5)) - └── body: (length: 180) + @ StatementsNode (location: (1,0)-(220,31)) + └── body: (length: 182) ├── @ MatchRequiredNode (location: (1,0)-(1,10)) │ ├── value: │ │ @ CallNode (location: (1,0)-(1,3)) @@ -4883,27 +4883,115 @@ │ │ └── operator_loc: (212,11)-(212,13) = "in" │ ├── opening_loc: (212,7)-(212,8) = "{" │ └── closing_loc: (212,18)-(212,19) = "}" - └── @ MultiWriteNode (location: (214,0)-(217,5)) - ├── lefts: (length: 2) - │ ├── @ LocalVariableTargetNode (location: (215,2)-(215,3)) - │ │ ├── name: :a - │ │ └── depth: 0 - │ └── @ LocalVariableTargetNode (location: (216,2)-(216,3)) - │ ├── name: :b - │ └── depth: 0 - ├── rest: ∅ - ├── rights: (length: 0) - ├── lparen_loc: (214,0)-(214,1) = "(" - ├── rparen_loc: (217,0)-(217,1) = ")" - ├── operator_loc: (217,2)-(217,3) = "=" - └── value: - @ CallNode (location: (217,4)-(217,5)) - ├── flags: variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :c - ├── message_loc: (217,4)-(217,5) = "c" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ + ├── @ MultiWriteNode (location: (214,0)-(217,5)) + │ ├── lefts: (length: 2) + │ │ ├── @ LocalVariableTargetNode (location: (215,2)-(215,3)) + │ │ │ ├── name: :a + │ │ │ └── depth: 0 + │ │ └── @ LocalVariableTargetNode (location: (216,2)-(216,3)) + │ │ ├── name: :b + │ │ └── depth: 0 + │ ├── rest: ∅ + │ ├── rights: (length: 0) + │ ├── lparen_loc: (214,0)-(214,1) = "(" + │ ├── rparen_loc: (217,0)-(217,1) = ")" + │ ├── operator_loc: (217,2)-(217,3) = "=" + │ └── value: + │ @ CallNode (location: (217,4)-(217,5)) + │ ├── flags: variable_call, ignore_visibility + │ ├── receiver: ∅ + │ ├── call_operator_loc: ∅ + │ ├── name: :c + │ ├── message_loc: (217,4)-(217,5) = "c" + │ ├── opening_loc: ∅ + │ ├── arguments: ∅ + │ ├── closing_loc: ∅ + │ └── block: ∅ + ├── @ CaseMatchNode (location: (219,0)-(219,25)) + │ ├── predicate: + │ │ @ ParenthesesNode (location: (219,5)-(219,7)) + │ │ ├── body: ∅ + │ │ ├── opening_loc: (219,5)-(219,6) = "(" + │ │ └── closing_loc: (219,6)-(219,7) = ")" + │ ├── conditions: (length: 1) + │ │ └── @ InNode (location: (219,9)-(219,20)) + │ │ ├── pattern: + │ │ │ @ ArrayPatternNode (location: (219,12)-(219,20)) + │ │ │ ├── constant: ∅ + │ │ │ ├── requireds: (length: 2) + │ │ │ │ ├── @ LocalVariableTargetNode (location: (219,13)-(219,15)) + │ │ │ │ │ ├── name: :_a + │ │ │ │ │ └── depth: 0 + │ │ │ │ └── @ LocalVariableTargetNode (location: (219,17)-(219,19)) + │ │ │ │ ├── name: :_a + │ │ │ │ └── depth: 0 + │ │ │ ├── rest: ∅ + │ │ │ ├── posts: (length: 0) + │ │ │ ├── opening_loc: (219,12)-(219,13) = "[" + │ │ │ └── closing_loc: (219,19)-(219,20) = "]" + │ │ ├── statements: ∅ + │ │ ├── in_loc: (219,9)-(219,11) = "in" + │ │ └── then_loc: ∅ + │ ├── consequent: ∅ + │ ├── case_keyword_loc: (219,0)-(219,4) = "case" + │ └── end_keyword_loc: (219,22)-(219,25) = "end" + └── @ CaseMatchNode (location: (220,0)-(220,31)) + ├── predicate: + │ @ ParenthesesNode (location: (220,5)-(220,7)) + │ ├── body: ∅ + │ ├── opening_loc: (220,5)-(220,6) = "(" + │ └── closing_loc: (220,6)-(220,7) = ")" + ├── conditions: (length: 1) + │ └── @ InNode (location: (220,9)-(220,26)) + │ ├── pattern: + │ │ @ ArrayPatternNode (location: (220,12)-(220,26)) + │ │ ├── constant: ∅ + │ │ ├── requireds: (length: 2) + │ │ │ ├── @ HashPatternNode (location: (220,13)-(220,18)) + │ │ │ │ ├── constant: ∅ + │ │ │ │ ├── elements: (length: 1) + │ │ │ │ │ └── @ AssocNode (location: (220,14)-(220,17)) + │ │ │ │ │ ├── key: + │ │ │ │ │ │ @ SymbolNode (location: (220,14)-(220,16)) + │ │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ │ ├── opening_loc: ∅ + │ │ │ │ │ │ ├── value_loc: (220,14)-(220,15) = "a" + │ │ │ │ │ │ ├── closing_loc: (220,15)-(220,16) = ":" + │ │ │ │ │ │ └── unescaped: "a" + │ │ │ │ │ ├── value: + │ │ │ │ │ │ @ IntegerNode (location: (220,16)-(220,17)) + │ │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ │ └── value: 1 + │ │ │ │ │ └── operator_loc: ∅ + │ │ │ │ ├── rest: ∅ + │ │ │ │ ├── opening_loc: (220,13)-(220,14) = "{" + │ │ │ │ └── closing_loc: (220,17)-(220,18) = "}" + │ │ │ └── @ HashPatternNode (location: (220,20)-(220,25)) + │ │ │ ├── constant: ∅ + │ │ │ ├── elements: (length: 1) + │ │ │ │ └── @ AssocNode (location: (220,21)-(220,24)) + │ │ │ │ ├── key: + │ │ │ │ │ @ SymbolNode (location: (220,21)-(220,23)) + │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── opening_loc: ∅ + │ │ │ │ │ ├── value_loc: (220,21)-(220,22) = "a" + │ │ │ │ │ ├── closing_loc: (220,22)-(220,23) = ":" + │ │ │ │ │ └── unescaped: "a" + │ │ │ │ ├── value: + │ │ │ │ │ @ IntegerNode (location: (220,23)-(220,24)) + │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ └── value: 2 + │ │ │ │ └── operator_loc: ∅ + │ │ │ ├── rest: ∅ + │ │ │ ├── opening_loc: (220,20)-(220,21) = "{" + │ │ │ └── closing_loc: (220,24)-(220,25) = "}" + │ │ ├── rest: ∅ + │ │ ├── posts: (length: 0) + │ │ ├── opening_loc: (220,12)-(220,13) = "[" + │ │ └── closing_loc: (220,25)-(220,26) = "]" + │ ├── statements: ∅ + │ ├── in_loc: (220,9)-(220,11) = "in" + │ └── then_loc: ∅ + ├── consequent: ∅ + ├── case_keyword_loc: (220,0)-(220,4) = "case" + └── end_keyword_loc: (220,28)-(220,31) = "end" From 9f12a56fd65abd9213793b633e38861b5194966d Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 2 Jul 2024 15:43:01 -0400 Subject: [PATCH 025/109] Expose flags on every node type --- config.yml | 148 +++++------------- docs/serialization.md | 1 + lib/prism/node_ext.rb | 12 +- lib/prism/parse_result/newlines.rb | 56 +++---- sig/prism/_private/node.rbs | 6 +- templates/ext/prism/api_node.c.erb | 14 +- templates/include/prism/ast.h.erb | 18 +-- templates/java/org/prism/Loader.java.erb | 2 +- templates/java/org/prism/Nodes.java.erb | 20 ++- templates/javascript/src/deserialize.js.erb | 7 +- templates/javascript/src/nodes.js.erb | 32 ++-- templates/lib/prism/dot_visitor.rb.erb | 8 +- templates/lib/prism/dsl.rb.erb | 6 +- templates/lib/prism/inspect_visitor.rb.erb | 13 +- templates/lib/prism/node.rb.erb | 70 ++++++--- templates/lib/prism/reflection.rb.erb | 7 +- templates/lib/prism/serialize.rb.erb | 8 +- templates/rbi/prism/node.rbi.erb | 14 +- .../sig/prism/_private/dot_visitor.rbs.erb | 2 +- templates/sig/prism/node.rbs.erb | 12 +- templates/src/node.c.erb | 13 +- templates/src/prettyprint.c.erb | 13 +- templates/src/serialize.c.erb | 3 +- templates/template.rb | 36 +---- test/prism/newline_test.rb | 2 +- test/prism/result/integer_base_flags_test.rb | 4 +- test/prism/snapshots/integer_operations.txt | 8 +- test/prism/snapshots/ranges.txt | 8 +- test/prism/snapshots/seattlerb/call_gt.txt | 2 +- test/prism/snapshots/seattlerb/call_lt.txt | 2 +- test/prism/snapshots/seattlerb/call_lte.txt | 2 +- .../snapshots/whitequark/send_binary_op.txt | 8 +- 32 files changed, 252 insertions(+), 305 deletions(-) diff --git a/config.yml b/config.yml index a1e54f34628..321264e686d 100644 --- a/config.yml +++ b/config.yml @@ -859,10 +859,8 @@ nodes: left and right ^^^^^^^^^^^^^^ - name: ArgumentsNode + flags: ArgumentsNodeFlags fields: - - name: flags - type: flags - kind: ArgumentsNodeFlags - name: arguments type: node[] comment: | @@ -871,10 +869,8 @@ nodes: return foo, bar, baz ^^^^^^^^^^^^^ - name: ArrayNode + flags: ArrayNodeFlags fields: - - name: flags - type: flags - kind: ArrayNodeFlags - name: elements type: node[] comment: Represent the list of zero or more [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression) within the array. @@ -1043,10 +1039,8 @@ nodes: bar(&args) ^^^^^^^^^^ - name: BlockLocalVariableNode + flags: ParameterFlags fields: - - name: flags - type: flags - kind: ParameterFlags - name: name type: constant comment: | @@ -1072,10 +1066,8 @@ nodes: [1, 2, 3].each { |i| puts x } ^^^^^^^^^^^^^^ - name: BlockParameterNode + flags: ParameterFlags fields: - - name: flags - type: flags - kind: ParameterFlags - name: name type: constant? - name: name_loc @@ -1132,10 +1124,8 @@ nodes: break foo ^^^^^^^^^ - name: CallAndWriteNode + flags: CallNodeFlags fields: - - name: flags - type: flags - kind: CallNodeFlags - name: receiver type: node? - name: call_operator_loc @@ -1156,10 +1146,8 @@ nodes: foo.bar &&= value ^^^^^^^^^^^^^^^^^ - name: CallNode + flags: CallNodeFlags fields: - - name: flags - type: flags - kind: CallNodeFlags - name: receiver type: node? comment: | @@ -1209,10 +1197,8 @@ nodes: foo&.bar ^^^^^^^^ - name: CallOperatorWriteNode + flags: CallNodeFlags fields: - - name: flags - type: flags - kind: CallNodeFlags - name: receiver type: node? - name: call_operator_loc @@ -1235,10 +1221,8 @@ nodes: foo.bar += baz ^^^^^^^^^^^^^^ - name: CallOrWriteNode + flags: CallNodeFlags fields: - - name: flags - type: flags - kind: CallNodeFlags - name: receiver type: node? - name: call_operator_loc @@ -1259,10 +1243,8 @@ nodes: foo.bar ||= value ^^^^^^^^^^^^^^^^^ - name: CallTargetNode + flags: CallNodeFlags fields: - - name: flags - type: flags - kind: CallNodeFlags - name: receiver type: node - name: call_operator_loc @@ -1857,10 +1839,8 @@ nodes: foo in Foo(*bar, baz, *qux) ^^^^^^^^^^^^^^^^^^^^ - name: FlipFlopNode + flags: RangeFlags fields: - - name: flags - type: flags - kind: RangeFlags - name: left type: node? - name: right @@ -2279,10 +2259,8 @@ nodes: case a; in b then c end ^^^^^^^^^^^ - name: IndexAndWriteNode + flags: CallNodeFlags fields: - - name: flags - type: flags - kind: CallNodeFlags - name: receiver type: node? - name: call_operator_loc @@ -2306,10 +2284,8 @@ nodes: foo.bar[baz] &&= value ^^^^^^^^^^^^^^^^^^^^^^ - name: IndexOperatorWriteNode + flags: CallNodeFlags fields: - - name: flags - type: flags - kind: CallNodeFlags - name: receiver type: node? - name: call_operator_loc @@ -2335,10 +2311,8 @@ nodes: foo.bar[baz] += value ^^^^^^^^^^^^^^^^^^^^^ - name: IndexOrWriteNode + flags: CallNodeFlags fields: - - name: flags - type: flags - kind: CallNodeFlags - name: receiver type: node? - name: call_operator_loc @@ -2362,10 +2336,8 @@ nodes: foo.bar[baz] ||= value ^^^^^^^^^^^^^^^^^^^^^^ - name: IndexTargetNode + flags: CallNodeFlags fields: - - name: flags - type: flags - kind: CallNodeFlags - name: receiver type: node - name: opening_loc @@ -2501,10 +2473,8 @@ nodes: @foo = 1 ^^^^^^^^ - name: IntegerNode + flags: IntegerBaseFlags fields: - - name: flags - type: flags - kind: IntegerBaseFlags - name: value type: integer comment: The value of the integer literal as a number. @@ -2514,10 +2484,8 @@ nodes: 1 ^ - name: InterpolatedMatchLastLineNode + flags: RegularExpressionFlags fields: - - name: flags - type: flags - kind: RegularExpressionFlags - name: opening_loc type: location - name: parts @@ -2535,10 +2503,8 @@ nodes: if /foo #{bar} baz/ then end ^^^^^^^^^^^^^^^^ - name: InterpolatedRegularExpressionNode + flags: RegularExpressionFlags fields: - - name: flags - type: flags - kind: RegularExpressionFlags - name: opening_loc type: location - name: parts @@ -2556,10 +2522,8 @@ nodes: /foo #{bar} baz/ ^^^^^^^^^^^^^^^^ - name: InterpolatedStringNode + flags: InterpolatedStringNodeFlags fields: - - name: flags - type: flags - kind: InterpolatedStringNodeFlags - name: opening_loc type: location? - name: parts @@ -2626,10 +2590,8 @@ nodes: -> { it + it } ^^^^^^^^^^^^^^ - name: KeywordHashNode + flags: KeywordHashNodeFlags fields: - - name: flags - type: flags - kind: KeywordHashNodeFlags - name: elements type: node[] kind: @@ -2641,10 +2603,8 @@ nodes: foo(a: b) ^^^^ - name: KeywordRestParameterNode + flags: ParameterFlags fields: - - name: flags - type: flags - kind: ParameterFlags - name: name type: constant? - name: name_loc @@ -2824,10 +2784,8 @@ nodes: foo = 1 ^^^^^^^ - name: MatchLastLineNode + flags: RegularExpressionFlags fields: - - name: flags - type: flags - kind: RegularExpressionFlags - name: opening_loc type: location - name: content_loc @@ -3143,10 +3101,8 @@ nodes: $1 ^^ - name: OptionalKeywordParameterNode + flags: ParameterFlags fields: - - name: flags - type: flags - kind: ParameterFlags - name: name type: constant - name: name_loc @@ -3160,10 +3116,8 @@ nodes: ^^^^ end - name: OptionalParameterNode + flags: ParameterFlags fields: - - name: flags - type: flags - kind: ParameterFlags - name: name type: constant - name: name_loc @@ -3338,10 +3292,8 @@ nodes: kind: StatementsNode comment: The top level node of any parse tree. - name: RangeNode + flags: RangeFlags fields: - - name: flags - type: flags - kind: RangeFlags - name: left type: node? comment: | @@ -3376,10 +3328,8 @@ nodes: c if a =~ /left/ ... b =~ /right/ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - name: RationalNode + flags: IntegerBaseFlags fields: - - name: flags - type: flags - kind: IntegerBaseFlags - name: numerator type: integer comment: | @@ -3404,10 +3354,8 @@ nodes: redo ^^^^ - name: RegularExpressionNode + flags: RegularExpressionFlags fields: - - name: flags - type: flags - kind: RegularExpressionFlags - name: opening_loc type: location - name: content_loc @@ -3422,10 +3370,8 @@ nodes: /foo/i ^^^^^^ - name: RequiredKeywordParameterNode + flags: ParameterFlags fields: - - name: flags - type: flags - kind: ParameterFlags - name: name type: constant - name: name_loc @@ -3437,10 +3383,8 @@ nodes: ^^ end - name: RequiredParameterNode + flags: ParameterFlags fields: - - name: flags - type: flags - kind: ParameterFlags - name: name type: constant comment: | @@ -3490,10 +3434,8 @@ nodes: `Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `exception` field. - name: RestParameterNode + flags: ParameterFlags fields: - - name: flags - type: flags - kind: ParameterFlags - name: name type: constant? - name: name_loc @@ -3513,10 +3455,8 @@ nodes: retry ^^^^^ - name: ReturnNode + flags: ReturnNodeFlags fields: - - name: flags - type: flags - kind: ReturnNodeFlags - name: keyword_loc type: location - name: arguments @@ -3534,10 +3474,8 @@ nodes: self ^^^^ - name: ShareableConstantNode + flags: ShareableConstantNodeFlags fields: - - name: flags - type: flags - kind: ShareableConstantNodeFlags - name: write type: node kind: @@ -3582,10 +3520,8 @@ nodes: __ENCODING__ ^^^^^^^^^^^^ - name: SourceFileNode + flags: StringFlags fields: - - name: flags - type: flags - kind: StringFlags - name: filepath type: string comment: Represents the file path being parsed. This corresponds directly to the `filepath` option given to the various `Prism::parse*` APIs. @@ -3621,10 +3557,8 @@ nodes: foo; bar; baz ^^^^^^^^^^^^^ - name: StringNode + flags: StringFlags fields: - - name: flags - type: flags - kind: StringFlags - name: opening_loc type: location? - name: content_loc @@ -3666,10 +3600,8 @@ nodes: super foo, bar ^^^^^^^^^^^^^^ - name: SymbolNode + flags: SymbolFlags fields: - - name: flags - type: flags - kind: SymbolFlags - name: opening_loc type: location? - name: value_loc @@ -3769,10 +3701,8 @@ nodes: unless foo then bar end ^^^^^^^^^^^^^^^^^^^^^^^ - name: UntilNode + flags: LoopFlags fields: - - name: flags - type: flags - kind: LoopFlags - name: keyword_loc type: location - name: closing_loc @@ -3810,10 +3740,8 @@ nodes: ^^^^^^^^^ end - name: WhileNode + flags: LoopFlags fields: - - name: flags - type: flags - kind: LoopFlags - name: keyword_loc type: location - name: closing_loc @@ -3833,10 +3761,8 @@ nodes: while foo do bar end ^^^^^^^^^^^^^^^^^^^^ - name: XStringNode + flags: EncodingFlags fields: - - name: flags - type: flags - kind: EncodingFlags - name: opening_loc type: location - name: content_loc diff --git a/docs/serialization.md b/docs/serialization.md index 06f2f32aeaa..ad3ddb4837a 100644 --- a/docs/serialization.md +++ b/docs/serialization.md @@ -117,6 +117,7 @@ Each node is structured like the following table: | --- | --- | | `1` | node type | | location | node location | +| varuint | node flags | Every field on the node is then appended to the serialized string. The fields can be determined by referencing `config.yml`. Depending on the type of field, it could take a couple of different forms, described below: diff --git a/lib/prism/node_ext.rb b/lib/prism/node_ext.rb index fe36be8541b..30ab6523843 100644 --- a/lib/prism/node_ext.rb +++ b/lib/prism/node_ext.rb @@ -21,7 +21,10 @@ module RegularExpressionOptions # :nodoc: # Returns a numeric value that represents the flags that were used to create # the regular expression. def options - o = flags & (RegularExpressionFlags::IGNORE_CASE | RegularExpressionFlags::EXTENDED | RegularExpressionFlags::MULTI_LINE) + o = 0 + o |= Regexp::IGNORECASE if flags.anybits?(RegularExpressionFlags::IGNORE_CASE) + o |= Regexp::EXTENDED if flags.anybits?(RegularExpressionFlags::EXTENDED) + o |= Regexp::MULTILINE if flags.anybits?(RegularExpressionFlags::MULTI_LINE) o |= Regexp::FIXEDENCODING if flags.anybits?(RegularExpressionFlags::EUC_JP | RegularExpressionFlags::WINDOWS_31J | RegularExpressionFlags::UTF_8) o |= Regexp::NOENCODING if flags.anybits?(RegularExpressionFlags::ASCII_8BIT) o @@ -87,6 +90,7 @@ def to_interpolated InterpolatedXStringNode.new( source, location, + flags, opening_loc, [StringNode.new(source, content_loc, 0, nil, content_loc, nil, unescaped)], closing_loc @@ -117,7 +121,7 @@ def numeric if denominator == 1 IntegerNode.new(source, location.chop, flags, numerator) else - FloatNode.new(source, location.chop, numerator.to_f / denominator) + FloatNode.new(source, location.chop, 0, numerator.to_f / denominator) end end end @@ -195,7 +199,7 @@ def full_name # continue to supply that API. def child deprecated("name", "name_loc") - name ? ConstantReadNode.new(source, name_loc, name) : MissingNode.new(source, location) + name ? ConstantReadNode.new(source, name_loc, 0, name) : MissingNode.new(source, location, 0) end end @@ -231,7 +235,7 @@ def full_name # continue to supply that API. def child deprecated("name", "name_loc") - name ? ConstantReadNode.new(source, name_loc, name) : MissingNode.new(source, location) + name ? ConstantReadNode.new(source, name_loc, 0, name) : MissingNode.new(source, location, 0) end end diff --git a/lib/prism/parse_result/newlines.rb b/lib/prism/parse_result/newlines.rb index 808a129a6ba..a04fa78a75c 100644 --- a/lib/prism/parse_result/newlines.rb +++ b/lib/prism/parse_result/newlines.rb @@ -45,7 +45,7 @@ def visit_block_node(node) # Mark if/unless nodes as newlines. def visit_if_node(node) - node.newline!(@lines) + node.newline_flag!(@lines) super(node) end @@ -54,7 +54,7 @@ def visit_if_node(node) # Permit statements lists to mark newlines within themselves. def visit_statements_node(node) node.body.each do |child| - child.newline!(@lines) + child.newline_flag!(@lines) end super(node) end @@ -62,93 +62,93 @@ def visit_statements_node(node) end class Node - def newline? # :nodoc: - @newline ? true : false + def newline_flag? # :nodoc: + @newline_flag ? true : false end - def newline!(lines) # :nodoc: + def newline_flag!(lines) # :nodoc: line = location.start_line unless lines[line] lines[line] = true - @newline = true + @newline_flag = true end end end class BeginNode < Node - def newline!(lines) # :nodoc: + def newline_flag!(lines) # :nodoc: # Never mark BeginNode with a newline flag, mark children instead. end end class ParenthesesNode < Node - def newline!(lines) # :nodoc: + def newline_flag!(lines) # :nodoc: # Never mark ParenthesesNode with a newline flag, mark children instead. end end class IfNode < Node - def newline!(lines) # :nodoc: - predicate.newline!(lines) + def newline_flag!(lines) # :nodoc: + predicate.newline_flag!(lines) end end class UnlessNode < Node - def newline!(lines) # :nodoc: - predicate.newline!(lines) + def newline_flag!(lines) # :nodoc: + predicate.newline_flag!(lines) end end class UntilNode < Node - def newline!(lines) # :nodoc: - predicate.newline!(lines) + def newline_flag!(lines) # :nodoc: + predicate.newline_flag!(lines) end end class WhileNode < Node - def newline!(lines) # :nodoc: - predicate.newline!(lines) + def newline_flag!(lines) # :nodoc: + predicate.newline_flag!(lines) end end class RescueModifierNode < Node - def newline!(lines) # :nodoc: - expression.newline!(lines) + def newline_flag!(lines) # :nodoc: + expression.newline_flag!(lines) end end class InterpolatedMatchLastLineNode < Node - def newline!(lines) # :nodoc: + def newline_flag!(lines) # :nodoc: first = parts.first - first.newline!(lines) if first + first.newline_flag!(lines) if first end end class InterpolatedRegularExpressionNode < Node - def newline!(lines) # :nodoc: + def newline_flag!(lines) # :nodoc: first = parts.first - first.newline!(lines) if first + first.newline_flag!(lines) if first end end class InterpolatedStringNode < Node - def newline!(lines) # :nodoc: + def newline_flag!(lines) # :nodoc: first = parts.first - first.newline!(lines) if first + first.newline_flag!(lines) if first end end class InterpolatedSymbolNode < Node - def newline!(lines) # :nodoc: + def newline_flag!(lines) # :nodoc: first = parts.first - first.newline!(lines) if first + first.newline_flag!(lines) if first end end class InterpolatedXStringNode < Node - def newline!(lines) # :nodoc: + def newline_flag!(lines) # :nodoc: first = parts.first - first.newline!(lines) if first + first.newline_flag!(lines) if first end end end diff --git a/sig/prism/_private/node.rbs b/sig/prism/_private/node.rbs index 9a30e802df9..b5918a71333 100644 --- a/sig/prism/_private/node.rbs +++ b/sig/prism/_private/node.rbs @@ -1,8 +1,8 @@ module Prism class Node - @newline: bool + @newline_flag: bool - def newline?: () -> bool - def set_newline_flag: (Array[bool]) -> void + def newline_flag?: () -> bool + def newline_flag!: (Array[bool] lines) -> void end end diff --git a/templates/ext/prism/api_node.c.erb b/templates/ext/prism/api_node.c.erb index 258c61f3198..a5086d5bcaa 100644 --- a/templates/ext/prism/api_node.c.erb +++ b/templates/ext/prism/api_node.c.erb @@ -170,17 +170,20 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi <%- nodes.each do |node| -%> #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" case <%= node.type %>: { - <%- if node.fields.any? { |field| ![Prism::Template::NodeField, Prism::Template::OptionalNodeField, Prism::Template::FlagsField].include?(field.class) } -%> + <%- if node.fields.any? { |field| ![Prism::Template::NodeField, Prism::Template::OptionalNodeField].include?(field.class) } -%> pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node; <%- end -%> - VALUE argv[<%= node.fields.length + 2 %>]; + VALUE argv[<%= node.fields.length + 3 %>]; // source argv[0] = source; // location argv[1] = pm_location_new(parser, node->location.start, node->location.end); - <%- node.fields.each.with_index(2) do |field, index| -%> + + // flags + argv[2] = ULONG2NUM(node->flags); + <%- node.fields.each.with_index(3) do |field, index| -%> // <%= field.name %> <%- case field -%> @@ -221,9 +224,6 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi <%- when Prism::Template::UInt32Field -%> #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" argv[<%= index %>] = ULONG2NUM(cast-><%= field.name %>); - <%- when Prism::Template::FlagsField -%> -#line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" - argv[<%= index %>] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK); <%- when Prism::Template::IntegerField -%> #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>" argv[<%= index %>] = pm_integer_new(&cast-><%= field.name %>); @@ -235,7 +235,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi <%- end -%> <%- end -%> - rb_ary_push(value_stack, rb_class_new_instance(<%= node.fields.length + 2 %>, argv, rb_cPrism<%= node.name %>)); + rb_ary_push(value_stack, rb_class_new_instance(<%= node.fields.length + 3 %>, argv, rb_cPrism<%= node.name %>)); break; } <%- end -%> diff --git a/templates/include/prism/ast.h.erb b/templates/include/prism/ast.h.erb index 0fe7905e404..585e3f40583 100644 --- a/templates/include/prism/ast.h.erb +++ b/templates/include/prism/ast.h.erb @@ -100,11 +100,8 @@ typedef uint16_t pm_node_flags_t; * We store the flags enum in every node in the tree. Some flags are common to * all nodes (the ones listed below). Others are specific to certain node types. */ -#define PM_NODE_FLAG_BITS (sizeof(pm_node_flags_t) * 8) - -static const pm_node_flags_t PM_NODE_FLAG_NEWLINE = (1 << (PM_NODE_FLAG_BITS - 1)); -static const pm_node_flags_t PM_NODE_FLAG_STATIC_LITERAL = (1 << (PM_NODE_FLAG_BITS - 2)); -static const pm_node_flags_t PM_NODE_FLAG_COMMON_MASK = (1 << (PM_NODE_FLAG_BITS - 1)) | (1 << (PM_NODE_FLAG_BITS - 2)); +static const pm_node_flags_t PM_NODE_FLAG_NEWLINE = 0x1; +static const pm_node_flags_t PM_NODE_FLAG_STATIC_LITERAL = 0x2; /** * Cast the type to an enum to allow the compiler to provide exhaustiveness @@ -151,11 +148,10 @@ typedef struct pm_node { * <%= node.name %> * * Type: <%= node.type %> -<%- if (node_flags = node.fields.find { |field| field.is_a? Prism::Template::FlagsField }) -%> +<%- if (node_flags = node.flags) -%> * Flags: -<%- found = flags.find { |flag| flag.name == node_flags.kind }.tap { |found| raise "Expected to find #{field.kind}" unless found } -%> -<%- found.values.each do |value| -%> - * PM_<%= found.human.upcase %>_<%= value.name %> +<%- node_flags.values.each do |value| -%> + * PM_<%= node_flags.human.upcase %>_<%= value.name %> <%- end -%> <%- end -%> * @@ -164,7 +160,7 @@ typedef struct pm_node { typedef struct pm_<%= node.human %> { /** The embedded base node. */ pm_node_t base; -<%- node.fields.grep_v(Prism::Template::FlagsField).each do |field| -%> +<%- node.fields.each do |field| -%> /** * <%= node.name %>#<%= field.name %> @@ -201,7 +197,7 @@ typedef enum pm_<%= flag.human %> { <%- flag.values.each_with_index do |value, index| -%> <%= "\n" if index > 0 -%> /** <%= value.comment %> */ - PM_<%= flag.human.upcase %>_<%= value.name %> = <%= 1 << index %>, + PM_<%= flag.human.upcase %>_<%= value.name %> = <%= 1 << (index + 2) %>, <%- end -%> } pm_<%= flag.human %>_t; <%- end -%> diff --git a/templates/java/org/prism/Loader.java.erb b/templates/java/org/prism/Loader.java.erb index a43704d3441..87329643551 100644 --- a/templates/java/org/prism/Loader.java.erb +++ b/templates/java/org/prism/Loader.java.erb @@ -362,6 +362,7 @@ public class Loader { case <%= index + 1 %>: <%- params = node.needs_serialized_length? ? ["buffer.getInt()"] : [] + params << "loadFlags()" params.concat node.semantic_fields.map { |field| case field when Prism::Template::NodeField then "#{field.java_cast}loadNode()" @@ -378,7 +379,6 @@ public class Loader { when Prism::Template::OptionalLocationField then "loadOptionalLocation()" when Prism::Template::UInt8Field then "buffer.get()" when Prism::Template::UInt32Field then "loadVarUInt()" - when Prism::Template::FlagsField then "loadFlags()" when Prism::Template::IntegerField then "loadInteger()" when Prism::Template::DoubleField then "buffer.getDouble()" else raise diff --git a/templates/java/org/prism/Nodes.java.erb b/templates/java/org/prism/Nodes.java.erb index 48fbd66daca..6a78ef89cbc 100644 --- a/templates/java/org/prism/Nodes.java.erb +++ b/templates/java/org/prism/Nodes.java.erb @@ -220,25 +220,28 @@ public abstract class Nodes { <%- end -%> <%- - params = node.needs_serialized_length? ? ["int serializedLength"] : [] + params = [] + params << "int serializedLength" if node.needs_serialized_length? + params << "short flags" params.concat node.semantic_fields.map { |field| "#{field.java_type} #{field.name}" } params.concat ["int startOffset", "int length"] -%> - public <%=node.name -%>(<%= params.join(", ") %>) { + public <%= node.name -%>(<%= params.join(", ") %>) { super(startOffset, length); <%- if node.needs_serialized_length? -%> this.serializedLength = serializedLength; <%- end -%> + this.flags = flags; <%- node.semantic_fields.each do |field| -%> this.<%= field.name %> = <%= field.name %>; <%- end -%> } <%# methods for flags -%> - <%- node.semantic_fields.grep(Prism::Template::FlagsField).each do |field| -%> - <%- flags.find { |flag| flag.name == field.kind }.tap { |flag| raise "Expected to find #{field.kind}" unless flag }.values.each do |value| -%> + <%- if (node_flags = node.flags) -%> + <%- node_flags.values.each do |value| -%> public boolean is<%= value.camelcase %>() { - return <%= field.kind %>.is<%= value.camelcase %>(this.<%= field.name %>); + return <%= node_flags.name %>.is<%= value.camelcase %>(this.<%= node_flags.name %>); } <%- end -%> <%- end -%> @@ -321,7 +324,7 @@ public abstract class Nodes { <%- if node.fields.any?(Prism::Template::NodeListField) or node.fields.any?(Prism::Template::ConstantListField) -%> String nextNextIndent = nextIndent + " "; <%- end -%> - <%- node.fields.grep_v(Prism::Template::LocationField).grep_v(Prism::Template::OptionalLocationField).each do |field| -%> + <%- [*node.flags, *node.fields.grep_v(Prism::Template::LocationField).grep_v(Prism::Template::OptionalLocationField)].each do |field| -%> builder.append(nextIndent); builder.append("<%= field.name %>: "); <%- case field -%> @@ -348,7 +351,10 @@ public abstract class Nodes { for (<%= string_type %> constant : this.<%= field.name %>) { builder.append(nextNextIndent).append('"').append(constant).append('"').append('\n'); } - <%- when Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::FlagsField, Prism::Template::IntegerField, Prism::Template::DoubleField -%> + <%- when Prism::Template::Flags -%> + builder.append(this.flags); + builder.append('\n'); + <%- when Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::IntegerField, Prism::Template::DoubleField -%> builder.append(this.<%= field.name %>); builder.append('\n'); <%- else -%> diff --git a/templates/javascript/src/deserialize.js.erb b/templates/javascript/src/deserialize.js.erb index a093251f84a..663695a32a8 100644 --- a/templates/javascript/src/deserialize.js.erb +++ b/templates/javascript/src/deserialize.js.erb @@ -303,7 +303,7 @@ export function deserialize(source, array) { <%- if node.needs_serialized_length? -%> buffer.readUint32(); <%- end -%> - return new nodes.<%= node.name %>(<%= (node.fields.map { |field| + return new nodes.<%= node.name %>(<%= ["location", "buffer.readVarInt()", *node.fields.map { |field| case field when Prism::Template::NodeField then "readRequiredNode()" when Prism::Template::OptionalNodeField then "readOptionalNode()" @@ -315,12 +315,11 @@ export function deserialize(source, array) { when Prism::Template::LocationField then "buffer.readLocation()" when Prism::Template::OptionalLocationField then "buffer.readOptionalLocation()" when Prism::Template::UInt8Field then "buffer.readByte()" - when Prism::Template::UInt32Field, Prism::Template::FlagsField then "buffer.readVarInt()" + when Prism::Template::UInt32Field then "buffer.readVarInt()" when Prism::Template::IntegerField then "readInteger()" when Prism::Template::DoubleField then "buffer.readDouble()" - else raise end - } + ["location"]).join(", ") -%>); + }].join(", ") -%>); <%- end -%> default: throw new Error(`Unknown node type: ${type}`); diff --git a/templates/javascript/src/nodes.js.erb b/templates/javascript/src/nodes.js.erb index 6a535285b38..009573154f5 100644 --- a/templates/javascript/src/nodes.js.erb +++ b/templates/javascript/src/nodes.js.erb @@ -19,7 +19,7 @@ def jstype(field) when Prism::Template::ConstantListField then "string[]" when Prism::Template::LocationField then "Location" when Prism::Template::OptionalLocationField then "Location | null" - when Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::FlagsField, Prism::Template::IntegerField, Prism::Template::DoubleField then "number" + when Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::IntegerField, Prism::Template::DoubleField then "number" else raise end end @@ -57,11 +57,16 @@ const <%= flag.name %> = { <%- end -%> */ export class <%= node.name -%> { + /** + * @type number + */ + #flags; + <%- node.fields.each do |field| -%> /** * @type <%= jstype(field) %> */ - <%= field.is_a?(Prism::Template::FlagsField) ? "#flags" : prop(field) %>; + <%= prop(field) %>; <%- end -%> /** @@ -77,19 +82,15 @@ export class <%= node.name -%> { <%- end -%> * @param {Location} location */ - constructor(<%= (node.fields.map { |field| prop(field) } + ["location"]).join(", ") %>) { - <%- node.fields.each do |field| -%> - <%- if field.is_a?(Prism::Template::FlagsField) -%> + constructor(<%= ["location", "flags", *node.fields.map { |field| prop(field) }].join(", ") %>) { + this.location = location; this.#flags = flags; - <%- else -%> + <%- node.fields.each do |field| -%> this.<%= prop(field) %> = <%= prop(field) %>; <%- end -%> - <%- end -%> - this.location = location; } - <%- if (flags_field = node.fields.find { |field| field.is_a?(Prism::Template::FlagsField) }) -%> - <%- flag = flags.find { |flag| flag.name == flags_field.kind }.tap { |flag| raise "Expected to find #{field.kind}" unless flag } -%> - <%- flag.values.each do |value| -%> + <%- if (node_flags = node.flags) -%> + <%- node_flags.values.each do |value| -%> /** * True if this node has the <%= value.name %> flag. @@ -97,7 +98,7 @@ export class <%= node.name -%> { * @returns {boolean} */ is<%= value.camelcase %>() { - return (this.#flags & <%= flag.name %>.<%= value.name %>) !== 0; + return (this.#flags & <%= node_flags.name %>.<%= value.name %>) !== 0; } <%- end -%> <%- end -%> @@ -167,16 +168,15 @@ export class <%= node.name -%> { toJSON() { return { type: "<%= node.name %>", - <%- node.fields.each do |field| -%> - <%- if field.is_a?(Prism::Template::FlagsField) -%> + location: this.location, flags: this.#flags, - <%- elsif field.name == "arguments" -%> + <%- node.fields.each do |field| -%> + <%- if field.name == "arguments" -%> arguments: this.<%= prop(field) %>, <%- else -%> <%= prop(field) %>: this.<%= prop(field) %>, <%- end -%> <%- end -%> - location: this.location }; } } diff --git a/templates/lib/prism/dot_visitor.rb.erb b/templates/lib/prism/dot_visitor.rb.erb index 93c94b19eed..e9c81e45450 100644 --- a/templates/lib/prism/dot_visitor.rb.erb +++ b/templates/lib/prism/dot_visitor.rb.erb @@ -109,6 +109,11 @@ module Prism def visit_<%= node.human %>(node) table = Table.new("<%= node.name %>") id = node_id(node) + <%- if (node_flags = node.flags) -%> + + # flags + table.field("flags", <%= node_flags.human %>_inspect(node)) + <%- end -%> <%- node.fields.each do |field| -%> # <%= field.name %> @@ -141,9 +146,6 @@ module Prism unless (<%= field.name %> = node.<%= field.name %>).nil? table.field("<%= field.name %>", location_inspect(<%= field.name %>)) end - <%- when Prism::Template::FlagsField -%> - <%- flag = flags.find { |flag| flag.name == field.kind }.tap { |flag| raise "Expected to find #{field.kind}" unless flag } -%> - table.field("<%= field.name %>", <%= flag.human %>_inspect(node)) <%- else -%> <%- raise -%> <%- end -%> diff --git a/templates/lib/prism/dsl.rb.erb b/templates/lib/prism/dsl.rb.erb index 4f61d71a2a0..ec899f0b748 100644 --- a/templates/lib/prism/dsl.rb.erb +++ b/templates/lib/prism/dsl.rb.erb @@ -65,7 +65,7 @@ module Prism <%- nodes.each do |node| -%> # Create a new <%= node.name %> node. - def <%= node.human %>(<%= ["source: default_source", "location: default_location", *node.fields.map { |field| + def <%= node.human %>(<%= ["source: default_source", "location: default_location", "flags: 0", *node.fields.map { |field| case field when Prism::Template::NodeField, Prism::Template::ConstantField "#{field.name}: default_node(source, location)" @@ -77,13 +77,13 @@ module Prism "#{field.name}: \"\"" when Prism::Template::LocationField "#{field.name}: location" - when Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::FlagsField, Prism::Template::IntegerField, Prism::Template::DoubleField + when Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::IntegerField, Prism::Template::DoubleField "#{field.name}: 0" else raise end }].join(", ") %>) - <%= node.name %>.new(<%= ["source", "location", *node.fields.map(&:name)].join(", ") %>) + <%= node.name %>.new(<%= ["source", "location", "flags", *node.fields.map(&:name)].join(", ") %>) end <%- end -%> <%- flags.each do |flag| -%> diff --git a/templates/lib/prism/inspect_visitor.rb.erb b/templates/lib/prism/inspect_visitor.rb.erb index 9328da636b0..8b35b079c9f 100644 --- a/templates/lib/prism/inspect_visitor.rb.erb +++ b/templates/lib/prism/inspect_visitor.rb.erb @@ -69,10 +69,13 @@ module Prism # Inspect a <%= node.name %> node. def visit_<%= node.human %>(node) commands << [inspect_node(<%= node.name.inspect %>, node), indent] - <%- node.fields.each_with_index do |field, index| -%> - <%- pointer = index == node.fields.length - 1 ? "└── " : "├── " -%> - <%- preadd = index == node.fields.length - 1 ? " " : "│ " -%> + <%- (fields = [*node.flags, *node.fields]).each_with_index do |field, index| -%> + <%- pointer = index == fields.length - 1 ? "└── " : "├── " -%> + <%- preadd = index == fields.length - 1 ? " " : "│ " -%> <%- case field -%> + <%- when Prism::Template::Flags -%> + flags = [<%= field.values.map { |value| "(\"#{value.name.downcase}\" if node.#{value.name.downcase}?)" }.join(", ") %>].compact + commands << ["<%= pointer %>flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent] <%- when Prism::Template::NodeListField -%> commands << ["<%= pointer %><%= field.name %>: (length: #{(<%= field.name %> = node.<%= field.name %>).length})\n", indent] if <%= field.name %>.any? @@ -101,10 +104,6 @@ module Prism else commands << ["<%= pointer %><%= field.name %>: #{<%= field.name %>.inspect}\n", indent] end - <%- when Prism::Template::FlagsField -%> - <%- flag = flags.find { |flag| flag.name == field.kind }.tap { |flag| raise unless flag } -%> - flags = [<%= flag.values.map { |value| "(\"#{value.name.downcase}\" if node.#{value.name.downcase}?)" }.join(", ") %>].compact - commands << ["<%= pointer %><%= field.name %>: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent] <%- when Prism::Template::LocationField, Prism::Template::OptionalLocationField -%> commands << ["<%= pointer %><%= field.name %>: #{inspect_location(node.<%= field.name %>)}\n", indent] <%- end -%> diff --git a/templates/lib/prism/node.rb.erb b/templates/lib/prism/node.rb.erb index 945b62fadbb..ce166dda65f 100644 --- a/templates/lib/prism/node.rb.erb +++ b/templates/lib/prism/node.rb.erb @@ -49,6 +49,21 @@ module Prism location.slice_lines end + # An bitset of flags for this node. There are certain flags that are common + # for all nodes, and then some nodes have specific flags. + attr_reader :flags + protected :flags + + # Returns true if the node has the newline flag set. + def newline? + flags.anybits?(NodeFlags::NEWLINE) + end + + # Returns true if the node has the static literal flag set. + def static_literal? + flags.anybits?(NodeFlags::STATIC_LITERAL) + end + # Similar to inspect, but respects the current level of indentation given by # the pretty print object. def pretty_print(q) @@ -167,9 +182,10 @@ module Prism <%- end -%> class <%= node.name -%> < Node # Initialize a new <%= node.name %> node. - def initialize(<%= ["source", "location", *node.fields.map(&:name)].join(", ") %>) + def initialize(<%= ["source", "location", "flags", *node.fields.map(&:name)].join(", ") %>) @source = source @location = location + @flags = flags <%- node.fields.each do |field| -%> <%- if Prism::Template::CHECK_FIELD_KIND && field.respond_to?(:check_field_kind) -%> raise <%= field.name %>.inspect unless <%= field.check_field_kind %> @@ -228,9 +244,9 @@ module Prism }.compact.join(", ") %>] #: Array[Prism::node | Location] end - # def copy: (<%= (["?location: Location"] + node.fields.map { |field| "?#{field.name}: #{field.rbs_class}" }).join(", ") %>) -> <%= node.name %> - def copy(<%= (["location"] + node.fields.map(&:name)).map { |field| "#{field}: self.#{field}" }.join(", ") %>) - <%= node.name %>.new(<%= ["source", "location", *node.fields.map(&:name)].join(", ") %>) + # def copy: (<%= (["?location: Location", "?flags: Integer"] + node.fields.map { |field| "?#{field.name}: #{field.rbs_class}" }).join(", ") %>) -> <%= node.name %> + def copy(<%= (["location", "flags"] + node.fields.map(&:name)).map { |field| "#{field}: self.#{field}" }.join(", ") %>) + <%= node.name %>.new(<%= ["source", "location", "flags", *node.fields.map(&:name)].join(", ") %>) end # def deconstruct: () -> Array[nil | Node] @@ -240,10 +256,19 @@ module Prism def deconstruct_keys(keys) { <%= (node.fields.map { |field| "#{field.name}: #{field.name}" } + ["location: location"]).join(", ") %> } end + <%- if (node_flags = node.flags) -%> + <%- node_flags.values.each do |value| -%> + + # def <%= value.name.downcase %>?: () -> bool + def <%= value.name.downcase %>? + flags.anybits?(<%= node_flags.name %>::<%= value.name %>) + end + <%- end -%> + <%- end -%> <%- node.fields.each do |field| -%> <%- if field.comment.nil? -%> - # <%= "protected " if field.is_a?(Prism::Template::FlagsField) %>attr_reader <%= field.name %>: <%= field.rbs_class %> + # attr_reader <%= field.name %>: <%= field.rbs_class %> <%- else -%> <%- field.each_comment_line do |line| -%> #<%= line %> @@ -269,7 +294,7 @@ module Prism end end <%- else -%> - attr_reader :<%= field.name -%><%= "\n protected :#{field.name}" if field.is_a?(Prism::Template::FlagsField) %> + attr_reader :<%= field.name -%> <%- end -%> <%- end -%> <%- node.fields.each do |field| -%> @@ -290,14 +315,6 @@ module Prism def <%= field.name.delete_suffix("_loc") %> <%= field.name %>&.slice end - <%- when Prism::Template::FlagsField -%> - <%- flags.find { |flag| flag.name == field.kind }.tap { |flag| raise "Expected to find #{field.kind}" unless flag }.values.each do |value| -%> - - # def <%= value.name.downcase %>?: () -> bool - def <%= value.name.downcase %>? - <%= field.name %>.anybits?(<%= field.kind %>::<%= value.name %>) - end - <%- end -%> <%- end -%> <%- end -%> @@ -337,15 +354,17 @@ module Prism # Implements case-equality for the node. This is effectively == but without # comparing the value of locations. Locations are checked only for presence. def ===(other) - other.is_a?(<%= node.name %>)<%= " &&" if node.fields.any? %> - <%- node.fields.each_with_index do |field, index| -%> + other.is_a?(<%= node.name %>)<%= " &&" if (fields = [*node.flags, *node.fields]).any? %> + <%- fields.each_with_index do |field, index| -%> <%- if field.is_a?(Prism::Template::LocationField) || field.is_a?(Prism::Template::OptionalLocationField) -%> - (<%= field.name %>.nil? == other.<%= field.name %>.nil?)<%= " &&" if index != node.fields.length - 1 %> + (<%= field.name %>.nil? == other.<%= field.name %>.nil?)<%= " &&" if index != fields.length - 1 %> <%- elsif field.is_a?(Prism::Template::NodeListField) || field.is_a?(Prism::Template::ConstantListField) -%> (<%= field.name %>.length == other.<%= field.name %>.length) && - <%= field.name %>.zip(other.<%= field.name %>).all? { |left, right| left === right }<%= " &&" if index != node.fields.length - 1 %> + <%= field.name %>.zip(other.<%= field.name %>).all? { |left, right| left === right }<%= " &&" if index != fields.length - 1 %> + <%- elsif field.is_a?(Prism::Template::Flags) -%> + (flags === other.flags)<%= " &&" if index != fields.length - 1 %> <%- else -%> - (<%= field.name %> === other.<%= field.name %>)<%= " &&" if index != node.fields.length - 1 %> + (<%= field.name %> === other.<%= field.name %>)<%= " &&" if index != fields.length - 1 %> <%- end -%> <%- end -%> end @@ -357,9 +376,20 @@ module Prism module <%= flag.name %> <%- flag.values.each_with_index do |value, index| -%> # <%= value.comment %> - <%= value.name %> = 1 << <%= index %> + <%= value.name %> = 1 << <%= (index + 2) %> <%= "\n" if value != flag.values.last -%> <%- end -%> end <%- end -%> + + # The flags that are common to all nodes. + module NodeFlags + # A flag to indicate that the node is a candidate to emit a :line event + # through tracepoint when compiled. + NEWLINE = 1 + + # A flag to indicate that the value that the node represents is a value that + # can be determined at parse-time. + STATIC_LITERAL = 2 + end end diff --git a/templates/lib/prism/reflection.rb.erb b/templates/lib/prism/reflection.rb.erb index 3c1d61c6c1a..6c8b2f4d257 100644 --- a/templates/lib/prism/reflection.rb.erb +++ b/templates/lib/prism/reflection.rb.erb @@ -97,7 +97,7 @@ module Prism case node.type <%- nodes.each do |node| -%> when :<%= node.human %> - [<%= node.fields.map { |field| + [<%= [*node.flags, *node.fields].map { |field| case field when Prism::Template::NodeField "NodeField.new(:#{field.name})" @@ -121,9 +121,8 @@ module Prism "IntegerField.new(:#{field.name})" when Prism::Template::DoubleField "FloatField.new(:#{field.name})" - when Prism::Template::FlagsField - found = flags.find { |flag| flag.name == field.kind }.tap { |found| raise "Expected to find #{field.kind}" unless found } - "FlagsField.new(:#{field.name}, [#{found.values.map { |value| ":#{value.name.downcase}?" }.join(", ")}])" + when Prism::Template::Flags + "FlagsField.new(:flags, [#{field.values.map { |value| ":#{value.name.downcase}?" }.join(", ")}])" else raise field.class.name end diff --git a/templates/lib/prism/serialize.rb.erb b/templates/lib/prism/serialize.rb.erb index 5532a7fd6a6..cc16c09fe70 100644 --- a/templates/lib/prism/serialize.rb.erb +++ b/templates/lib/prism/serialize.rb.erb @@ -330,7 +330,7 @@ module Prism <%- if node.needs_serialized_length? -%> load_uint32 <%- end -%> - <%= node.name %>.new(<%= ["source", "location", *node.fields.map { |field| + <%= node.name %>.new(<%= ["source", "location", "load_varuint", *node.fields.map { |field| case field when Prism::Template::NodeField then "load_node" when Prism::Template::OptionalNodeField then "load_optional_node" @@ -342,7 +342,7 @@ module Prism when Prism::Template::LocationField then "load_location" when Prism::Template::OptionalLocationField then "load_optional_location" when Prism::Template::UInt8Field then "io.getbyte" - when Prism::Template::UInt32Field, Prism::Template::FlagsField then "load_varuint" + when Prism::Template::UInt32Field then "load_varuint" when Prism::Template::IntegerField then "load_integer" when Prism::Template::DoubleField then "load_double" else raise @@ -366,7 +366,7 @@ module Prism <%- if node.needs_serialized_length? -%> load_uint32 <%- end -%> - <%= node.name %>.new(<%= ["source", "location", *node.fields.map { |field| + <%= node.name %>.new(<%= ["source", "location", "load_varuint", *node.fields.map { |field| case field when Prism::Template::NodeField then "load_node" when Prism::Template::OptionalNodeField then "load_optional_node" @@ -378,7 +378,7 @@ module Prism when Prism::Template::LocationField then "load_location" when Prism::Template::OptionalLocationField then "load_optional_location" when Prism::Template::UInt8Field then "io.getbyte" - when Prism::Template::UInt32Field, Prism::Template::FlagsField then "load_varuint" + when Prism::Template::UInt32Field then "load_varuint" when Prism::Template::IntegerField then "load_integer" when Prism::Template::DoubleField then "load_double" else raise diff --git a/templates/rbi/prism/node.rbi.erb b/templates/rbi/prism/node.rbi.erb index 923324ff20f..07c31ea95aa 100644 --- a/templates/rbi/prism/node.rbi.erb +++ b/templates/rbi/prism/node.rbi.erb @@ -64,6 +64,15 @@ end #<%= line %> <%- end -%> class Prism::<%= node.name -%> < Prism::Node + sig{ returns(Integer) } + def flags; end + <%- if (node_flags = node.flags) -%> + <%- node_flags.values.each do |value| -%> + + sig { returns(T::Boolean) } + def <%= value.name.downcase %>?; end + <%- end -%> + <%- node.fields.each do |field| -%> sig { returns(<%= field.rbi_class %>) } def <%= field.name %>; end @@ -106,11 +115,6 @@ class Prism::<%= node.name -%> < Prism::Node sig { returns(T.nilable(String)) } def <%= field.name.delete_suffix("_loc") %>; end - <%- when Prism::Template::FlagsField -%> - <%- flags.find { |flag| flag.name == field.kind }.tap { |flag| raise "Expected to find #{field.kind}" unless flag }.values.each do |value| -%> - - sig { returns(T::Boolean) } - def <%= value.name.downcase %>?; end <%- end -%> <%- end -%> <%- end -%> diff --git a/templates/sig/prism/_private/dot_visitor.rbs.erb b/templates/sig/prism/_private/dot_visitor.rbs.erb index 92b7b8f13d4..4b380ecc97c 100644 --- a/templates/sig/prism/_private/dot_visitor.rbs.erb +++ b/templates/sig/prism/_private/dot_visitor.rbs.erb @@ -39,7 +39,7 @@ module Prism def location_inspect: (Location location) -> String <%- flags.each do |flag| -%> - def <%= flag.human %>_inspect: (<%= nodes.map { |node| node.name if node.fields.any? { |field| field.is_a?(Prism::Template::FlagsField) && field.kind == flag.name } }.compact.join(" | ") %> node) -> String + def <%= flag.human %>_inspect: (<%= nodes.filter_map { |node| node.name if node.flags == flag }.join(" | ") %> node) -> String <%- end -%> end end diff --git a/templates/sig/prism/node.rbs.erb b/templates/sig/prism/node.rbs.erb index 3064bd7eacc..15502b89c6e 100644 --- a/templates/sig/prism/node.rbs.erb +++ b/templates/sig/prism/node.rbs.erb @@ -47,6 +47,14 @@ module Prism class <%= node.name -%> < Node include _Node + attr_reader :flags + <%- if (node_flags = node.flags) -%> + <%- node_flags.values.each do |value| -%> + + def <%= value.name.downcase %>?: () -> bool + <%- end -%> + <%- end -%> + <%- node.fields.each do |field| -%> attr_reader <%= field.name %>: <%= field.rbs_class %> <%- end -%> @@ -64,10 +72,6 @@ module Prism <%- raise unless field.name.end_with?("_loc") -%> <%- next if node.fields.any? { |other| other.name == field.name.delete_suffix("_loc") } -%> def <%= field.name.delete_suffix("_loc") %>: () -> String? - <%- when Prism::Template::FlagsField -%> - <%- flags.find { |flag| flag.name == field.kind }.tap { |flag| raise "Expected to find #{field.kind}" unless flag }.values.each do |value| -%> - def <%= value.name.downcase %>?: () -> bool - <%- end -%> <%- end -%> <%- end -%> def type: () -> :<%= node.human %> diff --git a/templates/src/node.c.erb b/templates/src/node.c.erb index da30a96ec43..2357e552000 100644 --- a/templates/src/node.c.erb +++ b/templates/src/node.c.erb @@ -108,12 +108,12 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) { <%- nodes.each do |node| -%> #line <%= __LINE__ + 1 %> "prism/templates/src/<%= File.basename(__FILE__) %>" case <%= node.type %>: { - <%- if node.fields.any? { |field| ![Prism::Template::LocationField, Prism::Template::OptionalLocationField, Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::FlagsField, Prism::Template::ConstantField, Prism::Template::OptionalConstantField, Prism::Template::DoubleField].include?(field.class) } -%> + <%- if node.fields.any? { |field| ![Prism::Template::LocationField, Prism::Template::OptionalLocationField, Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::ConstantField, Prism::Template::OptionalConstantField, Prism::Template::DoubleField].include?(field.class) } -%> pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node; <%- end -%> <%- node.fields.each do |field| -%> <%- case field -%> - <%- when Prism::Template::LocationField, Prism::Template::OptionalLocationField, Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::FlagsField, Prism::Template::ConstantField, Prism::Template::OptionalConstantField, Prism::Template::DoubleField -%> + <%- when Prism::Template::LocationField, Prism::Template::OptionalLocationField, Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::ConstantField, Prism::Template::OptionalConstantField, Prism::Template::DoubleField -%> <%- when Prism::Template::NodeField -%> pm_node_destroy(parser, (pm_node_t *)cast-><%= field.name %>); <%- when Prism::Template::OptionalNodeField -%> @@ -244,7 +244,7 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no const pm_<%= node.human %>_t *cast = (const pm_<%= node.human %>_t *) node; pm_dump_json_location(buffer, parser, &cast->base.location); - <%- node.fields.each_with_index do |field, index| -%> + <%- [*node.flags, *node.fields].each_with_index do |field, index| -%> // Dump the <%= field.name %> field pm_buffer_append_byte(buffer, ','); @@ -301,12 +301,11 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no pm_buffer_append_format(buffer, "%" PRIu8, cast-><%= field.name %>); <%- when Prism::Template::UInt32Field -%> pm_buffer_append_format(buffer, "%" PRIu32, cast-><%= field.name %>); - <%- when Prism::Template::FlagsField -%> + <%- when Prism::Template::Flags -%> size_t flags = 0; pm_buffer_append_byte(buffer, '['); - <%- found = flags.find { |flag| flag.name == field.kind }.tap { |found| raise "Expected to find #{field.kind}" unless found } -%> - <%- found.values.each_with_index do |value, index| -%> - if (PM_NODE_FLAG_P(cast, PM_<%= found.human.upcase %>_<%= value.name %>)) { + <%- node.flags.values.each_with_index do |value, index| -%> + if (PM_NODE_FLAG_P(cast, PM_<%= node.flags.human.upcase %>_<%= value.name %>)) { if (flags != 0) pm_buffer_append_byte(buffer, ','); pm_buffer_append_string(buffer, "\"<%= value.name %>\"", <%= value.name.bytesize + 2 %>); flags++; diff --git a/templates/src/prettyprint.c.erb b/templates/src/prettyprint.c.erb index 27f44cd996f..639c2fecf33 100644 --- a/templates/src/prettyprint.c.erb +++ b/templates/src/prettyprint.c.erb @@ -31,14 +31,14 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm return; <%- nodes.each do |node| -%> case <%= node.type %>: { - <%- if node.fields.any? -%> + <%- if !node.flags.nil? || node.fields.any? -%> pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node; <%- end -%> pm_buffer_append_string(output_buffer, "@ <%= node.name %> (location: ", <%= node.name.length + 14 %>); prettyprint_location(output_buffer, parser, &node->location); pm_buffer_append_string(output_buffer, ")\n", 2); - <%- node.fields.each_with_index do |field, index| -%> - <%- preadd = index == node.fields.length - 1 ? " " : "| " -%> + <%- (fields = [*node.flags, *node.fields]).each_with_index do |field, index| -%> + <%- preadd = index == fields.length - 1 ? " " : "| " -%> // <%= field.name %> { @@ -123,11 +123,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm pm_buffer_append_format(output_buffer, " %" PRIu8 "\n", cast-><%= field.name %>); <%- when Prism::Template::UInt32Field -%> pm_buffer_append_format(output_buffer, " %" PRIu32 "\n", cast-><%= field.name %>); - <%- when Prism::Template::FlagsField -%> + <%- when Prism::Template::Flags -%> bool found = false; - <%- found = flags.find { |flag| flag.name == field.kind }.tap { |found| raise "Expected to find #{field.kind}" unless found } -%> - <%- found.values.each do |value| -%> - if (cast->base.<%= field.name %> & PM_<%= found.human.upcase %>_<%= value.name %>) { + <%- field.values.each do |value| -%> + if (cast->base.flags & PM_<%= field.human.upcase %>_<%= value.name %>) { if (found) pm_buffer_append_byte(output_buffer, ','); pm_buffer_append_string(output_buffer, " <%= value.name.downcase %>", <%= value.name.bytesize + 1 %>); found = true; diff --git a/templates/src/serialize.c.erb b/templates/src/serialize.c.erb index dd4b3fa5f04..9c3ddecf25e 100644 --- a/templates/src/serialize.c.erb +++ b/templates/src/serialize.c.erb @@ -89,6 +89,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) { size_t length_offset = buffer->length; pm_buffer_append_string(buffer, "\0\0\0\0", 4); /* consume 4 bytes, updated below */ <%- end -%> + pm_buffer_append_varuint(buffer, (uint32_t) node->flags); <%- node.fields.each do |field| -%> <%- case field -%> <%- when Prism::Template::NodeField -%> @@ -132,8 +133,6 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) { pm_buffer_append_byte(buffer, ((pm_<%= node.human %>_t *)node)-><%= field.name %>); <%- when Prism::Template::UInt32Field -%> pm_buffer_append_varuint(buffer, ((pm_<%= node.human %>_t *)node)-><%= field.name %>); - <%- when Prism::Template::FlagsField -%> - pm_buffer_append_varuint(buffer, (uint32_t)(node->flags & ~PM_NODE_FLAG_COMMON_MASK)); <%- when Prism::Template::IntegerField -%> pm_serialize_integer(&((pm_<%= node.human %>_t *)node)-><%= field.name %>, buffer); <%- when Prism::Template::DoubleField -%> diff --git a/templates/template.rb b/templates/template.rb index 7a330f5e27c..ba8013c9a35 100755 --- a/templates/template.rb +++ b/templates/template.rb @@ -357,27 +357,6 @@ def java_type end end - # This represents a set of flags. It is very similar to the UInt32Field, but - # can be directly embedded into the flags field on the struct and provides - # convenient methods for checking if a flag is set. - class FlagsField < Field - def rbs_class - "Integer" - end - - def rbi_class - "Integer" - end - - def java_type - "short" - end - - def kind - options.fetch(:kind) - end - end - # This represents an arbitrarily-sized integer. When it gets to Ruby it will # be an Integer. class IntegerField < Field @@ -414,9 +393,9 @@ def java_type # in YAML format. It contains information about the name of the node and the # various child nodes it contains. class NodeType - attr_reader :name, :type, :human, :fields, :newline, :comment + attr_reader :name, :type, :human, :flags, :fields, :newline, :comment - def initialize(config) + def initialize(config, flags) @name = config.fetch("name") type = @name.gsub(/(?<=.)[A-Z]/, "_\\0") @@ -430,13 +409,14 @@ def initialize(config) options = field.transform_keys(&:to_sym) options.delete(:type) - # If/when we have documentation on every field, this should be changed - # to use fetch instead of delete. + # If/when we have documentation on every field, this should be + # changed to use fetch instead of delete. comment = options.delete(:comment) type.new(comment: comment, **options) end + @flags = config.key?("flags") ? flags.fetch(config.fetch("flags")) : nil @newline = config.fetch("newline", true) @comment = config.fetch("comment") end @@ -474,7 +454,6 @@ def field_type_for(name) when "location?" then OptionalLocationField when "uint8" then UInt8Field when "uint32" then UInt32Field - when "flags" then FlagsField when "integer" then IntegerField when "double" then DoubleField else raise("Unknown field type: #{name.inspect}") @@ -603,13 +582,14 @@ def locals @locals ||= begin config = YAML.load_file(File.expand_path("../config.yml", __dir__)) + flags = config.fetch("flags").to_h { |flags| [flags["name"], Flags.new(flags)] } { errors: config.fetch("errors").map { |name| Error.new(name) }, warnings: config.fetch("warnings").map { |name| Warning.new(name) }, - nodes: config.fetch("nodes").map { |node| NodeType.new(node) }.sort_by(&:name), + nodes: config.fetch("nodes").map { |node| NodeType.new(node, flags) }.sort_by(&:name), tokens: config.fetch("tokens").map { |token| Token.new(token) }, - flags: config.fetch("flags").map { |flags| Flags.new(flags) } + flags: flags.values } end end diff --git a/test/prism/newline_test.rb b/test/prism/newline_test.rb index 03d7df4c97f..a244b5428a6 100644 --- a/test/prism/newline_test.rb +++ b/test/prism/newline_test.rb @@ -88,7 +88,7 @@ def prism_lines(result) while node = queue.shift queue.concat(node.compact_child_nodes) - newlines << result.source.line(node.location.start_offset) if node&.newline? + newlines << result.source.line(node.location.start_offset) if node&.newline_flag? end newlines.sort diff --git a/test/prism/result/integer_base_flags_test.rb b/test/prism/result/integer_base_flags_test.rb index ef15fb437c0..e3ab8c69109 100644 --- a/test/prism/result/integer_base_flags_test.rb +++ b/test/prism/result/integer_base_flags_test.rb @@ -11,7 +11,7 @@ class IntegerBaseFlagsTest < TestCase # # In C, this would look something like: # - # ((flags & ~DECIMAL) << 1) || 10 + # ((flags & ~DECIMAL) >> 1) || 10 # # We have to do some other work in Ruby because 0 is truthy and ~ on an # integer doesn't have a fixed width. @@ -26,7 +26,7 @@ def test_flags def base(source) node = Prism.parse_statement(source) - value = (node.send(:flags) & (0b1111 - IntegerBaseFlags::DECIMAL)) << 1 + value = (node.send(:flags) & (0b111100 - IntegerBaseFlags::DECIMAL)) >> 1 value == 0 ? 10 : value end end diff --git a/test/prism/snapshots/integer_operations.txt b/test/prism/snapshots/integer_operations.txt index 4660928ad26..4dda43e38c7 100644 --- a/test/prism/snapshots/integer_operations.txt +++ b/test/prism/snapshots/integer_operations.txt @@ -236,7 +236,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (25,0)-(25,5)) - │ ├── flags: ∅ + │ ├── flags: ignore_visibility │ ├── receiver: │ │ @ IntegerNode (location: (25,0)-(25,1)) │ │ ├── flags: decimal @@ -274,7 +274,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (29,0)-(29,6)) - │ ├── flags: ∅ + │ ├── flags: ignore_visibility │ ├── receiver: │ │ @ IntegerNode (location: (29,0)-(29,1)) │ │ ├── flags: decimal @@ -369,7 +369,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (39,0)-(39,5)) - │ ├── flags: ∅ + │ ├── flags: ignore_visibility │ ├── receiver: │ │ @ IntegerNode (location: (39,0)-(39,1)) │ │ ├── flags: decimal @@ -388,7 +388,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (41,0)-(41,6)) - │ ├── flags: ∅ + │ ├── flags: ignore_visibility │ ├── receiver: │ │ @ IntegerNode (location: (41,0)-(41,1)) │ │ ├── flags: decimal diff --git a/test/prism/snapshots/ranges.txt b/test/prism/snapshots/ranges.txt index 2fffe805376..a9688baf306 100644 --- a/test/prism/snapshots/ranges.txt +++ b/test/prism/snapshots/ranges.txt @@ -346,7 +346,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (35,0)-(35,7)) - │ ├── flags: ∅ + │ ├── flags: ignore_visibility │ ├── receiver: │ │ @ RangeNode (location: (35,0)-(35,3)) │ │ ├── flags: ∅ @@ -370,7 +370,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (37,0)-(37,7)) - │ ├── flags: ∅ + │ ├── flags: ignore_visibility │ ├── receiver: │ │ @ RangeNode (location: (37,0)-(37,3)) │ │ ├── flags: ∅ @@ -394,7 +394,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (39,0)-(39,8)) - │ ├── flags: ∅ + │ ├── flags: ignore_visibility │ ├── receiver: │ │ @ RangeNode (location: (39,0)-(39,3)) │ │ ├── flags: ∅ @@ -418,7 +418,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (41,0)-(41,8)) - │ ├── flags: ∅ + │ ├── flags: ignore_visibility │ ├── receiver: │ │ @ RangeNode (location: (41,0)-(41,3)) │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/call_gt.txt b/test/prism/snapshots/seattlerb/call_gt.txt index a6f19e5adfe..90f419a4122 100644 --- a/test/prism/snapshots/seattlerb/call_gt.txt +++ b/test/prism/snapshots/seattlerb/call_gt.txt @@ -4,7 +4,7 @@ @ StatementsNode (location: (1,0)-(1,5)) └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: ∅ + ├── flags: ignore_visibility ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) │ ├── flags: decimal diff --git a/test/prism/snapshots/seattlerb/call_lt.txt b/test/prism/snapshots/seattlerb/call_lt.txt index 14f50585d93..0020494e571 100644 --- a/test/prism/snapshots/seattlerb/call_lt.txt +++ b/test/prism/snapshots/seattlerb/call_lt.txt @@ -4,7 +4,7 @@ @ StatementsNode (location: (1,0)-(1,5)) └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: ∅ + ├── flags: ignore_visibility ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) │ ├── flags: decimal diff --git a/test/prism/snapshots/seattlerb/call_lte.txt b/test/prism/snapshots/seattlerb/call_lte.txt index 665a99d60a8..e6630a7f281 100644 --- a/test/prism/snapshots/seattlerb/call_lte.txt +++ b/test/prism/snapshots/seattlerb/call_lte.txt @@ -4,7 +4,7 @@ @ StatementsNode (location: (1,0)-(1,6)) └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: ∅ + ├── flags: ignore_visibility ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) │ ├── flags: decimal diff --git a/test/prism/snapshots/whitequark/send_binary_op.txt b/test/prism/snapshots/whitequark/send_binary_op.txt index 540a7681dca..09991c5679e 100644 --- a/test/prism/snapshots/whitequark/send_binary_op.txt +++ b/test/prism/snapshots/whitequark/send_binary_op.txt @@ -238,7 +238,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (19,0)-(19,7)) - │ ├── flags: ∅ + │ ├── flags: ignore_visibility │ ├── receiver: │ │ @ CallNode (location: (19,0)-(19,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -290,7 +290,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (23,0)-(23,8)) - │ ├── flags: ∅ + │ ├── flags: ignore_visibility │ ├── receiver: │ │ @ CallNode (location: (23,0)-(23,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -420,7 +420,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (33,0)-(33,7)) - │ ├── flags: ∅ + │ ├── flags: ignore_visibility │ ├── receiver: │ │ @ CallNode (location: (33,0)-(33,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -446,7 +446,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (35,0)-(35,8)) - │ ├── flags: ∅ + │ ├── flags: ignore_visibility │ ├── receiver: │ │ @ CallNode (location: (35,0)-(35,3)) │ │ ├── flags: variable_call, ignore_visibility From d0143865c277daa39b33da07cfedbf051b64eaf3 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 2 Jul 2024 15:52:35 -0400 Subject: [PATCH 026/109] Expose common flags in inspect output --- templates/lib/prism/inspect_visitor.rb.erb | 4 +- templates/template.rb | 4 + test/prism/snapshots/alias.txt | 63 +- test/prism/snapshots/arithmetic.txt | 22 +- test/prism/snapshots/arrays.txt | 251 +++--- test/prism/snapshots/begin_ensure.txt | 59 +- test/prism/snapshots/begin_rescue.txt | 159 +++- test/prism/snapshots/blocks.txt | 117 ++- test/prism/snapshots/boolean_operators.txt | 5 + test/prism/snapshots/booleans.txt | 4 + test/prism/snapshots/break.txt | 118 ++- test/prism/snapshots/case.txt | 113 ++- test/prism/snapshots/classes.txt | 71 +- test/prism/snapshots/command_method_call.txt | 128 +-- test/prism/snapshots/comments.txt | 20 +- test/prism/snapshots/constants.txt | 273 ++++-- test/prism/snapshots/dash_heredocs.txt | 57 +- test/prism/snapshots/defined.txt | 19 +- test/prism/snapshots/dos_endings.txt | 24 +- test/prism/snapshots/dstring.txt | 26 +- test/prism/snapshots/dsym_str.txt | 4 +- .../snapshots/embdoc_no_newline_at_end.txt | 2 + test/prism/snapshots/emoji_method_calls.txt | 6 +- test/prism/snapshots/endless_methods.txt | 20 +- .../endless_range_in_conditional.txt | 19 +- test/prism/snapshots/for.txt | 67 +- test/prism/snapshots/global_variables.txt | 72 +- test/prism/snapshots/hashes.txt | 68 +- test/prism/snapshots/heredoc.txt | 4 +- .../heredoc_with_carriage_returns.txt | 4 +- test/prism/snapshots/heredoc_with_comment.txt | 4 +- .../heredoc_with_escaped_newline_at_start.txt | 10 +- .../heredoc_with_trailing_newline.txt | 4 +- .../snapshots/heredocs_leading_whitespace.txt | 22 +- test/prism/snapshots/heredocs_nested.txt | 30 +- .../heredocs_with_ignored_newlines.txt | 24 +- ...cs_with_ignored_newlines_and_non_empty.txt | 4 +- test/prism/snapshots/if.txt | 114 ++- test/prism/snapshots/indented_file_end.txt | 3 + test/prism/snapshots/integer_operations.txt | 196 ++--- test/prism/snapshots/keyword_method_names.txt | 26 +- test/prism/snapshots/keywords.txt | 16 +- test/prism/snapshots/lambda.txt | 23 +- test/prism/snapshots/method_calls.txt | 428 ++++++---- test/prism/snapshots/methods.txt | 289 +++++-- test/prism/snapshots/modules.txt | 36 +- test/prism/snapshots/multi_write.txt | 34 +- test/prism/snapshots/newline_terminated.txt | 36 +- test/prism/snapshots/next.txt | 99 ++- test/prism/snapshots/nils.txt | 13 +- .../snapshots/non_alphanumeric_methods.txt | 44 +- test/prism/snapshots/not.txt | 23 +- test/prism/snapshots/numbers.txt | 78 +- test/prism/snapshots/patterns.txt | 779 +++++++++++++++--- test/prism/snapshots/procs.txt | 60 +- .../snapshots/range_begin_open_exclusive.txt | 6 +- .../snapshots/range_begin_open_inclusive.txt | 6 +- .../snapshots/range_end_open_exclusive.txt | 6 +- .../snapshots/range_end_open_inclusive.txt | 6 +- test/prism/snapshots/ranges.txt | 175 ++-- test/prism/snapshots/regex.txt | 97 ++- test/prism/snapshots/regex_char_width.txt | 11 +- test/prism/snapshots/repeat_parameters.txt | 44 +- test/prism/snapshots/rescue.txt | 80 +- test/prism/snapshots/return.txt | 70 +- test/prism/snapshots/seattlerb/BEGIN.txt | 6 +- .../seattlerb/TestRubyParserShared.txt | 89 +- .../snapshots/seattlerb/__ENCODING__.txt | 3 + .../seattlerb/alias_gvar_backref.txt | 5 + .../snapshots/seattlerb/alias_resword.txt | 7 +- test/prism/snapshots/seattlerb/and_multi.txt | 7 + .../snapshots/seattlerb/aref_args_assocs.txt | 9 +- .../seattlerb/aref_args_lit_assocs.txt | 11 +- .../snapshots/seattlerb/args_kw_block.txt | 6 +- .../snapshots/seattlerb/array_line_breaks.txt | 6 +- .../seattlerb/array_lits_trailing_calls.txt | 10 +- .../prism/snapshots/seattlerb/assoc__bare.txt | 7 +- .../prism/snapshots/seattlerb/assoc_label.txt | 9 +- .../seattlerb/attr_asgn_colon_id.txt | 7 +- .../seattlerb/attrasgn_array_arg.txt | 12 +- .../seattlerb/attrasgn_array_lhs.txt | 14 +- .../attrasgn_primary_dot_constant.txt | 6 +- .../backticks_interpolation_line.txt | 7 +- test/prism/snapshots/seattlerb/bang_eq.txt | 8 +- test/prism/snapshots/seattlerb/bdot2.txt | 10 +- test/prism/snapshots/seattlerb/bdot3.txt | 10 +- .../seattlerb/begin_ensure_no_bodies.txt | 4 + .../begin_rescue_else_ensure_bodies.txt | 18 +- .../begin_rescue_else_ensure_no_bodies.txt | 6 + .../begin_rescue_ensure_no_bodies.txt | 5 + .../snapshots/seattlerb/block_arg__bare.txt | 4 + .../snapshots/seattlerb/block_arg_kwsplat.txt | 7 +- .../seattlerb/block_arg_opt_arg_block.txt | 9 +- .../seattlerb/block_arg_opt_splat.txt | 9 +- .../block_arg_opt_splat_arg_block_omfg.txt | 9 +- .../seattlerb/block_arg_optional.txt | 9 +- .../snapshots/seattlerb/block_arg_scope.txt | 7 +- .../snapshots/seattlerb/block_arg_scope2.txt | 7 +- .../seattlerb/block_arg_splat_arg.txt | 7 +- .../snapshots/seattlerb/block_args_kwargs.txt | 9 +- .../seattlerb/block_args_no_kwargs.txt | 8 +- .../snapshots/seattlerb/block_args_opt1.txt | 14 +- .../snapshots/seattlerb/block_args_opt2.txt | 11 +- .../snapshots/seattlerb/block_args_opt2_2.txt | 17 +- .../snapshots/seattlerb/block_args_opt3.txt | 18 +- .../block_call_defn_call_block_call.txt | 12 +- .../block_call_dot_op2_brace_block.txt | 14 +- .../block_call_dot_op2_cmd_args_do_block.txt | 14 +- .../seattlerb/block_call_operation_colon.txt | 5 +- .../seattlerb/block_call_operation_dot.txt | 5 +- .../block_call_paren_call_block_call.txt | 11 +- .../block_command_operation_colon.txt | 9 +- .../seattlerb/block_command_operation_dot.txt | 9 +- .../seattlerb/block_decomp_anon_splat_arg.txt | 9 +- .../seattlerb/block_decomp_arg_splat.txt | 9 +- .../seattlerb/block_decomp_arg_splat_arg.txt | 9 +- .../seattlerb/block_decomp_splat.txt | 9 +- test/prism/snapshots/seattlerb/block_kw.txt | 9 +- .../seattlerb/block_kw__required.txt | 7 +- .../snapshots/seattlerb/block_kwarg_lvar.txt | 11 +- .../seattlerb/block_kwarg_lvar_multiple.txt | 13 +- .../snapshots/seattlerb/block_opt_arg.txt | 9 +- .../snapshots/seattlerb/block_opt_splat.txt | 9 +- .../block_opt_splat_arg_block_omfg.txt | 9 +- .../snapshots/seattlerb/block_optarg.txt | 9 +- .../snapshots/seattlerb/block_paren_splat.txt | 9 +- .../snapshots/seattlerb/block_reg_optarg.txt | 9 +- .../snapshots/seattlerb/block_return.txt | 7 +- .../prism/snapshots/seattlerb/block_scope.txt | 6 +- .../snapshots/seattlerb/block_splat_reg.txt | 7 +- test/prism/snapshots/seattlerb/bug169.txt | 6 +- test/prism/snapshots/seattlerb/bug179.txt | 6 +- test/prism/snapshots/seattlerb/bug190.txt | 4 +- test/prism/snapshots/seattlerb/bug191.txt | 18 +- test/prism/snapshots/seattlerb/bug202.txt | 8 +- test/prism/snapshots/seattlerb/bug236.txt | 13 +- test/prism/snapshots/seattlerb/bug290.txt | 6 +- test/prism/snapshots/seattlerb/bug_187.txt | 9 +- test/prism/snapshots/seattlerb/bug_215.txt | 5 +- test/prism/snapshots/seattlerb/bug_249.txt | 15 +- test/prism/snapshots/seattlerb/bug_and.txt | 9 +- .../snapshots/seattlerb/bug_args__19.txt | 11 +- .../snapshots/seattlerb/bug_args_masgn.txt | 8 +- .../snapshots/seattlerb/bug_args_masgn2.txt | 9 +- .../bug_args_masgn_outer_parens__19.txt | 9 +- .../seattlerb/bug_call_arglist_parens.txt | 30 +- .../seattlerb/bug_case_when_regexp.txt | 8 +- test/prism/snapshots/seattlerb/bug_comma.txt | 3 + .../snapshots/seattlerb/bug_cond_pct.txt | 6 +- .../snapshots/seattlerb/bug_hash_args.txt | 10 +- .../bug_hash_args_trailing_comma.txt | 10 +- .../seattlerb/bug_hash_interp_array.txt | 8 +- .../snapshots/seattlerb/bug_masgn_right.txt | 8 +- .../snapshots/seattlerb/bug_not_parens.txt | 4 +- .../seattlerb/bug_op_asgn_rescue.txt | 5 + test/prism/snapshots/seattlerb/call_and.txt | 8 +- .../snapshots/seattlerb/call_arg_assoc.txt | 11 +- .../seattlerb/call_arg_assoc_kwsplat.txt | 14 +- .../snapshots/seattlerb/call_arg_kwsplat.txt | 7 +- .../seattlerb/call_args_assoc_quoted.txt | 24 +- .../call_args_assoc_trailing_comma.txt | 11 +- .../snapshots/seattlerb/call_args_command.txt | 6 +- .../snapshots/seattlerb/call_array_arg.txt | 12 +- .../seattlerb/call_array_block_call.txt | 6 +- .../call_array_lambda_block_call.txt | 7 +- .../seattlerb/call_array_lit_inline_hash.txt | 11 +- test/prism/snapshots/seattlerb/call_assoc.txt | 9 +- .../snapshots/seattlerb/call_assoc_new.txt | 9 +- .../seattlerb/call_assoc_new_if_multiline.txt | 17 +- .../seattlerb/call_assoc_trailing_comma.txt | 9 +- .../seattlerb/call_bang_command_call.txt | 6 +- .../seattlerb/call_bang_squiggle.txt | 8 +- .../seattlerb/call_begin_call_block_call.txt | 9 +- .../seattlerb/call_block_arg_named.txt | 5 +- test/prism/snapshots/seattlerb/call_carat.txt | 8 +- .../prism/snapshots/seattlerb/call_colon2.txt | 5 +- .../snapshots/seattlerb/call_colon_parens.txt | 6 +- test/prism/snapshots/seattlerb/call_div.txt | 8 +- .../snapshots/seattlerb/call_dot_parens.txt | 6 +- test/prism/snapshots/seattlerb/call_env.txt | 4 +- test/prism/snapshots/seattlerb/call_eq3.txt | 8 +- test/prism/snapshots/seattlerb/call_gt.txt | 8 +- .../snapshots/seattlerb/call_kwsplat.txt | 7 +- .../snapshots/seattlerb/call_leading_dots.txt | 4 +- .../seattlerb/call_leading_dots_comment.txt | 4 +- test/prism/snapshots/seattlerb/call_lt.txt | 8 +- test/prism/snapshots/seattlerb/call_lte.txt | 8 +- test/prism/snapshots/seattlerb/call_not.txt | 6 +- test/prism/snapshots/seattlerb/call_pipe.txt | 8 +- .../prism/snapshots/seattlerb/call_rshift.txt | 8 +- .../seattlerb/call_self_brackets.txt | 7 +- .../snapshots/seattlerb/call_spaceship.txt | 8 +- .../call_stabby_do_end_with_block.txt | 12 +- .../call_stabby_with_braces_block.txt | 12 +- test/prism/snapshots/seattlerb/call_star.txt | 8 +- test/prism/snapshots/seattlerb/call_star2.txt | 8 +- .../seattlerb/call_trailing_comma.txt | 6 +- .../seattlerb/call_trailing_dots.txt | 4 +- .../snapshots/seattlerb/call_unary_bang.txt | 6 +- test/prism/snapshots/seattlerb/case_in.txt | 243 ++++-- test/prism/snapshots/seattlerb/case_in_31.txt | 14 +- test/prism/snapshots/seattlerb/case_in_37.txt | 16 +- test/prism/snapshots/seattlerb/case_in_42.txt | 13 +- .../snapshots/seattlerb/case_in_42_2.txt | 12 +- test/prism/snapshots/seattlerb/case_in_47.txt | 15 +- test/prism/snapshots/seattlerb/case_in_67.txt | 12 +- test/prism/snapshots/seattlerb/case_in_86.txt | 15 +- .../snapshots/seattlerb/case_in_86_2.txt | 15 +- .../seattlerb/case_in_array_pat_const.txt | 12 +- .../seattlerb/case_in_array_pat_const2.txt | 13 +- .../case_in_array_pat_paren_assign.txt | 14 +- .../snapshots/seattlerb/case_in_const.txt | 9 +- .../snapshots/seattlerb/case_in_else.txt | 13 +- .../snapshots/seattlerb/case_in_find.txt | 13 +- .../seattlerb/case_in_find_array.txt | 12 +- .../snapshots/seattlerb/case_in_hash_pat.txt | 16 +- .../seattlerb/case_in_hash_pat_assign.txt | 24 +- .../case_in_hash_pat_paren_assign.txt | 16 +- .../seattlerb/case_in_hash_pat_paren_true.txt | 14 +- .../seattlerb/case_in_hash_pat_rest.txt | 16 +- .../seattlerb/case_in_hash_pat_rest_solo.txt | 12 +- .../seattlerb/case_in_if_unless_post_mod.txt | 21 +- .../snapshots/seattlerb/case_in_multiple.txt | 17 +- test/prism/snapshots/seattlerb/case_in_or.txt | 12 +- .../snapshots/seattlerb/class_comments.txt | 6 + .../snapshots/seattlerb/cond_unary_minus.txt | 5 +- .../seattlerb/const_2_op_asgn_or2.txt | 7 +- .../seattlerb/const_3_op_asgn_or.txt | 6 +- .../seattlerb/const_op_asgn_and1.txt | 6 +- .../seattlerb/const_op_asgn_and2.txt | 6 +- .../snapshots/seattlerb/const_op_asgn_or.txt | 7 +- .../snapshots/seattlerb/defined_eh_parens.txt | 5 +- .../seattlerb/defn_arg_asplat_arg.txt | 4 + .../seattlerb/defn_arg_forward_args.txt | 10 +- .../seattlerb/defn_args_forward_args.txt | 12 +- .../snapshots/seattlerb/defn_comments.txt | 3 + .../seattlerb/defn_endless_command.txt | 8 +- .../seattlerb/defn_endless_command_rescue.txt | 9 +- .../snapshots/seattlerb/defn_forward_args.txt | 9 +- .../defn_forward_args__no_parens.txt | 9 +- .../snapshots/seattlerb/defn_kwarg_env.txt | 9 +- .../snapshots/seattlerb/defn_kwarg_kwarg.txt | 8 +- .../seattlerb/defn_kwarg_kwsplat.txt | 6 +- .../seattlerb/defn_kwarg_kwsplat_anon.txt | 6 +- .../snapshots/seattlerb/defn_kwarg_lvar.txt | 8 +- .../seattlerb/defn_kwarg_no_parens.txt | 6 +- .../snapshots/seattlerb/defn_kwarg_val.txt | 6 +- .../snapshots/seattlerb/defn_no_kwargs.txt | 5 + .../snapshots/seattlerb/defn_oneliner.txt | 8 +- .../snapshots/seattlerb/defn_oneliner_eq2.txt | 10 +- .../seattlerb/defn_oneliner_noargs.txt | 6 +- .../defn_oneliner_noargs_parentheses.txt | 6 +- .../seattlerb/defn_oneliner_rescue.txt | 24 +- .../snapshots/seattlerb/defn_opt_last_arg.txt | 5 + .../snapshots/seattlerb/defn_opt_reg.txt | 5 + .../seattlerb/defn_opt_splat_arg.txt | 6 +- .../prism/snapshots/seattlerb/defn_powarg.txt | 4 + .../snapshots/seattlerb/defn_reg_opt_reg.txt | 6 +- .../snapshots/seattlerb/defn_splat_arg.txt | 4 + .../snapshots/seattlerb/defn_unary_not.txt | 5 + .../snapshots/seattlerb/defns_reserved.txt | 4 + .../defs_as_arg_with_do_block_inside.txt | 10 +- .../snapshots/seattlerb/defs_comments.txt | 4 + .../seattlerb/defs_endless_command.txt | 8 +- .../seattlerb/defs_endless_command_rescue.txt | 9 +- test/prism/snapshots/seattlerb/defs_kwarg.txt | 7 +- .../snapshots/seattlerb/defs_oneliner.txt | 9 +- .../snapshots/seattlerb/defs_oneliner_eq2.txt | 11 +- .../seattlerb/defs_oneliner_rescue.txt | 27 +- .../prism/snapshots/seattlerb/difficult0_.txt | 10 +- .../seattlerb/difficult1_line_numbers.txt | 53 +- .../seattlerb/difficult1_line_numbers2.txt | 18 +- .../prism/snapshots/seattlerb/difficult2_.txt | 19 +- .../prism/snapshots/seattlerb/difficult3_.txt | 9 +- .../snapshots/seattlerb/difficult3_2.txt | 7 +- .../snapshots/seattlerb/difficult3_3.txt | 7 +- .../snapshots/seattlerb/difficult3_4.txt | 9 + .../snapshots/seattlerb/difficult3_5.txt | 10 +- .../snapshots/seattlerb/difficult3__10.txt | 9 +- .../snapshots/seattlerb/difficult3__11.txt | 9 +- .../snapshots/seattlerb/difficult3__12.txt | 9 +- .../snapshots/seattlerb/difficult3__6.txt | 9 +- .../snapshots/seattlerb/difficult3__7.txt | 9 +- .../snapshots/seattlerb/difficult3__8.txt | 9 +- .../snapshots/seattlerb/difficult3__9.txt | 9 +- .../seattlerb/difficult4__leading_dots.txt | 4 +- .../seattlerb/difficult4__leading_dots2.txt | 8 +- .../prism/snapshots/seattlerb/difficult6_.txt | 11 +- .../snapshots/seattlerb/difficult6__7.txt | 12 +- .../snapshots/seattlerb/difficult6__8.txt | 12 +- .../prism/snapshots/seattlerb/difficult7_.txt | 20 +- test/prism/snapshots/seattlerb/do_bug.txt | 11 +- test/prism/snapshots/seattlerb/do_lambda.txt | 4 + .../snapshots/seattlerb/dot2_nil__26.txt | 4 +- .../snapshots/seattlerb/dot3_nil__26.txt | 4 +- test/prism/snapshots/seattlerb/dstr_evstr.txt | 10 +- .../seattlerb/dstr_evstr_empty_end.txt | 5 + .../snapshots/seattlerb/dstr_lex_state.txt | 8 +- test/prism/snapshots/seattlerb/dstr_str.txt | 10 +- .../snapshots/seattlerb/dsym_esc_to_sym.txt | 4 +- .../prism/snapshots/seattlerb/dsym_to_sym.txt | 12 +- .../seattlerb/eq_begin_line_numbers.txt | 6 +- ...gin_why_wont_people_use_their_spacebar.txt | 8 +- .../prism/snapshots/seattlerb/evstr_evstr.txt | 8 +- test/prism/snapshots/seattlerb/evstr_str.txt | 8 +- .../snapshots/seattlerb/expr_not_bang.txt | 4 +- test/prism/snapshots/seattlerb/f_kw.txt | 6 +- .../snapshots/seattlerb/f_kw__required.txt | 4 + .../snapshots/seattlerb/flip2_env_lvar.txt | 3 + .../seattlerb/float_with_if_modifier.txt | 6 + .../heredoc__backslash_dos_format.txt | 3 + .../seattlerb/heredoc_backslash_nl.txt | 6 +- .../seattlerb/heredoc_bad_hex_escape.txt | 3 + .../seattlerb/heredoc_bad_oct_escape.txt | 3 + .../snapshots/seattlerb/heredoc_comma_arg.txt | 6 +- .../snapshots/seattlerb/heredoc_lineno.txt | 6 +- .../snapshots/seattlerb/heredoc_nested.txt | 16 +- .../snapshots/seattlerb/heredoc_squiggly.txt | 11 +- ...squiggly_blank_line_plus_interpolation.txt | 9 +- .../heredoc_squiggly_blank_lines.txt | 11 +- .../seattlerb/heredoc_squiggly_empty.txt | 4 +- .../seattlerb/heredoc_squiggly_interp.txt | 15 +- .../seattlerb/heredoc_squiggly_no_indent.txt | 4 +- .../seattlerb/heredoc_squiggly_tabs.txt | 9 +- .../seattlerb/heredoc_squiggly_tabs_extra.txt | 9 +- .../heredoc_squiggly_visually_blank_lines.txt | 11 +- .../heredoc_trailing_slash_continued_call.txt | 4 +- .../snapshots/seattlerb/heredoc_unicode.txt | 4 +- .../heredoc_with_carriage_return_escapes.txt | 4 +- ...c_with_carriage_return_escapes_windows.txt | 4 +- ...redoc_with_extra_carriage_horrible_mix.txt | 4 +- .../heredoc_with_extra_carriage_returns.txt | 4 +- ...oc_with_extra_carriage_returns_windows.txt | 4 +- ...erpolation_and_carriage_return_escapes.txt | 10 +- ...on_and_carriage_return_escapes_windows.txt | 10 +- .../heredoc_with_not_global_interpolation.txt | 4 +- .../heredoc_with_only_carriage_returns.txt | 4 +- ...doc_with_only_carriage_returns_windows.txt | 4 +- test/prism/snapshots/seattlerb/if_elsif.txt | 8 +- test/prism/snapshots/seattlerb/if_symbol.txt | 5 +- .../snapshots/seattlerb/in_expr_no_case.txt | 4 + test/prism/snapshots/seattlerb/index_0.txt | 4 +- .../snapshots/seattlerb/index_0_opasgn.txt | 4 +- .../seattlerb/integer_with_if_modifier.txt | 7 +- .../interpolated_symbol_array_line_breaks.txt | 10 +- .../interpolated_word_array_line_breaks.txt | 6 +- .../prism/snapshots/seattlerb/iter_args_1.txt | 7 +- .../snapshots/seattlerb/iter_args_10_1.txt | 9 +- .../snapshots/seattlerb/iter_args_10_2.txt | 9 +- .../snapshots/seattlerb/iter_args_11_1.txt | 9 +- .../snapshots/seattlerb/iter_args_11_2.txt | 9 +- .../snapshots/seattlerb/iter_args_2__19.txt | 8 +- .../prism/snapshots/seattlerb/iter_args_3.txt | 8 +- .../prism/snapshots/seattlerb/iter_args_4.txt | 7 +- .../prism/snapshots/seattlerb/iter_args_5.txt | 7 +- .../prism/snapshots/seattlerb/iter_args_6.txt | 9 +- .../snapshots/seattlerb/iter_args_7_1.txt | 9 +- .../snapshots/seattlerb/iter_args_7_2.txt | 9 +- .../snapshots/seattlerb/iter_args_8_1.txt | 9 +- .../snapshots/seattlerb/iter_args_8_2.txt | 9 +- .../snapshots/seattlerb/iter_args_9_1.txt | 9 +- .../snapshots/seattlerb/iter_args_9_2.txt | 9 +- test/prism/snapshots/seattlerb/iter_kwarg.txt | 9 +- .../seattlerb/iter_kwarg_kwsplat.txt | 9 +- .../snapshots/seattlerb/label_vs_string.txt | 4 +- .../seattlerb/lambda_do_vs_brace.txt | 16 +- .../seattlerb/lasgn_arg_rescue_arg.txt | 8 +- .../lasgn_call_bracket_rescue_arg.txt | 8 +- .../lasgn_call_nobracket_rescue_arg.txt | 8 +- .../snapshots/seattlerb/lasgn_command.txt | 5 +- test/prism/snapshots/seattlerb/lasgn_env.txt | 5 +- .../snapshots/seattlerb/lasgn_ivar_env.txt | 5 +- .../seattlerb/lasgn_lasgn_command_call.txt | 6 +- .../seattlerb/lasgn_middle_splat.txt | 4 + .../seattlerb/magic_encoding_comment.txt | 11 +- .../seattlerb/masgn_anon_splat_arg.txt | 5 + .../seattlerb/masgn_arg_colon_arg.txt | 4 + .../snapshots/seattlerb/masgn_arg_ident.txt | 4 + .../seattlerb/masgn_arg_splat_arg.txt | 7 + .../snapshots/seattlerb/masgn_colon2.txt | 11 +- .../snapshots/seattlerb/masgn_colon3.txt | 11 +- .../seattlerb/masgn_command_call.txt | 7 +- .../seattlerb/masgn_double_paren.txt | 6 + .../snapshots/seattlerb/masgn_lhs_splat.txt | 13 +- .../prism/snapshots/seattlerb/masgn_paren.txt | 5 + .../snapshots/seattlerb/masgn_splat_arg.txt | 6 + .../seattlerb/masgn_splat_arg_arg.txt | 7 + test/prism/snapshots/seattlerb/masgn_star.txt | 6 +- .../seattlerb/masgn_var_star_var.txt | 6 + .../seattlerb/messy_op_asgn_lineno.txt | 9 +- .../method_call_assoc_trailing_comma.txt | 9 +- .../seattlerb/method_call_trailing_comma.txt | 6 +- .../seattlerb/mlhs_back_anonsplat.txt | 7 + .../snapshots/seattlerb/mlhs_back_splat.txt | 8 + .../seattlerb/mlhs_front_anonsplat.txt | 7 + .../snapshots/seattlerb/mlhs_front_splat.txt | 8 + .../snapshots/seattlerb/mlhs_keyword.txt | 6 +- .../seattlerb/mlhs_mid_anonsplat.txt | 10 + .../snapshots/seattlerb/mlhs_mid_splat.txt | 11 + .../prism/snapshots/seattlerb/mlhs_rescue.txt | 8 +- .../snapshots/seattlerb/module_comments.txt | 6 + .../seattlerb/multiline_hash_declaration.txt | 20 +- ..._interpolated_symbol_array_line_breaks.txt | 10 +- ...on_interpolated_word_array_line_breaks.txt | 6 +- .../seattlerb/op_asgn_command_call.txt | 5 +- .../op_asgn_dot_ident_command_call.txt | 7 +- .../seattlerb/op_asgn_index_command_call.txt | 10 +- ..._asgn_primary_colon_const_command_call.txt | 5 + .../op_asgn_primary_colon_identifier1.txt | 7 +- ..._primary_colon_identifier_command_call.txt | 5 +- .../op_asgn_val_dot_ident_command_call.txt | 6 +- .../seattlerb/parse_def_special_name.txt | 3 + .../seattlerb/parse_if_not_canonical.txt | 10 +- .../seattlerb/parse_if_not_noncanonical.txt | 10 +- .../snapshots/seattlerb/parse_line_block.txt | 8 +- .../parse_line_block_inline_comment.txt | 8 +- ..._block_inline_comment_leading_newlines.txt | 8 +- ...se_line_block_inline_multiline_comment.txt | 8 +- ...ine_call_ivar_arg_no_parens_line_break.txt | 5 +- .../parse_line_call_ivar_line_break_paren.txt | 5 +- .../seattlerb/parse_line_call_no_args.txt | 12 +- .../seattlerb/parse_line_defn_complex.txt | 14 +- .../seattlerb/parse_line_defn_no_parens.txt | 4 + .../parse_line_defn_no_parens_args.txt | 4 + .../snapshots/seattlerb/parse_line_dot2.txt | 12 +- .../seattlerb/parse_line_dot2_open.txt | 10 +- .../snapshots/seattlerb/parse_line_dot3.txt | 12 +- .../seattlerb/parse_line_dot3_open.txt | 10 +- .../parse_line_dstr_escaped_newline.txt | 8 +- .../parse_line_dstr_soft_newline.txt | 8 +- .../parse_line_evstr_after_break.txt | 8 +- .../seattlerb/parse_line_hash_lit.txt | 8 +- .../seattlerb/parse_line_heredoc.txt | 6 +- .../seattlerb/parse_line_heredoc_evstr.txt | 10 +- .../parse_line_heredoc_hardnewline.txt | 6 +- .../parse_line_heredoc_regexp_chars.txt | 6 +- .../parse_line_iter_call_no_parens.txt | 12 +- .../seattlerb/parse_line_iter_call_parens.txt | 12 +- .../seattlerb/parse_line_multiline_str.txt | 6 +- .../parse_line_multiline_str_literal_n.txt | 6 +- .../seattlerb/parse_line_newlines.txt | 3 + .../seattlerb/parse_line_op_asgn.txt | 5 +- .../seattlerb/parse_line_postexe.txt | 6 +- .../snapshots/seattlerb/parse_line_preexe.txt | 6 +- .../snapshots/seattlerb/parse_line_rescue.txt | 14 +- .../snapshots/seattlerb/parse_line_return.txt | 11 +- .../parse_line_str_with_newline_escape.txt | 5 +- .../snapshots/seattlerb/parse_line_to_ary.txt | 7 +- .../parse_line_trailing_newlines.txt | 6 +- .../parse_opt_call_args_assocs_comma.txt | 11 +- .../parse_opt_call_args_lit_comma.txt | 8 +- .../snapshots/seattlerb/parse_pattern_019.txt | 14 +- .../snapshots/seattlerb/parse_pattern_044.txt | 8 + .../snapshots/seattlerb/parse_pattern_051.txt | 20 +- .../snapshots/seattlerb/parse_pattern_058.txt | 23 +- .../seattlerb/parse_pattern_058_2.txt | 21 +- .../snapshots/seattlerb/parse_pattern_069.txt | 16 +- .../snapshots/seattlerb/parse_pattern_076.txt | 19 +- .../seattlerb/parse_until_not_canonical.txt | 7 +- .../parse_until_not_noncanonical.txt | 7 +- .../seattlerb/parse_while_not_canonical.txt | 7 +- .../parse_while_not_noncanonical.txt | 7 +- .../prism/snapshots/seattlerb/pctW_lineno.txt | 4 +- .../seattlerb/pct_Q_backslash_nl.txt | 4 +- test/prism/snapshots/seattlerb/pct_nl.txt | 3 + .../seattlerb/pct_w_heredoc_interp_nested.txt | 10 +- .../snapshots/seattlerb/pipe_semicolon.txt | 6 +- test/prism/snapshots/seattlerb/pipe_space.txt | 6 +- .../snapshots/seattlerb/qWords_space.txt | 4 +- test/prism/snapshots/seattlerb/qsymbols.txt | 10 +- .../snapshots/seattlerb/qsymbols_empty.txt | 4 +- .../seattlerb/qsymbols_empty_space.txt | 4 +- .../snapshots/seattlerb/qsymbols_interp.txt | 17 +- .../seattlerb/quoted_symbol_hash_arg.txt | 8 +- .../seattlerb/quoted_symbol_keys.txt | 8 +- test/prism/snapshots/seattlerb/qw_escape.txt | 4 +- .../snapshots/seattlerb/qw_escape_term.txt | 4 +- .../snapshots/seattlerb/qwords_empty.txt | 4 +- .../seattlerb/read_escape_unicode_curlies.txt | 4 +- .../seattlerb/read_escape_unicode_h4.txt | 4 +- test/prism/snapshots/seattlerb/regexp.txt | 12 +- .../seattlerb/regexp_esc_C_slash.txt | 4 +- .../snapshots/seattlerb/regexp_esc_u.txt | 4 +- .../seattlerb/regexp_escape_extended.txt | 4 +- .../seattlerb/regexp_unicode_curlies.txt | 6 +- .../seattlerb/required_kwarg_no_value.txt | 4 + .../seattlerb/rescue_do_end_ensure_result.txt | 13 +- .../seattlerb/rescue_do_end_no_raise.txt | 21 +- .../seattlerb/rescue_do_end_raised.txt | 13 +- .../seattlerb/rescue_do_end_rescued.txt | 21 +- .../snapshots/seattlerb/rescue_in_block.txt | 10 +- .../snapshots/seattlerb/rescue_parens.txt | 7 +- .../seattlerb/return_call_assocs.txt | 51 +- test/prism/snapshots/seattlerb/rhs_asgn.txt | 6 +- .../snapshots/seattlerb/ruby21_numbers.txt | 12 +- .../snapshots/seattlerb/safe_attrasgn.txt | 6 +- .../seattlerb/safe_attrasgn_constant.txt | 6 +- test/prism/snapshots/seattlerb/safe_call.txt | 4 +- .../seattlerb/safe_call_after_newline.txt | 4 +- .../seattlerb/safe_call_dot_parens.txt | 4 +- .../snapshots/seattlerb/safe_call_newline.txt | 4 +- .../seattlerb/safe_call_operator.txt | 6 +- .../seattlerb/safe_call_rhs_newline.txt | 3 + test/prism/snapshots/seattlerb/safe_calls.txt | 6 +- .../snapshots/seattlerb/safe_op_asgn.txt | 6 +- .../snapshots/seattlerb/safe_op_asgn2.txt | 4 +- .../slashy_newlines_within_string.txt | 6 +- .../seattlerb/stabby_arg_no_paren.txt | 5 + .../stabby_arg_opt_splat_arg_block_omfg.txt | 7 +- .../seattlerb/stabby_block_iter_call.txt | 10 +- ...bby_block_iter_call_no_target_with_arg.txt | 12 +- .../snapshots/seattlerb/stabby_block_kw.txt | 7 +- .../seattlerb/stabby_block_kw__required.txt | 5 + .../snapshots/seattlerb/stabby_proc_scope.txt | 5 + .../snapshots/seattlerb/str_backslashes.txt | 4 +- .../str_double_double_escaped_newline.txt | 6 +- .../seattlerb/str_double_escaped_newline.txt | 6 +- .../seattlerb/str_double_newline.txt | 6 +- test/prism/snapshots/seattlerb/str_evstr.txt | 8 +- .../snapshots/seattlerb/str_evstr_escape.txt | 10 +- .../seattlerb/str_heredoc_interp.txt | 8 +- .../seattlerb/str_interp_ternary_or_label.txt | 14 +- .../str_lit_concat_bad_encodings.txt | 8 +- .../str_newline_hash_line_number.txt | 6 +- .../snapshots/seattlerb/str_pct_Q_nested.txt | 10 +- .../seattlerb/str_pct_nested_nested.txt | 14 +- test/prism/snapshots/seattlerb/str_pct_q.txt | 4 +- .../str_single_double_escaped_newline.txt | 6 +- .../seattlerb/str_single_escaped_newline.txt | 6 +- .../seattlerb/str_single_newline.txt | 6 +- test/prism/snapshots/seattlerb/str_str.txt | 10 +- .../prism/snapshots/seattlerb/str_str_str.txt | 12 +- test/prism/snapshots/seattlerb/super_arg.txt | 5 +- .../snapshots/seattlerb/symbol_empty.txt | 4 +- .../prism/snapshots/seattlerb/symbol_list.txt | 10 +- test/prism/snapshots/seattlerb/symbols.txt | 10 +- .../snapshots/seattlerb/symbols_empty.txt | 4 +- .../seattlerb/symbols_empty_space.txt | 4 +- .../snapshots/seattlerb/symbols_interp.txt | 10 +- test/prism/snapshots/seattlerb/thingy.txt | 10 +- .../snapshots/seattlerb/uminus_float.txt | 3 + .../prism/snapshots/seattlerb/unary_minus.txt | 4 +- test/prism/snapshots/seattlerb/unary_plus.txt | 4 +- .../seattlerb/unary_plus_on_literal.txt | 6 +- .../prism/snapshots/seattlerb/unary_tilde.txt | 4 +- test/prism/snapshots/seattlerb/utf8_bom.txt | 6 +- test/prism/snapshots/seattlerb/when_splat.txt | 5 + .../snapshots/seattlerb/words_interp.txt | 10 +- .../single_method_call_with_bang.txt | 4 +- .../prism/snapshots/single_quote_heredocs.txt | 4 +- test/prism/snapshots/spanning_heredoc.txt | 87 +- .../snapshots/spanning_heredoc_newlines.txt | 18 +- test/prism/snapshots/strings.txt | 130 +-- test/prism/snapshots/super.txt | 42 +- test/prism/snapshots/symbols.txt | 159 ++-- test/prism/snapshots/ternary_operator.txt | 57 +- test/prism/snapshots/tilde_heredocs.txt | 148 ++-- test/prism/snapshots/undef.txt | 40 +- test/prism/snapshots/unescaping.txt | 10 +- test/prism/snapshots/unless.txt | 50 +- .../unparser/corpus/literal/alias.txt | 10 +- .../unparser/corpus/literal/assignment.txt | 259 ++++-- .../unparser/corpus/literal/block.txt | 241 ++++-- .../unparser/corpus/literal/case.txt | 54 +- .../unparser/corpus/literal/class.txt | 40 +- .../snapshots/unparser/corpus/literal/def.txt | 175 +++- .../unparser/corpus/literal/defined.txt | 18 +- .../unparser/corpus/literal/defs.txt | 59 +- .../unparser/corpus/literal/dstr.txt | 96 ++- .../unparser/corpus/literal/empty.txt | 2 + .../unparser/corpus/literal/empty_begin.txt | 3 + .../unparser/corpus/literal/flipflop.txt | 44 +- .../snapshots/unparser/corpus/literal/for.txt | 29 +- .../unparser/corpus/literal/hookexe.txt | 12 +- .../snapshots/unparser/corpus/literal/if.txt | 64 +- .../unparser/corpus/literal/kwbegin.txt | 109 ++- .../unparser/corpus/literal/lambda.txt | 23 +- .../unparser/corpus/literal/literal.txt | 371 ++++++--- .../unparser/corpus/literal/module.txt | 21 +- .../unparser/corpus/literal/opasgn.txt | 104 ++- .../unparser/corpus/literal/pattern.txt | 140 +++- .../unparser/corpus/literal/pragma.txt | 8 +- .../unparser/corpus/literal/range.txt | 26 +- .../unparser/corpus/literal/rescue.txt | 8 + .../unparser/corpus/literal/send.txt | 274 +++--- .../unparser/corpus/literal/since/27.txt | 15 +- .../unparser/corpus/literal/since/30.txt | 28 +- .../unparser/corpus/literal/since/31.txt | 14 +- .../unparser/corpus/literal/since/32.txt | 26 +- .../unparser/corpus/literal/singletons.txt | 6 + .../unparser/corpus/literal/super.txt | 35 +- .../unparser/corpus/literal/unary.txt | 43 +- .../unparser/corpus/literal/undef.txt | 10 +- .../unparser/corpus/literal/variables.txt | 15 +- .../unparser/corpus/literal/while.txt | 146 +++- .../unparser/corpus/semantic/and.txt | 8 + .../unparser/corpus/semantic/block.txt | 36 +- .../unparser/corpus/semantic/def.txt | 12 +- .../unparser/corpus/semantic/dstr.txt | 193 +++-- .../unparser/corpus/semantic/kwbegin.txt | 55 +- .../unparser/corpus/semantic/literal.txt | 30 +- .../unparser/corpus/semantic/opasgn.txt | 16 +- .../unparser/corpus/semantic/send.txt | 12 +- .../unparser/corpus/semantic/undef.txt | 10 +- .../unparser/corpus/semantic/while.txt | 48 +- test/prism/snapshots/until.txt | 54 +- test/prism/snapshots/variables.txt | 139 +++- test/prism/snapshots/while.txt | 113 ++- .../snapshots/whitequark/__ENCODING__.txt | 3 + .../whitequark/__ENCODING___legacy_.txt | 3 + test/prism/snapshots/whitequark/alias.txt | 7 +- .../prism/snapshots/whitequark/alias_gvar.txt | 8 + ...iuous_quoted_label_in_ternary_operator.txt | 9 +- test/prism/snapshots/whitequark/and.txt | 4 + test/prism/snapshots/whitequark/and_asgn.txt | 14 +- .../snapshots/whitequark/and_or_masgn.txt | 14 + .../whitequark/anonymous_blockarg.txt | 8 +- test/prism/snapshots/whitequark/arg.txt | 6 + .../whitequark/arg_duplicate_ignored.txt | 6 + test/prism/snapshots/whitequark/arg_label.txt | 23 +- test/prism/snapshots/whitequark/arg_scope.txt | 8 +- test/prism/snapshots/whitequark/args.txt | 106 ++- .../snapshots/whitequark/args_args_assocs.txt | 17 +- .../whitequark/args_args_assocs_comma.txt | 9 +- .../snapshots/whitequark/args_args_comma.txt | 4 +- .../snapshots/whitequark/args_args_star.txt | 9 +- .../whitequark/args_assocs_comma.txt | 9 +- .../snapshots/whitequark/args_block_pass.txt | 5 +- test/prism/snapshots/whitequark/args_cmd.txt | 4 +- test/prism/snapshots/whitequark/args_star.txt | 9 +- .../snapshots/whitequark/array_assocs.txt | 18 +- .../snapshots/whitequark/array_plain.txt | 8 +- .../snapshots/whitequark/array_splat.txt | 17 +- .../snapshots/whitequark/array_symbols.txt | 8 +- .../whitequark/array_symbols_empty.txt | 6 +- .../whitequark/array_symbols_interp.txt | 16 +- .../snapshots/whitequark/array_words.txt | 4 +- .../whitequark/array_words_empty.txt | 6 +- .../whitequark/array_words_interp.txt | 14 +- test/prism/snapshots/whitequark/asgn_cmd.txt | 7 + test/prism/snapshots/whitequark/asgn_mrhs.txt | 9 +- test/prism/snapshots/whitequark/back_ref.txt | 3 + test/prism/snapshots/whitequark/bang.txt | 4 +- test/prism/snapshots/whitequark/bang_cmd.txt | 4 +- .../snapshots/whitequark/begin_cmdarg.txt | 14 +- .../beginless_erange_after_newline.txt | 8 +- .../beginless_irange_after_newline.txt | 8 +- .../snapshots/whitequark/beginless_range.txt | 10 +- test/prism/snapshots/whitequark/blockarg.txt | 4 + test/prism/snapshots/whitequark/blockargs.txt | 197 +++-- test/prism/snapshots/whitequark/bug_435.txt | 9 +- test/prism/snapshots/whitequark/bug_447.txt | 14 +- test/prism/snapshots/whitequark/bug_452.txt | 11 +- test/prism/snapshots/whitequark/bug_466.txt | 15 +- test/prism/snapshots/whitequark/bug_473.txt | 8 +- test/prism/snapshots/whitequark/bug_480.txt | 8 +- test/prism/snapshots/whitequark/bug_481.txt | 10 +- .../whitequark/bug_ascii_8bit_in_literal.txt | 4 +- .../whitequark/bug_cmd_string_lookahead.txt | 5 +- .../prism/snapshots/whitequark/bug_cmdarg.txt | 20 +- .../whitequark/bug_def_no_paren_eql_begin.txt | 3 + .../whitequark/bug_do_block_in_call_args.txt | 10 +- .../whitequark/bug_do_block_in_cmdarg.txt | 9 +- .../whitequark/bug_do_block_in_hash_brace.txt | 64 +- .../snapshots/whitequark/bug_heredoc_do.txt | 5 +- .../whitequark/bug_interp_single.txt | 14 +- .../whitequark/bug_lambda_leakage.txt | 7 +- .../whitequark/bug_regex_verification.txt | 4 +- .../whitequark/bug_rescue_empty_else.txt | 6 + .../whitequark/bug_while_not_parens_do.txt | 7 +- test/prism/snapshots/whitequark/case_cond.txt | 7 +- .../snapshots/whitequark/case_cond_else.txt | 11 +- test/prism/snapshots/whitequark/case_expr.txt | 9 +- .../snapshots/whitequark/case_expr_else.txt | 13 +- .../snapshots/whitequark/casgn_scoped.txt | 7 +- .../snapshots/whitequark/casgn_toplevel.txt | 6 +- .../snapshots/whitequark/casgn_unscoped.txt | 5 +- test/prism/snapshots/whitequark/character.txt | 4 +- test/prism/snapshots/whitequark/class.txt | 6 + .../snapshots/whitequark/class_super.txt | 5 + .../whitequark/class_super_label.txt | 6 +- .../comments_before_leading_dot__27.txt | 10 +- test/prism/snapshots/whitequark/complex.txt | 13 +- .../prism/snapshots/whitequark/cond_begin.txt | 10 +- .../snapshots/whitequark/cond_begin_masgn.txt | 10 +- .../snapshots/whitequark/cond_eflipflop.txt | 9 +- .../cond_eflipflop_with_beginless_range.txt | 3 + .../cond_eflipflop_with_endless_range.txt | 3 + .../snapshots/whitequark/cond_iflipflop.txt | 9 +- .../cond_iflipflop_with_beginless_range.txt | 3 + .../cond_iflipflop_with_endless_range.txt | 3 + .../whitequark/cond_match_current_line.txt | 9 +- .../snapshots/whitequark/const_op_asgn.txt | 27 +- .../snapshots/whitequark/const_scoped.txt | 4 + .../snapshots/whitequark/const_toplevel.txt | 3 + .../snapshots/whitequark/const_unscoped.txt | 3 + test/prism/snapshots/whitequark/cpath.txt | 7 + test/prism/snapshots/whitequark/cvar.txt | 3 + test/prism/snapshots/whitequark/cvasgn.txt | 5 +- .../whitequark/dedenting_heredoc.txt | 111 +-- ...olating_heredoc_fake_line_continuation.txt | 8 +- ...nterpolating_heredoc_line_continuation.txt | 8 +- test/prism/snapshots/whitequark/def.txt | 8 + test/prism/snapshots/whitequark/defined.txt | 6 + test/prism/snapshots/whitequark/defs.txt | 12 + .../prism/snapshots/whitequark/empty_stmt.txt | 2 + .../whitequark/endless_comparison_method.txt | 32 +- .../snapshots/whitequark/endless_method.txt | 26 +- .../endless_method_command_syntax.txt | 49 +- .../endless_method_forwarded_args_legacy.txt | 9 +- .../endless_method_with_rescue_mod.txt | 17 +- .../endless_method_without_args.txt | 24 +- test/prism/snapshots/whitequark/ensure.txt | 10 +- .../snapshots/whitequark/ensure_empty.txt | 4 + test/prism/snapshots/whitequark/false.txt | 3 + test/prism/snapshots/whitequark/float.txt | 4 + test/prism/snapshots/whitequark/for.txt | 14 +- test/prism/snapshots/whitequark/for_mlhs.txt | 11 +- .../snapshots/whitequark/forward_arg.txt | 9 +- .../whitequark/forward_arg_with_open_args.txt | 74 +- .../whitequark/forward_args_legacy.txt | 18 +- .../forwarded_argument_with_kwrestarg.txt | 9 +- .../forwarded_argument_with_restarg.txt | 9 +- .../whitequark/forwarded_kwrestarg.txt | 8 +- ...warded_kwrestarg_with_additional_kwarg.txt | 12 +- .../whitequark/forwarded_restarg.txt | 8 +- test/prism/snapshots/whitequark/gvar.txt | 3 + test/prism/snapshots/whitequark/gvasgn.txt | 5 +- .../prism/snapshots/whitequark/hash_empty.txt | 3 + .../snapshots/whitequark/hash_hashrocket.txt | 17 +- .../snapshots/whitequark/hash_kwsplat.txt | 9 +- .../prism/snapshots/whitequark/hash_label.txt | 8 +- .../snapshots/whitequark/hash_label_end.txt | 28 +- .../whitequark/hash_pair_value_omission.txt | 22 +- test/prism/snapshots/whitequark/heredoc.txt | 8 +- test/prism/snapshots/whitequark/if.txt | 10 +- test/prism/snapshots/whitequark/if_else.txt | 18 +- test/prism/snapshots/whitequark/if_elsif.txt | 14 +- .../snapshots/whitequark/if_masgn__24.txt | 8 + test/prism/snapshots/whitequark/if_mod.txt | 6 +- .../prism/snapshots/whitequark/if_nl_then.txt | 6 +- test/prism/snapshots/whitequark/int.txt | 8 +- .../snapshots/whitequark/int___LINE__.txt | 3 + .../snapshots/whitequark/interp_digit_var.txt | 86 +- test/prism/snapshots/whitequark/ivar.txt | 3 + test/prism/snapshots/whitequark/ivasgn.txt | 5 +- .../whitequark/keyword_argument_omission.txt | 12 +- test/prism/snapshots/whitequark/kwarg.txt | 4 + .../snapshots/whitequark/kwbegin_compstmt.txt | 8 +- test/prism/snapshots/whitequark/kwnilarg.txt | 15 +- test/prism/snapshots/whitequark/kwoptarg.txt | 6 +- ...targ_with_kwrestarg_and_forwarded_args.txt | 9 +- .../snapshots/whitequark/kwrestarg_named.txt | 4 + .../whitequark/kwrestarg_unnamed.txt | 4 + .../lbrace_arg_after_command_args.txt | 13 +- .../lparenarg_after_lvar__since_25.txt | 12 +- test/prism/snapshots/whitequark/lvar.txt | 4 +- .../whitequark/lvar_injecting_match.txt | 7 +- test/prism/snapshots/whitequark/lvasgn.txt | 6 +- test/prism/snapshots/whitequark/masgn.txt | 30 +- .../prism/snapshots/whitequark/masgn_attr.txt | 18 +- test/prism/snapshots/whitequark/masgn_cmd.txt | 6 + .../snapshots/whitequark/masgn_const.txt | 11 + .../snapshots/whitequark/masgn_nested.txt | 11 + .../snapshots/whitequark/masgn_splat.txt | 39 + .../method_definition_in_while_cond.txt | 36 +- test/prism/snapshots/whitequark/module.txt | 4 + .../whitequark/multiple_pattern_matches.txt | 54 +- .../whitequark/newline_in_hash_argument.txt | 39 +- test/prism/snapshots/whitequark/nil.txt | 3 + .../snapshots/whitequark/nil_expression.txt | 4 + .../whitequark/non_lvar_injecting_match.txt | 10 +- test/prism/snapshots/whitequark/not.txt | 8 +- test/prism/snapshots/whitequark/not_cmd.txt | 4 +- .../snapshots/whitequark/not_masgn__24.txt | 9 +- test/prism/snapshots/whitequark/nth_ref.txt | 3 + .../whitequark/numbered_args_after_27.txt | 34 +- .../whitequark/numparam_outside_block.txt | 23 +- .../whitequark/numparam_ruby_bug_19025.txt | 12 +- test/prism/snapshots/whitequark/op_asgn.txt | 14 +- .../snapshots/whitequark/op_asgn_cmd.txt | 10 +- .../snapshots/whitequark/op_asgn_index.txt | 10 +- .../whitequark/op_asgn_index_cmd.txt | 8 +- test/prism/snapshots/whitequark/optarg.txt | 12 +- test/prism/snapshots/whitequark/or.txt | 4 + test/prism/snapshots/whitequark/or_asgn.txt | 14 +- .../snapshots/whitequark/parser_bug_272.txt | 8 +- .../snapshots/whitequark/parser_bug_490.txt | 23 + .../snapshots/whitequark/parser_bug_507.txt | 6 + .../snapshots/whitequark/parser_bug_518.txt | 5 + .../snapshots/whitequark/parser_bug_525.txt | 12 +- .../snapshots/whitequark/parser_bug_604.txt | 5 +- .../snapshots/whitequark/parser_bug_640.txt | 8 +- .../snapshots/whitequark/parser_bug_645.txt | 6 + .../snapshots/whitequark/parser_bug_830.txt | 4 +- .../snapshots/whitequark/parser_bug_989.txt | 4 +- ...ps_truncated_parts_of_squiggly_heredoc.txt | 7 +- ...ser_slash_slash_n_escaping_in_literals.txt | 44 +- .../pattern_matching__FILE__LINE_literals.txt | 11 +- .../pattern_matching_blank_else.txt | 12 +- .../whitequark/pattern_matching_else.txt | 15 +- .../pattern_matching_single_line.txt | 14 +- ...e_line_allowed_omission_of_parentheses.txt | 78 +- test/prism/snapshots/whitequark/postexe.txt | 6 +- test/prism/snapshots/whitequark/preexe.txt | 6 +- test/prism/snapshots/whitequark/procarg0.txt | 13 +- .../snapshots/whitequark/range_exclusive.txt | 8 +- .../snapshots/whitequark/range_inclusive.txt | 8 +- test/prism/snapshots/whitequark/rational.txt | 6 +- .../snapshots/whitequark/regex_interp.txt | 10 +- .../snapshots/whitequark/regex_plain.txt | 4 +- .../snapshots/whitequark/resbody_list.txt | 11 +- .../whitequark/resbody_list_mrhs.txt | 11 +- .../snapshots/whitequark/resbody_list_var.txt | 11 +- .../snapshots/whitequark/resbody_var.txt | 20 +- test/prism/snapshots/whitequark/rescue.txt | 10 +- .../snapshots/whitequark/rescue_else.txt | 14 +- .../whitequark/rescue_else_ensure.txt | 18 +- .../snapshots/whitequark/rescue_ensure.txt | 14 +- .../whitequark/rescue_in_lambda_block.txt | 5 + .../prism/snapshots/whitequark/rescue_mod.txt | 3 + .../snapshots/whitequark/rescue_mod_asgn.txt | 4 + .../snapshots/whitequark/rescue_mod_masgn.txt | 12 +- .../whitequark/rescue_mod_op_assign.txt | 4 + .../whitequark/rescue_without_begin_end.txt | 13 +- .../snapshots/whitequark/restarg_named.txt | 4 + .../snapshots/whitequark/restarg_unnamed.txt | 4 + test/prism/snapshots/whitequark/return.txt | 15 +- .../snapshots/whitequark/return_block.txt | 5 +- .../snapshots/whitequark/ruby_bug_10279.txt | 11 +- .../snapshots/whitequark/ruby_bug_10653.txt | 42 +- .../snapshots/whitequark/ruby_bug_11107.txt | 10 +- .../snapshots/whitequark/ruby_bug_11380.txt | 14 +- .../snapshots/whitequark/ruby_bug_11873.txt | 78 +- .../snapshots/whitequark/ruby_bug_11873_a.txt | 138 +++- .../snapshots/whitequark/ruby_bug_11873_b.txt | 11 +- .../snapshots/whitequark/ruby_bug_11989.txt | 4 +- .../snapshots/whitequark/ruby_bug_11990.txt | 10 +- .../snapshots/whitequark/ruby_bug_12073.txt | 19 +- .../snapshots/whitequark/ruby_bug_12402.txt | 68 +- .../snapshots/whitequark/ruby_bug_12669.txt | 18 +- .../snapshots/whitequark/ruby_bug_12686.txt | 8 +- .../snapshots/whitequark/ruby_bug_13547.txt | 5 +- .../snapshots/whitequark/ruby_bug_14690.txt | 10 +- .../snapshots/whitequark/ruby_bug_15789.txt | 24 +- .../snapshots/whitequark/ruby_bug_9669.txt | 14 +- test/prism/snapshots/whitequark/sclass.txt | 5 + test/prism/snapshots/whitequark/self.txt | 3 + .../snapshots/whitequark/send_attr_asgn.txt | 18 +- .../whitequark/send_attr_asgn_conditional.txt | 6 +- .../snapshots/whitequark/send_binary_op.txt | 86 +- .../whitequark/send_block_chain_cmd.txt | 40 +- .../whitequark/send_block_conditional.txt | 5 +- test/prism/snapshots/whitequark/send_call.txt | 10 +- .../snapshots/whitequark/send_conditional.txt | 4 +- .../prism/snapshots/whitequark/send_index.txt | 8 +- .../snapshots/whitequark/send_index_asgn.txt | 10 +- .../whitequark/send_index_asgn_legacy.txt | 10 +- .../snapshots/whitequark/send_index_cmd.txt | 4 +- .../whitequark/send_index_legacy.txt | 8 +- .../snapshots/whitequark/send_lambda.txt | 7 + .../snapshots/whitequark/send_lambda_args.txt | 8 + .../whitequark/send_lambda_args_noparen.txt | 10 +- .../whitequark/send_lambda_args_shadow.txt | 5 + .../whitequark/send_lambda_legacy.txt | 3 + .../whitequark/send_op_asgn_conditional.txt | 6 +- .../prism/snapshots/whitequark/send_plain.txt | 8 +- .../snapshots/whitequark/send_plain_cmd.txt | 8 +- test/prism/snapshots/whitequark/send_self.txt | 10 +- .../snapshots/whitequark/send_self_block.txt | 16 +- .../snapshots/whitequark/send_unary_op.txt | 8 +- .../whitequark/slash_newline_in_heredocs.txt | 12 +- .../snapshots/whitequark/space_args_arg.txt | 8 +- .../whitequark/space_args_arg_block.txt | 23 +- .../whitequark/space_args_arg_call.txt | 8 +- .../whitequark/space_args_arg_newline.txt | 8 +- .../snapshots/whitequark/space_args_block.txt | 6 +- .../snapshots/whitequark/space_args_cmd.txt | 8 +- .../snapshots/whitequark/string___FILE__.txt | 4 +- .../snapshots/whitequark/string_concat.txt | 10 +- .../snapshots/whitequark/string_dvar.txt | 14 +- .../snapshots/whitequark/string_interp.txt | 10 +- .../snapshots/whitequark/string_plain.txt | 6 +- test/prism/snapshots/whitequark/super.txt | 5 + .../snapshots/whitequark/super_block.txt | 6 + .../snapshots/whitequark/symbol_interp.txt | 9 +- .../snapshots/whitequark/symbol_plain.txt | 6 +- test/prism/snapshots/whitequark/ternary.txt | 10 +- .../whitequark/ternary_ambiguous_symbol.txt | 15 +- .../whitequark/trailing_forward_arg.txt | 12 +- test/prism/snapshots/whitequark/true.txt | 3 + .../whitequark/unary_num_pow_precedence.txt | 18 +- test/prism/snapshots/whitequark/undef.txt | 14 +- test/prism/snapshots/whitequark/unless.txt | 10 +- .../snapshots/whitequark/unless_else.txt | 18 +- .../prism/snapshots/whitequark/unless_mod.txt | 6 +- test/prism/snapshots/whitequark/until.txt | 12 +- test/prism/snapshots/whitequark/until_mod.txt | 7 +- .../prism/snapshots/whitequark/until_post.txt | 9 +- .../snapshots/whitequark/var_and_asgn.txt | 5 +- .../snapshots/whitequark/var_op_asgn.txt | 16 +- .../snapshots/whitequark/var_op_asgn_cmd.txt | 4 + .../snapshots/whitequark/var_or_asgn.txt | 5 +- .../prism/snapshots/whitequark/when_multi.txt | 11 +- .../prism/snapshots/whitequark/when_splat.txt | 12 +- test/prism/snapshots/whitequark/when_then.txt | 9 +- test/prism/snapshots/whitequark/while.txt | 12 +- test/prism/snapshots/whitequark/while_mod.txt | 7 +- .../prism/snapshots/whitequark/while_post.txt | 9 +- .../snapshots/whitequark/xstring_interp.txt | 9 +- .../snapshots/whitequark/xstring_plain.txt | 4 +- test/prism/snapshots/whitequark/zsuper.txt | 3 + test/prism/snapshots/xstring.txt | 19 +- .../snapshots/xstring_with_backslash.txt | 4 +- test/prism/snapshots/yield.txt | 22 +- 915 files changed, 12863 insertions(+), 4404 deletions(-) diff --git a/templates/lib/prism/inspect_visitor.rb.erb b/templates/lib/prism/inspect_visitor.rb.erb index 8b35b079c9f..3cfe615d850 100644 --- a/templates/lib/prism/inspect_visitor.rb.erb +++ b/templates/lib/prism/inspect_visitor.rb.erb @@ -69,12 +69,12 @@ module Prism # Inspect a <%= node.name %> node. def visit_<%= node.human %>(node) commands << [inspect_node(<%= node.name.inspect %>, node), indent] - <%- (fields = [*node.flags, *node.fields]).each_with_index do |field, index| -%> + <%- (fields = [node.flags || Prism::Template::Flags.empty, *node.fields]).each_with_index do |field, index| -%> <%- pointer = index == fields.length - 1 ? "└── " : "├── " -%> <%- preadd = index == fields.length - 1 ? " " : "│ " -%> <%- case field -%> <%- when Prism::Template::Flags -%> - flags = [<%= field.values.map { |value| "(\"#{value.name.downcase}\" if node.#{value.name.downcase}?)" }.join(", ") %>].compact + flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), <%= field.values.map { |value| "(\"#{value.name.downcase}\" if node.#{value.name.downcase}?)" }.join(", ") %>].compact commands << ["<%= pointer %>flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent] <%- when Prism::Template::NodeListField -%> commands << ["<%= pointer %><%= field.name %>: (length: #{(<%= field.name %> = node.<%= field.name %>).length})\n", indent] diff --git a/templates/template.rb b/templates/template.rb index ba8013c9a35..8e6f1b16aac 100755 --- a/templates/template.rb +++ b/templates/template.rb @@ -493,6 +493,10 @@ def initialize(config) @values = config.fetch("values").map { |flag| Flag.new(flag) } @comment = config.fetch("comment") end + + def self.empty + new("name" => "", "values" => [], "comment" => "") + end end class << self diff --git a/test/prism/snapshots/alias.txt b/test/prism/snapshots/alias.txt index a952e96f677..0d52c14f1a8 100644 --- a/test/prism/snapshots/alias.txt +++ b/test/prism/snapshots/alias.txt @@ -1,192 +1,213 @@ @ ProgramNode (location: (1,0)-(23,11)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(23,11)) + ├── flags: ∅ └── body: (length: 12) ├── @ AliasMethodNode (location: (1,0)-(1,15)) + │ ├── flags: newline │ ├── new_name: │ │ @ SymbolNode (location: (1,6)-(1,10)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,6)-(1,7) = ":" │ │ ├── value_loc: (1,7)-(1,10) = "foo" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "foo" │ ├── old_name: │ │ @ SymbolNode (location: (1,11)-(1,15)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,11)-(1,12) = ":" │ │ ├── value_loc: (1,12)-(1,15) = "bar" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "bar" │ └── keyword_loc: (1,0)-(1,5) = "alias" ├── @ AliasMethodNode (location: (3,0)-(3,21)) + │ ├── flags: newline │ ├── new_name: │ │ @ SymbolNode (location: (3,6)-(3,13)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,6)-(3,9) = "%s[" │ │ ├── value_loc: (3,9)-(3,12) = "abc" │ │ ├── closing_loc: (3,12)-(3,13) = "]" │ │ └── unescaped: "abc" │ ├── old_name: │ │ @ SymbolNode (location: (3,14)-(3,21)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,14)-(3,17) = "%s[" │ │ ├── value_loc: (3,17)-(3,20) = "def" │ │ ├── closing_loc: (3,20)-(3,21) = "]" │ │ └── unescaped: "def" │ └── keyword_loc: (3,0)-(3,5) = "alias" ├── @ AliasMethodNode (location: (5,0)-(5,19)) + │ ├── flags: newline │ ├── new_name: │ │ @ SymbolNode (location: (5,6)-(5,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (5,6)-(5,8) = ":'" │ │ ├── value_loc: (5,8)-(5,11) = "abc" │ │ ├── closing_loc: (5,11)-(5,12) = "'" │ │ └── unescaped: "abc" │ ├── old_name: │ │ @ SymbolNode (location: (5,13)-(5,19)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (5,13)-(5,15) = ":'" │ │ ├── value_loc: (5,15)-(5,18) = "def" │ │ ├── closing_loc: (5,18)-(5,19) = "'" │ │ └── unescaped: "def" │ └── keyword_loc: (5,0)-(5,5) = "alias" ├── @ AliasMethodNode (location: (7,0)-(7,23)) + │ ├── flags: newline │ ├── new_name: │ │ @ InterpolatedSymbolNode (location: (7,6)-(7,16)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (7,6)-(7,8) = ":\"" │ │ ├── parts: (length: 2) │ │ │ ├── @ StringNode (location: (7,8)-(7,11)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (7,8)-(7,11) = "abc" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "abc" │ │ │ └── @ EmbeddedStatementsNode (location: (7,11)-(7,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (7,11)-(7,13) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (7,13)-(7,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (7,13)-(7,14)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── closing_loc: (7,14)-(7,15) = "}" │ │ └── closing_loc: (7,15)-(7,16) = "\"" │ ├── old_name: │ │ @ SymbolNode (location: (7,17)-(7,23)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (7,17)-(7,19) = ":'" │ │ ├── value_loc: (7,19)-(7,22) = "def" │ │ ├── closing_loc: (7,22)-(7,23) = "'" │ │ └── unescaped: "def" │ └── keyword_loc: (7,0)-(7,5) = "alias" ├── @ AliasGlobalVariableNode (location: (9,0)-(9,11)) + │ ├── flags: newline │ ├── new_name: │ │ @ GlobalVariableReadNode (location: (9,6)-(9,8)) + │ │ ├── flags: ∅ │ │ └── name: :$a │ ├── old_name: │ │ @ BackReferenceReadNode (location: (9,9)-(9,11)) + │ │ ├── flags: ∅ │ │ └── name: :$' │ └── keyword_loc: (9,0)-(9,5) = "alias" ├── @ AliasMethodNode (location: (11,0)-(11,13)) + │ ├── flags: newline │ ├── new_name: │ │ @ SymbolNode (location: (11,6)-(11,9)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (11,6)-(11,9) = "foo" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "foo" │ ├── old_name: │ │ @ SymbolNode (location: (11,10)-(11,13)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (11,10)-(11,13) = "bar" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "bar" │ └── keyword_loc: (11,0)-(11,5) = "alias" ├── @ AliasGlobalVariableNode (location: (13,0)-(13,15)) + │ ├── flags: newline │ ├── new_name: │ │ @ GlobalVariableReadNode (location: (13,6)-(13,10)) + │ │ ├── flags: ∅ │ │ └── name: :$foo │ ├── old_name: │ │ @ GlobalVariableReadNode (location: (13,11)-(13,15)) + │ │ ├── flags: ∅ │ │ └── name: :$bar │ └── keyword_loc: (13,0)-(13,5) = "alias" ├── @ AliasMethodNode (location: (15,0)-(15,12)) + │ ├── flags: newline │ ├── new_name: │ │ @ SymbolNode (location: (15,6)-(15,9)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (15,6)-(15,9) = "foo" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "foo" │ ├── old_name: │ │ @ SymbolNode (location: (15,10)-(15,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (15,10)-(15,12) = "if" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "if" │ └── keyword_loc: (15,0)-(15,5) = "alias" ├── @ AliasMethodNode (location: (17,0)-(17,13)) + │ ├── flags: newline │ ├── new_name: │ │ @ SymbolNode (location: (17,6)-(17,9)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (17,6)-(17,9) = "foo" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "foo" │ ├── old_name: │ │ @ SymbolNode (location: (17,10)-(17,13)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (17,10)-(17,13) = "<=>" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "<=>" │ └── keyword_loc: (17,0)-(17,5) = "alias" ├── @ AliasMethodNode (location: (19,0)-(19,15)) + │ ├── flags: newline │ ├── new_name: │ │ @ SymbolNode (location: (19,6)-(19,9)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (19,6)-(19,7) = ":" │ │ ├── value_loc: (19,7)-(19,9) = "==" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "==" │ ├── old_name: │ │ @ SymbolNode (location: (19,10)-(19,15)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (19,10)-(19,11) = ":" │ │ ├── value_loc: (19,11)-(19,15) = "eql?" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "eql?" │ └── keyword_loc: (19,0)-(19,5) = "alias" ├── @ AliasMethodNode (location: (21,0)-(21,9)) + │ ├── flags: newline │ ├── new_name: │ │ @ SymbolNode (location: (21,6)-(21,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (21,6)-(21,7) = "A" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "A" │ ├── old_name: │ │ @ SymbolNode (location: (21,8)-(21,9)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (21,8)-(21,9) = "B" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "B" │ └── keyword_loc: (21,0)-(21,5) = "alias" └── @ AliasMethodNode (location: (23,0)-(23,11)) + ├── flags: newline ├── new_name: │ @ SymbolNode (location: (23,6)-(23,8)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (23,6)-(23,7) = ":" │ ├── value_loc: (23,7)-(23,8) = "A" │ ├── closing_loc: ∅ │ └── unescaped: "A" ├── old_name: │ @ SymbolNode (location: (23,9)-(23,11)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (23,9)-(23,10) = ":" │ ├── value_loc: (23,10)-(23,11) = "B" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/arithmetic.txt b/test/prism/snapshots/arithmetic.txt index c8a31c3d70e..963080e0d96 100644 --- a/test/prism/snapshots/arithmetic.txt +++ b/test/prism/snapshots/arithmetic.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(13,8)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(13,8)) + ├── flags: ∅ └── body: (length: 7) ├── @ CallNode (location: (1,0)-(1,8)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -37,7 +39,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (3,0)-(3,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (3,0)-(3,4)) │ │ ├── flags: ∅ @@ -80,7 +82,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (5,0)-(5,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (5,0)-(5,4)) │ │ ├── flags: ∅ @@ -123,7 +125,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (7,0)-(7,8)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -156,7 +158,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (9,0)-(9,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (9,0)-(9,10)) │ │ ├── flags: ∅ @@ -212,13 +214,13 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (11,0)-(11,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (11,1)-(11,5)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ IntegerNode (location: (11,1)-(11,2)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── call_operator_loc: ∅ │ │ ├── name: :** @@ -229,7 +231,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (11,4)-(11,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ @@ -241,10 +243,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ CallNode (location: (13,0)-(13,8)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (13,0)-(13,2)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: -1 ├── call_operator_loc: (13,2)-(13,3) = "." ├── name: :zero? diff --git a/test/prism/snapshots/arrays.txt b/test/prism/snapshots/arrays.txt index 90a4d8f3bbc..a73c56ac808 100644 --- a/test/prism/snapshots/arrays.txt +++ b/test/prism/snapshots/arrays.txt @@ -1,12 +1,15 @@ @ ProgramNode (location: (1,0)-(122,32)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(122,32)) + ├── flags: ∅ └── body: (length: 50) ├── @ ArrayNode (location: (1,0)-(1,4)) - │ ├── flags: contains_splat + │ ├── flags: newline, contains_splat │ ├── elements: (length: 1) │ │ └── @ SplatNode (location: (1,1)-(1,3)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (1,1)-(1,2) = "*" │ │ └── expression: │ │ @ CallNode (location: (1,2)-(1,3)) @@ -22,7 +25,7 @@ │ ├── opening_loc: (1,0)-(1,1) = "[" │ └── closing_loc: (1,3)-(1,4) = "]" ├── @ CallNode (location: (3,0)-(3,23)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ CallNode (location: (3,0)-(3,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -63,47 +66,48 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ ArrayNode (location: (3,16)-(3,23)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── elements: (length: 3) │ │ │ ├── @ IntegerNode (location: (3,16)-(3,17)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── @ IntegerNode (location: (3,19)-(3,20)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── @ IntegerNode (location: (3,22)-(3,23)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ ├── opening_loc: ∅ │ │ └── closing_loc: ∅ │ ├── closing_loc: (3,12)-(3,13) = "]" │ └── block: ∅ ├── @ ArrayNode (location: (5,0)-(5,13)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 1) │ │ └── @ KeywordHashNode (location: (5,1)-(5,12)) │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (5,1)-(5,12)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (5,1)-(5,3)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (5,1)-(5,2) = "a" │ │ │ ├── closing_loc: (5,2)-(5,3) = ":" │ │ │ └── unescaped: "a" │ │ ├── value: │ │ │ @ ArrayNode (location: (5,4)-(5,12)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 2) │ │ │ │ ├── @ SymbolNode (location: (5,5)-(5,7)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: (5,5)-(5,6) = ":" │ │ │ │ │ ├── value_loc: (5,6)-(5,7) = "b" │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── unescaped: "b" │ │ │ │ └── @ SymbolNode (location: (5,9)-(5,11)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (5,9)-(5,10) = ":" │ │ │ │ ├── value_loc: (5,10)-(5,11) = "c" │ │ │ │ ├── closing_loc: ∅ @@ -114,31 +118,31 @@ │ ├── opening_loc: (5,0)-(5,1) = "[" │ └── closing_loc: (5,12)-(5,13) = "]" ├── @ ArrayNode (location: (9,0)-(15,1)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 5) │ │ ├── @ SymbolNode (location: (9,1)-(9,3)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (9,1)-(9,2) = ":" │ │ │ ├── value_loc: (9,2)-(9,3) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ ├── @ SymbolNode (location: (9,5)-(9,7)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (9,5)-(9,6) = ":" │ │ │ ├── value_loc: (9,6)-(9,7) = "b" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "b" │ │ ├── @ SymbolNode (location: (10,0)-(10,2)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (10,0)-(10,1) = ":" │ │ │ ├── value_loc: (10,1)-(10,2) = "c" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "c" │ │ ├── @ IntegerNode (location: (10,3)-(10,4)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ SymbolNode (location: (14,0)-(14,2)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (14,0)-(14,1) = ":" │ │ ├── value_loc: (14,1)-(14,2) = "d" │ │ ├── closing_loc: ∅ @@ -146,31 +150,31 @@ │ ├── opening_loc: (9,0)-(9,1) = "[" │ └── closing_loc: (15,0)-(15,1) = "]" ├── @ ArrayNode (location: (18,0)-(26,1)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 5) │ │ ├── @ SymbolNode (location: (18,1)-(18,3)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (18,1)-(18,2) = ":" │ │ │ ├── value_loc: (18,2)-(18,3) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ ├── @ SymbolNode (location: (18,5)-(18,7)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (18,5)-(18,6) = ":" │ │ │ ├── value_loc: (18,6)-(18,7) = "b" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "b" │ │ ├── @ SymbolNode (location: (19,0)-(19,2)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (19,0)-(19,1) = ":" │ │ │ ├── value_loc: (19,1)-(19,2) = "c" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "c" │ │ ├── @ IntegerNode (location: (19,3)-(19,4)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ SymbolNode (location: (23,0)-(23,2)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (23,0)-(23,1) = ":" │ │ ├── value_loc: (23,1)-(23,2) = "d" │ │ ├── closing_loc: ∅ @@ -178,12 +182,13 @@ │ ├── opening_loc: (18,0)-(18,1) = "[" │ └── closing_loc: (26,0)-(26,1) = "]" ├── @ ArrayNode (location: (28,0)-(28,12)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 1) │ │ └── @ KeywordHashNode (location: (28,1)-(28,11)) │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (28,1)-(28,11)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ CallNode (location: (28,1)-(28,4)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -210,7 +215,7 @@ │ ├── opening_loc: (28,0)-(28,1) = "[" │ └── closing_loc: (28,11)-(28,12) = "]" ├── @ CallNode (location: (30,0)-(30,19)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ CallNode (location: (30,0)-(30,8)) │ │ ├── flags: ∅ @@ -276,7 +281,7 @@ │ ├── closing_loc: (30,12)-(30,13) = "]" │ └── block: ∅ ├── @ CallNode (location: (32,0)-(32,13)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (32,0)-(32,8)) │ │ ├── flags: ∅ @@ -332,12 +337,12 @@ │ ├── closing_loc: (32,12)-(32,13) = "]" │ └── block: ∅ ├── @ ArrayNode (location: (34,0)-(35,1)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 0) │ ├── opening_loc: (34,0)-(34,1) = "[" │ └── closing_loc: (35,0)-(35,1) = "]" ├── @ CallNode (location: (37,0)-(37,13)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (37,0)-(37,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -380,7 +385,7 @@ │ ├── closing_loc: (37,12)-(37,13) = "]" │ └── block: ∅ ├── @ CallNode (location: (39,0)-(39,19)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ CallNode (location: (39,0)-(39,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -433,6 +438,7 @@ │ ├── closing_loc: (39,12)-(39,13) = "]" │ └── block: ∅ ├── @ MultiWriteNode (location: (41,0)-(41,21)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ IndexTargetNode (location: (41,0)-(41,6)) │ │ │ ├── flags: attribute_write @@ -453,7 +459,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ IntegerNode (location: (41,4)-(41,5)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 0 │ │ │ ├── closing_loc: (41,5)-(41,6) = "]" │ │ │ └── block: ∅ @@ -476,7 +482,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (41,12)-(41,13)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 0 │ │ ├── closing_loc: (41,13)-(41,14) = "]" │ │ └── block: ∅ @@ -487,18 +493,18 @@ │ ├── operator_loc: (41,15)-(41,16) = "=" │ └── value: │ @ ArrayNode (location: (41,17)-(41,21)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (41,17)-(41,18)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (41,20)-(41,21)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: ∅ │ └── closing_loc: ∅ ├── @ CallNode (location: (43,0)-(43,19)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (43,0)-(43,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -564,7 +570,7 @@ │ ├── closing_loc: (43,18)-(43,19) = "]" │ └── block: ∅ ├── @ CallNode (location: (45,0)-(45,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (45,0)-(45,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -597,7 +603,7 @@ │ ├── closing_loc: (45,7)-(45,8) = "]" │ └── block: ∅ ├── @ CallNode (location: (47,0)-(47,14)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ CallNode (location: (47,0)-(47,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -640,14 +646,16 @@ │ ├── closing_loc: (47,7)-(47,8) = "]" │ └── block: ∅ ├── @ ArrayNode (location: (49,0)-(49,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 1) │ │ └── @ KeywordHashNode (location: (49,1)-(49,5)) │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocSplatNode (location: (49,1)-(49,5)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ HashNode (location: (49,3)-(49,5)) + │ │ │ ├── flags: static_literal │ │ │ ├── opening_loc: (49,3)-(49,4) = "{" │ │ │ ├── elements: (length: 0) │ │ │ └── closing_loc: (49,4)-(49,5) = "}" @@ -655,12 +663,13 @@ │ ├── opening_loc: (49,0)-(49,1) = "[" │ └── closing_loc: (49,5)-(49,6) = "]" ├── @ ArrayNode (location: (51,0)-(51,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 1) │ │ └── @ KeywordHashNode (location: (51,1)-(51,5)) │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocSplatNode (location: (51,1)-(51,5)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (51,3)-(51,5)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -676,15 +685,16 @@ │ ├── opening_loc: (51,0)-(51,1) = "[" │ └── closing_loc: (51,5)-(51,6) = "]" ├── @ ArrayNode (location: (53,0)-(53,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (53,1)-(53,2)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ KeywordHashNode (location: (53,4)-(53,8)) │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocSplatNode (location: (53,4)-(53,8)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (53,6)-(53,8)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -700,15 +710,16 @@ │ ├── opening_loc: (53,0)-(53,1) = "[" │ └── closing_loc: (53,8)-(53,9) = "]" ├── @ ArrayNode (location: (55,0)-(55,21)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (55,1)-(55,2)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ KeywordHashNode (location: (55,4)-(55,20)) │ │ ├── flags: ∅ │ │ └── elements: (length: 3) │ │ ├── @ AssocSplatNode (location: (55,4)-(55,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── value: │ │ │ │ @ CallNode (location: (55,6)-(55,8)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -722,13 +733,16 @@ │ │ │ │ └── block: ∅ │ │ │ └── operator_loc: (55,4)-(55,6) = "**" │ │ ├── @ AssocSplatNode (location: (55,10)-(55,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── value: │ │ │ │ @ HashNode (location: (55,12)-(55,14)) + │ │ │ │ ├── flags: static_literal │ │ │ │ ├── opening_loc: (55,12)-(55,13) = "{" │ │ │ │ ├── elements: (length: 0) │ │ │ │ └── closing_loc: (55,13)-(55,14) = "}" │ │ │ └── operator_loc: (55,10)-(55,12) = "**" │ │ └── @ AssocSplatNode (location: (55,16)-(55,20)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (55,18)-(55,20)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -744,12 +758,13 @@ │ ├── opening_loc: (55,0)-(55,1) = "[" │ └── closing_loc: (55,20)-(55,21) = "]" ├── @ ArrayNode (location: (57,0)-(59,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 1) │ │ └── @ KeywordHashNode (location: (58,2)-(58,12)) │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (58,2)-(58,12)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ CallNode (location: (58,2)-(58,5)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -776,22 +791,22 @@ │ ├── opening_loc: (57,0)-(57,1) = "[" │ └── closing_loc: (59,0)-(59,1) = "]" ├── @ ArrayNode (location: (62,0)-(62,17)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 3) │ │ ├── @ SymbolNode (location: (62,3)-(62,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (62,3)-(62,6) = "one" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "one" │ │ ├── @ SymbolNode (location: (62,7)-(62,10)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (62,7)-(62,10) = "two" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "two" │ │ └── @ SymbolNode (location: (62,11)-(62,16)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (62,11)-(62,16) = "three" │ │ ├── closing_loc: ∅ @@ -799,7 +814,7 @@ │ ├── opening_loc: (62,0)-(62,3) = "%i#" │ └── closing_loc: (62,16)-(62,17) = "#" ├── @ ArrayNode (location: (64,0)-(64,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 3) │ │ ├── @ StringNode (location: (64,3)-(64,6)) │ │ │ ├── flags: ∅ @@ -822,28 +837,28 @@ │ ├── opening_loc: (64,0)-(64,3) = "%w#" │ └── closing_loc: (64,16)-(64,17) = "#" ├── @ XStringNode (location: (66,0)-(66,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (66,0)-(66,3) = "%x#" │ ├── content_loc: (66,3)-(66,16) = "one two three" │ ├── closing_loc: (66,16)-(66,17) = "#" │ └── unescaped: "one two three" ├── @ ArrayNode (location: (69,0)-(69,17)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 3) │ │ ├── @ SymbolNode (location: (69,3)-(69,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (69,3)-(69,6) = "one" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "one" │ │ ├── @ SymbolNode (location: (69,7)-(69,10)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (69,7)-(69,10) = "two" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "two" │ │ └── @ SymbolNode (location: (69,11)-(69,16)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (69,11)-(69,16) = "three" │ │ ├── closing_loc: ∅ @@ -851,7 +866,7 @@ │ ├── opening_loc: (69,0)-(69,3) = "%i@" │ └── closing_loc: (69,16)-(69,17) = "@" ├── @ ArrayNode (location: (71,0)-(71,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 3) │ │ ├── @ StringNode (location: (71,3)-(71,6)) │ │ │ ├── flags: ∅ @@ -874,28 +889,28 @@ │ ├── opening_loc: (71,0)-(71,3) = "%w@" │ └── closing_loc: (71,16)-(71,17) = "@" ├── @ XStringNode (location: (73,0)-(73,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (73,0)-(73,3) = "%x@" │ ├── content_loc: (73,3)-(73,16) = "one two three" │ ├── closing_loc: (73,16)-(73,17) = "@" │ └── unescaped: "one two three" ├── @ ArrayNode (location: (76,0)-(76,17)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 3) │ │ ├── @ SymbolNode (location: (76,3)-(76,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (76,3)-(76,6) = "one" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "one" │ │ ├── @ SymbolNode (location: (76,7)-(76,10)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (76,7)-(76,10) = "two" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "two" │ │ └── @ SymbolNode (location: (76,11)-(76,16)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (76,11)-(76,16) = "three" │ │ ├── closing_loc: ∅ @@ -903,7 +918,7 @@ │ ├── opening_loc: (76,0)-(76,3) = "%i{" │ └── closing_loc: (76,16)-(76,17) = "}" ├── @ ArrayNode (location: (78,0)-(78,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 3) │ │ ├── @ StringNode (location: (78,3)-(78,6)) │ │ │ ├── flags: ∅ @@ -926,13 +941,13 @@ │ ├── opening_loc: (78,0)-(78,3) = "%w{" │ └── closing_loc: (78,16)-(78,17) = "}" ├── @ XStringNode (location: (80,0)-(80,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (80,0)-(80,3) = "%x{" │ ├── content_loc: (80,3)-(80,16) = "one two three" │ ├── closing_loc: (80,16)-(80,17) = "}" │ └── unescaped: "one two three" ├── @ ArrayNode (location: (82,0)-(82,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 1) │ │ └── @ StringNode (location: (82,3)-(82,6)) │ │ ├── flags: ∅ @@ -943,7 +958,7 @@ │ ├── opening_loc: (82,0)-(82,3) = "%w[" │ └── closing_loc: (82,6)-(82,7) = "]" ├── @ IndexOperatorWriteNode (location: (84,0)-(84,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (84,0)-(84,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -964,10 +979,10 @@ │ ├── binary_operator_loc: (84,6)-(84,8) = "+=" │ └── value: │ @ IntegerNode (location: (84,9)-(84,10)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ IndexOrWriteNode (location: (86,0)-(86,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (86,0)-(86,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -987,10 +1002,10 @@ │ ├── operator_loc: (86,6)-(86,9) = "||=" │ └── value: │ @ IntegerNode (location: (86,10)-(86,11)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ IndexAndWriteNode (location: (88,0)-(88,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (88,0)-(88,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1010,10 +1025,10 @@ │ ├── operator_loc: (88,6)-(88,9) = "&&=" │ └── value: │ @ IntegerNode (location: (88,10)-(88,11)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ IndexOperatorWriteNode (location: (90,0)-(90,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (90,0)-(90,7)) │ │ ├── flags: ∅ @@ -1044,10 +1059,10 @@ │ ├── binary_operator_loc: (90,10)-(90,12) = "+=" │ └── value: │ @ IntegerNode (location: (90,13)-(90,14)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ IndexOrWriteNode (location: (92,0)-(92,15)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (92,0)-(92,7)) │ │ ├── flags: ∅ @@ -1077,10 +1092,10 @@ │ ├── operator_loc: (92,10)-(92,13) = "||=" │ └── value: │ @ IntegerNode (location: (92,14)-(92,15)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ IndexAndWriteNode (location: (94,0)-(94,15)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (94,0)-(94,7)) │ │ ├── flags: ∅ @@ -1110,10 +1125,10 @@ │ ├── operator_loc: (94,10)-(94,13) = "&&=" │ └── value: │ @ IntegerNode (location: (94,14)-(94,15)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ IndexOperatorWriteNode (location: (96,0)-(96,13)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (96,0)-(96,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1147,10 +1162,10 @@ │ ├── binary_operator_loc: (96,9)-(96,11) = "+=" │ └── value: │ @ IntegerNode (location: (96,12)-(96,13)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ IndexOrWriteNode (location: (98,0)-(98,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (98,0)-(98,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1183,10 +1198,10 @@ │ ├── operator_loc: (98,9)-(98,12) = "||=" │ └── value: │ @ IntegerNode (location: (98,13)-(98,14)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ IndexAndWriteNode (location: (100,0)-(100,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (100,0)-(100,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1219,10 +1234,10 @@ │ ├── operator_loc: (100,9)-(100,12) = "&&=" │ └── value: │ @ IntegerNode (location: (100,13)-(100,14)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ IndexOperatorWriteNode (location: (102,0)-(102,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (102,0)-(102,7)) │ │ ├── flags: ∅ @@ -1266,10 +1281,10 @@ │ ├── binary_operator_loc: (102,13)-(102,15) = "+=" │ └── value: │ @ IntegerNode (location: (102,16)-(102,17)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ IndexOrWriteNode (location: (104,0)-(104,18)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (104,0)-(104,7)) │ │ ├── flags: ∅ @@ -1312,10 +1327,10 @@ │ ├── operator_loc: (104,13)-(104,16) = "||=" │ └── value: │ @ IntegerNode (location: (104,17)-(104,18)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ IndexAndWriteNode (location: (106,0)-(106,18)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (106,0)-(106,7)) │ │ ├── flags: ∅ @@ -1358,14 +1373,16 @@ │ ├── operator_loc: (106,13)-(106,16) = "&&=" │ └── value: │ @ IntegerNode (location: (106,17)-(106,18)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ DefNode (location: (108,0)-(108,19)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (108,4)-(108,5) = "f" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (108,6)-(108,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -1380,9 +1397,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (108,10)-(108,14)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (108,10)-(108,14)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (108,10)-(108,11)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -1403,6 +1421,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ SplatNode (location: (108,12)-(108,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (108,12)-(108,13) = "*" │ │ │ └── expression: ∅ │ │ ├── closing_loc: (108,13)-(108,14) = "]" @@ -1415,11 +1434,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (108,16)-(108,19) = "end" ├── @ DefNode (location: (110,0)-(110,22)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (110,4)-(110,5) = "f" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (110,6)-(110,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -1434,9 +1455,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (110,10)-(110,17)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (110,10)-(110,17)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (110,10)-(110,11)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -1457,9 +1479,10 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 2) │ │ │ ├── @ IntegerNode (location: (110,12)-(110,13)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── @ SplatNode (location: (110,15)-(110,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (110,15)-(110,16) = "*" │ │ │ └── expression: ∅ │ │ ├── closing_loc: (110,16)-(110,17) = "]" @@ -1472,11 +1495,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (110,19)-(110,22) = "end" ├── @ DefNode (location: (112,0)-(112,23)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (112,4)-(112,5) = "f" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (112,6)-(112,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -1491,9 +1516,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (112,10)-(112,18)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (112,10)-(112,18)) - │ │ ├── flags: attribute_write + │ │ ├── flags: newline, attribute_write │ │ ├── receiver: │ │ │ @ CallNode (location: (112,10)-(112,11)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -1514,10 +1540,11 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 2) │ │ │ ├── @ SplatNode (location: (112,12)-(112,13)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (112,12)-(112,13) = "*" │ │ │ │ └── expression: ∅ │ │ │ └── @ IntegerNode (location: (112,17)-(112,18)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: (112,13)-(112,14) = "]" │ │ └── block: ∅ @@ -1529,11 +1556,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (112,20)-(112,23) = "end" ├── @ DefNode (location: (114,0)-(114,26)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (114,4)-(114,5) = "f" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (114,6)-(114,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -1548,9 +1577,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (114,10)-(114,21)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (114,10)-(114,21)) - │ │ ├── flags: attribute_write + │ │ ├── flags: newline, attribute_write │ │ ├── receiver: │ │ │ @ CallNode (location: (114,10)-(114,11)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -1571,13 +1601,14 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 3) │ │ │ ├── @ IntegerNode (location: (114,12)-(114,13)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── @ SplatNode (location: (114,15)-(114,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (114,15)-(114,16) = "*" │ │ │ │ └── expression: ∅ │ │ │ └── @ IntegerNode (location: (114,20)-(114,21)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: (114,16)-(114,17) = "]" │ │ └── block: ∅ @@ -1589,11 +1620,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (114,23)-(114,26) = "end" ├── @ DefNode (location: (116,0)-(116,24)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (116,4)-(116,5) = "f" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (116,6)-(116,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -1608,9 +1641,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (116,10)-(116,19)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IndexOperatorWriteNode (location: (116,10)-(116,19)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (116,10)-(116,11)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -1629,6 +1663,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ SplatNode (location: (116,12)-(116,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (116,12)-(116,13) = "*" │ │ │ └── expression: ∅ │ │ ├── closing_loc: (116,13)-(116,14) = "]" @@ -1637,7 +1672,7 @@ │ │ ├── binary_operator_loc: (116,15)-(116,17) = "+=" │ │ └── value: │ │ @ IntegerNode (location: (116,18)-(116,19)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── locals: [] │ ├── def_keyword_loc: (116,0)-(116,3) = "def" @@ -1647,11 +1682,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (116,21)-(116,24) = "end" ├── @ DefNode (location: (118,0)-(118,28)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (118,4)-(118,5) = "f" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (118,6)-(118,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -1666,9 +1703,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (118,10)-(118,23)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IndexAndWriteNode (location: (118,10)-(118,23)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (118,10)-(118,11)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -1687,9 +1725,10 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 2) │ │ │ ├── @ IntegerNode (location: (118,12)-(118,13)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── @ SplatNode (location: (118,15)-(118,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (118,15)-(118,16) = "*" │ │ │ └── expression: ∅ │ │ ├── closing_loc: (118,16)-(118,17) = "]" @@ -1697,7 +1736,7 @@ │ │ ├── operator_loc: (118,18)-(118,21) = "&&=" │ │ └── value: │ │ @ IntegerNode (location: (118,22)-(118,23)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── locals: [] │ ├── def_keyword_loc: (118,0)-(118,3) = "def" @@ -1707,11 +1746,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (118,25)-(118,28) = "end" ├── @ DefNode (location: (120,0)-(120,29)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (120,4)-(120,5) = "f" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (120,6)-(120,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -1726,10 +1767,12 @@ │ │ └── block: ∅ │ ├── body: │ │ @ BeginNode (location: (120,0)-(120,29)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (120,10)-(120,24)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (120,10)-(120,16) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: (120,17)-(120,19) = "=>" @@ -1753,6 +1796,7 @@ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── arguments: (length: 1) │ │ │ │ │ └── @ SplatNode (location: (120,22)-(120,23)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── operator_loc: (120,22)-(120,23) = "*" │ │ │ │ │ └── expression: ∅ │ │ │ │ ├── closing_loc: (120,23)-(120,24) = "]" @@ -1770,11 +1814,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (120,26)-(120,29) = "end" └── @ DefNode (location: (122,0)-(122,32)) + ├── flags: newline ├── name: :f ├── name_loc: (122,4)-(122,5) = "f" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (122,6)-(122,7)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: @@ -1789,10 +1835,12 @@ │ └── block: ∅ ├── body: │ @ BeginNode (location: (122,0)-(122,32)) + │ ├── flags: ∅ │ ├── begin_keyword_loc: ∅ │ ├── statements: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (122,10)-(122,27)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (122,10)-(122,16) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: (122,17)-(122,19) = "=>" @@ -1816,9 +1864,10 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 2) │ │ │ │ ├── @ IntegerNode (location: (122,22)-(122,23)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ └── @ SplatNode (location: (122,25)-(122,26)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (122,25)-(122,26) = "*" │ │ │ │ └── expression: ∅ │ │ │ ├── closing_loc: (122,26)-(122,27) = "]" diff --git a/test/prism/snapshots/begin_ensure.txt b/test/prism/snapshots/begin_ensure.txt index 9af9b9e5736..2f127cd11f8 100644 --- a/test/prism/snapshots/begin_ensure.txt +++ b/test/prism/snapshots/begin_ensure.txt @@ -1,15 +1,19 @@ @ ProgramNode (location: (1,0)-(21,15)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(21,15)) + ├── flags: ∅ └── body: (length: 5) ├── @ BeginNode (location: (1,0)-(5,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (1,0)-(1,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (2,0)-(2,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (2,0)-(2,1)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -22,12 +26,14 @@ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (3,0)-(5,3)) + │ │ ├── flags: ∅ │ │ ├── ensure_keyword_loc: (3,0)-(3,6) = "ensure" │ │ ├── statements: │ │ │ @ StatementsNode (location: (4,0)-(4,1)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (4,0)-(4,1)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -39,12 +45,14 @@ │ │ └── end_keyword_loc: (5,0)-(5,3) = "end" │ └── end_keyword_loc: (5,0)-(5,3) = "end" ├── @ BeginNode (location: (7,0)-(7,24)) + │ ├── flags: newline │ ├── begin_keyword_loc: (7,0)-(7,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (7,7)-(7,8)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (7,7)-(7,8)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -57,12 +65,14 @@ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (7,10)-(7,24)) + │ │ ├── flags: ∅ │ │ ├── ensure_keyword_loc: (7,10)-(7,16) = "ensure" │ │ ├── statements: │ │ │ @ StatementsNode (location: (7,18)-(7,19)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (7,18)-(7,19)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -74,12 +84,14 @@ │ │ └── end_keyword_loc: (7,21)-(7,24) = "end" │ └── end_keyword_loc: (7,21)-(7,24) = "end" ├── @ BeginNode (location: (9,0)-(11,4)) + │ ├── flags: newline │ ├── begin_keyword_loc: (9,0)-(9,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (9,6)-(9,7)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (9,6)-(9,7)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -92,12 +104,14 @@ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (10,1)-(11,4)) + │ │ ├── flags: ∅ │ │ ├── ensure_keyword_loc: (10,1)-(10,7) = "ensure" │ │ ├── statements: │ │ │ @ StatementsNode (location: (10,8)-(10,9)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (10,8)-(10,9)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -109,12 +123,14 @@ │ │ └── end_keyword_loc: (11,1)-(11,4) = "end" │ └── end_keyword_loc: (11,1)-(11,4) = "end" ├── @ BeginNode (location: (13,0)-(13,22)) + │ ├── flags: newline │ ├── begin_keyword_loc: (13,0)-(13,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (13,6)-(13,7)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (13,6)-(13,7)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -127,12 +143,14 @@ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (13,9)-(13,22)) + │ │ ├── flags: ∅ │ │ ├── ensure_keyword_loc: (13,9)-(13,15) = "ensure" │ │ ├── statements: │ │ │ @ StatementsNode (location: (13,16)-(13,17)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (13,16)-(13,17)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -144,20 +162,24 @@ │ │ └── end_keyword_loc: (13,19)-(13,22) = "end" │ └── end_keyword_loc: (13,19)-(13,22) = "end" └── @ BeginNode (location: (15,0)-(21,15)) + ├── flags: newline ├── begin_keyword_loc: (15,0)-(15,5) = "begin" ├── statements: │ @ StatementsNode (location: (15,6)-(21,11)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ BeginNode (location: (15,6)-(21,11)) + │ ├── flags: newline │ ├── begin_keyword_loc: (15,6)-(15,11) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (15,11)-(21,7)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (15,11)-(21,7)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ SymbolNode (location: (15,11)-(15,13)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (15,11)-(15,12) = ":" │ │ │ ├── value_loc: (15,12)-(15,13) = "s" │ │ │ ├── closing_loc: ∅ @@ -171,20 +193,24 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ BeginNode (location: (15,16)-(21,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── begin_keyword_loc: (15,16)-(15,21) = "begin" │ │ │ ├── statements: ∅ │ │ │ ├── rescue_clause: ∅ │ │ │ ├── else_clause: ∅ │ │ │ ├── ensure_clause: │ │ │ │ @ EnsureNode (location: (15,22)-(21,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── ensure_keyword_loc: (15,22)-(15,28) = "ensure" │ │ │ │ ├── statements: │ │ │ │ │ @ StatementsNode (location: (15,29)-(21,3)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ CallNode (location: (15,29)-(21,3)) - │ │ │ │ │ ├── flags: ∅ + │ │ │ │ │ ├── flags: newline │ │ │ │ │ ├── receiver: │ │ │ │ │ │ @ ConstantReadNode (location: (15,29)-(15,35)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── name: :Module │ │ │ │ │ ├── call_operator_loc: (15,35)-(15,36) = "." │ │ │ │ │ ├── name: :new @@ -194,31 +220,39 @@ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── block: │ │ │ │ │ @ BlockNode (location: (15,40)-(21,3)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── locals: [] │ │ │ │ │ ├── parameters: ∅ │ │ │ │ │ ├── body: │ │ │ │ │ │ @ StatementsNode (location: (16,2)-(20,5)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ │ └── @ BeginNode (location: (16,2)-(20,5)) + │ │ │ │ │ │ ├── flags: newline │ │ │ │ │ │ ├── begin_keyword_loc: (16,2)-(16,7) = "begin" │ │ │ │ │ │ ├── statements: │ │ │ │ │ │ │ @ StatementsNode (location: (17,4)-(17,9)) + │ │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ │ │ └── @ BreakNode (location: (17,4)-(17,9)) + │ │ │ │ │ │ │ ├── flags: newline │ │ │ │ │ │ │ ├── arguments: ∅ │ │ │ │ │ │ │ └── keyword_loc: (17,4)-(17,9) = "break" │ │ │ │ │ │ ├── rescue_clause: ∅ │ │ │ │ │ │ ├── else_clause: ∅ │ │ │ │ │ │ ├── ensure_clause: │ │ │ │ │ │ │ @ EnsureNode (location: (18,4)-(20,5)) + │ │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ │ ├── ensure_keyword_loc: (18,4)-(18,10) = "ensure" │ │ │ │ │ │ │ ├── statements: │ │ │ │ │ │ │ │ @ StatementsNode (location: (18,11)-(19,7)) + │ │ │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ │ │ │ └── @ CallNode (location: (18,11)-(19,7)) - │ │ │ │ │ │ │ │ ├── flags: ∅ + │ │ │ │ │ │ │ │ ├── flags: newline │ │ │ │ │ │ │ │ ├── receiver: │ │ │ │ │ │ │ │ │ @ ConstantReadNode (location: (18,11)-(18,17)) + │ │ │ │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ │ │ │ └── name: :Module │ │ │ │ │ │ │ │ ├── call_operator_loc: (18,17)-(18,18) = "." │ │ │ │ │ │ │ │ ├── name: :new @@ -228,6 +262,7 @@ │ │ │ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ │ │ └── block: │ │ │ │ │ │ │ │ @ BlockNode (location: (18,22)-(19,7)) + │ │ │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ │ │ ├── locals: [] │ │ │ │ │ │ │ │ ├── parameters: ∅ │ │ │ │ │ │ │ │ ├── body: ∅ diff --git a/test/prism/snapshots/begin_rescue.txt b/test/prism/snapshots/begin_rescue.txt index f624f85c072..087d7409e71 100644 --- a/test/prism/snapshots/begin_rescue.txt +++ b/test/prism/snapshots/begin_rescue.txt @@ -1,15 +1,19 @@ @ ProgramNode (location: (1,0)-(78,3)) +├── flags: ∅ ├── locals: [:ex] └── statements: @ StatementsNode (location: (1,0)-(78,3)) + ├── flags: ∅ └── body: (length: 17) ├── @ BeginNode (location: (1,0)-(1,33)) + │ ├── flags: newline │ ├── begin_keyword_loc: (1,0)-(1,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (1,7)-(1,8)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,7)-(1,8)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -20,15 +24,17 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (1,10)-(1,19)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (1,10)-(1,16) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (1,18)-(1,19)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (1,18)-(1,19)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -40,12 +46,14 @@ │ │ └── consequent: ∅ │ ├── else_clause: │ │ @ ElseNode (location: (1,21)-(1,33)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (1,21)-(1,25) = "else" │ │ ├── statements: │ │ │ @ StatementsNode (location: (1,27)-(1,28)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (1,27)-(1,28)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :c @@ -58,12 +66,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (1,30)-(1,33) = "end" ├── @ BeginNode (location: (3,0)-(3,44)) + │ ├── flags: newline │ ├── begin_keyword_loc: (3,0)-(3,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (3,7)-(3,8)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (3,7)-(3,8)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -74,15 +84,17 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (3,10)-(3,19)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (3,10)-(3,16) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (3,18)-(3,19)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (3,18)-(3,19)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -94,12 +106,14 @@ │ │ └── consequent: ∅ │ ├── else_clause: │ │ @ ElseNode (location: (3,21)-(3,36)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (3,21)-(3,25) = "else" │ │ ├── statements: │ │ │ @ StatementsNode (location: (3,27)-(3,28)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (3,27)-(3,28)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :c @@ -111,12 +125,14 @@ │ │ └── end_keyword_loc: (3,30)-(3,36) = "ensure" │ ├── ensure_clause: │ │ @ EnsureNode (location: (3,30)-(3,44)) + │ │ ├── flags: ∅ │ │ ├── ensure_keyword_loc: (3,30)-(3,36) = "ensure" │ │ ├── statements: │ │ │ @ StatementsNode (location: (3,38)-(3,39)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (3,38)-(3,39)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :d @@ -128,12 +144,14 @@ │ │ └── end_keyword_loc: (3,41)-(3,44) = "end" │ └── end_keyword_loc: (3,41)-(3,44) = "end" ├── @ BeginNode (location: (5,0)-(7,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (5,0)-(5,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (6,0)-(6,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (6,0)-(6,1)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -147,12 +165,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (7,0)-(7,3) = "end" ├── @ BeginNode (location: (9,0)-(9,13)) + │ ├── flags: newline │ ├── begin_keyword_loc: (9,0)-(9,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (9,7)-(9,8)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (9,7)-(9,8)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -166,12 +186,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (9,10)-(9,13) = "end" ├── @ BeginNode (location: (11,0)-(12,4)) + │ ├── flags: newline │ ├── begin_keyword_loc: (11,0)-(11,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (11,6)-(11,7)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (11,6)-(11,7)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -185,12 +207,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (12,1)-(12,4) = "end" ├── @ BeginNode (location: (14,0)-(14,12)) + │ ├── flags: newline │ ├── begin_keyword_loc: (14,0)-(14,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (14,6)-(14,7)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (14,6)-(14,7)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -204,12 +228,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (14,9)-(14,12) = "end" ├── @ BeginNode (location: (16,0)-(24,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (16,0)-(16,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (17,0)-(17,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (17,0)-(17,1)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -220,15 +246,17 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (18,0)-(23,1)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (18,0)-(18,6) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (19,0)-(19,1)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (19,0)-(19,1)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -239,15 +267,17 @@ │ │ │ └── block: ∅ │ │ └── consequent: │ │ @ RescueNode (location: (20,0)-(23,1)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (20,0)-(20,6) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (21,0)-(21,1)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (21,0)-(21,1)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :c @@ -258,15 +288,17 @@ │ │ │ └── block: ∅ │ │ └── consequent: │ │ @ RescueNode (location: (22,0)-(23,1)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (22,0)-(22,6) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (23,0)-(23,1)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (23,0)-(23,1)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :d @@ -280,12 +312,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (24,0)-(24,3) = "end" ├── @ BeginNode (location: (26,0)-(32,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (26,0)-(26,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (27,2)-(27,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (27,2)-(27,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -296,20 +330,24 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (28,0)-(31,3)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (28,0)-(28,6) = "rescue" │ │ ├── exceptions: (length: 1) │ │ │ └── @ ConstantReadNode (location: (28,7)-(28,16)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Exception │ │ ├── operator_loc: (28,17)-(28,19) = "=>" │ │ ├── reference: │ │ │ @ LocalVariableTargetNode (location: (28,20)-(28,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :ex │ │ │ └── depth: 0 │ │ ├── statements: │ │ │ @ StatementsNode (location: (29,2)-(29,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (29,2)-(29,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -320,22 +358,27 @@ │ │ │ └── block: ∅ │ │ └── consequent: │ │ @ RescueNode (location: (30,0)-(31,3)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (30,0)-(30,6) = "rescue" │ │ ├── exceptions: (length: 2) │ │ │ ├── @ ConstantReadNode (location: (30,7)-(30,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :AnotherException │ │ │ └── @ ConstantReadNode (location: (30,25)-(30,41)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :OneMoreException │ │ ├── operator_loc: (30,42)-(30,44) = "=>" │ │ ├── reference: │ │ │ @ LocalVariableTargetNode (location: (30,45)-(30,47)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :ex │ │ │ └── depth: 0 │ │ ├── statements: │ │ │ @ StatementsNode (location: (31,2)-(31,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (31,2)-(31,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :c @@ -349,12 +392,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (32,0)-(32,3) = "end" ├── @ BeginNode (location: (34,0)-(40,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (34,0)-(34,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (35,2)-(35,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (35,2)-(35,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -365,20 +410,24 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (36,0)-(37,3)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (36,0)-(36,6) = "rescue" │ │ ├── exceptions: (length: 1) │ │ │ └── @ ConstantReadNode (location: (36,7)-(36,16)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Exception │ │ ├── operator_loc: (36,17)-(36,19) = "=>" │ │ ├── reference: │ │ │ @ LocalVariableTargetNode (location: (36,20)-(36,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :ex │ │ │ └── depth: 0 │ │ ├── statements: │ │ │ @ StatementsNode (location: (37,2)-(37,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (37,2)-(37,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -391,12 +440,14 @@ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (38,0)-(40,3)) + │ │ ├── flags: ∅ │ │ ├── ensure_keyword_loc: (38,0)-(38,6) = "ensure" │ │ ├── statements: │ │ │ @ StatementsNode (location: (39,2)-(39,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (39,2)-(39,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -408,18 +459,20 @@ │ │ └── end_keyword_loc: (40,0)-(40,3) = "end" │ └── end_keyword_loc: (40,0)-(40,3) = "end" ├── @ StringNode (location: (42,0)-(42,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (42,0)-(42,2) = "%!" │ ├── content_loc: (42,2)-(42,5) = "abc" │ ├── closing_loc: (42,5)-(42,6) = "!" │ └── unescaped: "abc" ├── @ BeginNode (location: (44,0)-(48,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (44,0)-(44,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (45,0)-(45,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (45,0)-(45,1)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -430,15 +483,17 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (46,0)-(47,1)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (46,0)-(46,6) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (47,0)-(47,1)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (47,0)-(47,1)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -452,12 +507,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (48,0)-(48,3) = "end" ├── @ BeginNode (location: (50,0)-(50,20)) + │ ├── flags: newline │ ├── begin_keyword_loc: (50,0)-(50,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (50,6)-(50,7)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (50,6)-(50,7)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -468,15 +525,17 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (50,8)-(50,16)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (50,8)-(50,14) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (50,15)-(50,16)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (50,15)-(50,16)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -490,12 +549,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (50,17)-(50,20) = "end" ├── @ BeginNode (location: (52,0)-(54,5)) + │ ├── flags: newline │ ├── begin_keyword_loc: (52,0)-(52,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (53,0)-(53,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (53,0)-(53,1)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -506,15 +567,17 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (53,2)-(54,1)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (53,2)-(53,8) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (54,0)-(54,1)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (54,0)-(54,1)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -528,12 +591,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (54,2)-(54,5) = "end" ├── @ BeginNode (location: (56,0)-(60,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (56,0)-(56,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (57,0)-(57,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (57,0)-(57,1)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -544,17 +609,20 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (58,0)-(59,1)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (58,0)-(58,6) = "rescue" │ │ ├── exceptions: (length: 1) │ │ │ └── @ ConstantReadNode (location: (58,7)-(58,16)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Exception │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (59,0)-(59,1)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (59,0)-(59,1)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -568,12 +636,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (60,0)-(60,3) = "end" ├── @ BeginNode (location: (62,0)-(66,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (62,0)-(62,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (63,0)-(63,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (63,0)-(63,1)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -584,19 +654,23 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (64,0)-(65,1)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (64,0)-(64,6) = "rescue" │ │ ├── exceptions: (length: 2) │ │ │ ├── @ ConstantReadNode (location: (64,7)-(64,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :Exception │ │ │ └── @ ConstantReadNode (location: (64,18)-(64,33)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :CustomException │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (65,0)-(65,1)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (65,0)-(65,1)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -610,12 +684,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (66,0)-(66,3) = "end" ├── @ BeginNode (location: (68,0)-(72,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (68,0)-(68,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (69,2)-(69,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (69,2)-(69,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -626,22 +702,27 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (70,0)-(71,3)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (70,0)-(70,6) = "rescue" │ │ ├── exceptions: (length: 2) │ │ │ ├── @ ConstantReadNode (location: (70,7)-(70,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :Exception │ │ │ └── @ ConstantReadNode (location: (70,18)-(70,33)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :CustomException │ │ ├── operator_loc: (70,34)-(70,36) = "=>" │ │ ├── reference: │ │ │ @ LocalVariableTargetNode (location: (70,37)-(70,39)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :ex │ │ │ └── depth: 0 │ │ ├── statements: │ │ │ @ StatementsNode (location: (71,2)-(71,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (71,2)-(71,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -655,12 +736,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (72,0)-(72,3) = "end" └── @ BeginNode (location: (74,0)-(78,3)) + ├── flags: newline ├── begin_keyword_loc: (74,0)-(74,5) = "begin" ├── statements: │ @ StatementsNode (location: (75,2)-(75,3)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (75,2)-(75,3)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a @@ -671,20 +754,24 @@ │ └── block: ∅ ├── rescue_clause: │ @ RescueNode (location: (76,0)-(77,3)) + │ ├── flags: ∅ │ ├── keyword_loc: (76,0)-(76,6) = "rescue" │ ├── exceptions: (length: 1) │ │ └── @ ConstantReadNode (location: (76,7)-(76,16)) + │ │ ├── flags: ∅ │ │ └── name: :Exception │ ├── operator_loc: (76,17)-(76,19) = "=>" │ ├── reference: │ │ @ LocalVariableTargetNode (location: (76,20)-(76,22)) + │ │ ├── flags: ∅ │ │ ├── name: :ex │ │ └── depth: 0 │ ├── statements: │ │ @ StatementsNode (location: (77,2)-(77,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (77,2)-(77,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :b diff --git a/test/prism/snapshots/blocks.txt b/test/prism/snapshots/blocks.txt index 1c996ebd09c..933de3e7be2 100644 --- a/test/prism/snapshots/blocks.txt +++ b/test/prism/snapshots/blocks.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(54,17)) +├── flags: ∅ ├── locals: [:fork] └── statements: @ StatementsNode (location: (1,0)-(54,17)) + ├── flags: ∅ └── body: (length: 20) ├── @ CallNode (location: (1,0)-(1,16)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (1,0)-(1,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -37,13 +39,15 @@ │ ├── closing_loc: (1,7)-(1,8) = "]" │ └── block: │ @ BlockNode (location: (1,9)-(1,16)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,11)-(1,14)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,11)-(1,14)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :baz @@ -55,7 +59,7 @@ │ ├── opening_loc: (1,9)-(1,10) = "{" │ └── closing_loc: (1,15)-(1,16) = "}" ├── @ CallNode (location: (3,0)-(5,3)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (3,0)-(3,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -88,13 +92,15 @@ │ ├── closing_loc: (3,7)-(3,8) = "]" │ └── block: │ @ BlockNode (location: (3,9)-(5,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (4,0)-(4,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (4,0)-(4,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :baz @@ -106,7 +112,7 @@ │ ├── opening_loc: (3,9)-(3,11) = "do" │ └── closing_loc: (5,0)-(5,3) = "end" ├── @ CallNode (location: (7,0)-(7,35)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (7,0)-(7,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -127,16 +133,19 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (7,9)-(7,10)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 0 │ ├── closing_loc: (7,10)-(7,11) = ")" │ └── block: │ @ BlockNode (location: (7,12)-(7,35)) + │ ├── flags: ∅ │ ├── locals: [:x, :memo] │ ├── parameters: │ │ @ BlockParametersNode (location: (7,14)-(7,23)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (7,15)-(7,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 2) │ │ │ │ ├── @ RequiredParameterNode (location: (7,15)-(7,16)) │ │ │ │ │ ├── flags: ∅ @@ -155,12 +164,15 @@ │ │ └── closing_loc: (7,22)-(7,23) = "|" │ ├── body: │ │ @ StatementsNode (location: (7,24)-(7,33)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableOperatorWriteNode (location: (7,24)-(7,33)) + │ │ ├── flags: newline │ │ ├── name_loc: (7,24)-(7,28) = "memo" │ │ ├── binary_operator_loc: (7,29)-(7,31) = "+=" │ │ ├── value: │ │ │ @ LocalVariableReadNode (location: (7,32)-(7,33)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :x │ │ │ └── depth: 0 │ │ ├── name: :memo @@ -169,7 +181,7 @@ │ ├── opening_loc: (7,12)-(7,13) = "{" │ └── closing_loc: (7,34)-(7,35) = "}" ├── @ CallNode (location: (9,0)-(9,10)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -179,13 +191,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (9,4)-(9,10)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ │ ├── opening_loc: (9,4)-(9,6) = "do" │ └── closing_loc: (9,7)-(9,10) = "end" ├── @ CallNode (location: (11,0)-(11,21)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -206,11 +219,13 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ ParenthesesNode (location: (11,9)-(11,21)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (11,10)-(11,20)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (11,10)-(11,20)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :baz @@ -220,6 +235,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: │ │ │ @ BlockNode (location: (11,14)-(11,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [] │ │ │ ├── parameters: ∅ │ │ │ ├── body: ∅ @@ -230,7 +246,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (13,0)-(13,14)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -253,13 +269,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (13,8)-(13,14)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ │ ├── opening_loc: (13,8)-(13,10) = "do" │ └── closing_loc: (13,11)-(13,14) = "end" ├── @ CallNode (location: (15,0)-(15,18)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -295,13 +312,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (15,12)-(15,18)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ │ ├── opening_loc: (15,12)-(15,14) = "do" │ └── closing_loc: (15,15)-(15,18) = "end" ├── @ CallNode (location: (17,0)-(18,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -311,11 +329,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (17,4)-(18,3)) + │ ├── flags: ∅ │ ├── locals: [:a] │ ├── parameters: │ │ @ BlockParametersNode (location: (17,7)-(17,17)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (17,8)-(17,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 0) │ │ │ ├── optionals: (length: 1) │ │ │ │ └── @ OptionalParameterNode (location: (17,8)-(17,16)) @@ -346,7 +367,7 @@ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── arguments: (length: 1) │ │ │ │ │ └── @ IntegerNode (location: (17,14)-(17,15)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── closing_loc: (17,15)-(17,16) = "]" │ │ │ │ └── block: ∅ @@ -362,7 +383,7 @@ │ ├── opening_loc: (17,4)-(17,6) = "do" │ └── closing_loc: (18,0)-(18,3) = "end" ├── @ CallNode (location: (20,0)-(22,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -372,14 +393,17 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (20,4)-(22,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (20,4)-(22,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (21,0)-(21,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (21,0)-(21,6) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ @@ -392,7 +416,7 @@ │ ├── opening_loc: (20,4)-(20,6) = "do" │ └── closing_loc: (22,0)-(22,3) = "end" ├── @ CallNode (location: (24,0)-(29,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -402,13 +426,15 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (24,4)-(29,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (25,2)-(28,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (25,2)-(28,5)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -418,13 +444,15 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (25,6)-(28,5)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (26,4)-(27,7)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (26,4)-(27,7)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :baz @@ -434,6 +462,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: │ │ │ @ BlockNode (location: (26,8)-(27,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [] │ │ │ ├── parameters: ∅ │ │ │ ├── body: ∅ @@ -444,7 +473,7 @@ │ ├── opening_loc: (24,4)-(24,6) = "do" │ └── closing_loc: (29,0)-(29,3) = "end" ├── @ CallNode (location: (31,0)-(31,16)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (31,0)-(31,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -477,13 +506,15 @@ │ ├── closing_loc: (31,7)-(31,8) = "]" │ └── block: │ @ BlockNode (location: (31,9)-(31,16)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (31,11)-(31,14)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (31,11)-(31,14)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :baz @@ -495,7 +526,7 @@ │ ├── opening_loc: (31,9)-(31,10) = "{" │ └── closing_loc: (31,15)-(31,16) = "}" ├── @ CallNode (location: (33,0)-(33,24)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -505,11 +536,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (33,4)-(33,24)) + │ ├── flags: ∅ │ ├── locals: [:x, :y, :z] │ ├── parameters: │ │ @ BlockParametersNode (location: (33,6)-(33,20)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (33,7)-(33,19)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (33,7)-(33,8)) │ │ │ │ ├── flags: ∅ @@ -522,7 +556,7 @@ │ │ │ │ ├── operator_loc: (33,12)-(33,13) = "=" │ │ │ │ └── value: │ │ │ │ @ IntegerNode (location: (33,14)-(33,15)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ ├── rest: ∅ │ │ │ ├── posts: (length: 0) @@ -538,14 +572,16 @@ │ │ └── closing_loc: (33,19)-(33,20) = "|" │ ├── body: │ │ @ StatementsNode (location: (33,21)-(33,22)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (33,21)-(33,22)) + │ │ ├── flags: newline │ │ ├── name: :x │ │ └── depth: 0 │ ├── opening_loc: (33,4)-(33,5) = "{" │ └── closing_loc: (33,23)-(33,24) = "}" ├── @ CallNode (location: (35,0)-(35,11)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -555,11 +591,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (35,4)-(35,11)) + │ ├── flags: ∅ │ ├── locals: [:x] │ ├── parameters: │ │ @ BlockParametersNode (location: (35,6)-(35,9)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (35,7)-(35,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (35,7)-(35,8)) │ │ │ │ ├── flags: ∅ @@ -577,16 +616,17 @@ │ ├── opening_loc: (35,4)-(35,5) = "{" │ └── closing_loc: (35,10)-(35,11) = "}" ├── @ LocalVariableWriteNode (location: (37,0)-(37,8)) + │ ├── flags: newline │ ├── name: :fork │ ├── depth: 0 │ ├── name_loc: (37,0)-(37,4) = "fork" │ ├── value: │ │ @ IntegerNode (location: (37,7)-(37,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (37,5)-(37,6) = "=" ├── @ CallNode (location: (38,0)-(39,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :fork @@ -596,11 +636,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (38,5)-(39,3)) + │ ├── flags: ∅ │ ├── locals: [:a] │ ├── parameters: │ │ @ BlockParametersNode (location: (38,8)-(38,11)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (38,9)-(38,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (38,9)-(38,10)) │ │ │ │ ├── flags: ∅ @@ -618,7 +661,7 @@ │ ├── opening_loc: (38,5)-(38,7) = "do" │ └── closing_loc: (39,0)-(39,3) = "end" ├── @ CallNode (location: (41,0)-(41,12)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :fork @@ -628,11 +671,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (41,5)-(41,12)) + │ ├── flags: ∅ │ ├── locals: [:a] │ ├── parameters: │ │ @ BlockParametersNode (location: (41,7)-(41,10)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (41,8)-(41,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (41,8)-(41,9)) │ │ │ │ ├── flags: ∅ @@ -650,7 +696,7 @@ │ ├── opening_loc: (41,5)-(41,6) = "{" │ └── closing_loc: (41,11)-(41,12) = "}" ├── @ CallNode (location: (43,0)-(44,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :C @@ -660,13 +706,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (43,2)-(44,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ │ ├── opening_loc: (43,2)-(43,4) = "do" │ └── closing_loc: (44,0)-(44,3) = "end" ├── @ CallNode (location: (46,0)-(46,4)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :C @@ -676,13 +723,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (46,2)-(46,4)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ │ ├── opening_loc: (46,2)-(46,3) = "{" │ └── closing_loc: (46,3)-(46,4) = "}" ├── @ CallNode (location: (48,0)-(52,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -703,11 +751,14 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (48,11)-(52,1)) + │ │ ├── flags: ∅ │ │ ├── locals: [:a, :b] │ │ ├── parameters: │ │ │ @ BlockParametersNode (location: (48,13)-(51,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── parameters: │ │ │ │ @ ParametersNode (location: (49,2)-(50,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── requireds: (length: 0) │ │ │ │ ├── optionals: (length: 0) │ │ │ │ ├── rest: ∅ @@ -719,7 +770,7 @@ │ │ │ │ │ │ ├── name_loc: (49,2)-(49,4) = "a:" │ │ │ │ │ │ └── value: │ │ │ │ │ │ @ IntegerNode (location: (49,5)-(49,6)) - │ │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ │ └── value: 1 │ │ │ │ │ └── @ OptionalKeywordParameterNode (location: (50,2)-(50,6)) │ │ │ │ │ ├── flags: ∅ @@ -727,7 +778,7 @@ │ │ │ │ │ ├── name_loc: (50,2)-(50,4) = "b:" │ │ │ │ │ └── value: │ │ │ │ │ @ IntegerNode (location: (50,5)-(50,6)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 2 │ │ │ │ ├── keyword_rest: ∅ │ │ │ │ └── block: ∅ @@ -740,7 +791,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ CallNode (location: (54,0)-(54,17)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :foo @@ -750,11 +801,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (54,4)-(54,17)) + ├── flags: ∅ ├── locals: [:bar] ├── parameters: │ @ BlockParametersNode (location: (54,7)-(54,13)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (54,8)-(54,12)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (54,8)-(54,11)) │ │ │ ├── flags: ∅ @@ -762,6 +816,7 @@ │ │ ├── optionals: (length: 0) │ │ ├── rest: │ │ │ @ ImplicitRestNode (location: (54,11)-(54,12)) + │ │ │ └── flags: ∅ │ │ ├── posts: (length: 0) │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: ∅ diff --git a/test/prism/snapshots/boolean_operators.txt b/test/prism/snapshots/boolean_operators.txt index 3bf33430c9b..bde70d65090 100644 --- a/test/prism/snapshots/boolean_operators.txt +++ b/test/prism/snapshots/boolean_operators.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(5,7)) +├── flags: ∅ ├── locals: [:a] └── statements: @ StatementsNode (location: (1,0)-(5,7)) + ├── flags: ∅ └── body: (length: 3) ├── @ LocalVariableAndWriteNode (location: (1,0)-(1,7)) + │ ├── flags: newline │ ├── name_loc: (1,0)-(1,1) = "a" │ ├── operator_loc: (1,2)-(1,5) = "&&=" │ ├── value: @@ -20,6 +23,7 @@ │ ├── name: :a │ └── depth: 0 ├── @ LocalVariableOperatorWriteNode (location: (3,0)-(3,6)) + │ ├── flags: newline │ ├── name_loc: (3,0)-(3,1) = "a" │ ├── binary_operator_loc: (3,2)-(3,4) = "+=" │ ├── value: @@ -37,6 +41,7 @@ │ ├── binary_operator: :+ │ └── depth: 0 └── @ LocalVariableOrWriteNode (location: (5,0)-(5,7)) + ├── flags: newline ├── name_loc: (5,0)-(5,1) = "a" ├── operator_loc: (5,2)-(5,5) = "||=" ├── value: diff --git a/test/prism/snapshots/booleans.txt b/test/prism/snapshots/booleans.txt index 47319662439..47ce80217a0 100644 --- a/test/prism/snapshots/booleans.txt +++ b/test/prism/snapshots/booleans.txt @@ -1,7 +1,11 @@ @ ProgramNode (location: (1,0)-(3,4)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,4)) + ├── flags: ∅ └── body: (length: 2) ├── @ FalseNode (location: (1,0)-(1,5)) + │ └── flags: newline, static_literal └── @ TrueNode (location: (3,0)-(3,4)) + └── flags: newline, static_literal diff --git a/test/prism/snapshots/break.txt b/test/prism/snapshots/break.txt index 7d5bf5e69a6..469b603f849 100644 --- a/test/prism/snapshots/break.txt +++ b/test/prism/snapshots/break.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(29,21)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(29,21)) + ├── flags: ∅ └── body: (length: 13) ├── @ CallNode (location: (1,0)-(1,13)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -14,18 +16,21 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,4)-(1,13)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,6)-(1,11)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ BreakNode (location: (1,6)-(1,11)) + │ │ ├── flags: newline │ │ ├── arguments: ∅ │ │ └── keyword_loc: (1,6)-(1,11) = "break" │ ├── opening_loc: (1,4)-(1,5) = "{" │ └── closing_loc: (1,12)-(1,13) = "}" ├── @ CallNode (location: (3,0)-(3,27)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -35,40 +40,49 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (3,4)-(3,27)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (3,6)-(3,25)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ BreakNode (location: (3,6)-(3,25)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (3,12)-(3,25)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 3) │ │ │ ├── @ ParenthesesNode (location: (3,12)-(3,15)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (3,13)-(3,14)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ IntegerNode (location: (3,13)-(3,14)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── opening_loc: (3,12)-(3,13) = "(" │ │ │ │ └── closing_loc: (3,14)-(3,15) = ")" │ │ │ ├── @ ParenthesesNode (location: (3,17)-(3,20)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (3,18)-(3,19)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ IntegerNode (location: (3,18)-(3,19)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ │ └── value: 2 │ │ │ │ ├── opening_loc: (3,17)-(3,18) = "(" │ │ │ │ └── closing_loc: (3,19)-(3,20) = ")" │ │ │ └── @ ParenthesesNode (location: (3,22)-(3,25)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (3,23)-(3,24)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (3,23)-(3,24)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ └── value: 3 │ │ │ ├── opening_loc: (3,22)-(3,23) = "(" │ │ │ └── closing_loc: (3,24)-(3,25) = ")" @@ -76,7 +90,7 @@ │ ├── opening_loc: (3,4)-(3,5) = "{" │ └── closing_loc: (3,26)-(3,27) = "}" ├── @ CallNode (location: (5,0)-(5,15)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -86,24 +100,27 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (5,4)-(5,15)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (5,6)-(5,13)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ BreakNode (location: (5,6)-(5,13)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (5,12)-(5,13)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (5,12)-(5,13)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── keyword_loc: (5,6)-(5,11) = "break" │ ├── opening_loc: (5,4)-(5,5) = "{" │ └── closing_loc: (5,14)-(5,15) = "}" ├── @ CallNode (location: (7,0)-(8,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -113,30 +130,33 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (7,4)-(8,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (7,6)-(8,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ BreakNode (location: (7,6)-(8,1)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (7,12)-(8,1)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 3) │ │ │ ├── @ IntegerNode (location: (7,12)-(7,13)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── @ IntegerNode (location: (7,15)-(7,16)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── @ IntegerNode (location: (8,0)-(8,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ └── keyword_loc: (7,6)-(7,11) = "break" │ ├── opening_loc: (7,4)-(7,5) = "{" │ └── closing_loc: (8,2)-(8,3) = "}" ├── @ CallNode (location: (10,0)-(10,21)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -146,30 +166,33 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (10,4)-(10,21)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (10,6)-(10,19)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ BreakNode (location: (10,6)-(10,19)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (10,12)-(10,19)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 3) │ │ │ ├── @ IntegerNode (location: (10,12)-(10,13)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── @ IntegerNode (location: (10,15)-(10,16)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── @ IntegerNode (location: (10,18)-(10,19)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ └── keyword_loc: (10,6)-(10,11) = "break" │ ├── opening_loc: (10,4)-(10,5) = "{" │ └── closing_loc: (10,20)-(10,21) = "}" ├── @ CallNode (location: (12,0)-(12,23)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -179,27 +202,30 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (12,4)-(12,23)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (12,6)-(12,21)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ BreakNode (location: (12,6)-(12,21)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (12,12)-(12,21)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ArrayNode (location: (12,12)-(12,21)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 3) │ │ │ │ ├── @ IntegerNode (location: (12,13)-(12,14)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── @ IntegerNode (location: (12,16)-(12,17)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 2 │ │ │ │ └── @ IntegerNode (location: (12,19)-(12,20)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 3 │ │ │ ├── opening_loc: (12,12)-(12,13) = "[" │ │ │ └── closing_loc: (12,20)-(12,21) = "]" @@ -207,7 +233,7 @@ │ ├── opening_loc: (12,4)-(12,5) = "{" │ └── closing_loc: (12,22)-(12,23) = "}" ├── @ CallNode (location: (14,0)-(17,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -217,25 +243,30 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (14,4)-(17,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (14,6)-(17,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ BreakNode (location: (14,6)-(17,1)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (14,11)-(17,1)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ParenthesesNode (location: (14,11)-(17,1)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (15,2)-(16,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 2) │ │ │ │ ├── @ IntegerNode (location: (15,2)-(15,3)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ └── @ IntegerNode (location: (16,2)-(16,3)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ └── value: 2 │ │ │ ├── opening_loc: (14,11)-(14,12) = "(" │ │ │ └── closing_loc: (17,0)-(17,1) = ")" @@ -243,7 +274,7 @@ │ ├── opening_loc: (14,4)-(14,5) = "{" │ └── closing_loc: (17,2)-(17,3) = "}" ├── @ CallNode (location: (19,0)-(19,15)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -253,17 +284,21 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (19,4)-(19,15)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (19,6)-(19,13)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ BreakNode (location: (19,6)-(19,13)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (19,11)-(19,13)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ParenthesesNode (location: (19,11)-(19,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: ∅ │ │ │ ├── opening_loc: (19,11)-(19,12) = "(" │ │ │ └── closing_loc: (19,12)-(19,13) = ")" @@ -271,7 +306,7 @@ │ ├── opening_loc: (19,4)-(19,5) = "{" │ └── closing_loc: (19,14)-(19,15) = "}" ├── @ CallNode (location: (21,0)-(21,16)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -281,22 +316,27 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (21,4)-(21,16)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (21,6)-(21,14)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ BreakNode (location: (21,6)-(21,14)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (21,11)-(21,14)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ParenthesesNode (location: (21,11)-(21,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (21,12)-(21,13)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (21,12)-(21,13)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── opening_loc: (21,11)-(21,12) = "(" │ │ │ └── closing_loc: (21,13)-(21,14) = ")" @@ -304,7 +344,7 @@ │ ├── opening_loc: (21,4)-(21,5) = "{" │ └── closing_loc: (21,15)-(21,16) = "}" ├── @ CallNode (location: (23,0)-(23,22)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (23,0)-(23,16)) │ │ ├── flags: ignore_visibility @@ -317,18 +357,21 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (23,4)-(23,16)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (23,6)-(23,14)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ BreakNode (location: (23,6)-(23,14)) + │ │ │ ├── flags: newline │ │ │ ├── arguments: │ │ │ │ @ ArgumentsNode (location: (23,12)-(23,14)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ IntegerNode (location: (23,12)-(23,14)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 42 │ │ │ └── keyword_loc: (23,6)-(23,11) = "break" │ │ ├── opening_loc: (23,4)-(23,5) = "{" @@ -342,12 +385,12 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (23,20)-(23,22)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (25,0)-(25,23)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (25,0)-(25,17)) │ │ ├── flags: ignore_visibility @@ -360,11 +403,14 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (25,4)-(25,17)) + │ │ ├── flags: ∅ │ │ ├── locals: [:a] │ │ ├── parameters: │ │ │ @ BlockParametersNode (location: (25,6)-(25,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── parameters: │ │ │ │ @ ParametersNode (location: (25,7)-(25,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ └── @ RequiredParameterNode (location: (25,7)-(25,8)) │ │ │ │ │ ├── flags: ∅ @@ -380,8 +426,10 @@ │ │ │ └── closing_loc: (25,8)-(25,9) = "|" │ │ ├── body: │ │ │ @ StatementsNode (location: (25,10)-(25,15)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ BreakNode (location: (25,10)-(25,15)) + │ │ │ ├── flags: newline │ │ │ ├── arguments: ∅ │ │ │ └── keyword_loc: (25,10)-(25,15) = "break" │ │ ├── opening_loc: (25,4)-(25,5) = "{" @@ -395,16 +443,17 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (25,21)-(25,23)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ WhileNode (location: (27,0)-(27,21)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (27,0)-(27,5) = "while" │ ├── closing_loc: (27,18)-(27,21) = "end" │ ├── predicate: │ │ @ AndNode (location: (27,6)-(27,16)) + │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ CallNode (location: (27,6)-(27,7)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -418,16 +467,18 @@ │ │ │ └── block: ∅ │ │ ├── right: │ │ │ @ BreakNode (location: (27,11)-(27,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── arguments: ∅ │ │ │ └── keyword_loc: (27,11)-(27,16) = "break" │ │ └── operator_loc: (27,8)-(27,10) = "&&" │ └── statements: ∅ └── @ UntilNode (location: (29,0)-(29,21)) - ├── flags: ∅ + ├── flags: newline ├── keyword_loc: (29,0)-(29,5) = "until" ├── closing_loc: (29,18)-(29,21) = "end" ├── predicate: │ @ AndNode (location: (29,6)-(29,16)) + │ ├── flags: ∅ │ ├── left: │ │ @ CallNode (location: (29,6)-(29,7)) │ │ ├── flags: variable_call, ignore_visibility @@ -441,6 +492,7 @@ │ │ └── block: ∅ │ ├── right: │ │ @ BreakNode (location: (29,11)-(29,16)) + │ │ ├── flags: ∅ │ │ ├── arguments: ∅ │ │ └── keyword_loc: (29,11)-(29,16) = "break" │ └── operator_loc: (29,8)-(29,10) = "&&" diff --git a/test/prism/snapshots/case.txt b/test/prism/snapshots/case.txt index 417bf9492a4..14a2f79e45f 100644 --- a/test/prism/snapshots/case.txt +++ b/test/prism/snapshots/case.txt @@ -1,22 +1,26 @@ @ ProgramNode (location: (1,0)-(55,3)) +├── flags: ∅ ├── locals: [:b] └── statements: @ StatementsNode (location: (1,0)-(55,3)) + ├── flags: ∅ └── body: (length: 15) ├── @ CaseNode (location: (1,0)-(3,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (1,5)-(1,8)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,5)-(1,6) = ":" │ │ ├── value_loc: (1,6)-(1,8) = "hi" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "hi" │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (2,0)-(2,8)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (2,0)-(2,4) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ SymbolNode (location: (2,5)-(2,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (2,5)-(2,6) = ":" │ │ │ ├── value_loc: (2,6)-(2,8) = "hi" │ │ │ ├── closing_loc: ∅ @@ -27,19 +31,24 @@ │ ├── case_keyword_loc: (1,0)-(1,4) = "case" │ └── end_keyword_loc: (3,0)-(3,3) = "end" ├── @ CaseNode (location: (5,0)-(5,58)) + │ ├── flags: newline │ ├── predicate: │ │ @ TrueNode (location: (5,5)-(5,9)) + │ │ └── flags: static_literal │ ├── conditions: (length: 2) │ │ ├── @ WhenNode (location: (5,11)-(5,30)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (5,11)-(5,15) = "when" │ │ │ ├── conditions: (length: 1) │ │ │ │ └── @ TrueNode (location: (5,16)-(5,20)) + │ │ │ │ └── flags: static_literal │ │ │ ├── then_keyword_loc: ∅ │ │ │ └── statements: │ │ │ @ StatementsNode (location: (5,22)-(5,30)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (5,22)-(5,30)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :puts @@ -50,7 +59,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ SymbolNode (location: (5,27)-(5,30)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (5,27)-(5,28) = ":" │ │ │ │ ├── value_loc: (5,28)-(5,30) = "hi" │ │ │ │ ├── closing_loc: ∅ @@ -58,15 +67,18 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ WhenNode (location: (5,32)-(5,53)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (5,32)-(5,36) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ FalseNode (location: (5,37)-(5,42)) + │ │ │ └── flags: static_literal │ │ ├── then_keyword_loc: ∅ │ │ └── statements: │ │ @ StatementsNode (location: (5,44)-(5,53)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (5,44)-(5,53)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -77,7 +89,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ SymbolNode (location: (5,49)-(5,53)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (5,49)-(5,50) = ":" │ │ │ ├── value_loc: (5,50)-(5,53) = "bye" │ │ │ ├── closing_loc: ∅ @@ -88,12 +100,15 @@ │ ├── case_keyword_loc: (5,0)-(5,4) = "case" │ └── end_keyword_loc: (5,55)-(5,58) = "end" ├── @ CaseNode (location: (7,0)-(7,20)) + │ ├── flags: newline │ ├── predicate: ∅ │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (7,6)-(7,15)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (7,6)-(7,10) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ SplatNode (location: (7,11)-(7,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (7,11)-(7,12) = "*" │ │ │ └── expression: │ │ │ @ CallNode (location: (7,12)-(7,15)) @@ -112,19 +127,21 @@ │ ├── case_keyword_loc: (7,0)-(7,4) = "case" │ └── end_keyword_loc: (7,17)-(7,20) = "end" ├── @ CaseNode (location: (9,0)-(13,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (9,5)-(9,8)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (9,5)-(9,6) = ":" │ │ ├── value_loc: (9,6)-(9,8) = "hi" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "hi" │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (10,0)-(10,8)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (10,0)-(10,4) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ SymbolNode (location: (10,5)-(10,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (10,5)-(10,6) = ":" │ │ │ ├── value_loc: (10,6)-(10,8) = "hi" │ │ │ ├── closing_loc: ∅ @@ -133,12 +150,14 @@ │ │ └── statements: ∅ │ ├── consequent: │ │ @ ElseNode (location: (11,0)-(13,3)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (11,0)-(11,4) = "else" │ │ ├── statements: │ │ │ @ StatementsNode (location: (12,0)-(12,2)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ SymbolNode (location: (12,0)-(12,2)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (12,0)-(12,1) = ":" │ │ │ ├── value_loc: (12,1)-(12,2) = "b" │ │ │ ├── closing_loc: ∅ @@ -147,6 +166,7 @@ │ ├── case_keyword_loc: (9,0)-(9,4) = "case" │ └── end_keyword_loc: (13,0)-(13,3) = "end" ├── @ CaseNode (location: (15,0)-(15,36)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (15,5)-(15,9)) │ │ ├── flags: variable_call, ignore_visibility @@ -160,11 +180,14 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (15,11)-(15,31)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (15,11)-(15,15) = "when" │ │ ├── conditions: (length: 2) │ │ │ ├── @ ConstantReadNode (location: (15,16)-(15,22)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :FooBar │ │ │ └── @ ConstantReadNode (location: (15,24)-(15,31)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :BazBonk │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ @@ -172,9 +195,11 @@ │ ├── case_keyword_loc: (15,0)-(15,4) = "case" │ └── end_keyword_loc: (15,33)-(15,36) = "end" ├── @ CaseNode (location: (17,0)-(19,3)) + │ ├── flags: newline │ ├── predicate: ∅ │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (18,0)-(18,15)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (18,0)-(18,4) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ CallNode (location: (18,5)-(18,15)) @@ -216,9 +241,11 @@ │ ├── case_keyword_loc: (17,0)-(17,4) = "case" │ └── end_keyword_loc: (19,0)-(19,3) = "end" ├── @ CaseNode (location: (21,0)-(25,3)) + │ ├── flags: newline │ ├── predicate: ∅ │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (22,0)-(22,6)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (22,0)-(22,4) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ CallNode (location: (22,5)-(22,6)) @@ -235,12 +262,14 @@ │ │ └── statements: ∅ │ ├── consequent: │ │ @ ElseNode (location: (23,0)-(25,3)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (23,0)-(23,4) = "else" │ │ ├── statements: ∅ │ │ └── end_keyword_loc: (25,0)-(25,3) = "end" │ ├── case_keyword_loc: (21,0)-(21,4) = "case" │ └── end_keyword_loc: (25,0)-(25,3) = "end" ├── @ CaseNode (location: (27,0)-(30,6)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (27,5)-(27,9)) │ │ ├── flags: variable_call, ignore_visibility @@ -254,10 +283,11 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (28,3)-(28,10)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (28,3)-(28,7) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ SymbolNode (location: (28,8)-(28,10)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (28,8)-(28,9) = ":" │ │ │ ├── value_loc: (28,9)-(28,10) = "b" │ │ │ ├── closing_loc: ∅ @@ -266,19 +296,22 @@ │ │ └── statements: ∅ │ ├── consequent: │ │ @ ElseNode (location: (29,5)-(30,6)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (29,5)-(29,9) = "else" │ │ ├── statements: ∅ │ │ └── end_keyword_loc: (30,3)-(30,6) = "end" │ ├── case_keyword_loc: (27,0)-(27,4) = "case" │ └── end_keyword_loc: (30,3)-(30,6) = "end" ├── @ CaseNode (location: (32,0)-(32,25)) + │ ├── flags: newline │ ├── predicate: ∅ │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (32,14)-(32,20)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (32,14)-(32,18) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ IntegerNode (location: (32,19)-(32,20)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ @@ -286,23 +319,26 @@ │ ├── case_keyword_loc: (32,0)-(32,4) = "case" │ └── end_keyword_loc: (32,22)-(32,25) = "end" ├── @ CaseNode (location: (34,0)-(36,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ MatchPredicateNode (location: (34,5)-(34,11)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ IntegerNode (location: (34,5)-(34,6)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── pattern: │ │ │ @ IntegerNode (location: (34,10)-(34,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: (34,7)-(34,9) = "in" │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (35,0)-(35,6)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (35,0)-(35,4) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ IntegerNode (location: (35,5)-(35,6)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ @@ -310,23 +346,26 @@ │ ├── case_keyword_loc: (34,0)-(34,4) = "case" │ └── end_keyword_loc: (36,0)-(36,3) = "end" ├── @ CaseNode (location: (38,0)-(38,24)) + │ ├── flags: newline │ ├── predicate: │ │ @ MatchPredicateNode (location: (38,5)-(38,11)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ IntegerNode (location: (38,5)-(38,6)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── pattern: │ │ │ @ IntegerNode (location: (38,10)-(38,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: (38,7)-(38,9) = "in" │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (38,13)-(38,19)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (38,13)-(38,17) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ IntegerNode (location: (38,18)-(38,19)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ @@ -334,22 +373,25 @@ │ ├── case_keyword_loc: (38,0)-(38,4) = "case" │ └── end_keyword_loc: (38,21)-(38,24) = "end" ├── @ CaseMatchNode (location: (40,0)-(42,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ MatchPredicateNode (location: (40,5)-(40,11)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ IntegerNode (location: (40,5)-(40,6)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── pattern: │ │ │ @ IntegerNode (location: (40,10)-(40,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: (40,7)-(40,9) = "in" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (41,0)-(41,4)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IntegerNode (location: (41,3)-(41,4)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ ├── statements: ∅ │ │ ├── in_loc: (41,0)-(41,2) = "in" @@ -358,22 +400,25 @@ │ ├── case_keyword_loc: (40,0)-(40,4) = "case" │ └── end_keyword_loc: (42,0)-(42,3) = "end" ├── @ CaseMatchNode (location: (44,0)-(44,22)) + │ ├── flags: newline │ ├── predicate: │ │ @ MatchPredicateNode (location: (44,5)-(44,11)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ IntegerNode (location: (44,5)-(44,6)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── pattern: │ │ │ @ IntegerNode (location: (44,10)-(44,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: (44,7)-(44,9) = "in" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (44,13)-(44,17)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IntegerNode (location: (44,16)-(44,17)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ ├── statements: ∅ │ │ ├── in_loc: (44,13)-(44,15) = "in" @@ -382,6 +427,7 @@ │ ├── case_keyword_loc: (44,0)-(44,4) = "case" │ └── end_keyword_loc: (44,19)-(44,22) = "end" ├── @ CaseMatchNode (location: (46,0)-(49,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (46,5)-(46,6)) │ │ ├── flags: variable_call, ignore_visibility @@ -395,11 +441,14 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (47,0)-(48,3)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (47,3)-(47,15)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (47,5)-(47,7) = "if" │ │ │ ├── predicate: │ │ │ │ @ AndNode (location: (47,8)-(47,15)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── left: │ │ │ │ │ @ CallNode (location: (47,8)-(47,9)) │ │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -426,17 +475,20 @@ │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (47,3)-(47,4)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ LocalVariableTargetNode (location: (47,3)-(47,4)) + │ │ │ │ ├── flags: newline │ │ │ │ ├── name: :b │ │ │ │ └── depth: 0 │ │ │ ├── consequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (48,2)-(48,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (48,2)-(48,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :e @@ -451,10 +503,10 @@ │ ├── case_keyword_loc: (46,0)-(46,4) = "case" │ └── end_keyword_loc: (49,0)-(49,3) = "end" └── @ CallNode (location: (51,0)-(55,3)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (51,0)-(51,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: (51,1)-(51,2) = "." ├── name: :then @@ -464,24 +516,31 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (51,7)-(55,3)) + ├── flags: ∅ ├── locals: [:_1] ├── parameters: │ @ NumberedParametersNode (location: (51,7)-(55,3)) + │ ├── flags: ∅ │ └── maximum: 1 ├── body: │ @ StatementsNode (location: (52,2)-(54,5)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CaseMatchNode (location: (52,2)-(54,5)) + │ ├── flags: newline │ ├── predicate: │ │ @ IntegerNode (location: (52,7)-(52,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (53,2)-(53,8)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ PinnedVariableNode (location: (53,5)-(53,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── variable: │ │ │ │ @ LocalVariableReadNode (location: (53,6)-(53,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :_1 │ │ │ │ └── depth: 0 │ │ │ └── operator_loc: (53,5)-(53,6) = "^" diff --git a/test/prism/snapshots/classes.txt b/test/prism/snapshots/classes.txt index 4a36bd5cdc4..6e30ba03898 100644 --- a/test/prism/snapshots/classes.txt +++ b/test/prism/snapshots/classes.txt @@ -1,46 +1,56 @@ @ ProgramNode (location: (1,0)-(35,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(35,3)) + ├── flags: ∅ └── body: (length: 14) ├── @ ClassNode (location: (1,0)-(1,17)) + │ ├── flags: newline │ ├── locals: [:a] │ ├── class_keyword_loc: (1,0)-(1,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (1,6)-(1,7)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── inheritance_operator_loc: ∅ │ ├── superclass: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,8)-(1,13)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableWriteNode (location: (1,8)-(1,13)) + │ │ ├── flags: newline │ │ ├── name: :a │ │ ├── depth: 0 │ │ ├── name_loc: (1,8)-(1,9) = "a" │ │ ├── value: │ │ │ @ IntegerNode (location: (1,12)-(1,13)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── operator_loc: (1,10)-(1,11) = "=" │ ├── end_keyword_loc: (1,14)-(1,17) = "end" │ └── name: :A ├── @ ClassNode (location: (3,0)-(3,20)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (3,0)-(3,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (3,6)-(3,7)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── inheritance_operator_loc: ∅ │ ├── superclass: ∅ │ ├── body: │ │ @ BeginNode (location: (3,0)-(3,20)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── rescue_clause: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: │ │ │ @ EnsureNode (location: (3,9)-(3,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── ensure_keyword_loc: (3,9)-(3,15) = "ensure" │ │ │ ├── statements: ∅ │ │ │ └── end_keyword_loc: (3,17)-(3,20) = "end" @@ -48,19 +58,23 @@ │ ├── end_keyword_loc: (3,17)-(3,20) = "end" │ └── name: :A ├── @ ClassNode (location: (5,0)-(5,34)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (5,0)-(5,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (5,6)-(5,7)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── inheritance_operator_loc: ∅ │ ├── superclass: ∅ │ ├── body: │ │ @ BeginNode (location: (5,0)-(5,34)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (5,9)-(5,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (5,9)-(5,15) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ @@ -69,11 +83,13 @@ │ │ │ └── consequent: ∅ │ │ ├── else_clause: │ │ │ @ ElseNode (location: (5,17)-(5,29)) + │ │ │ ├── flags: ∅ │ │ │ ├── else_keyword_loc: (5,17)-(5,21) = "else" │ │ │ ├── statements: ∅ │ │ │ └── end_keyword_loc: (5,23)-(5,29) = "ensure" │ │ ├── ensure_clause: │ │ │ @ EnsureNode (location: (5,23)-(5,34)) + │ │ │ ├── flags: ∅ │ │ │ ├── ensure_keyword_loc: (5,23)-(5,29) = "ensure" │ │ │ ├── statements: ∅ │ │ │ └── end_keyword_loc: (5,31)-(5,34) = "end" @@ -81,30 +97,36 @@ │ ├── end_keyword_loc: (5,31)-(5,34) = "end" │ └── name: :A ├── @ ClassNode (location: (7,0)-(9,3)) + │ ├── flags: newline │ ├── locals: [:a] │ ├── class_keyword_loc: (7,0)-(7,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (7,6)-(7,7)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── inheritance_operator_loc: (7,8)-(7,9) = "<" │ ├── superclass: │ │ @ ConstantReadNode (location: (7,10)-(7,11)) + │ │ ├── flags: ∅ │ │ └── name: :B │ ├── body: │ │ @ StatementsNode (location: (8,0)-(8,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableWriteNode (location: (8,0)-(8,5)) + │ │ ├── flags: newline │ │ ├── name: :a │ │ ├── depth: 0 │ │ ├── name_loc: (8,0)-(8,1) = "a" │ │ ├── value: │ │ │ @ IntegerNode (location: (8,4)-(8,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── operator_loc: (8,2)-(8,3) = "=" │ ├── end_keyword_loc: (9,0)-(9,3) = "end" │ └── name: :A ├── @ SingletonClassNode (location: (11,0)-(12,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (11,0)-(11,5) = "class" │ ├── operator_loc: (11,6)-(11,8) = "<<" @@ -132,30 +154,37 @@ │ ├── body: ∅ │ └── end_keyword_loc: (12,0)-(12,3) = "end" ├── @ ClassNode (location: (14,0)-(14,40)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (14,0)-(14,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (14,6)-(14,7)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── inheritance_operator_loc: ∅ │ ├── superclass: ∅ │ ├── body: │ │ @ StatementsNode (location: (14,9)-(14,35)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SingletonClassNode (location: (14,9)-(14,35)) + │ │ ├── flags: newline │ │ ├── locals: [] │ │ ├── class_keyword_loc: (14,9)-(14,14) = "class" │ │ ├── operator_loc: (14,15)-(14,17) = "<<" │ │ ├── expression: │ │ │ @ SelfNode (location: (14,18)-(14,22)) + │ │ │ └── flags: ∅ │ │ ├── body: │ │ │ @ BeginNode (location: (14,9)-(14,35)) + │ │ │ ├── flags: ∅ │ │ │ ├── begin_keyword_loc: ∅ │ │ │ ├── statements: ∅ │ │ │ ├── rescue_clause: ∅ │ │ │ ├── else_clause: ∅ │ │ │ ├── ensure_clause: │ │ │ │ @ EnsureNode (location: (14,24)-(14,35)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── ensure_keyword_loc: (14,24)-(14,30) = "ensure" │ │ │ │ ├── statements: ∅ │ │ │ │ └── end_keyword_loc: (14,32)-(14,35) = "end" @@ -164,28 +193,35 @@ │ ├── end_keyword_loc: (14,37)-(14,40) = "end" │ └── name: :A ├── @ ClassNode (location: (16,0)-(16,54)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (16,0)-(16,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (16,6)-(16,7)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── inheritance_operator_loc: ∅ │ ├── superclass: ∅ │ ├── body: │ │ @ StatementsNode (location: (16,9)-(16,49)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SingletonClassNode (location: (16,9)-(16,49)) + │ │ ├── flags: newline │ │ ├── locals: [] │ │ ├── class_keyword_loc: (16,9)-(16,14) = "class" │ │ ├── operator_loc: (16,15)-(16,17) = "<<" │ │ ├── expression: │ │ │ @ SelfNode (location: (16,18)-(16,22)) + │ │ │ └── flags: ∅ │ │ ├── body: │ │ │ @ BeginNode (location: (16,9)-(16,49)) + │ │ │ ├── flags: ∅ │ │ │ ├── begin_keyword_loc: ∅ │ │ │ ├── statements: ∅ │ │ │ ├── rescue_clause: │ │ │ │ @ RescueNode (location: (16,24)-(16,30)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── keyword_loc: (16,24)-(16,30) = "rescue" │ │ │ │ ├── exceptions: (length: 0) │ │ │ │ ├── operator_loc: ∅ @@ -194,11 +230,13 @@ │ │ │ │ └── consequent: ∅ │ │ │ ├── else_clause: │ │ │ │ @ ElseNode (location: (16,32)-(16,44)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── else_keyword_loc: (16,32)-(16,36) = "else" │ │ │ │ ├── statements: ∅ │ │ │ │ └── end_keyword_loc: (16,38)-(16,44) = "ensure" │ │ │ ├── ensure_clause: │ │ │ │ @ EnsureNode (location: (16,38)-(16,49)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── ensure_keyword_loc: (16,38)-(16,44) = "ensure" │ │ │ │ ├── statements: ∅ │ │ │ │ └── end_keyword_loc: (16,46)-(16,49) = "end" @@ -207,6 +245,7 @@ │ ├── end_keyword_loc: (16,51)-(16,54) = "end" │ └── name: :A ├── @ SingletonClassNode (location: (18,0)-(19,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (18,0)-(18,5) = "class" │ ├── operator_loc: (18,6)-(18,8) = "<<" @@ -234,6 +273,7 @@ │ ├── body: ∅ │ └── end_keyword_loc: (19,0)-(19,3) = "end" ├── @ SingletonClassNode (location: (21,0)-(21,20)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (21,0)-(21,5) = "class" │ ├── operator_loc: (21,6)-(21,8) = "<<" @@ -261,35 +301,42 @@ │ ├── body: ∅ │ └── end_keyword_loc: (21,17)-(21,20) = "end" ├── @ SingletonClassNode (location: (23,0)-(24,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (23,0)-(23,5) = "class" │ ├── operator_loc: (23,6)-(23,8) = "<<" │ ├── expression: │ │ @ SelfNode (location: (23,9)-(23,13)) + │ │ └── flags: ∅ │ ├── body: ∅ │ └── end_keyword_loc: (24,0)-(24,3) = "end" ├── @ SingletonClassNode (location: (26,0)-(26,17)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (26,0)-(26,5) = "class" │ ├── operator_loc: (26,6)-(26,8) = "<<" │ ├── expression: │ │ @ SelfNode (location: (26,9)-(26,13)) + │ │ └── flags: ∅ │ ├── body: ∅ │ └── end_keyword_loc: (26,14)-(26,17) = "end" ├── @ SingletonClassNode (location: (28,0)-(30,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (28,0)-(28,5) = "class" │ ├── operator_loc: (28,6)-(28,8) = "<<" │ ├── expression: │ │ @ SelfNode (location: (28,9)-(28,13)) + │ │ └── flags: ∅ │ ├── body: │ │ @ StatementsNode (location: (29,0)-(29,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (29,0)-(29,5)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ IntegerNode (location: (29,0)-(29,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── call_operator_loc: ∅ │ │ ├── name: :+ @@ -300,25 +347,28 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (29,4)-(29,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ └── end_keyword_loc: (30,0)-(30,3) = "end" ├── @ SingletonClassNode (location: (32,0)-(32,23)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (32,0)-(32,5) = "class" │ ├── operator_loc: (32,6)-(32,8) = "<<" │ ├── expression: │ │ @ SelfNode (location: (32,9)-(32,13)) + │ │ └── flags: ∅ │ ├── body: │ │ @ StatementsNode (location: (32,14)-(32,19)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (32,14)-(32,19)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ IntegerNode (location: (32,14)-(32,15)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── call_operator_loc: ∅ │ │ ├── name: :+ @@ -329,16 +379,18 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (32,18)-(32,19)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ └── end_keyword_loc: (32,20)-(32,23) = "end" └── @ ClassNode (location: (34,0)-(35,3)) + ├── flags: newline ├── locals: [] ├── class_keyword_loc: (34,0)-(34,5) = "class" ├── constant_path: │ @ ConstantReadNode (location: (34,6)-(34,7)) + │ ├── flags: ∅ │ └── name: :A ├── inheritance_operator_loc: (34,8)-(34,9) = "<" ├── superclass: @@ -346,6 +398,7 @@ │ ├── flags: ∅ │ ├── receiver: │ │ @ ConstantReadNode (location: (34,10)-(34,11)) + │ │ ├── flags: ∅ │ │ └── name: :B │ ├── call_operator_loc: ∅ │ ├── name: :[] @@ -356,7 +409,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (34,12)-(34,13)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── closing_loc: (34,13)-(34,14) = "]" │ └── block: ∅ diff --git a/test/prism/snapshots/command_method_call.txt b/test/prism/snapshots/command_method_call.txt index 7fd6341304c..2c0f44e52b4 100644 --- a/test/prism/snapshots/command_method_call.txt +++ b/test/prism/snapshots/command_method_call.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(41,10)) +├── flags: ∅ ├── locals: [:foo, :bar] └── statements: @ StatementsNode (location: (1,0)-(41,10)) + ├── flags: ∅ └── body: (length: 21) ├── @ CallNode (location: (1,0)-(1,5)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -15,12 +17,12 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (3,0)-(3,9)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -42,13 +44,14 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (3,8)-(3,9)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ IfNode (location: (5,0)-(5,14)) + │ ├── flags: newline │ ├── if_keyword_loc: (5,6)-(5,8) = "if" │ ├── predicate: │ │ @ CallNode (location: (5,9)-(5,14)) @@ -63,16 +66,17 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (5,13)-(5,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (5,0)-(5,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (5,0)-(5,5)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo @@ -83,13 +87,14 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (5,4)-(5,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── consequent: ∅ │ └── end_keyword_loc: ∅ ├── @ UnlessNode (location: (7,0)-(7,18)) + │ ├── flags: newline │ ├── keyword_loc: (7,6)-(7,12) = "unless" │ ├── predicate: │ │ @ CallNode (location: (7,13)-(7,18)) @@ -104,16 +109,17 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (7,17)-(7,18)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (7,0)-(7,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (7,0)-(7,5)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo @@ -124,14 +130,14 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (7,4)-(7,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── consequent: ∅ │ └── end_keyword_loc: ∅ ├── @ WhileNode (location: (9,0)-(9,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (9,6)-(9,11) = "while" │ ├── closing_loc: ∅ │ ├── predicate: @@ -147,15 +153,16 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (9,16)-(9,17)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ └── statements: │ @ StatementsNode (location: (9,0)-(9,5)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (9,0)-(9,5)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -166,12 +173,12 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (9,4)-(9,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ UntilNode (location: (11,0)-(11,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (11,6)-(11,11) = "until" │ ├── closing_loc: ∅ │ ├── predicate: @@ -187,15 +194,16 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (11,16)-(11,17)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ └── statements: │ @ StatementsNode (location: (11,0)-(11,5)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (11,0)-(11,5)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -206,11 +214,12 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (11,4)-(11,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ RescueModifierNode (location: (13,0)-(13,18)) + │ ├── flags: newline │ ├── expression: │ │ @ CallNode (location: (13,0)-(13,5)) │ │ ├── flags: ignore_visibility @@ -224,7 +233,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (13,4)-(13,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ @@ -242,12 +251,12 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (13,17)-(13,18)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (15,0)-(15,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (15,0)-(15,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -279,13 +288,14 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (15,8)-(15,9)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── closing_loc: (15,9)-(15,10) = "]" │ └── block: ∅ ├── @ AndNode (location: (17,0)-(17,15)) + │ ├── flags: newline │ ├── left: │ │ @ CallNode (location: (17,0)-(17,5)) │ │ ├── flags: ignore_visibility @@ -299,7 +309,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (17,4)-(17,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ @@ -316,12 +326,13 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (17,14)-(17,15)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ └── operator_loc: (17,6)-(17,9) = "and" ├── @ OrNode (location: (19,0)-(19,14)) + │ ├── flags: newline │ ├── left: │ │ @ CallNode (location: (19,0)-(19,5)) │ │ ├── flags: ignore_visibility @@ -335,7 +346,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (19,4)-(19,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ @@ -352,13 +363,13 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (19,13)-(19,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ └── operator_loc: (19,6)-(19,8) = "or" ├── @ CallNode (location: (21,0)-(21,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (21,4)-(21,9)) │ │ ├── flags: ignore_visibility @@ -372,7 +383,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (21,8)-(21,9)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ @@ -384,11 +395,13 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ LocalVariableWriteNode (location: (23,0)-(23,17)) + │ ├── flags: newline │ ├── name: :foo │ ├── depth: 0 │ ├── name_loc: (23,0)-(23,3) = "foo" │ ├── value: │ │ @ LocalVariableWriteNode (location: (23,6)-(23,17)) + │ │ ├── flags: ∅ │ │ ├── name: :bar │ │ ├── depth: 0 │ │ ├── name_loc: (23,6)-(23,9) = "bar" @@ -405,22 +418,24 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ IntegerNode (location: (23,16)-(23,17)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── operator_loc: (23,10)-(23,11) = "=" │ └── operator_loc: (23,4)-(23,5) = "=" ├── @ DefNode (location: (25,0)-(25,15)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (25,4)-(25,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (25,10)-(25,15)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (25,10)-(25,15)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -431,7 +446,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (25,14)-(25,15)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ @@ -443,10 +458,10 @@ │ ├── equal_loc: (25,8)-(25,9) = "=" │ └── end_keyword_loc: ∅ ├── @ CallNode (location: (27,0)-(27,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (27,0)-(27,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: (27,1)-(27,2) = "." │ ├── name: :foo @@ -457,18 +472,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (27,6)-(27,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (29,0)-(29,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (29,0)-(29,5)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ IntegerNode (location: (29,0)-(29,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── call_operator_loc: (29,1)-(29,2) = "." │ │ ├── name: :foo @@ -486,12 +501,12 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (29,10)-(29,11)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (31,0)-(31,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (31,0)-(31,8)) │ │ ├── flags: ∅ @@ -500,7 +515,7 @@ │ │ │ ├── flags: ∅ │ │ │ ├── receiver: │ │ │ │ @ IntegerNode (location: (31,0)-(31,1)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── call_operator_loc: (31,1)-(31,2) = "." │ │ │ ├── name: :foo @@ -518,7 +533,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (31,6)-(31,7)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: (31,7)-(31,8) = "]" │ │ └── block: ∅ @@ -531,18 +546,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (31,13)-(31,14)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (33,0)-(33,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (33,0)-(33,8)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ IntegerNode (location: (33,0)-(33,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── call_operator_loc: (33,1)-(33,2) = "." │ │ ├── name: :foo @@ -553,7 +568,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (33,6)-(33,7)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: (33,7)-(33,8) = ")" │ │ └── block: ∅ @@ -566,18 +581,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (33,13)-(33,14)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (35,0)-(35,15)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (35,0)-(35,9)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ IntegerNode (location: (35,0)-(35,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── call_operator_loc: (35,1)-(35,2) = "." │ │ ├── name: :foo @@ -587,9 +602,10 @@ │ │ ├── closing_loc: (35,8)-(35,9) = ")" │ │ └── block: │ │ @ BlockArgumentNode (location: (35,6)-(35,8)) + │ │ ├── flags: ∅ │ │ ├── expression: │ │ │ @ IntegerNode (location: (35,7)-(35,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: (35,6)-(35,7) = "&" │ ├── call_operator_loc: (35,9)-(35,10) = "." @@ -601,11 +617,12 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (35,14)-(35,15)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ AndNode (location: (37,0)-(37,17)) + │ ├── flags: newline │ ├── left: │ │ @ CallNode (location: (37,0)-(37,6)) │ │ ├── flags: ∅ @@ -622,7 +639,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ IntegerNode (location: (37,5)-(37,6)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ @@ -649,7 +666,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ IntegerNode (location: (37,16)-(37,17)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ @@ -662,6 +679,7 @@ │ │ └── block: ∅ │ └── operator_loc: (37,7)-(37,10) = "and" ├── @ OrNode (location: (39,0)-(39,16)) + │ ├── flags: newline │ ├── left: │ │ @ CallNode (location: (39,0)-(39,6)) │ │ ├── flags: ∅ @@ -678,7 +696,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ IntegerNode (location: (39,5)-(39,6)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ @@ -705,7 +723,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ IntegerNode (location: (39,15)-(39,16)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ @@ -718,7 +736,7 @@ │ │ └── block: ∅ │ └── operator_loc: (39,7)-(39,9) = "or" └── @ CallNode (location: (41,0)-(41,10)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (41,4)-(41,10)) │ ├── flags: ∅ @@ -735,7 +753,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (41,9)-(41,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ diff --git a/test/prism/snapshots/comments.txt b/test/prism/snapshots/comments.txt index b7088adcd50..66869bc2a99 100644 --- a/test/prism/snapshots/comments.txt +++ b/test/prism/snapshots/comments.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(24,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(24,5)) + ├── flags: ∅ └── body: (length: 9) ├── @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a @@ -14,7 +16,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (3,0)-(3,1)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :b @@ -24,7 +26,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (5,0)-(5,1)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :c @@ -34,7 +36,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (6,0)-(6,1)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :d @@ -44,7 +46,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (8,0)-(10,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (8,0)-(8,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -64,7 +66,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (12,0)-(14,2)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (12,0)-(12,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -84,7 +86,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (16,0)-(17,2)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (16,0)-(16,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -104,7 +106,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (19,0)-(20,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (19,0)-(19,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -124,7 +126,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ CallNode (location: (22,0)-(24,5)) - ├── flags: safe_navigation + ├── flags: newline, safe_navigation ├── receiver: │ @ CallNode (location: (22,0)-(22,1)) │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/constants.txt b/test/prism/snapshots/constants.txt index 12518336634..3246ff80c33 100644 --- a/test/prism/snapshots/constants.txt +++ b/test/prism/snapshots/constants.txt @@ -1,20 +1,27 @@ @ ProgramNode (location: (1,0)-(184,10)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(184,10)) + ├── flags: ∅ └── body: (length: 90) ├── @ ConstantPathNode (location: (1,0)-(1,4)) + │ ├── flags: newline │ ├── parent: │ │ @ ConstantReadNode (location: (1,0)-(1,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── name: :B │ ├── delimiter_loc: (1,1)-(1,3) = "::" │ └── name_loc: (1,3)-(1,4) = "B" ├── @ ConstantPathNode (location: (3,0)-(3,7)) + │ ├── flags: newline │ ├── parent: │ │ @ ConstantPathNode (location: (3,0)-(3,4)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantReadNode (location: (3,0)-(3,1)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── name: :B │ │ ├── delimiter_loc: (3,1)-(3,3) = "::" @@ -23,6 +30,7 @@ │ ├── delimiter_loc: (3,4)-(3,6) = "::" │ └── name_loc: (3,6)-(3,7) = "C" ├── @ ConstantPathNode (location: (5,0)-(5,4)) + │ ├── flags: newline │ ├── parent: │ │ @ CallNode (location: (5,0)-(5,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -38,10 +46,13 @@ │ ├── delimiter_loc: (5,1)-(5,3) = "::" │ └── name_loc: (5,3)-(5,4) = "B" ├── @ ConstantPathWriteNode (location: (7,0)-(7,8)) + │ ├── flags: newline │ ├── target: │ │ @ ConstantPathNode (location: (7,0)-(7,4)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantReadNode (location: (7,0)-(7,1)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── name: :B │ │ ├── delimiter_loc: (7,1)-(7,3) = "::" @@ -49,20 +60,22 @@ │ ├── operator_loc: (7,5)-(7,6) = "=" │ └── value: │ @ IntegerNode (location: (7,7)-(7,8)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ ConstantWriteNode (location: (9,0)-(9,5)) + │ ├── flags: newline │ ├── name: :A │ ├── name_loc: (9,0)-(9,1) = "A" │ ├── value: │ │ @ IntegerNode (location: (9,4)-(9,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (9,2)-(9,3) = "=" ├── @ ConstantReadNode (location: (11,0)-(11,3)) + │ ├── flags: newline │ └── name: :ABC ├── @ CallNode (location: (13,0)-(13,5)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :Foo @@ -73,12 +86,12 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (13,4)-(13,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (15,0)-(15,8)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :Foo @@ -89,6 +102,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (15,4)-(15,8)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (15,4)-(15,5) = "*" │ │ └── expression: │ │ @ CallNode (location: (15,5)-(15,8)) @@ -104,7 +118,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (17,0)-(17,9)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :Foo @@ -118,6 +132,7 @@ │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocSplatNode (location: (17,4)-(17,9)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (17,6)-(17,9)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -133,7 +148,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (19,0)-(19,8)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :Foo @@ -143,6 +158,7 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockArgumentNode (location: (19,4)-(19,8)) + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (19,5)-(19,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -156,9 +172,10 @@ │ │ └── block: ∅ │ └── operator_loc: (19,4)-(19,5) = "&" ├── @ CallNode (location: (21,0)-(21,13)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (21,0)-(21,3)) + │ │ ├── flags: ∅ │ │ └── name: :Foo │ ├── call_operator_loc: (21,3)-(21,5) = "::" │ ├── name: :Bar @@ -169,6 +186,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (21,9)-(21,13)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (21,9)-(21,10) = "*" │ │ └── expression: │ │ @ CallNode (location: (21,10)-(21,13)) @@ -184,9 +202,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (23,0)-(23,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (23,0)-(23,3)) + │ │ ├── flags: ∅ │ │ └── name: :Foo │ ├── call_operator_loc: (23,3)-(23,5) = "::" │ ├── name: :Bar @@ -200,6 +219,7 @@ │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocSplatNode (location: (23,9)-(23,14)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (23,11)-(23,14)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -215,9 +235,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (25,0)-(25,13)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (25,0)-(25,3)) + │ │ ├── flags: ∅ │ │ └── name: :Foo │ ├── call_operator_loc: (25,3)-(25,5) = "::" │ ├── name: :Bar @@ -227,6 +248,7 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockArgumentNode (location: (25,9)-(25,13)) + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (25,10)-(25,13)) │ │ ├── flags: variable_call, ignore_visibility @@ -240,9 +262,10 @@ │ │ └── block: ∅ │ └── operator_loc: (25,9)-(25,10) = "&" ├── @ CallNode (location: (27,0)-(27,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantPathNode (location: (27,0)-(27,3)) + │ │ ├── flags: ∅ │ │ ├── parent: ∅ │ │ ├── name: :A │ │ ├── delimiter_loc: (27,0)-(27,2) = "::" @@ -255,8 +278,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ ConstantPathWriteNode (location: (29,0)-(29,7)) + │ ├── flags: newline │ ├── target: │ │ @ ConstantPathNode (location: (29,0)-(29,3)) + │ │ ├── flags: ∅ │ │ ├── parent: ∅ │ │ ├── name: :A │ │ ├── delimiter_loc: (29,0)-(29,2) = "::" @@ -264,13 +289,16 @@ │ ├── operator_loc: (29,4)-(29,5) = "=" │ └── value: │ @ IntegerNode (location: (29,6)-(29,7)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ ConstantPathWriteNode (location: (31,0)-(31,10)) + │ ├── flags: newline │ ├── target: │ │ @ ConstantPathNode (location: (31,0)-(31,6)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantPathNode (location: (31,0)-(31,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── parent: ∅ │ │ │ ├── name: :A │ │ │ ├── delimiter_loc: (31,0)-(31,2) = "::" @@ -281,11 +309,13 @@ │ ├── operator_loc: (31,7)-(31,8) = "=" │ └── value: │ @ IntegerNode (location: (31,9)-(31,10)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ ConstantPathNode (location: (33,0)-(33,6)) + │ ├── flags: newline │ ├── parent: │ │ @ ConstantPathNode (location: (33,0)-(33,3)) + │ │ ├── flags: ∅ │ │ ├── parent: ∅ │ │ ├── name: :A │ │ ├── delimiter_loc: (33,0)-(33,2) = "::" @@ -294,14 +324,16 @@ │ ├── delimiter_loc: (33,3)-(33,5) = "::" │ └── name_loc: (33,5)-(33,6) = "B" ├── @ ConstantPathNode (location: (35,0)-(35,3)) + │ ├── flags: newline │ ├── parent: ∅ │ ├── name: :A │ ├── delimiter_loc: (35,0)-(35,2) = "::" │ └── name_loc: (35,2)-(35,3) = "A" ├── @ CallNode (location: (37,0)-(37,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (37,0)-(37,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (37,1)-(37,3) = "::" │ ├── name: :false @@ -311,11 +343,13 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (39,0)-(39,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantPathNode (location: (39,0)-(39,4)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantReadNode (location: (39,0)-(39,1)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── name: :B │ │ ├── delimiter_loc: (39,1)-(39,3) = "::" @@ -328,9 +362,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (41,0)-(41,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (41,0)-(41,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (41,1)-(41,3) = "::" │ ├── name: :& @@ -340,9 +375,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (43,0)-(43,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (43,0)-(43,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (43,1)-(43,3) = "::" │ ├── name: :` @@ -352,9 +388,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (45,0)-(45,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (45,0)-(45,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (45,1)-(45,3) = "::" │ ├── name: :! @@ -364,9 +401,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (47,0)-(47,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (47,0)-(47,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (47,1)-(47,3) = "::" │ ├── name: :!= @@ -376,9 +414,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (49,0)-(49,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (49,0)-(49,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (49,1)-(49,3) = "::" │ ├── name: :^ @@ -388,9 +427,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (51,0)-(51,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (51,0)-(51,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (51,1)-(51,3) = "::" │ ├── name: :== @@ -400,9 +440,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (53,0)-(53,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (53,0)-(53,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (53,1)-(53,3) = "::" │ ├── name: :=== @@ -412,9 +453,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (55,0)-(55,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (55,0)-(55,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (55,1)-(55,3) = "::" │ ├── name: :=~ @@ -424,9 +466,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (57,0)-(57,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (57,0)-(57,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (57,1)-(57,3) = "::" │ ├── name: :> @@ -436,9 +479,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (59,0)-(59,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (59,0)-(59,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (59,1)-(59,3) = "::" │ ├── name: :>= @@ -448,9 +492,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (61,0)-(61,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (61,0)-(61,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (61,1)-(61,3) = "::" │ ├── name: :>> @@ -460,9 +505,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (63,0)-(63,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (63,0)-(63,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (63,1)-(63,3) = "::" │ ├── name: :<< @@ -472,16 +518,19 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ ConstantPathNode (location: (65,0)-(67,1)) + │ ├── flags: newline │ ├── parent: │ │ @ ConstantReadNode (location: (65,0)-(65,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── name: :C │ ├── delimiter_loc: (65,1)-(65,3) = "::" │ └── name_loc: (67,0)-(67,1) = "C" ├── @ CallNode (location: (69,0)-(69,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (69,0)-(69,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (69,1)-(69,3) = "::" │ ├── name: :alias @@ -491,9 +540,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (71,0)-(71,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (71,0)-(71,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (71,1)-(71,3) = "::" │ ├── name: :and @@ -503,9 +553,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (73,0)-(73,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (73,0)-(73,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (73,1)-(73,3) = "::" │ ├── name: :begin @@ -515,16 +566,19 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ ConstantPathNode (location: (75,0)-(75,8)) + │ ├── flags: newline │ ├── parent: │ │ @ ConstantReadNode (location: (75,0)-(75,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── name: :BEGIN │ ├── delimiter_loc: (75,1)-(75,3) = "::" │ └── name_loc: (75,3)-(75,8) = "BEGIN" ├── @ CallNode (location: (77,0)-(77,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (77,0)-(77,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (77,1)-(77,3) = "::" │ ├── name: :break @@ -534,9 +588,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (79,0)-(79,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (79,0)-(79,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (79,1)-(79,3) = "::" │ ├── name: :class @@ -546,9 +601,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (81,0)-(81,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (81,0)-(81,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (81,1)-(81,3) = "::" │ ├── name: :def @@ -558,9 +614,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (83,0)-(83,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (83,0)-(83,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (83,1)-(83,3) = "::" │ ├── name: :defined @@ -570,9 +627,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (85,0)-(85,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (85,0)-(85,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (85,1)-(85,3) = "::" │ ├── name: :do @@ -582,9 +640,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (87,0)-(87,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (87,0)-(87,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (87,1)-(87,3) = "::" │ ├── name: :else @@ -594,9 +653,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (89,0)-(89,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (89,0)-(89,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (89,1)-(89,3) = "::" │ ├── name: :elsif @@ -606,9 +666,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (91,0)-(91,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (91,0)-(91,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (91,1)-(91,3) = "::" │ ├── name: :end @@ -618,16 +679,19 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ ConstantPathNode (location: (93,0)-(93,6)) + │ ├── flags: newline │ ├── parent: │ │ @ ConstantReadNode (location: (93,0)-(93,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── name: :END │ ├── delimiter_loc: (93,1)-(93,3) = "::" │ └── name_loc: (93,3)-(93,6) = "END" ├── @ CallNode (location: (95,0)-(95,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (95,0)-(95,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (95,1)-(95,3) = "::" │ ├── name: :ensure @@ -637,9 +701,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (97,0)-(97,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (97,0)-(97,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (97,1)-(97,3) = "::" │ ├── name: :false @@ -649,9 +714,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (99,0)-(99,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (99,0)-(99,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (99,1)-(99,3) = "::" │ ├── name: :for @@ -661,9 +727,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (101,0)-(101,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (101,0)-(101,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (101,1)-(101,3) = "::" │ ├── name: :if @@ -673,9 +740,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (103,0)-(103,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (103,0)-(103,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (103,1)-(103,3) = "::" │ ├── name: :in @@ -685,9 +753,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (105,0)-(105,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (105,0)-(105,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (105,1)-(105,3) = "::" │ ├── name: :next @@ -697,9 +766,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (107,0)-(107,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (107,0)-(107,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (107,1)-(107,3) = "::" │ ├── name: :nil @@ -709,9 +779,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (109,0)-(109,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (109,0)-(109,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (109,1)-(109,3) = "::" │ ├── name: :not @@ -721,9 +792,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (111,0)-(111,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (111,0)-(111,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (111,1)-(111,3) = "::" │ ├── name: :or @@ -733,9 +805,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (113,0)-(113,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (113,0)-(113,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (113,1)-(113,3) = "::" │ ├── name: :redo @@ -745,9 +818,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (115,0)-(115,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (115,0)-(115,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (115,1)-(115,3) = "::" │ ├── name: :rescue @@ -757,9 +831,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (117,0)-(117,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (117,0)-(117,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (117,1)-(117,3) = "::" │ ├── name: :retry @@ -769,9 +844,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (119,0)-(119,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (119,0)-(119,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (119,1)-(119,3) = "::" │ ├── name: :return @@ -781,9 +857,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (121,0)-(121,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (121,0)-(121,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (121,1)-(121,3) = "::" │ ├── name: :self @@ -793,9 +870,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (123,0)-(123,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (123,0)-(123,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (123,1)-(123,3) = "::" │ ├── name: :super @@ -805,9 +883,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (125,0)-(125,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (125,0)-(125,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (125,1)-(125,3) = "::" │ ├── name: :then @@ -817,9 +896,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (127,0)-(127,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (127,0)-(127,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (127,1)-(127,3) = "::" │ ├── name: :true @@ -829,9 +909,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (129,0)-(129,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (129,0)-(129,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (129,1)-(129,3) = "::" │ ├── name: :undef @@ -841,9 +922,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (131,0)-(131,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (131,0)-(131,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (131,1)-(131,3) = "::" │ ├── name: :unless @@ -853,9 +935,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (133,0)-(133,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (133,0)-(133,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (133,1)-(133,3) = "::" │ ├── name: :until @@ -865,9 +948,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (135,0)-(135,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (135,0)-(135,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (135,1)-(135,3) = "::" │ ├── name: :when @@ -877,9 +961,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (137,0)-(137,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (137,0)-(137,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (137,1)-(137,3) = "::" │ ├── name: :while @@ -889,9 +974,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (139,0)-(139,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (139,0)-(139,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (139,1)-(139,3) = "::" │ ├── name: :yield @@ -901,9 +987,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (141,0)-(141,15)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (141,0)-(141,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (141,1)-(141,3) = "::" │ ├── name: :__ENCODING__ @@ -913,9 +1000,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (143,0)-(143,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (143,0)-(143,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (143,1)-(143,3) = "::" │ ├── name: :__FILE__ @@ -925,9 +1013,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (145,0)-(145,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (145,0)-(145,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (145,1)-(145,3) = "::" │ ├── name: :__LINE__ @@ -937,9 +1026,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (147,0)-(147,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (147,0)-(147,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (147,1)-(147,3) = "::" │ ├── name: :< @@ -949,9 +1039,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (149,0)-(149,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (149,0)-(149,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (149,1)-(149,3) = "::" │ ├── name: :<=> @@ -961,9 +1052,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (151,0)-(151,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (151,0)-(151,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (151,1)-(151,3) = "::" │ ├── name: :<< @@ -973,9 +1065,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (153,0)-(153,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (153,0)-(153,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (153,1)-(153,3) = "::" │ ├── name: :- @@ -985,9 +1078,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (155,0)-(155,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (155,0)-(155,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (155,1)-(155,3) = "::" │ ├── name: :% @@ -997,9 +1091,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (157,0)-(157,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (157,0)-(157,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (157,1)-(157,3) = "::" │ ├── name: :% @@ -1022,9 +1117,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (159,0)-(159,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (159,0)-(159,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (159,1)-(159,3) = "::" │ ├── name: :% @@ -1047,9 +1143,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (161,0)-(161,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (161,0)-(161,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (161,1)-(161,3) = "::" │ ├── name: :% @@ -1072,9 +1169,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (163,0)-(163,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (163,0)-(163,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (163,1)-(163,3) = "::" │ ├── name: :% @@ -1085,13 +1183,15 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ConstantReadNode (location: (163,4)-(163,5)) + │ │ ├── flags: ∅ │ │ └── name: :I │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (165,0)-(165,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (165,0)-(165,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (165,1)-(165,3) = "::" │ ├── name: :% @@ -1102,13 +1202,15 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ConstantReadNode (location: (165,4)-(165,5)) + │ │ ├── flags: ∅ │ │ └── name: :W │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (167,0)-(167,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (167,0)-(167,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (167,1)-(167,3) = "::" │ ├── name: :| @@ -1118,9 +1220,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (169,0)-(169,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (169,0)-(169,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (169,1)-(169,3) = "::" │ ├── name: :+ @@ -1130,9 +1233,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (171,0)-(171,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (171,0)-(171,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (171,1)-(171,3) = "::" │ ├── name: :/ @@ -1142,9 +1246,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (173,0)-(173,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (173,0)-(173,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (173,1)-(173,3) = "::" │ ├── name: :* @@ -1154,9 +1259,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (175,0)-(175,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (175,0)-(175,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (175,1)-(175,3) = "::" │ ├── name: :** @@ -1166,9 +1272,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (177,0)-(177,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (177,0)-(177,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (177,1)-(177,3) = "::" │ ├── name: :~ @@ -1178,11 +1285,13 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ ConstantPathNode (location: (179,0)-(180,1)) + │ ├── flags: newline │ ├── parent: │ │ @ CallNode (location: (179,0)-(179,4)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ ConstantReadNode (location: (179,0)-(179,1)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── call_operator_loc: (179,1)-(179,3) = "::" │ │ ├── name: :_ @@ -1195,12 +1304,13 @@ │ ├── delimiter_loc: (179,4)-(179,6) = "::" │ └── name_loc: (180,0)-(180,1) = "C" └── @ RangeNode (location: (182,0)-(184,10)) - ├── flags: ∅ + ├── flags: newline ├── left: │ @ CallNode (location: (182,0)-(182,4)) │ ├── flags: ∅ │ ├── receiver: │ │ @ ConstantReadNode (location: (182,0)-(182,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (182,1)-(182,3) = "::" │ ├── name: :_ @@ -1214,6 +1324,7 @@ │ ├── flags: ∅ │ ├── receiver: │ │ @ ConstantReadNode (location: (184,0)-(184,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (184,1)-(184,3) = "::" │ ├── name: :__END__ diff --git a/test/prism/snapshots/dash_heredocs.txt b/test/prism/snapshots/dash_heredocs.txt index bd2b05ea0d0..1ca8b4f73dc 100644 --- a/test/prism/snapshots/dash_heredocs.txt +++ b/test/prism/snapshots/dash_heredocs.txt @@ -1,16 +1,18 @@ @ ProgramNode (location: (1,0)-(57,11)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(57,11)) + ├── flags: ∅ └── body: (length: 13) ├── @ StringNode (location: (1,0)-(1,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (1,0)-(1,6) = "<<-EOF" │ ├── content_loc: (2,0)-(3,0) = " a\n" │ ├── closing_loc: (3,0)-(4,0) = "EOF\n" │ └── unescaped: " a\n" ├── @ CallNode (location: (5,0)-(5,20)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ StringNode (location: (5,0)-(5,8)) │ │ ├── flags: ∅ @@ -35,6 +37,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ InterpolatedXStringNode (location: (11,0)-(11,8)) + │ ├── flags: newline │ ├── opening_loc: (11,0)-(11,8) = "<<-`EOF`" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (12,0)-(13,0)) @@ -44,9 +47,11 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: " a\n" │ │ ├── @ EmbeddedStatementsNode (location: (13,0)-(13,4)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (13,0)-(13,2) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (13,2)-(13,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (13,2)-(13,3)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -67,31 +72,33 @@ │ │ └── unescaped: "\n" │ └── closing_loc: (14,0)-(15,0) = "EOF\n" ├── @ StringNode (location: (16,0)-(16,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (16,0)-(16,6) = "<<-EOF" │ ├── content_loc: (17,0)-(18,0) = " a\n" │ ├── closing_loc: (18,0)-(19,0) = "EOF\n" │ └── unescaped: " a\n" ├── @ StringNode (location: (20,0)-(20,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (20,0)-(20,6) = "<<-EOF" │ ├── content_loc: (21,0)-(23,0) = " a\n b\n" │ ├── closing_loc: (23,0)-(24,0) = " EOF\n" │ └── unescaped: " a\n b\n" ├── @ InterpolatedStringNode (location: (25,0)-(25,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (25,0)-(25,8) = "<<-\"EOF\"" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (26,0)-(27,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (26,0)-(27,0) = " a\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: " a\n" │ │ ├── @ EmbeddedStatementsNode (location: (27,0)-(27,4)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (27,0)-(27,2) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (27,2)-(27,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (27,2)-(27,3)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -105,26 +112,28 @@ │ │ │ │ └── block: ∅ │ │ │ └── closing_loc: (27,3)-(27,4) = "}" │ │ └── @ StringNode (location: (27,4)-(28,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (27,4)-(28,0) = "\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "\n" │ └── closing_loc: (28,0)-(29,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (30,0)-(30,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (30,0)-(30,6) = "<<-EOF" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (31,0)-(32,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (31,0)-(32,0) = " a\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: " a\n" │ │ ├── @ EmbeddedStatementsNode (location: (32,0)-(32,4)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (32,0)-(32,2) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (32,2)-(32,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (32,2)-(32,3)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -138,38 +147,38 @@ │ │ │ │ └── block: ∅ │ │ │ └── closing_loc: (32,3)-(32,4) = "}" │ │ └── @ StringNode (location: (32,4)-(33,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (32,4)-(33,0) = "\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "\n" │ └── closing_loc: (33,0)-(34,0) = "EOF\n" ├── @ StringNode (location: (35,0)-(35,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (35,0)-(35,2) = "%#" │ ├── content_loc: (35,2)-(35,5) = "abc" │ ├── closing_loc: (35,5)-(35,6) = "#" │ └── unescaped: "abc" ├── @ StringNode (location: (37,0)-(37,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (37,0)-(37,6) = "<<-EOF" │ ├── content_loc: (38,0)-(40,0) = " a\n b\n" │ ├── closing_loc: (40,0)-(41,0) = "EOF\n" │ └── unescaped: " a\n b\n" ├── @ StringNode (location: (42,0)-(42,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (42,0)-(42,5) = "<<-''" │ ├── content_loc: (43,0)-(43,0) = "" │ ├── closing_loc: (43,0)-(44,0) = "\n" │ └── unescaped: "" ├── @ StringNode (location: (45,0)-(45,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (45,0)-(45,8) = "<<-'EOF'" │ ├── content_loc: (46,0)-(47,0) = " a \#{1}\n" │ ├── closing_loc: (47,0)-(48,0) = "EOF\n" │ └── unescaped: " a \#{1}\n" ├── @ CallNode (location: (49,0)-(49,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ StringNode (location: (49,0)-(49,4)) │ │ ├── flags: ∅ @@ -190,22 +199,24 @@ │ │ ├── opening_loc: (49,7)-(49,11) = "<<-B" │ │ ├── parts: (length: 3) │ │ │ ├── @ StringNode (location: (52,0)-(53,2)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (52,0)-(53,2) = " b\n " │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: " b\n " │ │ │ ├── @ EmbeddedStatementsNode (location: (53,2)-(54,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── opening_loc: (53,2)-(53,4) = "\#{" │ │ │ │ ├── statements: │ │ │ │ │ @ StatementsNode (location: (53,4)-(53,5)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ IntegerNode (location: (53,4)-(53,5)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 2 │ │ │ │ └── closing_loc: (54,2)-(54,3) = "}" │ │ │ └── @ StringNode (location: (54,3)-(55,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (54,3)-(55,0) = "\n" │ │ │ ├── closing_loc: ∅ @@ -214,7 +225,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ CallNode (location: (57,0)-(57,11)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ StringNode (location: (57,0)-(57,4)) │ ├── flags: ∅ @@ -235,22 +246,24 @@ │ ├── opening_loc: (57,7)-(57,11) = "<<-B" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (60,0)-(61,2)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (60,0)-(61,2) = " b\n " │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: " b\n " │ │ ├── @ EmbeddedStatementsNode (location: (61,2)-(62,4)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (61,2)-(61,4) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (62,2)-(62,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (62,2)-(62,3)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── closing_loc: (62,3)-(62,4) = "}" │ │ └── @ StringNode (location: (62,4)-(63,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (62,4)-(63,0) = "\n" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/defined.txt b/test/prism/snapshots/defined.txt index c60173ff371..761c7b2ce79 100644 --- a/test/prism/snapshots/defined.txt +++ b/test/prism/snapshots/defined.txt @@ -1,37 +1,44 @@ @ ProgramNode (location: (1,0)-(10,1)) +├── flags: ∅ ├── locals: [:x] └── statements: @ StatementsNode (location: (1,0)-(10,1)) + ├── flags: ∅ └── body: (length: 5) ├── @ AndNode (location: (1,0)-(1,25)) + │ ├── flags: newline │ ├── left: │ │ @ DefinedNode (location: (1,0)-(1,10)) + │ │ ├── flags: ∅ │ │ ├── lparen_loc: ∅ │ │ ├── value: │ │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rparen_loc: ∅ │ │ └── keyword_loc: (1,0)-(1,8) = "defined?" │ ├── right: │ │ @ DefinedNode (location: (1,15)-(1,25)) + │ │ ├── flags: ∅ │ │ ├── lparen_loc: ∅ │ │ ├── value: │ │ │ @ IntegerNode (location: (1,24)-(1,25)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── rparen_loc: ∅ │ │ └── keyword_loc: (1,15)-(1,23) = "defined?" │ └── operator_loc: (1,11)-(1,14) = "and" ├── @ DefinedNode (location: (3,0)-(3,16)) + │ ├── flags: newline │ ├── lparen_loc: (3,8)-(3,9) = "(" │ ├── value: │ │ @ LocalVariableOperatorWriteNode (location: (3,9)-(3,15)) + │ │ ├── flags: ∅ │ │ ├── name_loc: (3,9)-(3,10) = "x" │ │ ├── binary_operator_loc: (3,11)-(3,13) = "%=" │ │ ├── value: │ │ │ @ IntegerNode (location: (3,14)-(3,15)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── name: :x │ │ ├── binary_operator: :% @@ -39,9 +46,11 @@ │ ├── rparen_loc: (3,15)-(3,16) = ")" │ └── keyword_loc: (3,0)-(3,8) = "defined?" ├── @ DefinedNode (location: (5,0)-(5,21)) + │ ├── flags: newline │ ├── lparen_loc: (5,8)-(5,9) = "(" │ ├── value: │ │ @ AndNode (location: (5,9)-(5,20)) + │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ CallNode (location: (5,9)-(5,12)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -68,14 +77,16 @@ │ ├── rparen_loc: (5,20)-(5,21) = ")" │ └── keyword_loc: (5,0)-(5,8) = "defined?" ├── @ DefinedNode (location: (7,0)-(7,10)) + │ ├── flags: newline │ ├── lparen_loc: ∅ │ ├── value: │ │ @ IntegerNode (location: (7,9)-(7,10)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── rparen_loc: ∅ │ └── keyword_loc: (7,0)-(7,8) = "defined?" └── @ DefinedNode (location: (9,0)-(10,1)) + ├── flags: newline ├── lparen_loc: (9,8)-(9,9) = "(" ├── value: │ @ StringNode (location: (9,9)-(9,14)) diff --git a/test/prism/snapshots/dos_endings.txt b/test/prism/snapshots/dos_endings.txt index 1ae15e1e87c..69d6b7cd7e5 100644 --- a/test/prism/snapshots/dos_endings.txt +++ b/test/prism/snapshots/dos_endings.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(17,20)) +├── flags: ∅ ├── locals: [:x, :a] └── statements: @ StatementsNode (location: (1,0)-(17,20)) + ├── flags: ∅ └── body: (length: 5) ├── @ CallNode (location: (1,0)-(2,12)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :puts @@ -15,17 +17,17 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ InterpolatedStringNode (location: (1,5)-(2,12)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── opening_loc: ∅ │ │ ├── parts: (length: 2) │ │ │ ├── @ StringNode (location: (1,5)-(1,9)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: (1,5)-(1,6) = "\"" │ │ │ │ ├── content_loc: (1,6)-(1,8) = "hi" │ │ │ │ ├── closing_loc: (1,8)-(1,9) = "\"" │ │ │ │ └── unescaped: "hi" │ │ │ └── @ StringNode (location: (2,5)-(2,12)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: (2,5)-(2,6) = "\"" │ │ │ ├── content_loc: (2,6)-(2,11) = "there" │ │ │ ├── closing_loc: (2,11)-(2,12) = "\"" @@ -34,10 +36,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ ArrayNode (location: (4,0)-(5,2)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 1) │ │ └── @ SymbolNode (location: (4,3)-(5,1)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (4,3)-(5,1) = "a\\\r\nb" │ │ ├── closing_loc: ∅ @@ -45,12 +47,13 @@ │ ├── opening_loc: (4,0)-(4,3) = "%I{" │ └── closing_loc: (5,1)-(5,2) = "}" ├── @ StringNode (location: (7,0)-(7,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (7,0)-(7,4) = "<<-E" │ ├── content_loc: (8,0)-(11,0) = " 1 \\\r\n 2\r\n 3\r\n" │ ├── closing_loc: (11,0)-(12,0) = "E\r\n" │ └── unescaped: " 1 2\n 3\n" ├── @ LocalVariableWriteNode (location: (13,0)-(15,0)) + │ ├── flags: newline │ ├── name: :x │ ├── depth: 0 │ ├── name_loc: (13,0)-(13,1) = "x" @@ -63,6 +66,7 @@ │ │ └── unescaped: "" │ └── operator_loc: (13,2)-(13,3) = "=" └── @ LocalVariableWriteNode (location: (17,0)-(17,20)) + ├── flags: newline ├── name: :a ├── depth: 0 ├── name_loc: (17,0)-(17,1) = "a" @@ -82,17 +86,17 @@ │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ InterpolatedStringNode (location: (17,8)-(17,14)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── opening_loc: (17,8)-(17,14) = "<<~EOF" │ │ │ ├── parts: (length: 2) │ │ │ │ ├── @ StringNode (location: (18,0)-(19,0)) - │ │ │ │ │ ├── flags: frozen + │ │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── content_loc: (18,0)-(19,0) = "\r\n" │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── unescaped: "\n" │ │ │ │ └── @ StringNode (location: (19,0)-(20,0)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (19,0)-(20,0) = " baz\r\n" │ │ │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/dstring.txt b/test/prism/snapshots/dstring.txt index 3978a2f0879..b3ece405137 100644 --- a/test/prism/snapshots/dstring.txt +++ b/test/prism/snapshots/dstring.txt @@ -1,28 +1,32 @@ @ ProgramNode (location: (1,0)-(29,1)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(29,1)) + ├── flags: ∅ └── body: (length: 8) ├── @ StringNode (location: (1,0)-(2,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (1,0)-(1,1) = "\"" │ ├── content_loc: (1,1)-(2,5) = "foo\n bar" │ ├── closing_loc: (2,5)-(2,6) = "\"" │ └── unescaped: "foo\n bar" ├── @ InterpolatedStringNode (location: (4,0)-(5,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (4,0)-(4,1) = "\"" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (4,1)-(5,2)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (4,1)-(5,2) = "foo\n " │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "foo\n " │ │ └── @ EmbeddedStatementsNode (location: (5,2)-(5,8)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (5,2)-(5,4) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (5,4)-(5,7)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (5,4)-(5,7)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -37,48 +41,48 @@ │ │ └── closing_loc: (5,7)-(5,8) = "}" │ └── closing_loc: (5,8)-(5,9) = "\"" ├── @ InterpolatedStringNode (location: (7,0)-(9,2)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: ∅ │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (7,0)-(8,2)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: (7,0)-(7,1) = "\"" │ │ │ ├── content_loc: (7,1)-(8,1) = "fo\no" │ │ │ ├── closing_loc: (8,1)-(8,2) = "\"" │ │ │ └── unescaped: "fo\no" │ │ └── @ StringNode (location: (8,3)-(9,2)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: (8,3)-(8,4) = "\"" │ │ ├── content_loc: (8,4)-(9,1) = "ba\nr" │ │ ├── closing_loc: (9,1)-(9,2) = "\"" │ │ └── unescaped: "ba\nr" │ └── closing_loc: ∅ ├── @ StringNode (location: (11,0)-(13,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (11,0)-(11,1) = "\"" │ ├── content_loc: (11,1)-(13,0) = "\nfoo\\\n" │ ├── closing_loc: (13,0)-(13,1) = "\"" │ └── unescaped: "\nfoo" ├── @ StringNode (location: (15,0)-(17,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (15,0)-(15,1) = "\"" │ ├── content_loc: (15,1)-(17,0) = "\nfoo\\\\\n" │ ├── closing_loc: (17,0)-(17,1) = "\"" │ └── unescaped: "\nfoo\\\n" ├── @ StringNode (location: (19,0)-(21,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (19,0)-(19,1) = "\"" │ ├── content_loc: (19,1)-(21,0) = "\nfoo\\\\\\\n" │ ├── closing_loc: (21,0)-(21,1) = "\"" │ └── unescaped: "\nfoo\\" ├── @ StringNode (location: (23,0)-(25,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (23,0)-(23,1) = "\"" │ ├── content_loc: (23,1)-(25,0) = "\nfoo\\\\\\\\\n" │ ├── closing_loc: (25,0)-(25,1) = "\"" │ └── unescaped: "\nfoo\\\\\n" └── @ StringNode (location: (27,0)-(29,1)) - ├── flags: ∅ + ├── flags: newline ├── opening_loc: (27,0)-(27,1) = "\"" ├── content_loc: (27,1)-(29,0) = "\nfoo\\\\\\\\\\\n" ├── closing_loc: (29,0)-(29,1) = "\"" diff --git a/test/prism/snapshots/dsym_str.txt b/test/prism/snapshots/dsym_str.txt index 33a5e2da21c..835cbbdc8a7 100644 --- a/test/prism/snapshots/dsym_str.txt +++ b/test/prism/snapshots/dsym_str.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(2,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(2,6)) + ├── flags: ∅ └── body: (length: 1) └── @ SymbolNode (location: (1,0)-(2,6)) - ├── flags: forced_us_ascii_encoding + ├── flags: newline, static_literal, forced_us_ascii_encoding ├── opening_loc: (1,0)-(1,2) = ":\"" ├── value_loc: (1,2)-(2,5) = "foo\n bar" ├── closing_loc: (2,5)-(2,6) = "\"" diff --git a/test/prism/snapshots/embdoc_no_newline_at_end.txt b/test/prism/snapshots/embdoc_no_newline_at_end.txt index 3a21ce5559c..5756285aaf2 100644 --- a/test/prism/snapshots/embdoc_no_newline_at_end.txt +++ b/test/prism/snapshots/embdoc_no_newline_at_end.txt @@ -1,5 +1,7 @@ @ ProgramNode (location: (1,0)-(1,0)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,0)) + ├── flags: ∅ └── body: (length: 0) diff --git a/test/prism/snapshots/emoji_method_calls.txt b/test/prism/snapshots/emoji_method_calls.txt index 8f71181ac15..f6f1bc4162a 100644 --- a/test/prism/snapshots/emoji_method_calls.txt +++ b/test/prism/snapshots/emoji_method_calls.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,12)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,12)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,12)) - ├── flags: attribute_write + ├── flags: newline, attribute_write ├── receiver: │ @ CallNode (location: (1,0)-(1,3)) │ ├── flags: variable_call, ignore_visibility @@ -25,7 +27,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,11)-(1,12)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/endless_methods.txt b/test/prism/snapshots/endless_methods.txt index 6e20c0deec6..50a0f41a676 100644 --- a/test/prism/snapshots/endless_methods.txt +++ b/test/prism/snapshots/endless_methods.txt @@ -1,18 +1,22 @@ @ ProgramNode (location: (1,0)-(5,22)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(5,22)) + ├── flags: ∅ └── body: (length: 3) ├── @ DefNode (location: (1,0)-(1,11)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (1,4)-(1,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,10)-(1,11)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (1,10)-(1,11)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 │ ├── locals: [] │ ├── def_keyword_loc: (1,0)-(1,3) = "def" @@ -22,15 +26,17 @@ │ ├── equal_loc: (1,8)-(1,9) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (3,0)-(3,14)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (3,4)-(3,7) = "bar" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (3,10)-(3,14)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (3,10)-(3,14)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :A @@ -56,21 +62,23 @@ │ ├── equal_loc: (3,8)-(3,9) = "=" │ └── end_keyword_loc: ∅ └── @ DefNode (location: (5,0)-(5,22)) + ├── flags: newline ├── name: :method ├── name_loc: (5,4)-(5,10) = "method" ├── receiver: ∅ ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (5,13)-(5,22)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (5,13)-(5,22)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (5,13)-(5,18)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ IntegerNode (location: (5,13)-(5,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── call_operator_loc: ∅ │ │ ├── name: :+ @@ -81,7 +89,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (5,17)-(5,18)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ @@ -94,7 +102,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (5,21)-(5,22)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ ├── closing_loc: ∅ │ └── block: ∅ diff --git a/test/prism/snapshots/endless_range_in_conditional.txt b/test/prism/snapshots/endless_range_in_conditional.txt index 1802c4faed6..518e96ed531 100644 --- a/test/prism/snapshots/endless_range_in_conditional.txt +++ b/test/prism/snapshots/endless_range_in_conditional.txt @@ -1,20 +1,23 @@ @ ProgramNode (location: (1,0)-(3,12)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,12)) + ├── flags: ∅ └── body: (length: 3) ├── @ IfNode (location: (1,0)-(1,13)) + │ ├── flags: newline │ ├── if_keyword_loc: (1,0)-(1,2) = "if" │ ├── predicate: │ │ @ FlipFlopNode (location: (1,3)-(1,7)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: │ │ │ @ IntegerNode (location: (1,6)-(1,7)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: (1,4)-(1,6) = ".." │ ├── then_keyword_loc: ∅ @@ -22,14 +25,15 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (1,10)-(1,13) = "end" ├── @ IfNode (location: (2,0)-(2,12)) + │ ├── flags: newline │ ├── if_keyword_loc: (2,0)-(2,2) = "if" │ ├── predicate: │ │ @ FlipFlopNode (location: (2,3)-(2,6)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: ∅ │ │ ├── right: │ │ │ @ IntegerNode (location: (2,5)-(2,6)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── operator_loc: (2,3)-(2,5) = ".." │ ├── then_keyword_loc: ∅ @@ -37,13 +41,14 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (2,9)-(2,12) = "end" └── @ IfNode (location: (3,0)-(3,12)) + ├── flags: newline ├── if_keyword_loc: (3,0)-(3,2) = "if" ├── predicate: │ @ FlipFlopNode (location: (3,3)-(3,6)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── left: │ │ @ IntegerNode (location: (3,3)-(3,4)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── right: ∅ │ └── operator_loc: (3,4)-(3,6) = ".." diff --git a/test/prism/snapshots/for.txt b/test/prism/snapshots/for.txt index cc4bbc1166f..5558209826f 100644 --- a/test/prism/snapshots/for.txt +++ b/test/prism/snapshots/for.txt @@ -1,29 +1,35 @@ @ ProgramNode (location: (1,0)-(19,22)) +├── flags: ∅ ├── locals: [:i, :j, :k] └── statements: @ StatementsNode (location: (1,0)-(19,22)) + ├── flags: ∅ └── body: (length: 6) ├── @ ForNode (location: (1,0)-(3,3)) + │ ├── flags: newline │ ├── index: │ │ @ LocalVariableTargetNode (location: (1,4)-(1,5)) + │ │ ├── flags: ∅ │ │ ├── name: :i │ │ └── depth: 0 │ ├── collection: │ │ @ RangeNode (location: (1,9)-(1,14)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: │ │ │ @ IntegerNode (location: (1,12)-(1,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 10 │ │ └── operator_loc: (1,10)-(1,12) = ".." │ ├── statements: │ │ @ StatementsNode (location: (2,0)-(2,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (2,0)-(2,1)) + │ │ ├── flags: newline │ │ ├── name: :i │ │ └── depth: 0 │ ├── for_keyword_loc: (1,0)-(1,3) = "for" @@ -31,26 +37,30 @@ │ ├── do_keyword_loc: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" ├── @ ForNode (location: (5,0)-(5,22)) + │ ├── flags: newline │ ├── index: │ │ @ LocalVariableTargetNode (location: (5,4)-(5,5)) + │ │ ├── flags: ∅ │ │ ├── name: :i │ │ └── depth: 0 │ ├── collection: │ │ @ RangeNode (location: (5,9)-(5,14)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (5,9)-(5,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: │ │ │ @ IntegerNode (location: (5,12)-(5,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 10 │ │ └── operator_loc: (5,10)-(5,12) = ".." │ ├── statements: │ │ @ StatementsNode (location: (5,16)-(5,17)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (5,16)-(5,17)) + │ │ ├── flags: newline │ │ ├── name: :i │ │ └── depth: 0 │ ├── for_keyword_loc: (5,0)-(5,3) = "for" @@ -58,13 +68,17 @@ │ ├── do_keyword_loc: ∅ │ └── end_keyword_loc: (5,19)-(5,22) = "end" ├── @ ForNode (location: (7,0)-(9,3)) + │ ├── flags: newline │ ├── index: │ │ @ MultiTargetNode (location: (7,4)-(7,7)) + │ │ ├── flags: ∅ │ │ ├── lefts: (length: 2) │ │ │ ├── @ LocalVariableTargetNode (location: (7,4)-(7,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :i │ │ │ │ └── depth: 0 │ │ │ └── @ LocalVariableTargetNode (location: (7,6)-(7,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :j │ │ │ └── depth: 0 │ │ ├── rest: ∅ @@ -73,20 +87,22 @@ │ │ └── rparen_loc: ∅ │ ├── collection: │ │ @ RangeNode (location: (7,11)-(7,16)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (7,11)-(7,12)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: │ │ │ @ IntegerNode (location: (7,14)-(7,16)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 10 │ │ └── operator_loc: (7,12)-(7,14) = ".." │ ├── statements: │ │ @ StatementsNode (location: (8,0)-(8,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (8,0)-(8,1)) + │ │ ├── flags: newline │ │ ├── name: :i │ │ └── depth: 0 │ ├── for_keyword_loc: (7,0)-(7,3) = "for" @@ -94,16 +110,21 @@ │ ├── do_keyword_loc: ∅ │ └── end_keyword_loc: (9,0)-(9,3) = "end" ├── @ ForNode (location: (11,0)-(13,3)) + │ ├── flags: newline │ ├── index: │ │ @ MultiTargetNode (location: (11,4)-(11,9)) + │ │ ├── flags: ∅ │ │ ├── lefts: (length: 3) │ │ │ ├── @ LocalVariableTargetNode (location: (11,4)-(11,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :i │ │ │ │ └── depth: 0 │ │ │ ├── @ LocalVariableTargetNode (location: (11,6)-(11,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :j │ │ │ │ └── depth: 0 │ │ │ └── @ LocalVariableTargetNode (location: (11,8)-(11,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :k │ │ │ └── depth: 0 │ │ ├── rest: ∅ @@ -112,20 +133,22 @@ │ │ └── rparen_loc: ∅ │ ├── collection: │ │ @ RangeNode (location: (11,13)-(11,18)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (11,13)-(11,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: │ │ │ @ IntegerNode (location: (11,16)-(11,18)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 10 │ │ └── operator_loc: (11,14)-(11,16) = ".." │ ├── statements: │ │ @ StatementsNode (location: (12,0)-(12,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (12,0)-(12,1)) + │ │ ├── flags: newline │ │ ├── name: :i │ │ └── depth: 0 │ ├── for_keyword_loc: (11,0)-(11,3) = "for" @@ -133,26 +156,30 @@ │ ├── do_keyword_loc: ∅ │ └── end_keyword_loc: (13,0)-(13,3) = "end" ├── @ ForNode (location: (15,0)-(17,3)) + │ ├── flags: newline │ ├── index: │ │ @ LocalVariableTargetNode (location: (15,4)-(15,5)) + │ │ ├── flags: ∅ │ │ ├── name: :i │ │ └── depth: 0 │ ├── collection: │ │ @ RangeNode (location: (15,9)-(15,14)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (15,9)-(15,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: │ │ │ @ IntegerNode (location: (15,12)-(15,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 10 │ │ └── operator_loc: (15,10)-(15,12) = ".." │ ├── statements: │ │ @ StatementsNode (location: (16,0)-(16,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (16,0)-(16,1)) + │ │ ├── flags: newline │ │ ├── name: :i │ │ └── depth: 0 │ ├── for_keyword_loc: (15,0)-(15,3) = "for" @@ -160,26 +187,30 @@ │ ├── do_keyword_loc: (15,15)-(15,17) = "do" │ └── end_keyword_loc: (17,0)-(17,3) = "end" └── @ ForNode (location: (19,0)-(19,22)) + ├── flags: newline ├── index: │ @ LocalVariableTargetNode (location: (19,4)-(19,5)) + │ ├── flags: ∅ │ ├── name: :i │ └── depth: 0 ├── collection: │ @ RangeNode (location: (19,9)-(19,14)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── left: │ │ @ IntegerNode (location: (19,9)-(19,10)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── right: │ │ @ IntegerNode (location: (19,12)-(19,14)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 10 │ └── operator_loc: (19,10)-(19,12) = ".." ├── statements: │ @ StatementsNode (location: (19,16)-(19,17)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ LocalVariableReadNode (location: (19,16)-(19,17)) + │ ├── flags: newline │ ├── name: :i │ └── depth: 0 ├── for_keyword_loc: (19,0)-(19,3) = "for" diff --git a/test/prism/snapshots/global_variables.txt b/test/prism/snapshots/global_variables.txt index 9f775ed80d3..17b7728a32d 100644 --- a/test/prism/snapshots/global_variables.txt +++ b/test/prism/snapshots/global_variables.txt @@ -1,190 +1,216 @@ @ ProgramNode (location: (1,0)-(93,4)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(93,4)) + ├── flags: ∅ └── body: (length: 47) ├── @ GlobalVariableReadNode (location: (1,0)-(1,16)) + │ ├── flags: newline │ └── name: :$global_variable ├── @ GlobalVariableReadNode (location: (3,0)-(3,2)) + │ ├── flags: newline │ └── name: :$_ ├── @ GlobalVariableReadNode (location: (5,0)-(5,3)) + │ ├── flags: newline │ └── name: :$-w ├── @ GlobalVariableReadNode (location: (7,0)-(7,10)) + │ ├── flags: newline │ └── name: :$LOAD_PATH ├── @ GlobalVariableReadNode (location: (9,0)-(9,6)) + │ ├── flags: newline │ └── name: :$stdin ├── @ GlobalVariableReadNode (location: (11,0)-(11,7)) + │ ├── flags: newline │ └── name: :$stdout ├── @ GlobalVariableReadNode (location: (13,0)-(13,7)) + │ ├── flags: newline │ └── name: :$stderr ├── @ GlobalVariableReadNode (location: (15,0)-(15,2)) + │ ├── flags: newline │ └── name: :$! ├── @ GlobalVariableReadNode (location: (17,0)-(17,2)) + │ ├── flags: newline │ └── name: :$? ├── @ GlobalVariableReadNode (location: (19,0)-(19,2)) + │ ├── flags: newline │ └── name: :$~ ├── @ BackReferenceReadNode (location: (21,0)-(21,2)) + │ ├── flags: newline │ └── name: :$& ├── @ BackReferenceReadNode (location: (23,0)-(23,2)) + │ ├── flags: newline │ └── name: :$` ├── @ BackReferenceReadNode (location: (25,0)-(25,2)) + │ ├── flags: newline │ └── name: :$' ├── @ BackReferenceReadNode (location: (27,0)-(27,2)) + │ ├── flags: newline │ └── name: :$+ ├── @ GlobalVariableReadNode (location: (29,0)-(29,2)) + │ ├── flags: newline │ └── name: :$: ├── @ GlobalVariableReadNode (location: (31,0)-(31,2)) + │ ├── flags: newline │ └── name: :$; ├── @ GlobalVariableReadNode (location: (33,0)-(33,2)) + │ ├── flags: newline │ └── name: :$, ├── @ GlobalVariableReadNode (location: (35,0)-(35,6)) + │ ├── flags: newline │ └── name: :$DEBUG ├── @ GlobalVariableReadNode (location: (37,0)-(37,9)) + │ ├── flags: newline │ └── name: :$FILENAME ├── @ GlobalVariableReadNode (location: (39,0)-(39,2)) + │ ├── flags: newline │ └── name: :$0 ├── @ GlobalVariableReadNode (location: (41,0)-(41,3)) + │ ├── flags: newline │ └── name: :$-0 ├── @ GlobalVariableReadNode (location: (43,0)-(43,16)) + │ ├── flags: newline │ └── name: :$LOADED_FEATURES ├── @ GlobalVariableReadNode (location: (45,0)-(45,8)) + │ ├── flags: newline │ └── name: :$VERBOSE ├── @ GlobalVariableReadNode (location: (47,0)-(47,3)) + │ ├── flags: newline │ └── name: :$-K ├── @ SymbolNode (location: (49,0)-(49,17)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (49,0)-(49,1) = ":" │ ├── value_loc: (49,1)-(49,17) = "$global_variable" │ ├── closing_loc: ∅ │ └── unescaped: "$global_variable" ├── @ SymbolNode (location: (51,0)-(51,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (51,0)-(51,1) = ":" │ ├── value_loc: (51,1)-(51,3) = "$_" │ ├── closing_loc: ∅ │ └── unescaped: "$_" ├── @ SymbolNode (location: (53,0)-(53,4)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (53,0)-(53,1) = ":" │ ├── value_loc: (53,1)-(53,4) = "$-w" │ ├── closing_loc: ∅ │ └── unescaped: "$-w" ├── @ SymbolNode (location: (55,0)-(55,11)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (55,0)-(55,1) = ":" │ ├── value_loc: (55,1)-(55,11) = "$LOAD_PATH" │ ├── closing_loc: ∅ │ └── unescaped: "$LOAD_PATH" ├── @ SymbolNode (location: (57,0)-(57,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (57,0)-(57,1) = ":" │ ├── value_loc: (57,1)-(57,7) = "$stdin" │ ├── closing_loc: ∅ │ └── unescaped: "$stdin" ├── @ SymbolNode (location: (59,0)-(59,8)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (59,0)-(59,1) = ":" │ ├── value_loc: (59,1)-(59,8) = "$stdout" │ ├── closing_loc: ∅ │ └── unescaped: "$stdout" ├── @ SymbolNode (location: (61,0)-(61,8)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (61,0)-(61,1) = ":" │ ├── value_loc: (61,1)-(61,8) = "$stderr" │ ├── closing_loc: ∅ │ └── unescaped: "$stderr" ├── @ SymbolNode (location: (63,0)-(63,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (63,0)-(63,1) = ":" │ ├── value_loc: (63,1)-(63,3) = "$!" │ ├── closing_loc: ∅ │ └── unescaped: "$!" ├── @ SymbolNode (location: (65,0)-(65,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (65,0)-(65,1) = ":" │ ├── value_loc: (65,1)-(65,3) = "$?" │ ├── closing_loc: ∅ │ └── unescaped: "$?" ├── @ SymbolNode (location: (67,0)-(67,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (67,0)-(67,1) = ":" │ ├── value_loc: (67,1)-(67,3) = "$~" │ ├── closing_loc: ∅ │ └── unescaped: "$~" ├── @ SymbolNode (location: (69,0)-(69,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (69,0)-(69,1) = ":" │ ├── value_loc: (69,1)-(69,3) = "$&" │ ├── closing_loc: ∅ │ └── unescaped: "$&" ├── @ SymbolNode (location: (71,0)-(71,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (71,0)-(71,1) = ":" │ ├── value_loc: (71,1)-(71,3) = "$`" │ ├── closing_loc: ∅ │ └── unescaped: "$`" ├── @ SymbolNode (location: (73,0)-(73,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (73,0)-(73,1) = ":" │ ├── value_loc: (73,1)-(73,3) = "$'" │ ├── closing_loc: ∅ │ └── unescaped: "$'" ├── @ SymbolNode (location: (75,0)-(75,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (75,0)-(75,1) = ":" │ ├── value_loc: (75,1)-(75,3) = "$+" │ ├── closing_loc: ∅ │ └── unescaped: "$+" ├── @ SymbolNode (location: (77,0)-(77,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (77,0)-(77,1) = ":" │ ├── value_loc: (77,1)-(77,3) = "$:" │ ├── closing_loc: ∅ │ └── unescaped: "$:" ├── @ SymbolNode (location: (79,0)-(79,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (79,0)-(79,1) = ":" │ ├── value_loc: (79,1)-(79,3) = "$;" │ ├── closing_loc: ∅ │ └── unescaped: "$;" ├── @ SymbolNode (location: (81,0)-(81,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (81,0)-(81,1) = ":" │ ├── value_loc: (81,1)-(81,7) = "$DEBUG" │ ├── closing_loc: ∅ │ └── unescaped: "$DEBUG" ├── @ SymbolNode (location: (83,0)-(83,10)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (83,0)-(83,1) = ":" │ ├── value_loc: (83,1)-(83,10) = "$FILENAME" │ ├── closing_loc: ∅ │ └── unescaped: "$FILENAME" ├── @ SymbolNode (location: (85,0)-(85,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (85,0)-(85,1) = ":" │ ├── value_loc: (85,1)-(85,3) = "$0" │ ├── closing_loc: ∅ │ └── unescaped: "$0" ├── @ SymbolNode (location: (87,0)-(87,4)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (87,0)-(87,1) = ":" │ ├── value_loc: (87,1)-(87,4) = "$-0" │ ├── closing_loc: ∅ │ └── unescaped: "$-0" ├── @ SymbolNode (location: (89,0)-(89,17)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (89,0)-(89,1) = ":" │ ├── value_loc: (89,1)-(89,17) = "$LOADED_FEATURES" │ ├── closing_loc: ∅ │ └── unescaped: "$LOADED_FEATURES" ├── @ SymbolNode (location: (91,0)-(91,9)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (91,0)-(91,1) = ":" │ ├── value_loc: (91,1)-(91,9) = "$VERBOSE" │ ├── closing_loc: ∅ │ └── unescaped: "$VERBOSE" └── @ SymbolNode (location: (93,0)-(93,4)) - ├── flags: forced_us_ascii_encoding + ├── flags: newline, static_literal, forced_us_ascii_encoding ├── opening_loc: (93,0)-(93,1) = ":" ├── value_loc: (93,1)-(93,4) = "$-K" ├── closing_loc: ∅ diff --git a/test/prism/snapshots/hashes.txt b/test/prism/snapshots/hashes.txt index 7a3ac4b0eaa..8462c28994e 100644 --- a/test/prism/snapshots/hashes.txt +++ b/test/prism/snapshots/hashes.txt @@ -1,20 +1,26 @@ @ ProgramNode (location: (1,0)-(28,9)) +├── flags: ∅ ├── locals: [:a] └── statements: @ StatementsNode (location: (1,0)-(28,9)) + ├── flags: ∅ └── body: (length: 10) ├── @ HashNode (location: (1,0)-(1,2)) + │ ├── flags: newline, static_literal │ ├── opening_loc: (1,0)-(1,1) = "{" │ ├── elements: (length: 0) │ └── closing_loc: (1,1)-(1,2) = "}" ├── @ HashNode (location: (3,0)-(4,1)) + │ ├── flags: newline, static_literal │ ├── opening_loc: (3,0)-(3,1) = "{" │ ├── elements: (length: 0) │ └── closing_loc: (4,0)-(4,1) = "}" ├── @ HashNode (location: (6,0)-(6,18)) + │ ├── flags: newline │ ├── opening_loc: (6,0)-(6,1) = "{" │ ├── elements: (length: 2) │ │ ├── @ AssocNode (location: (6,2)-(6,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ CallNode (location: (6,2)-(6,3)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -39,6 +45,7 @@ │ │ │ │ └── block: ∅ │ │ │ └── operator_loc: (6,4)-(6,6) = "=>" │ │ └── @ AssocNode (location: (6,10)-(6,16)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ CallNode (location: (6,10)-(6,11)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -64,9 +71,11 @@ │ │ └── operator_loc: (6,12)-(6,14) = "=>" │ └── closing_loc: (6,17)-(6,18) = "}" ├── @ HashNode (location: (8,0)-(8,15)) + │ ├── flags: newline │ ├── opening_loc: (8,0)-(8,1) = "{" │ ├── elements: (length: 2) │ │ ├── @ AssocNode (location: (8,2)-(8,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ CallNode (location: (8,2)-(8,3)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -91,6 +100,7 @@ │ │ │ │ └── block: ∅ │ │ │ └── operator_loc: (8,4)-(8,6) = "=>" │ │ └── @ AssocSplatNode (location: (8,10)-(8,13)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (8,12)-(8,13)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -105,12 +115,14 @@ │ │ └── operator_loc: (8,10)-(8,12) = "**" │ └── closing_loc: (8,14)-(8,15) = "}" ├── @ HashNode (location: (10,0)-(16,5)) + │ ├── flags: newline │ ├── opening_loc: (10,0)-(10,1) = "{" │ ├── elements: (length: 2) │ │ ├── @ AssocNode (location: (11,6)-(11,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (11,6)-(11,8)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (11,6)-(11,7) = "a" │ │ │ │ ├── closing_loc: (11,7)-(11,8) = ":" @@ -128,9 +140,10 @@ │ │ │ │ └── block: ∅ │ │ │ └── operator_loc: ∅ │ │ └── @ AssocNode (location: (12,6)-(12,10)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (12,6)-(12,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (12,6)-(12,7) = "c" │ │ │ ├── closing_loc: (12,7)-(12,8) = ":" @@ -149,12 +162,14 @@ │ │ └── operator_loc: ∅ │ └── closing_loc: (16,4)-(16,5) = "}" ├── @ HashNode (location: (18,0)-(18,25)) + │ ├── flags: newline │ ├── opening_loc: (18,0)-(18,1) = "{" │ ├── elements: (length: 4) │ │ ├── @ AssocNode (location: (18,2)-(18,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (18,2)-(18,4)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (18,2)-(18,3) = "a" │ │ │ │ ├── closing_loc: (18,3)-(18,4) = ":" @@ -172,9 +187,10 @@ │ │ │ │ └── block: ∅ │ │ │ └── operator_loc: ∅ │ │ ├── @ AssocNode (location: (18,8)-(18,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (18,8)-(18,10)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (18,8)-(18,9) = "c" │ │ │ │ ├── closing_loc: (18,9)-(18,10) = ":" @@ -192,6 +208,7 @@ │ │ │ │ └── block: ∅ │ │ │ └── operator_loc: ∅ │ │ ├── @ AssocSplatNode (location: (18,14)-(18,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── value: │ │ │ │ @ CallNode (location: (18,16)-(18,17)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -205,9 +222,10 @@ │ │ │ │ └── block: ∅ │ │ │ └── operator_loc: (18,14)-(18,16) = "**" │ │ └── @ AssocNode (location: (18,19)-(18,23)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (18,19)-(18,21)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (18,19)-(18,20) = "f" │ │ │ ├── closing_loc: (18,20)-(18,21) = ":" @@ -226,12 +244,14 @@ │ │ └── operator_loc: ∅ │ └── closing_loc: (18,24)-(18,25) = "}" ├── @ HashNode (location: (20,0)-(20,12)) + │ ├── flags: newline │ ├── opening_loc: (20,0)-(20,1) = "{" │ ├── elements: (length: 1) │ │ └── @ AssocNode (location: (20,2)-(20,10)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (20,2)-(20,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (20,2)-(20,3) = "\"" │ │ │ ├── value_loc: (20,3)-(20,4) = "a" │ │ │ ├── closing_loc: (20,4)-(20,6) = "\":" @@ -260,16 +280,17 @@ │ │ └── operator_loc: ∅ │ └── closing_loc: (20,11)-(20,12) = "}" ├── @ LocalVariableWriteNode (location: (22,0)-(22,5)) + │ ├── flags: newline │ ├── name: :a │ ├── depth: 0 │ ├── name_loc: (22,0)-(22,1) = "a" │ ├── value: │ │ @ IntegerNode (location: (22,4)-(22,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (22,2)-(22,3) = "=" ├── @ CallNode (location: (23,0)-(26,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -279,63 +300,75 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (23,4)-(26,3)) + │ ├── flags: ∅ │ ├── locals: [:b] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (24,2)-(25,20)) + │ │ ├── flags: ∅ │ │ └── body: (length: 2) │ │ ├── @ LocalVariableWriteNode (location: (24,2)-(24,7)) + │ │ │ ├── flags: newline │ │ │ ├── name: :b │ │ │ ├── depth: 0 │ │ │ ├── name_loc: (24,2)-(24,3) = "b" │ │ │ ├── value: │ │ │ │ @ IntegerNode (location: (24,6)-(24,7)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── operator_loc: (24,4)-(24,5) = "=" │ │ └── @ HashNode (location: (25,2)-(25,20)) + │ │ ├── flags: newline │ │ ├── opening_loc: (25,2)-(25,3) = "{" │ │ ├── elements: (length: 4) │ │ │ ├── @ AssocNode (location: (25,4)-(25,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (25,4)-(25,6)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (25,4)-(25,5) = "a" │ │ │ │ │ ├── closing_loc: (25,5)-(25,6) = ":" │ │ │ │ │ └── unescaped: "a" │ │ │ │ ├── value: │ │ │ │ │ @ ImplicitNode (location: (25,4)-(25,6)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── value: │ │ │ │ │ @ LocalVariableReadNode (location: (25,4)-(25,6)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :a │ │ │ │ │ └── depth: 1 │ │ │ │ └── operator_loc: ∅ │ │ │ ├── @ AssocNode (location: (25,8)-(25,10)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (25,8)-(25,10)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (25,8)-(25,9) = "b" │ │ │ │ │ ├── closing_loc: (25,9)-(25,10) = ":" │ │ │ │ │ └── unescaped: "b" │ │ │ │ ├── value: │ │ │ │ │ @ ImplicitNode (location: (25,8)-(25,10)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── value: │ │ │ │ │ @ LocalVariableReadNode (location: (25,8)-(25,10)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :b │ │ │ │ │ └── depth: 0 │ │ │ │ └── operator_loc: ∅ │ │ │ ├── @ AssocNode (location: (25,12)-(25,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (25,12)-(25,14)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (25,12)-(25,13) = "c" │ │ │ │ │ ├── closing_loc: (25,13)-(25,14) = ":" │ │ │ │ │ └── unescaped: "c" │ │ │ │ ├── value: │ │ │ │ │ @ ImplicitNode (location: (25,12)-(25,14)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── value: │ │ │ │ │ @ CallNode (location: (25,12)-(25,14)) │ │ │ │ │ ├── flags: ignore_visibility @@ -349,36 +382,41 @@ │ │ │ │ │ └── block: ∅ │ │ │ │ └── operator_loc: ∅ │ │ │ └── @ AssocNode (location: (25,16)-(25,18)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (25,16)-(25,18)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (25,16)-(25,17) = "D" │ │ │ │ ├── closing_loc: (25,17)-(25,18) = ":" │ │ │ │ └── unescaped: "D" │ │ │ ├── value: │ │ │ │ @ ImplicitNode (location: (25,16)-(25,18)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── value: │ │ │ │ @ ConstantReadNode (location: (25,16)-(25,18)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :D │ │ │ └── operator_loc: ∅ │ │ └── closing_loc: (25,19)-(25,20) = "}" │ ├── opening_loc: (23,4)-(23,6) = "do" │ └── closing_loc: (26,0)-(26,3) = "end" └── @ HashNode (location: (28,0)-(28,9)) + ├── flags: newline, static_literal ├── opening_loc: (28,0)-(28,1) = "{" ├── elements: (length: 1) │ └── @ AssocNode (location: (28,2)-(28,7)) + │ ├── flags: static_literal │ ├── key: │ │ @ SymbolNode (location: (28,2)-(28,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (28,2)-(28,3) = "a" │ │ ├── closing_loc: (28,3)-(28,4) = ":" │ │ └── unescaped: "a" │ ├── value: │ │ @ IntegerNode (location: (28,5)-(28,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: -1 │ └── operator_loc: ∅ └── closing_loc: (28,8)-(28,9) = "}" diff --git a/test/prism/snapshots/heredoc.txt b/test/prism/snapshots/heredoc.txt index 3ca66dd9897..7145f0f7527 100644 --- a/test/prism/snapshots/heredoc.txt +++ b/test/prism/snapshots/heredoc.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ StringNode (location: (1,0)-(1,6)) - ├── flags: ∅ + ├── flags: newline ├── opening_loc: (1,0)-(1,6) = "< @@ -307,15 +309,15 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (31,6)-(31,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (33,0)-(33,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (33,0)-(33,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: ∅ │ ├── name: :== @@ -326,15 +328,15 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (33,5)-(33,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (35,0)-(35,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (35,0)-(35,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: ∅ │ ├── name: :=== @@ -345,15 +347,15 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (35,6)-(35,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (37,0)-(37,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (37,0)-(37,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: ∅ │ ├── name: :=~ @@ -364,15 +366,15 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (37,5)-(37,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (39,0)-(39,5)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: │ │ @ IntegerNode (location: (39,0)-(39,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: ∅ │ ├── name: :> @@ -383,15 +385,15 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (39,4)-(39,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (41,0)-(41,6)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: │ │ @ IntegerNode (location: (41,0)-(41,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: ∅ │ ├── name: :>= @@ -402,15 +404,15 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (41,5)-(41,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (43,0)-(43,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (43,0)-(43,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: ∅ │ ├── name: :>> @@ -421,15 +423,15 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (43,5)-(43,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (45,0)-(45,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (45,0)-(45,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: ∅ │ ├── name: :^ @@ -440,15 +442,15 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (45,4)-(45,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (47,0)-(47,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (47,0)-(47,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: ∅ │ ├── name: :| @@ -459,35 +461,37 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (47,4)-(47,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ AndNode (location: (49,0)-(49,6)) + │ ├── flags: newline │ ├── left: │ │ @ IntegerNode (location: (49,0)-(49,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── right: │ │ @ IntegerNode (location: (49,5)-(49,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── operator_loc: (49,2)-(49,4) = "&&" ├── @ AndNode (location: (51,0)-(51,7)) + │ ├── flags: newline │ ├── left: │ │ @ IntegerNode (location: (51,0)-(51,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── right: │ │ @ IntegerNode (location: (51,6)-(51,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── operator_loc: (51,2)-(51,5) = "and" ├── @ CallNode (location: (53,0)-(53,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (53,0)-(53,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: ∅ │ ├── name: :* @@ -501,7 +505,7 @@ │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ IntegerNode (location: (53,4)-(53,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── call_operator_loc: ∅ │ │ ├── name: :** @@ -512,20 +516,20 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (53,9)-(53,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (55,0)-(55,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (55,0)-(55,5)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ IntegerNode (location: (55,0)-(55,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── call_operator_loc: ∅ │ │ ├── name: :* @@ -536,7 +540,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (55,4)-(55,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ @@ -549,35 +553,37 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (55,8)-(55,9)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ OrNode (location: (57,0)-(57,6)) + │ ├── flags: newline │ ├── left: │ │ @ IntegerNode (location: (57,0)-(57,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── right: │ │ @ IntegerNode (location: (57,5)-(57,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── operator_loc: (57,2)-(57,4) = "or" ├── @ OrNode (location: (59,0)-(59,6)) + │ ├── flags: newline │ ├── left: │ │ @ IntegerNode (location: (59,0)-(59,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── right: │ │ @ IntegerNode (location: (59,5)-(59,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── operator_loc: (59,2)-(59,4) = "||" ├── @ CallNode (location: (61,0)-(61,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (61,0)-(61,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: ∅ │ ├── name: :+ @@ -591,7 +597,7 @@ │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ IntegerNode (location: (61,4)-(61,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── call_operator_loc: ∅ │ │ ├── name: :* @@ -602,21 +608,23 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (61,8)-(61,9)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ ParenthesesNode (location: (63,0)-(63,7)) + ├── flags: newline ├── body: │ @ StatementsNode (location: (63,1)-(63,6)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (63,1)-(63,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (63,1)-(63,2)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: ∅ │ ├── name: :+ @@ -627,7 +635,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (63,5)-(63,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── closing_loc: ∅ │ └── block: ∅ diff --git a/test/prism/snapshots/keyword_method_names.txt b/test/prism/snapshots/keyword_method_names.txt index 6d59790b070..6bb4d970845 100644 --- a/test/prism/snapshots/keyword_method_names.txt +++ b/test/prism/snapshots/keyword_method_names.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(29,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(29,3)) + ├── flags: ∅ └── body: (length: 10) ├── @ DefNode (location: (1,0)-(2,3)) + │ ├── flags: newline │ ├── name: :def │ ├── name_loc: (1,4)-(1,7) = "def" │ ├── receiver: ∅ @@ -17,10 +20,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (2,0)-(2,3) = "end" ├── @ DefNode (location: (4,0)-(5,3)) + │ ├── flags: newline │ ├── name: :ensure │ ├── name_loc: (4,9)-(4,15) = "ensure" │ ├── receiver: │ │ @ SelfNode (location: (4,4)-(4,8)) + │ │ └── flags: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -31,7 +36,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (5,0)-(5,3) = "end" ├── @ CallNode (location: (7,0)-(10,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :private @@ -42,15 +47,17 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ DefNode (location: (7,8)-(10,3)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ ├── name_loc: (7,12)-(7,15) = "foo" │ │ ├── receiver: ∅ │ │ ├── parameters: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (8,2)-(9,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (8,2)-(9,5)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -60,6 +67,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: │ │ │ @ BlockNode (location: (8,6)-(9,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [] │ │ │ ├── parameters: ∅ │ │ │ ├── body: ∅ @@ -75,11 +83,13 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ DefNode (location: (12,0)-(13,3)) + │ ├── flags: newline │ ├── name: :m │ ├── name_loc: (12,4)-(12,5) = "m" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (12,6)-(12,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (12,6)-(12,7)) │ │ │ ├── flags: ∅ @@ -90,6 +100,7 @@ │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ NoKeywordsParameterNode (location: (12,9)-(12,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (12,9)-(12,11) = "**" │ │ │ └── keyword_loc: (12,11)-(12,14) = "nil" │ │ └── block: ∅ @@ -102,10 +113,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (13,0)-(13,3) = "end" ├── @ DefNode (location: (15,0)-(16,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (15,17)-(15,18) = "a" │ ├── receiver: │ │ @ SourceEncodingNode (location: (15,4)-(15,16)) + │ │ └── flags: static_literal │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -116,18 +129,19 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (16,0)-(16,3) = "end" ├── @ StringNode (location: (18,0)-(18,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (18,0)-(18,2) = "%{" │ ├── content_loc: (18,2)-(18,5) = "abc" │ ├── closing_loc: (18,5)-(18,6) = "}" │ └── unescaped: "abc" ├── @ StringNode (location: (20,0)-(20,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (20,0)-(20,2) = "%\"" │ ├── content_loc: (20,2)-(20,5) = "abc" │ ├── closing_loc: (20,5)-(20,6) = "\"" │ └── unescaped: "abc" ├── @ DefNode (location: (22,0)-(23,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (22,13)-(22,14) = "a" │ ├── receiver: @@ -144,10 +158,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (23,0)-(23,3) = "end" ├── @ DefNode (location: (25,0)-(26,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (25,13)-(25,14) = "a" │ ├── receiver: │ │ @ SourceLineNode (location: (25,4)-(25,12)) + │ │ └── flags: static_literal │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -158,10 +174,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (26,0)-(26,3) = "end" └── @ DefNode (location: (28,0)-(29,3)) + ├── flags: newline ├── name: :a ├── name_loc: (28,9)-(28,10) = "a" ├── receiver: │ @ NilNode (location: (28,4)-(28,7)) + │ └── flags: static_literal ├── parameters: ∅ ├── body: ∅ ├── locals: [] diff --git a/test/prism/snapshots/keywords.txt b/test/prism/snapshots/keywords.txt index b3d5c5e1c38..afe1bad4835 100644 --- a/test/prism/snapshots/keywords.txt +++ b/test/prism/snapshots/keywords.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(11,8)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(11,8)) + ├── flags: ∅ └── body: (length: 6) ├── @ CallNode (location: (1,0)-(1,12)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -14,34 +16,44 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,4)-(1,12)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,6)-(1,10)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RedoNode (location: (1,6)-(1,10)) + │ │ └── flags: newline │ ├── opening_loc: (1,4)-(1,5) = "{" │ └── closing_loc: (1,11)-(1,12) = "}" ├── @ BeginNode (location: (3,0)-(3,25)) + │ ├── flags: newline │ ├── begin_keyword_loc: (3,0)-(3,5) = "begin" │ ├── statements: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (3,7)-(3,20)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (3,7)-(3,13) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (3,15)-(3,20)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ RetryNode (location: (3,15)-(3,20)) + │ │ │ └── flags: newline │ │ └── consequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (3,22)-(3,25) = "end" ├── @ SelfNode (location: (5,0)-(5,4)) + │ └── flags: newline ├── @ SourceEncodingNode (location: (7,0)-(7,12)) + │ └── flags: newline, static_literal ├── @ SourceFileNode (location: (9,0)-(9,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ └── filepath: "keywords.txt" └── @ SourceLineNode (location: (11,0)-(11,8)) + └── flags: newline, static_literal diff --git a/test/prism/snapshots/lambda.txt b/test/prism/snapshots/lambda.txt index 0864b103695..90b0b523aa9 100644 --- a/test/prism/snapshots/lambda.txt +++ b/test/prism/snapshots/lambda.txt @@ -1,17 +1,22 @@ @ ProgramNode (location: (1,0)-(11,18)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(11,18)) + ├── flags: ∅ └── body: (length: 5) ├── @ LambdaNode (location: (1,0)-(3,4)) + │ ├── flags: newline │ ├── locals: [:foo] │ ├── operator_loc: (1,0)-(1,2) = "->" │ ├── opening_loc: (3,2)-(3,3) = "{" │ ├── closing_loc: (3,3)-(3,4) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (1,2)-(3,1)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (2,2)-(2,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (2,2)-(2,5)) │ │ │ │ ├── flags: ∅ @@ -27,14 +32,17 @@ │ │ └── closing_loc: (3,0)-(3,1) = ")" │ └── body: ∅ ├── @ LambdaNode (location: (5,0)-(5,18)) + │ ├── flags: newline │ ├── locals: [:x] │ ├── operator_loc: (5,0)-(5,2) = "->" │ ├── opening_loc: (5,15)-(5,16) = "{" │ ├── closing_loc: (5,17)-(5,18) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (5,2)-(5,14)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (5,3)-(5,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 0) │ │ │ ├── optionals: (length: 0) │ │ │ ├── rest: ∅ @@ -50,15 +58,17 @@ │ │ │ │ ├── opening_loc: (5,6)-(5,7) = "\"" │ │ │ │ ├── parts: (length: 2) │ │ │ │ │ ├── @ StringNode (location: (5,7)-(5,8)) - │ │ │ │ │ │ ├── flags: frozen + │ │ │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ ├── content_loc: (5,7)-(5,8) = "b" │ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ └── unescaped: "b" │ │ │ │ │ └── @ EmbeddedStatementsNode (location: (5,8)-(5,12)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── opening_loc: (5,8)-(5,10) = "\#{" │ │ │ │ │ ├── statements: │ │ │ │ │ │ @ StatementsNode (location: (5,10)-(5,11)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ │ └── @ CallNode (location: (5,10)-(5,11)) │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -79,14 +89,17 @@ │ │ └── closing_loc: (5,13)-(5,14) = ")" │ └── body: ∅ ├── @ LambdaNode (location: (7,0)-(7,15)) + │ ├── flags: newline │ ├── locals: [:a] │ ├── operator_loc: (7,0)-(7,2) = "->" │ ├── opening_loc: (7,13)-(7,14) = "{" │ ├── closing_loc: (7,14)-(7,15) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (7,2)-(7,12)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (7,3)-(7,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 0) │ │ │ ├── optionals: (length: 0) │ │ │ ├── rest: ∅ @@ -119,7 +132,7 @@ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── arguments: (length: 1) │ │ │ │ │ └── @ IntegerNode (location: (7,10)-(7,11)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 3 │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: ∅ @@ -130,14 +143,17 @@ │ │ └── closing_loc: (7,11)-(7,12) = ")" │ └── body: ∅ ├── @ LambdaNode (location: (9,0)-(9,19)) + │ ├── flags: newline │ ├── locals: [:foo] │ ├── operator_loc: (9,0)-(9,2) = "->" │ ├── opening_loc: (9,13)-(9,15) = "do" │ ├── closing_loc: (9,16)-(9,19) = "end" │ ├── parameters: │ │ @ BlockParametersNode (location: (9,3)-(9,12)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (9,3)-(9,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 0) │ │ │ ├── optionals: (length: 1) │ │ │ │ └── @ OptionalParameterNode (location: (9,3)-(9,12)) @@ -166,14 +182,17 @@ │ │ └── closing_loc: ∅ │ └── body: ∅ └── @ LambdaNode (location: (11,0)-(11,18)) + ├── flags: newline ├── locals: [:foo] ├── operator_loc: (11,0)-(11,2) = "->" ├── opening_loc: (11,12)-(11,14) = "do" ├── closing_loc: (11,15)-(11,18) = "end" ├── parameters: │ @ BlockParametersNode (location: (11,3)-(11,11)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (11,3)-(11,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ diff --git a/test/prism/snapshots/method_calls.txt b/test/prism/snapshots/method_calls.txt index 6082b567f7b..4bf8f3c710b 100644 --- a/test/prism/snapshots/method_calls.txt +++ b/test/prism/snapshots/method_calls.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(156,19)) +├── flags: ∅ ├── locals: [:foo] └── statements: @ StatementsNode (location: (1,0)-(156,19)) + ├── flags: ∅ └── body: (length: 67) ├── @ CallNode (location: (1,0)-(1,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (1,0)-(1,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -33,7 +35,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (3,0)-(3,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (3,0)-(3,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -76,7 +78,7 @@ │ ├── closing_loc: (3,8)-(3,9) = ")" │ └── block: ∅ ├── @ CallNode (location: (5,0)-(5,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (5,0)-(5,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -96,7 +98,7 @@ │ ├── closing_loc: (5,4)-(5,5) = ")" │ └── block: ∅ ├── @ CallNode (location: (7,0)-(9,7)) - │ ├── flags: safe_navigation + │ ├── flags: newline, safe_navigation │ ├── receiver: │ │ @ CallNode (location: (7,0)-(8,6)) │ │ ├── flags: ∅ @@ -126,7 +128,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (11,0)-(11,2)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a! @@ -136,7 +138,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (13,0)-(13,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (13,0)-(13,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -156,7 +158,7 @@ │ ├── closing_loc: (13,3)-(13,4) = ")" │ └── block: ∅ ├── @ CallNode (location: (15,0)-(15,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (15,0)-(15,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -177,18 +179,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 3) │ │ ├── @ IntegerNode (location: (15,3)-(15,4)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── @ IntegerNode (location: (15,6)-(15,7)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── @ IntegerNode (location: (15,9)-(15,10)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ ├── closing_loc: (15,10)-(15,11) = ")" │ └── block: ∅ ├── @ CallNode (location: (17,0)-(17,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (17,0)-(17,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -208,7 +210,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (19,0)-(19,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (19,0)-(19,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -241,7 +243,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (21,0)-(21,11)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ CallNode (location: (21,0)-(21,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -262,12 +264,12 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (21,10)-(21,11)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (23,0)-(23,2)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a? @@ -277,7 +279,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (25,0)-(25,8)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a @@ -287,6 +289,7 @@ │ ├── closing_loc: (25,8)-(25,9) = ")" │ └── block: │ @ BlockArgumentNode (location: (25,2)-(25,8)) + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (25,3)-(25,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -300,7 +303,7 @@ │ │ └── block: ∅ │ └── operator_loc: (25,2)-(25,3) = "&" ├── @ CallNode (location: (27,0)-(27,11)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a @@ -314,6 +317,7 @@ │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocSplatNode (location: (27,2)-(27,10)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (27,4)-(27,10)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -329,7 +333,7 @@ │ ├── closing_loc: (27,10)-(27,11) = ")" │ └── block: ∅ ├── @ CallNode (location: (29,0)-(29,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (29,0)-(29,3)) │ │ ├── flags: ∅ @@ -359,7 +363,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (31,0)-(31,7)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a @@ -392,7 +396,7 @@ │ ├── closing_loc: (31,6)-(31,7) = ")" │ └── block: ∅ ├── @ CallNode (location: (33,0)-(33,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a @@ -402,7 +406,7 @@ │ ├── closing_loc: (33,2)-(33,3) = ")" │ └── block: ∅ ├── @ CallNode (location: (35,0)-(35,8)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a @@ -413,6 +417,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (35,2)-(35,7)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (35,2)-(35,3) = "*" │ │ └── expression: │ │ @ CallNode (location: (35,3)-(35,7)) @@ -428,7 +433,7 @@ │ ├── closing_loc: (35,7)-(35,8) = ")" │ └── block: ∅ ├── @ CallNode (location: (37,0)-(37,6)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a @@ -461,7 +466,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (39,0)-(39,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (39,0)-(39,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -504,6 +509,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ MultiWriteNode (location: (41,0)-(41,23)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ CallTargetNode (location: (41,0)-(41,7)) │ │ │ ├── flags: ∅ @@ -544,18 +550,18 @@ │ ├── operator_loc: (41,17)-(41,18) = "=" │ └── value: │ @ ArrayNode (location: (41,19)-(41,23)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (41,19)-(41,20)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (41,22)-(41,23)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: ∅ │ └── closing_loc: ∅ ├── @ CallNode (location: (43,0)-(43,4)) - │ ├── flags: safe_navigation + │ ├── flags: newline, safe_navigation │ ├── receiver: │ │ @ CallNode (location: (43,0)-(43,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -575,7 +581,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (45,0)-(45,5)) - │ ├── flags: safe_navigation + │ ├── flags: newline, safe_navigation │ ├── receiver: │ │ @ CallNode (location: (45,0)-(45,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -595,7 +601,7 @@ │ ├── closing_loc: (45,4)-(45,5) = ")" │ └── block: ∅ ├── @ CallNode (location: (47,0)-(47,7)) - │ ├── flags: safe_navigation + │ ├── flags: newline, safe_navigation │ ├── receiver: │ │ @ CallNode (location: (47,0)-(47,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -628,7 +634,7 @@ │ ├── closing_loc: (47,6)-(47,7) = ")" │ └── block: ∅ ├── @ CallNode (location: (49,0)-(49,6)) - │ ├── flags: safe_navigation + │ ├── flags: newline, safe_navigation │ ├── receiver: │ │ @ CallNode (location: (49,0)-(49,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -648,11 +654,14 @@ │ ├── closing_loc: (49,5)-(49,6) = ")" │ └── block: ∅ ├── @ IfNode (location: (51,0)-(51,33)) + │ ├── flags: newline │ ├── if_keyword_loc: (51,11)-(51,13) = "if" │ ├── predicate: │ │ @ AndNode (location: (51,14)-(51,33)) + │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ OrNode (location: (51,14)-(51,25)) + │ │ │ ├── flags: ∅ │ │ │ ├── left: │ │ │ │ @ CallNode (location: (51,14)-(51,18)) │ │ │ │ ├── flags: ignore_visibility @@ -691,9 +700,10 @@ │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (51,0)-(51,10)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (51,0)-(51,10)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo @@ -704,13 +714,13 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 2) │ │ │ ├── @ SymbolNode (location: (51,4)-(51,6)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (51,4)-(51,5) = ":" │ │ │ │ ├── value_loc: (51,5)-(51,6) = "a" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "a" │ │ │ └── @ SymbolNode (location: (51,8)-(51,10)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (51,8)-(51,9) = ":" │ │ │ ├── value_loc: (51,9)-(51,10) = "b" │ │ │ ├── closing_loc: ∅ @@ -720,7 +730,7 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: ∅ ├── @ CallNode (location: (53,0)-(56,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -731,13 +741,13 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ SymbolNode (location: (53,4)-(53,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (53,4)-(53,5) = ":" │ │ │ ├── value_loc: (53,5)-(53,6) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ └── @ SymbolNode (location: (55,2)-(55,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (55,2)-(55,3) = ":" │ │ ├── value_loc: (55,3)-(55,4) = "b" │ │ ├── closing_loc: ∅ @@ -745,7 +755,7 @@ │ ├── closing_loc: (56,0)-(56,1) = ")" │ └── block: ∅ ├── @ CallNode (location: (58,0)-(58,10)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -756,6 +766,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (58,4)-(58,9)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (58,4)-(58,5) = "*" │ │ └── expression: │ │ @ CallNode (location: (58,5)-(58,9)) @@ -771,7 +782,7 @@ │ ├── closing_loc: (58,9)-(58,10) = ")" │ └── block: ∅ ├── @ CallNode (location: (60,0)-(60,39)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -782,7 +793,7 @@ │ │ ├── flags: contains_keywords │ │ └── arguments: (length: 2) │ │ ├── @ SymbolNode (location: (60,4)-(60,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (60,4)-(60,5) = ":" │ │ │ ├── value_loc: (60,5)-(60,6) = "a" │ │ │ ├── closing_loc: ∅ @@ -791,25 +802,26 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 2) │ │ ├── @ AssocNode (location: (60,8)-(60,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (60,8)-(60,10)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (60,8)-(60,9) = ":" │ │ │ │ ├── value_loc: (60,9)-(60,10) = "h" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "h" │ │ │ ├── value: │ │ │ │ @ ArrayNode (location: (60,14)-(60,22)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: static_literal │ │ │ │ ├── elements: (length: 2) │ │ │ │ │ ├── @ SymbolNode (location: (60,15)-(60,17)) - │ │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ │ ├── opening_loc: (60,15)-(60,16) = ":" │ │ │ │ │ │ ├── value_loc: (60,16)-(60,17) = "x" │ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ └── unescaped: "x" │ │ │ │ │ └── @ SymbolNode (location: (60,19)-(60,21)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: (60,19)-(60,20) = ":" │ │ │ │ │ ├── value_loc: (60,20)-(60,21) = "y" │ │ │ │ │ ├── closing_loc: ∅ @@ -818,16 +830,17 @@ │ │ │ │ └── closing_loc: (60,21)-(60,22) = "]" │ │ │ └── operator_loc: (60,11)-(60,13) = "=>" │ │ └── @ AssocNode (location: (60,24)-(60,32)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (60,24)-(60,26)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (60,24)-(60,25) = ":" │ │ │ ├── value_loc: (60,25)-(60,26) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ ├── value: │ │ │ @ SymbolNode (location: (60,30)-(60,32)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (60,30)-(60,31) = ":" │ │ │ ├── value_loc: (60,31)-(60,32) = "b" │ │ │ ├── closing_loc: ∅ @@ -836,16 +849,17 @@ │ ├── closing_loc: (60,39)-(60,40) = ")" │ └── block: │ @ BlockArgumentNode (location: (60,34)-(60,39)) + │ ├── flags: ∅ │ ├── expression: │ │ @ SymbolNode (location: (60,35)-(60,39)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (60,35)-(60,36) = ":" │ │ ├── value_loc: (60,36)-(60,39) = "bar" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "bar" │ └── operator_loc: (60,34)-(60,35) = "&" ├── @ CallNode (location: (62,0)-(62,49)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :hi @@ -856,45 +870,50 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ IntegerNode (location: (62,3)-(62,6)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 123 │ │ └── @ HashNode (location: (62,8)-(62,49)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (62,8)-(62,9) = "{" │ │ ├── elements: (length: 3) │ │ │ ├── @ AssocNode (location: (62,10)-(62,27)) + │ │ │ │ ├── flags: static_literal │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (62,10)-(62,16)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: (62,10)-(62,11) = ":" │ │ │ │ │ ├── value_loc: (62,11)-(62,16) = "there" │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── unescaped: "there" │ │ │ │ ├── value: │ │ │ │ │ @ SymbolNode (location: (62,20)-(62,27)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: (62,20)-(62,21) = ":" │ │ │ │ │ ├── value_loc: (62,21)-(62,27) = "friend" │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── unescaped: "friend" │ │ │ │ └── operator_loc: (62,17)-(62,19) = "=>" │ │ │ ├── @ AssocSplatNode (location: (62,29)-(62,33)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── value: │ │ │ │ │ @ HashNode (location: (62,31)-(62,33)) + │ │ │ │ │ ├── flags: static_literal │ │ │ │ │ ├── opening_loc: (62,31)-(62,32) = "{" │ │ │ │ │ ├── elements: (length: 0) │ │ │ │ │ └── closing_loc: (62,32)-(62,33) = "}" │ │ │ │ └── operator_loc: (62,29)-(62,31) = "**" │ │ │ └── @ AssocNode (location: (62,35)-(62,47)) + │ │ │ ├── flags: static_literal │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (62,35)-(62,42)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (62,35)-(62,41) = "whatup" │ │ │ │ ├── closing_loc: (62,41)-(62,42) = ":" │ │ │ │ └── unescaped: "whatup" │ │ │ ├── value: │ │ │ │ @ SymbolNode (location: (62,43)-(62,47)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (62,43)-(62,44) = ":" │ │ │ │ ├── value_loc: (62,44)-(62,47) = "dog" │ │ │ │ ├── closing_loc: ∅ @@ -904,7 +923,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (64,0)-(64,36)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -915,7 +934,7 @@ │ │ ├── flags: contains_keywords │ │ └── arguments: (length: 2) │ │ ├── @ SymbolNode (location: (64,4)-(64,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (64,4)-(64,5) = ":" │ │ │ ├── value_loc: (64,5)-(64,6) = "a" │ │ │ ├── closing_loc: ∅ @@ -924,24 +943,29 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (64,8)-(64,15)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (64,8)-(64,10)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (64,8)-(64,9) = "b" │ │ │ ├── closing_loc: (64,9)-(64,10) = ":" │ │ │ └── unescaped: "b" │ │ ├── value: │ │ │ @ TrueNode (location: (64,11)-(64,15)) + │ │ │ └── flags: static_literal │ │ └── operator_loc: ∅ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (64,16)-(64,36)) + │ ├── flags: ∅ │ ├── locals: [:a, :b] │ ├── parameters: │ │ @ BlockParametersNode (location: (64,19)-(64,25)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (64,20)-(64,24)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 2) │ │ │ │ ├── @ RequiredParameterNode (location: (64,20)-(64,21)) │ │ │ │ │ ├── flags: ∅ @@ -960,9 +984,10 @@ │ │ └── closing_loc: (64,24)-(64,25) = "|" │ ├── body: │ │ @ StatementsNode (location: (64,26)-(64,32)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (64,26)-(64,32)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -973,6 +998,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (64,31)-(64,32)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ ├── closing_loc: ∅ @@ -980,7 +1006,7 @@ │ ├── opening_loc: (64,16)-(64,18) = "do" │ └── closing_loc: (64,33)-(64,36) = "end" ├── @ CallNode (location: (66,0)-(66,17)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :hi @@ -994,16 +1020,17 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (66,3)-(66,17)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (66,3)-(66,9)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (66,3)-(66,8) = "there" │ │ │ ├── closing_loc: (66,8)-(66,9) = ":" │ │ │ └── unescaped: "there" │ │ ├── value: │ │ │ @ SymbolNode (location: (66,10)-(66,17)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (66,10)-(66,11) = ":" │ │ │ ├── value_loc: (66,11)-(66,17) = "friend" │ │ │ ├── closing_loc: ∅ @@ -1012,7 +1039,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (68,0)-(68,40)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :hi @@ -1026,39 +1053,43 @@ │ │ ├── flags: ∅ │ │ └── elements: (length: 3) │ │ ├── @ AssocNode (location: (68,3)-(68,20)) + │ │ │ ├── flags: static_literal │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (68,3)-(68,9)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (68,3)-(68,4) = ":" │ │ │ │ ├── value_loc: (68,4)-(68,9) = "there" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "there" │ │ │ ├── value: │ │ │ │ @ SymbolNode (location: (68,13)-(68,20)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (68,13)-(68,14) = ":" │ │ │ │ ├── value_loc: (68,14)-(68,20) = "friend" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "friend" │ │ │ └── operator_loc: (68,10)-(68,12) = "=>" │ │ ├── @ AssocSplatNode (location: (68,22)-(68,26)) + │ │ │ ├── flags: ∅ │ │ │ ├── value: │ │ │ │ @ HashNode (location: (68,24)-(68,26)) + │ │ │ │ ├── flags: static_literal │ │ │ │ ├── opening_loc: (68,24)-(68,25) = "{" │ │ │ │ ├── elements: (length: 0) │ │ │ │ └── closing_loc: (68,25)-(68,26) = "}" │ │ │ └── operator_loc: (68,22)-(68,24) = "**" │ │ └── @ AssocNode (location: (68,28)-(68,40)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (68,28)-(68,35)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (68,28)-(68,34) = "whatup" │ │ │ ├── closing_loc: (68,34)-(68,35) = ":" │ │ │ └── unescaped: "whatup" │ │ ├── value: │ │ │ @ SymbolNode (location: (68,36)-(68,40)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (68,36)-(68,37) = ":" │ │ │ ├── value_loc: (68,37)-(68,40) = "dog" │ │ │ ├── closing_loc: ∅ @@ -1067,7 +1098,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (70,0)-(70,41)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :hi @@ -1081,39 +1112,43 @@ │ │ ├── flags: ∅ │ │ └── elements: (length: 3) │ │ ├── @ AssocNode (location: (70,3)-(70,20)) + │ │ │ ├── flags: static_literal │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (70,3)-(70,9)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (70,3)-(70,4) = ":" │ │ │ │ ├── value_loc: (70,4)-(70,9) = "there" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "there" │ │ │ ├── value: │ │ │ │ @ SymbolNode (location: (70,13)-(70,20)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (70,13)-(70,14) = ":" │ │ │ │ ├── value_loc: (70,14)-(70,20) = "friend" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "friend" │ │ │ └── operator_loc: (70,10)-(70,12) = "=>" │ │ ├── @ AssocSplatNode (location: (70,22)-(70,26)) + │ │ │ ├── flags: ∅ │ │ │ ├── value: │ │ │ │ @ HashNode (location: (70,24)-(70,26)) + │ │ │ │ ├── flags: static_literal │ │ │ │ ├── opening_loc: (70,24)-(70,25) = "{" │ │ │ │ ├── elements: (length: 0) │ │ │ │ └── closing_loc: (70,25)-(70,26) = "}" │ │ │ └── operator_loc: (70,22)-(70,24) = "**" │ │ └── @ AssocNode (location: (70,28)-(70,40)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (70,28)-(70,35)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (70,28)-(70,34) = "whatup" │ │ │ ├── closing_loc: (70,34)-(70,35) = ":" │ │ │ └── unescaped: "whatup" │ │ ├── value: │ │ │ @ SymbolNode (location: (70,36)-(70,40)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (70,36)-(70,37) = ":" │ │ │ ├── value_loc: (70,37)-(70,40) = "dog" │ │ │ ├── closing_loc: ∅ @@ -1122,7 +1157,7 @@ │ ├── closing_loc: (70,40)-(70,41) = ")" │ └── block: ∅ ├── @ CallNode (location: (72,0)-(72,35)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1133,44 +1168,50 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ HashNode (location: (72,4)-(72,26)) + │ │ ├── flags: static_literal │ │ ├── opening_loc: (72,4)-(72,5) = "{" │ │ ├── elements: (length: 2) │ │ │ ├── @ AssocNode (location: (72,6)-(72,13)) + │ │ │ │ ├── flags: static_literal │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (72,6)-(72,8)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (72,6)-(72,7) = "a" │ │ │ │ │ ├── closing_loc: (72,7)-(72,8) = ":" │ │ │ │ │ └── unescaped: "a" │ │ │ │ ├── value: │ │ │ │ │ @ TrueNode (location: (72,9)-(72,13)) + │ │ │ │ │ └── flags: static_literal │ │ │ │ └── operator_loc: ∅ │ │ │ └── @ AssocNode (location: (72,15)-(72,23)) + │ │ │ ├── flags: static_literal │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (72,15)-(72,17)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (72,15)-(72,16) = "b" │ │ │ │ ├── closing_loc: (72,16)-(72,17) = ":" │ │ │ │ └── unescaped: "b" │ │ │ ├── value: │ │ │ │ @ FalseNode (location: (72,18)-(72,23)) + │ │ │ │ └── flags: static_literal │ │ │ └── operator_loc: ∅ │ │ └── closing_loc: (72,25)-(72,26) = "}" │ ├── closing_loc: (72,35)-(72,36) = ")" │ └── block: │ @ BlockArgumentNode (location: (72,28)-(72,35)) + │ ├── flags: ∅ │ ├── expression: │ │ @ SymbolNode (location: (72,29)-(72,35)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (72,29)-(72,30) = ":" │ │ ├── value_loc: (72,30)-(72,35) = "block" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "block" │ └── operator_loc: (72,28)-(72,29) = "&" ├── @ CallNode (location: (74,0)-(74,20)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :hi @@ -1184,16 +1225,17 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (74,3)-(74,20)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (74,3)-(74,9)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (74,3)-(74,4) = ":" │ │ │ ├── value_loc: (74,4)-(74,9) = "there" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "there" │ │ ├── value: │ │ │ @ SymbolNode (location: (74,13)-(74,20)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (74,13)-(74,14) = ":" │ │ │ ├── value_loc: (74,14)-(74,20) = "friend" │ │ │ ├── closing_loc: ∅ @@ -1202,7 +1244,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (76,0)-(78,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1213,13 +1255,13 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ SymbolNode (location: (76,4)-(76,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (76,4)-(76,5) = ":" │ │ │ ├── value_loc: (76,5)-(76,6) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ └── @ SymbolNode (location: (77,0)-(77,2)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (77,0)-(77,1) = ":" │ │ ├── value_loc: (77,1)-(77,2) = "b" │ │ ├── closing_loc: ∅ @@ -1227,7 +1269,7 @@ │ ├── closing_loc: (78,0)-(78,1) = ")" │ └── block: ∅ ├── @ CallNode (location: (80,0)-(83,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1238,7 +1280,7 @@ │ │ ├── flags: contains_keywords │ │ └── arguments: (length: 2) │ │ ├── @ SymbolNode (location: (81,0)-(81,2)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (81,0)-(81,1) = ":" │ │ │ ├── value_loc: (81,1)-(81,2) = "a" │ │ │ ├── closing_loc: ∅ @@ -1247,16 +1289,17 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (82,0)-(82,5)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (82,0)-(82,2)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (82,0)-(82,1) = "b" │ │ │ ├── closing_loc: (82,1)-(82,2) = ":" │ │ │ └── unescaped: "b" │ │ ├── value: │ │ │ @ SymbolNode (location: (82,3)-(82,5)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (82,3)-(82,4) = ":" │ │ │ ├── value_loc: (82,4)-(82,5) = "c" │ │ │ ├── closing_loc: ∅ @@ -1265,7 +1308,7 @@ │ ├── closing_loc: (83,0)-(83,1) = ")" │ └── block: ∅ ├── @ CallNode (location: (85,0)-(85,11)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1275,16 +1318,17 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockArgumentNode (location: (85,4)-(85,11)) + │ ├── flags: ∅ │ ├── expression: │ │ @ SymbolNode (location: (85,5)-(85,11)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (85,5)-(85,6) = ":" │ │ ├── value_loc: (85,6)-(85,11) = "block" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "block" │ └── operator_loc: (85,4)-(85,5) = "&" ├── @ CallNode (location: (87,0)-(87,30)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1298,40 +1342,45 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 2) │ │ ├── @ AssocNode (location: (87,4)-(87,11)) + │ │ │ ├── flags: static_literal │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (87,4)-(87,6)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (87,4)-(87,5) = "a" │ │ │ │ ├── closing_loc: (87,5)-(87,6) = ":" │ │ │ │ └── unescaped: "a" │ │ │ ├── value: │ │ │ │ @ TrueNode (location: (87,7)-(87,11)) + │ │ │ │ └── flags: static_literal │ │ │ └── operator_loc: ∅ │ │ └── @ AssocNode (location: (87,13)-(87,21)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (87,13)-(87,15)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (87,13)-(87,14) = "b" │ │ │ ├── closing_loc: (87,14)-(87,15) = ":" │ │ │ └── unescaped: "b" │ │ ├── value: │ │ │ @ FalseNode (location: (87,16)-(87,21)) + │ │ │ └── flags: static_literal │ │ └── operator_loc: ∅ │ ├── closing_loc: ∅ │ └── block: │ @ BlockArgumentNode (location: (87,23)-(87,30)) + │ ├── flags: ∅ │ ├── expression: │ │ @ SymbolNode (location: (87,24)-(87,30)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (87,24)-(87,25) = ":" │ │ ├── value_loc: (87,25)-(87,30) = "block" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "block" │ └── operator_loc: (87,23)-(87,24) = "&" ├── @ CallNode (location: (89,0)-(89,21)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :some_func @@ -1342,30 +1391,32 @@ │ │ ├── flags: contains_keywords │ │ └── arguments: (length: 2) │ │ ├── @ IntegerNode (location: (89,10)-(89,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ KeywordHashNode (location: (89,13)-(89,21)) │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (89,13)-(89,21)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (89,13)-(89,19)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (89,13)-(89,18) = "kwarg" │ │ │ ├── closing_loc: (89,18)-(89,19) = ":" │ │ │ └── unescaped: "kwarg" │ │ ├── value: │ │ │ @ IntegerNode (location: (89,20)-(89,21)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (91,0)-(91,18)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (91,0)-(91,6)) + │ │ ├── flags: ∅ │ │ └── name: :Kernel │ ├── call_operator_loc: (91,6)-(91,7) = "." │ ├── name: :Integer @@ -1376,12 +1427,12 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (91,15)-(91,17)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 10 │ ├── closing_loc: (91,17)-(91,18) = ")" │ └── block: ∅ ├── @ CallNode (location: (93,0)-(93,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (93,0)-(93,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -1401,13 +1452,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (93,7)-(93,10)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ │ ├── opening_loc: (93,7)-(93,8) = "{" │ └── closing_loc: (93,9)-(93,10) = "}" ├── @ CallNode (location: (95,0)-(95,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (95,0)-(95,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1427,21 +1479,26 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (95,8)-(95,14)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (95,10)-(95,12)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ BackReferenceReadNode (location: (95,10)-(95,12)) + │ │ ├── flags: newline │ │ └── name: :$& │ ├── opening_loc: (95,8)-(95,9) = "{" │ └── closing_loc: (95,13)-(95,14) = "}" ├── @ CallNode (location: (97,0)-(97,12)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantPathNode (location: (97,0)-(97,4)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantReadNode (location: (97,0)-(97,1)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── name: :B │ │ ├── delimiter_loc: (97,1)-(97,3) = "::" @@ -1455,7 +1512,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SymbolNode (location: (97,8)-(97,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (97,8)-(97,9) = ":" │ │ ├── value_loc: (97,9)-(97,12) = "foo" │ │ ├── closing_loc: ∅ @@ -1463,11 +1520,13 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (99,0)-(99,13)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantPathNode (location: (99,0)-(99,4)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantReadNode (location: (99,0)-(99,1)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── name: :B │ │ ├── delimiter_loc: (99,1)-(99,3) = "::" @@ -1481,7 +1540,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SymbolNode (location: (99,8)-(99,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (99,8)-(99,9) = ":" │ │ ├── value_loc: (99,9)-(99,12) = "foo" │ │ ├── closing_loc: ∅ @@ -1489,11 +1548,13 @@ │ ├── closing_loc: (99,12)-(99,13) = ")" │ └── block: ∅ ├── @ CallNode (location: (101,0)-(101,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantPathNode (location: (101,0)-(101,4)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantReadNode (location: (101,0)-(101,1)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── name: :B │ │ ├── delimiter_loc: (101,1)-(101,3) = "::" @@ -1507,7 +1568,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SymbolNode (location: (101,8)-(101,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (101,8)-(101,9) = ":" │ │ ├── value_loc: (101,9)-(101,12) = "foo" │ │ ├── closing_loc: ∅ @@ -1515,13 +1576,14 @@ │ ├── closing_loc: (101,12)-(101,13) = ")" │ └── block: │ @ BlockNode (location: (101,14)-(101,17)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ │ ├── opening_loc: (101,14)-(101,15) = "{" │ └── closing_loc: (101,16)-(101,17) = "}" ├── @ CallNode (location: (103,0)-(103,12)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1535,22 +1597,23 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (103,4)-(103,11)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (103,4)-(103,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (103,4)-(103,5) = "\"" │ │ │ ├── value_loc: (103,5)-(103,6) = "a" │ │ │ ├── closing_loc: (103,6)-(103,8) = "\":" │ │ │ └── unescaped: "a" │ │ ├── value: │ │ │ @ IntegerNode (location: (103,9)-(103,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: -1 │ │ └── operator_loc: ∅ │ ├── closing_loc: (103,11)-(103,12) = ")" │ └── block: ∅ ├── @ CallNode (location: (105,0)-(105,28)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1564,21 +1627,24 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (105,4)-(105,28)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (105,4)-(105,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (105,4)-(105,7) = "bar" │ │ │ ├── closing_loc: (105,7)-(105,8) = ":" │ │ │ └── unescaped: "bar" │ │ ├── value: │ │ │ @ HashNode (location: (105,9)-(105,28)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (105,9)-(105,10) = "{" │ │ │ ├── elements: (length: 1) │ │ │ │ └── @ AssocNode (location: (105,11)-(105,26)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (105,11)-(105,15)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (105,11)-(105,14) = "baz" │ │ │ │ │ ├── closing_loc: (105,14)-(105,15) = ":" @@ -1595,6 +1661,7 @@ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── block: │ │ │ │ │ @ BlockNode (location: (105,20)-(105,26)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── locals: [] │ │ │ │ │ ├── parameters: ∅ │ │ │ │ │ ├── body: ∅ @@ -1606,7 +1673,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (107,0)-(107,24)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1620,18 +1687,21 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (107,4)-(107,24)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (107,4)-(107,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (107,4)-(107,7) = "bar" │ │ │ ├── closing_loc: (107,7)-(107,8) = ":" │ │ │ └── unescaped: "bar" │ │ ├── value: │ │ │ @ HashNode (location: (107,9)-(107,24)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (107,9)-(107,10) = "{" │ │ │ ├── elements: (length: 1) │ │ │ │ └── @ AssocSplatNode (location: (107,11)-(107,22)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── value: │ │ │ │ │ @ CallNode (location: (107,13)-(107,22)) │ │ │ │ │ ├── flags: ignore_visibility @@ -1644,6 +1714,7 @@ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── block: │ │ │ │ │ @ BlockNode (location: (107,16)-(107,22)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── locals: [] │ │ │ │ │ ├── parameters: ∅ │ │ │ │ │ ├── body: ∅ @@ -1655,7 +1726,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (109,0)-(109,36)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1670,9 +1741,11 @@ │ │ ├── opening_loc: (109,4)-(109,5) = "\"" │ │ ├── parts: (length: 1) │ │ │ └── @ EmbeddedStatementsNode (location: (109,5)-(109,28)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (109,5)-(109,7) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (109,7)-(109,27)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (109,7)-(109,27)) │ │ │ │ ├── flags: ∅ @@ -1695,13 +1768,15 @@ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: │ │ │ │ @ BlockNode (location: (109,15)-(109,27)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── locals: [] │ │ │ │ ├── parameters: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (109,18)-(109,23)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ StringNode (location: (109,18)-(109,23)) - │ │ │ │ │ ├── flags: ∅ + │ │ │ │ │ ├── flags: newline │ │ │ │ │ ├── opening_loc: (109,18)-(109,19) = "\"" │ │ │ │ │ ├── content_loc: (109,19)-(109,22) = "baz" │ │ │ │ │ ├── closing_loc: (109,22)-(109,23) = "\"" @@ -1713,13 +1788,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (109,30)-(109,36)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ │ ├── opening_loc: (109,30)-(109,32) = "do" │ └── closing_loc: (109,33)-(109,36) = "end" ├── @ CallNode (location: (111,0)-(111,28)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1730,18 +1806,21 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ClassNode (location: (111,4)-(111,28)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── class_keyword_loc: (111,4)-(111,9) = "class" │ │ ├── constant_path: │ │ │ @ ConstantReadNode (location: (111,10)-(111,13)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Bar │ │ ├── inheritance_operator_loc: ∅ │ │ ├── superclass: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (111,14)-(111,24)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (111,14)-(111,24)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :baz @@ -1751,6 +1830,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: │ │ │ @ BlockNode (location: (111,18)-(111,24)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [] │ │ │ ├── parameters: ∅ │ │ │ ├── body: ∅ @@ -1761,7 +1841,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (113,0)-(113,29)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1772,16 +1852,19 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ModuleNode (location: (113,4)-(113,29)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── module_keyword_loc: (113,4)-(113,10) = "module" │ │ ├── constant_path: │ │ │ @ ConstantReadNode (location: (113,11)-(113,14)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Bar │ │ ├── body: │ │ │ @ StatementsNode (location: (113,15)-(113,25)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (113,15)-(113,25)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :baz @@ -1791,6 +1874,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: │ │ │ @ BlockNode (location: (113,19)-(113,25)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [] │ │ │ ├── parameters: ∅ │ │ │ ├── body: ∅ @@ -1801,7 +1885,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (115,0)-(115,16)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1825,6 +1909,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: │ │ │ @ BlockNode (location: (115,9)-(115,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [] │ │ │ ├── parameters: ∅ │ │ │ ├── body: ∅ @@ -1835,7 +1920,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (117,0)-(117,28)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :p @@ -1846,15 +1931,17 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ BeginNode (location: (117,2)-(117,28)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: (117,2)-(117,7) = "begin" │ │ ├── statements: │ │ │ @ StatementsNode (location: (117,8)-(117,24)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (117,8)-(117,24)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ IntegerNode (location: (117,8)-(117,9)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── call_operator_loc: (117,9)-(117,10) = "." │ │ │ ├── name: :times @@ -1864,13 +1951,15 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: │ │ │ @ BlockNode (location: (117,16)-(117,24)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [] │ │ │ ├── parameters: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (117,19)-(117,20)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (117,19)-(117,20)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── opening_loc: (117,16)-(117,18) = "do" │ │ │ └── closing_loc: (117,21)-(117,24) = "end" @@ -1881,7 +1970,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (119,0)-(124,5)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1892,12 +1981,13 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ SymbolNode (location: (119,4)-(119,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (119,4)-(119,5) = ":" │ │ │ ├── value_loc: (119,5)-(119,6) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ └── @ IfNode (location: (120,2)-(124,5)) + │ │ ├── flags: newline │ │ ├── if_keyword_loc: (120,2)-(120,4) = "if" │ │ ├── predicate: │ │ │ @ CallNode (location: (120,5)-(120,6)) @@ -1913,9 +2003,10 @@ │ │ ├── then_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (121,4)-(123,7)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (121,4)-(123,7)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -1925,11 +2016,14 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: │ │ │ @ BlockNode (location: (121,8)-(123,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [:a] │ │ │ ├── parameters: │ │ │ │ @ BlockParametersNode (location: (121,11)-(121,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── parameters: │ │ │ │ │ @ ParametersNode (location: (121,12)-(121,13)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ │ └── @ RequiredParameterNode (location: (121,12)-(121,13)) │ │ │ │ │ │ ├── flags: ∅ @@ -1945,8 +2039,10 @@ │ │ │ │ └── closing_loc: (121,13)-(121,14) = "|" │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (122,6)-(122,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (122,6)-(122,7)) + │ │ │ │ ├── flags: newline │ │ │ │ ├── name: :a │ │ │ │ └── depth: 0 │ │ │ ├── opening_loc: (121,8)-(121,10) = "do" @@ -1956,7 +2052,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (126,0)-(135,5)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1967,7 +2063,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 3) │ │ ├── @ SymbolNode (location: (126,4)-(126,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (126,4)-(126,5) = ":" │ │ │ ├── value_loc: (126,5)-(126,6) = "a" │ │ │ ├── closing_loc: ∅ @@ -1989,9 +2085,10 @@ │ │ │ │ └── block: ∅ │ │ │ └── statements: │ │ │ @ StatementsNode (location: (128,4)-(130,7)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (128,4)-(130,7)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -2001,11 +2098,14 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: │ │ │ @ BlockNode (location: (128,8)-(130,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [:a] │ │ │ ├── parameters: │ │ │ │ @ BlockParametersNode (location: (128,11)-(128,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── parameters: │ │ │ │ │ @ ParametersNode (location: (128,12)-(128,13)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ │ └── @ RequiredParameterNode (location: (128,12)-(128,13)) │ │ │ │ │ │ ├── flags: ∅ @@ -2021,8 +2121,10 @@ │ │ │ │ └── closing_loc: (128,13)-(128,14) = "|" │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (129,6)-(129,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (129,6)-(129,7)) + │ │ │ │ ├── flags: newline │ │ │ │ ├── name: :a │ │ │ │ └── depth: 0 │ │ │ ├── opening_loc: (128,8)-(128,10) = "do" @@ -2044,9 +2146,10 @@ │ │ │ └── block: ∅ │ │ └── statements: │ │ @ StatementsNode (location: (133,4)-(134,7)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (133,4)-(134,7)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :baz @@ -2056,6 +2159,7 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (133,8)-(134,7)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: ∅ @@ -2064,9 +2168,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (137,0)-(137,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ HashNode (location: (137,0)-(137,2)) + │ │ ├── flags: static_literal │ │ ├── opening_loc: (137,0)-(137,1) = "{" │ │ ├── elements: (length: 0) │ │ └── closing_loc: (137,1)-(137,2) = "}" @@ -2089,6 +2194,7 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (137,7)-(137,9)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: ∅ @@ -2097,9 +2203,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (139,0)-(139,16)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ HashNode (location: (139,0)-(139,2)) + │ │ ├── flags: static_literal │ │ ├── opening_loc: (139,0)-(139,1) = "{" │ │ ├── elements: (length: 0) │ │ └── closing_loc: (139,1)-(139,2) = "}" @@ -2122,11 +2229,14 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (139,7)-(139,16)) + │ │ ├── flags: ∅ │ │ ├── locals: [:a] │ │ ├── parameters: │ │ │ @ BlockParametersNode (location: (139,9)-(139,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── parameters: │ │ │ │ @ ParametersNode (location: (139,10)-(139,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ └── @ RequiredParameterNode (location: (139,10)-(139,11)) │ │ │ │ │ ├── flags: ∅ @@ -2142,8 +2252,10 @@ │ │ │ └── closing_loc: (139,11)-(139,12) = "|" │ │ ├── body: │ │ │ @ StatementsNode (location: (139,13)-(139,14)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (139,13)-(139,14)) + │ │ │ ├── flags: newline │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ ├── opening_loc: (139,7)-(139,8) = "{" @@ -2151,7 +2263,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (141,0)-(141,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (141,0)-(141,4)) │ │ ├── flags: ignore_visibility @@ -2164,6 +2276,7 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (141,2)-(141,4)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: ∅ @@ -2188,6 +2301,7 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (141,9)-(141,11)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: ∅ @@ -2196,7 +2310,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (143,0)-(143,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (143,0)-(143,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2227,6 +2341,7 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (143,9)-(143,11)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: ∅ @@ -2235,13 +2350,15 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ InterpolatedStringNode (location: (145,0)-(145,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (145,0)-(145,1) = "\"" │ ├── parts: (length: 1) │ │ └── @ EmbeddedStatementsNode (location: (145,1)-(145,16)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (145,1)-(145,3) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (145,4)-(145,14)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (145,4)-(145,14)) │ │ │ ├── flags: ignore_visibility @@ -2255,11 +2372,13 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ ParenthesesNode (location: (145,9)-(145,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (145,10)-(145,13)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ StringNode (location: (145,10)-(145,13)) - │ │ │ │ │ ├── flags: ∅ + │ │ │ │ │ ├── flags: newline │ │ │ │ │ ├── opening_loc: (145,10)-(145,11) = "\"" │ │ │ │ │ ├── content_loc: (145,11)-(145,12) = " " │ │ │ │ │ ├── closing_loc: (145,12)-(145,13) = "\"" @@ -2271,20 +2390,24 @@ │ │ └── closing_loc: (145,15)-(145,16) = "}" │ └── closing_loc: (145,16)-(145,17) = "\"" ├── @ InterpolatedStringNode (location: (147,0)-(147,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (147,0)-(147,1) = "\"" │ ├── parts: (length: 1) │ │ └── @ EmbeddedStatementsNode (location: (147,1)-(147,7)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (147,1)-(147,3) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (147,3)-(147,6)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ ParenthesesNode (location: (147,3)-(147,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (147,4)-(147,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (147,4)-(147,5)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :v @@ -2298,11 +2421,13 @@ │ │ └── closing_loc: (147,6)-(147,7) = "}" │ └── closing_loc: (147,7)-(147,8) = "\"" ├── @ DefNode (location: (149,0)-(149,18)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (149,4)-(149,5) = "f" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (149,6)-(149,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -2317,9 +2442,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (149,10)-(149,13)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (149,10)-(149,13)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :p @@ -2330,6 +2456,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ SplatNode (location: (149,12)-(149,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (149,12)-(149,13) = "*" │ │ │ └── expression: ∅ │ │ ├── closing_loc: ∅ @@ -2342,7 +2469,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (149,15)-(149,18) = "end" ├── @ CallNode (location: (151,0)-(151,16)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -2353,7 +2480,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ IntegerNode (location: (151,4)-(151,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ CallNode (location: (151,7)-(151,16)) │ │ ├── flags: ignore_visibility @@ -2366,29 +2493,32 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (151,11)-(151,16)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (151,13)-(151,14)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ IntegerNode (location: (151,13)-(151,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: newline, static_literal, decimal │ │ │ └── value: 1 │ │ ├── opening_loc: (151,11)-(151,12) = "{" │ │ └── closing_loc: (151,15)-(151,16) = "}" │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ LocalVariableWriteNode (location: (153,0)-(153,7)) + │ ├── flags: newline │ ├── name: :foo │ ├── depth: 0 │ ├── name_loc: (153,0)-(153,3) = "foo" │ ├── value: │ │ @ IntegerNode (location: (153,6)-(153,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (153,4)-(153,5) = "=" ├── @ CallNode (location: (154,0)-(154,6)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -2398,15 +2528,17 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (154,4)-(154,6)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ │ ├── opening_loc: (154,4)-(154,5) = "{" │ └── closing_loc: (154,5)-(154,6) = "}" └── @ CallNode (location: (156,0)-(156,19)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ InstanceVariableReadNode (location: (156,0)-(156,2)) + │ ├── flags: ∅ │ └── name: :@a ├── call_operator_loc: (156,2)-(156,3) = "." ├── name: :b @@ -2420,20 +2552,24 @@ │ ├── flags: ∅ │ └── elements: (length: 1) │ └── @ AssocNode (location: (156,5)-(156,19)) + │ ├── flags: ∅ │ ├── key: │ │ @ InterpolatedSymbolNode (location: (156,5)-(156,16)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (156,5)-(156,6) = "\"" │ │ ├── parts: (length: 2) │ │ │ ├── @ StringNode (location: (156,6)-(156,7)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (156,6)-(156,7) = "c" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "c" │ │ │ └── @ EmbeddedStatementsNode (location: (156,7)-(156,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (156,7)-(156,9) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (156,9)-(156,13)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (156,9)-(156,13)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -2449,7 +2585,7 @@ │ │ └── closing_loc: (156,14)-(156,16) = "\":" │ ├── value: │ │ @ IntegerNode (location: (156,17)-(156,19)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ └── operator_loc: ∅ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/methods.txt b/test/prism/snapshots/methods.txt index b38640399b0..0fd1a7f43aa 100644 --- a/test/prism/snapshots/methods.txt +++ b/test/prism/snapshots/methods.txt @@ -1,16 +1,21 @@ @ ProgramNode (location: (1,0)-(183,37)) +├── flags: ∅ ├── locals: [:a, :c, :foo] └── statements: @ StatementsNode (location: (1,0)-(183,37)) + ├── flags: ∅ └── body: (length: 69) ├── @ DefNode (location: (1,0)-(2,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (1,4)-(1,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,8)-(1,18)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,18)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 2) │ │ │ │ ├── @ RequiredParameterNode (location: (1,9)-(1,12)) │ │ │ │ │ ├── flags: ∅ @@ -37,13 +42,16 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (2,0)-(2,3) = "end" ├── @ DefNode (location: (4,0)-(5,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (4,4)-(4,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (4,8)-(4,44)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ MultiTargetNode (location: (4,8)-(4,18)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 2) │ │ │ │ ├── @ RequiredParameterNode (location: (4,9)-(4,12)) │ │ │ │ │ ├── flags: ∅ @@ -63,11 +71,12 @@ │ │ │ ├── operator_loc: (4,29)-(4,30) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (4,31)-(4,32)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rest: ∅ │ │ ├── posts: (length: 1) │ │ │ └── @ MultiTargetNode (location: (4,34)-(4,44)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 2) │ │ │ │ ├── @ RequiredParameterNode (location: (4,35)-(4,38)) │ │ │ │ │ ├── flags: ∅ @@ -91,18 +100,21 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (5,0)-(5,3) = "end" ├── @ DefNode (location: (8,0)-(8,18)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (8,4)-(8,5) = "a" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (8,0)-(8,18)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── rescue_clause: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: │ │ │ @ EnsureNode (location: (8,7)-(8,18)) + │ │ │ ├── flags: ∅ │ │ │ ├── ensure_keyword_loc: (8,7)-(8,13) = "ensure" │ │ │ ├── statements: ∅ │ │ │ └── end_keyword_loc: (8,15)-(8,18) = "end" @@ -115,10 +127,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (8,15)-(8,18) = "end" ├── @ DefNode (location: (10,0)-(11,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (10,8)-(10,9) = "a" │ ├── receiver: │ │ @ ParenthesesNode (location: (10,4)-(10,7)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ CallNode (location: (10,5)-(10,6)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -142,10 +156,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ DefNode (location: (13,0)-(14,3)) + │ ├── flags: newline │ ├── name: :b │ ├── name_loc: (13,9)-(13,10) = "b" │ ├── receiver: │ │ @ ParenthesesNode (location: (13,4)-(13,7)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ CallNode (location: (13,5)-(13,6)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -169,10 +185,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (14,0)-(14,3) = "end" ├── @ DefNode (location: (16,0)-(17,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (16,10)-(16,11) = "a" │ ├── receiver: │ │ @ FalseNode (location: (16,4)-(16,9)) + │ │ └── flags: static_literal │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -183,11 +201,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (17,0)-(17,3) = "end" ├── @ DefNode (location: (19,0)-(20,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (19,4)-(19,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (19,6)-(19,9)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -195,6 +215,7 @@ │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (19,6)-(19,9)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -205,10 +226,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (20,0)-(20,3) = "end" ├── @ DefNode (location: (22,0)-(23,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (22,9)-(22,10) = "a" │ ├── receiver: │ │ @ GlobalVariableReadNode (location: (22,4)-(22,8)) + │ │ ├── flags: ∅ │ │ └── name: :$var │ ├── parameters: ∅ │ ├── body: ∅ @@ -220,6 +243,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (23,0)-(23,3) = "end" ├── @ DefNode (location: (25,0)-(26,3)) + │ ├── flags: newline │ ├── name: :b │ ├── name_loc: (25,6)-(25,7) = "b" │ ├── receiver: @@ -243,10 +267,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (26,0)-(26,3) = "end" ├── @ DefNode (location: (28,0)-(29,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (28,9)-(28,10) = "a" │ ├── receiver: │ │ @ InstanceVariableReadNode (location: (28,4)-(28,8)) + │ │ ├── flags: ∅ │ │ └── name: :@var │ ├── parameters: ∅ │ ├── body: ∅ @@ -258,11 +284,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (29,0)-(29,3) = "end" ├── @ DefNode (location: (31,0)-(31,13)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (31,4)-(31,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (31,6)-(31,8)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -283,17 +311,19 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (31,10)-(31,13) = "end" ├── @ StringNode (location: (33,0)-(33,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (33,0)-(33,2) = "%," │ ├── content_loc: (33,2)-(33,5) = "abc" │ ├── closing_loc: (33,5)-(33,6) = "," │ └── unescaped: "abc" ├── @ DefNode (location: (35,0)-(36,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (35,4)-(35,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (35,6)-(35,8)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -314,11 +344,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (36,0)-(36,3) = "end" ├── @ DefNode (location: (38,0)-(39,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (38,4)-(38,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (38,6)-(38,9)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -340,11 +372,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (39,0)-(39,3) = "end" ├── @ DefNode (location: (41,0)-(42,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (41,4)-(41,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (41,6)-(41,8)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -366,15 +400,17 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (42,0)-(42,3) = "end" ├── @ LocalVariableWriteNode (location: (44,0)-(44,5)) + │ ├── flags: newline │ ├── name: :a │ ├── depth: 0 │ ├── name_loc: (44,0)-(44,1) = "a" │ ├── value: │ │ @ IntegerNode (location: (44,4)-(44,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (44,2)-(44,3) = "=" ├── @ DefNode (location: (44,7)-(45,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (44,11)-(44,12) = "a" │ ├── receiver: ∅ @@ -388,11 +424,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (45,0)-(45,3) = "end" ├── @ DefNode (location: (47,0)-(48,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (47,4)-(47,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (47,6)-(47,13)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 3) │ │ │ ├── @ RequiredParameterNode (location: (47,6)-(47,7)) │ │ │ │ ├── flags: ∅ @@ -418,10 +456,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (48,0)-(48,3) = "end" ├── @ DefNode (location: (50,0)-(51,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (50,8)-(50,9) = "a" │ ├── receiver: │ │ @ NilNode (location: (50,4)-(50,7)) + │ │ └── flags: static_literal │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -432,11 +472,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (51,0)-(51,3) = "end" ├── @ DefNode (location: (53,0)-(54,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (53,4)-(53,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (53,6)-(53,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -452,7 +494,7 @@ │ │ │ ├── name_loc: (53,10)-(53,12) = "c:" │ │ │ └── value: │ │ │ @ IntegerNode (location: (53,13)-(53,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── keyword_rest: ∅ │ │ └── block: ∅ @@ -465,11 +507,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (54,0)-(54,3) = "end" ├── @ DefNode (location: (56,0)-(57,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (56,4)-(56,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (56,6)-(56,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -485,7 +529,7 @@ │ │ │ ├── name_loc: (56,10)-(56,12) = "c:" │ │ │ └── value: │ │ │ @ IntegerNode (location: (56,13)-(56,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── keyword_rest: ∅ │ │ └── block: ∅ @@ -498,11 +542,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (57,0)-(57,3) = "end" ├── @ DefNode (location: (59,0)-(61,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (59,4)-(59,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (59,6)-(60,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -514,7 +560,7 @@ │ │ │ │ ├── name_loc: (59,6)-(59,8) = "b:" │ │ │ │ └── value: │ │ │ │ @ IntegerNode (location: (60,2)-(60,3)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── @ RequiredKeywordParameterNode (location: (60,5)-(60,7)) │ │ │ ├── flags: ∅ @@ -531,17 +577,19 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (61,0)-(61,3) = "end" ├── @ StringNode (location: (63,0)-(63,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (63,0)-(63,2) = "%." │ ├── content_loc: (63,2)-(63,5) = "abc" │ ├── closing_loc: (63,5)-(63,6) = "." │ └── unescaped: "abc" ├── @ DefNode (location: (65,0)-(66,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (65,4)-(65,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (65,6)-(65,18)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 2) │ │ │ ├── @ OptionalParameterNode (location: (65,6)-(65,11)) @@ -551,7 +599,7 @@ │ │ │ │ ├── operator_loc: (65,8)-(65,9) = "=" │ │ │ │ └── value: │ │ │ │ @ IntegerNode (location: (65,10)-(65,11)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── @ OptionalParameterNode (location: (65,13)-(65,18)) │ │ │ ├── flags: ∅ @@ -560,7 +608,7 @@ │ │ │ ├── operator_loc: (65,15)-(65,16) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (65,17)-(65,18)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) @@ -576,6 +624,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (66,0)-(66,3) = "end" ├── @ DefNode (location: (68,0)-(69,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (68,4)-(68,5) = "a" │ ├── receiver: ∅ @@ -589,11 +638,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (69,0)-(69,3) = "end" ├── @ DefNode (location: (71,0)-(72,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (71,4)-(71,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (71,6)-(71,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (71,6)-(71,7)) │ │ │ ├── flags: ∅ @@ -606,7 +657,7 @@ │ │ │ ├── operator_loc: (71,11)-(71,12) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (71,13)-(71,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) @@ -622,11 +673,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (72,0)-(72,3) = "end" ├── @ DefNode (location: (74,0)-(75,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (74,4)-(74,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (74,6)-(74,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (74,6)-(74,7)) │ │ │ ├── flags: ∅ @@ -646,16 +699,19 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (75,0)-(75,3) = "end" ├── @ DefNode (location: (77,0)-(77,32)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (77,4)-(77,5) = "a" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (77,0)-(77,32)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (77,7)-(77,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (77,7)-(77,13) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ @@ -664,11 +720,13 @@ │ │ │ └── consequent: ∅ │ │ ├── else_clause: │ │ │ @ ElseNode (location: (77,15)-(77,27)) + │ │ │ ├── flags: ∅ │ │ │ ├── else_keyword_loc: (77,15)-(77,19) = "else" │ │ │ ├── statements: ∅ │ │ │ └── end_keyword_loc: (77,21)-(77,27) = "ensure" │ │ ├── ensure_clause: │ │ │ @ EnsureNode (location: (77,21)-(77,32)) + │ │ │ ├── flags: ∅ │ │ │ ├── ensure_keyword_loc: (77,21)-(77,27) = "ensure" │ │ │ ├── statements: ∅ │ │ │ └── end_keyword_loc: (77,29)-(77,32) = "end" @@ -681,11 +739,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (77,29)-(77,32) = "end" ├── @ DefNode (location: (79,0)-(80,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (79,4)-(79,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (79,6)-(79,8)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -707,11 +767,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (80,0)-(80,3) = "end" ├── @ DefNode (location: (82,0)-(83,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (82,4)-(82,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (82,6)-(82,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -733,20 +795,23 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (83,0)-(83,3) = "end" ├── @ DefNode (location: (85,0)-(87,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (85,4)-(85,5) = "a" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (86,0)-(86,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableWriteNode (location: (86,0)-(86,5)) + │ │ ├── flags: newline │ │ ├── name: :b │ │ ├── depth: 0 │ │ ├── name_loc: (86,0)-(86,1) = "b" │ │ ├── value: │ │ │ @ IntegerNode (location: (86,4)-(86,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── operator_loc: (86,2)-(86,3) = "=" │ ├── locals: [:b] @@ -757,10 +822,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (87,0)-(87,3) = "end" ├── @ DefNode (location: (89,0)-(90,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (89,9)-(89,10) = "a" │ ├── receiver: │ │ @ SelfNode (location: (89,4)-(89,8)) + │ │ └── flags: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -771,10 +838,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (90,0)-(90,3) = "end" ├── @ DefNode (location: (92,0)-(93,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (92,9)-(92,10) = "a" │ ├── receiver: │ │ @ TrueNode (location: (92,4)-(92,8)) + │ │ └── flags: static_literal │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -785,6 +854,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (93,0)-(93,3) = "end" ├── @ DefNode (location: (95,0)-(96,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (95,4)-(95,5) = "a" │ ├── receiver: ∅ @@ -798,30 +868,35 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (96,0)-(96,3) = "end" ├── @ DefNode (location: (98,0)-(101,3)) + │ ├── flags: newline │ ├── name: :hi │ ├── name_loc: (98,4)-(98,6) = "hi" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (99,0)-(100,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 2) │ │ ├── @ IfNode (location: (99,0)-(99,18)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (99,11)-(99,13) = "if" │ │ │ ├── predicate: │ │ │ │ @ TrueNode (location: (99,14)-(99,18)) + │ │ │ │ └── flags: static_literal │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (99,0)-(99,10)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ ReturnNode (location: (99,0)-(99,10)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: newline │ │ │ │ ├── keyword_loc: (99,0)-(99,6) = "return" │ │ │ │ └── arguments: │ │ │ │ @ ArgumentsNode (location: (99,7)-(99,10)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ SymbolNode (location: (99,7)-(99,10)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (99,7)-(99,8) = ":" │ │ │ │ ├── value_loc: (99,8)-(99,10) = "hi" │ │ │ │ ├── closing_loc: ∅ @@ -829,7 +904,7 @@ │ │ │ ├── consequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ └── @ SymbolNode (location: (100,0)-(100,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (100,0)-(100,1) = ":" │ │ ├── value_loc: (100,1)-(100,4) = "bye" │ │ ├── closing_loc: ∅ @@ -842,15 +917,17 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (101,0)-(101,3) = "end" ├── @ DefNode (location: (103,0)-(103,11)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (103,4)-(103,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (103,10)-(103,11)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (103,10)-(103,11)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 │ ├── locals: [] │ ├── def_keyword_loc: (103,0)-(103,3) = "def" @@ -860,15 +937,17 @@ │ ├── equal_loc: (103,8)-(103,9) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (104,0)-(104,11)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (104,4)-(104,7) = "bar" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (104,10)-(104,11)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (104,10)-(104,11)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 2 │ ├── locals: [] │ ├── def_keyword_loc: (104,0)-(104,3) = "def" @@ -878,11 +957,13 @@ │ ├── equal_loc: (104,8)-(104,9) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (106,0)-(106,18)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (106,4)-(106,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (106,8)-(106,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (106,8)-(106,11)) │ │ │ ├── flags: ∅ @@ -895,9 +976,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (106,15)-(106,18)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (106,15)-(106,18)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 123 │ ├── locals: [:bar] │ ├── def_keyword_loc: (106,0)-(106,3) = "def" @@ -907,15 +989,17 @@ │ ├── equal_loc: (106,13)-(106,14) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (108,0)-(108,13)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (108,4)-(108,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (108,10)-(108,13)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (108,10)-(108,13)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 123 │ ├── locals: [] │ ├── def_keyword_loc: (108,0)-(108,3) = "def" @@ -925,11 +1009,13 @@ │ ├── equal_loc: (108,8)-(108,9) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (110,0)-(110,19)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (110,4)-(110,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (110,6)-(110,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -944,9 +1030,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (110,10)-(110,14)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (110,10)-(110,14)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :b @@ -957,6 +1044,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ SplatNode (location: (110,12)-(110,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (110,12)-(110,13) = "*" │ │ │ └── expression: ∅ │ │ ├── closing_loc: (110,13)-(110,14) = ")" @@ -969,11 +1057,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (110,16)-(110,19) = "end" ├── @ DefNode (location: (112,0)-(112,23)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (112,4)-(112,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (112,6)-(112,9)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -981,12 +1071,14 @@ │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (112,6)-(112,9)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (112,12)-(112,18)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (112,12)-(112,18)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :b @@ -997,6 +1089,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ForwardingArgumentsNode (location: (112,14)-(112,17)) + │ │ │ └── flags: ∅ │ │ ├── closing_loc: (112,17)-(112,18) = ")" │ │ └── block: ∅ │ ├── locals: [] @@ -1007,11 +1100,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (112,20)-(112,23) = "end" ├── @ DefNode (location: (114,0)-(114,29)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (114,4)-(114,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (114,6)-(114,9)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -1019,12 +1114,14 @@ │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (114,6)-(114,9)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (114,12)-(114,24)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (114,12)-(114,24)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :b @@ -1035,12 +1132,13 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 3) │ │ │ ├── @ IntegerNode (location: (114,14)-(114,15)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── @ IntegerNode (location: (114,17)-(114,18)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── @ ForwardingArgumentsNode (location: (114,20)-(114,23)) + │ │ │ └── flags: ∅ │ │ ├── closing_loc: (114,23)-(114,24) = ")" │ │ └── block: ∅ │ ├── locals: [] @@ -1051,12 +1149,15 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (114,26)-(114,29) = "end" ├── @ DefNode (location: (116,0)-(117,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (116,12)-(116,13) = "a" │ ├── receiver: │ │ @ ParenthesesNode (location: (116,4)-(116,11)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ LocalVariableWriteNode (location: (116,5)-(116,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :c │ │ │ ├── depth: 0 │ │ │ ├── name_loc: (116,5)-(116,6) = "c" @@ -1084,11 +1185,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (117,0)-(117,3) = "end" ├── @ DefNode (location: (119,0)-(120,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (119,4)-(119,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (119,6)-(119,8)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -1110,11 +1213,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (120,0)-(120,3) = "end" ├── @ DefNode (location: (122,0)-(123,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (122,4)-(122,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (122,6)-(122,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -1136,10 +1241,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (123,0)-(123,3) = "end" ├── @ DefNode (location: (125,0)-(126,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (125,10)-(125,11) = "a" │ ├── receiver: │ │ @ ClassVariableReadNode (location: (125,4)-(125,9)) + │ │ ├── flags: ∅ │ │ └── name: :@@var │ ├── parameters: ∅ │ ├── body: ∅ @@ -1151,12 +1258,15 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (126,0)-(126,3) = "end" ├── @ DefNode (location: (128,0)-(129,3)) + │ ├── flags: newline │ ├── name: :C │ ├── name_loc: (128,12)-(128,13) = "C" │ ├── receiver: │ │ @ ParenthesesNode (location: (128,4)-(128,11)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ LocalVariableWriteNode (location: (128,5)-(128,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ ├── depth: 0 │ │ │ ├── name_loc: (128,5)-(128,6) = "a" @@ -1184,10 +1294,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (129,0)-(129,3) = "end" ├── @ DefNode (location: (131,0)-(131,28)) + │ ├── flags: newline │ ├── name: :Array_function │ ├── name_loc: (131,9)-(131,23) = "Array_function" │ ├── receiver: │ │ @ SelfNode (location: (131,4)-(131,8)) + │ │ └── flags: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -1198,18 +1310,21 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (131,25)-(131,28) = "end" ├── @ ConstantWriteNode (location: (133,0)-(133,9)) + │ ├── flags: newline │ ├── name: :Const │ ├── name_loc: (133,0)-(133,5) = "Const" │ ├── value: │ │ @ IntegerNode (location: (133,8)-(133,9)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (133,6)-(133,7) = "=" ├── @ DefNode (location: (133,11)-(134,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (133,21)-(133,22) = "a" │ ├── receiver: │ │ @ ConstantReadNode (location: (133,15)-(133,20)) + │ │ ├── flags: ∅ │ │ └── name: :Const │ ├── parameters: ∅ │ ├── body: ∅ @@ -1221,11 +1336,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (134,0)-(134,3) = "end" ├── @ DefNode (location: (136,0)-(136,31)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (136,4)-(136,5) = "a" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (136,6)-(136,9)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -1233,24 +1350,28 @@ │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (136,6)-(136,9)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (136,12)-(136,26)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ InterpolatedStringNode (location: (136,12)-(136,26)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── opening_loc: (136,12)-(136,13) = "\"" │ │ ├── parts: (length: 2) │ │ │ ├── @ StringNode (location: (136,13)-(136,16)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (136,13)-(136,16) = "foo" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "foo" │ │ │ └── @ EmbeddedStatementsNode (location: (136,16)-(136,25)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (136,16)-(136,18) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (136,18)-(136,24)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (136,18)-(136,24)) │ │ │ │ ├── flags: ignore_visibility @@ -1264,6 +1385,7 @@ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── arguments: (length: 1) │ │ │ │ │ └── @ ForwardingArgumentsNode (location: (136,20)-(136,23)) + │ │ │ │ │ └── flags: ∅ │ │ │ │ ├── closing_loc: (136,23)-(136,24) = ")" │ │ │ │ └── block: ∅ │ │ │ └── closing_loc: (136,24)-(136,25) = "}" @@ -1276,17 +1398,20 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (136,28)-(136,31) = "end" ├── @ DefNode (location: (138,0)-(140,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (138,4)-(138,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (139,2)-(139,30)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (139,2)-(139,30)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ HashNode (location: (139,2)-(139,4)) + │ │ │ ├── flags: static_literal │ │ │ ├── opening_loc: (139,2)-(139,3) = "{" │ │ │ ├── elements: (length: 0) │ │ │ └── closing_loc: (139,3)-(139,4) = "}" @@ -1302,6 +1427,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── elements: (length: 3) │ │ │ ├── @ AssocSplatNode (location: (139,11)-(139,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── value: │ │ │ │ │ @ CallNode (location: (139,13)-(139,16)) │ │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -1315,6 +1441,7 @@ │ │ │ │ │ └── block: ∅ │ │ │ │ └── operator_loc: (139,11)-(139,13) = "**" │ │ │ ├── @ AssocSplatNode (location: (139,18)-(139,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── value: │ │ │ │ │ @ CallNode (location: (139,20)-(139,23)) │ │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -1328,6 +1455,7 @@ │ │ │ │ │ └── block: ∅ │ │ │ │ └── operator_loc: (139,18)-(139,20) = "**" │ │ │ └── @ AssocSplatNode (location: (139,25)-(139,30)) + │ │ │ ├── flags: ∅ │ │ │ ├── value: │ │ │ │ @ CallNode (location: (139,27)-(139,30)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -1350,11 +1478,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (140,0)-(140,3) = "end" ├── @ DefNode (location: (142,0)-(143,3)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (142,4)-(142,7) = "bar" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (142,8)-(142,19)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -1366,18 +1496,20 @@ │ │ │ ├── name_loc: (142,8)-(142,10) = "a:" │ │ │ └── value: │ │ │ @ ParenthesesNode (location: (142,11)-(142,19)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (142,12)-(142,18)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ RangeNode (location: (142,12)-(142,18)) - │ │ │ │ ├── flags: exclude_end + │ │ │ │ ├── flags: newline, static_literal, exclude_end │ │ │ │ ├── left: │ │ │ │ │ @ IntegerNode (location: (142,12)-(142,13)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── right: │ │ │ │ │ @ IntegerNode (location: (142,16)-(142,18)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 10 │ │ │ │ └── operator_loc: (142,13)-(142,16) = "..." │ │ │ ├── opening_loc: (142,11)-(142,12) = "(" @@ -1393,11 +1525,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (143,0)-(143,3) = "end" ├── @ DefNode (location: (145,0)-(146,3)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (145,4)-(145,7) = "bar" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (145,8)-(145,18)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -1409,15 +1543,17 @@ │ │ │ ├── name_loc: (145,8)-(145,10) = "a:" │ │ │ └── value: │ │ │ @ ParenthesesNode (location: (145,11)-(145,18)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (145,12)-(145,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ RangeNode (location: (145,12)-(145,17)) - │ │ │ │ ├── flags: exclude_end + │ │ │ │ ├── flags: newline, static_literal, exclude_end │ │ │ │ ├── left: ∅ │ │ │ │ ├── right: │ │ │ │ │ @ IntegerNode (location: (145,15)-(145,17)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 10 │ │ │ │ └── operator_loc: (145,12)-(145,15) = "..." │ │ │ ├── opening_loc: (145,11)-(145,12) = "(" @@ -1433,11 +1569,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (146,0)-(146,3) = "end" ├── @ DefNode (location: (148,0)-(149,3)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (148,4)-(148,7) = "bar" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (148,8)-(148,17)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -1449,14 +1587,16 @@ │ │ │ ├── name_loc: (148,8)-(148,10) = "a:" │ │ │ └── value: │ │ │ @ ParenthesesNode (location: (148,11)-(148,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (148,12)-(148,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ RangeNode (location: (148,12)-(148,16)) - │ │ │ │ ├── flags: exclude_end + │ │ │ │ ├── flags: newline, static_literal, exclude_end │ │ │ │ ├── left: │ │ │ │ │ @ IntegerNode (location: (148,12)-(148,13)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── right: ∅ │ │ │ │ └── operator_loc: (148,13)-(148,16) = "..." @@ -1473,11 +1613,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (149,0)-(149,3) = "end" ├── @ DefNode (location: (151,0)-(152,3)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (151,4)-(151,7) = "bar" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (151,8)-(151,20)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (151,8)-(151,20)) @@ -1487,18 +1629,20 @@ │ │ │ ├── operator_loc: (151,10)-(151,11) = "=" │ │ │ └── value: │ │ │ @ ParenthesesNode (location: (151,12)-(151,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (151,13)-(151,19)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ RangeNode (location: (151,13)-(151,19)) - │ │ │ │ ├── flags: exclude_end + │ │ │ │ ├── flags: newline, static_literal, exclude_end │ │ │ │ ├── left: │ │ │ │ │ @ IntegerNode (location: (151,13)-(151,14)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── right: │ │ │ │ │ @ IntegerNode (location: (151,17)-(151,19)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 10 │ │ │ │ └── operator_loc: (151,14)-(151,17) = "..." │ │ │ ├── opening_loc: (151,12)-(151,13) = "(" @@ -1517,11 +1661,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (152,0)-(152,3) = "end" ├── @ DefNode (location: (154,0)-(155,3)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (154,4)-(154,7) = "bar" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (154,8)-(154,19)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (154,8)-(154,19)) @@ -1531,15 +1677,17 @@ │ │ │ ├── operator_loc: (154,10)-(154,11) = "=" │ │ │ └── value: │ │ │ @ ParenthesesNode (location: (154,12)-(154,19)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (154,13)-(154,18)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ RangeNode (location: (154,13)-(154,18)) - │ │ │ │ ├── flags: exclude_end + │ │ │ │ ├── flags: newline, static_literal, exclude_end │ │ │ │ ├── left: ∅ │ │ │ │ ├── right: │ │ │ │ │ @ IntegerNode (location: (154,16)-(154,18)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 10 │ │ │ │ └── operator_loc: (154,13)-(154,16) = "..." │ │ │ ├── opening_loc: (154,12)-(154,13) = "(" @@ -1558,11 +1706,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (155,0)-(155,3) = "end" ├── @ DefNode (location: (157,0)-(158,3)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (157,4)-(157,7) = "bar" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (157,8)-(157,18)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (157,8)-(157,18)) @@ -1572,14 +1722,16 @@ │ │ │ ├── operator_loc: (157,10)-(157,11) = "=" │ │ │ └── value: │ │ │ @ ParenthesesNode (location: (157,12)-(157,18)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (157,13)-(157,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ RangeNode (location: (157,13)-(157,17)) - │ │ │ │ ├── flags: exclude_end + │ │ │ │ ├── flags: newline, static_literal, exclude_end │ │ │ │ ├── left: │ │ │ │ │ @ IntegerNode (location: (157,13)-(157,14)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── right: ∅ │ │ │ │ └── operator_loc: (157,14)-(157,17) = "..." @@ -1599,11 +1751,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (158,0)-(158,3) = "end" ├── @ DefNode (location: (160,0)-(162,3)) + │ ├── flags: newline │ ├── name: :method │ ├── name_loc: (160,4)-(160,10) = "method" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (160,11)-(160,12)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (160,11)-(160,12)) │ │ │ ├── flags: ∅ @@ -1616,9 +1770,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (161,2)-(161,14)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (161,2)-(161,14)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (161,2)-(161,6)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -1649,6 +1804,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: │ │ │ @ BlockNode (location: (161,12)-(161,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [] │ │ │ ├── parameters: ∅ │ │ │ ├── body: ∅ @@ -1664,19 +1820,22 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (162,0)-(162,3) = "end" ├── @ LocalVariableWriteNode (location: (164,0)-(164,7)) + │ ├── flags: newline │ ├── name: :foo │ ├── depth: 0 │ ├── name_loc: (164,0)-(164,3) = "foo" │ ├── value: │ │ @ IntegerNode (location: (164,6)-(164,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (164,4)-(164,5) = "=" ├── @ DefNode (location: (165,0)-(165,16)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (165,8)-(165,11) = "bar" │ ├── receiver: │ │ @ LocalVariableReadNode (location: (165,4)-(165,7)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── parameters: ∅ @@ -1689,11 +1848,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (165,13)-(165,16) = "end" ├── @ DefNode (location: (167,0)-(167,18)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (167,4)-(167,5) = "f" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (167,6)-(167,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -1708,11 +1869,13 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (167,10)-(167,13)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ ArrayNode (location: (167,10)-(167,13)) - │ │ ├── flags: contains_splat + │ │ ├── flags: newline, contains_splat │ │ ├── elements: (length: 1) │ │ │ └── @ SplatNode (location: (167,11)-(167,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (167,11)-(167,12) = "*" │ │ │ └── expression: ∅ │ │ ├── opening_loc: (167,10)-(167,11) = "[" @@ -1725,11 +1888,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (167,15)-(167,18) = "end" ├── @ DefNode (location: (169,0)-(169,15)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (169,4)-(169,5) = "f" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (169,6)-(169,10)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -1771,11 +1936,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (169,12)-(169,15) = "end" ├── @ DefNode (location: (171,0)-(171,15)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (171,4)-(171,5) = "f" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (171,6)-(171,10)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -1817,11 +1984,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (171,12)-(171,15) = "end" ├── @ DefNode (location: (173,0)-(173,15)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (173,4)-(173,5) = "f" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (173,6)-(173,10)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -1863,11 +2032,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (173,12)-(173,15) = "end" ├── @ DefNode (location: (175,0)-(175,20)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (175,4)-(175,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (175,8)-(175,15)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -1895,11 +2066,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (175,17)-(175,20) = "end" ├── @ DefNode (location: (177,0)-(179,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (177,4)-(177,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (177,8)-(177,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -1907,12 +2080,14 @@ │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (177,8)-(177,11)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (178,2)-(178,10)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (178,2)-(178,10)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -1923,6 +2098,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ForwardingArgumentsNode (location: (178,6)-(178,9)) + │ │ │ └── flags: ∅ │ │ ├── closing_loc: (178,9)-(178,10) = ")" │ │ └── block: ∅ │ ├── locals: [] @@ -1933,11 +2109,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (179,0)-(179,3) = "end" ├── @ DefNode (location: (181,0)-(181,42)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (181,4)-(181,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (181,8)-(181,37)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (181,8)-(181,37)) @@ -1947,15 +2125,19 @@ │ │ │ ├── operator_loc: (181,12)-(181,13) = "=" │ │ │ └── value: │ │ │ @ ParenthesesNode (location: (181,14)-(181,37)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (181,15)-(181,36)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 2) │ │ │ │ ├── @ DefNode (location: (181,15)-(181,33)) + │ │ │ │ │ ├── flags: newline │ │ │ │ │ ├── name: :baz │ │ │ │ │ ├── name_loc: (181,19)-(181,22) = "baz" │ │ │ │ │ ├── receiver: ∅ │ │ │ │ │ ├── parameters: │ │ │ │ │ │ @ ParametersNode (location: (181,23)-(181,26)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ │ │ └── @ RequiredParameterNode (location: (181,23)-(181,26)) │ │ │ │ │ │ │ ├── flags: ∅ @@ -1968,8 +2150,10 @@ │ │ │ │ │ │ └── block: ∅ │ │ │ │ │ ├── body: │ │ │ │ │ │ @ StatementsNode (location: (181,30)-(181,33)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ │ └── @ LocalVariableReadNode (location: (181,30)-(181,33)) + │ │ │ │ │ │ ├── flags: newline │ │ │ │ │ │ ├── name: :bar │ │ │ │ │ │ └── depth: 0 │ │ │ │ │ ├── locals: [:bar] @@ -1980,7 +2164,7 @@ │ │ │ │ │ ├── equal_loc: (181,28)-(181,29) = "=" │ │ │ │ │ └── end_keyword_loc: ∅ │ │ │ │ └── @ IntegerNode (location: (181,35)-(181,36)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── opening_loc: (181,14)-(181,15) = "(" │ │ │ └── closing_loc: (181,36)-(181,37) = ")" @@ -1991,9 +2175,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (181,41)-(181,42)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (181,41)-(181,42)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 2 │ ├── locals: [:bar] │ ├── def_keyword_loc: (181,0)-(181,3) = "def" @@ -2003,16 +2188,20 @@ │ ├── equal_loc: (181,39)-(181,40) = "=" │ └── end_keyword_loc: ∅ └── @ DefNode (location: (183,0)-(183,37)) + ├── flags: newline ├── name: :foo ├── name_loc: (183,21)-(183,24) = "foo" ├── receiver: │ @ ParenthesesNode (location: (183,4)-(183,20)) + │ ├── flags: ∅ │ ├── body: │ │ @ ClassNode (location: (183,5)-(183,19)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── class_keyword_loc: (183,5)-(183,10) = "class" │ │ ├── constant_path: │ │ │ @ ConstantReadNode (location: (183,11)-(183,14)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── inheritance_operator_loc: ∅ │ │ ├── superclass: ∅ @@ -2023,6 +2212,7 @@ │ └── closing_loc: (183,19)-(183,20) = ")" ├── parameters: │ @ ParametersNode (location: (183,25)-(183,32)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 1) │ │ └── @ OptionalParameterNode (location: (183,25)-(183,32)) @@ -2032,7 +2222,7 @@ │ │ ├── operator_loc: (183,29)-(183,30) = "=" │ │ └── value: │ │ @ IntegerNode (location: (183,31)-(183,32)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── rest: ∅ │ ├── posts: (length: 0) @@ -2041,9 +2231,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (183,36)-(183,37)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ IntegerNode (location: (183,36)-(183,37)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 2 ├── locals: [:bar] ├── def_keyword_loc: (183,0)-(183,3) = "def" diff --git a/test/prism/snapshots/modules.txt b/test/prism/snapshots/modules.txt index de1ea8feebc..d889d855af4 100644 --- a/test/prism/snapshots/modules.txt +++ b/test/prism/snapshots/modules.txt @@ -1,42 +1,50 @@ @ ProgramNode (location: (1,0)-(18,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(18,3)) + ├── flags: ∅ └── body: (length: 7) ├── @ ModuleNode (location: (1,0)-(1,18)) + │ ├── flags: newline │ ├── locals: [:a] │ ├── module_keyword_loc: (1,0)-(1,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (1,7)-(1,8)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── body: │ │ @ StatementsNode (location: (1,9)-(1,14)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableWriteNode (location: (1,9)-(1,14)) + │ │ ├── flags: newline │ │ ├── name: :a │ │ ├── depth: 0 │ │ ├── name_loc: (1,9)-(1,10) = "a" │ │ ├── value: │ │ │ @ IntegerNode (location: (1,13)-(1,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── operator_loc: (1,11)-(1,12) = "=" │ ├── end_keyword_loc: (1,15)-(1,18) = "end" │ └── name: :A ├── @ InterpolatedStringNode (location: (3,0)-(3,18)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (3,0)-(3,3) = "%Q{" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (3,3)-(3,7)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (3,3)-(3,7) = "aaa " │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "aaa " │ │ ├── @ EmbeddedStatementsNode (location: (3,7)-(3,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (3,7)-(3,9) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (3,9)-(3,12)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (3,9)-(3,12)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -50,17 +58,19 @@ │ │ │ │ └── block: ∅ │ │ │ └── closing_loc: (3,12)-(3,13) = "}" │ │ └── @ StringNode (location: (3,13)-(3,17)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (3,13)-(3,17) = " ccc" │ │ ├── closing_loc: ∅ │ │ └── unescaped: " ccc" │ └── closing_loc: (3,17)-(3,18) = "}" ├── @ ModuleNode (location: (5,0)-(6,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── module_keyword_loc: (5,0)-(5,6) = "module" │ ├── constant_path: │ │ @ ConstantPathNode (location: (5,7)-(5,11)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ CallNode (location: (5,7)-(5,8)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -79,28 +89,34 @@ │ ├── end_keyword_loc: (6,0)-(6,3) = "end" │ └── name: :M ├── @ ModuleNode (location: (8,0)-(9,19)) + │ ├── flags: newline │ ├── locals: [:x] │ ├── module_keyword_loc: (8,0)-(8,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (8,7)-(8,8)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── body: │ │ @ BeginNode (location: (8,0)-(9,19)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (9,1)-(9,6)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableWriteNode (location: (9,1)-(9,6)) + │ │ │ ├── flags: newline │ │ │ ├── name: :x │ │ │ ├── depth: 0 │ │ │ ├── name_loc: (9,1)-(9,2) = "x" │ │ │ ├── value: │ │ │ │ @ IntegerNode (location: (9,5)-(9,6)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── operator_loc: (9,3)-(9,4) = "=" │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (9,8)-(9,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (9,8)-(9,14) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ @@ -113,10 +129,12 @@ │ ├── end_keyword_loc: (9,16)-(9,19) = "end" │ └── name: :A ├── @ ModuleNode (location: (11,0)-(12,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── module_keyword_loc: (11,0)-(11,6) = "module" │ ├── constant_path: │ │ @ ConstantPathNode (location: (11,7)-(11,10)) + │ │ ├── flags: ∅ │ │ ├── parent: ∅ │ │ ├── name: :A │ │ ├── delimiter_loc: (11,7)-(11,9) = "::" @@ -125,15 +143,18 @@ │ ├── end_keyword_loc: (12,0)-(12,3) = "end" │ └── name: :A ├── @ ModuleNode (location: (14,0)-(15,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── module_keyword_loc: (14,0)-(14,6) = "module" │ ├── constant_path: │ │ @ ConstantPathNode (location: (14,7)-(14,13)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ CallNode (location: (14,7)-(14,10)) │ │ │ ├── flags: ∅ │ │ │ ├── receiver: │ │ │ │ @ ConstantReadNode (location: (14,7)-(14,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :A │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :[] @@ -149,15 +170,18 @@ │ ├── end_keyword_loc: (15,0)-(15,3) = "end" │ └── name: :B └── @ ModuleNode (location: (17,0)-(18,3)) + ├── flags: newline ├── locals: [] ├── module_keyword_loc: (17,0)-(17,6) = "module" ├── constant_path: │ @ ConstantPathNode (location: (17,7)-(17,14)) + │ ├── flags: ∅ │ ├── parent: │ │ @ CallNode (location: (17,7)-(17,11)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ ConstantReadNode (location: (17,7)-(17,8)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── call_operator_loc: ∅ │ │ ├── name: :[] @@ -168,7 +192,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (17,9)-(17,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: (17,10)-(17,11) = "]" │ │ └── block: ∅ diff --git a/test/prism/snapshots/multi_write.txt b/test/prism/snapshots/multi_write.txt index d313801fdb2..68fa62cf92a 100644 --- a/test/prism/snapshots/multi_write.txt +++ b/test/prism/snapshots/multi_write.txt @@ -1,28 +1,36 @@ @ ProgramNode (location: (1,0)-(4,26)) +├── flags: ∅ ├── locals: [:foo, :bar] └── statements: @ StatementsNode (location: (1,0)-(4,26)) + ├── flags: ∅ └── body: (length: 4) ├── @ LocalVariableWriteNode (location: (1,0)-(1,18)) + │ ├── flags: newline │ ├── name: :foo │ ├── depth: 0 │ ├── name_loc: (1,0)-(1,3) = "foo" │ ├── value: │ │ @ RescueModifierNode (location: (1,6)-(1,18)) + │ │ ├── flags: ∅ │ │ ├── expression: │ │ │ @ IntegerNode (location: (1,6)-(1,7)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── keyword_loc: (1,8)-(1,14) = "rescue" │ │ └── rescue_expression: │ │ @ NilNode (location: (1,15)-(1,18)) + │ │ └── flags: static_literal │ └── operator_loc: (1,4)-(1,5) = "=" ├── @ MultiWriteNode (location: (2,0)-(2,23)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ LocalVariableTargetNode (location: (2,0)-(2,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :foo │ │ │ └── depth: 0 │ │ └── @ LocalVariableTargetNode (location: (2,5)-(2,8)) + │ │ ├── flags: ∅ │ │ ├── name: :bar │ │ └── depth: 0 │ ├── rest: ∅ @@ -32,28 +40,32 @@ │ ├── operator_loc: (2,9)-(2,10) = "=" │ └── value: │ @ RescueModifierNode (location: (2,11)-(2,23)) + │ ├── flags: ∅ │ ├── expression: │ │ @ IntegerNode (location: (2,11)-(2,12)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── keyword_loc: (2,13)-(2,19) = "rescue" │ └── rescue_expression: │ @ NilNode (location: (2,20)-(2,23)) + │ └── flags: static_literal ├── @ RescueModifierNode (location: (3,0)-(3,21)) + │ ├── flags: newline │ ├── expression: │ │ @ LocalVariableWriteNode (location: (3,0)-(3,10)) + │ │ ├── flags: newline │ │ ├── name: :foo │ │ ├── depth: 0 │ │ ├── name_loc: (3,0)-(3,3) = "foo" │ │ ├── value: │ │ │ @ ArrayNode (location: (3,6)-(3,10)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 2) │ │ │ │ ├── @ IntegerNode (location: (3,6)-(3,7)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ └── @ IntegerNode (location: (3,9)-(3,10)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ ├── opening_loc: ∅ │ │ │ └── closing_loc: ∅ @@ -61,12 +73,16 @@ │ ├── keyword_loc: (3,11)-(3,17) = "rescue" │ └── rescue_expression: │ @ NilNode (location: (3,18)-(3,21)) + │ └── flags: static_literal └── @ MultiWriteNode (location: (4,0)-(4,26)) + ├── flags: newline ├── lefts: (length: 2) │ ├── @ LocalVariableTargetNode (location: (4,0)-(4,3)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ └── @ LocalVariableTargetNode (location: (4,5)-(4,8)) + │ ├── flags: ∅ │ ├── name: :bar │ └── depth: 0 ├── rest: ∅ @@ -76,18 +92,20 @@ ├── operator_loc: (4,9)-(4,10) = "=" └── value: @ RescueModifierNode (location: (4,11)-(4,26)) + ├── flags: ∅ ├── expression: │ @ ArrayNode (location: (4,11)-(4,15)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (4,11)-(4,12)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (4,14)-(4,15)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: ∅ │ └── closing_loc: ∅ ├── keyword_loc: (4,16)-(4,22) = "rescue" └── rescue_expression: @ NilNode (location: (4,23)-(4,26)) + └── flags: static_literal diff --git a/test/prism/snapshots/newline_terminated.txt b/test/prism/snapshots/newline_terminated.txt index 6a3b28dba98..85e996fa5a2 100644 --- a/test/prism/snapshots/newline_terminated.txt +++ b/test/prism/snapshots/newline_terminated.txt @@ -1,106 +1,108 @@ @ ProgramNode (location: (3,0)-(41,0)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (3,0)-(41,0)) + ├── flags: ∅ └── body: (length: 17) ├── @ StringNode (location: (3,0)-(3,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (3,0)-(3,2) = "% " │ ├── content_loc: (3,2)-(3,5) = "abc" │ ├── closing_loc: (3,5)-(3,6) = " " │ └── unescaped: "abc" ├── @ StringNode (location: (4,0)-(4,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (4,0)-(4,2) = "%\t" │ ├── content_loc: (4,2)-(4,5) = "abc" │ ├── closing_loc: (4,5)-(4,6) = "\t" │ └── unescaped: "abc" ├── @ StringNode (location: (5,0)-(5,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (5,0)-(5,2) = "%\v" │ ├── content_loc: (5,2)-(5,5) = "abc" │ ├── closing_loc: (5,5)-(5,6) = "\v" │ └── unescaped: "abc" ├── @ StringNode (location: (6,0)-(6,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (6,0)-(6,2) = "%\r" │ ├── content_loc: (6,2)-(6,5) = "abc" │ ├── closing_loc: (6,5)-(6,6) = "\r" │ └── unescaped: "abc" ├── @ StringNode (location: (7,0)-(9,0)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (7,0)-(8,0) = "%\n" │ ├── content_loc: (8,0)-(8,3) = "abc" │ ├── closing_loc: (8,3)-(9,0) = "\n" │ └── unescaped: "abc" ├── @ StringNode (location: (10,0)-(10,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (10,0)-(10,2) = "%\u0000" │ ├── content_loc: (10,2)-(10,5) = "abc" │ ├── closing_loc: (10,5)-(10,6) = "\u0000" │ └── unescaped: "abc" ├── @ StringNode (location: (11,0)-(13,0)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (11,0)-(12,0) = "%\n" │ ├── content_loc: (12,0)-(12,3) = "abc" │ ├── closing_loc: (12,3)-(13,0) = "\n" │ └── unescaped: "abc" ├── @ StringNode (location: (14,0)-(16,0)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (14,0)-(15,0) = "%\n" │ ├── content_loc: (15,0)-(15,4) = "\rabc" │ ├── closing_loc: (15,4)-(16,0) = "\n" │ └── unescaped: "\rabc" ├── @ StringNode (location: (17,0)-(19,0)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (17,0)-(18,0) = "%\n" │ ├── content_loc: (18,0)-(18,4) = "\rabc" │ ├── closing_loc: (18,4)-(19,0) = "\n" │ └── unescaped: "\rabc" ├── @ StringNode (location: (20,0)-(22,0)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (20,0)-(21,0) = "%\n" │ ├── content_loc: (21,0)-(21,3) = "abc" │ ├── closing_loc: (21,3)-(22,0) = "\n" │ └── unescaped: "abc" ├── @ StringNode (location: (23,0)-(23,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (23,0)-(23,2) = "%\r" │ ├── content_loc: (23,2)-(23,5) = "abc" │ ├── closing_loc: (23,5)-(23,6) = "\r" │ └── unescaped: "abc" ├── @ StringNode (location: (24,0)-(26,0)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (24,0)-(25,0) = "%\n" │ ├── content_loc: (25,0)-(25,3) = "abc" │ ├── closing_loc: (25,3)-(26,0) = "\n" │ └── unescaped: "abc" ├── @ StringNode (location: (27,0)-(29,0)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (27,0)-(28,0) = "%\n" │ ├── content_loc: (28,0)-(28,3) = "abc" │ ├── closing_loc: (28,3)-(29,0) = "\n" │ └── unescaped: "abc" ├── @ StringNode (location: (30,0)-(32,0)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (30,0)-(31,0) = "%\n" │ ├── content_loc: (31,0)-(31,3) = "foo" │ ├── closing_loc: (31,3)-(32,0) = "\n" │ └── unescaped: "foo" ├── @ StringNode (location: (33,0)-(35,0)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (33,0)-(34,0) = "%q\n" │ ├── content_loc: (34,0)-(34,3) = "foo" │ ├── closing_loc: (34,3)-(35,0) = "\n" │ └── unescaped: "foo" ├── @ StringNode (location: (36,0)-(38,0)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (36,0)-(37,0) = "%Q\n" │ ├── content_loc: (37,0)-(37,3) = "foo" │ ├── closing_loc: (37,3)-(38,0) = "\n" │ └── unescaped: "foo" └── @ RegularExpressionNode (location: (39,0)-(41,0)) - ├── flags: forced_us_ascii_encoding + ├── flags: newline, static_literal, forced_us_ascii_encoding ├── opening_loc: (39,0)-(40,0) = "%r\n" ├── content_loc: (40,0)-(40,3) = "foo" ├── closing_loc: (40,3)-(41,0) = "\n" diff --git a/test/prism/snapshots/next.txt b/test/prism/snapshots/next.txt index ce2e497de93..5b0becea1c8 100644 --- a/test/prism/snapshots/next.txt +++ b/test/prism/snapshots/next.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(24,15)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(24,15)) + ├── flags: ∅ └── body: (length: 10) ├── @ CallNode (location: (1,0)-(1,12)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -14,18 +16,21 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,4)-(1,12)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,6)-(1,10)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NextNode (location: (1,6)-(1,10)) + │ │ ├── flags: newline │ │ ├── arguments: ∅ │ │ └── keyword_loc: (1,6)-(1,10) = "next" │ ├── opening_loc: (1,4)-(1,5) = "{" │ └── closing_loc: (1,11)-(1,12) = "}" ├── @ CallNode (location: (3,0)-(3,26)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -35,40 +40,49 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (3,4)-(3,26)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (3,6)-(3,24)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NextNode (location: (3,6)-(3,24)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (3,11)-(3,24)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 3) │ │ │ ├── @ ParenthesesNode (location: (3,11)-(3,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (3,12)-(3,13)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ IntegerNode (location: (3,12)-(3,13)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── opening_loc: (3,11)-(3,12) = "(" │ │ │ │ └── closing_loc: (3,13)-(3,14) = ")" │ │ │ ├── @ ParenthesesNode (location: (3,16)-(3,19)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (3,17)-(3,18)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ IntegerNode (location: (3,17)-(3,18)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ │ └── value: 2 │ │ │ │ ├── opening_loc: (3,16)-(3,17) = "(" │ │ │ │ └── closing_loc: (3,18)-(3,19) = ")" │ │ │ └── @ ParenthesesNode (location: (3,21)-(3,24)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (3,22)-(3,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (3,22)-(3,23)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ └── value: 3 │ │ │ ├── opening_loc: (3,21)-(3,22) = "(" │ │ │ └── closing_loc: (3,23)-(3,24) = ")" @@ -76,7 +90,7 @@ │ ├── opening_loc: (3,4)-(3,5) = "{" │ └── closing_loc: (3,25)-(3,26) = "}" ├── @ CallNode (location: (5,0)-(5,14)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -86,24 +100,27 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (5,4)-(5,14)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (5,6)-(5,12)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NextNode (location: (5,6)-(5,12)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (5,11)-(5,12)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (5,11)-(5,12)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── keyword_loc: (5,6)-(5,10) = "next" │ ├── opening_loc: (5,4)-(5,5) = "{" │ └── closing_loc: (5,13)-(5,14) = "}" ├── @ CallNode (location: (7,0)-(8,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -113,30 +130,33 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (7,4)-(8,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (7,6)-(8,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NextNode (location: (7,6)-(8,1)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (7,11)-(8,1)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 3) │ │ │ ├── @ IntegerNode (location: (7,11)-(7,12)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── @ IntegerNode (location: (7,14)-(7,15)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── @ IntegerNode (location: (8,0)-(8,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ └── keyword_loc: (7,6)-(7,10) = "next" │ ├── opening_loc: (7,4)-(7,5) = "{" │ └── closing_loc: (8,2)-(8,3) = "}" ├── @ CallNode (location: (10,0)-(10,20)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -146,30 +166,33 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (10,4)-(10,20)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (10,6)-(10,18)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NextNode (location: (10,6)-(10,18)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (10,11)-(10,18)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 3) │ │ │ ├── @ IntegerNode (location: (10,11)-(10,12)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── @ IntegerNode (location: (10,14)-(10,15)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── @ IntegerNode (location: (10,17)-(10,18)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ └── keyword_loc: (10,6)-(10,10) = "next" │ ├── opening_loc: (10,4)-(10,5) = "{" │ └── closing_loc: (10,19)-(10,20) = "}" ├── @ CallNode (location: (12,0)-(12,22)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -179,27 +202,30 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (12,4)-(12,22)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (12,6)-(12,20)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NextNode (location: (12,6)-(12,20)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (12,11)-(12,20)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ArrayNode (location: (12,11)-(12,20)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 3) │ │ │ │ ├── @ IntegerNode (location: (12,12)-(12,13)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── @ IntegerNode (location: (12,15)-(12,16)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 2 │ │ │ │ └── @ IntegerNode (location: (12,18)-(12,19)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 3 │ │ │ ├── opening_loc: (12,11)-(12,12) = "[" │ │ │ └── closing_loc: (12,19)-(12,20) = "]" @@ -207,7 +233,7 @@ │ ├── opening_loc: (12,4)-(12,5) = "{" │ └── closing_loc: (12,21)-(12,22) = "}" ├── @ CallNode (location: (14,0)-(17,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -217,25 +243,30 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (14,4)-(17,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (14,6)-(17,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NextNode (location: (14,6)-(17,1)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (14,10)-(17,1)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ParenthesesNode (location: (14,10)-(17,1)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (15,2)-(16,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 2) │ │ │ │ ├── @ IntegerNode (location: (15,2)-(15,3)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ └── @ IntegerNode (location: (16,2)-(16,3)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ └── value: 2 │ │ │ ├── opening_loc: (14,10)-(14,11) = "(" │ │ │ └── closing_loc: (17,0)-(17,1) = ")" @@ -243,7 +274,7 @@ │ ├── opening_loc: (14,4)-(14,5) = "{" │ └── closing_loc: (17,2)-(17,3) = "}" ├── @ CallNode (location: (19,0)-(20,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -253,21 +284,24 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (19,4)-(20,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (19,6)-(20,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 2) │ │ ├── @ NextNode (location: (19,6)-(19,10)) + │ │ │ ├── flags: newline │ │ │ ├── arguments: ∅ │ │ │ └── keyword_loc: (19,6)-(19,10) = "next" │ │ └── @ IntegerNode (location: (20,0)-(20,1)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 │ ├── opening_loc: (19,4)-(19,5) = "{" │ └── closing_loc: (20,2)-(20,3) = "}" ├── @ CallNode (location: (22,0)-(22,14)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -277,17 +311,21 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (22,4)-(22,14)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (22,6)-(22,12)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NextNode (location: (22,6)-(22,12)) + │ │ ├── flags: newline │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (22,10)-(22,12)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ParenthesesNode (location: (22,10)-(22,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: ∅ │ │ │ ├── opening_loc: (22,10)-(22,11) = "(" │ │ │ └── closing_loc: (22,11)-(22,12) = ")" @@ -295,7 +333,7 @@ │ ├── opening_loc: (22,4)-(22,5) = "{" │ └── closing_loc: (22,13)-(22,14) = "}" └── @ CallNode (location: (24,0)-(24,15)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :tap @@ -305,22 +343,27 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (24,4)-(24,15)) + ├── flags: ∅ ├── locals: [] ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (24,6)-(24,13)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ NextNode (location: (24,6)-(24,13)) + │ ├── flags: newline │ ├── arguments: │ │ @ ArgumentsNode (location: (24,10)-(24,13)) │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ParenthesesNode (location: (24,10)-(24,13)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (24,11)-(24,12)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ IntegerNode (location: (24,11)-(24,12)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: newline, static_literal, decimal │ │ │ └── value: 1 │ │ ├── opening_loc: (24,10)-(24,11) = "(" │ │ └── closing_loc: (24,12)-(24,13) = ")" diff --git a/test/prism/snapshots/nils.txt b/test/prism/snapshots/nils.txt index f72745560fe..275bc373a53 100644 --- a/test/prism/snapshots/nils.txt +++ b/test/prism/snapshots/nils.txt @@ -1,33 +1,42 @@ @ ProgramNode (location: (1,0)-(12,11)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(12,11)) + ├── flags: ∅ └── body: (length: 5) ├── @ NilNode (location: (1,0)-(1,3)) + │ └── flags: newline, static_literal ├── @ ParenthesesNode (location: (3,0)-(3,2)) + │ ├── flags: newline │ ├── body: ∅ │ ├── opening_loc: (3,0)-(3,1) = "(" │ └── closing_loc: (3,1)-(3,2) = ")" ├── @ ParenthesesNode (location: (5,0)-(8,1)) + │ ├── flags: newline │ ├── body: ∅ │ ├── opening_loc: (5,0)-(5,1) = "(" │ └── closing_loc: (8,0)-(8,1) = ")" ├── @ PostExecutionNode (location: (10,0)-(10,9)) + │ ├── flags: newline │ ├── statements: │ │ @ StatementsNode (location: (10,6)-(10,7)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (10,6)-(10,7)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 │ ├── keyword_loc: (10,0)-(10,3) = "END" │ ├── opening_loc: (10,4)-(10,5) = "{" │ └── closing_loc: (10,8)-(10,9) = "}" └── @ PreExecutionNode (location: (12,0)-(12,11)) + ├── flags: newline ├── statements: │ @ StatementsNode (location: (12,8)-(12,9)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ IntegerNode (location: (12,8)-(12,9)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 1 ├── keyword_loc: (12,0)-(12,5) = "BEGIN" ├── opening_loc: (12,6)-(12,7) = "{" diff --git a/test/prism/snapshots/non_alphanumeric_methods.txt b/test/prism/snapshots/non_alphanumeric_methods.txt index 2ed66fe0e2e..2d29d365e46 100644 --- a/test/prism/snapshots/non_alphanumeric_methods.txt +++ b/test/prism/snapshots/non_alphanumeric_methods.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(105,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(105,3)) + ├── flags: ∅ └── body: (length: 36) ├── @ DefNode (location: (1,0)-(2,3)) + │ ├── flags: newline │ ├── name: :! │ ├── name_loc: (1,4)-(1,5) = "!" │ ├── receiver: ∅ @@ -17,6 +20,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (2,0)-(2,3) = "end" ├── @ DefNode (location: (4,0)-(5,3)) + │ ├── flags: newline │ ├── name: :!= │ ├── name_loc: (4,4)-(4,6) = "!=" │ ├── receiver: ∅ @@ -30,6 +34,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (5,0)-(5,3) = "end" ├── @ DefNode (location: (7,0)-(8,3)) + │ ├── flags: newline │ ├── name: :!~ │ ├── name_loc: (7,4)-(7,6) = "!~" │ ├── receiver: ∅ @@ -43,6 +48,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (8,0)-(8,3) = "end" ├── @ DefNode (location: (10,0)-(11,3)) + │ ├── flags: newline │ ├── name: :% │ ├── name_loc: (10,4)-(10,5) = "%" │ ├── receiver: ∅ @@ -56,10 +62,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ DefNode (location: (13,0)-(14,3)) + │ ├── flags: newline │ ├── name: :+ │ ├── name_loc: (13,9)-(13,10) = "+" │ ├── receiver: │ │ @ SelfNode (location: (13,4)-(13,8)) + │ │ └── flags: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -70,6 +78,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (14,0)-(14,3) = "end" ├── @ DefNode (location: (16,0)-(17,3)) + │ ├── flags: newline │ ├── name: :& │ ├── name_loc: (16,4)-(16,5) = "&" │ ├── receiver: ∅ @@ -83,6 +92,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (17,0)-(17,3) = "end" ├── @ DefNode (location: (19,0)-(20,3)) + │ ├── flags: newline │ ├── name: :* │ ├── name_loc: (19,4)-(19,5) = "*" │ ├── receiver: ∅ @@ -96,6 +106,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (20,0)-(20,3) = "end" ├── @ DefNode (location: (22,0)-(23,3)) + │ ├── flags: newline │ ├── name: :** │ ├── name_loc: (22,4)-(22,6) = "**" │ ├── receiver: ∅ @@ -109,17 +120,19 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (23,0)-(23,3) = "end" ├── @ StringNode (location: (25,0)-(25,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (25,0)-(25,2) = "%|" │ ├── content_loc: (25,2)-(25,5) = "abc" │ ├── closing_loc: (25,5)-(25,6) = "|" │ └── unescaped: "abc" ├── @ DefNode (location: (27,0)-(28,3)) + │ ├── flags: newline │ ├── name: :+ │ ├── name_loc: (27,4)-(27,5) = "+" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (27,6)-(27,9)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -141,6 +154,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (28,0)-(28,3) = "end" ├── @ DefNode (location: (30,0)-(31,3)) + │ ├── flags: newline │ ├── name: :+ │ ├── name_loc: (30,4)-(30,5) = "+" │ ├── receiver: ∅ @@ -154,11 +168,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (31,0)-(31,3) = "end" ├── @ DefNode (location: (33,0)-(34,3)) + │ ├── flags: newline │ ├── name: :+ │ ├── name_loc: (33,4)-(33,5) = "+" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (33,6)-(33,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (33,6)-(33,7)) │ │ │ ├── flags: ∅ @@ -178,10 +194,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (34,0)-(34,3) = "end" ├── @ DefNode (location: (36,0)-(37,3)) + │ ├── flags: newline │ ├── name: :+ │ ├── name_loc: (36,9)-(36,10) = "+" │ ├── receiver: │ │ @ SelfNode (location: (36,4)-(36,8)) + │ │ └── flags: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -192,6 +210,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (37,0)-(37,3) = "end" ├── @ DefNode (location: (39,0)-(40,3)) + │ ├── flags: newline │ ├── name: :+ │ ├── name_loc: (39,4)-(39,5) = "+" │ ├── receiver: ∅ @@ -205,6 +224,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (40,0)-(40,3) = "end" ├── @ DefNode (location: (42,0)-(43,3)) + │ ├── flags: newline │ ├── name: :+@ │ ├── name_loc: (42,4)-(42,6) = "+@" │ ├── receiver: ∅ @@ -218,6 +238,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (43,0)-(43,3) = "end" ├── @ DefNode (location: (45,0)-(46,3)) + │ ├── flags: newline │ ├── name: :- │ ├── name_loc: (45,4)-(45,5) = "-" │ ├── receiver: ∅ @@ -231,6 +252,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (46,0)-(46,3) = "end" ├── @ DefNode (location: (48,0)-(48,11)) + │ ├── flags: newline │ ├── name: :- │ ├── name_loc: (48,6)-(48,7) = "-" │ ├── receiver: @@ -254,6 +276,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (48,8)-(48,11) = "end" ├── @ DefNode (location: (50,0)-(51,3)) + │ ├── flags: newline │ ├── name: :-@ │ ├── name_loc: (50,4)-(50,6) = "-@" │ ├── receiver: ∅ @@ -267,6 +290,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (51,0)-(51,3) = "end" ├── @ DefNode (location: (53,0)-(54,3)) + │ ├── flags: newline │ ├── name: :/ │ ├── name_loc: (53,4)-(53,5) = "/" │ ├── receiver: ∅ @@ -280,6 +304,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (54,0)-(54,3) = "end" ├── @ DefNode (location: (56,0)-(57,3)) + │ ├── flags: newline │ ├── name: :< │ ├── name_loc: (56,4)-(56,5) = "<" │ ├── receiver: ∅ @@ -293,6 +318,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (57,0)-(57,3) = "end" ├── @ DefNode (location: (59,0)-(60,3)) + │ ├── flags: newline │ ├── name: :<< │ ├── name_loc: (59,4)-(59,6) = "<<" │ ├── receiver: ∅ @@ -306,6 +332,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (60,0)-(60,3) = "end" ├── @ DefNode (location: (62,0)-(63,3)) + │ ├── flags: newline │ ├── name: :<= │ ├── name_loc: (62,4)-(62,6) = "<=" │ ├── receiver: ∅ @@ -319,6 +346,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (63,0)-(63,3) = "end" ├── @ DefNode (location: (65,0)-(66,3)) + │ ├── flags: newline │ ├── name: :<=> │ ├── name_loc: (65,4)-(65,7) = "<=>" │ ├── receiver: ∅ @@ -332,6 +360,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (66,0)-(66,3) = "end" ├── @ DefNode (location: (68,0)-(69,3)) + │ ├── flags: newline │ ├── name: :== │ ├── name_loc: (68,4)-(68,6) = "==" │ ├── receiver: ∅ @@ -345,6 +374,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (69,0)-(69,3) = "end" ├── @ DefNode (location: (71,0)-(72,3)) + │ ├── flags: newline │ ├── name: :=== │ ├── name_loc: (71,4)-(71,7) = "===" │ ├── receiver: ∅ @@ -358,6 +388,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (72,0)-(72,3) = "end" ├── @ DefNode (location: (74,0)-(75,3)) + │ ├── flags: newline │ ├── name: :=~ │ ├── name_loc: (74,4)-(74,6) = "=~" │ ├── receiver: ∅ @@ -371,6 +402,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (75,0)-(75,3) = "end" ├── @ DefNode (location: (77,0)-(78,3)) + │ ├── flags: newline │ ├── name: :> │ ├── name_loc: (77,4)-(77,5) = ">" │ ├── receiver: ∅ @@ -384,6 +416,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (78,0)-(78,3) = "end" ├── @ DefNode (location: (80,0)-(81,3)) + │ ├── flags: newline │ ├── name: :>= │ ├── name_loc: (80,4)-(80,6) = ">=" │ ├── receiver: ∅ @@ -397,6 +430,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (81,0)-(81,3) = "end" ├── @ DefNode (location: (83,0)-(84,3)) + │ ├── flags: newline │ ├── name: :>> │ ├── name_loc: (83,4)-(83,6) = ">>" │ ├── receiver: ∅ @@ -410,6 +444,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (84,0)-(84,3) = "end" ├── @ DefNode (location: (86,0)-(87,3)) + │ ├── flags: newline │ ├── name: :[] │ ├── name_loc: (86,4)-(86,6) = "[]" │ ├── receiver: ∅ @@ -423,6 +458,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (87,0)-(87,3) = "end" ├── @ DefNode (location: (89,0)-(90,3)) + │ ├── flags: newline │ ├── name: :[]= │ ├── name_loc: (89,4)-(89,7) = "[]=" │ ├── receiver: ∅ @@ -436,6 +472,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (90,0)-(90,3) = "end" ├── @ DefNode (location: (92,0)-(93,3)) + │ ├── flags: newline │ ├── name: :^ │ ├── name_loc: (92,4)-(92,5) = "^" │ ├── receiver: ∅ @@ -449,6 +486,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (93,0)-(93,3) = "end" ├── @ DefNode (location: (95,0)-(96,3)) + │ ├── flags: newline │ ├── name: :` │ ├── name_loc: (95,4)-(95,5) = "`" │ ├── receiver: ∅ @@ -462,10 +500,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (96,0)-(96,3) = "end" ├── @ DefNode (location: (98,0)-(99,3)) + │ ├── flags: newline │ ├── name: :` │ ├── name_loc: (98,9)-(98,10) = "`" │ ├── receiver: │ │ @ SelfNode (location: (98,4)-(98,8)) + │ │ └── flags: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -476,6 +516,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (99,0)-(99,3) = "end" ├── @ DefNode (location: (101,0)-(102,3)) + │ ├── flags: newline │ ├── name: :| │ ├── name_loc: (101,4)-(101,5) = "|" │ ├── receiver: ∅ @@ -489,6 +530,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (102,0)-(102,3) = "end" └── @ DefNode (location: (104,0)-(105,3)) + ├── flags: newline ├── name: :~ ├── name_loc: (104,4)-(104,5) = "~" ├── receiver: ∅ diff --git a/test/prism/snapshots/not.txt b/test/prism/snapshots/not.txt index fda61bb4b58..e164b18813a 100644 --- a/test/prism/snapshots/not.txt +++ b/test/prism/snapshots/not.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(37,16)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(37,16)) + ├── flags: ∅ └── body: (length: 10) ├── @ AndNode (location: (1,0)-(1,19)) + │ ├── flags: newline │ ├── left: │ │ @ CallNode (location: (1,0)-(1,7)) │ │ ├── flags: ∅ @@ -48,9 +51,10 @@ │ │ └── block: ∅ │ └── operator_loc: (1,8)-(1,11) = "and" ├── @ CallNode (location: (3,0)-(3,16)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ AndNode (location: (3,4)-(3,15)) + │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ CallNode (location: (3,4)-(3,7)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -82,7 +86,7 @@ │ ├── closing_loc: (3,15)-(3,16) = ")" │ └── block: ∅ ├── @ CallNode (location: (5,0)-(5,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (5,4)-(5,7)) │ │ ├── flags: variable_call, ignore_visibility @@ -102,6 +106,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ AndNode (location: (7,0)-(8,5)) + │ ├── flags: newline │ ├── left: │ │ @ CallNode (location: (7,0)-(7,7)) │ │ ├── flags: ∅ @@ -146,6 +151,7 @@ │ │ └── block: ∅ │ └── operator_loc: (7,8)-(7,11) = "and" ├── @ AndNode (location: (11,0)-(13,5)) + │ ├── flags: newline │ ├── left: │ │ @ CallNode (location: (11,0)-(11,7)) │ │ ├── flags: ∅ @@ -190,6 +196,7 @@ │ │ └── block: ∅ │ └── operator_loc: (11,8)-(11,11) = "and" ├── @ AndNode (location: (16,0)-(20,5)) + │ ├── flags: newline │ ├── left: │ │ @ CallNode (location: (16,0)-(16,7)) │ │ ├── flags: ∅ @@ -234,7 +241,7 @@ │ │ └── block: ∅ │ └── operator_loc: (16,8)-(16,11) = "and" ├── @ CallNode (location: (22,0)-(25,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (22,4)-(22,7)) │ │ ├── flags: variable_call, ignore_visibility @@ -254,7 +261,7 @@ │ ├── closing_loc: (25,0)-(25,1) = ")" │ └── block: ∅ ├── @ CallNode (location: (27,0)-(33,3)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (30,0)-(30,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -274,7 +281,7 @@ │ ├── closing_loc: (33,2)-(33,3) = ")" │ └── block: ∅ ├── @ CallNode (location: (35,0)-(35,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ FlipFlopNode (location: (35,4)-(35,14)) │ │ ├── flags: ∅ @@ -309,14 +316,16 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ CallNode (location: (37,0)-(37,16)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ ParenthesesNode (location: (37,4)-(37,16)) + │ ├── flags: ∅ │ ├── body: │ │ @ StatementsNode (location: (37,5)-(37,15)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ FlipFlopNode (location: (37,5)-(37,15)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── left: │ │ │ @ CallNode (location: (37,5)-(37,8)) │ │ │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/numbers.txt b/test/prism/snapshots/numbers.txt index 58aea454fa0..4512427ef32 100644 --- a/test/prism/snapshots/numbers.txt +++ b/test/prism/snapshots/numbers.txt @@ -1,135 +1,147 @@ @ ProgramNode (location: (1,0)-(67,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(67,5)) + ├── flags: ∅ └── body: (length: 34) ├── @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 0 ├── @ IntegerNode (location: (3,0)-(3,1)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 1 ├── @ FloatNode (location: (5,0)-(5,3)) + │ ├── flags: newline, static_literal │ └── value: 1.0 ├── @ IntegerNode (location: (7,0)-(7,1)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 2 ├── @ IntegerNode (location: (9,0)-(9,3)) - │ ├── flags: binary + │ ├── flags: newline, static_literal, binary │ └── value: 0 ├── @ IntegerNode (location: (11,0)-(11,3)) - │ ├── flags: binary + │ ├── flags: newline, static_literal, binary │ └── value: 1 ├── @ IntegerNode (location: (13,0)-(13,4)) - │ ├── flags: binary + │ ├── flags: newline, static_literal, binary │ └── value: 2 ├── @ IntegerNode (location: (15,0)-(15,3)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 0 ├── @ IntegerNode (location: (17,0)-(17,3)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 1 ├── @ IntegerNode (location: (19,0)-(19,3)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 2 ├── @ IntegerNode (location: (21,0)-(21,2)) - │ ├── flags: octal + │ ├── flags: newline, static_literal, octal │ └── value: 0 ├── @ IntegerNode (location: (23,0)-(23,2)) - │ ├── flags: octal + │ ├── flags: newline, static_literal, octal │ └── value: 1 ├── @ IntegerNode (location: (25,0)-(25,2)) - │ ├── flags: octal + │ ├── flags: newline, static_literal, octal │ └── value: 2 ├── @ IntegerNode (location: (27,0)-(27,3)) - │ ├── flags: octal + │ ├── flags: newline, static_literal, octal │ └── value: 0 ├── @ IntegerNode (location: (29,0)-(29,3)) - │ ├── flags: octal + │ ├── flags: newline, static_literal, octal │ └── value: 1 ├── @ IntegerNode (location: (31,0)-(31,3)) - │ ├── flags: octal + │ ├── flags: newline, static_literal, octal │ └── value: 2 ├── @ IntegerNode (location: (33,0)-(33,3)) - │ ├── flags: hexadecimal + │ ├── flags: newline, static_literal, hexadecimal │ └── value: 0 ├── @ IntegerNode (location: (35,0)-(35,3)) - │ ├── flags: hexadecimal + │ ├── flags: newline, static_literal, hexadecimal │ └── value: 1 ├── @ IntegerNode (location: (37,0)-(37,3)) - │ ├── flags: hexadecimal + │ ├── flags: newline, static_literal, hexadecimal │ └── value: 2 ├── @ ImaginaryNode (location: (39,0)-(39,2)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ IntegerNode (location: (39,0)-(39,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ RationalNode (location: (41,0)-(41,2)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ ├── numerator: 1 │ └── denominator: 1 ├── @ IntegerNode (location: (43,0)-(43,2)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: -1 ├── @ ImaginaryNode (location: (45,0)-(45,3)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ RationalNode (location: (45,0)-(45,2)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ ├── numerator: 1 │ └── denominator: 1 ├── @ RationalNode (location: (47,0)-(47,4)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ ├── numerator: 6 │ └── denominator: 5 ├── @ ImaginaryNode (location: (49,0)-(49,5)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ RationalNode (location: (49,0)-(49,4)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ ├── numerator: 6 │ └── denominator: 5 ├── @ ImaginaryNode (location: (51,0)-(51,4)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ RationalNode (location: (51,0)-(51,3)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ ├── numerator: -1 │ └── denominator: 1 ├── @ RationalNode (location: (53,0)-(53,5)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ ├── numerator: -6 │ └── denominator: 5 ├── @ ImaginaryNode (location: (55,0)-(55,6)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ RationalNode (location: (55,0)-(55,5)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ ├── numerator: -6 │ └── denominator: 5 ├── @ RationalNode (location: (57,0)-(57,4)) - │ ├── flags: octal + │ ├── flags: newline, static_literal, octal │ ├── numerator: 1 │ └── denominator: 1 ├── @ ImaginaryNode (location: (59,0)-(59,4)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ IntegerNode (location: (59,0)-(59,3)) - │ ├── flags: octal + │ ├── flags: static_literal, octal │ └── value: 1 ├── @ ImaginaryNode (location: (61,0)-(61,5)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ RationalNode (location: (61,0)-(61,4)) - │ ├── flags: octal + │ ├── flags: static_literal, octal │ ├── numerator: 1 │ └── denominator: 1 ├── @ RationalNode (location: (63,0)-(63,4)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ ├── numerator: 1 │ └── denominator: 1 ├── @ ImaginaryNode (location: (65,0)-(65,4)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ IntegerNode (location: (65,0)-(65,3)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 └── @ ImaginaryNode (location: (67,0)-(67,5)) + ├── flags: newline, static_literal └── numeric: @ RationalNode (location: (67,0)-(67,4)) - ├── flags: binary + ├── flags: static_literal, binary ├── numerator: 1 └── denominator: 1 diff --git a/test/prism/snapshots/patterns.txt b/test/prism/snapshots/patterns.txt index 51026972e12..72209345855 100644 --- a/test/prism/snapshots/patterns.txt +++ b/test/prism/snapshots/patterns.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(220,31)) +├── flags: ∅ ├── locals: [:bar, :baz, :qux, :b, :a, :foo, :x, :_a] └── statements: @ StatementsNode (location: (1,0)-(220,31)) + ├── flags: ∅ └── body: (length: 182) ├── @ MatchRequiredNode (location: (1,0)-(1,10)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (1,0)-(1,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -17,10 +20,12 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ LocalVariableTargetNode (location: (1,7)-(1,10)) + │ │ ├── flags: ∅ │ │ ├── name: :bar │ │ └── depth: 0 │ └── operator_loc: (1,4)-(1,6) = "=>" ├── @ MatchRequiredNode (location: (2,0)-(2,8)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (2,0)-(2,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -34,10 +39,11 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ IntegerNode (location: (2,7)-(2,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (2,4)-(2,6) = "=>" ├── @ MatchRequiredNode (location: (3,0)-(3,10)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (3,0)-(3,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -51,9 +57,11 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ FloatNode (location: (3,7)-(3,10)) + │ │ ├── flags: static_literal │ │ └── value: 1.0 │ └── operator_loc: (3,4)-(3,6) = "=>" ├── @ MatchRequiredNode (location: (4,0)-(4,9)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (4,0)-(4,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -67,12 +75,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ImaginaryNode (location: (4,7)-(4,9)) + │ │ ├── flags: static_literal │ │ └── numeric: │ │ @ IntegerNode (location: (4,7)-(4,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (4,4)-(4,6) = "=>" ├── @ MatchRequiredNode (location: (5,0)-(5,9)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (5,0)-(5,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -86,11 +96,12 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ RationalNode (location: (5,7)-(5,9)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ ├── numerator: 1 │ │ └── denominator: 1 │ └── operator_loc: (5,4)-(5,6) = "=>" ├── @ MatchRequiredNode (location: (6,0)-(6,11)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (6,0)-(6,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -104,13 +115,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ SymbolNode (location: (6,7)-(6,11)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (6,7)-(6,8) = ":" │ │ ├── value_loc: (6,8)-(6,11) = "foo" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "foo" │ └── operator_loc: (6,4)-(6,6) = "=>" ├── @ MatchRequiredNode (location: (7,0)-(7,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (7,0)-(7,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -124,13 +136,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ SymbolNode (location: (7,7)-(7,14)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (7,7)-(7,10) = "%s[" │ │ ├── value_loc: (7,10)-(7,13) = "foo" │ │ ├── closing_loc: (7,13)-(7,14) = "]" │ │ └── unescaped: "foo" │ └── operator_loc: (7,4)-(7,6) = "=>" ├── @ MatchRequiredNode (location: (8,0)-(8,13)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (8,0)-(8,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -144,13 +157,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ SymbolNode (location: (8,7)-(8,13)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (8,7)-(8,9) = ":\"" │ │ ├── value_loc: (8,9)-(8,12) = "foo" │ │ ├── closing_loc: (8,12)-(8,13) = "\"" │ │ └── unescaped: "foo" │ └── operator_loc: (8,4)-(8,6) = "=>" ├── @ MatchRequiredNode (location: (9,0)-(9,12)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (9,0)-(9,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -164,13 +178,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ RegularExpressionNode (location: (9,7)-(9,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (9,7)-(9,8) = "/" │ │ ├── content_loc: (9,8)-(9,11) = "foo" │ │ ├── closing_loc: (9,11)-(9,12) = "/" │ │ └── unescaped: "foo" │ └── operator_loc: (9,4)-(9,6) = "=>" ├── @ MatchRequiredNode (location: (10,0)-(10,12)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (10,0)-(10,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -191,6 +206,7 @@ │ │ └── unescaped: "foo" │ └── operator_loc: (10,4)-(10,6) = "=>" ├── @ MatchRequiredNode (location: (11,0)-(11,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (11,0)-(11,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -211,6 +227,7 @@ │ │ └── unescaped: "foo" │ └── operator_loc: (11,4)-(11,6) = "=>" ├── @ MatchRequiredNode (location: (12,0)-(12,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (12,0)-(12,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -224,10 +241,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayNode (location: (12,7)-(12,14)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── elements: (length: 1) │ │ │ └── @ SymbolNode (location: (12,10)-(12,13)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (12,10)-(12,13) = "foo" │ │ │ ├── closing_loc: ∅ @@ -236,6 +253,7 @@ │ │ └── closing_loc: (12,13)-(12,14) = "]" │ └── operator_loc: (12,4)-(12,6) = "=>" ├── @ MatchRequiredNode (location: (13,0)-(13,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (13,0)-(13,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -249,10 +267,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayNode (location: (13,7)-(13,14)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── elements: (length: 1) │ │ │ └── @ SymbolNode (location: (13,10)-(13,13)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (13,10)-(13,13) = "foo" │ │ │ ├── closing_loc: ∅ @@ -261,6 +279,7 @@ │ │ └── closing_loc: (13,13)-(13,14) = "]" │ └── operator_loc: (13,4)-(13,6) = "=>" ├── @ MatchRequiredNode (location: (14,0)-(14,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (14,0)-(14,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -286,6 +305,7 @@ │ │ └── closing_loc: (14,13)-(14,14) = "]" │ └── operator_loc: (14,4)-(14,6) = "=>" ├── @ MatchRequiredNode (location: (15,0)-(15,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (15,0)-(15,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -311,6 +331,7 @@ │ │ └── closing_loc: (15,13)-(15,14) = "]" │ └── operator_loc: (15,4)-(15,6) = "=>" ├── @ MatchRequiredNode (location: (16,0)-(16,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (16,0)-(16,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -331,6 +352,7 @@ │ │ └── unescaped: "foo" │ └── operator_loc: (16,4)-(16,6) = "=>" ├── @ MatchRequiredNode (location: (17,0)-(17,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (17,0)-(17,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -351,6 +373,7 @@ │ │ └── unescaped: "foo" │ └── operator_loc: (17,4)-(17,6) = "=>" ├── @ MatchRequiredNode (location: (18,0)-(18,12)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (18,0)-(18,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -371,6 +394,7 @@ │ │ └── unescaped: "foo" │ └── operator_loc: (18,4)-(18,6) = "=>" ├── @ MatchRequiredNode (location: (19,0)-(19,10)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (19,0)-(19,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -384,8 +408,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ NilNode (location: (19,7)-(19,10)) + │ │ └── flags: static_literal │ └── operator_loc: (19,4)-(19,6) = "=>" ├── @ MatchRequiredNode (location: (20,0)-(20,11)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (20,0)-(20,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -399,8 +425,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ SelfNode (location: (20,7)-(20,11)) + │ │ └── flags: ∅ │ └── operator_loc: (20,4)-(20,6) = "=>" ├── @ MatchRequiredNode (location: (21,0)-(21,11)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (21,0)-(21,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -414,8 +442,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ TrueNode (location: (21,7)-(21,11)) + │ │ └── flags: static_literal │ └── operator_loc: (21,4)-(21,6) = "=>" ├── @ MatchRequiredNode (location: (22,0)-(22,12)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (22,0)-(22,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -429,8 +459,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ FalseNode (location: (22,7)-(22,12)) + │ │ └── flags: static_literal │ └── operator_loc: (22,4)-(22,6) = "=>" ├── @ MatchRequiredNode (location: (23,0)-(23,15)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (23,0)-(23,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -448,6 +480,7 @@ │ │ └── filepath: "patterns.txt" │ └── operator_loc: (23,4)-(23,6) = "=>" ├── @ MatchRequiredNode (location: (24,0)-(24,15)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (24,0)-(24,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -461,8 +494,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ SourceLineNode (location: (24,7)-(24,15)) + │ │ └── flags: static_literal │ └── operator_loc: (24,4)-(24,6) = "=>" ├── @ MatchRequiredNode (location: (25,0)-(25,19)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (25,0)-(25,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -476,8 +511,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ SourceEncodingNode (location: (25,7)-(25,19)) + │ │ └── flags: static_literal │ └── operator_loc: (25,4)-(25,6) = "=>" ├── @ MatchRequiredNode (location: (26,0)-(26,17)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (26,0)-(26,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -491,6 +528,7 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ LambdaNode (location: (26,7)-(26,17)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── operator_loc: (26,7)-(26,9) = "->" │ │ ├── opening_loc: (26,10)-(26,11) = "{" @@ -498,12 +536,15 @@ │ │ ├── parameters: ∅ │ │ └── body: │ │ @ StatementsNode (location: (26,12)-(26,15)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (26,12)-(26,15)) + │ │ ├── flags: newline │ │ ├── name: :bar │ │ └── depth: 1 │ └── operator_loc: (26,4)-(26,6) = "=>" ├── @ MatchRequiredNode (location: (28,0)-(28,13)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (28,0)-(28,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -517,18 +558,19 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ RangeNode (location: (28,7)-(28,13)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (28,7)-(28,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: │ │ │ @ IntegerNode (location: (28,12)-(28,13)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── operator_loc: (28,9)-(28,11) = ".." │ └── operator_loc: (28,4)-(28,6) = "=>" ├── @ MatchRequiredNode (location: (29,0)-(29,17)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (29,0)-(29,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -545,13 +587,16 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ FloatNode (location: (29,7)-(29,10)) + │ │ │ ├── flags: static_literal │ │ │ └── value: 1.0 │ │ ├── right: │ │ │ @ FloatNode (location: (29,14)-(29,17)) + │ │ │ ├── flags: static_literal │ │ │ └── value: 1.0 │ │ └── operator_loc: (29,11)-(29,13) = ".." │ └── operator_loc: (29,4)-(29,6) = "=>" ├── @ MatchRequiredNode (location: (30,0)-(30,15)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (30,0)-(30,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -568,19 +613,22 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ ImaginaryNode (location: (30,7)-(30,9)) + │ │ │ ├── flags: static_literal │ │ │ └── numeric: │ │ │ @ IntegerNode (location: (30,7)-(30,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: │ │ │ @ ImaginaryNode (location: (30,13)-(30,15)) + │ │ │ ├── flags: static_literal │ │ │ └── numeric: │ │ │ @ IntegerNode (location: (30,13)-(30,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── operator_loc: (30,10)-(30,12) = ".." │ └── operator_loc: (30,4)-(30,6) = "=>" ├── @ MatchRequiredNode (location: (31,0)-(31,15)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (31,0)-(31,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -597,17 +645,18 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ RationalNode (location: (31,7)-(31,9)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ ├── numerator: 1 │ │ │ └── denominator: 1 │ │ ├── right: │ │ │ @ RationalNode (location: (31,13)-(31,15)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ ├── numerator: 1 │ │ │ └── denominator: 1 │ │ └── operator_loc: (31,10)-(31,12) = ".." │ └── operator_loc: (31,4)-(31,6) = "=>" ├── @ MatchRequiredNode (location: (32,0)-(32,19)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (32,0)-(32,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -624,14 +673,14 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ SymbolNode (location: (32,7)-(32,11)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (32,7)-(32,8) = ":" │ │ │ ├── value_loc: (32,8)-(32,11) = "foo" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "foo" │ │ ├── right: │ │ │ @ SymbolNode (location: (32,15)-(32,19)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (32,15)-(32,16) = ":" │ │ │ ├── value_loc: (32,16)-(32,19) = "foo" │ │ │ ├── closing_loc: ∅ @@ -639,6 +688,7 @@ │ │ └── operator_loc: (32,12)-(32,14) = ".." │ └── operator_loc: (32,4)-(32,6) = "=>" ├── @ MatchRequiredNode (location: (33,0)-(33,25)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (33,0)-(33,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -655,14 +705,14 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ SymbolNode (location: (33,7)-(33,14)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (33,7)-(33,10) = "%s[" │ │ │ ├── value_loc: (33,10)-(33,13) = "foo" │ │ │ ├── closing_loc: (33,13)-(33,14) = "]" │ │ │ └── unescaped: "foo" │ │ ├── right: │ │ │ @ SymbolNode (location: (33,18)-(33,25)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (33,18)-(33,21) = "%s[" │ │ │ ├── value_loc: (33,21)-(33,24) = "foo" │ │ │ ├── closing_loc: (33,24)-(33,25) = "]" @@ -670,6 +720,7 @@ │ │ └── operator_loc: (33,15)-(33,17) = ".." │ └── operator_loc: (33,4)-(33,6) = "=>" ├── @ MatchRequiredNode (location: (34,0)-(34,23)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (34,0)-(34,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -686,14 +737,14 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ SymbolNode (location: (34,7)-(34,13)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (34,7)-(34,9) = ":\"" │ │ │ ├── value_loc: (34,9)-(34,12) = "foo" │ │ │ ├── closing_loc: (34,12)-(34,13) = "\"" │ │ │ └── unescaped: "foo" │ │ ├── right: │ │ │ @ SymbolNode (location: (34,17)-(34,23)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (34,17)-(34,19) = ":\"" │ │ │ ├── value_loc: (34,19)-(34,22) = "foo" │ │ │ ├── closing_loc: (34,22)-(34,23) = "\"" @@ -701,6 +752,7 @@ │ │ └── operator_loc: (34,14)-(34,16) = ".." │ └── operator_loc: (34,4)-(34,6) = "=>" ├── @ MatchRequiredNode (location: (35,0)-(35,21)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (35,0)-(35,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -717,14 +769,14 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ RegularExpressionNode (location: (35,7)-(35,12)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (35,7)-(35,8) = "/" │ │ │ ├── content_loc: (35,8)-(35,11) = "foo" │ │ │ ├── closing_loc: (35,11)-(35,12) = "/" │ │ │ └── unescaped: "foo" │ │ ├── right: │ │ │ @ RegularExpressionNode (location: (35,16)-(35,21)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (35,16)-(35,17) = "/" │ │ │ ├── content_loc: (35,17)-(35,20) = "foo" │ │ │ ├── closing_loc: (35,20)-(35,21) = "/" @@ -732,6 +784,7 @@ │ │ └── operator_loc: (35,13)-(35,15) = ".." │ └── operator_loc: (35,4)-(35,6) = "=>" ├── @ MatchRequiredNode (location: (36,0)-(36,21)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (36,0)-(36,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -763,6 +816,7 @@ │ │ └── operator_loc: (36,13)-(36,15) = ".." │ └── operator_loc: (36,4)-(36,6) = "=>" ├── @ MatchRequiredNode (location: (37,0)-(37,25)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (37,0)-(37,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -794,6 +848,7 @@ │ │ └── operator_loc: (37,15)-(37,17) = ".." │ └── operator_loc: (37,4)-(37,6) = "=>" ├── @ MatchRequiredNode (location: (38,0)-(38,25)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (38,0)-(38,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -810,10 +865,10 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ ArrayNode (location: (38,7)-(38,14)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 1) │ │ │ │ └── @ SymbolNode (location: (38,10)-(38,13)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (38,10)-(38,13) = "foo" │ │ │ │ ├── closing_loc: ∅ @@ -822,10 +877,10 @@ │ │ │ └── closing_loc: (38,13)-(38,14) = "]" │ │ ├── right: │ │ │ @ ArrayNode (location: (38,18)-(38,25)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 1) │ │ │ │ └── @ SymbolNode (location: (38,21)-(38,24)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (38,21)-(38,24) = "foo" │ │ │ │ ├── closing_loc: ∅ @@ -835,6 +890,7 @@ │ │ └── operator_loc: (38,15)-(38,17) = ".." │ └── operator_loc: (38,4)-(38,6) = "=>" ├── @ MatchRequiredNode (location: (39,0)-(39,25)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (39,0)-(39,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -851,10 +907,10 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ ArrayNode (location: (39,7)-(39,14)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 1) │ │ │ │ └── @ SymbolNode (location: (39,10)-(39,13)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (39,10)-(39,13) = "foo" │ │ │ │ ├── closing_loc: ∅ @@ -863,10 +919,10 @@ │ │ │ └── closing_loc: (39,13)-(39,14) = "]" │ │ ├── right: │ │ │ @ ArrayNode (location: (39,18)-(39,25)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 1) │ │ │ │ └── @ SymbolNode (location: (39,21)-(39,24)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (39,21)-(39,24) = "foo" │ │ │ │ ├── closing_loc: ∅ @@ -876,6 +932,7 @@ │ │ └── operator_loc: (39,15)-(39,17) = ".." │ └── operator_loc: (39,4)-(39,6) = "=>" ├── @ MatchRequiredNode (location: (40,0)-(40,25)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (40,0)-(40,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -917,6 +974,7 @@ │ │ └── operator_loc: (40,15)-(40,17) = ".." │ └── operator_loc: (40,4)-(40,6) = "=>" ├── @ MatchRequiredNode (location: (41,0)-(41,25)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (41,0)-(41,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -958,6 +1016,7 @@ │ │ └── operator_loc: (41,15)-(41,17) = ".." │ └── operator_loc: (41,4)-(41,6) = "=>" ├── @ MatchRequiredNode (location: (42,0)-(42,25)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (42,0)-(42,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -989,6 +1048,7 @@ │ │ └── operator_loc: (42,15)-(42,17) = ".." │ └── operator_loc: (42,4)-(42,6) = "=>" ├── @ MatchRequiredNode (location: (43,0)-(43,25)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (43,0)-(43,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1020,6 +1080,7 @@ │ │ └── operator_loc: (43,15)-(43,17) = ".." │ └── operator_loc: (43,4)-(43,6) = "=>" ├── @ MatchRequiredNode (location: (44,0)-(44,21)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (44,0)-(44,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1051,6 +1112,7 @@ │ │ └── operator_loc: (44,13)-(44,15) = ".." │ └── operator_loc: (44,4)-(44,6) = "=>" ├── @ MatchRequiredNode (location: (45,0)-(45,17)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (45,0)-(45,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1064,14 +1126,17 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ RangeNode (location: (45,7)-(45,17)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ NilNode (location: (45,7)-(45,10)) + │ │ │ └── flags: static_literal │ │ ├── right: │ │ │ @ NilNode (location: (45,14)-(45,17)) + │ │ │ └── flags: static_literal │ │ └── operator_loc: (45,11)-(45,13) = ".." │ └── operator_loc: (45,4)-(45,6) = "=>" ├── @ MatchRequiredNode (location: (46,0)-(46,19)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (46,0)-(46,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1088,11 +1153,14 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ SelfNode (location: (46,7)-(46,11)) + │ │ │ └── flags: ∅ │ │ ├── right: │ │ │ @ SelfNode (location: (46,15)-(46,19)) + │ │ │ └── flags: ∅ │ │ └── operator_loc: (46,12)-(46,14) = ".." │ └── operator_loc: (46,4)-(46,6) = "=>" ├── @ MatchRequiredNode (location: (47,0)-(47,19)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (47,0)-(47,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1109,11 +1177,14 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ TrueNode (location: (47,7)-(47,11)) + │ │ │ └── flags: static_literal │ │ ├── right: │ │ │ @ TrueNode (location: (47,15)-(47,19)) + │ │ │ └── flags: static_literal │ │ └── operator_loc: (47,12)-(47,14) = ".." │ └── operator_loc: (47,4)-(47,6) = "=>" ├── @ MatchRequiredNode (location: (48,0)-(48,21)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (48,0)-(48,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1130,11 +1201,14 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ FalseNode (location: (48,7)-(48,12)) + │ │ │ └── flags: static_literal │ │ ├── right: │ │ │ @ FalseNode (location: (48,16)-(48,21)) + │ │ │ └── flags: static_literal │ │ └── operator_loc: (48,13)-(48,15) = ".." │ └── operator_loc: (48,4)-(48,6) = "=>" ├── @ MatchRequiredNode (location: (49,0)-(49,27)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (49,0)-(49,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1160,6 +1234,7 @@ │ │ └── operator_loc: (49,16)-(49,18) = ".." │ └── operator_loc: (49,4)-(49,6) = "=>" ├── @ MatchRequiredNode (location: (50,0)-(50,27)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (50,0)-(50,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1176,11 +1251,14 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ SourceLineNode (location: (50,7)-(50,15)) + │ │ │ └── flags: static_literal │ │ ├── right: │ │ │ @ SourceLineNode (location: (50,19)-(50,27)) + │ │ │ └── flags: static_literal │ │ └── operator_loc: (50,16)-(50,18) = ".." │ └── operator_loc: (50,4)-(50,6) = "=>" ├── @ MatchRequiredNode (location: (51,0)-(51,35)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (51,0)-(51,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1197,11 +1275,14 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ SourceEncodingNode (location: (51,7)-(51,19)) + │ │ │ └── flags: static_literal │ │ ├── right: │ │ │ @ SourceEncodingNode (location: (51,23)-(51,35)) + │ │ │ └── flags: static_literal │ │ └── operator_loc: (51,20)-(51,22) = ".." │ └── operator_loc: (51,4)-(51,6) = "=>" ├── @ MatchRequiredNode (location: (52,0)-(52,31)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (52,0)-(52,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1218,6 +1299,7 @@ │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ LambdaNode (location: (52,7)-(52,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [] │ │ │ ├── operator_loc: (52,7)-(52,9) = "->" │ │ │ ├── opening_loc: (52,10)-(52,11) = "{" @@ -1225,12 +1307,15 @@ │ │ │ ├── parameters: ∅ │ │ │ └── body: │ │ │ @ StatementsNode (location: (52,12)-(52,15)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (52,12)-(52,15)) + │ │ │ ├── flags: newline │ │ │ ├── name: :bar │ │ │ └── depth: 1 │ │ ├── right: │ │ │ @ LambdaNode (location: (52,21)-(52,31)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [] │ │ │ ├── operator_loc: (52,21)-(52,23) = "->" │ │ │ ├── opening_loc: (52,24)-(52,25) = "{" @@ -1238,22 +1323,26 @@ │ │ │ ├── parameters: ∅ │ │ │ └── body: │ │ │ @ StatementsNode (location: (52,26)-(52,29)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (52,26)-(52,29)) + │ │ │ ├── flags: newline │ │ │ ├── name: :bar │ │ │ └── depth: 1 │ │ └── operator_loc: (52,18)-(52,20) = ".." │ └── operator_loc: (52,4)-(52,6) = "=>" ├── @ LocalVariableWriteNode (location: (54,0)-(54,7)) + │ ├── flags: newline │ ├── name: :bar │ ├── depth: 0 │ ├── name_loc: (54,0)-(54,3) = "bar" │ ├── value: │ │ @ IntegerNode (location: (54,6)-(54,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (54,4)-(54,5) = "=" ├── @ MatchRequiredNode (location: (54,9)-(54,20)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (54,9)-(54,12)) │ │ ├── flags: variable_call, ignore_visibility @@ -1267,13 +1356,16 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ PinnedVariableNode (location: (54,16)-(54,20)) + │ │ ├── flags: ∅ │ │ ├── variable: │ │ │ @ LocalVariableReadNode (location: (54,17)-(54,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ └── operator_loc: (54,16)-(54,17) = "^" │ └── operator_loc: (54,13)-(54,15) = "=>" ├── @ MatchRequiredNode (location: (55,0)-(55,12)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (55,0)-(55,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1287,12 +1379,15 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ PinnedVariableNode (location: (55,7)-(55,12)) + │ │ ├── flags: ∅ │ │ ├── variable: │ │ │ @ InstanceVariableReadNode (location: (55,8)-(55,12)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :@bar │ │ └── operator_loc: (55,7)-(55,8) = "^" │ └── operator_loc: (55,4)-(55,6) = "=>" ├── @ MatchRequiredNode (location: (56,0)-(56,13)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (56,0)-(56,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1306,12 +1401,15 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ PinnedVariableNode (location: (56,7)-(56,13)) + │ │ ├── flags: ∅ │ │ ├── variable: │ │ │ @ ClassVariableReadNode (location: (56,8)-(56,13)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :@@bar │ │ └── operator_loc: (56,7)-(56,8) = "^" │ └── operator_loc: (56,4)-(56,6) = "=>" ├── @ MatchRequiredNode (location: (57,0)-(57,12)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (57,0)-(57,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1325,12 +1423,15 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ PinnedVariableNode (location: (57,7)-(57,12)) + │ │ ├── flags: ∅ │ │ ├── variable: │ │ │ @ GlobalVariableReadNode (location: (57,8)-(57,12)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :$bar │ │ └── operator_loc: (57,7)-(57,8) = "^" │ └── operator_loc: (57,4)-(57,6) = "=>" ├── @ MatchRequiredNode (location: (59,0)-(59,11)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (59,0)-(59,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1344,15 +1445,17 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ PinnedExpressionNode (location: (59,7)-(59,11)) + │ │ ├── flags: ∅ │ │ ├── expression: │ │ │ @ IntegerNode (location: (59,9)-(59,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── operator_loc: (59,7)-(59,8) = "^" │ │ ├── lparen_loc: (59,8)-(59,9) = "(" │ │ └── rparen_loc: (59,10)-(59,11) = ")" │ └── operator_loc: (59,4)-(59,6) = "=>" ├── @ MatchRequiredNode (location: (60,0)-(60,13)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (60,0)-(60,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1366,13 +1469,16 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ PinnedExpressionNode (location: (60,7)-(60,13)) + │ │ ├── flags: ∅ │ │ ├── expression: │ │ │ @ NilNode (location: (60,9)-(60,12)) + │ │ │ └── flags: static_literal │ │ ├── operator_loc: (60,7)-(60,8) = "^" │ │ ├── lparen_loc: (60,8)-(60,9) = "(" │ │ └── rparen_loc: (60,12)-(60,13) = ")" │ └── operator_loc: (60,4)-(60,6) = "=>" ├── @ MatchRequiredNode (location: (61,0)-(61,23)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (61,0)-(61,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1386,6 +1492,7 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ PinnedExpressionNode (location: (61,7)-(61,23)) + │ │ ├── flags: ∅ │ │ ├── expression: │ │ │ @ CallNode (location: (61,9)-(61,22)) │ │ │ ├── flags: ∅ @@ -1417,6 +1524,7 @@ │ │ └── rparen_loc: (61,22)-(61,23) = ")" │ └── operator_loc: (61,4)-(61,6) = "=>" ├── @ MatchRequiredNode (location: (63,0)-(63,10)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (63,0)-(63,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1430,9 +1538,11 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ConstantReadNode (location: (63,7)-(63,10)) + │ │ ├── flags: ∅ │ │ └── name: :Foo │ └── operator_loc: (63,4)-(63,6) = "=>" ├── @ MatchRequiredNode (location: (64,0)-(64,20)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (64,0)-(64,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1446,10 +1556,13 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ConstantPathNode (location: (64,7)-(64,20)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantPathNode (location: (64,7)-(64,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── parent: │ │ │ │ @ ConstantReadNode (location: (64,7)-(64,10)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :Foo │ │ │ ├── name: :Bar │ │ │ ├── delimiter_loc: (64,10)-(64,12) = "::" @@ -1459,6 +1572,7 @@ │ │ └── name_loc: (64,17)-(64,20) = "Baz" │ └── operator_loc: (64,4)-(64,6) = "=>" ├── @ MatchRequiredNode (location: (65,0)-(65,12)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (65,0)-(65,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1472,12 +1586,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ConstantPathNode (location: (65,7)-(65,12)) + │ │ ├── flags: ∅ │ │ ├── parent: ∅ │ │ ├── name: :Foo │ │ ├── delimiter_loc: (65,7)-(65,9) = "::" │ │ └── name_loc: (65,9)-(65,12) = "Foo" │ └── operator_loc: (65,4)-(65,6) = "=>" ├── @ MatchRequiredNode (location: (66,0)-(66,22)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (66,0)-(66,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1491,10 +1607,13 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ConstantPathNode (location: (66,7)-(66,22)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantPathNode (location: (66,7)-(66,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── parent: │ │ │ │ @ ConstantPathNode (location: (66,7)-(66,12)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── parent: ∅ │ │ │ │ ├── name: :Foo │ │ │ │ ├── delimiter_loc: (66,7)-(66,9) = "::" @@ -1507,6 +1626,7 @@ │ │ └── name_loc: (66,19)-(66,22) = "Baz" │ └── operator_loc: (66,4)-(66,6) = "=>" ├── @ MatchRequiredNode (location: (68,0)-(68,12)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (68,0)-(68,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1520,8 +1640,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (68,7)-(68,12)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (68,7)-(68,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── requireds: (length: 0) │ │ ├── rest: ∅ @@ -1530,6 +1652,7 @@ │ │ └── closing_loc: (68,11)-(68,12) = ")" │ └── operator_loc: (68,4)-(68,6) = "=>" ├── @ MatchRequiredNode (location: (69,0)-(69,13)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (69,0)-(69,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1543,12 +1666,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (69,7)-(69,13)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (69,7)-(69,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── requireds: (length: 1) │ │ │ └── @ IntegerNode (location: (69,11)-(69,12)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) @@ -1556,6 +1681,7 @@ │ │ └── closing_loc: (69,12)-(69,13) = ")" │ └── operator_loc: (69,4)-(69,6) = "=>" ├── @ MatchRequiredNode (location: (70,0)-(70,19)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (70,0)-(70,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1569,18 +1695,20 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (70,7)-(70,19)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (70,7)-(70,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── requireds: (length: 3) │ │ │ ├── @ IntegerNode (location: (70,11)-(70,12)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── @ IntegerNode (location: (70,14)-(70,15)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── @ IntegerNode (location: (70,17)-(70,18)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) @@ -1588,6 +1716,7 @@ │ │ └── closing_loc: (70,18)-(70,19) = ")" │ └── operator_loc: (70,4)-(70,6) = "=>" ├── @ MatchRequiredNode (location: (71,0)-(71,15)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (71,0)-(71,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1601,11 +1730,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (71,7)-(71,15)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (71,7)-(71,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (71,11)-(71,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── rest: ∅ @@ -1614,6 +1746,7 @@ │ │ └── closing_loc: (71,14)-(71,15) = ")" │ └── operator_loc: (71,4)-(71,6) = "=>" ├── @ MatchRequiredNode (location: (72,0)-(72,21)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (72,0)-(72,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1627,25 +1760,31 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (72,7)-(72,21)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (72,7)-(72,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── requireds: (length: 0) │ │ ├── rest: │ │ │ @ SplatNode (location: (72,11)-(72,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (72,11)-(72,12) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (72,12)-(72,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── posts: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (72,17)-(72,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ ├── opening_loc: (72,10)-(72,11) = "(" │ │ └── closing_loc: (72,20)-(72,21) = ")" │ └── operator_loc: (72,4)-(72,6) = "=>" ├── @ MatchRequiredNode (location: (73,0)-(73,21)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (73,0)-(73,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1659,18 +1798,23 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (73,7)-(73,21)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (73,7)-(73,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (73,11)-(73,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── rest: │ │ │ @ SplatNode (location: (73,16)-(73,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (73,16)-(73,17) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (73,17)-(73,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ ├── posts: (length: 0) @@ -1678,6 +1822,7 @@ │ │ └── closing_loc: (73,20)-(73,21) = ")" │ └── operator_loc: (73,4)-(73,6) = "=>" ├── @ MatchRequiredNode (location: (74,0)-(74,27)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (74,0)-(74,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1691,31 +1836,39 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ FindPatternNode (location: (74,7)-(74,27)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (74,7)-(74,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── left: │ │ │ @ SplatNode (location: (74,11)-(74,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (74,11)-(74,12) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (74,12)-(74,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (74,17)-(74,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ ├── right: │ │ │ @ SplatNode (location: (74,22)-(74,26)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (74,22)-(74,23) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (74,23)-(74,26)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :qux │ │ │ └── depth: 0 │ │ ├── opening_loc: (74,10)-(74,11) = "(" │ │ └── closing_loc: (74,26)-(74,27) = ")" │ └── operator_loc: (74,4)-(74,6) = "=>" ├── @ MatchRequiredNode (location: (76,0)-(76,12)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (76,0)-(76,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1729,8 +1882,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (76,7)-(76,12)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (76,7)-(76,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── requireds: (length: 0) │ │ ├── rest: ∅ @@ -1739,6 +1894,7 @@ │ │ └── closing_loc: (76,11)-(76,12) = "]" │ └── operator_loc: (76,4)-(76,6) = "=>" ├── @ MatchRequiredNode (location: (77,0)-(77,13)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (77,0)-(77,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1752,12 +1908,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (77,7)-(77,13)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (77,7)-(77,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── requireds: (length: 1) │ │ │ └── @ IntegerNode (location: (77,11)-(77,12)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) @@ -1765,6 +1923,7 @@ │ │ └── closing_loc: (77,12)-(77,13) = "]" │ └── operator_loc: (77,4)-(77,6) = "=>" ├── @ MatchRequiredNode (location: (78,0)-(78,19)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (78,0)-(78,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1778,18 +1937,20 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (78,7)-(78,19)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (78,7)-(78,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── requireds: (length: 3) │ │ │ ├── @ IntegerNode (location: (78,11)-(78,12)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── @ IntegerNode (location: (78,14)-(78,15)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── @ IntegerNode (location: (78,17)-(78,18)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) @@ -1797,6 +1958,7 @@ │ │ └── closing_loc: (78,18)-(78,19) = "]" │ └── operator_loc: (78,4)-(78,6) = "=>" ├── @ MatchRequiredNode (location: (79,0)-(79,17)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (79,0)-(79,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1810,13 +1972,17 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (79,7)-(79,17)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (79,7)-(79,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── requireds: (length: 1) │ │ │ └── @ ArrayPatternNode (location: (79,11)-(79,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: │ │ │ │ @ ConstantReadNode (location: (79,11)-(79,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :Foo │ │ │ ├── requireds: (length: 0) │ │ │ ├── rest: ∅ @@ -1829,6 +1995,7 @@ │ │ └── closing_loc: (79,16)-(79,17) = "]" │ └── operator_loc: (79,4)-(79,6) = "=>" ├── @ MatchRequiredNode (location: (80,0)-(80,15)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (80,0)-(80,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1842,11 +2009,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (80,7)-(80,15)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (80,7)-(80,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (80,11)-(80,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── rest: ∅ @@ -1855,6 +2025,7 @@ │ │ └── closing_loc: (80,14)-(80,15) = "]" │ └── operator_loc: (80,4)-(80,6) = "=>" ├── @ MatchRequiredNode (location: (81,0)-(81,21)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (81,0)-(81,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1868,25 +2039,31 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (81,7)-(81,21)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (81,7)-(81,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── requireds: (length: 0) │ │ ├── rest: │ │ │ @ SplatNode (location: (81,11)-(81,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (81,11)-(81,12) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (81,12)-(81,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── posts: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (81,17)-(81,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ ├── opening_loc: (81,10)-(81,11) = "[" │ │ └── closing_loc: (81,20)-(81,21) = "]" │ └── operator_loc: (81,4)-(81,6) = "=>" ├── @ MatchRequiredNode (location: (82,0)-(82,21)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (82,0)-(82,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1900,18 +2077,23 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (82,7)-(82,21)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (82,7)-(82,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (82,11)-(82,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── rest: │ │ │ @ SplatNode (location: (82,16)-(82,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (82,16)-(82,17) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (82,17)-(82,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ ├── posts: (length: 0) @@ -1919,6 +2101,7 @@ │ │ └── closing_loc: (82,20)-(82,21) = "]" │ └── operator_loc: (82,4)-(82,6) = "=>" ├── @ MatchRequiredNode (location: (83,0)-(83,27)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (83,0)-(83,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1932,31 +2115,39 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ FindPatternNode (location: (83,7)-(83,27)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (83,7)-(83,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Foo │ │ ├── left: │ │ │ @ SplatNode (location: (83,11)-(83,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (83,11)-(83,12) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (83,12)-(83,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (83,17)-(83,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ ├── right: │ │ │ @ SplatNode (location: (83,22)-(83,26)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (83,22)-(83,23) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (83,23)-(83,26)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :qux │ │ │ └── depth: 0 │ │ ├── opening_loc: (83,10)-(83,11) = "[" │ │ └── closing_loc: (83,26)-(83,27) = "]" │ └── operator_loc: (83,4)-(83,6) = "=>" ├── @ MatchRequiredNode (location: (85,0)-(85,11)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (85,0)-(85,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1970,13 +2161,16 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (85,7)-(85,11)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 0) │ │ ├── rest: │ │ │ @ SplatNode (location: (85,7)-(85,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (85,7)-(85,8) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (85,8)-(85,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── posts: (length: 0) @@ -1984,6 +2178,7 @@ │ │ └── closing_loc: ∅ │ └── operator_loc: (85,4)-(85,6) = "=>" ├── @ MatchRequiredNode (location: (86,0)-(86,21)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (86,0)-(86,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1997,26 +2192,32 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (86,7)-(86,21)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 0) │ │ ├── rest: │ │ │ @ SplatNode (location: (86,7)-(86,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (86,7)-(86,8) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (86,8)-(86,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── posts: (length: 2) │ │ │ ├── @ LocalVariableTargetNode (location: (86,13)-(86,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ └── @ LocalVariableTargetNode (location: (86,18)-(86,21)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :qux │ │ │ └── depth: 0 │ │ ├── opening_loc: ∅ │ │ └── closing_loc: ∅ │ └── operator_loc: (86,4)-(86,6) = "=>" ├── @ MatchRequiredNode (location: (87,0)-(87,21)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (87,0)-(87,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2030,26 +2231,32 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (87,7)-(87,21)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (87,7)-(87,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── rest: │ │ │ @ SplatNode (location: (87,12)-(87,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (87,12)-(87,13) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (87,13)-(87,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ ├── posts: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (87,18)-(87,21)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :qux │ │ │ └── depth: 0 │ │ ├── opening_loc: ∅ │ │ └── closing_loc: ∅ │ └── operator_loc: (87,4)-(87,6) = "=>" ├── @ MatchRequiredNode (location: (88,0)-(88,21)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (88,0)-(88,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2063,19 +2270,24 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (88,7)-(88,21)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ LocalVariableTargetNode (location: (88,7)-(88,10)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :bar │ │ │ │ └── depth: 0 │ │ │ └── @ LocalVariableTargetNode (location: (88,12)-(88,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ ├── rest: │ │ │ @ SplatNode (location: (88,17)-(88,21)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (88,17)-(88,18) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (88,18)-(88,21)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :qux │ │ │ └── depth: 0 │ │ ├── posts: (length: 0) @@ -2083,6 +2295,7 @@ │ │ └── closing_loc: ∅ │ └── operator_loc: (88,4)-(88,6) = "=>" ├── @ MatchRequiredNode (location: (89,0)-(89,22)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (89,0)-(89,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2096,29 +2309,36 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ FindPatternNode (location: (89,7)-(89,22)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── left: │ │ │ @ SplatNode (location: (89,7)-(89,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (89,7)-(89,8) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (89,8)-(89,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (89,13)-(89,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ ├── right: │ │ │ @ SplatNode (location: (89,18)-(89,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (89,18)-(89,19) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (89,19)-(89,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :qux │ │ │ └── depth: 0 │ │ ├── opening_loc: ∅ │ │ └── closing_loc: ∅ │ └── operator_loc: (89,4)-(89,6) = "=>" ├── @ MatchRequiredNode (location: (91,0)-(91,11)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (91,0)-(91,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2132,18 +2352,22 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (91,7)-(91,11)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (91,7)-(91,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── rest: │ │ │ @ ImplicitRestNode (location: (91,10)-(91,11)) + │ │ │ └── flags: ∅ │ │ ├── posts: (length: 0) │ │ ├── opening_loc: ∅ │ │ └── closing_loc: ∅ │ └── operator_loc: (91,4)-(91,6) = "=>" ├── @ MatchRequiredNode (location: (95,0)-(95,9)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (95,0)-(95,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2157,6 +2381,7 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (95,7)-(95,9)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 0) │ │ ├── rest: ∅ @@ -2165,6 +2390,7 @@ │ │ └── closing_loc: (95,8)-(95,9) = "]" │ └── operator_loc: (95,4)-(95,6) = "=>" ├── @ MatchRequiredNode (location: (96,0)-(96,17)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (96,0)-(96,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2178,18 +2404,23 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (96,7)-(96,17)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ ArrayPatternNode (location: (96,8)-(96,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ ArrayPatternNode (location: (96,9)-(96,15)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ └── @ ArrayPatternNode (location: (96,10)-(96,14)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── constant: ∅ │ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ │ └── @ ArrayPatternNode (location: (96,11)-(96,13)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── constant: ∅ │ │ │ │ │ │ ├── requireds: (length: 0) │ │ │ │ │ │ ├── rest: ∅ @@ -2214,6 +2445,7 @@ │ │ └── closing_loc: (96,16)-(96,17) = "]" │ └── operator_loc: (96,4)-(96,6) = "=>" ├── @ MatchRequiredNode (location: (98,0)-(98,13)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (98,0)-(98,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2227,13 +2459,16 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (98,7)-(98,13)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 0) │ │ ├── rest: │ │ │ @ SplatNode (location: (98,8)-(98,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (98,8)-(98,9) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (98,9)-(98,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── posts: (length: 0) @@ -2241,6 +2476,7 @@ │ │ └── closing_loc: (98,12)-(98,13) = "]" │ └── operator_loc: (98,4)-(98,6) = "=>" ├── @ MatchRequiredNode (location: (99,0)-(99,23)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (99,0)-(99,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2254,26 +2490,32 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (99,7)-(99,23)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 0) │ │ ├── rest: │ │ │ @ SplatNode (location: (99,8)-(99,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (99,8)-(99,9) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (99,9)-(99,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── posts: (length: 2) │ │ │ ├── @ LocalVariableTargetNode (location: (99,14)-(99,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ └── @ LocalVariableTargetNode (location: (99,19)-(99,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :qux │ │ │ └── depth: 0 │ │ ├── opening_loc: (99,7)-(99,8) = "[" │ │ └── closing_loc: (99,22)-(99,23) = "]" │ └── operator_loc: (99,4)-(99,6) = "=>" ├── @ MatchRequiredNode (location: (100,0)-(100,23)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (100,0)-(100,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2287,26 +2529,32 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (100,7)-(100,23)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (100,8)-(100,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── rest: │ │ │ @ SplatNode (location: (100,13)-(100,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (100,13)-(100,14) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (100,14)-(100,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ ├── posts: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (100,19)-(100,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :qux │ │ │ └── depth: 0 │ │ ├── opening_loc: (100,7)-(100,8) = "[" │ │ └── closing_loc: (100,22)-(100,23) = "]" │ └── operator_loc: (100,4)-(100,6) = "=>" ├── @ MatchRequiredNode (location: (101,0)-(101,23)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (101,0)-(101,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2320,19 +2568,24 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (101,7)-(101,23)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ LocalVariableTargetNode (location: (101,8)-(101,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :bar │ │ │ │ └── depth: 0 │ │ │ └── @ LocalVariableTargetNode (location: (101,13)-(101,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ ├── rest: │ │ │ @ SplatNode (location: (101,18)-(101,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (101,18)-(101,19) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (101,19)-(101,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :qux │ │ │ └── depth: 0 │ │ ├── posts: (length: 0) @@ -2340,6 +2593,7 @@ │ │ └── closing_loc: (101,22)-(101,23) = "]" │ └── operator_loc: (101,4)-(101,6) = "=>" ├── @ MatchRequiredNode (location: (102,0)-(102,24)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (102,0)-(102,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2353,29 +2607,36 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ FindPatternNode (location: (102,7)-(102,24)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── left: │ │ │ @ SplatNode (location: (102,8)-(102,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (102,8)-(102,9) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (102,9)-(102,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (102,14)-(102,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ ├── right: │ │ │ @ SplatNode (location: (102,19)-(102,23)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (102,19)-(102,20) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (102,20)-(102,23)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :qux │ │ │ └── depth: 0 │ │ ├── opening_loc: (102,7)-(102,8) = "[" │ │ └── closing_loc: (102,23)-(102,24) = "]" │ └── operator_loc: (102,4)-(102,6) = "=>" ├── @ MatchPredicateNode (location: (104,0)-(104,10)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (104,0)-(104,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2389,10 +2650,12 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ LocalVariableTargetNode (location: (104,7)-(104,10)) + │ │ ├── flags: ∅ │ │ ├── name: :bar │ │ └── depth: 0 │ └── operator_loc: (104,4)-(104,6) = "in" ├── @ MatchPredicateNode (location: (105,0)-(105,8)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (105,0)-(105,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2406,10 +2669,11 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ IntegerNode (location: (105,7)-(105,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (105,4)-(105,6) = "in" ├── @ MatchPredicateNode (location: (106,0)-(106,10)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (106,0)-(106,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2423,9 +2687,11 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ FloatNode (location: (106,7)-(106,10)) + │ │ ├── flags: static_literal │ │ └── value: 1.0 │ └── operator_loc: (106,4)-(106,6) = "in" ├── @ MatchPredicateNode (location: (107,0)-(107,9)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (107,0)-(107,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2439,12 +2705,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ImaginaryNode (location: (107,7)-(107,9)) + │ │ ├── flags: static_literal │ │ └── numeric: │ │ @ IntegerNode (location: (107,7)-(107,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (107,4)-(107,6) = "in" ├── @ MatchPredicateNode (location: (108,0)-(108,9)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (108,0)-(108,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2458,11 +2726,12 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ RationalNode (location: (108,7)-(108,9)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ ├── numerator: 1 │ │ └── denominator: 1 │ └── operator_loc: (108,4)-(108,6) = "in" ├── @ MatchPredicateNode (location: (109,0)-(109,11)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (109,0)-(109,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2476,13 +2745,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ SymbolNode (location: (109,7)-(109,11)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (109,7)-(109,8) = ":" │ │ ├── value_loc: (109,8)-(109,11) = "foo" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "foo" │ └── operator_loc: (109,4)-(109,6) = "in" ├── @ MatchPredicateNode (location: (110,0)-(110,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (110,0)-(110,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2496,13 +2766,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ SymbolNode (location: (110,7)-(110,14)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (110,7)-(110,10) = "%s[" │ │ ├── value_loc: (110,10)-(110,13) = "foo" │ │ ├── closing_loc: (110,13)-(110,14) = "]" │ │ └── unescaped: "foo" │ └── operator_loc: (110,4)-(110,6) = "in" ├── @ MatchPredicateNode (location: (111,0)-(111,13)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (111,0)-(111,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2516,13 +2787,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ SymbolNode (location: (111,7)-(111,13)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (111,7)-(111,9) = ":\"" │ │ ├── value_loc: (111,9)-(111,12) = "foo" │ │ ├── closing_loc: (111,12)-(111,13) = "\"" │ │ └── unescaped: "foo" │ └── operator_loc: (111,4)-(111,6) = "in" ├── @ MatchPredicateNode (location: (112,0)-(112,12)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (112,0)-(112,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2536,13 +2808,14 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ RegularExpressionNode (location: (112,7)-(112,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (112,7)-(112,8) = "/" │ │ ├── content_loc: (112,8)-(112,11) = "foo" │ │ ├── closing_loc: (112,11)-(112,12) = "/" │ │ └── unescaped: "foo" │ └── operator_loc: (112,4)-(112,6) = "in" ├── @ MatchPredicateNode (location: (113,0)-(113,12)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (113,0)-(113,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2563,6 +2836,7 @@ │ │ └── unescaped: "foo" │ └── operator_loc: (113,4)-(113,6) = "in" ├── @ MatchPredicateNode (location: (114,0)-(114,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (114,0)-(114,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2583,6 +2857,7 @@ │ │ └── unescaped: "foo" │ └── operator_loc: (114,4)-(114,6) = "in" ├── @ MatchPredicateNode (location: (115,0)-(115,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (115,0)-(115,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2596,10 +2871,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayNode (location: (115,7)-(115,14)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── elements: (length: 1) │ │ │ └── @ SymbolNode (location: (115,10)-(115,13)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (115,10)-(115,13) = "foo" │ │ │ ├── closing_loc: ∅ @@ -2608,6 +2883,7 @@ │ │ └── closing_loc: (115,13)-(115,14) = "]" │ └── operator_loc: (115,4)-(115,6) = "in" ├── @ MatchPredicateNode (location: (116,0)-(116,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (116,0)-(116,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2621,10 +2897,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayNode (location: (116,7)-(116,14)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── elements: (length: 1) │ │ │ └── @ SymbolNode (location: (116,10)-(116,13)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (116,10)-(116,13) = "foo" │ │ │ ├── closing_loc: ∅ @@ -2633,6 +2909,7 @@ │ │ └── closing_loc: (116,13)-(116,14) = "]" │ └── operator_loc: (116,4)-(116,6) = "in" ├── @ MatchPredicateNode (location: (117,0)-(117,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (117,0)-(117,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2658,6 +2935,7 @@ │ │ └── closing_loc: (117,13)-(117,14) = "]" │ └── operator_loc: (117,4)-(117,6) = "in" ├── @ MatchPredicateNode (location: (118,0)-(118,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (118,0)-(118,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2683,6 +2961,7 @@ │ │ └── closing_loc: (118,13)-(118,14) = "]" │ └── operator_loc: (118,4)-(118,6) = "in" ├── @ MatchPredicateNode (location: (119,0)-(119,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (119,0)-(119,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2703,6 +2982,7 @@ │ │ └── unescaped: "foo" │ └── operator_loc: (119,4)-(119,6) = "in" ├── @ MatchPredicateNode (location: (120,0)-(120,14)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (120,0)-(120,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2723,6 +3003,7 @@ │ │ └── unescaped: "foo" │ └── operator_loc: (120,4)-(120,6) = "in" ├── @ MatchPredicateNode (location: (121,0)-(121,12)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (121,0)-(121,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2743,6 +3024,7 @@ │ │ └── unescaped: "foo" │ └── operator_loc: (121,4)-(121,6) = "in" ├── @ MatchPredicateNode (location: (122,0)-(122,10)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (122,0)-(122,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2756,8 +3038,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ NilNode (location: (122,7)-(122,10)) + │ │ └── flags: static_literal │ └── operator_loc: (122,4)-(122,6) = "in" ├── @ MatchPredicateNode (location: (123,0)-(123,11)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (123,0)-(123,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2771,8 +3055,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ SelfNode (location: (123,7)-(123,11)) + │ │ └── flags: ∅ │ └── operator_loc: (123,4)-(123,6) = "in" ├── @ MatchPredicateNode (location: (124,0)-(124,11)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (124,0)-(124,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2786,8 +3072,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ TrueNode (location: (124,7)-(124,11)) + │ │ └── flags: static_literal │ └── operator_loc: (124,4)-(124,6) = "in" ├── @ MatchPredicateNode (location: (125,0)-(125,12)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (125,0)-(125,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2801,8 +3089,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ FalseNode (location: (125,7)-(125,12)) + │ │ └── flags: static_literal │ └── operator_loc: (125,4)-(125,6) = "in" ├── @ MatchPredicateNode (location: (126,0)-(126,15)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (126,0)-(126,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2820,6 +3110,7 @@ │ │ └── filepath: "patterns.txt" │ └── operator_loc: (126,4)-(126,6) = "in" ├── @ MatchPredicateNode (location: (127,0)-(127,15)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (127,0)-(127,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2833,8 +3124,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ SourceLineNode (location: (127,7)-(127,15)) + │ │ └── flags: static_literal │ └── operator_loc: (127,4)-(127,6) = "in" ├── @ MatchPredicateNode (location: (128,0)-(128,19)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (128,0)-(128,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2848,8 +3141,10 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ SourceEncodingNode (location: (128,7)-(128,19)) + │ │ └── flags: static_literal │ └── operator_loc: (128,4)-(128,6) = "in" ├── @ MatchPredicateNode (location: (129,0)-(129,17)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (129,0)-(129,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2863,6 +3158,7 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ LambdaNode (location: (129,7)-(129,17)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── operator_loc: (129,7)-(129,9) = "->" │ │ ├── opening_loc: (129,10)-(129,11) = "{" @@ -2870,12 +3166,15 @@ │ │ ├── parameters: ∅ │ │ └── body: │ │ @ StatementsNode (location: (129,12)-(129,15)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (129,12)-(129,15)) + │ │ ├── flags: newline │ │ ├── name: :bar │ │ └── depth: 1 │ └── operator_loc: (129,4)-(129,6) = "in" ├── @ MatchPredicateNode (location: (131,0)-(131,11)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (131,0)-(131,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2889,18 +3188,22 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (131,7)-(131,11)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (131,7)-(131,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── rest: │ │ │ @ ImplicitRestNode (location: (131,10)-(131,11)) + │ │ │ └── flags: ∅ │ │ ├── posts: (length: 0) │ │ ├── opening_loc: ∅ │ │ └── closing_loc: ∅ │ └── operator_loc: (131,4)-(131,6) = "in" ├── @ CaseMatchNode (location: (135,0)-(135,25)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (135,5)-(135,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -2914,8 +3217,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (135,10)-(135,21)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ LocalVariableTargetNode (location: (135,13)-(135,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── statements: ∅ @@ -2925,6 +3230,7 @@ │ ├── case_keyword_loc: (135,0)-(135,4) = "case" │ └── end_keyword_loc: (135,22)-(135,25) = "end" ├── @ CaseMatchNode (location: (136,0)-(136,23)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (136,5)-(136,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -2938,9 +3244,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (136,10)-(136,19)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IntegerNode (location: (136,13)-(136,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── statements: ∅ │ │ ├── in_loc: (136,10)-(136,12) = "in" @@ -2949,6 +3256,7 @@ │ ├── case_keyword_loc: (136,0)-(136,4) = "case" │ └── end_keyword_loc: (136,20)-(136,23) = "end" ├── @ CaseMatchNode (location: (137,0)-(137,25)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (137,5)-(137,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -2962,8 +3270,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (137,10)-(137,21)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ FloatNode (location: (137,13)-(137,16)) + │ │ │ ├── flags: static_literal │ │ │ └── value: 1.0 │ │ ├── statements: ∅ │ │ ├── in_loc: (137,10)-(137,12) = "in" @@ -2972,6 +3282,7 @@ │ ├── case_keyword_loc: (137,0)-(137,4) = "case" │ └── end_keyword_loc: (137,22)-(137,25) = "end" ├── @ CaseMatchNode (location: (138,0)-(138,24)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (138,5)-(138,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -2985,11 +3296,13 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (138,10)-(138,20)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ImaginaryNode (location: (138,13)-(138,15)) + │ │ │ ├── flags: static_literal │ │ │ └── numeric: │ │ │ @ IntegerNode (location: (138,13)-(138,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── statements: ∅ │ │ ├── in_loc: (138,10)-(138,12) = "in" @@ -2998,6 +3311,7 @@ │ ├── case_keyword_loc: (138,0)-(138,4) = "case" │ └── end_keyword_loc: (138,21)-(138,24) = "end" ├── @ CaseMatchNode (location: (139,0)-(139,24)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (139,5)-(139,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3011,9 +3325,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (139,10)-(139,20)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ RationalNode (location: (139,13)-(139,15)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ ├── numerator: 1 │ │ │ └── denominator: 1 │ │ ├── statements: ∅ @@ -3023,6 +3338,7 @@ │ ├── case_keyword_loc: (139,0)-(139,4) = "case" │ └── end_keyword_loc: (139,21)-(139,24) = "end" ├── @ CaseMatchNode (location: (140,0)-(140,26)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (140,5)-(140,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3036,9 +3352,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (140,10)-(140,22)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ SymbolNode (location: (140,13)-(140,17)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (140,13)-(140,14) = ":" │ │ │ ├── value_loc: (140,14)-(140,17) = "foo" │ │ │ ├── closing_loc: ∅ @@ -3050,6 +3367,7 @@ │ ├── case_keyword_loc: (140,0)-(140,4) = "case" │ └── end_keyword_loc: (140,23)-(140,26) = "end" ├── @ CaseMatchNode (location: (141,0)-(141,29)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (141,5)-(141,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3063,9 +3381,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (141,10)-(141,25)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ SymbolNode (location: (141,13)-(141,20)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (141,13)-(141,16) = "%s[" │ │ │ ├── value_loc: (141,16)-(141,19) = "foo" │ │ │ ├── closing_loc: (141,19)-(141,20) = "]" @@ -3077,6 +3396,7 @@ │ ├── case_keyword_loc: (141,0)-(141,4) = "case" │ └── end_keyword_loc: (141,26)-(141,29) = "end" ├── @ CaseMatchNode (location: (142,0)-(142,28)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (142,5)-(142,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3090,9 +3410,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (142,10)-(142,24)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ SymbolNode (location: (142,13)-(142,19)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (142,13)-(142,15) = ":\"" │ │ │ ├── value_loc: (142,15)-(142,18) = "foo" │ │ │ ├── closing_loc: (142,18)-(142,19) = "\"" @@ -3104,6 +3425,7 @@ │ ├── case_keyword_loc: (142,0)-(142,4) = "case" │ └── end_keyword_loc: (142,25)-(142,28) = "end" ├── @ CaseMatchNode (location: (143,0)-(143,27)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (143,5)-(143,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3117,9 +3439,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (143,10)-(143,23)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ RegularExpressionNode (location: (143,13)-(143,18)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (143,13)-(143,14) = "/" │ │ │ ├── content_loc: (143,14)-(143,17) = "foo" │ │ │ ├── closing_loc: (143,17)-(143,18) = "/" @@ -3131,6 +3454,7 @@ │ ├── case_keyword_loc: (143,0)-(143,4) = "case" │ └── end_keyword_loc: (143,24)-(143,27) = "end" ├── @ CaseMatchNode (location: (144,0)-(144,27)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (144,5)-(144,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3144,6 +3468,7 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (144,10)-(144,23)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ XStringNode (location: (144,13)-(144,18)) │ │ │ ├── flags: ∅ @@ -3158,6 +3483,7 @@ │ ├── case_keyword_loc: (144,0)-(144,4) = "case" │ └── end_keyword_loc: (144,24)-(144,27) = "end" ├── @ CaseMatchNode (location: (145,0)-(145,29)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (145,5)-(145,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3171,6 +3497,7 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (145,10)-(145,25)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ XStringNode (location: (145,13)-(145,20)) │ │ │ ├── flags: ∅ @@ -3185,6 +3512,7 @@ │ ├── case_keyword_loc: (145,0)-(145,4) = "case" │ └── end_keyword_loc: (145,26)-(145,29) = "end" ├── @ CaseMatchNode (location: (146,0)-(146,29)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (146,5)-(146,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3198,12 +3526,13 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (146,10)-(146,25)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayNode (location: (146,13)-(146,20)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 1) │ │ │ │ └── @ SymbolNode (location: (146,16)-(146,19)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (146,16)-(146,19) = "foo" │ │ │ │ ├── closing_loc: ∅ @@ -3217,6 +3546,7 @@ │ ├── case_keyword_loc: (146,0)-(146,4) = "case" │ └── end_keyword_loc: (146,26)-(146,29) = "end" ├── @ CaseMatchNode (location: (147,0)-(147,29)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (147,5)-(147,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3230,12 +3560,13 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (147,10)-(147,25)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayNode (location: (147,13)-(147,20)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 1) │ │ │ │ └── @ SymbolNode (location: (147,16)-(147,19)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (147,16)-(147,19) = "foo" │ │ │ │ ├── closing_loc: ∅ @@ -3249,6 +3580,7 @@ │ ├── case_keyword_loc: (147,0)-(147,4) = "case" │ └── end_keyword_loc: (147,26)-(147,29) = "end" ├── @ CaseMatchNode (location: (148,0)-(148,29)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (148,5)-(148,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3262,6 +3594,7 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (148,10)-(148,25)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayNode (location: (148,13)-(148,20)) │ │ │ ├── flags: ∅ @@ -3281,6 +3614,7 @@ │ ├── case_keyword_loc: (148,0)-(148,4) = "case" │ └── end_keyword_loc: (148,26)-(148,29) = "end" ├── @ CaseMatchNode (location: (149,0)-(149,29)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (149,5)-(149,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3294,6 +3628,7 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (149,10)-(149,25)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayNode (location: (149,13)-(149,20)) │ │ │ ├── flags: ∅ @@ -3313,6 +3648,7 @@ │ ├── case_keyword_loc: (149,0)-(149,4) = "case" │ └── end_keyword_loc: (149,26)-(149,29) = "end" ├── @ CaseMatchNode (location: (150,0)-(150,29)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (150,5)-(150,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3326,6 +3662,7 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (150,10)-(150,25)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ StringNode (location: (150,13)-(150,20)) │ │ │ ├── flags: ∅ @@ -3340,6 +3677,7 @@ │ ├── case_keyword_loc: (150,0)-(150,4) = "case" │ └── end_keyword_loc: (150,26)-(150,29) = "end" ├── @ CaseMatchNode (location: (151,0)-(151,29)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (151,5)-(151,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3353,6 +3691,7 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (151,10)-(151,25)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ StringNode (location: (151,13)-(151,20)) │ │ │ ├── flags: ∅ @@ -3367,6 +3706,7 @@ │ ├── case_keyword_loc: (151,0)-(151,4) = "case" │ └── end_keyword_loc: (151,26)-(151,29) = "end" ├── @ CaseMatchNode (location: (152,0)-(152,27)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (152,5)-(152,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3380,6 +3720,7 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (152,10)-(152,23)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ StringNode (location: (152,13)-(152,18)) │ │ │ ├── flags: ∅ @@ -3394,6 +3735,7 @@ │ ├── case_keyword_loc: (152,0)-(152,4) = "case" │ └── end_keyword_loc: (152,24)-(152,27) = "end" ├── @ CaseMatchNode (location: (153,0)-(153,25)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (153,5)-(153,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3407,8 +3749,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (153,10)-(153,21)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ NilNode (location: (153,13)-(153,16)) + │ │ │ └── flags: static_literal │ │ ├── statements: ∅ │ │ ├── in_loc: (153,10)-(153,12) = "in" │ │ └── then_loc: (153,17)-(153,21) = "then" @@ -3416,6 +3760,7 @@ │ ├── case_keyword_loc: (153,0)-(153,4) = "case" │ └── end_keyword_loc: (153,22)-(153,25) = "end" ├── @ CaseMatchNode (location: (154,0)-(154,26)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (154,5)-(154,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3429,8 +3774,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (154,10)-(154,22)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ SelfNode (location: (154,13)-(154,17)) + │ │ │ └── flags: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (154,10)-(154,12) = "in" │ │ └── then_loc: (154,18)-(154,22) = "then" @@ -3438,6 +3785,7 @@ │ ├── case_keyword_loc: (154,0)-(154,4) = "case" │ └── end_keyword_loc: (154,23)-(154,26) = "end" ├── @ CaseMatchNode (location: (155,0)-(155,26)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (155,5)-(155,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3451,8 +3799,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (155,10)-(155,22)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ TrueNode (location: (155,13)-(155,17)) + │ │ │ └── flags: static_literal │ │ ├── statements: ∅ │ │ ├── in_loc: (155,10)-(155,12) = "in" │ │ └── then_loc: (155,18)-(155,22) = "then" @@ -3460,6 +3810,7 @@ │ ├── case_keyword_loc: (155,0)-(155,4) = "case" │ └── end_keyword_loc: (155,23)-(155,26) = "end" ├── @ CaseMatchNode (location: (156,0)-(156,27)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (156,5)-(156,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3473,8 +3824,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (156,10)-(156,23)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ FalseNode (location: (156,13)-(156,18)) + │ │ │ └── flags: static_literal │ │ ├── statements: ∅ │ │ ├── in_loc: (156,10)-(156,12) = "in" │ │ └── then_loc: (156,19)-(156,23) = "then" @@ -3482,6 +3835,7 @@ │ ├── case_keyword_loc: (156,0)-(156,4) = "case" │ └── end_keyword_loc: (156,24)-(156,27) = "end" ├── @ CaseMatchNode (location: (157,0)-(157,30)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (157,5)-(157,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3495,6 +3849,7 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (157,10)-(157,26)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ SourceFileNode (location: (157,13)-(157,21)) │ │ │ ├── flags: ∅ @@ -3506,6 +3861,7 @@ │ ├── case_keyword_loc: (157,0)-(157,4) = "case" │ └── end_keyword_loc: (157,27)-(157,30) = "end" ├── @ CaseMatchNode (location: (158,0)-(158,30)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (158,5)-(158,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3519,8 +3875,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (158,10)-(158,26)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ SourceLineNode (location: (158,13)-(158,21)) + │ │ │ └── flags: static_literal │ │ ├── statements: ∅ │ │ ├── in_loc: (158,10)-(158,12) = "in" │ │ └── then_loc: (158,22)-(158,26) = "then" @@ -3528,6 +3886,7 @@ │ ├── case_keyword_loc: (158,0)-(158,4) = "case" │ └── end_keyword_loc: (158,27)-(158,30) = "end" ├── @ CaseMatchNode (location: (159,0)-(159,34)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (159,5)-(159,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3541,8 +3900,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (159,10)-(159,30)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ SourceEncodingNode (location: (159,13)-(159,25)) + │ │ │ └── flags: static_literal │ │ ├── statements: ∅ │ │ ├── in_loc: (159,10)-(159,12) = "in" │ │ └── then_loc: (159,26)-(159,30) = "then" @@ -3550,6 +3911,7 @@ │ ├── case_keyword_loc: (159,0)-(159,4) = "case" │ └── end_keyword_loc: (159,31)-(159,34) = "end" ├── @ CaseMatchNode (location: (160,0)-(160,32)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (160,5)-(160,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3563,8 +3925,10 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (160,10)-(160,28)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ LambdaNode (location: (160,13)-(160,23)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [] │ │ │ ├── operator_loc: (160,13)-(160,15) = "->" │ │ │ ├── opening_loc: (160,16)-(160,17) = "{" @@ -3572,8 +3936,10 @@ │ │ │ ├── parameters: ∅ │ │ │ └── body: │ │ │ @ StatementsNode (location: (160,18)-(160,21)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (160,18)-(160,21)) + │ │ │ ├── flags: newline │ │ │ ├── name: :bar │ │ │ └── depth: 1 │ │ ├── statements: ∅ @@ -3583,6 +3949,7 @@ │ ├── case_keyword_loc: (160,0)-(160,4) = "case" │ └── end_keyword_loc: (160,29)-(160,32) = "end" ├── @ CaseMatchNode (location: (162,0)-(162,32)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (162,5)-(162,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3596,18 +3963,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (162,10)-(162,28)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (162,13)-(162,23)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (162,17)-(162,19) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (162,20)-(162,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (162,13)-(162,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ LocalVariableTargetNode (location: (162,13)-(162,16)) + │ │ │ │ ├── flags: newline │ │ │ │ ├── name: :bar │ │ │ │ └── depth: 0 │ │ │ ├── consequent: ∅ @@ -3619,6 +3991,7 @@ │ ├── case_keyword_loc: (162,0)-(162,4) = "case" │ └── end_keyword_loc: (162,29)-(162,32) = "end" ├── @ CaseMatchNode (location: (163,0)-(163,30)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (163,5)-(163,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3632,19 +4005,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (163,10)-(163,26)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (163,13)-(163,21)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (163,15)-(163,17) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (163,18)-(163,21)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (163,13)-(163,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (163,13)-(163,14)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── consequent: ∅ │ │ │ └── end_keyword_loc: ∅ @@ -3655,6 +4032,7 @@ │ ├── case_keyword_loc: (163,0)-(163,4) = "case" │ └── end_keyword_loc: (163,27)-(163,30) = "end" ├── @ CaseMatchNode (location: (164,0)-(164,32)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (164,5)-(164,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3668,18 +4046,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (164,10)-(164,28)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (164,13)-(164,23)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (164,17)-(164,19) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (164,20)-(164,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (164,13)-(164,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ FloatNode (location: (164,13)-(164,16)) + │ │ │ │ ├── flags: newline, static_literal │ │ │ │ └── value: 1.0 │ │ │ ├── consequent: ∅ │ │ │ └── end_keyword_loc: ∅ @@ -3690,6 +4073,7 @@ │ ├── case_keyword_loc: (164,0)-(164,4) = "case" │ └── end_keyword_loc: (164,29)-(164,32) = "end" ├── @ CaseMatchNode (location: (165,0)-(165,31)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (165,5)-(165,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3703,21 +4087,26 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (165,10)-(165,27)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (165,13)-(165,22)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (165,16)-(165,18) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (165,19)-(165,22)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (165,13)-(165,15)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ ImaginaryNode (location: (165,13)-(165,15)) + │ │ │ │ ├── flags: newline, static_literal │ │ │ │ └── numeric: │ │ │ │ @ IntegerNode (location: (165,13)-(165,14)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── consequent: ∅ │ │ │ └── end_keyword_loc: ∅ @@ -3728,6 +4117,7 @@ │ ├── case_keyword_loc: (165,0)-(165,4) = "case" │ └── end_keyword_loc: (165,28)-(165,31) = "end" ├── @ CaseMatchNode (location: (166,0)-(166,31)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (166,5)-(166,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3741,19 +4131,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (166,10)-(166,27)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (166,13)-(166,22)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (166,16)-(166,18) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (166,19)-(166,22)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (166,13)-(166,15)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ RationalNode (location: (166,13)-(166,15)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ ├── numerator: 1 │ │ │ │ └── denominator: 1 │ │ │ ├── consequent: ∅ @@ -3765,6 +4159,7 @@ │ ├── case_keyword_loc: (166,0)-(166,4) = "case" │ └── end_keyword_loc: (166,28)-(166,31) = "end" ├── @ CaseMatchNode (location: (167,0)-(167,33)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (167,5)-(167,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3778,19 +4173,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (167,10)-(167,29)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (167,13)-(167,24)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (167,18)-(167,20) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (167,21)-(167,24)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (167,13)-(167,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ SymbolNode (location: (167,13)-(167,17)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (167,13)-(167,14) = ":" │ │ │ │ ├── value_loc: (167,14)-(167,17) = "foo" │ │ │ │ ├── closing_loc: ∅ @@ -3804,6 +4203,7 @@ │ ├── case_keyword_loc: (167,0)-(167,4) = "case" │ └── end_keyword_loc: (167,30)-(167,33) = "end" ├── @ CaseMatchNode (location: (168,0)-(168,36)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (168,5)-(168,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3817,19 +4217,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (168,10)-(168,32)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (168,13)-(168,27)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (168,21)-(168,23) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (168,24)-(168,27)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (168,13)-(168,20)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ SymbolNode (location: (168,13)-(168,20)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (168,13)-(168,16) = "%s[" │ │ │ │ ├── value_loc: (168,16)-(168,19) = "foo" │ │ │ │ ├── closing_loc: (168,19)-(168,20) = "]" @@ -3843,6 +4247,7 @@ │ ├── case_keyword_loc: (168,0)-(168,4) = "case" │ └── end_keyword_loc: (168,33)-(168,36) = "end" ├── @ CaseMatchNode (location: (169,0)-(169,35)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (169,5)-(169,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3856,19 +4261,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (169,10)-(169,31)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (169,13)-(169,26)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (169,20)-(169,22) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (169,23)-(169,26)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (169,13)-(169,19)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ SymbolNode (location: (169,13)-(169,19)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (169,13)-(169,15) = ":\"" │ │ │ │ ├── value_loc: (169,15)-(169,18) = "foo" │ │ │ │ ├── closing_loc: (169,18)-(169,19) = "\"" @@ -3882,6 +4291,7 @@ │ ├── case_keyword_loc: (169,0)-(169,4) = "case" │ └── end_keyword_loc: (169,32)-(169,35) = "end" ├── @ CaseMatchNode (location: (170,0)-(170,34)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (170,5)-(170,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3895,19 +4305,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (170,10)-(170,30)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (170,13)-(170,25)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (170,19)-(170,21) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (170,22)-(170,25)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (170,13)-(170,18)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ RegularExpressionNode (location: (170,13)-(170,18)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (170,13)-(170,14) = "/" │ │ │ │ ├── content_loc: (170,14)-(170,17) = "foo" │ │ │ │ ├── closing_loc: (170,17)-(170,18) = "/" @@ -3921,6 +4335,7 @@ │ ├── case_keyword_loc: (170,0)-(170,4) = "case" │ └── end_keyword_loc: (170,31)-(170,34) = "end" ├── @ CaseMatchNode (location: (171,0)-(171,34)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (171,5)-(171,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3934,19 +4349,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (171,10)-(171,30)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (171,13)-(171,25)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (171,19)-(171,21) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (171,22)-(171,25)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (171,13)-(171,18)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ XStringNode (location: (171,13)-(171,18)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: newline │ │ │ │ ├── opening_loc: (171,13)-(171,14) = "`" │ │ │ │ ├── content_loc: (171,14)-(171,17) = "foo" │ │ │ │ ├── closing_loc: (171,17)-(171,18) = "`" @@ -3960,6 +4379,7 @@ │ ├── case_keyword_loc: (171,0)-(171,4) = "case" │ └── end_keyword_loc: (171,31)-(171,34) = "end" ├── @ CaseMatchNode (location: (172,0)-(172,36)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (172,5)-(172,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -3973,19 +4393,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (172,10)-(172,32)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (172,13)-(172,27)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (172,21)-(172,23) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (172,24)-(172,27)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (172,13)-(172,20)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ XStringNode (location: (172,13)-(172,20)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: newline │ │ │ │ ├── opening_loc: (172,13)-(172,16) = "%x[" │ │ │ │ ├── content_loc: (172,16)-(172,19) = "foo" │ │ │ │ ├── closing_loc: (172,19)-(172,20) = "]" @@ -3999,6 +4423,7 @@ │ ├── case_keyword_loc: (172,0)-(172,4) = "case" │ └── end_keyword_loc: (172,33)-(172,36) = "end" ├── @ CaseMatchNode (location: (173,0)-(173,36)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (173,5)-(173,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4012,22 +4437,26 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (173,10)-(173,32)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (173,13)-(173,27)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (173,21)-(173,23) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (173,24)-(173,27)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (173,13)-(173,20)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ ArrayNode (location: (173,13)-(173,20)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: newline, static_literal │ │ │ │ ├── elements: (length: 1) │ │ │ │ │ └── @ SymbolNode (location: (173,16)-(173,19)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (173,16)-(173,19) = "foo" │ │ │ │ │ ├── closing_loc: ∅ @@ -4043,6 +4472,7 @@ │ ├── case_keyword_loc: (173,0)-(173,4) = "case" │ └── end_keyword_loc: (173,33)-(173,36) = "end" ├── @ CaseMatchNode (location: (174,0)-(174,36)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (174,5)-(174,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4056,22 +4486,26 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (174,10)-(174,32)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (174,13)-(174,27)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (174,21)-(174,23) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (174,24)-(174,27)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (174,13)-(174,20)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ ArrayNode (location: (174,13)-(174,20)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: newline, static_literal │ │ │ │ ├── elements: (length: 1) │ │ │ │ │ └── @ SymbolNode (location: (174,16)-(174,19)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (174,16)-(174,19) = "foo" │ │ │ │ │ ├── closing_loc: ∅ @@ -4087,6 +4521,7 @@ │ ├── case_keyword_loc: (174,0)-(174,4) = "case" │ └── end_keyword_loc: (174,33)-(174,36) = "end" ├── @ CaseMatchNode (location: (175,0)-(175,36)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (175,5)-(175,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4100,19 +4535,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (175,10)-(175,32)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (175,13)-(175,27)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (175,21)-(175,23) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (175,24)-(175,27)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (175,13)-(175,20)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ ArrayNode (location: (175,13)-(175,20)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: newline │ │ │ │ ├── elements: (length: 1) │ │ │ │ │ └── @ StringNode (location: (175,16)-(175,19)) │ │ │ │ │ ├── flags: ∅ @@ -4131,6 +4570,7 @@ │ ├── case_keyword_loc: (175,0)-(175,4) = "case" │ └── end_keyword_loc: (175,33)-(175,36) = "end" ├── @ CaseMatchNode (location: (176,0)-(176,36)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (176,5)-(176,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4144,19 +4584,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (176,10)-(176,32)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (176,13)-(176,27)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (176,21)-(176,23) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (176,24)-(176,27)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (176,13)-(176,20)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ ArrayNode (location: (176,13)-(176,20)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: newline │ │ │ │ ├── elements: (length: 1) │ │ │ │ │ └── @ StringNode (location: (176,16)-(176,19)) │ │ │ │ │ ├── flags: ∅ @@ -4175,6 +4619,7 @@ │ ├── case_keyword_loc: (176,0)-(176,4) = "case" │ └── end_keyword_loc: (176,33)-(176,36) = "end" ├── @ CaseMatchNode (location: (177,0)-(177,36)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (177,5)-(177,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4188,19 +4633,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (177,10)-(177,32)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (177,13)-(177,27)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (177,21)-(177,23) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (177,24)-(177,27)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (177,13)-(177,20)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ StringNode (location: (177,13)-(177,20)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: newline │ │ │ │ ├── opening_loc: (177,13)-(177,16) = "%q[" │ │ │ │ ├── content_loc: (177,16)-(177,19) = "foo" │ │ │ │ ├── closing_loc: (177,19)-(177,20) = "]" @@ -4214,6 +4663,7 @@ │ ├── case_keyword_loc: (177,0)-(177,4) = "case" │ └── end_keyword_loc: (177,33)-(177,36) = "end" ├── @ CaseMatchNode (location: (178,0)-(178,36)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (178,5)-(178,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4227,19 +4677,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (178,10)-(178,32)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (178,13)-(178,27)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (178,21)-(178,23) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (178,24)-(178,27)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (178,13)-(178,20)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ StringNode (location: (178,13)-(178,20)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: newline │ │ │ │ ├── opening_loc: (178,13)-(178,16) = "%Q[" │ │ │ │ ├── content_loc: (178,16)-(178,19) = "foo" │ │ │ │ ├── closing_loc: (178,19)-(178,20) = "]" @@ -4253,6 +4707,7 @@ │ ├── case_keyword_loc: (178,0)-(178,4) = "case" │ └── end_keyword_loc: (178,33)-(178,36) = "end" ├── @ CaseMatchNode (location: (179,0)-(179,34)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (179,5)-(179,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4266,19 +4721,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (179,10)-(179,30)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (179,13)-(179,25)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (179,19)-(179,21) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (179,22)-(179,25)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (179,13)-(179,18)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ StringNode (location: (179,13)-(179,18)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: newline │ │ │ │ ├── opening_loc: (179,13)-(179,14) = "\"" │ │ │ │ ├── content_loc: (179,14)-(179,17) = "foo" │ │ │ │ ├── closing_loc: (179,17)-(179,18) = "\"" @@ -4292,6 +4751,7 @@ │ ├── case_keyword_loc: (179,0)-(179,4) = "case" │ └── end_keyword_loc: (179,31)-(179,34) = "end" ├── @ CaseMatchNode (location: (180,0)-(180,32)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (180,5)-(180,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4305,18 +4765,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (180,10)-(180,28)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (180,13)-(180,23)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (180,17)-(180,19) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (180,20)-(180,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (180,13)-(180,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ NilNode (location: (180,13)-(180,16)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── consequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ @@ -4326,6 +4791,7 @@ │ ├── case_keyword_loc: (180,0)-(180,4) = "case" │ └── end_keyword_loc: (180,29)-(180,32) = "end" ├── @ CaseMatchNode (location: (181,0)-(181,33)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (181,5)-(181,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4339,18 +4805,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (181,10)-(181,29)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (181,13)-(181,24)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (181,18)-(181,20) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (181,21)-(181,24)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (181,13)-(181,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ SelfNode (location: (181,13)-(181,17)) + │ │ │ │ └── flags: newline │ │ │ ├── consequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ @@ -4360,6 +4831,7 @@ │ ├── case_keyword_loc: (181,0)-(181,4) = "case" │ └── end_keyword_loc: (181,30)-(181,33) = "end" ├── @ CaseMatchNode (location: (182,0)-(182,33)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (182,5)-(182,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4373,18 +4845,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (182,10)-(182,29)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (182,13)-(182,24)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (182,18)-(182,20) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (182,21)-(182,24)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (182,13)-(182,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (182,13)-(182,17)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── consequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ @@ -4394,6 +4871,7 @@ │ ├── case_keyword_loc: (182,0)-(182,4) = "case" │ └── end_keyword_loc: (182,30)-(182,33) = "end" ├── @ CaseMatchNode (location: (183,0)-(183,34)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (183,5)-(183,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4407,18 +4885,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (183,10)-(183,30)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (183,13)-(183,25)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (183,19)-(183,21) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (183,22)-(183,25)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (183,13)-(183,18)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ FalseNode (location: (183,13)-(183,18)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── consequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ @@ -4428,6 +4911,7 @@ │ ├── case_keyword_loc: (183,0)-(183,4) = "case" │ └── end_keyword_loc: (183,31)-(183,34) = "end" ├── @ CaseMatchNode (location: (184,0)-(184,37)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (184,5)-(184,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4441,19 +4925,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (184,10)-(184,33)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (184,13)-(184,28)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (184,22)-(184,24) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (184,25)-(184,28)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (184,13)-(184,21)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ SourceFileNode (location: (184,13)-(184,21)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: newline │ │ │ │ └── filepath: "patterns.txt" │ │ │ ├── consequent: ∅ │ │ │ └── end_keyword_loc: ∅ @@ -4464,6 +4952,7 @@ │ ├── case_keyword_loc: (184,0)-(184,4) = "case" │ └── end_keyword_loc: (184,34)-(184,37) = "end" ├── @ CaseMatchNode (location: (185,0)-(185,37)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (185,5)-(185,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4477,18 +4966,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (185,10)-(185,33)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (185,13)-(185,28)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (185,22)-(185,24) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (185,25)-(185,28)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (185,13)-(185,21)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ SourceLineNode (location: (185,13)-(185,21)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── consequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ @@ -4498,6 +4992,7 @@ │ ├── case_keyword_loc: (185,0)-(185,4) = "case" │ └── end_keyword_loc: (185,34)-(185,37) = "end" ├── @ CaseMatchNode (location: (186,0)-(186,41)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (186,5)-(186,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4511,18 +5006,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (186,10)-(186,37)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (186,13)-(186,32)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (186,26)-(186,28) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (186,29)-(186,32)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (186,13)-(186,25)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ SourceEncodingNode (location: (186,13)-(186,25)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── consequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ @@ -4532,6 +5032,7 @@ │ ├── case_keyword_loc: (186,0)-(186,4) = "case" │ └── end_keyword_loc: (186,38)-(186,41) = "end" ├── @ CaseMatchNode (location: (187,0)-(187,39)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (187,5)-(187,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -4545,18 +5046,23 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (187,10)-(187,35)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (187,13)-(187,30)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (187,24)-(187,26) = "if" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (187,27)-(187,30)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 0 │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (187,13)-(187,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ LambdaNode (location: (187,13)-(187,23)) + │ │ │ │ ├── flags: newline │ │ │ │ ├── locals: [] │ │ │ │ ├── operator_loc: (187,13)-(187,15) = "->" │ │ │ │ ├── opening_loc: (187,16)-(187,17) = "{" @@ -4564,8 +5070,10 @@ │ │ │ │ ├── parameters: ∅ │ │ │ │ └── body: │ │ │ │ @ StatementsNode (location: (187,18)-(187,21)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (187,18)-(187,21)) + │ │ │ │ ├── flags: newline │ │ │ │ ├── name: :bar │ │ │ │ └── depth: 1 │ │ │ ├── consequent: ∅ @@ -4577,9 +5085,11 @@ │ ├── case_keyword_loc: (187,0)-(187,4) = "case" │ └── end_keyword_loc: (187,36)-(187,39) = "end" ├── @ IfNode (location: (189,0)-(190,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (189,0)-(189,2) = "if" │ ├── predicate: │ │ @ MatchPredicateNode (location: (189,3)-(189,10)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (189,3)-(189,4)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -4593,6 +5103,7 @@ │ │ │ └── block: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (189,8)-(189,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── requireds: (length: 0) │ │ │ ├── rest: ∅ @@ -4605,6 +5116,7 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (190,0)-(190,3) = "end" ├── @ MatchRequiredNode (location: (192,0)-(194,1)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (192,0)-(192,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -4618,9 +5130,11 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (192,5)-(194,1)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (193,2)-(193,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :b │ │ │ └── depth: 0 │ │ ├── rest: ∅ @@ -4629,6 +5143,7 @@ │ │ └── closing_loc: (194,0)-(194,1) = "]" │ └── operator_loc: (192,2)-(192,4) = "=>" ├── @ MatchPredicateNode (location: (196,0)-(200,1)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (196,0)-(196,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -4642,34 +5157,41 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ HashPatternNode (location: (196,7)-(200,1)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (196,7)-(196,8)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── elements: (length: 1) │ │ │ └── @ AssocNode (location: (197,2)-(199,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (197,2)-(197,6)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (197,2)-(197,5) = "bar" │ │ │ │ ├── closing_loc: (197,5)-(197,6) = ":" │ │ │ │ └── unescaped: "bar" │ │ │ ├── value: │ │ │ │ @ HashPatternNode (location: (197,7)-(199,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: │ │ │ │ │ @ ConstantReadNode (location: (197,7)-(197,8)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── name: :B │ │ │ │ ├── elements: (length: 1) │ │ │ │ │ └── @ AssocNode (location: (198,4)-(198,12)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── key: │ │ │ │ │ │ @ SymbolNode (location: (198,4)-(198,10)) - │ │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ ├── value_loc: (198,4)-(198,9) = "value" │ │ │ │ │ │ ├── closing_loc: (198,9)-(198,10) = ":" │ │ │ │ │ │ └── unescaped: "value" │ │ │ │ │ ├── value: │ │ │ │ │ │ @ LocalVariableTargetNode (location: (198,11)-(198,12)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── name: :a │ │ │ │ │ │ └── depth: 0 │ │ │ │ │ └── operator_loc: ∅ @@ -4682,6 +5204,7 @@ │ │ └── closing_loc: (200,0)-(200,1) = "]" │ └── operator_loc: (196,4)-(196,6) = "in" ├── @ MatchPredicateNode (location: (202,0)-(202,17)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (202,0)-(202,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -4695,17 +5218,21 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ CapturePatternNode (location: (202,7)-(202,17)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ LocalVariableTargetNode (location: (202,7)-(202,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── target: │ │ │ @ LocalVariableTargetNode (location: (202,14)-(202,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ └── operator_loc: (202,11)-(202,13) = "=>" │ └── operator_loc: (202,4)-(202,6) = "in" ├── @ MatchRequiredNode (location: (203,0)-(203,17)) + │ ├── flags: newline │ ├── value: │ │ @ CallNode (location: (203,0)-(203,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -4719,25 +5246,32 @@ │ │ └── block: ∅ │ ├── pattern: │ │ @ CapturePatternNode (location: (203,7)-(203,17)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ LocalVariableTargetNode (location: (203,7)-(203,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── target: │ │ │ @ LocalVariableTargetNode (location: (203,14)-(203,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :baz │ │ │ └── depth: 0 │ │ └── operator_loc: (203,11)-(203,13) = "=>" │ └── operator_loc: (203,4)-(203,6) = "=>" ├── @ MultiWriteNode (location: (205,0)-(205,20)) + │ ├── flags: newline │ ├── lefts: (length: 3) │ │ ├── @ LocalVariableTargetNode (location: (205,0)-(205,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :foo │ │ │ └── depth: 0 │ │ ├── @ LocalVariableTargetNode (location: (205,5)-(205,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ └── @ LocalVariableTargetNode (location: (205,10)-(205,13)) + │ │ ├── flags: ∅ │ │ ├── name: :baz │ │ └── depth: 0 │ ├── rest: ∅ @@ -4747,18 +5281,18 @@ │ ├── operator_loc: (205,14)-(205,15) = "=" │ └── value: │ @ ArrayNode (location: (205,16)-(205,20)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (205,16)-(205,17)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (205,19)-(205,20)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: ∅ │ └── closing_loc: ∅ ├── @ CallNode (location: (206,0)-(208,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -4768,34 +5302,41 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (206,4)-(208,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (207,2)-(207,29)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ MatchRequiredNode (location: (207,2)-(207,29)) + │ │ ├── flags: newline │ │ ├── value: │ │ │ @ ArrayNode (location: (207,2)-(207,8)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 2) │ │ │ │ ├── @ IntegerNode (location: (207,3)-(207,4)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ └── @ IntegerNode (location: (207,6)-(207,7)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ ├── opening_loc: (207,2)-(207,3) = "[" │ │ │ └── closing_loc: (207,7)-(207,8) = "]" │ │ ├── pattern: │ │ │ @ CapturePatternNode (location: (207,12)-(207,29)) + │ │ │ ├── flags: ∅ │ │ │ ├── value: │ │ │ │ @ ArrayPatternNode (location: (207,12)-(207,22)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── requireds: (length: 2) │ │ │ │ │ ├── @ LocalVariableTargetNode (location: (207,13)-(207,16)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── name: :foo │ │ │ │ │ │ └── depth: 1 │ │ │ │ │ └── @ LocalVariableTargetNode (location: (207,18)-(207,21)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :bar │ │ │ │ │ └── depth: 1 │ │ │ │ ├── rest: ∅ @@ -4804,6 +5345,7 @@ │ │ │ │ └── closing_loc: (207,21)-(207,22) = "]" │ │ │ ├── target: │ │ │ │ @ LocalVariableTargetNode (location: (207,26)-(207,29)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :baz │ │ │ │ └── depth: 1 │ │ │ └── operator_loc: (207,23)-(207,25) = "=>" @@ -4811,31 +5353,39 @@ │ ├── opening_loc: (206,4)-(206,6) = "do" │ └── closing_loc: (208,0)-(208,3) = "end" ├── @ MatchRequiredNode (location: (210,0)-(210,19)) + │ ├── flags: newline │ ├── value: │ │ @ LocalVariableReadNode (location: (210,0)-(210,3)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── pattern: │ │ @ ArrayPatternNode (location: (210,7)-(210,19)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (210,7)-(210,13)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Object │ │ ├── requireds: (length: 1) │ │ │ └── @ HashPatternNode (location: (210,14)-(210,18)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── elements: (length: 1) │ │ │ │ └── @ AssocNode (location: (210,15)-(210,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (210,15)-(210,17)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (210,15)-(210,16) = "x" │ │ │ │ │ ├── closing_loc: (210,16)-(210,17) = ":" │ │ │ │ │ └── unescaped: "x" │ │ │ │ ├── value: │ │ │ │ │ @ ImplicitNode (location: (210,15)-(210,16)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── value: │ │ │ │ │ @ LocalVariableTargetNode (location: (210,15)-(210,16)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :x │ │ │ │ │ └── depth: 0 │ │ │ │ └── operator_loc: ∅ @@ -4848,10 +5398,10 @@ │ │ └── closing_loc: (210,18)-(210,19) = "]" │ └── operator_loc: (210,4)-(210,6) = "=>" ├── @ CallNode (location: (212,0)-(212,19)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (212,0)-(212,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: (212,1)-(212,2) = "." │ ├── name: :then @@ -4861,22 +5411,28 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (212,7)-(212,19)) + │ ├── flags: ∅ │ ├── locals: [:_1] │ ├── parameters: │ │ @ NumberedParametersNode (location: (212,7)-(212,19)) + │ │ ├── flags: ∅ │ │ └── maximum: 1 │ ├── body: │ │ @ StatementsNode (location: (212,9)-(212,17)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ MatchPredicateNode (location: (212,9)-(212,17)) + │ │ ├── flags: newline │ │ ├── value: │ │ │ @ IntegerNode (location: (212,9)-(212,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── pattern: │ │ │ @ PinnedVariableNode (location: (212,14)-(212,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── variable: │ │ │ │ @ LocalVariableReadNode (location: (212,15)-(212,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :_1 │ │ │ │ └── depth: 0 │ │ │ └── operator_loc: (212,14)-(212,15) = "^" @@ -4884,11 +5440,14 @@ │ ├── opening_loc: (212,7)-(212,8) = "{" │ └── closing_loc: (212,18)-(212,19) = "}" ├── @ MultiWriteNode (location: (214,0)-(217,5)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ LocalVariableTargetNode (location: (215,2)-(215,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ └── @ LocalVariableTargetNode (location: (216,2)-(216,3)) + │ │ ├── flags: ∅ │ │ ├── name: :b │ │ └── depth: 0 │ ├── rest: ∅ @@ -4908,21 +5467,27 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CaseMatchNode (location: (219,0)-(219,25)) + │ ├── flags: newline │ ├── predicate: │ │ @ ParenthesesNode (location: (219,5)-(219,7)) + │ │ ├── flags: ∅ │ │ ├── body: ∅ │ │ ├── opening_loc: (219,5)-(219,6) = "(" │ │ └── closing_loc: (219,6)-(219,7) = ")" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (219,9)-(219,20)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (219,12)-(219,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── requireds: (length: 2) │ │ │ │ ├── @ LocalVariableTargetNode (location: (219,13)-(219,15)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :_a │ │ │ │ │ └── depth: 0 │ │ │ │ └── @ LocalVariableTargetNode (location: (219,17)-(219,19)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :_a │ │ │ │ └── depth: 0 │ │ │ ├── rest: ∅ @@ -4936,50 +5501,58 @@ │ ├── case_keyword_loc: (219,0)-(219,4) = "case" │ └── end_keyword_loc: (219,22)-(219,25) = "end" └── @ CaseMatchNode (location: (220,0)-(220,31)) + ├── flags: newline ├── predicate: │ @ ParenthesesNode (location: (220,5)-(220,7)) + │ ├── flags: ∅ │ ├── body: ∅ │ ├── opening_loc: (220,5)-(220,6) = "(" │ └── closing_loc: (220,6)-(220,7) = ")" ├── conditions: (length: 1) │ └── @ InNode (location: (220,9)-(220,26)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (220,12)-(220,26)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ HashPatternNode (location: (220,13)-(220,18)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── elements: (length: 1) │ │ │ │ │ └── @ AssocNode (location: (220,14)-(220,17)) + │ │ │ │ │ ├── flags: static_literal │ │ │ │ │ ├── key: │ │ │ │ │ │ @ SymbolNode (location: (220,14)-(220,16)) - │ │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ ├── value_loc: (220,14)-(220,15) = "a" │ │ │ │ │ │ ├── closing_loc: (220,15)-(220,16) = ":" │ │ │ │ │ │ └── unescaped: "a" │ │ │ │ │ ├── value: │ │ │ │ │ │ @ IntegerNode (location: (220,16)-(220,17)) - │ │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ │ └── value: 1 │ │ │ │ │ └── operator_loc: ∅ │ │ │ │ ├── rest: ∅ │ │ │ │ ├── opening_loc: (220,13)-(220,14) = "{" │ │ │ │ └── closing_loc: (220,17)-(220,18) = "}" │ │ │ └── @ HashPatternNode (location: (220,20)-(220,25)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── elements: (length: 1) │ │ │ │ └── @ AssocNode (location: (220,21)-(220,24)) + │ │ │ │ ├── flags: static_literal │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (220,21)-(220,23)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (220,21)-(220,22) = "a" │ │ │ │ │ ├── closing_loc: (220,22)-(220,23) = ":" │ │ │ │ │ └── unescaped: "a" │ │ │ │ ├── value: │ │ │ │ │ @ IntegerNode (location: (220,23)-(220,24)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 2 │ │ │ │ └── operator_loc: ∅ │ │ │ ├── rest: ∅ diff --git a/test/prism/snapshots/procs.txt b/test/prism/snapshots/procs.txt index 1329ae6a5f2..a7602165144 100644 --- a/test/prism/snapshots/procs.txt +++ b/test/prism/snapshots/procs.txt @@ -1,17 +1,22 @@ @ ProgramNode (location: (1,0)-(27,19)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(27,19)) + ├── flags: ∅ └── body: (length: 10) ├── @ LambdaNode (location: (1,0)-(1,21)) + │ ├── flags: newline │ ├── locals: [:a, :b, :c, :d] │ ├── operator_loc: (1,0)-(1,2) = "->" │ ├── opening_loc: (1,16)-(1,17) = "{" │ ├── closing_loc: (1,20)-(1,21) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (1,3)-(1,15)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (1,4)-(1,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (1,4)-(1,5)) │ │ │ │ ├── flags: ∅ @@ -36,11 +41,14 @@ │ │ └── closing_loc: (1,14)-(1,15) = ")" │ └── body: │ @ StatementsNode (location: (1,18)-(1,19)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ LocalVariableReadNode (location: (1,18)-(1,19)) + │ ├── flags: newline │ ├── name: :b │ └── depth: 0 ├── @ LambdaNode (location: (3,0)-(5,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── operator_loc: (3,0)-(3,2) = "->" │ ├── opening_loc: (3,3)-(3,5) = "do" @@ -48,17 +56,20 @@ │ ├── parameters: ∅ │ └── body: │ @ BeginNode (location: (3,3)-(5,3)) + │ ├── flags: ∅ │ ├── begin_keyword_loc: ∅ │ ├── statements: ∅ │ ├── rescue_clause: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (4,0)-(5,3)) + │ │ ├── flags: ∅ │ │ ├── ensure_keyword_loc: (4,0)-(4,6) = "ensure" │ │ ├── statements: ∅ │ │ └── end_keyword_loc: (5,0)-(5,3) = "end" │ └── end_keyword_loc: (5,0)-(5,3) = "end" ├── @ LambdaNode (location: (7,0)-(11,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── operator_loc: (7,0)-(7,2) = "->" │ ├── opening_loc: (7,3)-(7,5) = "do" @@ -66,10 +77,12 @@ │ ├── parameters: ∅ │ └── body: │ @ BeginNode (location: (7,3)-(11,3)) + │ ├── flags: ∅ │ ├── begin_keyword_loc: ∅ │ ├── statements: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (8,0)-(8,6)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (8,0)-(8,6) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ @@ -78,16 +91,19 @@ │ │ └── consequent: ∅ │ ├── else_clause: │ │ @ ElseNode (location: (9,0)-(10,6)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (9,0)-(9,4) = "else" │ │ ├── statements: ∅ │ │ └── end_keyword_loc: (10,0)-(10,6) = "ensure" │ ├── ensure_clause: │ │ @ EnsureNode (location: (10,0)-(11,3)) + │ │ ├── flags: ∅ │ │ ├── ensure_keyword_loc: (10,0)-(10,6) = "ensure" │ │ ├── statements: ∅ │ │ └── end_keyword_loc: (11,0)-(11,3) = "end" │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ LambdaNode (location: (13,0)-(13,10)) + │ ├── flags: newline │ ├── locals: [] │ ├── operator_loc: (13,0)-(13,2) = "->" │ ├── opening_loc: (13,3)-(13,4) = "{" @@ -95,9 +111,10 @@ │ ├── parameters: ∅ │ └── body: │ @ StatementsNode (location: (13,5)-(13,8)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (13,5)-(13,8)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -107,6 +124,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ LambdaNode (location: (15,0)-(15,15)) + │ ├── flags: newline │ ├── locals: [] │ ├── operator_loc: (15,0)-(15,2) = "->" │ ├── opening_loc: (15,3)-(15,5) = "do" @@ -114,9 +132,10 @@ │ ├── parameters: ∅ │ └── body: │ @ StatementsNode (location: (15,7)-(15,10)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (15,7)-(15,10)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -126,14 +145,17 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ LambdaNode (location: (17,0)-(17,29)) + │ ├── flags: newline │ ├── locals: [:a, :b, :c, :d, :e] │ ├── operator_loc: (17,0)-(17,2) = "->" │ ├── opening_loc: (17,24)-(17,25) = "{" │ ├── closing_loc: (17,28)-(17,29) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (17,3)-(17,23)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (17,3)-(17,23)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (17,3)-(17,4)) │ │ │ │ ├── flags: ∅ @@ -146,7 +168,7 @@ │ │ │ │ ├── operator_loc: (17,8)-(17,9) = "=" │ │ │ │ └── value: │ │ │ │ @ IntegerNode (location: (17,10)-(17,11)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── rest: ∅ │ │ │ ├── posts: (length: 0) @@ -171,19 +193,24 @@ │ │ └── closing_loc: ∅ │ └── body: │ @ StatementsNode (location: (17,26)-(17,27)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ LocalVariableReadNode (location: (17,26)-(17,27)) + │ ├── flags: newline │ ├── name: :a │ └── depth: 0 ├── @ LambdaNode (location: (19,0)-(19,40)) + │ ├── flags: newline │ ├── locals: [:a, :b, :c, :d, :e, :f, :g] │ ├── operator_loc: (19,0)-(19,2) = "->" │ ├── opening_loc: (19,35)-(19,36) = "{" │ ├── closing_loc: (19,39)-(19,40) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (19,3)-(19,34)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (19,4)-(19,33)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (19,4)-(19,5)) │ │ │ │ ├── flags: ∅ @@ -196,7 +223,7 @@ │ │ │ │ ├── operator_loc: (19,9)-(19,10) = "=" │ │ │ │ └── value: │ │ │ │ @ IntegerNode (location: (19,11)-(19,12)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── rest: │ │ │ │ @ RestParameterNode (location: (19,14)-(19,16)) @@ -231,19 +258,24 @@ │ │ └── closing_loc: (19,33)-(19,34) = ")" │ └── body: │ @ StatementsNode (location: (19,37)-(19,38)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ LocalVariableReadNode (location: (19,37)-(19,38)) + │ ├── flags: newline │ ├── name: :a │ └── depth: 0 ├── @ LambdaNode (location: (21,0)-(23,3)) + │ ├── flags: newline │ ├── locals: [:a, :b, :c, :d, :e, :f, :g] │ ├── operator_loc: (21,0)-(21,2) = "->" │ ├── opening_loc: (21,35)-(21,37) = "do" │ ├── closing_loc: (23,0)-(23,3) = "end" │ ├── parameters: │ │ @ BlockParametersNode (location: (21,3)-(21,34)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (21,4)-(21,33)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (21,4)-(21,5)) │ │ │ │ ├── flags: ∅ @@ -256,7 +288,7 @@ │ │ │ │ ├── operator_loc: (21,9)-(21,10) = "=" │ │ │ │ └── value: │ │ │ │ @ IntegerNode (location: (21,11)-(21,12)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── rest: │ │ │ │ @ RestParameterNode (location: (21,14)-(21,16)) @@ -291,19 +323,24 @@ │ │ └── closing_loc: (21,33)-(21,34) = ")" │ └── body: │ @ StatementsNode (location: (22,2)-(22,3)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ LocalVariableReadNode (location: (22,2)-(22,3)) + │ ├── flags: newline │ ├── name: :a │ └── depth: 0 ├── @ LambdaNode (location: (25,0)-(25,25)) + │ ├── flags: newline │ ├── locals: [:a] │ ├── operator_loc: (25,0)-(25,2) = "->" │ ├── opening_loc: (25,7)-(25,8) = "{" │ ├── closing_loc: (25,24)-(25,25) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (25,3)-(25,6)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (25,4)-(25,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (25,4)-(25,5)) │ │ │ │ ├── flags: ∅ @@ -319,16 +356,20 @@ │ │ └── closing_loc: (25,5)-(25,6) = ")" │ └── body: │ @ StatementsNode (location: (25,9)-(25,23)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ LambdaNode (location: (25,9)-(25,23)) + │ ├── flags: newline │ ├── locals: [:b] │ ├── operator_loc: (25,9)-(25,11) = "->" │ ├── opening_loc: (25,14)-(25,15) = "{" │ ├── closing_loc: (25,22)-(25,23) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (25,12)-(25,13)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (25,12)-(25,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (25,12)-(25,13)) │ │ │ │ ├── flags: ∅ @@ -344,11 +385,13 @@ │ │ └── closing_loc: ∅ │ └── body: │ @ StatementsNode (location: (25,16)-(25,21)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (25,16)-(25,21)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (25,16)-(25,17)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 1 │ ├── call_operator_loc: ∅ @@ -360,21 +403,26 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ LocalVariableReadNode (location: (25,20)-(25,21)) + │ │ ├── flags: ∅ │ │ ├── name: :b │ │ └── depth: 0 │ ├── closing_loc: ∅ │ └── block: ∅ └── @ LambdaNode (location: (27,0)-(27,19)) + ├── flags: newline ├── locals: [:a, :b, :c] ├── operator_loc: (27,0)-(27,2) = "->" ├── opening_loc: (27,16)-(27,17) = "{" ├── closing_loc: (27,18)-(27,19) = "}" ├── parameters: │ @ BlockParametersNode (location: (27,3)-(27,15)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (27,4)-(27,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ MultiTargetNode (location: (27,4)-(27,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 2) │ │ │ │ ├── @ RequiredParameterNode (location: (27,5)-(27,6)) │ │ │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/range_begin_open_exclusive.txt b/test/prism/snapshots/range_begin_open_exclusive.txt index a630b01ef19..e4ca315fc2b 100644 --- a/test/prism/snapshots/range_begin_open_exclusive.txt +++ b/test/prism/snapshots/range_begin_open_exclusive.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,4)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,4)) + ├── flags: ∅ └── body: (length: 1) └── @ RangeNode (location: (1,0)-(1,4)) - ├── flags: exclude_end + ├── flags: newline, static_literal, exclude_end ├── left: ∅ ├── right: │ @ IntegerNode (location: (1,3)-(1,4)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 └── operator_loc: (1,0)-(1,3) = "..." diff --git a/test/prism/snapshots/range_begin_open_inclusive.txt b/test/prism/snapshots/range_begin_open_inclusive.txt index dc8ef0d2dbc..45aa88a5d10 100644 --- a/test/prism/snapshots/range_begin_open_inclusive.txt +++ b/test/prism/snapshots/range_begin_open_inclusive.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,3)) + ├── flags: ∅ └── body: (length: 1) └── @ RangeNode (location: (1,0)-(1,3)) - ├── flags: ∅ + ├── flags: newline, static_literal ├── left: ∅ ├── right: │ @ IntegerNode (location: (1,2)-(1,3)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 └── operator_loc: (1,0)-(1,2) = ".." diff --git a/test/prism/snapshots/range_end_open_exclusive.txt b/test/prism/snapshots/range_end_open_exclusive.txt index 17a75f89456..d0d3f810a37 100644 --- a/test/prism/snapshots/range_end_open_exclusive.txt +++ b/test/prism/snapshots/range_end_open_exclusive.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,4)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,4)) + ├── flags: ∅ └── body: (length: 1) └── @ RangeNode (location: (1,0)-(1,4)) - ├── flags: exclude_end + ├── flags: newline, static_literal, exclude_end ├── left: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── right: ∅ └── operator_loc: (1,1)-(1,4) = "..." diff --git a/test/prism/snapshots/range_end_open_inclusive.txt b/test/prism/snapshots/range_end_open_inclusive.txt index b49272d8cd1..8bfee649a3c 100644 --- a/test/prism/snapshots/range_end_open_inclusive.txt +++ b/test/prism/snapshots/range_end_open_inclusive.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,3)) + ├── flags: ∅ └── body: (length: 1) └── @ RangeNode (location: (1,0)-(1,3)) - ├── flags: ∅ + ├── flags: newline, static_literal ├── left: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── right: ∅ └── operator_loc: (1,1)-(1,3) = ".." diff --git a/test/prism/snapshots/ranges.txt b/test/prism/snapshots/ranges.txt index a9688baf306..7c2175791bf 100644 --- a/test/prism/snapshots/ranges.txt +++ b/test/prism/snapshots/ranges.txt @@ -1,49 +1,55 @@ @ ProgramNode (location: (1,0)-(49,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(49,7)) + ├── flags: ∅ └── body: (length: 25) ├── @ ParenthesesNode (location: (1,0)-(1,6)) + │ ├── flags: newline │ ├── body: │ │ @ StatementsNode (location: (1,1)-(1,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RangeNode (location: (1,1)-(1,5)) - │ │ ├── flags: exclude_end + │ │ ├── flags: newline, static_literal, exclude_end │ │ ├── left: ∅ │ │ ├── right: │ │ │ @ IntegerNode (location: (1,4)-(1,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: (1,1)-(1,4) = "..." │ ├── opening_loc: (1,0)-(1,1) = "(" │ └── closing_loc: (1,5)-(1,6) = ")" ├── @ ParenthesesNode (location: (3,0)-(3,5)) + │ ├── flags: newline │ ├── body: │ │ @ StatementsNode (location: (3,1)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RangeNode (location: (3,1)-(3,4)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline, static_literal │ │ ├── left: ∅ │ │ ├── right: │ │ │ @ IntegerNode (location: (3,3)-(3,4)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: (3,1)-(3,3) = ".." │ ├── opening_loc: (3,0)-(3,1) = "(" │ └── closing_loc: (3,4)-(3,5) = ")" ├── @ RangeNode (location: (5,0)-(5,5)) - │ ├── flags: exclude_end + │ ├── flags: newline, static_literal, exclude_end │ ├── left: │ │ @ IntegerNode (location: (5,0)-(5,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── right: │ │ @ IntegerNode (location: (5,4)-(5,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── operator_loc: (5,1)-(5,4) = "..." ├── @ CallNode (location: (7,0)-(7,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (7,0)-(7,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -64,22 +70,24 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ RangeNode (location: (7,4)-(7,8)) - │ │ ├── flags: exclude_end + │ │ ├── flags: static_literal, exclude_end │ │ ├── left: ∅ │ │ ├── right: │ │ │ @ IntegerNode (location: (7,7)-(7,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: (7,4)-(7,7) = "..." │ ├── closing_loc: (7,8)-(7,9) = "]" │ └── block: ∅ ├── @ HashNode (location: (9,0)-(9,15)) + │ ├── flags: newline │ ├── opening_loc: (9,0)-(9,1) = "{" │ ├── elements: (length: 1) │ │ └── @ AssocNode (location: (9,2)-(9,13)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (9,2)-(9,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (9,2)-(9,5) = "foo" │ │ │ ├── closing_loc: (9,5)-(9,6) = ":" @@ -103,37 +111,41 @@ │ │ └── operator_loc: ∅ │ └── closing_loc: (9,14)-(9,15) = "}" ├── @ ParenthesesNode (location: (11,0)-(11,6)) + │ ├── flags: newline │ ├── body: │ │ @ StatementsNode (location: (11,1)-(11,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RangeNode (location: (11,1)-(11,5)) - │ │ ├── flags: exclude_end + │ │ ├── flags: newline, static_literal, exclude_end │ │ ├── left: │ │ │ @ IntegerNode (location: (11,1)-(11,2)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (11,2)-(11,5) = "..." │ ├── opening_loc: (11,0)-(11,1) = "(" │ └── closing_loc: (11,5)-(11,6) = ")" ├── @ RangeNode (location: (13,0)-(13,4)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── left: │ │ @ IntegerNode (location: (13,0)-(13,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── right: │ │ @ IntegerNode (location: (13,3)-(13,4)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── operator_loc: (13,1)-(13,3) = ".." ├── @ HashNode (location: (15,0)-(15,14)) + │ ├── flags: newline │ ├── opening_loc: (15,0)-(15,1) = "{" │ ├── elements: (length: 1) │ │ └── @ AssocNode (location: (15,2)-(15,12)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (15,2)-(15,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (15,2)-(15,5) = "foo" │ │ │ ├── closing_loc: (15,5)-(15,6) = ":" @@ -157,58 +169,61 @@ │ │ └── operator_loc: ∅ │ └── closing_loc: (15,13)-(15,14) = "}" ├── @ ParenthesesNode (location: (17,0)-(17,5)) + │ ├── flags: newline │ ├── body: │ │ @ StatementsNode (location: (17,1)-(17,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RangeNode (location: (17,1)-(17,4)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline, static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (17,1)-(17,2)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (17,2)-(17,4) = ".." │ ├── opening_loc: (17,0)-(17,1) = "(" │ └── closing_loc: (17,4)-(17,5) = ")" ├── @ RangeNode (location: (19,0)-(19,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── left: │ │ @ IntegerNode (location: (19,0)-(19,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── right: │ │ @ RangeNode (location: (19,5)-(19,8)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: ∅ │ │ ├── right: │ │ │ @ IntegerNode (location: (19,7)-(19,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── operator_loc: (19,5)-(19,7) = ".." │ └── operator_loc: (19,2)-(19,4) = ".." ├── @ AndNode (location: (21,0)-(21,8)) + │ ├── flags: newline │ ├── left: │ │ @ RangeNode (location: (21,0)-(21,3)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (21,0)-(21,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (21,1)-(21,3) = ".." │ ├── right: │ │ @ IntegerNode (location: (21,7)-(21,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── operator_loc: (21,4)-(21,6) = "&&" ├── @ CallNode (location: (23,0)-(23,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RangeNode (location: (23,0)-(23,3)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (23,0)-(23,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (23,1)-(23,3) = ".." @@ -221,18 +236,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (23,7)-(23,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (25,0)-(25,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RangeNode (location: (25,0)-(25,3)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (25,0)-(25,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (25,1)-(25,3) = ".." @@ -245,18 +260,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (25,7)-(25,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (27,0)-(27,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RangeNode (location: (27,0)-(27,3)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (27,0)-(27,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (27,1)-(27,3) = ".." @@ -269,18 +284,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (27,8)-(27,9)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (29,0)-(29,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RangeNode (location: (29,0)-(29,3)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (29,0)-(29,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (29,1)-(29,3) = ".." @@ -293,18 +308,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (29,8)-(29,9)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (31,0)-(31,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RangeNode (location: (31,0)-(31,3)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (31,0)-(31,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (31,1)-(31,3) = ".." @@ -317,18 +332,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (31,7)-(31,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (33,0)-(33,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RangeNode (location: (33,0)-(33,3)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (33,0)-(33,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (33,1)-(33,3) = ".." @@ -341,18 +356,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (33,7)-(33,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (35,0)-(35,7)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: │ │ @ RangeNode (location: (35,0)-(35,3)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (35,0)-(35,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (35,1)-(35,3) = ".." @@ -365,18 +380,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (35,6)-(35,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (37,0)-(37,7)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: │ │ @ RangeNode (location: (37,0)-(37,3)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (37,0)-(37,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (37,1)-(37,3) = ".." @@ -389,18 +404,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (37,6)-(37,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (39,0)-(39,8)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: │ │ @ RangeNode (location: (39,0)-(39,3)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (39,0)-(39,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (39,1)-(39,3) = ".." @@ -413,18 +428,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (39,7)-(39,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (41,0)-(41,8)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: │ │ @ RangeNode (location: (41,0)-(41,3)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (41,0)-(41,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (41,1)-(41,3) = ".." @@ -437,18 +452,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (41,7)-(41,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (43,0)-(43,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RangeNode (location: (43,0)-(43,3)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (43,0)-(43,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (43,1)-(43,3) = ".." @@ -461,18 +476,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (43,7)-(43,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (45,0)-(45,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RangeNode (location: (45,0)-(45,3)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (45,0)-(45,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (45,1)-(45,3) = ".." @@ -485,22 +500,22 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (45,7)-(45,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ RangeNode (location: (47,0)-(47,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── left: │ │ @ IntegerNode (location: (47,0)-(47,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── right: │ │ @ CallNode (location: (47,4)-(47,7)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ IntegerNode (location: (47,6)-(47,7)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── call_operator_loc: ∅ │ │ ├── name: :+@ @@ -511,17 +526,17 @@ │ │ └── block: ∅ │ └── operator_loc: (47,1)-(47,3) = ".." └── @ RangeNode (location: (49,0)-(49,7)) - ├── flags: ∅ + ├── flags: newline ├── left: │ @ IntegerNode (location: (49,0)-(49,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── right: │ @ CallNode (location: (49,4)-(49,7)) │ ├── flags: ∅ │ ├── receiver: │ │ @ IntegerNode (location: (49,6)-(49,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── call_operator_loc: ∅ │ ├── name: :-@ diff --git a/test/prism/snapshots/regex.txt b/test/prism/snapshots/regex.txt index d4d153e8d51..2f4b986d97f 100644 --- a/test/prism/snapshots/regex.txt +++ b/test/prism/snapshots/regex.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(46,32)) +├── flags: ∅ ├── locals: [:foo, :ab, :abc, :a] └── statements: @ StatementsNode (location: (1,0)-(46,32)) + ├── flags: ∅ └── body: (length: 25) ├── @ CallNode (location: (1,0)-(1,9)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -15,7 +17,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ RegularExpressionNode (location: (1,4)-(1,9)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,4)-(1,5) = "/" │ │ ├── content_loc: (1,5)-(1,8) = "bar" │ │ ├── closing_loc: (1,8)-(1,9) = "/" @@ -23,47 +25,51 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ RegularExpressionNode (location: (3,0)-(3,8)) - │ ├── flags: ignore_case, forced_us_ascii_encoding + │ ├── flags: newline, static_literal, ignore_case, forced_us_ascii_encoding │ ├── opening_loc: (3,0)-(3,3) = "%r{" │ ├── content_loc: (3,3)-(3,6) = "abc" │ ├── closing_loc: (3,6)-(3,8) = "}i" │ └── unescaped: "abc" ├── @ RegularExpressionNode (location: (5,0)-(5,5)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (5,0)-(5,1) = "/" │ ├── content_loc: (5,1)-(5,4) = "a\\b" │ ├── closing_loc: (5,4)-(5,5) = "/" │ └── unescaped: "a\\b" ├── @ InterpolatedRegularExpressionNode (location: (7,0)-(7,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (7,0)-(7,1) = "/" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (7,1)-(7,5)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (7,1)-(7,5) = "aaa " │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "aaa " │ │ └── @ EmbeddedVariableNode (location: (7,5)-(7,10)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (7,5)-(7,6) = "#" │ │ └── variable: │ │ @ GlobalVariableReadNode (location: (7,6)-(7,10)) + │ │ ├── flags: ∅ │ │ └── name: :$bbb │ └── closing_loc: (7,10)-(7,11) = "/" ├── @ InterpolatedRegularExpressionNode (location: (9,0)-(9,16)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (9,0)-(9,1) = "/" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (9,1)-(9,5)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (9,1)-(9,5) = "aaa " │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "aaa " │ │ ├── @ EmbeddedStatementsNode (location: (9,5)-(9,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (9,5)-(9,7) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (9,7)-(9,10)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (9,7)-(9,10)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -77,22 +83,23 @@ │ │ │ │ └── block: ∅ │ │ │ └── closing_loc: (9,10)-(9,11) = "}" │ │ └── @ StringNode (location: (9,11)-(9,15)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (9,11)-(9,15) = " ccc" │ │ ├── closing_loc: ∅ │ │ └── unescaped: " ccc" │ └── closing_loc: (9,15)-(9,16) = "/" ├── @ ArrayNode (location: (11,0)-(11,27)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 2) │ │ ├── @ MatchWriteNode (location: (11,1)-(11,21)) + │ │ │ ├── flags: ∅ │ │ │ ├── call: │ │ │ │ @ CallNode (location: (11,1)-(11,21)) │ │ │ │ ├── flags: ∅ │ │ │ │ ├── receiver: │ │ │ │ │ @ RegularExpressionNode (location: (11,1)-(11,14)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: (11,1)-(11,2) = "/" │ │ │ │ │ ├── content_loc: (11,2)-(11,13) = "(?bar)" │ │ │ │ │ ├── closing_loc: (11,13)-(11,14) = "/" @@ -119,48 +126,50 @@ │ │ │ │ └── block: ∅ │ │ │ └── targets: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (11,5)-(11,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :foo │ │ │ └── depth: 0 │ │ └── @ LocalVariableReadNode (location: (11,23)-(11,26)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── opening_loc: (11,0)-(11,1) = "[" │ └── closing_loc: (11,26)-(11,27) = "]" ├── @ RegularExpressionNode (location: (13,0)-(13,6)) - │ ├── flags: ignore_case, forced_us_ascii_encoding + │ ├── flags: newline, static_literal, ignore_case, forced_us_ascii_encoding │ ├── opening_loc: (13,0)-(13,1) = "/" │ ├── content_loc: (13,1)-(13,4) = "abc" │ ├── closing_loc: (13,4)-(13,6) = "/i" │ └── unescaped: "abc" ├── @ RegularExpressionNode (location: (15,0)-(15,26)) - │ ├── flags: ignore_case, forced_us_ascii_encoding + │ ├── flags: newline, static_literal, ignore_case, forced_us_ascii_encoding │ ├── opening_loc: (15,0)-(15,3) = "%r/" │ ├── content_loc: (15,3)-(15,24) = "[a-z$._?][\\w$.?\#@~]*:" │ ├── closing_loc: (15,24)-(15,26) = "/i" │ └── unescaped: "[a-z$._?][\\w$.?\#@~]*:" ├── @ RegularExpressionNode (location: (17,0)-(17,37)) - │ ├── flags: ignore_case, forced_us_ascii_encoding + │ ├── flags: newline, static_literal, ignore_case, forced_us_ascii_encoding │ ├── opening_loc: (17,0)-(17,3) = "%r/" │ ├── content_loc: (17,3)-(17,35) = "([a-z$._?][\\w$.?\#@~]*)(\\s+)(equ)" │ ├── closing_loc: (17,35)-(17,37) = "/i" │ └── unescaped: "([a-z$._?][\\w$.?\#@~]*)(\\s+)(equ)" ├── @ RegularExpressionNode (location: (19,0)-(19,25)) - │ ├── flags: ignore_case, forced_us_ascii_encoding + │ ├── flags: newline, static_literal, ignore_case, forced_us_ascii_encoding │ ├── opening_loc: (19,0)-(19,3) = "%r/" │ ├── content_loc: (19,3)-(19,23) = "[a-z$._?][\\w$.?\#@~]*" │ ├── closing_loc: (19,23)-(19,25) = "/i" │ └── unescaped: "[a-z$._?][\\w$.?\#@~]*" ├── @ RegularExpressionNode (location: (21,0)-(24,1)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (21,0)-(21,3) = "%r(" │ ├── content_loc: (21,3)-(24,0) = "\n(?:[\#$%_']|\\(\\)|\\(,\\)|\\[\\]|[0-9])*\n (?:[\#$%_']+)\n" │ ├── closing_loc: (24,0)-(24,1) = ")" │ └── unescaped: "\n(?:[\#$%_']|\\(\\)|\\(,\\)|\\[\\]|[0-9])*\n (?:[\#$%_']+)\n" ├── @ CallNode (location: (26,0)-(26,16)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RegularExpressionNode (location: (26,0)-(26,8)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (26,0)-(26,1) = "/" │ │ ├── content_loc: (26,1)-(26,7) = "(?#\\))" │ │ ├── closing_loc: (26,7)-(26,8) = "/" @@ -182,25 +191,27 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ RegularExpressionNode (location: (28,0)-(28,9)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (28,0)-(28,3) = "%r#" │ ├── content_loc: (28,3)-(28,8) = "pound" │ ├── closing_loc: (28,8)-(28,9) = "#" │ └── unescaped: "pound" ├── @ InterpolatedRegularExpressionNode (location: (30,0)-(30,13)) - │ ├── flags: once + │ ├── flags: newline, once │ ├── opening_loc: (30,0)-(30,1) = "/" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (30,1)-(30,5)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (30,1)-(30,5) = "aaa " │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "aaa " │ │ └── @ EmbeddedStatementsNode (location: (30,5)-(30,11)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (30,5)-(30,7) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (30,7)-(30,10)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (30,7)-(30,10)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -215,12 +226,13 @@ │ │ └── closing_loc: (30,10)-(30,11) = "}" │ └── closing_loc: (30,11)-(30,13) = "/o" ├── @ MatchWriteNode (location: (32,0)-(33,10)) + │ ├── flags: newline │ ├── call: │ │ @ CallNode (location: (32,0)-(33,10)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ RegularExpressionNode (location: (32,0)-(33,4)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (32,0)-(32,1) = "/" │ │ │ ├── content_loc: (32,1)-(33,3) = "(?)" │ │ │ ├── closing_loc: (33,3)-(33,4) = "/" @@ -243,18 +255,21 @@ │ │ └── block: ∅ │ └── targets: (length: 1) │ └── @ LocalVariableTargetNode (location: (32,0)-(33,4)) + │ ├── flags: ∅ │ ├── name: :ab │ └── depth: 0 ├── @ LocalVariableReadNode (location: (33,12)-(33,14)) + │ ├── flags: newline │ ├── name: :ab │ └── depth: 0 ├── @ MatchWriteNode (location: (35,0)-(35,24)) + │ ├── flags: newline │ ├── call: │ │ @ CallNode (location: (35,0)-(35,24)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ RegularExpressionNode (location: (35,0)-(35,18)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (35,0)-(35,1) = "/" │ │ │ ├── content_loc: (35,1)-(35,17) = "(?)(?)" │ │ │ ├── closing_loc: (35,17)-(35,18) = "/" @@ -277,16 +292,18 @@ │ │ └── block: ∅ │ └── targets: (length: 1) │ └── @ LocalVariableTargetNode (location: (35,4)-(35,7)) + │ ├── flags: ∅ │ ├── name: :abc │ └── depth: 0 ├── @ LocalVariableReadNode (location: (35,26)-(35,29)) + │ ├── flags: newline │ ├── name: :abc │ └── depth: 0 ├── @ CallNode (location: (37,0)-(37,16)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RegularExpressionNode (location: (37,0)-(37,10)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (37,0)-(37,1) = "/" │ │ ├── content_loc: (37,1)-(37,9) = "(?)" │ │ ├── closing_loc: (37,9)-(37,10) = "/" @@ -308,16 +325,17 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ LocalVariableWriteNode (location: (39,0)-(39,5)) + │ ├── flags: newline │ ├── name: :a │ ├── depth: 0 │ ├── name_loc: (39,0)-(39,1) = "a" │ ├── value: │ │ @ IntegerNode (location: (39,4)-(39,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (39,2)-(39,3) = "=" ├── @ CallNode (location: (40,0)-(40,24)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -327,18 +345,21 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (40,4)-(40,24)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (40,6)-(40,22)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ MatchWriteNode (location: (40,6)-(40,22)) + │ │ ├── flags: newline │ │ ├── call: │ │ │ @ CallNode (location: (40,6)-(40,22)) │ │ │ ├── flags: ∅ │ │ │ ├── receiver: │ │ │ │ @ RegularExpressionNode (location: (40,6)-(40,14)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (40,6)-(40,7) = "/" │ │ │ │ ├── content_loc: (40,7)-(40,13) = "(?)" │ │ │ │ ├── closing_loc: (40,13)-(40,14) = "/" @@ -365,17 +386,19 @@ │ │ │ └── block: ∅ │ │ └── targets: (length: 1) │ │ └── @ LocalVariableTargetNode (location: (40,10)-(40,11)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 1 │ ├── opening_loc: (40,4)-(40,5) = "{" │ └── closing_loc: (40,23)-(40,24) = "}" ├── @ MatchWriteNode (location: (42,0)-(42,16)) + │ ├── flags: newline │ ├── call: │ │ @ CallNode (location: (42,0)-(42,16)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ RegularExpressionNode (location: (42,0)-(42,10)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (42,0)-(42,1) = "/" │ │ │ ├── content_loc: (42,1)-(42,9) = "(?)" │ │ │ ├── closing_loc: (42,9)-(42,10) = "/" @@ -398,13 +421,14 @@ │ │ └── block: ∅ │ └── targets: (length: 1) │ └── @ LocalVariableTargetNode (location: (42,4)-(42,7)) + │ ├── flags: ∅ │ ├── name: :foo │ └── depth: 0 ├── @ CallNode (location: (43,0)-(43,16)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RegularExpressionNode (location: (43,0)-(43,10)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (43,0)-(43,1) = "/" │ │ ├── content_loc: (43,1)-(43,9) = "(?)" │ │ ├── closing_loc: (43,9)-(43,10) = "/" @@ -426,10 +450,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (45,0)-(45,16)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RegularExpressionNode (location: (45,0)-(45,10)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (45,0)-(45,1) = "/" │ │ ├── content_loc: (45,1)-(45,9) = "(?)" │ │ ├── closing_loc: (45,9)-(45,10) = "/" @@ -451,11 +475,13 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ DefNode (location: (46,0)-(46,32)) + ├── flags: newline ├── name: :foo ├── name_loc: (46,4)-(46,7) = "foo" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (46,8)-(46,12)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -469,14 +495,16 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (46,16)-(46,32)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ MatchWriteNode (location: (46,16)-(46,32)) + │ ├── flags: newline │ ├── call: │ │ @ CallNode (location: (46,16)-(46,32)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ RegularExpressionNode (location: (46,16)-(46,26)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (46,16)-(46,17) = "/" │ │ │ ├── content_loc: (46,17)-(46,25) = "(?)" │ │ │ ├── closing_loc: (46,25)-(46,26) = "/" @@ -499,6 +527,7 @@ │ │ └── block: ∅ │ └── targets: (length: 1) │ └── @ LocalVariableTargetNode (location: (46,20)-(46,23)) + │ ├── flags: ∅ │ ├── name: :nil │ └── depth: 0 ├── locals: [:nil] diff --git a/test/prism/snapshots/regex_char_width.txt b/test/prism/snapshots/regex_char_width.txt index 6bf2169b2f3..664e4e8850a 100644 --- a/test/prism/snapshots/regex_char_width.txt +++ b/test/prism/snapshots/regex_char_width.txt @@ -1,15 +1,18 @@ @ ProgramNode (location: (2,0)-(3,6)) +├── flags: ∅ ├── locals: [:a, :b] └── statements: @ StatementsNode (location: (2,0)-(3,6)) + ├── flags: ∅ └── body: (length: 2) ├── @ MatchWriteNode (location: (2,0)-(2,36)) + │ ├── flags: newline │ ├── call: │ │ @ CallNode (location: (2,0)-(2,36)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ RegularExpressionNode (location: (2,0)-(2,22)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── opening_loc: (2,0)-(2,1) = "/" │ │ │ ├── content_loc: (2,1)-(2,21) = "\x{E285}\xA7(?.)\x{E285}\xA9(?.)" │ │ │ ├── closing_loc: (2,21)-(2,22) = "/" @@ -32,18 +35,22 @@ │ │ └── block: ∅ │ └── targets: (length: 2) │ ├── @ LocalVariableTargetNode (location: (2,7)-(2,8)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ └── @ LocalVariableTargetNode (location: (2,17)-(2,18)) + │ ├── flags: ∅ │ ├── name: :b │ └── depth: 0 └── @ ArrayNode (location: (3,0)-(3,6)) - ├── flags: ∅ + ├── flags: newline ├── elements: (length: 2) │ ├── @ LocalVariableReadNode (location: (3,1)-(3,2)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ └── @ LocalVariableReadNode (location: (3,4)-(3,5)) + │ ├── flags: ∅ │ ├── name: :b │ └── depth: 0 ├── opening_loc: (3,0)-(3,1) = "[" diff --git a/test/prism/snapshots/repeat_parameters.txt b/test/prism/snapshots/repeat_parameters.txt index fd98294ce61..1dbf120e9cb 100644 --- a/test/prism/snapshots/repeat_parameters.txt +++ b/test/prism/snapshots/repeat_parameters.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(38,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(38,3)) + ├── flags: ∅ └── body: (length: 13) ├── @ DefNode (location: (1,0)-(2,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (1,4)-(1,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,8)-(1,12)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ RequiredParameterNode (location: (1,8)-(1,9)) │ │ │ │ ├── flags: ∅ @@ -31,11 +35,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (2,0)-(2,3) = "end" ├── @ DefNode (location: (4,0)-(5,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (4,4)-(4,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (4,8)-(4,15)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 3) │ │ │ ├── @ RequiredParameterNode (location: (4,8)-(4,9)) │ │ │ │ ├── flags: ∅ @@ -61,11 +67,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (5,0)-(5,3) = "end" ├── @ DefNode (location: (7,0)-(8,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (7,4)-(7,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (7,8)-(7,19)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 4) │ │ │ ├── @ RequiredParameterNode (location: (7,8)-(7,9)) │ │ │ │ ├── flags: ∅ @@ -94,11 +102,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (8,0)-(8,3) = "end" ├── @ DefNode (location: (10,0)-(11,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (10,4)-(10,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (10,8)-(10,23)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 5) │ │ │ ├── @ RequiredParameterNode (location: (10,8)-(10,9)) │ │ │ │ ├── flags: ∅ @@ -130,22 +140,26 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ DefNode (location: (13,0)-(14,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (13,4)-(13,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (13,8)-(13,35)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 3) │ │ │ ├── @ RequiredParameterNode (location: (13,8)-(13,9)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :a │ │ │ ├── @ MultiTargetNode (location: (13,11)-(13,22)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── lefts: (length: 1) │ │ │ │ │ └── @ RequiredParameterNode (location: (13,12)-(13,13)) │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── name: :b │ │ │ │ ├── rest: │ │ │ │ │ @ SplatNode (location: (13,15)-(13,18)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── operator_loc: (13,15)-(13,16) = "*" │ │ │ │ │ └── expression: │ │ │ │ │ @ RequiredParameterNode (location: (13,16)-(13,18)) @@ -158,12 +172,14 @@ │ │ │ │ ├── lparen_loc: (13,11)-(13,12) = "(" │ │ │ │ └── rparen_loc: (13,21)-(13,22) = ")" │ │ │ └── @ MultiTargetNode (location: (13,24)-(13,35)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (13,25)-(13,26)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :e │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (13,28)-(13,31)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (13,28)-(13,29) = "*" │ │ │ │ └── expression: │ │ │ │ @ RequiredParameterNode (location: (13,29)-(13,31)) @@ -190,11 +206,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (14,0)-(14,3) = "end" ├── @ DefNode (location: (16,0)-(17,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (16,4)-(16,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (16,8)-(16,20)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 4) │ │ │ ├── @ RequiredParameterNode (location: (16,8)-(16,10)) │ │ │ │ ├── flags: ∅ @@ -223,19 +241,23 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (17,0)-(17,3) = "end" ├── @ DefNode (location: (19,0)-(20,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (19,4)-(19,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (19,8)-(19,32)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ MultiTargetNode (location: (19,8)-(19,19)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── lefts: (length: 1) │ │ │ │ │ └── @ RequiredParameterNode (location: (19,9)-(19,10)) │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── name: :a │ │ │ │ ├── rest: │ │ │ │ │ @ SplatNode (location: (19,12)-(19,15)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── operator_loc: (19,12)-(19,13) = "*" │ │ │ │ │ └── expression: │ │ │ │ │ @ RequiredParameterNode (location: (19,13)-(19,15)) @@ -248,12 +270,14 @@ │ │ │ │ ├── lparen_loc: (19,8)-(19,9) = "(" │ │ │ │ └── rparen_loc: (19,18)-(19,19) = ")" │ │ │ └── @ MultiTargetNode (location: (19,21)-(19,32)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (19,22)-(19,23)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :d │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (19,25)-(19,28)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (19,25)-(19,26) = "*" │ │ │ │ └── expression: │ │ │ │ @ RequiredParameterNode (location: (19,26)-(19,28)) @@ -280,11 +304,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (20,0)-(20,3) = "end" ├── @ DefNode (location: (22,0)-(23,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (22,4)-(22,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (22,8)-(22,22)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 2) │ │ │ ├── @ OptionalParameterNode (location: (22,8)-(22,14)) @@ -294,7 +320,7 @@ │ │ │ │ ├── operator_loc: (22,11)-(22,12) = "=" │ │ │ │ └── value: │ │ │ │ @ IntegerNode (location: (22,13)-(22,14)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── @ OptionalParameterNode (location: (22,16)-(22,22)) │ │ │ ├── flags: repeated_parameter @@ -303,7 +329,7 @@ │ │ │ ├── operator_loc: (22,19)-(22,20) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (22,21)-(22,22)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) @@ -319,11 +345,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (23,0)-(23,3) = "end" ├── @ DefNode (location: (25,0)-(26,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (25,4)-(25,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (25,8)-(25,16)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -348,11 +376,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (26,0)-(26,3) = "end" ├── @ DefNode (location: (28,0)-(29,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (28,4)-(28,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (28,8)-(28,20)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -364,7 +394,7 @@ │ │ │ │ ├── name_loc: (28,8)-(28,11) = "_a:" │ │ │ │ └── value: │ │ │ │ @ IntegerNode (location: (28,12)-(28,13)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── @ OptionalKeywordParameterNode (location: (28,15)-(28,20)) │ │ │ ├── flags: repeated_parameter @@ -372,7 +402,7 @@ │ │ │ ├── name_loc: (28,15)-(28,18) = "_a:" │ │ │ └── value: │ │ │ @ IntegerNode (location: (28,19)-(28,20)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── keyword_rest: ∅ │ │ └── block: ∅ @@ -385,11 +415,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (29,0)-(29,3) = "end" ├── @ DefNode (location: (31,0)-(32,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (31,4)-(31,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (31,8)-(31,16)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (31,8)-(31,10)) │ │ │ ├── flags: ∅ @@ -414,11 +446,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (32,0)-(32,3) = "end" ├── @ DefNode (location: (34,0)-(35,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (34,4)-(34,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (34,8)-(34,15)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (34,8)-(34,10)) │ │ │ ├── flags: ∅ @@ -443,11 +477,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (35,0)-(35,3) = "end" └── @ DefNode (location: (37,0)-(38,3)) + ├── flags: newline ├── name: :foo ├── name_loc: (37,4)-(37,7) = "foo" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (37,8)-(37,15)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (37,8)-(37,10)) │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/rescue.txt b/test/prism/snapshots/rescue.txt index 390b08ae0ef..53a49fbb470 100644 --- a/test/prism/snapshots/rescue.txt +++ b/test/prism/snapshots/rescue.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(35,18)) +├── flags: ∅ ├── locals: [:a, :z] └── statements: @ StatementsNode (location: (1,0)-(35,18)) + ├── flags: ∅ └── body: (length: 14) ├── @ RescueModifierNode (location: (1,0)-(1,14)) + │ ├── flags: newline │ ├── expression: │ │ @ CallNode (location: (1,0)-(1,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -18,7 +21,9 @@ │ ├── keyword_loc: (1,4)-(1,10) = "rescue" │ └── rescue_expression: │ @ NilNode (location: (1,11)-(1,14)) + │ └── flags: static_literal ├── @ RescueModifierNode (location: (3,0)-(4,3)) + │ ├── flags: newline │ ├── expression: │ │ @ CallNode (location: (3,0)-(3,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -33,8 +38,9 @@ │ ├── keyword_loc: (3,4)-(3,10) = "rescue" │ └── rescue_expression: │ @ NilNode (location: (4,0)-(4,3)) + │ └── flags: static_literal ├── @ CallNode (location: (6,0)-(6,24)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -44,23 +50,28 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (6,4)-(6,24)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (6,6)-(6,22)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (6,6)-(6,22)) + │ │ ├── flags: newline │ │ ├── expression: │ │ │ @ BreakNode (location: (6,6)-(6,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── arguments: ∅ │ │ │ └── keyword_loc: (6,6)-(6,11) = "break" │ │ ├── keyword_loc: (6,12)-(6,18) = "rescue" │ │ └── rescue_expression: │ │ @ NilNode (location: (6,19)-(6,22)) + │ │ └── flags: static_literal │ ├── opening_loc: (6,4)-(6,5) = "{" │ └── closing_loc: (6,23)-(6,24) = "}" ├── @ CallNode (location: (8,0)-(8,23)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -70,22 +81,28 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (8,4)-(8,23)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (8,6)-(8,21)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (8,6)-(8,21)) + │ │ ├── flags: newline │ │ ├── expression: │ │ │ @ NextNode (location: (8,6)-(8,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── arguments: ∅ │ │ │ └── keyword_loc: (8,6)-(8,10) = "next" │ │ ├── keyword_loc: (8,11)-(8,17) = "rescue" │ │ └── rescue_expression: │ │ @ NilNode (location: (8,18)-(8,21)) + │ │ └── flags: static_literal │ ├── opening_loc: (8,4)-(8,5) = "{" │ └── closing_loc: (8,22)-(8,23) = "}" ├── @ RescueModifierNode (location: (10,0)-(10,17)) + │ ├── flags: newline │ ├── expression: │ │ @ ReturnNode (location: (10,0)-(10,6)) │ │ ├── flags: ∅ @@ -94,7 +111,9 @@ │ ├── keyword_loc: (10,7)-(10,13) = "rescue" │ └── rescue_expression: │ @ NilNode (location: (10,14)-(10,17)) + │ └── flags: static_literal ├── @ RescueModifierNode (location: (12,0)-(12,19)) + │ ├── flags: newline │ ├── expression: │ │ @ CallNode (location: (12,0)-(12,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -109,14 +128,17 @@ │ ├── keyword_loc: (12,4)-(12,10) = "rescue" │ └── rescue_expression: │ @ OrNode (location: (12,11)-(12,19)) + │ ├── flags: ∅ │ ├── left: │ │ @ NilNode (location: (12,11)-(12,14)) + │ │ └── flags: static_literal │ ├── right: │ │ @ IntegerNode (location: (12,18)-(12,19)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (12,15)-(12,17) = "||" ├── @ RescueModifierNode (location: (14,0)-(14,22)) + │ ├── flags: newline │ ├── expression: │ │ @ CallNode (location: (14,0)-(14,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -131,34 +153,41 @@ │ ├── keyword_loc: (14,4)-(14,10) = "rescue" │ └── rescue_expression: │ @ IfNode (location: (14,11)-(14,22)) + │ ├── flags: newline │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ NilNode (location: (14,11)-(14,14)) + │ │ └── flags: static_literal │ ├── then_keyword_loc: (14,15)-(14,16) = "?" │ ├── statements: │ │ @ StatementsNode (location: (14,17)-(14,18)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (14,17)-(14,18)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 │ ├── consequent: │ │ @ ElseNode (location: (14,19)-(14,22)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (14,19)-(14,20) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (14,21)-(14,22)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ IntegerNode (location: (14,21)-(14,22)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: newline, static_literal, decimal │ │ │ └── value: 2 │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ ├── @ BeginNode (location: (16,0)-(16,24)) + │ ├── flags: newline │ ├── begin_keyword_loc: (16,0)-(16,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (16,7)-(16,8)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (16,7)-(16,8)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -169,9 +198,11 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (16,10)-(16,19)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (16,10)-(16,16) = "rescue" │ │ ├── exceptions: (length: 1) │ │ │ └── @ SplatNode (location: (16,17)-(16,19)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (16,17)-(16,18) = "*" │ │ │ └── expression: │ │ │ @ CallNode (location: (16,18)-(16,19)) @@ -192,7 +223,7 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (16,21)-(16,24) = "end" ├── @ CallNode (location: (18,0)-(20,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -202,11 +233,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (18,4)-(20,3)) + │ ├── flags: ∅ │ ├── locals: [:x] │ ├── parameters: │ │ @ BlockParametersNode (location: (18,7)-(18,10)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (18,8)-(18,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (18,8)-(18,9)) │ │ │ │ ├── flags: ∅ @@ -222,8 +256,10 @@ │ │ └── closing_loc: (18,9)-(18,10) = "|" │ ├── body: │ │ @ StatementsNode (location: (19,2)-(19,40)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (19,2)-(19,40)) + │ │ ├── flags: newline │ │ ├── expression: │ │ │ @ CallNode (location: (19,2)-(19,8)) │ │ │ ├── flags: ignore_visibility @@ -285,14 +321,17 @@ │ ├── opening_loc: (18,4)-(18,6) = "do" │ └── closing_loc: (20,0)-(20,3) = "end" ├── @ IfNode (location: (22,0)-(24,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (22,0)-(22,2) = "if" │ ├── predicate: │ │ @ LocalVariableWriteNode (location: (22,3)-(22,21)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ ├── depth: 0 │ │ ├── name_loc: (22,3)-(22,4) = "a" │ │ ├── value: │ │ │ @ RescueModifierNode (location: (22,7)-(22,21)) + │ │ │ ├── flags: ∅ │ │ │ ├── expression: │ │ │ │ @ CallNode (location: (22,7)-(22,10)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -307,13 +346,15 @@ │ │ │ ├── keyword_loc: (22,11)-(22,17) = "rescue" │ │ │ └── rescue_expression: │ │ │ @ NilNode (location: (22,18)-(22,21)) + │ │ │ └── flags: static_literal │ │ └── operator_loc: (22,5)-(22,6) = "=" │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (23,2)-(23,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (23,2)-(23,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -325,14 +366,17 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (24,0)-(24,3) = "end" ├── @ DefNode (location: (26,0)-(26,44)) + │ ├── flags: newline │ ├── name: :some_method │ ├── name_loc: (26,4)-(26,15) = "some_method" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (26,18)-(26,44)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (26,18)-(26,44)) + │ │ ├── flags: newline │ │ ├── expression: │ │ │ @ CallNode (location: (26,18)-(26,33)) │ │ │ ├── flags: ignore_visibility @@ -346,13 +390,14 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ IntegerNode (location: (26,31)-(26,33)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 42 │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ ├── keyword_loc: (26,34)-(26,40) = "rescue" │ │ └── rescue_expression: │ │ @ NilNode (location: (26,41)-(26,44)) + │ │ └── flags: static_literal │ ├── locals: [] │ ├── def_keyword_loc: (26,0)-(26,3) = "def" │ ├── operator_loc: ∅ @@ -361,18 +406,21 @@ │ ├── equal_loc: (26,16)-(26,17) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (28,0)-(31,3)) + │ ├── flags: newline │ ├── name: :a │ ├── name_loc: (28,4)-(28,5) = "a" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (28,0)-(31,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (29,2)-(29,6)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (29,2)-(29,6)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :a @@ -386,15 +434,17 @@ │ │ │ │ ├── flags: symbol_keys │ │ │ │ └── elements: (length: 1) │ │ │ │ └── @ AssocNode (location: (29,4)-(29,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (29,4)-(29,6)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (29,4)-(29,5) = "b" │ │ │ │ │ ├── closing_loc: (29,5)-(29,6) = ":" │ │ │ │ │ └── unescaped: "b" │ │ │ │ ├── value: │ │ │ │ │ @ ImplicitNode (location: (29,4)-(29,6)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── value: │ │ │ │ │ @ CallNode (location: (29,4)-(29,6)) │ │ │ │ │ ├── flags: ignore_visibility @@ -411,6 +461,7 @@ │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (30,0)-(30,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (30,0)-(30,6) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ @@ -428,8 +479,10 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (31,0)-(31,3) = "end" ├── @ RescueModifierNode (location: (33,0)-(33,21)) + │ ├── flags: newline │ ├── expression: │ │ @ IfNode (location: (33,0)-(33,10)) + │ │ ├── flags: newline │ │ ├── if_keyword_loc: (33,4)-(33,6) = "if" │ │ ├── predicate: │ │ │ @ CallNode (location: (33,7)-(33,10)) @@ -445,9 +498,10 @@ │ │ ├── then_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (33,0)-(33,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (33,0)-(33,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :foo @@ -471,11 +525,13 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ LocalVariableWriteNode (location: (35,0)-(35,18)) + ├── flags: newline ├── name: :z ├── depth: 0 ├── name_loc: (35,0)-(35,1) = "z" ├── value: │ @ RescueModifierNode (location: (35,4)-(35,18)) + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (35,4)-(35,7)) │ │ ├── flags: ignore_visibility diff --git a/test/prism/snapshots/return.txt b/test/prism/snapshots/return.txt index 0dd26281c1d..8c01ee438cd 100644 --- a/test/prism/snapshots/return.txt +++ b/test/prism/snapshots/return.txt @@ -1,165 +1,179 @@ @ ProgramNode (location: (1,0)-(23,9)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(23,9)) + ├── flags: ∅ └── body: (length: 10) ├── @ ReturnNode (location: (1,0)-(1,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (1,0)-(1,6) = "return" │ └── arguments: ∅ ├── @ ReturnNode (location: (3,0)-(3,20)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (3,0)-(3,6) = "return" │ └── arguments: │ @ ArgumentsNode (location: (3,7)-(3,20)) │ ├── flags: ∅ │ └── arguments: (length: 3) │ ├── @ ParenthesesNode (location: (3,7)-(3,10)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (3,8)-(3,9)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ IntegerNode (location: (3,8)-(3,9)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: newline, static_literal, decimal │ │ │ └── value: 1 │ │ ├── opening_loc: (3,7)-(3,8) = "(" │ │ └── closing_loc: (3,9)-(3,10) = ")" │ ├── @ ParenthesesNode (location: (3,12)-(3,15)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (3,13)-(3,14)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ IntegerNode (location: (3,13)-(3,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: newline, static_literal, decimal │ │ │ └── value: 2 │ │ ├── opening_loc: (3,12)-(3,13) = "(" │ │ └── closing_loc: (3,14)-(3,15) = ")" │ └── @ ParenthesesNode (location: (3,17)-(3,20)) + │ ├── flags: ∅ │ ├── body: │ │ @ StatementsNode (location: (3,18)-(3,19)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (3,18)-(3,19)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 3 │ ├── opening_loc: (3,17)-(3,18) = "(" │ └── closing_loc: (3,19)-(3,20) = ")" ├── @ ReturnNode (location: (5,0)-(5,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (5,0)-(5,6) = "return" │ └── arguments: │ @ ArgumentsNode (location: (5,7)-(5,9)) │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ SplatNode (location: (5,7)-(5,9)) + │ ├── flags: ∅ │ ├── operator_loc: (5,7)-(5,8) = "*" │ └── expression: │ @ IntegerNode (location: (5,8)-(5,9)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ ReturnNode (location: (7,0)-(7,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (7,0)-(7,6) = "return" │ └── arguments: │ @ ArgumentsNode (location: (7,7)-(7,8)) │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (7,7)-(7,8)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ ReturnNode (location: (9,0)-(10,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (9,0)-(9,6) = "return" │ └── arguments: │ @ ArgumentsNode (location: (9,7)-(10,1)) │ ├── flags: ∅ │ └── arguments: (length: 3) │ ├── @ IntegerNode (location: (9,7)-(9,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── @ IntegerNode (location: (9,10)-(9,11)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── @ IntegerNode (location: (10,0)-(10,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 3 ├── @ ReturnNode (location: (12,0)-(12,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (12,0)-(12,6) = "return" │ └── arguments: │ @ ArgumentsNode (location: (12,7)-(12,14)) │ ├── flags: ∅ │ └── arguments: (length: 3) │ ├── @ IntegerNode (location: (12,7)-(12,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── @ IntegerNode (location: (12,10)-(12,11)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── @ IntegerNode (location: (12,13)-(12,14)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 3 ├── @ ReturnNode (location: (14,0)-(14,16)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (14,0)-(14,6) = "return" │ └── arguments: │ @ ArgumentsNode (location: (14,7)-(14,16)) │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ ArrayNode (location: (14,7)-(14,16)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 3) │ │ ├── @ IntegerNode (location: (14,8)-(14,9)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── @ IntegerNode (location: (14,11)-(14,12)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── @ IntegerNode (location: (14,14)-(14,15)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ ├── opening_loc: (14,7)-(14,8) = "[" │ └── closing_loc: (14,15)-(14,16) = "]" ├── @ ReturnNode (location: (16,0)-(19,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (16,0)-(16,6) = "return" │ └── arguments: │ @ ArgumentsNode (location: (16,6)-(19,1)) │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ ParenthesesNode (location: (16,6)-(19,1)) + │ ├── flags: ∅ │ ├── body: │ │ @ StatementsNode (location: (17,2)-(18,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 2) │ │ ├── @ IntegerNode (location: (17,2)-(17,3)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: newline, static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (18,2)-(18,3)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: (16,6)-(16,7) = "(" │ └── closing_loc: (19,0)-(19,1) = ")" ├── @ ReturnNode (location: (21,0)-(21,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (21,0)-(21,6) = "return" │ └── arguments: │ @ ArgumentsNode (location: (21,6)-(21,8)) │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ ParenthesesNode (location: (21,6)-(21,8)) + │ ├── flags: ∅ │ ├── body: ∅ │ ├── opening_loc: (21,6)-(21,7) = "(" │ └── closing_loc: (21,7)-(21,8) = ")" └── @ ReturnNode (location: (23,0)-(23,9)) - ├── flags: ∅ + ├── flags: newline ├── keyword_loc: (23,0)-(23,6) = "return" └── arguments: @ ArgumentsNode (location: (23,6)-(23,9)) ├── flags: ∅ └── arguments: (length: 1) └── @ ParenthesesNode (location: (23,6)-(23,9)) + ├── flags: ∅ ├── body: │ @ StatementsNode (location: (23,7)-(23,8)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ IntegerNode (location: (23,7)-(23,8)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 1 ├── opening_loc: (23,6)-(23,7) = "(" └── closing_loc: (23,8)-(23,9) = ")" diff --git a/test/prism/snapshots/seattlerb/BEGIN.txt b/test/prism/snapshots/seattlerb/BEGIN.txt index 246f39cbba8..a0d73a8039b 100644 --- a/test/prism/snapshots/seattlerb/BEGIN.txt +++ b/test/prism/snapshots/seattlerb/BEGIN.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,12)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,12)) + ├── flags: ∅ └── body: (length: 1) └── @ PreExecutionNode (location: (1,0)-(1,12)) + ├── flags: newline ├── statements: │ @ StatementsNode (location: (1,8)-(1,10)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ IntegerNode (location: (1,8)-(1,10)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 42 ├── keyword_loc: (1,0)-(1,5) = "BEGIN" ├── opening_loc: (1,6)-(1,7) = "{" diff --git a/test/prism/snapshots/seattlerb/TestRubyParserShared.txt b/test/prism/snapshots/seattlerb/TestRubyParserShared.txt index fabc92e4779..7a488a20aab 100644 --- a/test/prism/snapshots/seattlerb/TestRubyParserShared.txt +++ b/test/prism/snapshots/seattlerb/TestRubyParserShared.txt @@ -1,24 +1,26 @@ @ ProgramNode (location: (1,0)-(92,1)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(92,1)) + ├── flags: ∅ └── body: (length: 16) ├── @ ArrayNode (location: (1,0)-(4,1)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 0) │ ├── opening_loc: (1,0)-(1,3) = "%I[" │ └── closing_loc: (4,0)-(4,1) = "]" ├── @ ArrayNode (location: (6,0)-(9,1)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 2) │ │ ├── @ SymbolNode (location: (7,0)-(7,5)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (7,0)-(7,5) = "line2" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "line2" │ │ └── @ SymbolNode (location: (8,0)-(8,5)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (8,0)-(8,5) = "line3" │ │ ├── closing_loc: ∅ @@ -26,12 +28,12 @@ │ ├── opening_loc: (6,0)-(6,3) = "%I[" │ └── closing_loc: (9,0)-(9,1) = "]" ├── @ ArrayNode (location: (11,0)-(14,1)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 0) │ ├── opening_loc: (11,0)-(11,3) = "%W[" │ └── closing_loc: (14,0)-(14,1) = "]" ├── @ ArrayNode (location: (16,0)-(19,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 2) │ │ ├── @ StringNode (location: (17,0)-(17,5)) │ │ │ ├── flags: ∅ @@ -48,21 +50,21 @@ │ ├── opening_loc: (16,0)-(16,3) = "%W[" │ └── closing_loc: (19,0)-(19,1) = "]" ├── @ ArrayNode (location: (21,0)-(24,1)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 0) │ ├── opening_loc: (21,0)-(21,3) = "%i[" │ └── closing_loc: (24,0)-(24,1) = "]" ├── @ ArrayNode (location: (26,0)-(29,1)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 2) │ │ ├── @ SymbolNode (location: (27,0)-(27,5)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (27,0)-(27,5) = "line2" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "line2" │ │ └── @ SymbolNode (location: (28,0)-(28,5)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (28,0)-(28,5) = "line3" │ │ ├── closing_loc: ∅ @@ -70,18 +72,18 @@ │ ├── opening_loc: (26,0)-(26,3) = "%i[" │ └── closing_loc: (29,0)-(29,1) = "]" ├── @ RegularExpressionNode (location: (31,0)-(34,1)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (31,0)-(31,3) = "%r[" │ ├── content_loc: (31,3)-(34,0) = "\n\n\n" │ ├── closing_loc: (34,0)-(34,1) = "]" │ └── unescaped: "\n\n\n" ├── @ ArrayNode (location: (36,0)-(39,1)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 0) │ ├── opening_loc: (36,0)-(36,3) = "%w[" │ └── closing_loc: (39,0)-(39,1) = "]" ├── @ ArrayNode (location: (41,0)-(44,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 2) │ │ ├── @ StringNode (location: (42,0)-(42,5)) │ │ │ ├── flags: ∅ @@ -98,16 +100,16 @@ │ ├── opening_loc: (41,0)-(41,3) = "%w[" │ └── closing_loc: (44,0)-(44,1) = "]" ├── @ ArrayNode (location: (46,0)-(49,1)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 2) │ │ ├── @ SymbolNode (location: (47,0)-(47,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (47,0)-(47,1) = ":" │ │ │ ├── value_loc: (47,1)-(47,6) = "line2" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "line2" │ │ └── @ SymbolNode (location: (48,0)-(48,6)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (48,0)-(48,1) = ":" │ │ ├── value_loc: (48,1)-(48,6) = "line3" │ │ ├── closing_loc: ∅ @@ -115,23 +117,29 @@ │ ├── opening_loc: (46,0)-(46,1) = "[" │ └── closing_loc: (49,0)-(49,1) = "]" ├── @ ClassNode (location: (51,0)-(56,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (51,0)-(51,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (51,6)-(51,7)) + │ │ ├── flags: ∅ │ │ └── name: :X │ ├── inheritance_operator_loc: ∅ │ ├── superclass: ∅ │ ├── body: │ │ @ StatementsNode (location: (52,2)-(55,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ DefNode (location: (52,2)-(55,5)) + │ │ ├── flags: newline │ │ ├── name: :y │ │ ├── name_loc: (52,11)-(52,12) = "y" │ │ ├── receiver: │ │ │ @ SelfNode (location: (52,6)-(52,10)) + │ │ │ └── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (52,13)-(53,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 2) │ │ │ │ ├── @ RequiredParameterNode (location: (52,13)-(52,14)) │ │ │ │ │ ├── flags: ∅ @@ -147,11 +155,13 @@ │ │ │ └── block: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (54,4)-(54,9)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (54,4)-(54,9)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ LocalVariableReadNode (location: (54,4)-(54,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :a │ │ │ │ └── depth: 0 │ │ │ ├── call_operator_loc: ∅ @@ -163,6 +173,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (54,8)-(54,9)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :b │ │ │ │ └── depth: 0 │ │ │ ├── closing_loc: ∅ @@ -177,33 +188,40 @@ │ ├── end_keyword_loc: (56,0)-(56,3) = "end" │ └── name: :X ├── @ ClassNode (location: (59,0)-(63,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (59,0)-(59,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (59,6)-(59,7)) + │ │ ├── flags: ∅ │ │ └── name: :X │ ├── inheritance_operator_loc: ∅ │ ├── superclass: ∅ │ ├── body: │ │ @ StatementsNode (location: (60,2)-(62,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ ClassNode (location: (60,2)-(62,5)) + │ │ ├── flags: newline │ │ ├── locals: [] │ │ ├── class_keyword_loc: (60,2)-(60,7) = "class" │ │ ├── constant_path: │ │ │ @ ConstantReadNode (location: (60,8)-(60,9)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Y │ │ ├── inheritance_operator_loc: ∅ │ │ ├── superclass: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (61,4)-(61,10)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ ConstantWriteNode (location: (61,4)-(61,10)) + │ │ │ ├── flags: newline │ │ │ ├── name: :Z │ │ │ ├── name_loc: (61,4)-(61,5) = "Z" │ │ │ ├── value: │ │ │ │ @ IntegerNode (location: (61,8)-(61,10)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 42 │ │ │ └── operator_loc: (61,6)-(61,7) = "=" │ │ ├── end_keyword_loc: (62,2)-(62,5) = "end" @@ -211,22 +229,27 @@ │ ├── end_keyword_loc: (63,0)-(63,3) = "end" │ └── name: :X ├── @ ClassNode (location: (66,0)-(71,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (66,0)-(66,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (66,6)-(66,7)) + │ │ ├── flags: ∅ │ │ └── name: :X │ ├── inheritance_operator_loc: ∅ │ ├── superclass: ∅ │ ├── body: │ │ @ StatementsNode (location: (67,2)-(70,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ DefNode (location: (67,2)-(70,5)) + │ │ ├── flags: newline │ │ ├── name: :y │ │ ├── name_loc: (67,6)-(67,7) = "y" │ │ ├── receiver: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (67,8)-(68,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 2) │ │ │ │ ├── @ RequiredParameterNode (location: (67,8)-(67,9)) │ │ │ │ │ ├── flags: ∅ @@ -242,11 +265,13 @@ │ │ │ └── block: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (69,4)-(69,9)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (69,4)-(69,9)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ LocalVariableReadNode (location: (69,4)-(69,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :a │ │ │ │ └── depth: 0 │ │ │ ├── call_operator_loc: ∅ @@ -258,6 +283,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (69,8)-(69,9)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :b │ │ │ │ └── depth: 0 │ │ │ ├── closing_loc: ∅ @@ -272,29 +298,33 @@ │ ├── end_keyword_loc: (71,0)-(71,3) = "end" │ └── name: :X ├── @ ModuleNode (location: (74,0)-(79,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── module_keyword_loc: (74,0)-(74,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (74,7)-(74,8)) + │ │ ├── flags: ∅ │ │ └── name: :X │ ├── body: │ │ @ StatementsNode (location: (75,2)-(78,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ ConstantWriteNode (location: (75,2)-(78,3)) + │ │ ├── flags: newline │ │ ├── name: :X │ │ ├── name_loc: (75,2)-(75,3) = "X" │ │ ├── value: │ │ │ @ ArrayNode (location: (75,6)-(78,3)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 2) │ │ │ │ ├── @ SymbolNode (location: (76,4)-(76,10)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: (76,4)-(76,5) = ":" │ │ │ │ │ ├── value_loc: (76,5)-(76,10) = "line3" │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── unescaped: "line3" │ │ │ │ └── @ SymbolNode (location: (77,4)-(77,10)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (77,4)-(77,5) = ":" │ │ │ │ ├── value_loc: (77,5)-(77,10) = "line4" │ │ │ │ ├── closing_loc: ∅ @@ -305,29 +335,36 @@ │ ├── end_keyword_loc: (79,0)-(79,3) = "end" │ └── name: :X ├── @ ModuleNode (location: (82,0)-(86,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── module_keyword_loc: (82,0)-(82,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (82,7)-(82,8)) + │ │ ├── flags: ∅ │ │ └── name: :X │ ├── body: │ │ @ StatementsNode (location: (83,2)-(85,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ ModuleNode (location: (83,2)-(85,5)) + │ │ ├── flags: newline │ │ ├── locals: [] │ │ ├── module_keyword_loc: (83,2)-(83,8) = "module" │ │ ├── constant_path: │ │ │ @ ConstantReadNode (location: (83,9)-(83,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Y │ │ ├── body: │ │ │ @ StatementsNode (location: (84,4)-(84,10)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ ConstantWriteNode (location: (84,4)-(84,10)) + │ │ │ ├── flags: newline │ │ │ ├── name: :Z │ │ │ ├── name_loc: (84,4)-(84,5) = "Z" │ │ │ ├── value: │ │ │ │ @ IntegerNode (location: (84,8)-(84,10)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 42 │ │ │ └── operator_loc: (84,6)-(84,7) = "=" │ │ ├── end_keyword_loc: (85,2)-(85,5) = "end" @@ -335,7 +372,7 @@ │ ├── end_keyword_loc: (86,0)-(86,3) = "end" │ └── name: :X └── @ CallNode (location: (89,0)-(92,1)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :x @@ -346,13 +383,13 @@ │ ├── flags: ∅ │ └── arguments: (length: 2) │ ├── @ SymbolNode (location: (90,0)-(90,6)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (90,0)-(90,1) = ":" │ │ ├── value_loc: (90,1)-(90,6) = "line2" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "line2" │ └── @ SymbolNode (location: (91,0)-(91,6)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (91,0)-(91,1) = ":" │ ├── value_loc: (91,1)-(91,6) = "line3" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/__ENCODING__.txt b/test/prism/snapshots/seattlerb/__ENCODING__.txt index 1b223bd8fe7..f04dfb6cb86 100644 --- a/test/prism/snapshots/seattlerb/__ENCODING__.txt +++ b/test/prism/snapshots/seattlerb/__ENCODING__.txt @@ -1,6 +1,9 @@ @ ProgramNode (location: (1,0)-(1,12)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,12)) + ├── flags: ∅ └── body: (length: 1) └── @ SourceEncodingNode (location: (1,0)-(1,12)) + └── flags: newline, static_literal diff --git a/test/prism/snapshots/seattlerb/alias_gvar_backref.txt b/test/prism/snapshots/seattlerb/alias_gvar_backref.txt index a2586423d78..47b0e80b644 100644 --- a/test/prism/snapshots/seattlerb/alias_gvar_backref.txt +++ b/test/prism/snapshots/seattlerb/alias_gvar_backref.txt @@ -1,13 +1,18 @@ @ ProgramNode (location: (1,0)-(1,15)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,15)) + ├── flags: ∅ └── body: (length: 1) └── @ AliasGlobalVariableNode (location: (1,0)-(1,15)) + ├── flags: newline ├── new_name: │ @ GlobalVariableReadNode (location: (1,6)-(1,12)) + │ ├── flags: ∅ │ └── name: :$MATCH ├── old_name: │ @ BackReferenceReadNode (location: (1,13)-(1,15)) + │ ├── flags: ∅ │ └── name: :$& └── keyword_loc: (1,0)-(1,5) = "alias" diff --git a/test/prism/snapshots/seattlerb/alias_resword.txt b/test/prism/snapshots/seattlerb/alias_resword.txt index 99ed696c687..44a4727283e 100644 --- a/test/prism/snapshots/seattlerb/alias_resword.txt +++ b/test/prism/snapshots/seattlerb/alias_resword.txt @@ -1,19 +1,22 @@ @ ProgramNode (location: (1,0)-(1,12)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,12)) + ├── flags: ∅ └── body: (length: 1) └── @ AliasMethodNode (location: (1,0)-(1,12)) + ├── flags: newline ├── new_name: │ @ SymbolNode (location: (1,6)-(1,8)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: ∅ │ ├── value_loc: (1,6)-(1,8) = "in" │ ├── closing_loc: ∅ │ └── unescaped: "in" ├── old_name: │ @ SymbolNode (location: (1,9)-(1,12)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: ∅ │ ├── value_loc: (1,9)-(1,12) = "out" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/and_multi.txt b/test/prism/snapshots/seattlerb/and_multi.txt index b60b131fd2d..f98ad67e102 100644 --- a/test/prism/snapshots/seattlerb/and_multi.txt +++ b/test/prism/snapshots/seattlerb/and_multi.txt @@ -1,18 +1,24 @@ @ ProgramNode (location: (1,0)-(3,4)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,4)) + ├── flags: ∅ └── body: (length: 1) └── @ AndNode (location: (1,0)-(3,4)) + ├── flags: newline ├── left: │ @ AndNode (location: (1,0)-(2,9)) + │ ├── flags: ∅ │ ├── left: │ │ @ TrueNode (location: (1,0)-(1,4)) + │ │ └── flags: static_literal │ ├── right: │ │ @ CallNode (location: (2,0)-(2,9)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ FalseNode (location: (2,4)-(2,9)) + │ │ │ └── flags: static_literal │ │ ├── call_operator_loc: ∅ │ │ ├── name: :! │ │ ├── message_loc: (2,0)-(2,3) = "not" @@ -23,4 +29,5 @@ │ └── operator_loc: (1,5)-(1,8) = "and" ├── right: │ @ TrueNode (location: (3,0)-(3,4)) + │ └── flags: static_literal └── operator_loc: (2,10)-(2,13) = "and" diff --git a/test/prism/snapshots/seattlerb/aref_args_assocs.txt b/test/prism/snapshots/seattlerb/aref_args_assocs.txt index b729186dc5e..cbd07920379 100644 --- a/test/prism/snapshots/seattlerb/aref_args_assocs.txt +++ b/test/prism/snapshots/seattlerb/aref_args_assocs.txt @@ -1,22 +1,25 @@ @ ProgramNode (location: (1,0)-(1,8)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,8)) + ├── flags: ∅ └── body: (length: 1) └── @ ArrayNode (location: (1,0)-(1,8)) - ├── flags: ∅ + ├── flags: newline ├── elements: (length: 1) │ └── @ KeywordHashNode (location: (1,1)-(1,7)) │ ├── flags: ∅ │ └── elements: (length: 1) │ └── @ AssocNode (location: (1,1)-(1,7)) + │ ├── flags: static_literal │ ├── key: │ │ @ IntegerNode (location: (1,1)-(1,2)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── value: │ │ @ IntegerNode (location: (1,6)-(1,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── operator_loc: (1,3)-(1,5) = "=>" ├── opening_loc: (1,0)-(1,1) = "[" diff --git a/test/prism/snapshots/seattlerb/aref_args_lit_assocs.txt b/test/prism/snapshots/seattlerb/aref_args_lit_assocs.txt index 0e9454d780b..7302f728e3b 100644 --- a/test/prism/snapshots/seattlerb/aref_args_lit_assocs.txt +++ b/test/prism/snapshots/seattlerb/aref_args_lit_assocs.txt @@ -1,25 +1,28 @@ @ ProgramNode (location: (1,0)-(1,11)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,11)) + ├── flags: ∅ └── body: (length: 1) └── @ ArrayNode (location: (1,0)-(1,11)) - ├── flags: ∅ + ├── flags: newline ├── elements: (length: 2) │ ├── @ IntegerNode (location: (1,1)-(1,2)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── @ KeywordHashNode (location: (1,4)-(1,10)) │ ├── flags: ∅ │ └── elements: (length: 1) │ └── @ AssocNode (location: (1,4)-(1,10)) + │ ├── flags: static_literal │ ├── key: │ │ @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── value: │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ └── operator_loc: (1,6)-(1,8) = "=>" ├── opening_loc: (1,0)-(1,1) = "[" diff --git a/test/prism/snapshots/seattlerb/args_kw_block.txt b/test/prism/snapshots/seattlerb/args_kw_block.txt index 1ad933c74e3..88081dfa145 100644 --- a/test/prism/snapshots/seattlerb/args_kw_block.txt +++ b/test/prism/snapshots/seattlerb/args_kw_block.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,20)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,20)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,20)) + ├── flags: newline ├── name: :f ├── name_loc: (1,4)-(1,5) = "f" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,14)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -20,7 +24,7 @@ │ │ ├── name_loc: (1,6)-(1,8) = "a:" │ │ └── value: │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── keyword_rest: ∅ │ └── block: diff --git a/test/prism/snapshots/seattlerb/array_line_breaks.txt b/test/prism/snapshots/seattlerb/array_line_breaks.txt index 880fedf9330..a2d21e90ad6 100644 --- a/test/prism/snapshots/seattlerb/array_line_breaks.txt +++ b/test/prism/snapshots/seattlerb/array_line_breaks.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(4,1)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,1)) + ├── flags: ∅ └── body: (length: 2) ├── @ ArrayNode (location: (1,0)-(3,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 2) │ │ ├── @ StringNode (location: (2,0)-(2,3)) │ │ │ ├── flags: ∅ @@ -21,5 +23,5 @@ │ ├── opening_loc: (1,0)-(1,1) = "[" │ └── closing_loc: (3,3)-(3,4) = "]" └── @ IntegerNode (location: (4,0)-(4,1)) - ├── flags: decimal + ├── flags: newline, static_literal, decimal └── value: 1 diff --git a/test/prism/snapshots/seattlerb/array_lits_trailing_calls.txt b/test/prism/snapshots/seattlerb/array_lits_trailing_calls.txt index d46a181fc76..2de5a054a66 100644 --- a/test/prism/snapshots/seattlerb/array_lits_trailing_calls.txt +++ b/test/prism/snapshots/seattlerb/array_lits_trailing_calls.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(3,4)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,4)) + ├── flags: ∅ └── body: (length: 2) ├── @ CallNode (location: (1,0)-(1,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ArrayNode (location: (1,0)-(1,4)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── elements: (length: 0) │ │ ├── opening_loc: (1,0)-(1,3) = "%w[" │ │ └── closing_loc: (1,3)-(1,4) = "]" @@ -19,10 +21,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ CallNode (location: (3,0)-(3,4)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ ArrayNode (location: (3,0)-(3,2)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 0) │ ├── opening_loc: (3,0)-(3,1) = "[" │ └── closing_loc: (3,1)-(3,2) = "]" diff --git a/test/prism/snapshots/seattlerb/assoc__bare.txt b/test/prism/snapshots/seattlerb/assoc__bare.txt index 28e4f713c51..530360ef66f 100644 --- a/test/prism/snapshots/seattlerb/assoc__bare.txt +++ b/test/prism/snapshots/seattlerb/assoc__bare.txt @@ -1,21 +1,26 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ HashNode (location: (1,0)-(1,6)) + ├── flags: newline ├── opening_loc: (1,0)-(1,1) = "{" ├── elements: (length: 1) │ └── @ AssocNode (location: (1,2)-(1,4)) + │ ├── flags: ∅ │ ├── key: │ │ @ SymbolNode (location: (1,2)-(1,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (1,2)-(1,3) = "y" │ │ ├── closing_loc: (1,3)-(1,4) = ":" │ │ └── unescaped: "y" │ ├── value: │ │ @ ImplicitNode (location: (1,2)-(1,4)) + │ │ ├── flags: ∅ │ │ └── value: │ │ @ CallNode (location: (1,2)-(1,4)) │ │ ├── flags: ignore_visibility diff --git a/test/prism/snapshots/seattlerb/assoc_label.txt b/test/prism/snapshots/seattlerb/assoc_label.txt index 70490c0da4c..91b94bbc1cc 100644 --- a/test/prism/snapshots/seattlerb/assoc_label.txt +++ b/test/prism/snapshots/seattlerb/assoc_label.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -18,16 +20,17 @@ │ ├── flags: symbol_keys │ └── elements: (length: 1) │ └── @ AssocNode (location: (1,2)-(1,5)) + │ ├── flags: static_literal │ ├── key: │ │ @ SymbolNode (location: (1,2)-(1,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (1,2)-(1,3) = "b" │ │ ├── closing_loc: (1,3)-(1,4) = ":" │ │ └── unescaped: "b" │ ├── value: │ │ @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: ∅ ├── closing_loc: (1,5)-(1,6) = ")" diff --git a/test/prism/snapshots/seattlerb/attr_asgn_colon_id.txt b/test/prism/snapshots/seattlerb/attr_asgn_colon_id.txt index 589433eda89..67802fc8a4e 100644 --- a/test/prism/snapshots/seattlerb/attr_asgn_colon_id.txt +++ b/test/prism/snapshots/seattlerb/attr_asgn_colon_id.txt @@ -1,12 +1,15 @@ @ ProgramNode (location: (1,0)-(1,8)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,8)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,8)) - ├── flags: attribute_write + ├── flags: newline, attribute_write ├── receiver: │ @ ConstantReadNode (location: (1,0)-(1,1)) + │ ├── flags: ∅ │ └── name: :A ├── call_operator_loc: (1,1)-(1,3) = "::" ├── name: :b= @@ -17,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,7)-(1,8)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/attrasgn_array_arg.txt b/test/prism/snapshots/seattlerb/attrasgn_array_arg.txt index 9b04ae9656e..43853b4ef91 100644 --- a/test/prism/snapshots/seattlerb/attrasgn_array_arg.txt +++ b/test/prism/snapshots/seattlerb/attrasgn_array_arg.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,13)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,13)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: attribute_write + ├── flags: newline, attribute_write ├── receiver: │ @ CallNode (location: (1,0)-(1,1)) │ ├── flags: variable_call, ignore_visibility @@ -25,18 +27,18 @@ │ ├── flags: ∅ │ └── arguments: (length: 2) │ ├── @ ArrayNode (location: (1,2)-(1,8)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── elements: (length: 2) │ │ │ ├── @ IntegerNode (location: (1,3)-(1,4)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── opening_loc: (1,2)-(1,3) = "[" │ │ └── closing_loc: (1,7)-(1,8) = "]" │ └── @ IntegerNode (location: (1,12)-(1,13)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 3 ├── closing_loc: (1,8)-(1,9) = "]" └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/attrasgn_array_lhs.txt b/test/prism/snapshots/seattlerb/attrasgn_array_lhs.txt index 39544e98da2..5729407edc1 100644 --- a/test/prism/snapshots/seattlerb/attrasgn_array_lhs.txt +++ b/test/prism/snapshots/seattlerb/attrasgn_array_lhs.txt @@ -1,25 +1,27 @@ @ ProgramNode (location: (1,0)-(1,42)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,42)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,42)) - ├── flags: attribute_write + ├── flags: newline, attribute_write ├── receiver: │ @ ArrayNode (location: (1,0)-(1,12)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 4) │ │ ├── @ IntegerNode (location: (1,1)-(1,2)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── @ IntegerNode (location: (1,4)-(1,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── @ IntegerNode (location: (1,7)-(1,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ └── @ IntegerNode (location: (1,10)-(1,11)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 4 │ ├── opening_loc: (1,0)-(1,1) = "[" │ └── closing_loc: (1,11)-(1,12) = "]" diff --git a/test/prism/snapshots/seattlerb/attrasgn_primary_dot_constant.txt b/test/prism/snapshots/seattlerb/attrasgn_primary_dot_constant.txt index d4c4fe10705..2c06df2609b 100644 --- a/test/prism/snapshots/seattlerb/attrasgn_primary_dot_constant.txt +++ b/test/prism/snapshots/seattlerb/attrasgn_primary_dot_constant.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,7)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: attribute_write + ├── flags: newline, attribute_write ├── receiver: │ @ CallNode (location: (1,0)-(1,1)) │ ├── flags: variable_call, ignore_visibility @@ -25,7 +27,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/backticks_interpolation_line.txt b/test/prism/snapshots/seattlerb/backticks_interpolation_line.txt index 67c8be034eb..8c6a163c48a 100644 --- a/test/prism/snapshots/seattlerb/backticks_interpolation_line.txt +++ b/test/prism/snapshots/seattlerb/backticks_interpolation_line.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,8)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,8)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,8)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :x @@ -15,12 +17,15 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ InterpolatedXStringNode (location: (1,2)-(1,8)) + │ ├── flags: ∅ │ ├── opening_loc: (1,2)-(1,3) = "`" │ ├── parts: (length: 1) │ │ └── @ EmbeddedStatementsNode (location: (1,3)-(1,7)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (1,3)-(1,5) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (1,5)-(1,6)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (1,5)-(1,6)) │ │ │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/seattlerb/bang_eq.txt b/test/prism/snapshots/seattlerb/bang_eq.txt index ec3dd888b27..6bbd4a6ea22 100644 --- a/test/prism/snapshots/seattlerb/bang_eq.txt +++ b/test/prism/snapshots/seattlerb/bang_eq.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :!= @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bdot2.txt b/test/prism/snapshots/seattlerb/bdot2.txt index d4fb86fbe66..b1c05c0fc46 100644 --- a/test/prism/snapshots/seattlerb/bdot2.txt +++ b/test/prism/snapshots/seattlerb/bdot2.txt @@ -1,18 +1,20 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 3) ├── @ RangeNode (location: (1,0)-(1,4)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── left: ∅ │ ├── right: │ │ @ IntegerNode (location: (1,2)-(1,4)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 10 │ └── operator_loc: (1,0)-(1,2) = ".." ├── @ RangeNode (location: (2,2)-(2,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── left: ∅ │ ├── right: │ │ @ CallNode (location: (2,4)-(2,5)) @@ -27,7 +29,7 @@ │ │ └── block: ∅ │ └── operator_loc: (2,2)-(2,4) = ".." └── @ CallNode (location: (3,2)-(3,3)) - ├── flags: variable_call, ignore_visibility + ├── flags: newline, variable_call, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :c diff --git a/test/prism/snapshots/seattlerb/bdot3.txt b/test/prism/snapshots/seattlerb/bdot3.txt index 0c960f04587..0b35268f19a 100644 --- a/test/prism/snapshots/seattlerb/bdot3.txt +++ b/test/prism/snapshots/seattlerb/bdot3.txt @@ -1,18 +1,20 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 3) ├── @ RangeNode (location: (1,0)-(1,5)) - │ ├── flags: exclude_end + │ ├── flags: newline, static_literal, exclude_end │ ├── left: ∅ │ ├── right: │ │ @ IntegerNode (location: (1,3)-(1,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 10 │ └── operator_loc: (1,0)-(1,3) = "..." ├── @ RangeNode (location: (2,2)-(2,6)) - │ ├── flags: exclude_end + │ ├── flags: newline, exclude_end │ ├── left: ∅ │ ├── right: │ │ @ CallNode (location: (2,5)-(2,6)) @@ -27,7 +29,7 @@ │ │ └── block: ∅ │ └── operator_loc: (2,2)-(2,5) = "..." └── @ CallNode (location: (3,2)-(3,3)) - ├── flags: variable_call, ignore_visibility + ├── flags: newline, variable_call, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :c diff --git a/test/prism/snapshots/seattlerb/begin_ensure_no_bodies.txt b/test/prism/snapshots/seattlerb/begin_ensure_no_bodies.txt index e1698d0baef..6ebcc2e0527 100644 --- a/test/prism/snapshots/seattlerb/begin_ensure_no_bodies.txt +++ b/test/prism/snapshots/seattlerb/begin_ensure_no_bodies.txt @@ -1,15 +1,19 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ BeginNode (location: (1,0)-(3,3)) + ├── flags: newline ├── begin_keyword_loc: (1,0)-(1,5) = "begin" ├── statements: ∅ ├── rescue_clause: ∅ ├── else_clause: ∅ ├── ensure_clause: │ @ EnsureNode (location: (2,0)-(3,3)) + │ ├── flags: ∅ │ ├── ensure_keyword_loc: (2,0)-(2,6) = "ensure" │ ├── statements: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_bodies.txt b/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_bodies.txt index 6603e5c8945..61a62d311eb 100644 --- a/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_bodies.txt +++ b/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_bodies.txt @@ -1,47 +1,57 @@ @ ProgramNode (location: (1,0)-(9,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(9,3)) + ├── flags: ∅ └── body: (length: 1) └── @ BeginNode (location: (1,0)-(9,3)) + ├── flags: newline ├── begin_keyword_loc: (1,0)-(1,5) = "begin" ├── statements: │ @ StatementsNode (location: (2,2)-(2,3)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ IntegerNode (location: (2,2)-(2,3)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 1 ├── rescue_clause: │ @ RescueNode (location: (3,0)-(4,3)) + │ ├── flags: ∅ │ ├── keyword_loc: (3,0)-(3,6) = "rescue" │ ├── exceptions: (length: 0) │ ├── operator_loc: ∅ │ ├── reference: ∅ │ ├── statements: │ │ @ StatementsNode (location: (4,2)-(4,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (4,2)-(4,3)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 2 │ └── consequent: ∅ ├── else_clause: │ @ ElseNode (location: (5,0)-(7,6)) + │ ├── flags: ∅ │ ├── else_keyword_loc: (5,0)-(5,4) = "else" │ ├── statements: │ │ @ StatementsNode (location: (6,2)-(6,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (6,2)-(6,3)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 3 │ └── end_keyword_loc: (7,0)-(7,6) = "ensure" ├── ensure_clause: │ @ EnsureNode (location: (7,0)-(9,3)) + │ ├── flags: ∅ │ ├── ensure_keyword_loc: (7,0)-(7,6) = "ensure" │ ├── statements: │ │ @ StatementsNode (location: (8,2)-(8,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (8,2)-(8,3)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 4 │ └── end_keyword_loc: (9,0)-(9,3) = "end" └── end_keyword_loc: (9,0)-(9,3) = "end" diff --git a/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_no_bodies.txt b/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_no_bodies.txt index 02e1f097ac4..3353a414847 100644 --- a/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_no_bodies.txt +++ b/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_no_bodies.txt @@ -1,13 +1,17 @@ @ ProgramNode (location: (1,0)-(9,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(9,3)) + ├── flags: ∅ └── body: (length: 1) └── @ BeginNode (location: (1,0)-(9,3)) + ├── flags: newline ├── begin_keyword_loc: (1,0)-(1,5) = "begin" ├── statements: ∅ ├── rescue_clause: │ @ RescueNode (location: (3,0)-(3,6)) + │ ├── flags: ∅ │ ├── keyword_loc: (3,0)-(3,6) = "rescue" │ ├── exceptions: (length: 0) │ ├── operator_loc: ∅ @@ -16,11 +20,13 @@ │ └── consequent: ∅ ├── else_clause: │ @ ElseNode (location: (5,0)-(7,6)) + │ ├── flags: ∅ │ ├── else_keyword_loc: (5,0)-(5,4) = "else" │ ├── statements: ∅ │ └── end_keyword_loc: (7,0)-(7,6) = "ensure" ├── ensure_clause: │ @ EnsureNode (location: (7,0)-(9,3)) + │ ├── flags: ∅ │ ├── ensure_keyword_loc: (7,0)-(7,6) = "ensure" │ ├── statements: ∅ │ └── end_keyword_loc: (9,0)-(9,3) = "end" diff --git a/test/prism/snapshots/seattlerb/begin_rescue_ensure_no_bodies.txt b/test/prism/snapshots/seattlerb/begin_rescue_ensure_no_bodies.txt index b36fe5c1fef..e84fc706508 100644 --- a/test/prism/snapshots/seattlerb/begin_rescue_ensure_no_bodies.txt +++ b/test/prism/snapshots/seattlerb/begin_rescue_ensure_no_bodies.txt @@ -1,13 +1,17 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 1) └── @ BeginNode (location: (1,0)-(4,3)) + ├── flags: newline ├── begin_keyword_loc: (1,0)-(1,5) = "begin" ├── statements: ∅ ├── rescue_clause: │ @ RescueNode (location: (2,0)-(2,6)) + │ ├── flags: ∅ │ ├── keyword_loc: (2,0)-(2,6) = "rescue" │ ├── exceptions: (length: 0) │ ├── operator_loc: ∅ @@ -17,6 +21,7 @@ ├── else_clause: ∅ ├── ensure_clause: │ @ EnsureNode (location: (3,0)-(4,3)) + │ ├── flags: ∅ │ ├── ensure_keyword_loc: (3,0)-(3,6) = "ensure" │ ├── statements: ∅ │ └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/block_arg__bare.txt b/test/prism/snapshots/seattlerb/block_arg__bare.txt index 165c2980be3..ceafdcebbc5 100644 --- a/test/prism/snapshots/seattlerb/block_arg__bare.txt +++ b/test/prism/snapshots/seattlerb/block_arg__bare.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,13)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,13)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,13)) + ├── flags: newline ├── name: :x ├── name_loc: (1,4)-(1,5) = "x" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,7)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ diff --git a/test/prism/snapshots/seattlerb/block_arg_kwsplat.txt b/test/prism/snapshots/seattlerb/block_arg_kwsplat.txt index 392de8559b9..20756c8378c 100644 --- a/test/prism/snapshots/seattlerb/block_arg_kwsplat.txt +++ b/test/prism/snapshots/seattlerb/block_arg_kwsplat.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,11)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,11)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,11)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,11)) + ├── flags: ∅ ├── locals: [:b] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,9)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,8)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ diff --git a/test/prism/snapshots/seattlerb/block_arg_opt_arg_block.txt b/test/prism/snapshots/seattlerb/block_arg_opt_arg_block.txt index ee9644d59d8..dd89df907da 100644 --- a/test/prism/snapshots/seattlerb/block_arg_opt_arg_block.txt +++ b/test/prism/snapshots/seattlerb/block_arg_opt_arg_block.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,21)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,21)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,21)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,21)) + ├── flags: ∅ ├── locals: [:b, :c, :d, :e] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,19)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,18)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ ├── flags: ∅ @@ -31,7 +36,7 @@ │ │ │ ├── operator_loc: (1,9)-(1,10) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (1,10)-(1,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rest: ∅ │ │ ├── posts: (length: 1) diff --git a/test/prism/snapshots/seattlerb/block_arg_opt_splat.txt b/test/prism/snapshots/seattlerb/block_arg_opt_splat.txt index 799bd21057a..cefc1a85153 100644 --- a/test/prism/snapshots/seattlerb/block_arg_opt_splat.txt +++ b/test/prism/snapshots/seattlerb/block_arg_opt_splat.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,20)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,20)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,20)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,20)) + ├── flags: ∅ ├── locals: [:b, :c, :d] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,18)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,17)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ ├── flags: ∅ @@ -31,7 +36,7 @@ │ │ │ ├── operator_loc: (1,10)-(1,11) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (1,12)-(1,13)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rest: │ │ │ @ RestParameterNode (location: (1,15)-(1,17)) diff --git a/test/prism/snapshots/seattlerb/block_arg_opt_splat_arg_block_omfg.txt b/test/prism/snapshots/seattlerb/block_arg_opt_splat_arg_block_omfg.txt index b5df136a622..bf66e376fd7 100644 --- a/test/prism/snapshots/seattlerb/block_arg_opt_splat_arg_block_omfg.txt +++ b/test/prism/snapshots/seattlerb/block_arg_opt_splat_arg_block_omfg.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,25)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,25)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,25)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,25)) + ├── flags: ∅ ├── locals: [:b, :c, :d, :e, :f] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,23)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,22)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ ├── flags: ∅ @@ -31,7 +36,7 @@ │ │ │ ├── operator_loc: (1,9)-(1,10) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (1,10)-(1,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rest: │ │ │ @ RestParameterNode (location: (1,13)-(1,15)) diff --git a/test/prism/snapshots/seattlerb/block_arg_optional.txt b/test/prism/snapshots/seattlerb/block_arg_optional.txt index 8a850e9a21a..5fecfc31ab3 100644 --- a/test/prism/snapshots/seattlerb/block_arg_optional.txt +++ b/test/prism/snapshots/seattlerb/block_arg_optional.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,13)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,13)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,13)) + ├── flags: ∅ ├── locals: [:b] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,11)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,10)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (1,5)-(1,10)) @@ -28,7 +33,7 @@ │ │ │ ├── operator_loc: (1,7)-(1,8) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) diff --git a/test/prism/snapshots/seattlerb/block_arg_scope.txt b/test/prism/snapshots/seattlerb/block_arg_scope.txt index b99cc5e45ce..e90d6445b2d 100644 --- a/test/prism/snapshots/seattlerb/block_arg_scope.txt +++ b/test/prism/snapshots/seattlerb/block_arg_scope.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,12)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,12)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,12)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,12)) + ├── flags: ∅ ├── locals: [:b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,10)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,6)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/block_arg_scope2.txt b/test/prism/snapshots/seattlerb/block_arg_scope2.txt index 98b3a7da3aa..c9f7242d8a7 100644 --- a/test/prism/snapshots/seattlerb/block_arg_scope2.txt +++ b/test/prism/snapshots/seattlerb/block_arg_scope2.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,14)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,14)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,14)) + ├── flags: ∅ ├── locals: [:b, :c, :d] ├── parameters: │ @ BlockParametersNode (location: (1,3)-(1,12)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,4)-(1,5)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,4)-(1,5)) │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/block_arg_splat_arg.txt b/test/prism/snapshots/seattlerb/block_arg_splat_arg.txt index fd5813c9836..6ae1b1dade7 100644 --- a/test/prism/snapshots/seattlerb/block_arg_splat_arg.txt +++ b/test/prism/snapshots/seattlerb/block_arg_splat_arg.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,16)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,16)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,16)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,16)) + ├── flags: ∅ ├── locals: [:b, :c, :d] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,14)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,13)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/block_args_kwargs.txt b/test/prism/snapshots/seattlerb/block_args_kwargs.txt index 0975ce33679..45876c6dc12 100644 --- a/test/prism/snapshots/seattlerb/block_args_kwargs.txt +++ b/test/prism/snapshots/seattlerb/block_args_kwargs.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,23)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,23)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,23)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,23)) + ├── flags: ∅ ├── locals: [:kwargs] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,14)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,13)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -36,8 +41,10 @@ │ └── closing_loc: (1,13)-(1,14) = "|" ├── body: │ @ StatementsNode (location: (1,15)-(1,21)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ LocalVariableReadNode (location: (1,15)-(1,21)) + │ ├── flags: newline │ ├── name: :kwargs │ └── depth: 0 ├── opening_loc: (1,2)-(1,3) = "{" diff --git a/test/prism/snapshots/seattlerb/block_args_no_kwargs.txt b/test/prism/snapshots/seattlerb/block_args_no_kwargs.txt index d47349defbd..298bc26ce0a 100644 --- a/test/prism/snapshots/seattlerb/block_args_no_kwargs.txt +++ b/test/prism/snapshots/seattlerb/block_args_no_kwargs.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,13)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,13)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,13)) + ├── flags: ∅ ├── locals: [] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,11)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,10)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -26,6 +31,7 @@ │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ NoKeywordsParameterNode (location: (1,5)-(1,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (1,5)-(1,7) = "**" │ │ │ └── keyword_loc: (1,7)-(1,10) = "nil" │ │ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/block_args_opt1.txt b/test/prism/snapshots/seattlerb/block_args_opt1.txt index 1f21c0a4773..d23bd5edce0 100644 --- a/test/prism/snapshots/seattlerb/block_args_opt1.txt +++ b/test/prism/snapshots/seattlerb/block_args_opt1.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,24)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,24)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,24)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,24)) + ├── flags: ∅ ├── locals: [:a, :b] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,15)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ ├── flags: ∅ @@ -31,7 +36,7 @@ │ │ │ ├── operator_loc: (1,10)-(1,11) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (1,12)-(1,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 42 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) @@ -43,14 +48,17 @@ │ └── closing_loc: (1,14)-(1,15) = "|" ├── body: │ @ StatementsNode (location: (1,16)-(1,22)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ ArrayNode (location: (1,16)-(1,22)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 2) │ │ ├── @ LocalVariableReadNode (location: (1,17)-(1,18)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ └── @ LocalVariableReadNode (location: (1,20)-(1,21)) + │ │ ├── flags: ∅ │ │ ├── name: :b │ │ └── depth: 0 │ ├── opening_loc: (1,16)-(1,17) = "[" diff --git a/test/prism/snapshots/seattlerb/block_args_opt2.txt b/test/prism/snapshots/seattlerb/block_args_opt2.txt index a8d736dde73..7170768b1cb 100644 --- a/test/prism/snapshots/seattlerb/block_args_opt2.txt +++ b/test/prism/snapshots/seattlerb/block_args_opt2.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,18)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,18)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,18)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,18)) + ├── flags: ∅ ├── locals: [:b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,16)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,6)-(1,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 2) │ │ │ ├── @ OptionalParameterNode (location: (1,6)-(1,9)) @@ -28,7 +33,7 @@ │ │ │ │ ├── operator_loc: (1,7)-(1,8) = "=" │ │ │ │ └── value: │ │ │ │ @ IntegerNode (location: (1,8)-(1,9)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── @ OptionalParameterNode (location: (1,11)-(1,14)) │ │ │ ├── flags: ∅ @@ -37,7 +42,7 @@ │ │ │ ├── operator_loc: (1,12)-(1,13) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (1,13)-(1,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) diff --git a/test/prism/snapshots/seattlerb/block_args_opt2_2.txt b/test/prism/snapshots/seattlerb/block_args_opt2_2.txt index 0403851ed7b..34d04dbe54b 100644 --- a/test/prism/snapshots/seattlerb/block_args_opt2_2.txt +++ b/test/prism/snapshots/seattlerb/block_args_opt2_2.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,35)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,35)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,35)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,35)) + ├── flags: ∅ ├── locals: [:a, :b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,23)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,22)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ ├── flags: ∅ @@ -31,7 +36,7 @@ │ │ │ │ ├── operator_loc: (1,10)-(1,11) = "=" │ │ │ │ └── value: │ │ │ │ @ IntegerNode (location: (1,12)-(1,14)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 42 │ │ │ └── @ OptionalParameterNode (location: (1,16)-(1,22)) │ │ │ ├── flags: ∅ @@ -40,7 +45,7 @@ │ │ │ ├── operator_loc: (1,18)-(1,19) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (1,20)-(1,22)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 24 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) @@ -52,17 +57,21 @@ │ └── closing_loc: (1,22)-(1,23) = "|" ├── body: │ @ StatementsNode (location: (1,24)-(1,33)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ ArrayNode (location: (1,24)-(1,33)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 3) │ │ ├── @ LocalVariableReadNode (location: (1,25)-(1,26)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ ├── @ LocalVariableReadNode (location: (1,28)-(1,29)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :b │ │ │ └── depth: 0 │ │ └── @ LocalVariableReadNode (location: (1,31)-(1,32)) + │ │ ├── flags: ∅ │ │ ├── name: :c │ │ └── depth: 0 │ ├── opening_loc: (1,24)-(1,25) = "[" diff --git a/test/prism/snapshots/seattlerb/block_args_opt3.txt b/test/prism/snapshots/seattlerb/block_args_opt3.txt index ff4495019c7..508d062ce2e 100644 --- a/test/prism/snapshots/seattlerb/block_args_opt3.txt +++ b/test/prism/snapshots/seattlerb/block_args_opt3.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,42)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,42)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,42)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,42)) + ├── flags: ∅ ├── locals: [:a, :b, :c, :d] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,27)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,26)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ ├── flags: ∅ @@ -31,7 +36,7 @@ │ │ │ │ ├── operator_loc: (1,10)-(1,11) = "=" │ │ │ │ └── value: │ │ │ │ @ IntegerNode (location: (1,12)-(1,14)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 42 │ │ │ └── @ OptionalParameterNode (location: (1,16)-(1,22)) │ │ │ ├── flags: ∅ @@ -40,7 +45,7 @@ │ │ │ ├── operator_loc: (1,18)-(1,19) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (1,20)-(1,22)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 24 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) @@ -57,20 +62,25 @@ │ └── closing_loc: (1,26)-(1,27) = "|" ├── body: │ @ StatementsNode (location: (1,28)-(1,40)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ ArrayNode (location: (1,28)-(1,40)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 4) │ │ ├── @ LocalVariableReadNode (location: (1,29)-(1,30)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ ├── @ LocalVariableReadNode (location: (1,32)-(1,33)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :b │ │ │ └── depth: 0 │ │ ├── @ LocalVariableReadNode (location: (1,35)-(1,36)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :c │ │ │ └── depth: 0 │ │ └── @ LocalVariableReadNode (location: (1,38)-(1,39)) + │ │ ├── flags: ∅ │ │ ├── name: :d │ │ └── depth: 0 │ ├── opening_loc: (1,28)-(1,29) = "[" diff --git a/test/prism/snapshots/seattlerb/block_call_defn_call_block_call.txt b/test/prism/snapshots/seattlerb/block_call_defn_call_block_call.txt index 2e634dc937a..4e6ad90afd1 100644 --- a/test/prism/snapshots/seattlerb/block_call_defn_call_block_call.txt +++ b/test/prism/snapshots/seattlerb/block_call_defn_call_block_call.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(4,11)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,11)) + ├── flags: ∅ └── body: (length: 2) ├── @ CallNode (location: (1,0)-(3,4)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a @@ -15,11 +17,13 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ DefNode (location: (1,2)-(3,4)) + │ │ ├── flags: ∅ │ │ ├── name: :b │ │ ├── name_loc: (1,6)-(1,7) = "b" │ │ ├── receiver: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (1,8)-(1,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (1,8)-(1,9)) │ │ │ │ ├── flags: ∅ @@ -32,9 +36,10 @@ │ │ │ └── block: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (2,1)-(2,2)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (2,1)-(2,2)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :d @@ -53,7 +58,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ CallNode (location: (4,1)-(4,11)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (4,1)-(4,2)) │ ├── flags: variable_call, ignore_visibility @@ -73,6 +78,7 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (4,5)-(4,11)) + ├── flags: ∅ ├── locals: [] ├── parameters: ∅ ├── body: ∅ diff --git a/test/prism/snapshots/seattlerb/block_call_dot_op2_brace_block.txt b/test/prism/snapshots/seattlerb/block_call_dot_op2_brace_block.txt index e46104b868c..5f05b1f6ff4 100644 --- a/test/prism/snapshots/seattlerb/block_call_dot_op2_brace_block.txt +++ b/test/prism/snapshots/seattlerb/block_call_dot_op2_brace_block.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,31)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,31)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,31)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(1,16)) │ ├── flags: ∅ @@ -40,13 +42,15 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,8)-(1,16)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,11)-(1,12)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,11)-(1,12)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :d @@ -65,11 +69,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,19)-(1,31)) + ├── flags: ∅ ├── locals: [:f] ├── parameters: │ @ BlockParametersNode (location: (1,22)-(1,25)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,23)-(1,24)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,23)-(1,24)) │ │ │ ├── flags: ∅ @@ -85,9 +92,10 @@ │ └── closing_loc: (1,24)-(1,25) = "|" ├── body: │ @ StatementsNode (location: (1,26)-(1,27)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,26)-(1,27)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :g diff --git a/test/prism/snapshots/seattlerb/block_call_dot_op2_cmd_args_do_block.txt b/test/prism/snapshots/seattlerb/block_call_dot_op2_cmd_args_do_block.txt index 05d076f8d6f..ca141580b7d 100644 --- a/test/prism/snapshots/seattlerb/block_call_dot_op2_cmd_args_do_block.txt +++ b/test/prism/snapshots/seattlerb/block_call_dot_op2_cmd_args_do_block.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,33)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,33)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,33)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(1,16)) │ ├── flags: ∅ @@ -40,13 +42,15 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,8)-(1,16)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,11)-(1,12)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,11)-(1,12)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :d @@ -78,11 +82,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,21)-(1,33)) + ├── flags: ∅ ├── locals: [:g] ├── parameters: │ @ BlockParametersNode (location: (1,24)-(1,27)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,25)-(1,26)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,25)-(1,26)) │ │ │ ├── flags: ∅ @@ -98,9 +105,10 @@ │ └── closing_loc: (1,26)-(1,27) = "|" ├── body: │ @ StatementsNode (location: (1,28)-(1,29)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,28)-(1,29)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :h diff --git a/test/prism/snapshots/seattlerb/block_call_operation_colon.txt b/test/prism/snapshots/seattlerb/block_call_operation_colon.txt index 9fd13b0dfcc..cecd4212638 100644 --- a/test/prism/snapshots/seattlerb/block_call_operation_colon.txt +++ b/test/prism/snapshots/seattlerb/block_call_operation_colon.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,15)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,15)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,15)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(1,12)) │ ├── flags: ∅ @@ -40,6 +42,7 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,6)-(1,12)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ diff --git a/test/prism/snapshots/seattlerb/block_call_operation_dot.txt b/test/prism/snapshots/seattlerb/block_call_operation_dot.txt index 43c19d33181..5c661fb49a9 100644 --- a/test/prism/snapshots/seattlerb/block_call_operation_dot.txt +++ b/test/prism/snapshots/seattlerb/block_call_operation_dot.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,14)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,14)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(1,12)) │ ├── flags: ∅ @@ -40,6 +42,7 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,6)-(1,12)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ diff --git a/test/prism/snapshots/seattlerb/block_call_paren_call_block_call.txt b/test/prism/snapshots/seattlerb/block_call_paren_call_block_call.txt index 10c1780d374..93c4b05f9bc 100644 --- a/test/prism/snapshots/seattlerb/block_call_paren_call_block_call.txt +++ b/test/prism/snapshots/seattlerb/block_call_paren_call_block_call.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(2,10)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(2,10)) + ├── flags: ∅ └── body: (length: 2) ├── @ CallNode (location: (1,0)-(1,5)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a @@ -15,11 +17,13 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ParenthesesNode (location: (1,2)-(1,5)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (1,3)-(1,4)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -33,7 +37,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ CallNode (location: (2,0)-(2,10)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (2,0)-(2,1)) │ ├── flags: variable_call, ignore_visibility @@ -53,6 +57,7 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (2,4)-(2,10)) + ├── flags: ∅ ├── locals: [] ├── parameters: ∅ ├── body: ∅ diff --git a/test/prism/snapshots/seattlerb/block_command_operation_colon.txt b/test/prism/snapshots/seattlerb/block_command_operation_colon.txt index 30fd6dafa00..c71fbe2f4a0 100644 --- a/test/prism/snapshots/seattlerb/block_command_operation_colon.txt +++ b/test/prism/snapshots/seattlerb/block_command_operation_colon.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(1,11)) │ ├── flags: ignore_visibility @@ -18,7 +20,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SymbolNode (location: (1,2)-(1,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,2)-(1,3) = ":" │ │ ├── value_loc: (1,3)-(1,4) = "b" │ │ ├── closing_loc: ∅ @@ -26,6 +28,7 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,5)-(1,11)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ @@ -40,7 +43,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ SymbolNode (location: (1,15)-(1,17)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,15)-(1,16) = ":" │ ├── value_loc: (1,16)-(1,17) = "d" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/block_command_operation_dot.txt b/test/prism/snapshots/seattlerb/block_command_operation_dot.txt index e4f69d36045..68d98c99b46 100644 --- a/test/prism/snapshots/seattlerb/block_command_operation_dot.txt +++ b/test/prism/snapshots/seattlerb/block_command_operation_dot.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,16)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,16)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,16)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(1,11)) │ ├── flags: ignore_visibility @@ -18,7 +20,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SymbolNode (location: (1,2)-(1,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,2)-(1,3) = ":" │ │ ├── value_loc: (1,3)-(1,4) = "b" │ │ ├── closing_loc: ∅ @@ -26,6 +28,7 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,5)-(1,11)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ @@ -40,7 +43,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ SymbolNode (location: (1,14)-(1,16)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,14)-(1,15) = ":" │ ├── value_loc: (1,15)-(1,16) = "d" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/block_decomp_anon_splat_arg.txt b/test/prism/snapshots/seattlerb/block_decomp_anon_splat_arg.txt index e309ec1f98f..5628cacc978 100644 --- a/test/prism/snapshots/seattlerb/block_decomp_anon_splat_arg.txt +++ b/test/prism/snapshots/seattlerb/block_decomp_anon_splat_arg.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,14)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,14)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,16 +16,21 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,14)) + ├── flags: ∅ ├── locals: [:a] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,12)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 0) │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (1,6)-(1,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (1,6)-(1,7) = "*" │ │ │ │ └── expression: ∅ │ │ │ ├── rights: (length: 1) diff --git a/test/prism/snapshots/seattlerb/block_decomp_arg_splat.txt b/test/prism/snapshots/seattlerb/block_decomp_arg_splat.txt index 8d28fa7e02d..b13e13d167e 100644 --- a/test/prism/snapshots/seattlerb/block_decomp_arg_splat.txt +++ b/test/prism/snapshots/seattlerb/block_decomp_arg_splat.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,14)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,14)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,19 +16,24 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,14)) + ├── flags: ∅ ├── locals: [:b] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,12)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :b │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (1,9)-(1,10)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" │ │ │ │ └── expression: ∅ │ │ │ ├── rights: (length: 0) diff --git a/test/prism/snapshots/seattlerb/block_decomp_arg_splat_arg.txt b/test/prism/snapshots/seattlerb/block_decomp_arg_splat_arg.txt index 4f4a82acf59..ba0a6202ced 100644 --- a/test/prism/snapshots/seattlerb/block_decomp_arg_splat_arg.txt +++ b/test/prism/snapshots/seattlerb/block_decomp_arg_splat_arg.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,18)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,18)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,18)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,19 +16,24 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,18)) + ├── flags: ∅ ├── locals: [:a, :b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,16)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,15)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :a │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (1,9)-(1,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" │ │ │ │ └── expression: │ │ │ │ @ RequiredParameterNode (location: (1,10)-(1,11)) diff --git a/test/prism/snapshots/seattlerb/block_decomp_splat.txt b/test/prism/snapshots/seattlerb/block_decomp_splat.txt index 09d34401264..fd8ad4bda1f 100644 --- a/test/prism/snapshots/seattlerb/block_decomp_splat.txt +++ b/test/prism/snapshots/seattlerb/block_decomp_splat.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,12)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,12)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,12)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,16 +16,21 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,12)) + ├── flags: ∅ ├── locals: [:a] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,10)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,9)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 0) │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (1,6)-(1,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (1,6)-(1,7) = "*" │ │ │ │ └── expression: │ │ │ │ @ RequiredParameterNode (location: (1,7)-(1,8)) diff --git a/test/prism/snapshots/seattlerb/block_kw.txt b/test/prism/snapshots/seattlerb/block_kw.txt index f022637dae6..d76998ecb66 100644 --- a/test/prism/snapshots/seattlerb/block_kw.txt +++ b/test/prism/snapshots/seattlerb/block_kw.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,15)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,15)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,15)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :blah @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,5)-(1,15)) + ├── flags: ∅ ├── locals: [:k] ├── parameters: │ @ BlockParametersNode (location: (1,7)-(1,13)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,8)-(1,12)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -30,7 +35,7 @@ │ │ │ ├── name_loc: (1,8)-(1,10) = "k:" │ │ │ └── value: │ │ │ @ IntegerNode (location: (1,10)-(1,12)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 42 │ │ ├── keyword_rest: ∅ │ │ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/block_kw__required.txt b/test/prism/snapshots/seattlerb/block_kw__required.txt index 8a49c8bec7e..f04987d854f 100644 --- a/test/prism/snapshots/seattlerb/block_kw__required.txt +++ b/test/prism/snapshots/seattlerb/block_kw__required.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,16)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,16)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,16)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :blah @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,5)-(1,16)) + ├── flags: ∅ ├── locals: [:k] ├── parameters: │ @ BlockParametersNode (location: (1,8)-(1,12)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,9)-(1,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ diff --git a/test/prism/snapshots/seattlerb/block_kwarg_lvar.txt b/test/prism/snapshots/seattlerb/block_kwarg_lvar.txt index e77bf90a276..861348f2a2a 100644 --- a/test/prism/snapshots/seattlerb/block_kwarg_lvar.txt +++ b/test/prism/snapshots/seattlerb/block_kwarg_lvar.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,20)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,20)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,20)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :bl @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,3)-(1,20)) + ├── flags: ∅ ├── locals: [:kw] ├── parameters: │ @ BlockParametersNode (location: (1,5)-(1,15)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,6)-(1,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -30,7 +35,7 @@ │ │ │ ├── name_loc: (1,6)-(1,9) = "kw:" │ │ │ └── value: │ │ │ @ SymbolNode (location: (1,10)-(1,14)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (1,10)-(1,11) = ":" │ │ │ ├── value_loc: (1,11)-(1,14) = "val" │ │ │ ├── closing_loc: ∅ @@ -42,8 +47,10 @@ │ └── closing_loc: (1,14)-(1,15) = "|" ├── body: │ @ StatementsNode (location: (1,16)-(1,18)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ LocalVariableReadNode (location: (1,16)-(1,18)) + │ ├── flags: newline │ ├── name: :kw │ └── depth: 0 ├── opening_loc: (1,3)-(1,4) = "{" diff --git a/test/prism/snapshots/seattlerb/block_kwarg_lvar_multiple.txt b/test/prism/snapshots/seattlerb/block_kwarg_lvar_multiple.txt index a527c8c993d..f1c1fef8a38 100644 --- a/test/prism/snapshots/seattlerb/block_kwarg_lvar_multiple.txt +++ b/test/prism/snapshots/seattlerb/block_kwarg_lvar_multiple.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,33)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,33)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,33)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :bl @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,3)-(1,33)) + ├── flags: ∅ ├── locals: [:kw, :kw2] ├── parameters: │ @ BlockParametersNode (location: (1,5)-(1,28)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,6)-(1,26)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -30,7 +35,7 @@ │ │ │ │ ├── name_loc: (1,6)-(1,9) = "kw:" │ │ │ │ └── value: │ │ │ │ @ SymbolNode (location: (1,10)-(1,14)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (1,10)-(1,11) = ":" │ │ │ │ ├── value_loc: (1,11)-(1,14) = "val" │ │ │ │ ├── closing_loc: ∅ @@ -41,7 +46,7 @@ │ │ │ ├── name_loc: (1,16)-(1,20) = "kw2:" │ │ │ └── value: │ │ │ @ SymbolNode (location: (1,21)-(1,26)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (1,21)-(1,22) = ":" │ │ │ ├── value_loc: (1,22)-(1,26) = "val2" │ │ │ ├── closing_loc: ∅ @@ -53,8 +58,10 @@ │ └── closing_loc: (1,27)-(1,28) = "|" ├── body: │ @ StatementsNode (location: (1,29)-(1,31)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ LocalVariableReadNode (location: (1,29)-(1,31)) + │ ├── flags: newline │ ├── name: :kw │ └── depth: 0 ├── opening_loc: (1,3)-(1,4) = "{" diff --git a/test/prism/snapshots/seattlerb/block_opt_arg.txt b/test/prism/snapshots/seattlerb/block_opt_arg.txt index 64dc928f14b..39be11ac92d 100644 --- a/test/prism/snapshots/seattlerb/block_opt_arg.txt +++ b/test/prism/snapshots/seattlerb/block_opt_arg.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,14)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,14)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,14)) + ├── flags: ∅ ├── locals: [:b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,12)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (1,5)-(1,8)) @@ -28,7 +33,7 @@ │ │ │ ├── operator_loc: (1,6)-(1,7) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (1,7)-(1,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rest: ∅ │ │ ├── posts: (length: 1) diff --git a/test/prism/snapshots/seattlerb/block_opt_splat.txt b/test/prism/snapshots/seattlerb/block_opt_splat.txt index c18df9c27d4..3898212dc00 100644 --- a/test/prism/snapshots/seattlerb/block_opt_splat.txt +++ b/test/prism/snapshots/seattlerb/block_opt_splat.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,17)) + ├── flags: ∅ ├── locals: [:b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,15)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (1,5)-(1,10)) @@ -28,7 +33,7 @@ │ │ │ ├── operator_loc: (1,7)-(1,8) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rest: │ │ │ @ RestParameterNode (location: (1,12)-(1,14)) diff --git a/test/prism/snapshots/seattlerb/block_opt_splat_arg_block_omfg.txt b/test/prism/snapshots/seattlerb/block_opt_splat_arg_block_omfg.txt index 3806809d2bd..ed4857ad25a 100644 --- a/test/prism/snapshots/seattlerb/block_opt_splat_arg_block_omfg.txt +++ b/test/prism/snapshots/seattlerb/block_opt_splat_arg_block_omfg.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,22)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,22)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,22)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,22)) + ├── flags: ∅ ├── locals: [:b, :c, :d, :e] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,20)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,19)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (1,5)-(1,8)) @@ -28,7 +33,7 @@ │ │ │ ├── operator_loc: (1,6)-(1,7) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (1,7)-(1,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rest: │ │ │ @ RestParameterNode (location: (1,10)-(1,12)) diff --git a/test/prism/snapshots/seattlerb/block_optarg.txt b/test/prism/snapshots/seattlerb/block_optarg.txt index 5da99aec799..2172571eb12 100644 --- a/test/prism/snapshots/seattlerb/block_optarg.txt +++ b/test/prism/snapshots/seattlerb/block_optarg.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,14)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,14)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,14)) + ├── flags: ∅ ├── locals: [:b] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,12)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (1,5)-(1,11)) @@ -28,7 +33,7 @@ │ │ │ ├── operator_loc: (1,7)-(1,8) = "=" │ │ │ └── value: │ │ │ @ SymbolNode (location: (1,9)-(1,11)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (1,9)-(1,10) = ":" │ │ │ ├── value_loc: (1,10)-(1,11) = "c" │ │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/block_paren_splat.txt b/test/prism/snapshots/seattlerb/block_paren_splat.txt index ebd937904cc..b6c2da679bb 100644 --- a/test/prism/snapshots/seattlerb/block_paren_splat.txt +++ b/test/prism/snapshots/seattlerb/block_paren_splat.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,15)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,15)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,15)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,19 +16,24 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,15)) + ├── flags: ∅ ├── locals: [:b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,13)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,12)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :b │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (1,9)-(1,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" │ │ │ │ └── expression: │ │ │ │ @ RequiredParameterNode (location: (1,10)-(1,11)) diff --git a/test/prism/snapshots/seattlerb/block_reg_optarg.txt b/test/prism/snapshots/seattlerb/block_reg_optarg.txt index 53c43603a7e..0173b92e8f0 100644 --- a/test/prism/snapshots/seattlerb/block_reg_optarg.txt +++ b/test/prism/snapshots/seattlerb/block_reg_optarg.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,17)) + ├── flags: ∅ ├── locals: [:b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,15)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ ├── flags: ∅ @@ -31,7 +36,7 @@ │ │ │ ├── operator_loc: (1,10)-(1,11) = "=" │ │ │ └── value: │ │ │ @ SymbolNode (location: (1,12)-(1,14)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (1,12)-(1,13) = ":" │ │ │ ├── value_loc: (1,13)-(1,14) = "d" │ │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/block_return.txt b/test/prism/snapshots/seattlerb/block_return.txt index c863b28a22c..0eee33c844e 100644 --- a/test/prism/snapshots/seattlerb/block_return.txt +++ b/test/prism/snapshots/seattlerb/block_return.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,27)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,27)) + ├── flags: ∅ └── body: (length: 1) └── @ ReturnNode (location: (1,0)-(1,27)) - ├── flags: ∅ + ├── flags: newline ├── keyword_loc: (1,0)-(1,6) = "return" └── arguments: @ ArgumentsNode (location: (1,7)-(1,27)) @@ -34,11 +36,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,15)-(1,27)) + ├── flags: ∅ ├── locals: [:bar] ├── parameters: │ @ BlockParametersNode (location: (1,18)-(1,23)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,19)-(1,22)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,19)-(1,22)) │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/block_scope.txt b/test/prism/snapshots/seattlerb/block_scope.txt index a21a28b9937..ef659bb38eb 100644 --- a/test/prism/snapshots/seattlerb/block_scope.txt +++ b/test/prism/snapshots/seattlerb/block_scope.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,10)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,10)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,10)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,9 +16,11 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,10)) + ├── flags: ∅ ├── locals: [:b] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,8)) + │ ├── flags: ∅ │ ├── parameters: ∅ │ ├── locals: (length: 1) │ │ └── @ BlockLocalVariableNode (location: (1,6)-(1,7)) diff --git a/test/prism/snapshots/seattlerb/block_splat_reg.txt b/test/prism/snapshots/seattlerb/block_splat_reg.txt index 617ff886225..b5eb009c52d 100644 --- a/test/prism/snapshots/seattlerb/block_splat_reg.txt +++ b/test/prism/snapshots/seattlerb/block_splat_reg.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,13)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,13)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,13)) + ├── flags: ∅ ├── locals: [:b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,11)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,10)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: diff --git a/test/prism/snapshots/seattlerb/bug169.txt b/test/prism/snapshots/seattlerb/bug169.txt index e4fb47a6de9..c55df4257de 100644 --- a/test/prism/snapshots/seattlerb/bug169.txt +++ b/test/prism/snapshots/seattlerb/bug169.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,7)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :m @@ -15,12 +17,14 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ ParenthesesNode (location: (1,2)-(1,4)) + │ ├── flags: ∅ │ ├── body: ∅ │ ├── opening_loc: (1,2)-(1,3) = "(" │ └── closing_loc: (1,3)-(1,4) = ")" ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,5)-(1,7)) + ├── flags: ∅ ├── locals: [] ├── parameters: ∅ ├── body: ∅ diff --git a/test/prism/snapshots/seattlerb/bug179.txt b/test/prism/snapshots/seattlerb/bug179.txt index d7695bc7a74..4392d5ec27c 100644 --- a/test/prism/snapshots/seattlerb/bug179.txt +++ b/test/prism/snapshots/seattlerb/bug179.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,9)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,9)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,9)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :p @@ -18,11 +20,13 @@ │ ├── flags: ∅ │ ├── left: │ │ @ ParenthesesNode (location: (1,2)-(1,4)) + │ │ ├── flags: ∅ │ │ ├── body: ∅ │ │ ├── opening_loc: (1,2)-(1,3) = "(" │ │ └── closing_loc: (1,3)-(1,4) = ")" │ ├── right: │ │ @ NilNode (location: (1,6)-(1,9)) + │ │ └── flags: static_literal │ └── operator_loc: (1,4)-(1,6) = ".." ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bug190.txt b/test/prism/snapshots/seattlerb/bug190.txt index b261a166cf9..004ca16a60c 100644 --- a/test/prism/snapshots/seattlerb/bug190.txt +++ b/test/prism/snapshots/seattlerb/bug190.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ RegularExpressionNode (location: (1,0)-(1,6)) - ├── flags: forced_us_ascii_encoding + ├── flags: newline, static_literal, forced_us_ascii_encoding ├── opening_loc: (1,0)-(1,3) = "%r'" ├── content_loc: (1,3)-(1,5) = "\\'" ├── closing_loc: (1,5)-(1,6) = "'" diff --git a/test/prism/snapshots/seattlerb/bug191.txt b/test/prism/snapshots/seattlerb/bug191.txt index 69835ab1d03..3977eb95195 100644 --- a/test/prism/snapshots/seattlerb/bug191.txt +++ b/test/prism/snapshots/seattlerb/bug191.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(3,9)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,9)) + ├── flags: ∅ └── body: (length: 2) ├── @ IfNode (location: (1,0)-(1,9)) + │ ├── flags: newline │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (1,0)-(1,1)) @@ -19,21 +22,24 @@ │ ├── then_keyword_loc: (1,2)-(1,3) = "?" │ ├── statements: │ │ @ StatementsNode (location: (1,4)-(1,6)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ StringNode (location: (1,4)-(1,6)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── opening_loc: (1,4)-(1,5) = "\"" │ │ ├── content_loc: (1,5)-(1,5) = "" │ │ ├── closing_loc: (1,5)-(1,6) = "\"" │ │ └── unescaped: "" │ ├── consequent: │ │ @ ElseNode (location: (1,6)-(1,9)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (1,6)-(1,7) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (1,8)-(1,9)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (1,8)-(1,9)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -45,6 +51,7 @@ │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ └── @ IfNode (location: (3,0)-(3,9)) + ├── flags: newline ├── if_keyword_loc: ∅ ├── predicate: │ @ CallNode (location: (3,0)-(3,1)) @@ -60,21 +67,24 @@ ├── then_keyword_loc: (3,2)-(3,3) = "?" ├── statements: │ @ StatementsNode (location: (3,4)-(3,6)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ StringNode (location: (3,4)-(3,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (3,4)-(3,5) = "'" │ ├── content_loc: (3,5)-(3,5) = "" │ ├── closing_loc: (3,5)-(3,6) = "'" │ └── unescaped: "" ├── consequent: │ @ ElseNode (location: (3,6)-(3,9)) + │ ├── flags: ∅ │ ├── else_keyword_loc: (3,6)-(3,7) = ":" │ ├── statements: │ │ @ StatementsNode (location: (3,8)-(3,9)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (3,8)-(3,9)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :b diff --git a/test/prism/snapshots/seattlerb/bug202.txt b/test/prism/snapshots/seattlerb/bug202.txt index 377b53727ed..f907081c208 100644 --- a/test/prism/snapshots/seattlerb/bug202.txt +++ b/test/prism/snapshots/seattlerb/bug202.txt @@ -1,22 +1,26 @@ @ ProgramNode (location: (1,0)-(2,10)) +├── flags: ∅ ├── locals: [:测试] └── statements: @ StatementsNode (location: (1,0)-(2,10)) + ├── flags: ∅ └── body: (length: 2) ├── @ GlobalVariableWriteNode (location: (1,0)-(1,11)) + │ ├── flags: newline │ ├── name: :$测试 │ ├── name_loc: (1,0)-(1,7) = "$测试" │ ├── value: │ │ @ IntegerNode (location: (1,10)-(1,11)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (1,8)-(1,9) = "=" └── @ LocalVariableWriteNode (location: (2,0)-(2,10)) + ├── flags: newline ├── name: :测试 ├── depth: 0 ├── name_loc: (2,0)-(2,6) = "测试" ├── value: │ @ IntegerNode (location: (2,9)-(2,10)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 └── operator_loc: (2,7)-(2,8) = "=" diff --git a/test/prism/snapshots/seattlerb/bug236.txt b/test/prism/snapshots/seattlerb/bug236.txt index 203a39a793a..792020dc78b 100644 --- a/test/prism/snapshots/seattlerb/bug236.txt +++ b/test/prism/snapshots/seattlerb/bug236.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(3,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,6)) + ├── flags: ∅ └── body: (length: 2) ├── @ CallNode (location: (1,0)-(1,7)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :x @@ -14,11 +16,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,1)-(1,7)) + │ ├── flags: ∅ │ ├── locals: [:a] │ ├── parameters: │ │ @ BlockParametersNode (location: (1,2)-(1,6)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (1,3)-(1,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (1,3)-(1,4)) │ │ │ │ ├── flags: ∅ @@ -26,6 +31,7 @@ │ │ │ ├── optionals: (length: 0) │ │ │ ├── rest: │ │ │ │ @ ImplicitRestNode (location: (1,4)-(1,5)) + │ │ │ │ └── flags: ∅ │ │ │ ├── posts: (length: 0) │ │ │ ├── keywords: (length: 0) │ │ │ ├── keyword_rest: ∅ @@ -37,7 +43,7 @@ │ ├── opening_loc: (1,1)-(1,2) = "{" │ └── closing_loc: (1,6)-(1,7) = "}" └── @ CallNode (location: (3,0)-(3,6)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :x @@ -47,11 +53,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (3,1)-(3,6)) + ├── flags: ∅ ├── locals: [:a] ├── parameters: │ @ BlockParametersNode (location: (3,2)-(3,5)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (3,3)-(3,4)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (3,3)-(3,4)) │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/bug290.txt b/test/prism/snapshots/seattlerb/bug290.txt index 4f1e673c4b3..85d75c0d161 100644 --- a/test/prism/snapshots/seattlerb/bug290.txt +++ b/test/prism/snapshots/seattlerb/bug290.txt @@ -1,15 +1,19 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ BeginNode (location: (1,0)-(3,3)) + ├── flags: newline ├── begin_keyword_loc: (1,0)-(1,5) = "begin" ├── statements: │ @ StatementsNode (location: (2,2)-(2,5)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (2,2)-(2,5)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo diff --git a/test/prism/snapshots/seattlerb/bug_187.txt b/test/prism/snapshots/seattlerb/bug_187.txt index ae72675e5cf..6a5786e34ab 100644 --- a/test/prism/snapshots/seattlerb/bug_187.txt +++ b/test/prism/snapshots/seattlerb/bug_187.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(3,3)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :private @@ -15,15 +17,17 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ DefNode (location: (1,8)-(3,3)) + │ ├── flags: ∅ │ ├── name: :f │ ├── name_loc: (1,12)-(1,13) = "f" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (2,0)-(2,10)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (2,0)-(2,10)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (2,0)-(2,1)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -43,6 +47,7 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (2,4)-(2,10)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_215.txt b/test/prism/snapshots/seattlerb/bug_215.txt index de7716335e9..ee82b4f1da9 100644 --- a/test/prism/snapshots/seattlerb/bug_215.txt +++ b/test/prism/snapshots/seattlerb/bug_215.txt @@ -1,12 +1,15 @@ @ ProgramNode (location: (1,0)-(1,13)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,13)) + ├── flags: ∅ └── body: (length: 1) └── @ UndefNode (location: (1,0)-(1,13)) + ├── flags: newline ├── names: (length: 1) │ └── @ SymbolNode (location: (1,6)-(1,13)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,6)-(1,9) = "%s(" │ ├── value_loc: (1,9)-(1,12) = "foo" │ ├── closing_loc: (1,12)-(1,13) = ")" diff --git a/test/prism/snapshots/seattlerb/bug_249.txt b/test/prism/snapshots/seattlerb/bug_249.txt index ad61501a076..06daa80e41d 100644 --- a/test/prism/snapshots/seattlerb/bug_249.txt +++ b/test/prism/snapshots/seattlerb/bug_249.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(4,28)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,28)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(4,28)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :mount @@ -18,13 +20,16 @@ │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ ParenthesesNode (location: (1,6)-(4,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (1,7)-(4,4)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (1,7)-(4,4)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: newline │ │ │ │ ├── receiver: │ │ │ │ │ @ ConstantReadNode (location: (1,7)-(1,12)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── name: :Class │ │ │ │ ├── call_operator_loc: (1,12)-(1,13) = "." │ │ │ │ ├── name: :new @@ -34,12 +39,15 @@ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: │ │ │ │ @ BlockNode (location: (1,17)-(4,4)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── locals: [] │ │ │ │ ├── parameters: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (2,0)-(3,3)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ DefNode (location: (2,0)-(3,3)) + │ │ │ │ │ ├── flags: newline │ │ │ │ │ ├── name: :initialize │ │ │ │ │ ├── name_loc: (2,4)-(2,14) = "initialize" │ │ │ │ │ ├── receiver: ∅ @@ -67,9 +75,10 @@ │ ├── flags: symbol_keys │ └── elements: (length: 1) │ └── @ AssocNode (location: (4,11)-(4,28)) + │ ├── flags: ∅ │ ├── key: │ │ @ SymbolNode (location: (4,11)-(4,14)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (4,11)-(4,12) = ":" │ │ ├── value_loc: (4,12)-(4,14) = "at" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_and.txt b/test/prism/snapshots/seattlerb/bug_and.txt index 3daf505e5f1..89eb403b4a8 100644 --- a/test/prism/snapshots/seattlerb/bug_and.txt +++ b/test/prism/snapshots/seattlerb/bug_and.txt @@ -1,20 +1,27 @@ @ ProgramNode (location: (1,0)-(4,11)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,11)) + ├── flags: ∅ └── body: (length: 2) ├── @ AndNode (location: (1,0)-(2,4)) + │ ├── flags: newline │ ├── left: │ │ @ TrueNode (location: (1,0)-(1,4)) + │ │ └── flags: static_literal │ ├── right: │ │ @ TrueNode (location: (2,0)-(2,4)) + │ │ └── flags: static_literal │ └── operator_loc: (1,5)-(1,8) = "and" └── @ AndNode (location: (4,0)-(4,11)) + ├── flags: newline ├── left: │ @ TrueNode (location: (4,0)-(4,4)) + │ └── flags: static_literal ├── right: │ @ ArrayNode (location: (4,9)-(4,11)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 0) │ ├── opening_loc: (4,9)-(4,10) = "[" │ └── closing_loc: (4,10)-(4,11) = "]" diff --git a/test/prism/snapshots/seattlerb/bug_args__19.txt b/test/prism/snapshots/seattlerb/bug_args__19.txt index f451bd01722..5b1d897718a 100644 --- a/test/prism/snapshots/seattlerb/bug_args__19.txt +++ b/test/prism/snapshots/seattlerb/bug_args__19.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,16)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,16)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,16)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,13 +16,17 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,16)) + ├── flags: ∅ ├── locals: [:a, :b] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,12)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 2) │ │ │ │ ├── @ RequiredParameterNode (location: (1,6)-(1,7)) │ │ │ │ │ ├── flags: ∅ @@ -43,9 +49,10 @@ │ └── closing_loc: (1,11)-(1,12) = "|" ├── body: │ @ StatementsNode (location: (1,13)-(1,14)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,13)-(1,14)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :d diff --git a/test/prism/snapshots/seattlerb/bug_args_masgn.txt b/test/prism/snapshots/seattlerb/bug_args_masgn.txt index 297979c182c..6456d82ecc3 100644 --- a/test/prism/snapshots/seattlerb/bug_args_masgn.txt +++ b/test/prism/snapshots/seattlerb/bug_args_masgn.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,13 +16,17 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,17)) + ├── flags: ∅ ├── locals: [:a, :b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,15)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ MultiTargetNode (location: (1,5)-(1,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── lefts: (length: 2) │ │ │ │ │ ├── @ RequiredParameterNode (location: (1,6)-(1,7)) │ │ │ │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_args_masgn2.txt b/test/prism/snapshots/seattlerb/bug_args_masgn2.txt index 6bec9187b3b..bd9fc611611 100644 --- a/test/prism/snapshots/seattlerb/bug_args_masgn2.txt +++ b/test/prism/snapshots/seattlerb/bug_args_masgn2.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,22)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,22)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,22)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,15 +16,20 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,22)) + ├── flags: ∅ ├── locals: [:a, :b, :c, :d] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,20)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,19)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ MultiTargetNode (location: (1,5)-(1,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── lefts: (length: 2) │ │ │ │ │ ├── @ MultiTargetNode (location: (1,6)-(1,12)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── lefts: (length: 2) │ │ │ │ │ │ │ ├── @ RequiredParameterNode (location: (1,7)-(1,8)) │ │ │ │ │ │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_args_masgn_outer_parens__19.txt b/test/prism/snapshots/seattlerb/bug_args_masgn_outer_parens__19.txt index 42a060d02aa..ad62bd4daa5 100644 --- a/test/prism/snapshots/seattlerb/bug_args_masgn_outer_parens__19.txt +++ b/test/prism/snapshots/seattlerb/bug_args_masgn_outer_parens__19.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,19)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,19)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,19)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,15 +16,20 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,19)) + ├── flags: ∅ ├── locals: [:k, :v, :i] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,17)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,16)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 2) │ │ │ │ ├── @ MultiTargetNode (location: (1,6)-(1,12)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── lefts: (length: 2) │ │ │ │ │ │ ├── @ RequiredParameterNode (location: (1,7)-(1,8)) │ │ │ │ │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_call_arglist_parens.txt b/test/prism/snapshots/seattlerb/bug_call_arglist_parens.txt index 53d6f9220b2..6954854baeb 100644 --- a/test/prism/snapshots/seattlerb/bug_call_arglist_parens.txt +++ b/test/prism/snapshots/seattlerb/bug_call_arglist_parens.txt @@ -1,18 +1,22 @@ @ ProgramNode (location: (1,6)-(11,9)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,6)-(11,9)) + ├── flags: ∅ └── body: (length: 3) ├── @ DefNode (location: (1,6)-(3,9)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (1,10)-(1,11) = "f" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (2,8)-(2,17)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (2,8)-(2,17)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :g @@ -23,16 +27,18 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 2) │ │ │ ├── @ ParenthesesNode (location: (2,10)-(2,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (2,12)-(2,13)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ IntegerNode (location: (2,12)-(2,13)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── opening_loc: (2,10)-(2,11) = "(" │ │ │ │ └── closing_loc: (2,13)-(2,14) = ")" │ │ │ └── @ IntegerNode (location: (2,16)-(2,17)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ @@ -44,15 +50,17 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (3,6)-(3,9) = "end" ├── @ DefNode (location: (6,6)-(8,9)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (6,10)-(6,11) = "f" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (7,8)-(7,16)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (7,8)-(7,16)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :g @@ -63,16 +71,18 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 2) │ │ │ ├── @ ParenthesesNode (location: (7,10)-(7,13)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (7,11)-(7,12)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ IntegerNode (location: (7,11)-(7,12)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── opening_loc: (7,10)-(7,11) = "(" │ │ │ │ └── closing_loc: (7,12)-(7,13) = ")" │ │ │ └── @ IntegerNode (location: (7,15)-(7,16)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ @@ -84,7 +94,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (8,6)-(8,9) = "end" └── @ CallNode (location: (11,0)-(11,9)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :g @@ -95,16 +105,18 @@ │ ├── flags: ∅ │ └── arguments: (length: 2) │ ├── @ ParenthesesNode (location: (11,2)-(11,6)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (11,4)-(11,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ IntegerNode (location: (11,4)-(11,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: newline, static_literal, decimal │ │ │ └── value: 1 │ │ ├── opening_loc: (11,2)-(11,3) = "(" │ │ └── closing_loc: (11,5)-(11,6) = ")" │ └── @ IntegerNode (location: (11,8)-(11,9)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_case_when_regexp.txt b/test/prism/snapshots/seattlerb/bug_case_when_regexp.txt index 0cc1ca05e1f..f0d3c3d23c8 100644 --- a/test/prism/snapshots/seattlerb/bug_case_when_regexp.txt +++ b/test/prism/snapshots/seattlerb/bug_case_when_regexp.txt @@ -1,22 +1,26 @@ @ ProgramNode (location: (1,0)-(1,26)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,26)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseNode (location: (1,0)-(1,26)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "x" │ ├── closing_loc: ∅ │ └── unescaped: "x" ├── conditions: (length: 1) │ └── @ WhenNode (location: (1,9)-(1,22)) + │ ├── flags: ∅ │ ├── keyword_loc: (1,9)-(1,13) = "when" │ ├── conditions: (length: 1) │ │ └── @ RegularExpressionNode (location: (1,14)-(1,17)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,14)-(1,15) = "/" │ │ ├── content_loc: (1,15)-(1,16) = "x" │ │ ├── closing_loc: (1,16)-(1,17) = "/" diff --git a/test/prism/snapshots/seattlerb/bug_comma.txt b/test/prism/snapshots/seattlerb/bug_comma.txt index af886999b5e..0d65d2805a5 100644 --- a/test/prism/snapshots/seattlerb/bug_comma.txt +++ b/test/prism/snapshots/seattlerb/bug_comma.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(1,24)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,24)) + ├── flags: ∅ └── body: (length: 1) └── @ IfNode (location: (1,0)-(1,24)) + ├── flags: newline ├── if_keyword_loc: (1,0)-(1,2) = "if" ├── predicate: │ @ CallNode (location: (1,3)-(1,15)) diff --git a/test/prism/snapshots/seattlerb/bug_cond_pct.txt b/test/prism/snapshots/seattlerb/bug_cond_pct.txt index cbf3bc3ef02..69d9b7e1755 100644 --- a/test/prism/snapshots/seattlerb/bug_cond_pct.txt +++ b/test/prism/snapshots/seattlerb/bug_cond_pct.txt @@ -1,16 +1,20 @@ @ ProgramNode (location: (1,0)-(1,28)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,28)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseNode (location: (1,0)-(1,28)) + ├── flags: newline ├── predicate: ∅ ├── conditions: (length: 1) │ └── @ WhenNode (location: (1,6)-(1,23)) + │ ├── flags: ∅ │ ├── keyword_loc: (1,6)-(1,10) = "when" │ ├── conditions: (length: 1) │ │ └── @ RegularExpressionNode (location: (1,11)-(1,23)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,11)-(1,14) = "%r%" │ │ ├── content_loc: (1,14)-(1,22) = "blahblah" │ │ ├── closing_loc: (1,22)-(1,23) = "%" diff --git a/test/prism/snapshots/seattlerb/bug_hash_args.txt b/test/prism/snapshots/seattlerb/bug_hash_args.txt index e138db4d491..cd90f0ebc60 100644 --- a/test/prism/snapshots/seattlerb/bug_hash_args.txt +++ b/test/prism/snapshots/seattlerb/bug_hash_args.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,19)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,19)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,19)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :foo @@ -15,7 +17,7 @@ │ ├── flags: contains_keywords │ └── arguments: (length: 2) │ ├── @ SymbolNode (location: (1,4)-(1,8)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,4)-(1,5) = ":" │ │ ├── value_loc: (1,5)-(1,8) = "bar" │ │ ├── closing_loc: ∅ @@ -24,15 +26,17 @@ │ ├── flags: symbol_keys │ └── elements: (length: 1) │ └── @ AssocNode (location: (1,10)-(1,18)) + │ ├── flags: static_literal │ ├── key: │ │ @ SymbolNode (location: (1,10)-(1,14)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (1,10)-(1,13) = "baz" │ │ ├── closing_loc: (1,13)-(1,14) = ":" │ │ └── unescaped: "baz" │ ├── value: │ │ @ NilNode (location: (1,15)-(1,18)) + │ │ └── flags: static_literal │ └── operator_loc: ∅ ├── closing_loc: (1,18)-(1,19) = ")" └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_hash_args_trailing_comma.txt b/test/prism/snapshots/seattlerb/bug_hash_args_trailing_comma.txt index fe2d7f73c97..8c06cabf1c2 100644 --- a/test/prism/snapshots/seattlerb/bug_hash_args_trailing_comma.txt +++ b/test/prism/snapshots/seattlerb/bug_hash_args_trailing_comma.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,20)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,20)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,20)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :foo @@ -15,7 +17,7 @@ │ ├── flags: contains_keywords │ └── arguments: (length: 2) │ ├── @ SymbolNode (location: (1,4)-(1,8)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,4)-(1,5) = ":" │ │ ├── value_loc: (1,5)-(1,8) = "bar" │ │ ├── closing_loc: ∅ @@ -24,15 +26,17 @@ │ ├── flags: symbol_keys │ └── elements: (length: 1) │ └── @ AssocNode (location: (1,10)-(1,18)) + │ ├── flags: static_literal │ ├── key: │ │ @ SymbolNode (location: (1,10)-(1,14)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (1,10)-(1,13) = "baz" │ │ ├── closing_loc: (1,13)-(1,14) = ":" │ │ └── unescaped: "baz" │ ├── value: │ │ @ NilNode (location: (1,15)-(1,18)) + │ │ └── flags: static_literal │ └── operator_loc: ∅ ├── closing_loc: (1,19)-(1,20) = ")" └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_hash_interp_array.txt b/test/prism/snapshots/seattlerb/bug_hash_interp_array.txt index 433fb024115..3d9fc56850b 100644 --- a/test/prism/snapshots/seattlerb/bug_hash_interp_array.txt +++ b/test/prism/snapshots/seattlerb/bug_hash_interp_array.txt @@ -1,24 +1,30 @@ @ ProgramNode (location: (1,0)-(1,13)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,13)) + ├── flags: ∅ └── body: (length: 1) └── @ HashNode (location: (1,0)-(1,13)) + ├── flags: newline ├── opening_loc: (1,0)-(1,1) = "{" ├── elements: (length: 1) │ └── @ AssocNode (location: (1,2)-(1,11)) + │ ├── flags: ∅ │ ├── key: │ │ @ InterpolatedSymbolNode (location: (1,2)-(1,8)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (1,2)-(1,3) = "\"" │ │ ├── parts: (length: 1) │ │ │ └── @ EmbeddedStatementsNode (location: (1,3)-(1,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (1,3)-(1,5) = "\#{" │ │ │ ├── statements: ∅ │ │ │ └── closing_loc: (1,5)-(1,6) = "}" │ │ └── closing_loc: (1,6)-(1,8) = "\":" │ ├── value: │ │ @ ArrayNode (location: (1,9)-(1,11)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── elements: (length: 0) │ │ ├── opening_loc: (1,9)-(1,10) = "[" │ │ └── closing_loc: (1,10)-(1,11) = "]" diff --git a/test/prism/snapshots/seattlerb/bug_masgn_right.txt b/test/prism/snapshots/seattlerb/bug_masgn_right.txt index b4c75c4607e..e5b635d802d 100644 --- a/test/prism/snapshots/seattlerb/bug_masgn_right.txt +++ b/test/prism/snapshots/seattlerb/bug_masgn_right.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,16 +16,20 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,17)) + ├── flags: ∅ ├── locals: [:a, :b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,15)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :a │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 2) │ │ │ │ ├── @ RequiredParameterNode (location: (1,9)-(1,10)) │ │ │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_not_parens.txt b/test/prism/snapshots/seattlerb/bug_not_parens.txt index 9e4a416d4aa..163fb79564f 100644 --- a/test/prism/snapshots/seattlerb/bug_not_parens.txt +++ b/test/prism/snapshots/seattlerb/bug_not_parens.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,4)-(1,5)) │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/seattlerb/bug_op_asgn_rescue.txt b/test/prism/snapshots/seattlerb/bug_op_asgn_rescue.txt index 33016f32f86..9da753aece0 100644 --- a/test/prism/snapshots/seattlerb/bug_op_asgn_rescue.txt +++ b/test/prism/snapshots/seattlerb/bug_op_asgn_rescue.txt @@ -1,13 +1,17 @@ @ ProgramNode (location: (1,0)-(1,18)) +├── flags: ∅ ├── locals: [:a] └── statements: @ StatementsNode (location: (1,0)-(1,18)) + ├── flags: ∅ └── body: (length: 1) └── @ LocalVariableOrWriteNode (location: (1,0)-(1,18)) + ├── flags: newline ├── name_loc: (1,0)-(1,1) = "a" ├── operator_loc: (1,2)-(1,5) = "||=" ├── value: │ @ RescueModifierNode (location: (1,6)-(1,18)) + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (1,6)-(1,7)) │ │ ├── flags: variable_call, ignore_visibility @@ -22,5 +26,6 @@ │ ├── keyword_loc: (1,8)-(1,14) = "rescue" │ └── rescue_expression: │ @ NilNode (location: (1,15)-(1,18)) + │ └── flags: static_literal ├── name: :a └── depth: 0 diff --git a/test/prism/snapshots/seattlerb/call_and.txt b/test/prism/snapshots/seattlerb/call_and.txt index d3e88b3f9e4..640f355c4a1 100644 --- a/test/prism/snapshots/seattlerb/call_and.txt +++ b/test/prism/snapshots/seattlerb/call_and.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,5)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :& @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_arg_assoc.txt b/test/prism/snapshots/seattlerb/call_arg_assoc.txt index f489bc7f191..b8ec9070317 100644 --- a/test/prism/snapshots/seattlerb/call_arg_assoc.txt +++ b/test/prism/snapshots/seattlerb/call_arg_assoc.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,10)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,10)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,10)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -15,19 +17,20 @@ │ ├── flags: contains_keywords │ └── arguments: (length: 2) │ ├── @ IntegerNode (location: (1,2)-(1,3)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── @ KeywordHashNode (location: (1,5)-(1,9)) │ ├── flags: ∅ │ └── elements: (length: 1) │ └── @ AssocNode (location: (1,5)-(1,9)) + │ ├── flags: static_literal │ ├── key: │ │ @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── value: │ │ @ IntegerNode (location: (1,8)-(1,9)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ └── operator_loc: (1,6)-(1,8) = "=>" ├── closing_loc: (1,9)-(1,10) = ")" diff --git a/test/prism/snapshots/seattlerb/call_arg_assoc_kwsplat.txt b/test/prism/snapshots/seattlerb/call_arg_assoc_kwsplat.txt index 5b191396de5..11142b27219 100644 --- a/test/prism/snapshots/seattlerb/call_arg_assoc_kwsplat.txt +++ b/test/prism/snapshots/seattlerb/call_arg_assoc_kwsplat.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,16)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,16)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,16)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -15,28 +17,30 @@ │ ├── flags: contains_keywords, contains_keyword_splat │ └── arguments: (length: 2) │ ├── @ IntegerNode (location: (1,2)-(1,3)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── @ KeywordHashNode (location: (1,5)-(1,15)) │ ├── flags: ∅ │ └── elements: (length: 2) │ ├── @ AssocNode (location: (1,5)-(1,10)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (1,5)-(1,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (1,5)-(1,7) = "kw" │ │ │ ├── closing_loc: (1,7)-(1,8) = ":" │ │ │ └── unescaped: "kw" │ │ ├── value: │ │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: ∅ │ └── @ AssocSplatNode (location: (1,12)-(1,15)) + │ ├── flags: ∅ │ ├── value: │ │ @ IntegerNode (location: (1,14)-(1,15)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ └── operator_loc: (1,12)-(1,14) = "**" ├── closing_loc: (1,15)-(1,16) = ")" diff --git a/test/prism/snapshots/seattlerb/call_arg_kwsplat.txt b/test/prism/snapshots/seattlerb/call_arg_kwsplat.txt index f95b80cf7db..853f7103e3e 100644 --- a/test/prism/snapshots/seattlerb/call_arg_kwsplat.txt +++ b/test/prism/snapshots/seattlerb/call_arg_kwsplat.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,9)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,9)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,9)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -28,9 +30,10 @@ │ ├── flags: ∅ │ └── elements: (length: 1) │ └── @ AssocSplatNode (location: (1,5)-(1,8)) + │ ├── flags: ∅ │ ├── value: │ │ @ IntegerNode (location: (1,7)-(1,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (1,5)-(1,7) = "**" ├── closing_loc: (1,8)-(1,9) = ")" diff --git a/test/prism/snapshots/seattlerb/call_args_assoc_quoted.txt b/test/prism/snapshots/seattlerb/call_args_assoc_quoted.txt index 8946206a3f5..615bee5b4a9 100644 --- a/test/prism/snapshots/seattlerb/call_args_assoc_quoted.txt +++ b/test/prism/snapshots/seattlerb/call_args_assoc_quoted.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(5,8)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(5,8)) + ├── flags: ∅ └── body: (length: 3) ├── @ CallNode (location: (1,0)-(1,11)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :x @@ -18,14 +20,18 @@ │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (1,2)-(1,11)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ InterpolatedSymbolNode (location: (1,2)-(1,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (1,2)-(1,3) = "\"" │ │ │ ├── parts: (length: 1) │ │ │ │ └── @ EmbeddedStatementsNode (location: (1,3)-(1,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── opening_loc: (1,3)-(1,5) = "\#{" │ │ │ │ ├── statements: │ │ │ │ │ @ StatementsNode (location: (1,5)-(1,6)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ CallNode (location: (1,5)-(1,6)) │ │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -41,13 +47,13 @@ │ │ │ └── closing_loc: (1,7)-(1,9) = "\":" │ │ ├── value: │ │ │ @ IntegerNode (location: (1,9)-(1,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 42 │ │ └── operator_loc: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (3,0)-(3,8)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :x @@ -61,22 +67,23 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (3,2)-(3,8)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (3,2)-(3,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (3,2)-(3,3) = "\"" │ │ │ ├── value_loc: (3,3)-(3,4) = "k" │ │ │ ├── closing_loc: (3,4)-(3,6) = "\":" │ │ │ └── unescaped: "k" │ │ ├── value: │ │ │ @ IntegerNode (location: (3,6)-(3,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 42 │ │ └── operator_loc: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ CallNode (location: (5,0)-(5,8)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :x @@ -90,16 +97,17 @@ │ ├── flags: symbol_keys │ └── elements: (length: 1) │ └── @ AssocNode (location: (5,2)-(5,8)) + │ ├── flags: static_literal │ ├── key: │ │ @ SymbolNode (location: (5,2)-(5,6)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (5,2)-(5,3) = "'" │ │ ├── value_loc: (5,3)-(5,4) = "k" │ │ ├── closing_loc: (5,4)-(5,6) = "':" │ │ └── unescaped: "k" │ ├── value: │ │ @ IntegerNode (location: (5,6)-(5,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ └── operator_loc: ∅ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/call_args_assoc_trailing_comma.txt b/test/prism/snapshots/seattlerb/call_args_assoc_trailing_comma.txt index 0ba5891cf6c..00bc620f544 100644 --- a/test/prism/snapshots/seattlerb/call_args_assoc_trailing_comma.txt +++ b/test/prism/snapshots/seattlerb/call_args_assoc_trailing_comma.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,11)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,11)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,11)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -15,19 +17,20 @@ │ ├── flags: contains_keywords │ └── arguments: (length: 2) │ ├── @ IntegerNode (location: (1,2)-(1,3)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── @ KeywordHashNode (location: (1,5)-(1,9)) │ ├── flags: ∅ │ └── elements: (length: 1) │ └── @ AssocNode (location: (1,5)-(1,9)) + │ ├── flags: static_literal │ ├── key: │ │ @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── value: │ │ @ IntegerNode (location: (1,8)-(1,9)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ └── operator_loc: (1,6)-(1,8) = "=>" ├── closing_loc: (1,10)-(1,11) = ")" diff --git a/test/prism/snapshots/seattlerb/call_args_command.txt b/test/prism/snapshots/seattlerb/call_args_command.txt index f4a55ff58c3..6fe112f224a 100644 --- a/test/prism/snapshots/seattlerb/call_args_command.txt +++ b/test/prism/snapshots/seattlerb/call_args_command.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,9)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,9)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,9)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(1,1)) │ ├── flags: variable_call, ignore_visibility @@ -46,7 +48,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (1,8)-(1,9)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── closing_loc: ∅ │ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_array_arg.txt b/test/prism/snapshots/seattlerb/call_array_arg.txt index 95d2f4859d0..cec613bc582 100644 --- a/test/prism/snapshots/seattlerb/call_array_arg.txt +++ b/test/prism/snapshots/seattlerb/call_array_arg.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,13)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,13)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :== @@ -18,16 +20,16 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ ArrayNode (location: (1,5)-(1,13)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ SymbolNode (location: (1,6)-(1,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (1,6)-(1,7) = ":" │ │ │ ├── value_loc: (1,7)-(1,8) = "b" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "b" │ │ └── @ SymbolNode (location: (1,10)-(1,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,10)-(1,11) = ":" │ │ ├── value_loc: (1,11)-(1,12) = "c" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/call_array_block_call.txt b/test/prism/snapshots/seattlerb/call_array_block_call.txt index e02740e7f58..4a044924e9f 100644 --- a/test/prism/snapshots/seattlerb/call_array_block_call.txt +++ b/test/prism/snapshots/seattlerb/call_array_block_call.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,19)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,19)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,19)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -18,6 +20,7 @@ │ ├── flags: ∅ │ ├── elements: (length: 2) │ │ ├── @ NilNode (location: (1,4)-(1,7)) + │ │ │ └── flags: static_literal │ │ └── @ CallNode (location: (1,9)-(1,17)) │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ @@ -29,6 +32,7 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (1,11)-(1,17)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: ∅ diff --git a/test/prism/snapshots/seattlerb/call_array_lambda_block_call.txt b/test/prism/snapshots/seattlerb/call_array_lambda_block_call.txt index c6aa7228123..dca64e5f7b2 100644 --- a/test/prism/snapshots/seattlerb/call_array_lambda_block_call.txt +++ b/test/prism/snapshots/seattlerb/call_array_lambda_block_call.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(2,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(2,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(2,3)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -18,12 +20,14 @@ │ ├── flags: ∅ │ ├── elements: (length: 1) │ │ └── @ LambdaNode (location: (1,3)-(1,10)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── operator_loc: (1,3)-(1,5) = "->" │ │ ├── opening_loc: (1,8)-(1,9) = "{" │ │ ├── closing_loc: (1,9)-(1,10) = "}" │ │ ├── parameters: │ │ │ @ BlockParametersNode (location: (1,5)-(1,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── parameters: ∅ │ │ │ ├── locals: (length: 0) │ │ │ ├── opening_loc: (1,5)-(1,6) = "(" @@ -34,6 +38,7 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,12)-(2,3)) + ├── flags: ∅ ├── locals: [] ├── parameters: ∅ ├── body: ∅ diff --git a/test/prism/snapshots/seattlerb/call_array_lit_inline_hash.txt b/test/prism/snapshots/seattlerb/call_array_lit_inline_hash.txt index 091e21c00a6..f83c7a55e5b 100644 --- a/test/prism/snapshots/seattlerb/call_array_lit_inline_hash.txt +++ b/test/prism/snapshots/seattlerb/call_array_lit_inline_hash.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,16)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,16)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,16)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ ├── elements: (length: 2) │ │ ├── @ SymbolNode (location: (1,3)-(1,5)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (1,3)-(1,4) = ":" │ │ │ ├── value_loc: (1,4)-(1,5) = "b" │ │ │ ├── closing_loc: ∅ @@ -27,16 +29,17 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (1,7)-(1,14)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (1,7)-(1,9)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (1,7)-(1,8) = ":" │ │ │ ├── value_loc: (1,8)-(1,9) = "c" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "c" │ │ ├── value: │ │ │ @ IntegerNode (location: (1,13)-(1,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── operator_loc: (1,10)-(1,12) = "=>" │ ├── opening_loc: (1,2)-(1,3) = "[" diff --git a/test/prism/snapshots/seattlerb/call_assoc.txt b/test/prism/snapshots/seattlerb/call_assoc.txt index 60784e6095a..a4e4512a082 100644 --- a/test/prism/snapshots/seattlerb/call_assoc.txt +++ b/test/prism/snapshots/seattlerb/call_assoc.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,7)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -18,13 +20,14 @@ │ ├── flags: ∅ │ └── elements: (length: 1) │ └── @ AssocNode (location: (1,2)-(1,6)) + │ ├── flags: static_literal │ ├── key: │ │ @ IntegerNode (location: (1,2)-(1,3)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── value: │ │ @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ └── operator_loc: (1,3)-(1,5) = "=>" ├── closing_loc: (1,6)-(1,7) = ")" diff --git a/test/prism/snapshots/seattlerb/call_assoc_new.txt b/test/prism/snapshots/seattlerb/call_assoc_new.txt index dc25fb24931..6cbc942a6ba 100644 --- a/test/prism/snapshots/seattlerb/call_assoc_new.txt +++ b/test/prism/snapshots/seattlerb/call_assoc_new.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -18,16 +20,17 @@ │ ├── flags: symbol_keys │ └── elements: (length: 1) │ └── @ AssocNode (location: (1,2)-(1,5)) + │ ├── flags: static_literal │ ├── key: │ │ @ SymbolNode (location: (1,2)-(1,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (1,2)-(1,3) = "a" │ │ ├── closing_loc: (1,3)-(1,4) = ":" │ │ └── unescaped: "a" │ ├── value: │ │ @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ └── operator_loc: ∅ ├── closing_loc: (1,5)-(1,6) = ")" diff --git a/test/prism/snapshots/seattlerb/call_assoc_new_if_multiline.txt b/test/prism/snapshots/seattlerb/call_assoc_new_if_multiline.txt index b3d652e879c..e0236f3974f 100644 --- a/test/prism/snapshots/seattlerb/call_assoc_new_if_multiline.txt +++ b/test/prism/snapshots/seattlerb/call_assoc_new_if_multiline.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(5,4)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(5,4)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(5,4)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -18,19 +20,21 @@ │ ├── flags: symbol_keys │ └── elements: (length: 1) │ └── @ AssocNode (location: (1,2)-(5,3)) + │ ├── flags: ∅ │ ├── key: │ │ @ SymbolNode (location: (1,2)-(1,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (1,2)-(1,3) = "b" │ │ ├── closing_loc: (1,3)-(1,4) = ":" │ │ └── unescaped: "b" │ ├── value: │ │ @ IfNode (location: (1,5)-(5,3)) + │ │ ├── flags: newline │ │ ├── if_keyword_loc: (1,5)-(1,7) = "if" │ │ ├── predicate: │ │ │ @ SymbolNode (location: (1,8)-(1,10)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (1,8)-(1,9) = ":" │ │ │ ├── value_loc: (1,9)-(1,10) = "c" │ │ │ ├── closing_loc: ∅ @@ -38,18 +42,21 @@ │ │ ├── then_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (2,0)-(2,1)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ IntegerNode (location: (2,0)-(2,1)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: newline, static_literal, decimal │ │ │ └── value: 1 │ │ ├── consequent: │ │ │ @ ElseNode (location: (3,0)-(5,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── else_keyword_loc: (3,0)-(3,4) = "else" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (4,0)-(4,1)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (4,0)-(4,1)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── end_keyword_loc: (5,0)-(5,3) = "end" │ │ └── end_keyword_loc: (5,0)-(5,3) = "end" diff --git a/test/prism/snapshots/seattlerb/call_assoc_trailing_comma.txt b/test/prism/snapshots/seattlerb/call_assoc_trailing_comma.txt index b2012f0f75f..a240775d69b 100644 --- a/test/prism/snapshots/seattlerb/call_assoc_trailing_comma.txt +++ b/test/prism/snapshots/seattlerb/call_assoc_trailing_comma.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,8)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,8)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,8)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -18,13 +20,14 @@ │ ├── flags: ∅ │ └── elements: (length: 1) │ └── @ AssocNode (location: (1,2)-(1,6)) + │ ├── flags: static_literal │ ├── key: │ │ @ IntegerNode (location: (1,2)-(1,3)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── value: │ │ @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── operator_loc: (1,3)-(1,5) = "=>" ├── closing_loc: (1,7)-(1,8) = ")" diff --git a/test/prism/snapshots/seattlerb/call_bang_command_call.txt b/test/prism/snapshots/seattlerb/call_bang_command_call.txt index 5e4e10d953c..e226d652785 100644 --- a/test/prism/snapshots/seattlerb/call_bang_command_call.txt +++ b/test/prism/snapshots/seattlerb/call_bang_command_call.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,7)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,2)-(1,7)) │ ├── flags: ∅ @@ -28,7 +30,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── closing_loc: ∅ │ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_bang_squiggle.txt b/test/prism/snapshots/seattlerb/call_bang_squiggle.txt index bf11bc0136f..5c10841f739 100644 --- a/test/prism/snapshots/seattlerb/call_bang_squiggle.txt +++ b/test/prism/snapshots/seattlerb/call_bang_squiggle.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :!~ @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_begin_call_block_call.txt b/test/prism/snapshots/seattlerb/call_begin_call_block_call.txt index 1aa994c8e6d..240a3aaa76b 100644 --- a/test/prism/snapshots/seattlerb/call_begin_call_block_call.txt +++ b/test/prism/snapshots/seattlerb/call_begin_call_block_call.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(3,3)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -15,12 +17,14 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ BeginNode (location: (1,2)-(3,3)) + │ ├── flags: ∅ │ ├── begin_keyword_loc: (1,2)-(1,7) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (2,0)-(2,10)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (2,0)-(2,10)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (2,0)-(2,1)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -40,6 +44,7 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (2,4)-(2,10)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: ∅ diff --git a/test/prism/snapshots/seattlerb/call_block_arg_named.txt b/test/prism/snapshots/seattlerb/call_block_arg_named.txt index f87c29cf2e1..db6fc7a059a 100644 --- a/test/prism/snapshots/seattlerb/call_block_arg_named.txt +++ b/test/prism/snapshots/seattlerb/call_block_arg_named.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :x @@ -14,6 +16,7 @@ ├── closing_loc: (1,6)-(1,7) = ")" └── block: @ BlockArgumentNode (location: (1,2)-(1,6)) + ├── flags: ∅ ├── expression: │ @ CallNode (location: (1,3)-(1,6)) │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/seattlerb/call_carat.txt b/test/prism/snapshots/seattlerb/call_carat.txt index 856e9a7847f..88ed832aca9 100644 --- a/test/prism/snapshots/seattlerb/call_carat.txt +++ b/test/prism/snapshots/seattlerb/call_carat.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,5)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :^ @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_colon2.txt b/test/prism/snapshots/seattlerb/call_colon2.txt index 98bfc631260..85e39cd3636 100644 --- a/test/prism/snapshots/seattlerb/call_colon2.txt +++ b/test/prism/snapshots/seattlerb/call_colon2.txt @@ -1,12 +1,15 @@ @ ProgramNode (location: (1,0)-(1,4)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,4)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,4)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ ConstantReadNode (location: (1,0)-(1,1)) + │ ├── flags: ∅ │ └── name: :A ├── call_operator_loc: (1,1)-(1,3) = "::" ├── name: :b diff --git a/test/prism/snapshots/seattlerb/call_colon_parens.txt b/test/prism/snapshots/seattlerb/call_colon_parens.txt index 6d10171a2b1..19141c34133 100644 --- a/test/prism/snapshots/seattlerb/call_colon_parens.txt +++ b/test/prism/snapshots/seattlerb/call_colon_parens.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,5)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: (1,1)-(1,3) = "::" ├── name: :call diff --git a/test/prism/snapshots/seattlerb/call_div.txt b/test/prism/snapshots/seattlerb/call_div.txt index ba62fb87bd1..55a410977c3 100644 --- a/test/prism/snapshots/seattlerb/call_div.txt +++ b/test/prism/snapshots/seattlerb/call_div.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,5)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :/ @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_dot_parens.txt b/test/prism/snapshots/seattlerb/call_dot_parens.txt index c9b70846996..29b592a960d 100644 --- a/test/prism/snapshots/seattlerb/call_dot_parens.txt +++ b/test/prism/snapshots/seattlerb/call_dot_parens.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,4)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,4)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,4)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: (1,1)-(1,2) = "." ├── name: :call diff --git a/test/prism/snapshots/seattlerb/call_env.txt b/test/prism/snapshots/seattlerb/call_env.txt index fd1f95388ed..933621594f8 100644 --- a/test/prism/snapshots/seattlerb/call_env.txt +++ b/test/prism/snapshots/seattlerb/call_env.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,7)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(1,1)) │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/seattlerb/call_eq3.txt b/test/prism/snapshots/seattlerb/call_eq3.txt index e636e157257..52e4b00c5ce 100644 --- a/test/prism/snapshots/seattlerb/call_eq3.txt +++ b/test/prism/snapshots/seattlerb/call_eq3.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,7)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :=== @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_gt.txt b/test/prism/snapshots/seattlerb/call_gt.txt index 90f419a4122..b1ee64e57c3 100644 --- a/test/prism/snapshots/seattlerb/call_gt.txt +++ b/test/prism/snapshots/seattlerb/call_gt.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,5)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :> @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_kwsplat.txt b/test/prism/snapshots/seattlerb/call_kwsplat.txt index e0620dc5f0b..17773e76933 100644 --- a/test/prism/snapshots/seattlerb/call_kwsplat.txt +++ b/test/prism/snapshots/seattlerb/call_kwsplat.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -18,9 +20,10 @@ │ ├── flags: ∅ │ └── elements: (length: 1) │ └── @ AssocSplatNode (location: (1,2)-(1,5)) + │ ├── flags: ∅ │ ├── value: │ │ @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (1,2)-(1,4) = "**" ├── closing_loc: (1,5)-(1,6) = ")" diff --git a/test/prism/snapshots/seattlerb/call_leading_dots.txt b/test/prism/snapshots/seattlerb/call_leading_dots.txt index e8435d7e7a1..5562afcd702 100644 --- a/test/prism/snapshots/seattlerb/call_leading_dots.txt +++ b/test/prism/snapshots/seattlerb/call_leading_dots.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(3,2)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,2)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(3,2)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(2,2)) │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/call_leading_dots_comment.txt b/test/prism/snapshots/seattlerb/call_leading_dots_comment.txt index e5dfb723723..f285e42cbf4 100644 --- a/test/prism/snapshots/seattlerb/call_leading_dots_comment.txt +++ b/test/prism/snapshots/seattlerb/call_leading_dots_comment.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(4,2)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,2)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(4,2)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(2,2)) │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/call_lt.txt b/test/prism/snapshots/seattlerb/call_lt.txt index 0020494e571..6c5b5f22139 100644 --- a/test/prism/snapshots/seattlerb/call_lt.txt +++ b/test/prism/snapshots/seattlerb/call_lt.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,5)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :< @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_lte.txt b/test/prism/snapshots/seattlerb/call_lte.txt index e6630a7f281..9fadb1f981b 100644 --- a/test/prism/snapshots/seattlerb/call_lte.txt +++ b/test/prism/snapshots/seattlerb/call_lte.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :<= @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_not.txt b/test/prism/snapshots/seattlerb/call_not.txt index 86c68923031..e9df80fb9f2 100644 --- a/test/prism/snapshots/seattlerb/call_not.txt +++ b/test/prism/snapshots/seattlerb/call_not.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,4)-(1,6)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 42 ├── call_operator_loc: ∅ ├── name: :! diff --git a/test/prism/snapshots/seattlerb/call_pipe.txt b/test/prism/snapshots/seattlerb/call_pipe.txt index 855e986ef6f..8cf68211a99 100644 --- a/test/prism/snapshots/seattlerb/call_pipe.txt +++ b/test/prism/snapshots/seattlerb/call_pipe.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,5)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :| @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_rshift.txt b/test/prism/snapshots/seattlerb/call_rshift.txt index 26e593db187..28948a044f9 100644 --- a/test/prism/snapshots/seattlerb/call_rshift.txt +++ b/test/prism/snapshots/seattlerb/call_rshift.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :>> @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_self_brackets.txt b/test/prism/snapshots/seattlerb/call_self_brackets.txt index 16ca69b5c29..e4f5e2c4131 100644 --- a/test/prism/snapshots/seattlerb/call_self_brackets.txt +++ b/test/prism/snapshots/seattlerb/call_self_brackets.txt @@ -1,12 +1,15 @@ @ ProgramNode (location: (1,0)-(1,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,7)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: │ @ SelfNode (location: (1,0)-(1,4)) + │ └── flags: ∅ ├── call_operator_loc: ∅ ├── name: :[] ├── message_loc: (1,4)-(1,7) = "[1]" @@ -16,7 +19,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── closing_loc: (1,6)-(1,7) = "]" └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_spaceship.txt b/test/prism/snapshots/seattlerb/call_spaceship.txt index 8d43c3f9710..4ea67f2e00b 100644 --- a/test/prism/snapshots/seattlerb/call_spaceship.txt +++ b/test/prism/snapshots/seattlerb/call_spaceship.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,7)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :<=> @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_stabby_do_end_with_block.txt b/test/prism/snapshots/seattlerb/call_stabby_do_end_with_block.txt index 242db9e9cb5..0e83d334cac 100644 --- a/test/prism/snapshots/seattlerb/call_stabby_do_end_with_block.txt +++ b/test/prism/snapshots/seattlerb/call_stabby_do_end_with_block.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,22)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,22)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,22)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -15,6 +17,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ LambdaNode (location: (1,2)-(1,13)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── operator_loc: (1,2)-(1,4) = "->" │ ├── opening_loc: (1,5)-(1,7) = "do" @@ -22,20 +25,23 @@ │ ├── parameters: ∅ │ └── body: │ @ StatementsNode (location: (1,8)-(1,9)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ IntegerNode (location: (1,8)-(1,9)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 1 ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,14)-(1,22)) + ├── flags: ∅ ├── locals: [] ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (1,17)-(1,18)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ IntegerNode (location: (1,17)-(1,18)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 2 ├── opening_loc: (1,14)-(1,16) = "do" └── closing_loc: (1,19)-(1,22) = "end" diff --git a/test/prism/snapshots/seattlerb/call_stabby_with_braces_block.txt b/test/prism/snapshots/seattlerb/call_stabby_with_braces_block.txt index 7c3ab8dad8f..705f8b8d022 100644 --- a/test/prism/snapshots/seattlerb/call_stabby_with_braces_block.txt +++ b/test/prism/snapshots/seattlerb/call_stabby_with_braces_block.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,19)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,19)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,19)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -15,6 +17,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ LambdaNode (location: (1,2)-(1,10)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── operator_loc: (1,2)-(1,4) = "->" │ ├── opening_loc: (1,5)-(1,6) = "{" @@ -22,20 +25,23 @@ │ ├── parameters: ∅ │ └── body: │ @ StatementsNode (location: (1,7)-(1,8)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ IntegerNode (location: (1,7)-(1,8)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 1 ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,11)-(1,19)) + ├── flags: ∅ ├── locals: [] ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (1,14)-(1,15)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ IntegerNode (location: (1,14)-(1,15)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 2 ├── opening_loc: (1,11)-(1,13) = "do" └── closing_loc: (1,16)-(1,19) = "end" diff --git a/test/prism/snapshots/seattlerb/call_star.txt b/test/prism/snapshots/seattlerb/call_star.txt index 49aee1672c7..06bee81f30d 100644 --- a/test/prism/snapshots/seattlerb/call_star.txt +++ b/test/prism/snapshots/seattlerb/call_star.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,5)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :* @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_star2.txt b/test/prism/snapshots/seattlerb/call_star2.txt index cc2532cc7c8..bd367d2e758 100644 --- a/test/prism/snapshots/seattlerb/call_star2.txt +++ b/test/prism/snapshots/seattlerb/call_star2.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,6)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :** @@ -18,7 +20,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── closing_loc: ∅ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_trailing_comma.txt b/test/prism/snapshots/seattlerb/call_trailing_comma.txt index fe28a3ad3eb..01cb77a25a0 100644 --- a/test/prism/snapshots/seattlerb/call_trailing_comma.txt +++ b/test/prism/snapshots/seattlerb/call_trailing_comma.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,5)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -15,7 +17,7 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ IntegerNode (location: (1,2)-(1,3)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── closing_loc: (1,4)-(1,5) = ")" └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_trailing_dots.txt b/test/prism/snapshots/seattlerb/call_trailing_dots.txt index b0e23eb27b9..73ffd855ad8 100644 --- a/test/prism/snapshots/seattlerb/call_trailing_dots.txt +++ b/test/prism/snapshots/seattlerb/call_trailing_dots.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(3,1)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,1)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(3,1)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(2,1)) │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/call_unary_bang.txt b/test/prism/snapshots/seattlerb/call_unary_bang.txt index 782cc83b103..b08f0706930 100644 --- a/test/prism/snapshots/seattlerb/call_unary_bang.txt +++ b/test/prism/snapshots/seattlerb/call_unary_bang.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(1,2)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,2)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,2)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,1)-(1,2)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── call_operator_loc: ∅ ├── name: :! diff --git a/test/prism/snapshots/seattlerb/case_in.txt b/test/prism/snapshots/seattlerb/case_in.txt index 950d66647e6..6df3b407a68 100644 --- a/test/prism/snapshots/seattlerb/case_in.txt +++ b/test/prism/snapshots/seattlerb/case_in.txt @@ -1,34 +1,42 @@ @ ProgramNode (location: (1,0)-(111,3)) +├── flags: ∅ ├── locals: [:b, :_, :lhs, :x, :rhs, :c, :e] └── statements: @ StatementsNode (location: (1,0)-(111,3)) + ├── flags: ∅ └── body: (length: 28) ├── @ CaseMatchNode (location: (1,0)-(3,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (1,5)-(1,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,5)-(1,6) = ":" │ │ ├── value_loc: (1,6)-(1,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (2,0)-(2,8)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ HashPatternNode (location: (2,4)-(2,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── elements: (length: 1) │ │ │ │ └── @ AssocNode (location: (2,4)-(2,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (2,4)-(2,8)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: (2,4)-(2,5) = "\"" │ │ │ │ │ ├── value_loc: (2,5)-(2,6) = "b" │ │ │ │ │ ├── closing_loc: (2,6)-(2,8) = "\":" │ │ │ │ │ └── unescaped: "b" │ │ │ │ ├── value: │ │ │ │ │ @ ImplicitNode (location: (2,5)-(2,6)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── value: │ │ │ │ │ @ LocalVariableTargetNode (location: (2,5)-(2,6)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :b │ │ │ │ │ └── depth: 0 │ │ │ │ └── operator_loc: ∅ @@ -42,27 +50,29 @@ │ ├── case_keyword_loc: (1,0)-(1,4) = "case" │ └── end_keyword_loc: (3,0)-(3,3) = "end" ├── @ CaseMatchNode (location: (5,0)-(7,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (5,5)-(5,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (5,5)-(5,6) = ":" │ │ ├── value_loc: (5,6)-(5,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (6,0)-(6,10)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayNode (location: (6,3)-(6,10)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 2) │ │ │ │ ├── @ SymbolNode (location: (6,6)-(6,7)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (6,6)-(6,7) = "a" │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── unescaped: "a" │ │ │ │ └── @ SymbolNode (location: (6,8)-(6,9)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (6,8)-(6,9) = "b" │ │ │ │ ├── closing_loc: ∅ @@ -76,15 +86,17 @@ │ ├── case_keyword_loc: (5,0)-(5,4) = "case" │ └── end_keyword_loc: (7,0)-(7,3) = "end" ├── @ CaseMatchNode (location: (9,0)-(11,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (9,5)-(9,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (9,5)-(9,6) = ":" │ │ ├── value_loc: (9,6)-(9,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (10,0)-(10,10)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayNode (location: (10,3)-(10,10)) │ │ │ ├── flags: ∅ @@ -110,27 +122,29 @@ │ ├── case_keyword_loc: (9,0)-(9,4) = "case" │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ CaseMatchNode (location: (13,0)-(15,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (13,5)-(13,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (13,5)-(13,6) = ":" │ │ ├── value_loc: (13,6)-(13,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (14,0)-(14,10)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayNode (location: (14,3)-(14,10)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── elements: (length: 2) │ │ │ │ ├── @ SymbolNode (location: (14,6)-(14,7)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (14,6)-(14,7) = "a" │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── unescaped: "a" │ │ │ │ └── @ SymbolNode (location: (14,8)-(14,9)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (14,8)-(14,9) = "b" │ │ │ │ ├── closing_loc: ∅ @@ -144,15 +158,17 @@ │ ├── case_keyword_loc: (13,0)-(13,4) = "case" │ └── end_keyword_loc: (15,0)-(15,3) = "end" ├── @ CaseMatchNode (location: (17,0)-(19,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (17,5)-(17,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (17,5)-(17,6) = ":" │ │ ├── value_loc: (17,6)-(17,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (18,0)-(18,10)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayNode (location: (18,3)-(18,10)) │ │ │ ├── flags: ∅ @@ -178,24 +194,27 @@ │ ├── case_keyword_loc: (17,0)-(17,4) = "case" │ └── end_keyword_loc: (19,0)-(19,3) = "end" ├── @ CaseMatchNode (location: (21,0)-(23,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (21,5)-(21,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (21,5)-(21,6) = ":" │ │ ├── value_loc: (21,6)-(21,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (22,0)-(22,10)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ParenthesesNode (location: (22,3)-(22,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ RangeNode (location: (22,4)-(22,9)) - │ │ │ │ ├── flags: exclude_end + │ │ │ │ ├── flags: static_literal, exclude_end │ │ │ │ ├── left: ∅ │ │ │ │ ├── right: │ │ │ │ │ @ IntegerNode (location: (22,7)-(22,9)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 10 │ │ │ │ └── operator_loc: (22,4)-(22,7) = "..." │ │ │ ├── opening_loc: (22,3)-(22,4) = "(" @@ -207,24 +226,27 @@ │ ├── case_keyword_loc: (21,0)-(21,4) = "case" │ └── end_keyword_loc: (23,0)-(23,3) = "end" ├── @ CaseMatchNode (location: (25,0)-(27,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (25,5)-(25,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (25,5)-(25,6) = ":" │ │ ├── value_loc: (25,6)-(25,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (26,0)-(26,9)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ParenthesesNode (location: (26,3)-(26,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ RangeNode (location: (26,4)-(26,8)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: static_literal │ │ │ │ ├── left: ∅ │ │ │ │ ├── right: │ │ │ │ │ @ IntegerNode (location: (26,6)-(26,8)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 10 │ │ │ │ └── operator_loc: (26,4)-(26,6) = ".." │ │ │ ├── opening_loc: (26,3)-(26,4) = "(" @@ -236,23 +258,26 @@ │ ├── case_keyword_loc: (25,0)-(25,4) = "case" │ └── end_keyword_loc: (27,0)-(27,3) = "end" ├── @ CaseMatchNode (location: (29,0)-(31,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (29,5)-(29,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (29,5)-(29,6) = ":" │ │ ├── value_loc: (29,6)-(29,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (30,0)-(30,9)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ParenthesesNode (location: (30,3)-(30,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ RangeNode (location: (30,4)-(30,8)) - │ │ │ │ ├── flags: exclude_end + │ │ │ │ ├── flags: static_literal, exclude_end │ │ │ │ ├── left: │ │ │ │ │ @ IntegerNode (location: (30,4)-(30,5)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── right: ∅ │ │ │ │ └── operator_loc: (30,5)-(30,8) = "..." @@ -265,27 +290,30 @@ │ ├── case_keyword_loc: (29,0)-(29,4) = "case" │ └── end_keyword_loc: (31,0)-(31,3) = "end" ├── @ CaseMatchNode (location: (33,0)-(35,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (33,5)-(33,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (33,5)-(33,6) = ":" │ │ ├── value_loc: (33,6)-(33,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (34,0)-(34,10)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ParenthesesNode (location: (34,3)-(34,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ RangeNode (location: (34,4)-(34,9)) - │ │ │ │ ├── flags: exclude_end + │ │ │ │ ├── flags: static_literal, exclude_end │ │ │ │ ├── left: │ │ │ │ │ @ IntegerNode (location: (34,4)-(34,5)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── right: │ │ │ │ │ @ IntegerNode (location: (34,8)-(34,9)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 3 │ │ │ │ └── operator_loc: (34,5)-(34,8) = "..." │ │ │ ├── opening_loc: (34,3)-(34,4) = "(" @@ -297,20 +325,23 @@ │ ├── case_keyword_loc: (33,0)-(33,4) = "case" │ └── end_keyword_loc: (35,0)-(35,3) = "end" ├── @ CaseMatchNode (location: (37,0)-(39,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (37,5)-(37,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (37,5)-(37,6) = ":" │ │ ├── value_loc: (37,6)-(37,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (38,0)-(38,7)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ParenthesesNode (location: (38,3)-(38,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ IntegerNode (location: (38,4)-(38,6)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 42 │ │ │ ├── opening_loc: (38,3)-(38,4) = "(" │ │ │ └── closing_loc: (38,6)-(38,7) = ")" @@ -321,21 +352,25 @@ │ ├── case_keyword_loc: (37,0)-(37,4) = "case" │ └── end_keyword_loc: (39,0)-(39,3) = "end" ├── @ CaseMatchNode (location: (41,0)-(43,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (41,5)-(41,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (41,5)-(41,6) = ":" │ │ ├── value_loc: (41,6)-(41,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (42,0)-(42,8)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ HashPatternNode (location: (42,3)-(42,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── elements: (length: 0) │ │ │ ├── rest: │ │ │ │ @ NoKeywordsParameterNode (location: (42,3)-(42,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (42,3)-(42,5) = "**" │ │ │ │ └── keyword_loc: (42,5)-(42,8) = "nil" │ │ │ ├── opening_loc: ∅ @@ -347,18 +382,20 @@ │ ├── case_keyword_loc: (41,0)-(41,4) = "case" │ └── end_keyword_loc: (43,0)-(43,3) = "end" ├── @ CaseMatchNode (location: (45,0)-(47,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (45,5)-(45,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (45,5)-(45,6) = ":" │ │ ├── value_loc: (45,6)-(45,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (46,0)-(46,11)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ RegularExpressionNode (location: (46,3)-(46,11)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (46,3)-(46,4) = "/" │ │ │ ├── content_loc: (46,4)-(46,10) = "regexp" │ │ │ ├── closing_loc: (46,10)-(46,11) = "/" @@ -370,35 +407,40 @@ │ ├── case_keyword_loc: (45,0)-(45,4) = "case" │ └── end_keyword_loc: (47,0)-(47,3) = "end" ├── @ CaseMatchNode (location: (49,0)-(51,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (49,5)-(49,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (49,5)-(49,6) = ":" │ │ ├── value_loc: (49,6)-(49,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (50,0)-(50,13)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (50,3)-(50,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ SymbolNode (location: (50,3)-(50,5)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (50,3)-(50,4) = ":" │ │ │ │ ├── value_loc: (50,4)-(50,5) = "b" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "b" │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (50,7)-(50,9)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (50,7)-(50,8) = "*" │ │ │ │ └── expression: │ │ │ │ @ LocalVariableTargetNode (location: (50,8)-(50,9)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :_ │ │ │ │ └── depth: 0 │ │ │ ├── posts: (length: 1) │ │ │ │ └── @ SymbolNode (location: (50,11)-(50,13)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (50,11)-(50,12) = ":" │ │ │ │ ├── value_loc: (50,12)-(50,13) = "c" │ │ │ │ ├── closing_loc: ∅ @@ -412,30 +454,34 @@ │ ├── case_keyword_loc: (49,0)-(49,4) = "case" │ └── end_keyword_loc: (51,0)-(51,3) = "end" ├── @ CaseMatchNode (location: (53,0)-(55,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (53,5)-(53,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (53,5)-(53,6) = ":" │ │ ├── value_loc: (53,6)-(53,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (54,0)-(54,11)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (54,3)-(54,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── requireds: (length: 2) │ │ │ │ ├── @ SymbolNode (location: (54,3)-(54,5)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: (54,3)-(54,4) = ":" │ │ │ │ │ ├── value_loc: (54,4)-(54,5) = "b" │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── unescaped: "b" │ │ │ │ └── @ ArrayPatternNode (location: (54,7)-(54,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ └── @ SymbolNode (location: (54,8)-(54,10)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: (54,8)-(54,9) = ":" │ │ │ │ │ ├── value_loc: (54,9)-(54,10) = "c" │ │ │ │ │ ├── closing_loc: ∅ @@ -455,19 +501,23 @@ │ ├── case_keyword_loc: (53,0)-(53,4) = "case" │ └── end_keyword_loc: (55,0)-(55,3) = "end" ├── @ CaseMatchNode (location: (57,0)-(59,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (57,5)-(57,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (57,5)-(57,6) = ":" │ │ ├── value_loc: (57,6)-(57,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (58,0)-(58,11)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (58,3)-(58,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: │ │ │ │ @ ConstantReadNode (location: (58,3)-(58,9)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :Symbol │ │ │ ├── requireds: (length: 0) │ │ │ ├── rest: ∅ @@ -481,36 +531,45 @@ │ ├── case_keyword_loc: (57,0)-(57,4) = "case" │ └── end_keyword_loc: (59,0)-(59,3) = "end" ├── @ CaseMatchNode (location: (61,0)-(63,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (61,5)-(61,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (61,5)-(61,6) = ":" │ │ ├── value_loc: (61,6)-(61,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (62,0)-(62,24)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ FindPatternNode (location: (62,3)-(62,24)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: │ │ │ │ @ ConstantReadNode (location: (62,3)-(62,9)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :Symbol │ │ │ ├── left: │ │ │ │ @ SplatNode (location: (62,10)-(62,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (62,10)-(62,11) = "*" │ │ │ │ └── expression: │ │ │ │ @ LocalVariableTargetNode (location: (62,11)-(62,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :lhs │ │ │ │ └── depth: 0 │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ LocalVariableTargetNode (location: (62,16)-(62,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :x │ │ │ │ └── depth: 0 │ │ │ ├── right: │ │ │ │ @ SplatNode (location: (62,19)-(62,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (62,19)-(62,20) = "*" │ │ │ │ └── expression: │ │ │ │ @ LocalVariableTargetNode (location: (62,20)-(62,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :rhs │ │ │ │ └── depth: 0 │ │ │ ├── opening_loc: (62,9)-(62,10) = "(" @@ -522,36 +581,45 @@ │ ├── case_keyword_loc: (61,0)-(61,4) = "case" │ └── end_keyword_loc: (63,0)-(63,3) = "end" ├── @ CaseMatchNode (location: (65,0)-(67,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (65,5)-(65,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (65,5)-(65,6) = ":" │ │ ├── value_loc: (65,6)-(65,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (66,0)-(66,24)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ FindPatternNode (location: (66,3)-(66,24)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: │ │ │ │ @ ConstantReadNode (location: (66,3)-(66,9)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :Symbol │ │ │ ├── left: │ │ │ │ @ SplatNode (location: (66,10)-(66,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (66,10)-(66,11) = "*" │ │ │ │ └── expression: │ │ │ │ @ LocalVariableTargetNode (location: (66,11)-(66,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :lhs │ │ │ │ └── depth: 0 │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ LocalVariableTargetNode (location: (66,16)-(66,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :x │ │ │ │ └── depth: 0 │ │ │ ├── right: │ │ │ │ @ SplatNode (location: (66,19)-(66,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (66,19)-(66,20) = "*" │ │ │ │ └── expression: │ │ │ │ @ LocalVariableTargetNode (location: (66,20)-(66,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :rhs │ │ │ │ └── depth: 0 │ │ │ ├── opening_loc: (66,9)-(66,10) = "[" @@ -563,28 +631,34 @@ │ ├── case_keyword_loc: (65,0)-(65,4) = "case" │ └── end_keyword_loc: (67,0)-(67,3) = "end" ├── @ CaseMatchNode (location: (69,0)-(71,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (69,5)-(69,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (69,5)-(69,6) = ":" │ │ ├── value_loc: (69,6)-(69,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (70,0)-(70,22)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (70,3)-(70,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── requireds: (length: 2) │ │ │ │ ├── @ LambdaNode (location: (70,4)-(70,18)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── locals: [:b] │ │ │ │ │ ├── operator_loc: (70,4)-(70,6) = "->" │ │ │ │ │ ├── opening_loc: (70,10)-(70,11) = "{" │ │ │ │ │ ├── closing_loc: (70,17)-(70,18) = "}" │ │ │ │ │ ├── parameters: │ │ │ │ │ │ @ BlockParametersNode (location: (70,6)-(70,9)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── parameters: │ │ │ │ │ │ │ @ ParametersNode (location: (70,7)-(70,8)) + │ │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ │ │ │ └── @ RequiredParameterNode (location: (70,7)-(70,8)) │ │ │ │ │ │ │ │ ├── flags: ∅ @@ -600,9 +674,12 @@ │ │ │ │ │ │ └── closing_loc: (70,8)-(70,9) = ")" │ │ │ │ │ └── body: │ │ │ │ │ @ StatementsNode (location: (70,12)-(70,16)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ TrueNode (location: (70,12)-(70,16)) + │ │ │ │ │ └── flags: newline, static_literal │ │ │ │ └── @ LocalVariableTargetNode (location: (70,20)-(70,21)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :c │ │ │ │ └── depth: 0 │ │ │ ├── rest: ∅ @@ -616,49 +693,58 @@ │ ├── case_keyword_loc: (69,0)-(69,4) = "case" │ └── end_keyword_loc: (71,0)-(71,3) = "end" ├── @ CaseMatchNode (location: (73,0)-(75,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (73,5)-(73,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (73,5)-(73,6) = ":" │ │ ├── value_loc: (73,6)-(73,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (74,0)-(74,28)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (74,3)-(74,28)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── requireds: (length: 4) │ │ │ │ ├── @ SymbolNode (location: (74,4)-(74,6)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: (74,4)-(74,5) = ":" │ │ │ │ │ ├── value_loc: (74,5)-(74,6) = "a" │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── unescaped: "a" │ │ │ │ ├── @ LocalVariableTargetNode (location: (74,8)-(74,9)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :b │ │ │ │ │ └── depth: 0 │ │ │ │ ├── @ LocalVariableTargetNode (location: (74,11)-(74,12)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :c │ │ │ │ │ └── depth: 0 │ │ │ │ └── @ ArrayPatternNode (location: (74,14)-(74,27)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ └── @ SymbolNode (location: (74,15)-(74,17)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: (74,15)-(74,16) = ":" │ │ │ │ │ ├── value_loc: (74,16)-(74,17) = "d" │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── unescaped: "d" │ │ │ │ ├── rest: │ │ │ │ │ @ SplatNode (location: (74,19)-(74,21)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── operator_loc: (74,19)-(74,20) = "*" │ │ │ │ │ └── expression: │ │ │ │ │ @ LocalVariableTargetNode (location: (74,20)-(74,21)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :e │ │ │ │ │ └── depth: 0 │ │ │ │ ├── posts: (length: 1) │ │ │ │ │ └── @ NilNode (location: (74,23)-(74,26)) + │ │ │ │ │ └── flags: static_literal │ │ │ │ ├── opening_loc: (74,14)-(74,15) = "[" │ │ │ │ └── closing_loc: (74,26)-(74,27) = "]" │ │ │ ├── rest: ∅ @@ -672,27 +758,33 @@ │ ├── case_keyword_loc: (73,0)-(73,4) = "case" │ └── end_keyword_loc: (75,0)-(75,3) = "end" ├── @ CaseMatchNode (location: (77,0)-(79,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (77,5)-(77,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (77,5)-(77,6) = ":" │ │ ├── value_loc: (77,6)-(77,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (78,0)-(78,12)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (78,3)-(78,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ ConstantReadNode (location: (78,4)-(78,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :A │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (78,7)-(78,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (78,7)-(78,8) = "*" │ │ │ │ └── expression: ∅ │ │ │ ├── posts: (length: 1) │ │ │ │ └── @ ConstantReadNode (location: (78,10)-(78,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :B │ │ │ ├── opening_loc: (78,3)-(78,4) = "[" │ │ │ └── closing_loc: (78,11)-(78,12) = "]" @@ -703,29 +795,34 @@ │ ├── case_keyword_loc: (77,0)-(77,4) = "case" │ └── end_keyword_loc: (79,0)-(79,3) = "end" ├── @ CaseMatchNode (location: (81,0)-(83,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (81,5)-(81,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (81,5)-(81,6) = ":" │ │ ├── value_loc: (81,6)-(81,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (82,0)-(82,22)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (82,3)-(82,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── requireds: (length: 2) │ │ │ │ ├── @ ArrayPatternNode (location: (82,4)-(82,11)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── constant: ∅ │ │ │ │ │ ├── requireds: (length: 2) │ │ │ │ │ │ ├── @ SymbolNode (location: (82,5)-(82,7)) - │ │ │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ │ │ ├── opening_loc: (82,5)-(82,6) = ":" │ │ │ │ │ │ │ ├── value_loc: (82,6)-(82,7) = "b" │ │ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ │ └── unescaped: "b" │ │ │ │ │ │ └── @ LocalVariableTargetNode (location: (82,9)-(82,10)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── name: :c │ │ │ │ │ │ └── depth: 0 │ │ │ │ │ ├── rest: ∅ @@ -733,17 +830,20 @@ │ │ │ │ │ ├── opening_loc: (82,4)-(82,5) = "[" │ │ │ │ │ └── closing_loc: (82,10)-(82,11) = "]" │ │ │ │ └── @ ArrayPatternNode (location: (82,13)-(82,21)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── requireds: (length: 2) │ │ │ │ │ ├── @ SymbolNode (location: (82,14)-(82,16)) - │ │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ │ ├── opening_loc: (82,14)-(82,15) = ":" │ │ │ │ │ │ ├── value_loc: (82,15)-(82,16) = "d" │ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ └── unescaped: "d" │ │ │ │ │ └── @ PinnedVariableNode (location: (82,18)-(82,20)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── variable: │ │ │ │ │ │ @ LocalVariableReadNode (location: (82,19)-(82,20)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── name: :e │ │ │ │ │ │ └── depth: 0 │ │ │ │ │ └── operator_loc: (82,18)-(82,19) = "^" @@ -762,17 +862,20 @@ │ ├── case_keyword_loc: (81,0)-(81,4) = "case" │ └── end_keyword_loc: (83,0)-(83,3) = "end" ├── @ CaseMatchNode (location: (85,0)-(87,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (85,5)-(85,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (85,5)-(85,6) = ":" │ │ ├── value_loc: (85,6)-(85,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (86,0)-(86,5)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (86,3)-(86,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── requireds: (length: 0) │ │ │ ├── rest: ∅ @@ -786,20 +889,24 @@ │ ├── case_keyword_loc: (85,0)-(85,4) = "case" │ └── end_keyword_loc: (87,0)-(87,3) = "end" ├── @ CaseMatchNode (location: (89,0)-(91,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (89,5)-(89,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (89,5)-(89,6) = ":" │ │ ├── value_loc: (89,6)-(89,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (90,0)-(90,9)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (90,3)-(90,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ PinnedExpressionNode (location: (90,4)-(90,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── expression: │ │ │ │ │ @ CallNode (location: (90,6)-(90,7)) │ │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -825,32 +932,41 @@ │ ├── case_keyword_loc: (89,0)-(89,4) = "case" │ └── end_keyword_loc: (91,0)-(91,3) = "end" ├── @ CaseMatchNode (location: (93,0)-(95,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (93,5)-(93,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (93,5)-(93,6) = ":" │ │ ├── value_loc: (93,6)-(93,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (94,0)-(94,19)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (94,3)-(94,19)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── requireds: (length: 3) │ │ │ │ ├── @ PinnedVariableNode (location: (94,4)-(94,7)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── variable: │ │ │ │ │ │ @ InstanceVariableReadNode (location: (94,5)-(94,7)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── name: :@a │ │ │ │ │ └── operator_loc: (94,4)-(94,5) = "^" │ │ │ │ ├── @ PinnedVariableNode (location: (94,9)-(94,12)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── variable: │ │ │ │ │ │ @ GlobalVariableReadNode (location: (94,10)-(94,12)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── name: :$b │ │ │ │ │ └── operator_loc: (94,9)-(94,10) = "^" │ │ │ │ └── @ PinnedVariableNode (location: (94,14)-(94,18)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── variable: │ │ │ │ │ @ ClassVariableReadNode (location: (94,15)-(94,18)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── name: :@@c │ │ │ │ └── operator_loc: (94,14)-(94,15) = "^" │ │ │ ├── rest: ∅ @@ -864,15 +980,17 @@ │ ├── case_keyword_loc: (93,0)-(93,4) = "case" │ └── end_keyword_loc: (95,0)-(95,3) = "end" ├── @ CaseMatchNode (location: (97,0)-(99,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (97,5)-(97,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (97,5)-(97,6) = ":" │ │ ├── value_loc: (97,6)-(97,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (98,0)-(98,12)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ XStringNode (location: (98,3)-(98,12)) │ │ │ ├── flags: ∅ @@ -887,22 +1005,28 @@ │ ├── case_keyword_loc: (97,0)-(97,4) = "case" │ └── end_keyword_loc: (99,0)-(99,3) = "end" ├── @ CaseMatchNode (location: (101,0)-(103,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (101,5)-(101,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (101,5)-(101,6) = ":" │ │ ├── value_loc: (101,6)-(101,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (102,0)-(102,16)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (102,3)-(102,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── requireds: (length: 3) │ │ │ │ ├── @ NilNode (location: (102,3)-(102,6)) + │ │ │ │ │ └── flags: static_literal │ │ │ │ ├── @ NilNode (location: (102,8)-(102,11)) + │ │ │ │ │ └── flags: static_literal │ │ │ │ └── @ NilNode (location: (102,13)-(102,16)) + │ │ │ │ └── flags: static_literal │ │ │ ├── rest: ∅ │ │ │ ├── posts: (length: 0) │ │ │ ├── opening_loc: ∅ @@ -914,31 +1038,37 @@ │ ├── case_keyword_loc: (101,0)-(101,4) = "case" │ └── end_keyword_loc: (103,0)-(103,3) = "end" ├── @ CaseMatchNode (location: (105,0)-(107,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ SymbolNode (location: (105,5)-(105,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (105,5)-(105,6) = ":" │ │ ├── value_loc: (105,6)-(105,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (106,0)-(106,11)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ HashPatternNode (location: (106,3)-(106,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: ∅ │ │ │ ├── elements: (length: 1) │ │ │ │ └── @ AssocNode (location: (106,5)-(106,9)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (106,5)-(106,9)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: (106,5)-(106,6) = "\"" │ │ │ │ │ ├── value_loc: (106,6)-(106,7) = "b" │ │ │ │ │ ├── closing_loc: (106,7)-(106,9) = "\":" │ │ │ │ │ └── unescaped: "b" │ │ │ │ ├── value: │ │ │ │ │ @ ImplicitNode (location: (106,6)-(106,7)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── value: │ │ │ │ │ @ LocalVariableTargetNode (location: (106,6)-(106,7)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :b │ │ │ │ │ └── depth: 0 │ │ │ │ └── operator_loc: ∅ @@ -952,17 +1082,20 @@ │ ├── case_keyword_loc: (105,0)-(105,4) = "case" │ └── end_keyword_loc: (107,0)-(107,3) = "end" └── @ CaseMatchNode (location: (109,0)-(111,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (109,5)-(109,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (109,5)-(109,6) = ":" │ ├── value_loc: (109,6)-(109,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (110,0)-(110,5)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ HashPatternNode (location: (110,3)-(110,5)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── elements: (length: 0) │ │ ├── rest: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_31.txt b/test/prism/snapshots/seattlerb/case_in_31.txt index fdf5ce2a29e..f2bb9dac287 100644 --- a/test/prism/snapshots/seattlerb/case_in_31.txt +++ b/test/prism/snapshots/seattlerb/case_in_31.txt @@ -1,33 +1,40 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [:c] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(4,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(3,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (2,3)-(2,11)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ SymbolNode (location: (2,4)-(2,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (2,4)-(2,5) = ":" │ │ │ ├── value_loc: (2,5)-(2,6) = "b" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "b" │ │ ├── rest: │ │ │ @ SplatNode (location: (2,8)-(2,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (2,8)-(2,9) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (2,9)-(2,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :c │ │ │ └── depth: 0 │ │ ├── posts: (length: 0) @@ -35,9 +42,10 @@ │ │ └── closing_loc: (2,10)-(2,11) = "]" │ ├── statements: │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ ├── value_loc: (3,3)-(3,4) = "d" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_37.txt b/test/prism/snapshots/seattlerb/case_in_37.txt index 1a1d887b4fd..9083ac2d419 100644 --- a/test/prism/snapshots/seattlerb/case_in_37.txt +++ b/test/prism/snapshots/seattlerb/case_in_37.txt @@ -1,38 +1,47 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(4,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(3,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ HashPatternNode (location: (2,3)-(2,19)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── elements: (length: 1) │ │ │ └── @ AssocNode (location: (2,5)-(2,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (2,5)-(2,7)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (2,5)-(2,6) = "b" │ │ │ │ ├── closing_loc: (2,6)-(2,7) = ":" │ │ │ │ └── unescaped: "b" │ │ │ ├── value: │ │ │ │ @ ArrayPatternNode (location: (2,8)-(2,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ └── @ ConstantReadNode (location: (2,9)-(2,13)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── name: :Hash │ │ │ │ ├── rest: │ │ │ │ │ @ SplatNode (location: (2,15)-(2,16)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── operator_loc: (2,15)-(2,16) = "*" │ │ │ │ │ └── expression: ∅ │ │ │ │ ├── posts: (length: 0) @@ -44,9 +53,10 @@ │ │ └── closing_loc: (2,18)-(2,19) = "}" │ ├── statements: │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ ├── value_loc: (3,3)-(3,4) = "c" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_42.txt b/test/prism/snapshots/seattlerb/case_in_42.txt index f985d6bc8db..a498fa63b02 100644 --- a/test/prism/snapshots/seattlerb/case_in_42.txt +++ b/test/prism/snapshots/seattlerb/case_in_42.txt @@ -1,33 +1,40 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [:_] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(3,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(2,18)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (2,3)-(2,9)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ SymbolNode (location: (2,3)-(2,5)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (2,3)-(2,4) = ":" │ │ │ ├── value_loc: (2,4)-(2,5) = "b" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "b" │ │ ├── rest: │ │ │ @ SplatNode (location: (2,7)-(2,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (2,7)-(2,8) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (2,8)-(2,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :_ │ │ │ └── depth: 0 │ │ ├── posts: (length: 0) @@ -35,8 +42,10 @@ │ │ └── closing_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (2,15)-(2,18)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (2,15)-(2,18)) + │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,10)-(2,14) = "then" ├── consequent: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_42_2.txt b/test/prism/snapshots/seattlerb/case_in_42_2.txt index c399ba1bfa4..909874bc0c5 100644 --- a/test/prism/snapshots/seattlerb/case_in_42_2.txt +++ b/test/prism/snapshots/seattlerb/case_in_42_2.txt @@ -1,29 +1,37 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [:list] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(3,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(2,20)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (2,3)-(2,11)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── requireds: (length: 0) │ │ ├── rest: │ │ │ @ SplatNode (location: (2,5)-(2,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (2,5)-(2,6) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (2,6)-(2,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :list │ │ │ └── depth: 0 │ │ ├── posts: (length: 0) @@ -31,8 +39,10 @@ │ │ └── closing_loc: (2,10)-(2,11) = ")" │ ├── statements: │ │ @ StatementsNode (location: (2,17)-(2,20)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (2,17)-(2,20)) + │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,12)-(2,16) = "then" ├── consequent: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_47.txt b/test/prism/snapshots/seattlerb/case_in_47.txt index 99baebce05a..fdc31f3bba2 100644 --- a/test/prism/snapshots/seattlerb/case_in_47.txt +++ b/test/prism/snapshots/seattlerb/case_in_47.txt @@ -1,35 +1,41 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(4,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(3,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (2,3)-(2,14)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 0) │ │ ├── rest: │ │ │ @ SplatNode (location: (2,4)-(2,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (2,4)-(2,5) = "*" │ │ │ └── expression: ∅ │ │ ├── posts: (length: 2) │ │ │ ├── @ SymbolNode (location: (2,7)-(2,9)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (2,7)-(2,8) = ":" │ │ │ │ ├── value_loc: (2,8)-(2,9) = "b" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "b" │ │ │ └── @ SymbolNode (location: (2,11)-(2,13)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (2,11)-(2,12) = ":" │ │ │ ├── value_loc: (2,12)-(2,13) = "c" │ │ │ ├── closing_loc: ∅ @@ -38,9 +44,10 @@ │ │ └── closing_loc: (2,13)-(2,14) = "]" │ ├── statements: │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ ├── value_loc: (3,3)-(3,4) = "d" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_67.txt b/test/prism/snapshots/seattlerb/case_in_67.txt index 4bab417d578..372b8fe221a 100644 --- a/test/prism/snapshots/seattlerb/case_in_67.txt +++ b/test/prism/snapshots/seattlerb/case_in_67.txt @@ -1,31 +1,37 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(3,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(2,15)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ RangeNode (location: (2,3)-(2,6)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (2,3)-(2,4)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (2,4)-(2,6) = ".." │ ├── statements: │ │ @ StatementsNode (location: (2,12)-(2,15)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (2,12)-(2,15)) + │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,7)-(2,11) = "then" ├── consequent: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_86.txt b/test/prism/snapshots/seattlerb/case_in_86.txt index 082aa74ecac..2cb5dd6867c 100644 --- a/test/prism/snapshots/seattlerb/case_in_86.txt +++ b/test/prism/snapshots/seattlerb/case_in_86.txt @@ -1,21 +1,24 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(3,3)) + ├── flags: newline ├── predicate: │ @ ArrayNode (location: (1,5)-(1,13)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ SymbolNode (location: (1,6)-(1,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (1,6)-(1,7) = ":" │ │ │ ├── value_loc: (1,7)-(1,8) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ └── @ SymbolNode (location: (1,10)-(1,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,10)-(1,11) = ":" │ │ ├── value_loc: (1,11)-(1,12) = "b" │ │ ├── closing_loc: ∅ @@ -24,17 +27,21 @@ │ └── closing_loc: (1,12)-(1,13) = "]" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(2,25)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (2,3)-(2,16)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ ConstantPathNode (location: (2,3)-(2,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── parent: ∅ │ │ │ ├── name: :NilClass │ │ │ ├── delimiter_loc: (2,3)-(2,5) = "::" │ │ │ └── name_loc: (2,5)-(2,13) = "NilClass" │ │ ├── rest: │ │ │ @ SplatNode (location: (2,15)-(2,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (2,15)-(2,16) = "*" │ │ │ └── expression: ∅ │ │ ├── posts: (length: 0) @@ -42,8 +49,10 @@ │ │ └── closing_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (2,22)-(2,25)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (2,22)-(2,25)) + │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,17)-(2,21) = "then" ├── consequent: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_86_2.txt b/test/prism/snapshots/seattlerb/case_in_86_2.txt index 346264f9071..f02387c52d3 100644 --- a/test/prism/snapshots/seattlerb/case_in_86_2.txt +++ b/test/prism/snapshots/seattlerb/case_in_86_2.txt @@ -1,21 +1,24 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(3,3)) + ├── flags: newline ├── predicate: │ @ ArrayNode (location: (1,5)-(1,13)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ SymbolNode (location: (1,6)-(1,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (1,6)-(1,7) = ":" │ │ │ ├── value_loc: (1,7)-(1,8) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ └── @ SymbolNode (location: (1,10)-(1,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,10)-(1,11) = ":" │ │ ├── value_loc: (1,11)-(1,12) = "b" │ │ ├── closing_loc: ∅ @@ -24,16 +27,20 @@ │ └── closing_loc: (1,12)-(1,13) = "]" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(2,25)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (2,3)-(2,16)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 0) │ │ ├── rest: │ │ │ @ SplatNode (location: (2,3)-(2,4)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (2,3)-(2,4) = "*" │ │ │ └── expression: ∅ │ │ ├── posts: (length: 1) │ │ │ └── @ ConstantPathNode (location: (2,6)-(2,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── parent: ∅ │ │ │ ├── name: :NilClass │ │ │ ├── delimiter_loc: (2,6)-(2,8) = "::" @@ -42,8 +49,10 @@ │ │ └── closing_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (2,22)-(2,25)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (2,22)-(2,25)) + │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,17)-(2,21) = "then" ├── consequent: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_array_pat_const.txt b/test/prism/snapshots/seattlerb/case_in_array_pat_const.txt index f361e8d4589..64684df2035 100644 --- a/test/prism/snapshots/seattlerb/case_in_array_pat_const.txt +++ b/test/prism/snapshots/seattlerb/case_in_array_pat_const.txt @@ -1,25 +1,32 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [:c] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(4,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(3,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (2,3)-(2,7)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :B │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (2,5)-(2,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :c │ │ │ └── depth: 0 │ │ ├── rest: ∅ @@ -28,9 +35,10 @@ │ │ └── closing_loc: (2,6)-(2,7) = "]" │ ├── statements: │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ ├── value_loc: (3,3)-(3,4) = "d" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_array_pat_const2.txt b/test/prism/snapshots/seattlerb/case_in_array_pat_const2.txt index d6fb80ef908..6a14e0271a6 100644 --- a/test/prism/snapshots/seattlerb/case_in_array_pat_const2.txt +++ b/test/prism/snapshots/seattlerb/case_in_array_pat_const2.txt @@ -1,30 +1,38 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [:d] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(4,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(3,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (2,3)-(2,10)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantPathNode (location: (2,3)-(2,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── parent: │ │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :B │ │ │ ├── name: :C │ │ │ ├── delimiter_loc: (2,4)-(2,6) = "::" │ │ │ └── name_loc: (2,6)-(2,7) = "C" │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (2,8)-(2,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :d │ │ │ └── depth: 0 │ │ ├── rest: ∅ @@ -33,9 +41,10 @@ │ │ └── closing_loc: (2,9)-(2,10) = "]" │ ├── statements: │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ ├── value_loc: (3,3)-(3,4) = "e" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_array_pat_paren_assign.txt b/test/prism/snapshots/seattlerb/case_in_array_pat_paren_assign.txt index 8d185b250a7..9d617078fda 100644 --- a/test/prism/snapshots/seattlerb/case_in_array_pat_paren_assign.txt +++ b/test/prism/snapshots/seattlerb/case_in_array_pat_paren_assign.txt @@ -1,30 +1,39 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [:d] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(4,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(3,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ ArrayPatternNode (location: (2,3)-(2,12)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :B │ │ ├── requireds: (length: 1) │ │ │ └── @ CapturePatternNode (location: (2,5)-(2,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── value: │ │ │ │ @ ConstantReadNode (location: (2,5)-(2,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :C │ │ │ ├── target: │ │ │ │ @ LocalVariableTargetNode (location: (2,10)-(2,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :d │ │ │ │ └── depth: 0 │ │ │ └── operator_loc: (2,7)-(2,9) = "=>" @@ -34,9 +43,10 @@ │ │ └── closing_loc: (2,11)-(2,12) = ")" │ ├── statements: │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ ├── value_loc: (3,3)-(3,4) = "d" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_const.txt b/test/prism/snapshots/seattlerb/case_in_const.txt index c4b838aa1d5..73f681c7dcd 100644 --- a/test/prism/snapshots/seattlerb/case_in_const.txt +++ b/test/prism/snapshots/seattlerb/case_in_const.txt @@ -1,22 +1,29 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(4,3)) + ├── flags: newline ├── predicate: │ @ ConstantReadNode (location: (1,5)-(1,10)) + │ ├── flags: ∅ │ └── name: :Array ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(3,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ ConstantReadNode (location: (2,3)-(2,8)) + │ │ ├── flags: ∅ │ │ └── name: :Class │ ├── statements: │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ ├── value_loc: (3,3)-(3,4) = "b" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_else.txt b/test/prism/snapshots/seattlerb/case_in_else.txt index 5eae7fc1ea2..0ad3935ce8d 100644 --- a/test/prism/snapshots/seattlerb/case_in_else.txt +++ b/test/prism/snapshots/seattlerb/case_in_else.txt @@ -1,22 +1,29 @@ @ ProgramNode (location: (1,0)-(6,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(6,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(6,3)) + ├── flags: newline ├── predicate: │ @ ConstantReadNode (location: (1,5)-(1,10)) + │ ├── flags: ∅ │ └── name: :Array ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(3,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ ConstantReadNode (location: (2,3)-(2,8)) + │ │ ├── flags: ∅ │ │ └── name: :Class │ ├── statements: │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ ├── value_loc: (3,3)-(3,4) = "b" │ │ ├── closing_loc: ∅ @@ -25,12 +32,14 @@ │ └── then_loc: ∅ ├── consequent: │ @ ElseNode (location: (4,0)-(6,3)) + │ ├── flags: ∅ │ ├── else_keyword_loc: (4,0)-(4,4) = "else" │ ├── statements: │ │ @ StatementsNode (location: (5,2)-(5,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (5,2)-(5,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (5,2)-(5,3) = ":" │ │ ├── value_loc: (5,3)-(5,4) = "c" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_find.txt b/test/prism/snapshots/seattlerb/case_in_find.txt index f84c4c30d0d..79d737afa7e 100644 --- a/test/prism/snapshots/seattlerb/case_in_find.txt +++ b/test/prism/snapshots/seattlerb/case_in_find.txt @@ -1,40 +1,49 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [:a, :b] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(3,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,2)-(2,15)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ FindPatternNode (location: (2,5)-(2,15)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── left: │ │ │ @ SplatNode (location: (2,5)-(2,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (2,5)-(2,6) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (2,6)-(2,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ ├── requireds: (length: 1) │ │ │ └── @ SymbolNode (location: (2,9)-(2,11)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (2,9)-(2,10) = ":" │ │ │ ├── value_loc: (2,10)-(2,11) = "+" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "+" │ │ ├── right: │ │ │ @ SplatNode (location: (2,13)-(2,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (2,13)-(2,14) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (2,14)-(2,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :b │ │ │ └── depth: 0 │ │ ├── opening_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_find_array.txt b/test/prism/snapshots/seattlerb/case_in_find_array.txt index a757f803460..b874867062d 100644 --- a/test/prism/snapshots/seattlerb/case_in_find_array.txt +++ b/test/prism/snapshots/seattlerb/case_in_find_array.txt @@ -1,37 +1,45 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [:c] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(3,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(2,16)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ FindPatternNode (location: (2,3)-(2,16)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── left: │ │ │ @ SplatNode (location: (2,4)-(2,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (2,4)-(2,5) = "*" │ │ │ └── expression: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ SymbolNode (location: (2,7)-(2,9)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (2,7)-(2,8) = ":" │ │ │ │ ├── value_loc: (2,8)-(2,9) = "b" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "b" │ │ │ └── @ LocalVariableTargetNode (location: (2,11)-(2,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :c │ │ │ └── depth: 0 │ │ ├── right: │ │ │ @ SplatNode (location: (2,14)-(2,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (2,14)-(2,15) = "*" │ │ │ └── expression: ∅ │ │ ├── opening_loc: (2,3)-(2,4) = "[" diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat.txt index e813efa9ee5..3a106e973a8 100644 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat.txt +++ b/test/prism/snapshots/seattlerb/case_in_hash_pat.txt @@ -1,26 +1,32 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(4,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(3,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ HashPatternNode (location: (2,3)-(2,21)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── elements: (length: 2) │ │ │ ├── @ AssocNode (location: (2,5)-(2,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (2,5)-(2,7)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (2,5)-(2,6) = "b" │ │ │ │ │ ├── closing_loc: (2,6)-(2,7) = ":" @@ -34,9 +40,10 @@ │ │ │ │ │ └── unescaped: "c" │ │ │ │ └── operator_loc: ∅ │ │ │ └── @ AssocNode (location: (2,13)-(2,19)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (2,13)-(2,15)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (2,13)-(2,14) = "d" │ │ │ │ ├── closing_loc: (2,14)-(2,15) = ":" @@ -54,9 +61,10 @@ │ │ └── closing_loc: (2,20)-(2,21) = "}" │ ├── statements: │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ ├── value_loc: (3,3)-(3,4) = "f" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_assign.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_assign.txt index 790d9d63ffb..8494b710254 100644 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_assign.txt +++ b/test/prism/snapshots/seattlerb/case_in_hash_pat_assign.txt @@ -1,45 +1,55 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [:x, :f] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(4,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(3,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ HashPatternNode (location: (2,3)-(2,34)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── elements: (length: 3) │ │ │ ├── @ AssocNode (location: (2,5)-(2,20)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (2,5)-(2,7)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (2,5)-(2,6) = "b" │ │ │ │ │ ├── closing_loc: (2,6)-(2,7) = ":" │ │ │ │ │ └── unescaped: "b" │ │ │ │ ├── value: │ │ │ │ │ @ CapturePatternNode (location: (2,8)-(2,20)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── value: │ │ │ │ │ │ @ ConstantReadNode (location: (2,8)-(2,15)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── name: :Integer │ │ │ │ │ ├── target: │ │ │ │ │ │ @ LocalVariableTargetNode (location: (2,19)-(2,20)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── name: :x │ │ │ │ │ │ └── depth: 0 │ │ │ │ │ └── operator_loc: (2,16)-(2,18) = "=>" │ │ │ │ └── operator_loc: ∅ │ │ │ ├── @ AssocNode (location: (2,22)-(2,28)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (2,22)-(2,24)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (2,22)-(2,23) = "d" │ │ │ │ │ ├── closing_loc: (2,23)-(2,24) = ":" @@ -53,17 +63,20 @@ │ │ │ │ │ └── unescaped: "e" │ │ │ │ └── operator_loc: ∅ │ │ │ └── @ AssocNode (location: (2,30)-(2,32)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (2,30)-(2,32)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (2,30)-(2,31) = "f" │ │ │ │ ├── closing_loc: (2,31)-(2,32) = ":" │ │ │ │ └── unescaped: "f" │ │ │ ├── value: │ │ │ │ @ ImplicitNode (location: (2,30)-(2,31)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── value: │ │ │ │ @ LocalVariableTargetNode (location: (2,30)-(2,31)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :f │ │ │ │ └── depth: 0 │ │ │ └── operator_loc: ∅ @@ -72,9 +85,10 @@ │ │ └── closing_loc: (2,33)-(2,34) = "}" │ ├── statements: │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ ├── value_loc: (3,3)-(3,4) = "g" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_assign.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_assign.txt index 4c8cfd0e544..c2995013dd5 100644 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_assign.txt +++ b/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_assign.txt @@ -1,35 +1,42 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(4,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(3,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ HashPatternNode (location: (2,3)-(2,11)) + │ │ ├── flags: ∅ │ │ ├── constant: │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :B │ │ ├── elements: (length: 1) │ │ │ └── @ AssocNode (location: (2,5)-(2,10)) + │ │ │ ├── flags: static_literal │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (2,5)-(2,7)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (2,5)-(2,6) = "a" │ │ │ │ ├── closing_loc: (2,6)-(2,7) = ":" │ │ │ │ └── unescaped: "a" │ │ │ ├── value: │ │ │ │ @ IntegerNode (location: (2,8)-(2,10)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 42 │ │ │ └── operator_loc: ∅ │ │ ├── rest: ∅ @@ -37,9 +44,10 @@ │ │ └── closing_loc: (2,10)-(2,11) = ")" │ ├── statements: │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ ├── value_loc: (3,3)-(3,4) = "d" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_true.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_true.txt index 8ff95a161f3..07f1d543395 100644 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_true.txt +++ b/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_true.txt @@ -1,41 +1,49 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(4,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(3,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ HashPatternNode (location: (2,3)-(2,10)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── elements: (length: 1) │ │ │ └── @ AssocNode (location: (2,3)-(2,10)) + │ │ │ ├── flags: static_literal │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (2,3)-(2,5)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (2,3)-(2,4) = "b" │ │ │ │ ├── closing_loc: (2,4)-(2,5) = ":" │ │ │ │ └── unescaped: "b" │ │ │ ├── value: │ │ │ │ @ TrueNode (location: (2,6)-(2,10)) + │ │ │ │ └── flags: static_literal │ │ │ └── operator_loc: ∅ │ │ ├── rest: ∅ │ │ ├── opening_loc: ∅ │ │ └── closing_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ ├── value_loc: (3,3)-(3,4) = "c" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_rest.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_rest.txt index b93b889ec5f..42e6b3f2a5e 100644 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_rest.txt +++ b/test/prism/snapshots/seattlerb/case_in_hash_pat_rest.txt @@ -1,39 +1,48 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [:c, :rest] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(3,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(2,23)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ HashPatternNode (location: (2,3)-(2,15)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── elements: (length: 1) │ │ │ └── @ AssocNode (location: (2,3)-(2,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (2,3)-(2,5)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (2,3)-(2,4) = "b" │ │ │ │ ├── closing_loc: (2,4)-(2,5) = ":" │ │ │ │ └── unescaped: "b" │ │ │ ├── value: │ │ │ │ @ LocalVariableTargetNode (location: (2,6)-(2,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :c │ │ │ │ └── depth: 0 │ │ │ └── operator_loc: ∅ │ │ ├── rest: │ │ │ @ AssocSplatNode (location: (2,9)-(2,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── value: │ │ │ │ @ LocalVariableTargetNode (location: (2,11)-(2,15)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :rest │ │ │ │ └── depth: 0 │ │ │ └── operator_loc: (2,9)-(2,11) = "**" @@ -41,9 +50,10 @@ │ │ └── closing_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (2,21)-(2,23)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (2,21)-(2,23)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (2,21)-(2,22) = ":" │ │ ├── value_loc: (2,22)-(2,23) = "d" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_rest_solo.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_rest_solo.txt index 956e93faa02..d69ff63b9d4 100644 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_rest_solo.txt +++ b/test/prism/snapshots/seattlerb/case_in_hash_pat_rest_solo.txt @@ -1,26 +1,33 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [:rest] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(3,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(2,17)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ HashPatternNode (location: (2,3)-(2,9)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── elements: (length: 0) │ │ ├── rest: │ │ │ @ AssocSplatNode (location: (2,3)-(2,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── value: │ │ │ │ @ LocalVariableTargetNode (location: (2,5)-(2,9)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :rest │ │ │ │ └── depth: 0 │ │ │ └── operator_loc: (2,3)-(2,5) = "**" @@ -28,9 +35,10 @@ │ │ └── closing_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (2,15)-(2,17)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (2,15)-(2,17)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (2,15)-(2,16) = ":" │ │ ├── value_loc: (2,16)-(2,17) = "d" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_if_unless_post_mod.txt b/test/prism/snapshots/seattlerb/case_in_if_unless_post_mod.txt index a21d3e15dd4..14ac0267907 100644 --- a/test/prism/snapshots/seattlerb/case_in_if_unless_post_mod.txt +++ b/test/prism/snapshots/seattlerb/case_in_if_unless_post_mod.txt @@ -1,36 +1,45 @@ @ ProgramNode (location: (1,0)-(6,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(6,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(6,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 2) │ ├── @ InNode (location: (2,0)-(3,4)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IfNode (location: (2,3)-(2,12)) + │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (2,5)-(2,7) = "if" │ │ │ ├── predicate: │ │ │ │ @ TrueNode (location: (2,8)-(2,12)) + │ │ │ │ └── flags: static_literal │ │ │ ├── then_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (2,3)-(2,4)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ ConstantReadNode (location: (2,3)-(2,4)) + │ │ │ │ ├── flags: newline │ │ │ │ └── name: :A │ │ │ ├── consequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ │ ├── value_loc: (3,3)-(3,4) = "C" │ │ │ ├── closing_loc: ∅ @@ -38,24 +47,30 @@ │ │ ├── in_loc: (2,0)-(2,2) = "in" │ │ └── then_loc: ∅ │ └── @ InNode (location: (4,0)-(5,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ UnlessNode (location: (4,3)-(4,17)) + │ │ ├── flags: newline │ │ ├── keyword_loc: (4,5)-(4,11) = "unless" │ │ ├── predicate: │ │ │ @ FalseNode (location: (4,12)-(4,17)) + │ │ │ └── flags: static_literal │ │ ├── then_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (4,3)-(4,4)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ ConstantReadNode (location: (4,3)-(4,4)) + │ │ │ ├── flags: newline │ │ │ └── name: :D │ │ ├── consequent: ∅ │ │ └── end_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (5,2)-(5,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (5,2)-(5,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (5,2)-(5,3) = ":" │ │ ├── value_loc: (5,3)-(5,4) = "E" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_multiple.txt b/test/prism/snapshots/seattlerb/case_in_multiple.txt index eba0084f969..d0d790bdb54 100644 --- a/test/prism/snapshots/seattlerb/case_in_multiple.txt +++ b/test/prism/snapshots/seattlerb/case_in_multiple.txt @@ -1,31 +1,38 @@ @ ProgramNode (location: (1,0)-(6,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(6,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(6,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 2) │ ├── @ InNode (location: (2,0)-(3,4)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ConstantPathNode (location: (2,3)-(2,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── parent: │ │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :A │ │ │ ├── name: :B │ │ │ ├── delimiter_loc: (2,4)-(2,6) = "::" │ │ │ └── name_loc: (2,6)-(2,7) = "B" │ │ ├── statements: │ │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ │ ├── value_loc: (3,3)-(3,4) = "C" │ │ │ ├── closing_loc: ∅ @@ -33,19 +40,23 @@ │ │ ├── in_loc: (2,0)-(2,2) = "in" │ │ └── then_loc: ∅ │ └── @ InNode (location: (4,0)-(5,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ ConstantPathNode (location: (4,3)-(4,7)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantReadNode (location: (4,3)-(4,4)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :D │ │ ├── name: :E │ │ ├── delimiter_loc: (4,4)-(4,6) = "::" │ │ └── name_loc: (4,6)-(4,7) = "E" │ ├── statements: │ │ @ StatementsNode (location: (5,2)-(5,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (5,2)-(5,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (5,2)-(5,3) = ":" │ │ ├── value_loc: (5,3)-(5,4) = "F" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in_or.txt b/test/prism/snapshots/seattlerb/case_in_or.txt index 7ac66176082..9787f5c1ed4 100644 --- a/test/prism/snapshots/seattlerb/case_in_or.txt +++ b/test/prism/snapshots/seattlerb/case_in_or.txt @@ -1,32 +1,40 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 1) └── @ CaseMatchNode (location: (1,0)-(4,3)) + ├── flags: newline ├── predicate: │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (1,5)-(1,6) = ":" │ ├── value_loc: (1,6)-(1,7) = "a" │ ├── closing_loc: ∅ │ └── unescaped: "a" ├── conditions: (length: 1) │ └── @ InNode (location: (2,0)-(3,4)) + │ ├── flags: ∅ │ ├── pattern: │ │ @ AlternationPatternNode (location: (2,3)-(2,8)) + │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :B │ │ ├── right: │ │ │ @ ConstantReadNode (location: (2,7)-(2,8)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :C │ │ └── operator_loc: (2,5)-(2,6) = "|" │ ├── statements: │ │ @ StatementsNode (location: (3,2)-(3,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,2)-(3,3) = ":" │ │ ├── value_loc: (3,3)-(3,4) = "d" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/class_comments.txt b/test/prism/snapshots/seattlerb/class_comments.txt index 5ac05b6be68..75350722a1a 100644 --- a/test/prism/snapshots/seattlerb/class_comments.txt +++ b/test/prism/snapshots/seattlerb/class_comments.txt @@ -1,20 +1,26 @@ @ ProgramNode (location: (4,0)-(9,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (4,0)-(9,3)) + ├── flags: ∅ └── body: (length: 1) └── @ ClassNode (location: (4,0)-(9,3)) + ├── flags: newline ├── locals: [] ├── class_keyword_loc: (4,0)-(4,5) = "class" ├── constant_path: │ @ ConstantReadNode (location: (4,6)-(4,7)) + │ ├── flags: ∅ │ └── name: :X ├── inheritance_operator_loc: ∅ ├── superclass: ∅ ├── body: │ @ StatementsNode (location: (6,2)-(8,5)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ DefNode (location: (6,2)-(8,5)) + │ ├── flags: newline │ ├── name: :blah │ ├── name_loc: (6,6)-(6,10) = "blah" │ ├── receiver: ∅ diff --git a/test/prism/snapshots/seattlerb/cond_unary_minus.txt b/test/prism/snapshots/seattlerb/cond_unary_minus.txt index b6e12dfb15c..bf82ac46967 100644 --- a/test/prism/snapshots/seattlerb/cond_unary_minus.txt +++ b/test/prism/snapshots/seattlerb/cond_unary_minus.txt @@ -1,13 +1,16 @@ @ ProgramNode (location: (1,0)-(1,10)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,10)) + ├── flags: ∅ └── body: (length: 1) └── @ IfNode (location: (1,0)-(1,10)) + ├── flags: newline ├── if_keyword_loc: (1,0)-(1,2) = "if" ├── predicate: │ @ IntegerNode (location: (1,3)-(1,5)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: -1 ├── then_keyword_loc: ∅ ├── statements: ∅ diff --git a/test/prism/snapshots/seattlerb/const_2_op_asgn_or2.txt b/test/prism/snapshots/seattlerb/const_2_op_asgn_or2.txt index e09eed7d2ff..25d77dac2d5 100644 --- a/test/prism/snapshots/seattlerb/const_2_op_asgn_or2.txt +++ b/test/prism/snapshots/seattlerb/const_2_op_asgn_or2.txt @@ -1,13 +1,18 @@ @ ProgramNode (location: (1,0)-(1,12)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,12)) + ├── flags: ∅ └── body: (length: 1) └── @ ConstantPathOrWriteNode (location: (1,0)-(1,12)) + ├── flags: newline ├── target: │ @ ConstantPathNode (location: (1,0)-(1,6)) + │ ├── flags: ∅ │ ├── parent: │ │ @ ConstantPathNode (location: (1,0)-(1,3)) + │ │ ├── flags: ∅ │ │ ├── parent: ∅ │ │ ├── name: :X │ │ ├── delimiter_loc: (1,0)-(1,2) = "::" @@ -18,5 +23,5 @@ ├── operator_loc: (1,7)-(1,10) = "||=" └── value: @ IntegerNode (location: (1,11)-(1,12)) - ├── flags: decimal + ├── flags: static_literal, decimal └── value: 1 diff --git a/test/prism/snapshots/seattlerb/const_3_op_asgn_or.txt b/test/prism/snapshots/seattlerb/const_3_op_asgn_or.txt index 398af888a89..dc098bcf23c 100644 --- a/test/prism/snapshots/seattlerb/const_3_op_asgn_or.txt +++ b/test/prism/snapshots/seattlerb/const_3_op_asgn_or.txt @@ -1,11 +1,15 @@ @ ProgramNode (location: (1,0)-(1,9)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,9)) + ├── flags: ∅ └── body: (length: 1) └── @ ConstantPathOrWriteNode (location: (1,0)-(1,9)) + ├── flags: newline ├── target: │ @ ConstantPathNode (location: (1,0)-(1,3)) + │ ├── flags: ∅ │ ├── parent: ∅ │ ├── name: :X │ ├── delimiter_loc: (1,0)-(1,2) = "::" @@ -13,5 +17,5 @@ ├── operator_loc: (1,4)-(1,7) = "||=" └── value: @ IntegerNode (location: (1,8)-(1,9)) - ├── flags: decimal + ├── flags: static_literal, decimal └── value: 1 diff --git a/test/prism/snapshots/seattlerb/const_op_asgn_and1.txt b/test/prism/snapshots/seattlerb/const_op_asgn_and1.txt index f9792aebb36..63b8bc190b1 100644 --- a/test/prism/snapshots/seattlerb/const_op_asgn_and1.txt +++ b/test/prism/snapshots/seattlerb/const_op_asgn_and1.txt @@ -1,11 +1,15 @@ @ ProgramNode (location: (1,0)-(1,8)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,8)) + ├── flags: ∅ └── body: (length: 1) └── @ ConstantPathOperatorWriteNode (location: (1,0)-(1,8)) + ├── flags: newline ├── target: │ @ ConstantPathNode (location: (1,0)-(1,3)) + │ ├── flags: ∅ │ ├── parent: ∅ │ ├── name: :X │ ├── delimiter_loc: (1,0)-(1,2) = "::" @@ -13,6 +17,6 @@ ├── binary_operator_loc: (1,4)-(1,6) = "&=" ├── value: │ @ IntegerNode (location: (1,7)-(1,8)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 └── binary_operator: :& diff --git a/test/prism/snapshots/seattlerb/const_op_asgn_and2.txt b/test/prism/snapshots/seattlerb/const_op_asgn_and2.txt index 146455d3271..c1ac2bcf526 100644 --- a/test/prism/snapshots/seattlerb/const_op_asgn_and2.txt +++ b/test/prism/snapshots/seattlerb/const_op_asgn_and2.txt @@ -1,11 +1,15 @@ @ ProgramNode (location: (1,0)-(1,9)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,9)) + ├── flags: ∅ └── body: (length: 1) └── @ ConstantPathAndWriteNode (location: (1,0)-(1,9)) + ├── flags: newline ├── target: │ @ ConstantPathNode (location: (1,0)-(1,3)) + │ ├── flags: ∅ │ ├── parent: ∅ │ ├── name: :X │ ├── delimiter_loc: (1,0)-(1,2) = "::" @@ -13,5 +17,5 @@ ├── operator_loc: (1,4)-(1,7) = "&&=" └── value: @ IntegerNode (location: (1,8)-(1,9)) - ├── flags: decimal + ├── flags: static_literal, decimal └── value: 1 diff --git a/test/prism/snapshots/seattlerb/const_op_asgn_or.txt b/test/prism/snapshots/seattlerb/const_op_asgn_or.txt index 5e9dd396043..0a53593d123 100644 --- a/test/prism/snapshots/seattlerb/const_op_asgn_or.txt +++ b/test/prism/snapshots/seattlerb/const_op_asgn_or.txt @@ -1,13 +1,18 @@ @ ProgramNode (location: (1,0)-(1,10)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,10)) + ├── flags: ∅ └── body: (length: 1) └── @ ConstantPathOrWriteNode (location: (1,0)-(1,10)) + ├── flags: newline ├── target: │ @ ConstantPathNode (location: (1,0)-(1,4)) + │ ├── flags: ∅ │ ├── parent: │ │ @ ConstantReadNode (location: (1,0)-(1,1)) + │ │ ├── flags: ∅ │ │ └── name: :X │ ├── name: :Y │ ├── delimiter_loc: (1,1)-(1,3) = "::" @@ -15,5 +20,5 @@ ├── operator_loc: (1,5)-(1,8) = "||=" └── value: @ IntegerNode (location: (1,9)-(1,10)) - ├── flags: decimal + ├── flags: static_literal, decimal └── value: 1 diff --git a/test/prism/snapshots/seattlerb/defined_eh_parens.txt b/test/prism/snapshots/seattlerb/defined_eh_parens.txt index 49b577fcd13..7e18a247875 100644 --- a/test/prism/snapshots/seattlerb/defined_eh_parens.txt +++ b/test/prism/snapshots/seattlerb/defined_eh_parens.txt @@ -1,13 +1,16 @@ @ ProgramNode (location: (1,0)-(1,12)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,12)) + ├── flags: ∅ └── body: (length: 1) └── @ DefinedNode (location: (1,0)-(1,12)) + ├── flags: newline ├── lparen_loc: (1,8)-(1,9) = "(" ├── value: │ @ IntegerNode (location: (1,9)-(1,11)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 42 ├── rparen_loc: (1,11)-(1,12) = ")" └── keyword_loc: (1,0)-(1,8) = "defined?" diff --git a/test/prism/snapshots/seattlerb/defn_arg_asplat_arg.txt b/test/prism/snapshots/seattlerb/defn_arg_asplat_arg.txt index 3f2bdf44a44..312b0214d6f 100644 --- a/test/prism/snapshots/seattlerb/defn_arg_asplat_arg.txt +++ b/test/prism/snapshots/seattlerb/defn_arg_asplat_arg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,29)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,29)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,29)) + ├── flags: newline ├── name: :call ├── name_loc: (1,4)-(1,8) = "call" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,9)-(1,24)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (1,9)-(1,15)) │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_arg_forward_args.txt b/test/prism/snapshots/seattlerb/defn_arg_forward_args.txt index 4121770c5c2..905978bc2f1 100644 --- a/test/prism/snapshots/seattlerb/defn_arg_forward_args.txt +++ b/test/prism/snapshots/seattlerb/defn_arg_forward_args.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,29)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,29)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,29)) + ├── flags: newline ├── name: :a ├── name_loc: (1,4)-(1,5) = "a" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,12)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) │ │ ├── flags: ∅ @@ -19,12 +23,14 @@ │ ├── keywords: (length: 0) │ ├── keyword_rest: │ │ @ ForwardingParameterNode (location: (1,9)-(1,12)) + │ │ └── flags: ∅ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,15)-(1,24)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,15)-(1,24)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :b @@ -35,9 +41,11 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ LocalVariableReadNode (location: (1,17)-(1,18)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :x │ │ │ └── depth: 0 │ │ └── @ ForwardingArgumentsNode (location: (1,20)-(1,23)) + │ │ └── flags: ∅ │ ├── closing_loc: (1,23)-(1,24) = ")" │ └── block: ∅ ├── locals: [:x] diff --git a/test/prism/snapshots/seattlerb/defn_args_forward_args.txt b/test/prism/snapshots/seattlerb/defn_args_forward_args.txt index 178b6ccde73..ca03f79d57d 100644 --- a/test/prism/snapshots/seattlerb/defn_args_forward_args.txt +++ b/test/prism/snapshots/seattlerb/defn_args_forward_args.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,41)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,41)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,41)) + ├── flags: newline ├── name: :a ├── name_loc: (1,4)-(1,5) = "a" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,18)) + │ ├── flags: ∅ │ ├── requireds: (length: 3) │ │ ├── @ RequiredParameterNode (location: (1,6)-(1,7)) │ │ │ ├── flags: ∅ @@ -25,12 +29,14 @@ │ ├── keywords: (length: 0) │ ├── keyword_rest: │ │ @ ForwardingParameterNode (location: (1,15)-(1,18)) + │ │ └── flags: ∅ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,21)-(1,36)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,21)-(1,36)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :b @@ -41,15 +47,17 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 3) │ │ ├── @ SymbolNode (location: (1,23)-(1,27)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (1,23)-(1,24) = ":" │ │ │ ├── value_loc: (1,24)-(1,27) = "get" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "get" │ │ ├── @ LocalVariableReadNode (location: (1,29)-(1,30)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :z │ │ │ └── depth: 0 │ │ └── @ ForwardingArgumentsNode (location: (1,32)-(1,35)) + │ │ └── flags: ∅ │ ├── closing_loc: (1,35)-(1,36) = ")" │ └── block: ∅ ├── locals: [:x, :y, :z] diff --git a/test/prism/snapshots/seattlerb/defn_comments.txt b/test/prism/snapshots/seattlerb/defn_comments.txt index 585aa65c9a6..8ea66b77603 100644 --- a/test/prism/snapshots/seattlerb/defn_comments.txt +++ b/test/prism/snapshots/seattlerb/defn_comments.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (4,0)-(5,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (4,0)-(5,3)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (4,0)-(5,3)) + ├── flags: newline ├── name: :blah ├── name_loc: (4,4)-(4,8) = "blah" ├── receiver: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_endless_command.txt b/test/prism/snapshots/seattlerb/defn_endless_command.txt index c3ea59282a7..e951ee2e45f 100644 --- a/test/prism/snapshots/seattlerb/defn_endless_command.txt +++ b/test/prism/snapshots/seattlerb/defn_endless_command.txt @@ -1,18 +1,22 @@ @ ProgramNode (location: (1,0)-(1,33)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,33)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,33)) + ├── flags: newline ├── name: :some_method ├── name_loc: (1,4)-(1,15) = "some_method" ├── receiver: ∅ ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (1,18)-(1,33)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,18)-(1,33)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :other_method @@ -23,7 +27,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (1,31)-(1,33)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ ├── closing_loc: ∅ │ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_endless_command_rescue.txt b/test/prism/snapshots/seattlerb/defn_endless_command_rescue.txt index dfd1d01ba82..7efd02cd062 100644 --- a/test/prism/snapshots/seattlerb/defn_endless_command_rescue.txt +++ b/test/prism/snapshots/seattlerb/defn_endless_command_rescue.txt @@ -1,17 +1,22 @@ @ ProgramNode (location: (1,0)-(1,43)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,43)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,43)) + ├── flags: newline ├── name: :some_method ├── name_loc: (1,4)-(1,15) = "some_method" ├── receiver: ∅ ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (1,18)-(1,43)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (1,18)-(1,43)) + │ ├── flags: newline │ ├── expression: │ │ @ CallNode (location: (1,18)-(1,33)) │ │ ├── flags: ignore_visibility @@ -25,14 +30,14 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (1,31)-(1,33)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 42 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── keyword_loc: (1,34)-(1,40) = "rescue" │ └── rescue_expression: │ @ IntegerNode (location: (1,41)-(1,43)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 24 ├── locals: [] ├── def_keyword_loc: (1,0)-(1,3) = "def" diff --git a/test/prism/snapshots/seattlerb/defn_forward_args.txt b/test/prism/snapshots/seattlerb/defn_forward_args.txt index 71a984c8115..50fc32c0473 100644 --- a/test/prism/snapshots/seattlerb/defn_forward_args.txt +++ b/test/prism/snapshots/seattlerb/defn_forward_args.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,23)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,23)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,23)) + ├── flags: newline ├── name: :a ├── name_loc: (1,4)-(1,5) = "a" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,9)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -16,12 +20,14 @@ │ ├── keywords: (length: 0) │ ├── keyword_rest: │ │ @ ForwardingParameterNode (location: (1,6)-(1,9)) + │ │ └── flags: ∅ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,12)-(1,18)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,12)-(1,18)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :b @@ -32,6 +38,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ForwardingArgumentsNode (location: (1,14)-(1,17)) + │ │ └── flags: ∅ │ ├── closing_loc: (1,17)-(1,18) = ")" │ └── block: ∅ ├── locals: [] diff --git a/test/prism/snapshots/seattlerb/defn_forward_args__no_parens.txt b/test/prism/snapshots/seattlerb/defn_forward_args__no_parens.txt index 4a4d69e4d03..8926f2cdf18 100644 --- a/test/prism/snapshots/seattlerb/defn_forward_args__no_parens.txt +++ b/test/prism/snapshots/seattlerb/defn_forward_args__no_parens.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(3,3)) + ├── flags: newline ├── name: :f ├── name_loc: (1,4)-(1,5) = "f" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,9)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -16,12 +20,14 @@ │ ├── keywords: (length: 0) │ ├── keyword_rest: │ │ @ ForwardingParameterNode (location: (1,6)-(1,9)) + │ │ └── flags: ∅ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (2,2)-(2,8)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (2,2)-(2,8)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :m @@ -32,6 +38,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ForwardingArgumentsNode (location: (2,4)-(2,7)) + │ │ └── flags: ∅ │ ├── closing_loc: (2,7)-(2,8) = ")" │ └── block: ∅ ├── locals: [] diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_env.txt b/test/prism/snapshots/seattlerb/defn_kwarg_env.txt index 2aadedd9646..0df82b5dc2b 100644 --- a/test/prism/snapshots/seattlerb/defn_kwarg_env.txt +++ b/test/prism/snapshots/seattlerb/defn_kwarg_env.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,45)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,45)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,45)) + ├── flags: newline ├── name: :test ├── name_loc: (1,4)-(1,8) = "test" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,9)-(1,18)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -23,9 +27,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,20)-(1,41)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,20)-(1,41)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :test_splat @@ -39,8 +44,10 @@ │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocSplatNode (location: (1,31)-(1,40)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ LocalVariableReadNode (location: (1,33)-(1,40)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :testing │ │ │ └── depth: 0 │ │ └── operator_loc: (1,31)-(1,33) = "**" diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_kwarg.txt b/test/prism/snapshots/seattlerb/defn_kwarg_kwarg.txt index 8a5022ff37d..ead1437a86f 100644 --- a/test/prism/snapshots/seattlerb/defn_kwarg_kwarg.txt +++ b/test/prism/snapshots/seattlerb/defn_kwarg_kwarg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,24)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,24)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,24)) + ├── flags: newline ├── name: :f ├── name_loc: (1,4)-(1,5) = "f" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,19)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) │ │ ├── flags: ∅ @@ -23,7 +27,7 @@ │ │ │ ├── name_loc: (1,9)-(1,11) = "b:" │ │ │ └── value: │ │ │ @ IntegerNode (location: (1,12)-(1,13)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ OptionalKeywordParameterNode (location: (1,15)-(1,19)) │ │ ├── flags: ∅ @@ -31,7 +35,7 @@ │ │ ├── name_loc: (1,15)-(1,17) = "c:" │ │ └── value: │ │ @ IntegerNode (location: (1,18)-(1,19)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── keyword_rest: ∅ │ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat.txt b/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat.txt index 4c980bc27f8..2b228334604 100644 --- a/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat.txt +++ b/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,20)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,20)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,20)) + ├── flags: newline ├── name: :a ├── name_loc: (1,4)-(1,5) = "a" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,15)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -20,7 +24,7 @@ │ │ ├── name_loc: (1,6)-(1,8) = "b:" │ │ └── value: │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── keyword_rest: │ │ @ KeywordRestParameterNode (location: (1,12)-(1,15)) diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat_anon.txt b/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat_anon.txt index 40afacc2a7d..1e0e1f132e7 100644 --- a/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat_anon.txt +++ b/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat_anon.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,19)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,19)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,19)) + ├── flags: newline ├── name: :a ├── name_loc: (1,4)-(1,5) = "a" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,14)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -20,7 +24,7 @@ │ │ ├── name_loc: (1,6)-(1,8) = "b:" │ │ └── value: │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── keyword_rest: │ │ @ KeywordRestParameterNode (location: (1,12)-(1,14)) diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_lvar.txt b/test/prism/snapshots/seattlerb/defn_kwarg_lvar.txt index 0eae56924c8..0835d3987db 100644 --- a/test/prism/snapshots/seattlerb/defn_kwarg_lvar.txt +++ b/test/prism/snapshots/seattlerb/defn_kwarg_lvar.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,26)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,26)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,26)) + ├── flags: newline ├── name: :fun ├── name_loc: (1,4)-(1,7) = "fun" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,8)-(1,16)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -20,7 +24,7 @@ │ │ ├── name_loc: (1,8)-(1,11) = "kw:" │ │ └── value: │ │ @ SymbolNode (location: (1,12)-(1,16)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,12)-(1,13) = ":" │ │ ├── value_loc: (1,13)-(1,16) = "val" │ │ ├── closing_loc: ∅ @@ -29,8 +33,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,19)-(1,21)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ LocalVariableReadNode (location: (1,19)-(1,21)) + │ ├── flags: newline │ ├── name: :kw │ └── depth: 0 ├── locals: [:kw] diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_no_parens.txt b/test/prism/snapshots/seattlerb/defn_kwarg_no_parens.txt index bc5747ad02d..3f6af5e0ee4 100644 --- a/test/prism/snapshots/seattlerb/defn_kwarg_no_parens.txt +++ b/test/prism/snapshots/seattlerb/defn_kwarg_no_parens.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(2,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(2,3)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(2,3)) + ├── flags: newline ├── name: :f ├── name_loc: (1,4)-(1,5) = "f" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,10)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -20,7 +24,7 @@ │ │ ├── name_loc: (1,6)-(1,8) = "a:" │ │ └── value: │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── keyword_rest: ∅ │ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_val.txt b/test/prism/snapshots/seattlerb/defn_kwarg_val.txt index 82527f7875f..38cb995c093 100644 --- a/test/prism/snapshots/seattlerb/defn_kwarg_val.txt +++ b/test/prism/snapshots/seattlerb/defn_kwarg_val.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,17)) + ├── flags: newline ├── name: :f ├── name_loc: (1,4)-(1,5) = "f" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,12)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) │ │ ├── flags: ∅ @@ -23,7 +27,7 @@ │ │ ├── name_loc: (1,9)-(1,11) = "b:" │ │ └── value: │ │ @ IntegerNode (location: (1,11)-(1,12)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── keyword_rest: ∅ │ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_no_kwargs.txt b/test/prism/snapshots/seattlerb/defn_no_kwargs.txt index 0ef0634a537..778b300a4be 100644 --- a/test/prism/snapshots/seattlerb/defn_no_kwargs.txt +++ b/test/prism/snapshots/seattlerb/defn_no_kwargs.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,17)) + ├── flags: newline ├── name: :x ├── name_loc: (1,4)-(1,5) = "x" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,11)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -16,6 +20,7 @@ │ ├── keywords: (length: 0) │ ├── keyword_rest: │ │ @ NoKeywordsParameterNode (location: (1,6)-(1,11)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (1,6)-(1,8) = "**" │ │ └── keyword_loc: (1,8)-(1,11) = "nil" │ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_oneliner.txt b/test/prism/snapshots/seattlerb/defn_oneliner.txt index e7004998092..efa53f09d58 100644 --- a/test/prism/snapshots/seattlerb/defn_oneliner.txt +++ b/test/prism/snapshots/seattlerb/defn_oneliner.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,27)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,27)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,27)) + ├── flags: newline ├── name: :exec ├── name_loc: (1,4)-(1,8) = "exec" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,9)-(1,12)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (1,9)-(1,12)) │ │ ├── flags: ∅ @@ -21,9 +25,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,16)-(1,27)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,16)-(1,27)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :system @@ -34,6 +39,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ LocalVariableReadNode (location: (1,23)-(1,26)) + │ │ ├── flags: ∅ │ │ ├── name: :cmd │ │ └── depth: 0 │ ├── closing_loc: (1,26)-(1,27) = ")" diff --git a/test/prism/snapshots/seattlerb/defn_oneliner_eq2.txt b/test/prism/snapshots/seattlerb/defn_oneliner_eq2.txt index 2708351ede4..8d9f6a2267c 100644 --- a/test/prism/snapshots/seattlerb/defn_oneliner_eq2.txt +++ b/test/prism/snapshots/seattlerb/defn_oneliner_eq2.txt @@ -1,25 +1,32 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ ClassNode (location: (1,0)-(3,3)) + ├── flags: newline ├── locals: [] ├── class_keyword_loc: (1,0)-(1,5) = "class" ├── constant_path: │ @ ConstantReadNode (location: (1,6)-(1,7)) + │ ├── flags: ∅ │ └── name: :X ├── inheritance_operator_loc: ∅ ├── superclass: ∅ ├── body: │ @ StatementsNode (location: (2,2)-(2,16)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ DefNode (location: (2,2)-(2,16)) + │ ├── flags: newline │ ├── name: :== │ ├── name_loc: (2,6)-(2,8) = "==" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (2,9)-(2,10)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (2,9)-(2,10)) │ │ │ ├── flags: ∅ @@ -32,9 +39,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (2,14)-(2,16)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (2,14)-(2,16)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 42 │ ├── locals: [:o] │ ├── def_keyword_loc: (2,2)-(2,5) = "def" diff --git a/test/prism/snapshots/seattlerb/defn_oneliner_noargs.txt b/test/prism/snapshots/seattlerb/defn_oneliner_noargs.txt index 54555b1a238..a7bc11ae6b4 100644 --- a/test/prism/snapshots/seattlerb/defn_oneliner_noargs.txt +++ b/test/prism/snapshots/seattlerb/defn_oneliner_noargs.txt @@ -1,18 +1,22 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,17)) + ├── flags: newline ├── name: :exec ├── name_loc: (1,4)-(1,8) = "exec" ├── receiver: ∅ ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (1,11)-(1,17)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,11)-(1,17)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :system diff --git a/test/prism/snapshots/seattlerb/defn_oneliner_noargs_parentheses.txt b/test/prism/snapshots/seattlerb/defn_oneliner_noargs_parentheses.txt index e0fc4636f18..174c49d1e11 100644 --- a/test/prism/snapshots/seattlerb/defn_oneliner_noargs_parentheses.txt +++ b/test/prism/snapshots/seattlerb/defn_oneliner_noargs_parentheses.txt @@ -1,18 +1,22 @@ @ ProgramNode (location: (1,0)-(1,19)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,19)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,19)) + ├── flags: newline ├── name: :exec ├── name_loc: (1,4)-(1,8) = "exec" ├── receiver: ∅ ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (1,13)-(1,19)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,13)-(1,19)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :system diff --git a/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt b/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt index b5b5dbe6ac6..5e9c7ccef77 100644 --- a/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt +++ b/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(13,38)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(13,38)) + ├── flags: ∅ └── body: (length: 3) ├── @ DefNode (location: (1,0)-(5,3)) + │ ├── flags: newline │ ├── name: :exec │ ├── name_loc: (1,4)-(1,8) = "exec" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,9)-(1,12)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,12)) │ │ │ ├── flags: ∅ @@ -21,12 +25,14 @@ │ │ └── block: ∅ │ ├── body: │ │ @ BeginNode (location: (1,0)-(5,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (2,2)-(2,13)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (2,2)-(2,13)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :system @@ -37,20 +43,24 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (2,9)-(2,12)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :cmd │ │ │ │ └── depth: 0 │ │ │ ├── closing_loc: (2,12)-(2,13) = ")" │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (3,0)-(4,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (3,0)-(3,6) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (4,2)-(4,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ NilNode (location: (4,2)-(4,5)) + │ │ │ │ └── flags: newline, static_literal │ │ │ └── consequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ @@ -63,11 +73,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (5,0)-(5,3) = "end" ├── @ DefNode (location: (8,0)-(10,3)) + │ ├── flags: newline │ ├── name: :exec │ ├── name_loc: (8,4)-(8,8) = "exec" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (8,9)-(8,12)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (8,9)-(8,12)) │ │ │ ├── flags: ∅ @@ -80,8 +92,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (9,2)-(9,24)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (9,2)-(9,24)) + │ │ ├── flags: newline │ │ ├── expression: │ │ │ @ CallNode (location: (9,2)-(9,13)) │ │ │ ├── flags: ignore_visibility @@ -95,6 +109,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (9,9)-(9,12)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :cmd │ │ │ │ └── depth: 0 │ │ │ ├── closing_loc: (9,12)-(9,13) = ")" @@ -102,6 +117,7 @@ │ │ ├── keyword_loc: (9,14)-(9,20) = "rescue" │ │ └── rescue_expression: │ │ @ NilNode (location: (9,21)-(9,24)) + │ │ └── flags: static_literal │ ├── locals: [:cmd] │ ├── def_keyword_loc: (8,0)-(8,3) = "def" │ ├── operator_loc: ∅ @@ -110,11 +126,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (10,0)-(10,3) = "end" └── @ DefNode (location: (13,0)-(13,38)) + ├── flags: newline ├── name: :exec ├── name_loc: (13,4)-(13,8) = "exec" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (13,9)-(13,12)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (13,9)-(13,12)) │ │ ├── flags: ∅ @@ -127,8 +145,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (13,16)-(13,38)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (13,16)-(13,38)) + │ ├── flags: newline │ ├── expression: │ │ @ CallNode (location: (13,16)-(13,27)) │ │ ├── flags: ignore_visibility @@ -142,6 +162,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (13,23)-(13,26)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :cmd │ │ │ └── depth: 0 │ │ ├── closing_loc: (13,26)-(13,27) = ")" @@ -149,6 +170,7 @@ │ ├── keyword_loc: (13,28)-(13,34) = "rescue" │ └── rescue_expression: │ @ NilNode (location: (13,35)-(13,38)) + │ └── flags: static_literal ├── locals: [:cmd] ├── def_keyword_loc: (13,0)-(13,3) = "def" ├── operator_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_opt_last_arg.txt b/test/prism/snapshots/seattlerb/defn_opt_last_arg.txt index 569bc230783..f7c37e3d457 100644 --- a/test/prism/snapshots/seattlerb/defn_opt_last_arg.txt +++ b/test/prism/snapshots/seattlerb/defn_opt_last_arg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(2,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(2,3)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(2,3)) + ├── flags: newline ├── name: :m ├── name_loc: (1,4)-(1,5) = "m" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,17)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 1) │ │ └── @ OptionalParameterNode (location: (1,6)-(1,17)) @@ -18,6 +22,7 @@ │ │ ├── operator_loc: (1,10)-(1,11) = "=" │ │ └── value: │ │ @ FalseNode (location: (1,12)-(1,17)) + │ │ └── flags: static_literal │ ├── rest: ∅ │ ├── posts: (length: 0) │ ├── keywords: (length: 0) diff --git a/test/prism/snapshots/seattlerb/defn_opt_reg.txt b/test/prism/snapshots/seattlerb/defn_opt_reg.txt index f86168513ac..9bdd1439050 100644 --- a/test/prism/snapshots/seattlerb/defn_opt_reg.txt +++ b/test/prism/snapshots/seattlerb/defn_opt_reg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,19)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,19)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,19)) + ├── flags: newline ├── name: :f ├── name_loc: (1,4)-(1,5) = "f" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,14)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 1) │ │ └── @ OptionalParameterNode (location: (1,6)-(1,11)) @@ -18,6 +22,7 @@ │ │ ├── operator_loc: (1,7)-(1,8) = "=" │ │ └── value: │ │ @ NilNode (location: (1,8)-(1,11)) + │ │ └── flags: static_literal │ ├── rest: ∅ │ ├── posts: (length: 1) │ │ └── @ RequiredParameterNode (location: (1,13)-(1,14)) diff --git a/test/prism/snapshots/seattlerb/defn_opt_splat_arg.txt b/test/prism/snapshots/seattlerb/defn_opt_splat_arg.txt index 3019e9b73e3..d90fddc6533 100644 --- a/test/prism/snapshots/seattlerb/defn_opt_splat_arg.txt +++ b/test/prism/snapshots/seattlerb/defn_opt_splat_arg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,24)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,24)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,24)) + ├── flags: newline ├── name: :f ├── name_loc: (1,4)-(1,5) = "f" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,7)-(1,19)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 1) │ │ └── @ OptionalParameterNode (location: (1,7)-(1,12)) @@ -18,7 +22,7 @@ │ │ ├── operator_loc: (1,9)-(1,10) = "=" │ │ └── value: │ │ @ IntegerNode (location: (1,11)-(1,12)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── rest: │ │ @ RestParameterNode (location: (1,14)-(1,16)) diff --git a/test/prism/snapshots/seattlerb/defn_powarg.txt b/test/prism/snapshots/seattlerb/defn_powarg.txt index bce131ad183..8d4ff4283ac 100644 --- a/test/prism/snapshots/seattlerb/defn_powarg.txt +++ b/test/prism/snapshots/seattlerb/defn_powarg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,17)) + ├── flags: newline ├── name: :f ├── name_loc: (1,4)-(1,5) = "f" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,12)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_reg_opt_reg.txt b/test/prism/snapshots/seattlerb/defn_reg_opt_reg.txt index d079e1b5f39..0cd1435e8f9 100644 --- a/test/prism/snapshots/seattlerb/defn_reg_opt_reg.txt +++ b/test/prism/snapshots/seattlerb/defn_reg_opt_reg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,23)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,23)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,23)) + ├── flags: newline ├── name: :f ├── name_loc: (1,4)-(1,5) = "f" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,18)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) │ │ ├── flags: ∅ @@ -21,7 +25,7 @@ │ │ ├── operator_loc: (1,11)-(1,12) = "=" │ │ └── value: │ │ @ SymbolNode (location: (1,13)-(1,15)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,13)-(1,14) = ":" │ │ ├── value_loc: (1,14)-(1,15) = "c" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_splat_arg.txt b/test/prism/snapshots/seattlerb/defn_splat_arg.txt index 109fac495ab..c137e263c44 100644 --- a/test/prism/snapshots/seattlerb/defn_splat_arg.txt +++ b/test/prism/snapshots/seattlerb/defn_splat_arg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,15)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,15)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,15)) + ├── flags: newline ├── name: :f ├── name_loc: (1,4)-(1,5) = "f" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,10)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: diff --git a/test/prism/snapshots/seattlerb/defn_unary_not.txt b/test/prism/snapshots/seattlerb/defn_unary_not.txt index 231a3c0da9e..0722d3cdca1 100644 --- a/test/prism/snapshots/seattlerb/defn_unary_not.txt +++ b/test/prism/snapshots/seattlerb/defn_unary_not.txt @@ -1,17 +1,22 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,17)) + ├── flags: newline ├── name: :! ├── name_loc: (1,4)-(1,6) = "!@" ├── receiver: ∅ ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (1,8)-(1,12)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ TrueNode (location: (1,8)-(1,12)) + │ └── flags: newline, static_literal ├── locals: [] ├── def_keyword_loc: (1,0)-(1,3) = "def" ├── operator_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/defns_reserved.txt b/test/prism/snapshots/seattlerb/defns_reserved.txt index 96860b49ce0..10361184ac8 100644 --- a/test/prism/snapshots/seattlerb/defns_reserved.txt +++ b/test/prism/snapshots/seattlerb/defns_reserved.txt @@ -1,13 +1,17 @@ @ ProgramNode (location: (1,0)-(1,20)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,20)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,20)) + ├── flags: newline ├── name: :return ├── name_loc: (1,9)-(1,15) = "return" ├── receiver: │ @ SelfNode (location: (1,4)-(1,8)) + │ └── flags: ∅ ├── parameters: ∅ ├── body: ∅ ├── locals: [] diff --git a/test/prism/snapshots/seattlerb/defs_as_arg_with_do_block_inside.txt b/test/prism/snapshots/seattlerb/defs_as_arg_with_do_block_inside.txt index 24bb14f8e14..f9479eb11bd 100644 --- a/test/prism/snapshots/seattlerb/defs_as_arg_with_do_block_inside.txt +++ b/test/prism/snapshots/seattlerb/defs_as_arg_with_do_block_inside.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,30)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,30)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,30)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :p @@ -15,16 +17,19 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ DefNode (location: (1,2)-(1,30)) + │ ├── flags: ∅ │ ├── name: :b │ ├── name_loc: (1,11)-(1,12) = "b" │ ├── receiver: │ │ @ SelfNode (location: (1,6)-(1,10)) + │ │ └── flags: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,14)-(1,25)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,14)-(1,25)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (1,14)-(1,15)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -44,6 +49,7 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (1,18)-(1,25)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: ∅ diff --git a/test/prism/snapshots/seattlerb/defs_comments.txt b/test/prism/snapshots/seattlerb/defs_comments.txt index a2976e7ee28..7f94497978b 100644 --- a/test/prism/snapshots/seattlerb/defs_comments.txt +++ b/test/prism/snapshots/seattlerb/defs_comments.txt @@ -1,13 +1,17 @@ @ ProgramNode (location: (4,0)-(5,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (4,0)-(5,3)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (4,0)-(5,3)) + ├── flags: newline ├── name: :blah ├── name_loc: (4,9)-(4,13) = "blah" ├── receiver: │ @ SelfNode (location: (4,4)-(4,8)) + │ └── flags: ∅ ├── parameters: ∅ ├── body: ∅ ├── locals: [] diff --git a/test/prism/snapshots/seattlerb/defs_endless_command.txt b/test/prism/snapshots/seattlerb/defs_endless_command.txt index f3c4e794178..b1b542296c8 100644 --- a/test/prism/snapshots/seattlerb/defs_endless_command.txt +++ b/test/prism/snapshots/seattlerb/defs_endless_command.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(1,35)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,35)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,35)) + ├── flags: newline ├── name: :some_method ├── name_loc: (1,6)-(1,17) = "some_method" ├── receiver: @@ -20,9 +23,10 @@ ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (1,20)-(1,35)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,20)-(1,35)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :other_method @@ -33,7 +37,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (1,33)-(1,35)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ ├── closing_loc: ∅ │ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/defs_endless_command_rescue.txt b/test/prism/snapshots/seattlerb/defs_endless_command_rescue.txt index b0cd34a9c83..e8a7703de3d 100644 --- a/test/prism/snapshots/seattlerb/defs_endless_command_rescue.txt +++ b/test/prism/snapshots/seattlerb/defs_endless_command_rescue.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(1,45)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,45)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,45)) + ├── flags: newline ├── name: :some_method ├── name_loc: (1,6)-(1,17) = "some_method" ├── receiver: @@ -20,8 +23,10 @@ ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (1,20)-(1,45)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (1,20)-(1,45)) + │ ├── flags: newline │ ├── expression: │ │ @ CallNode (location: (1,20)-(1,35)) │ │ ├── flags: ignore_visibility @@ -35,14 +40,14 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (1,33)-(1,35)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 42 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── keyword_loc: (1,36)-(1,42) = "rescue" │ └── rescue_expression: │ @ IntegerNode (location: (1,43)-(1,45)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 24 ├── locals: [] ├── def_keyword_loc: (1,0)-(1,3) = "def" diff --git a/test/prism/snapshots/seattlerb/defs_kwarg.txt b/test/prism/snapshots/seattlerb/defs_kwarg.txt index 53235c9bb80..86a2d562e3a 100644 --- a/test/prism/snapshots/seattlerb/defs_kwarg.txt +++ b/test/prism/snapshots/seattlerb/defs_kwarg.txt @@ -1,15 +1,20 @@ @ ProgramNode (location: (1,0)-(2,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(2,3)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(2,3)) + ├── flags: newline ├── name: :a ├── name_loc: (1,9)-(1,10) = "a" ├── receiver: │ @ SelfNode (location: (1,4)-(1,8)) + │ └── flags: ∅ ├── parameters: │ @ ParametersNode (location: (1,11)-(1,15)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -21,7 +26,7 @@ │ │ ├── name_loc: (1,11)-(1,13) = "b:" │ │ └── value: │ │ @ IntegerNode (location: (1,14)-(1,15)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── keyword_rest: ∅ │ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/defs_oneliner.txt b/test/prism/snapshots/seattlerb/defs_oneliner.txt index d32975354d9..4ddde4309d7 100644 --- a/test/prism/snapshots/seattlerb/defs_oneliner.txt +++ b/test/prism/snapshots/seattlerb/defs_oneliner.txt @@ -1,15 +1,20 @@ @ ProgramNode (location: (1,0)-(1,32)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,32)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,32)) + ├── flags: newline ├── name: :exec ├── name_loc: (1,9)-(1,13) = "exec" ├── receiver: │ @ SelfNode (location: (1,4)-(1,8)) + │ └── flags: ∅ ├── parameters: │ @ ParametersNode (location: (1,14)-(1,17)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (1,14)-(1,17)) │ │ ├── flags: ∅ @@ -22,9 +27,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,21)-(1,32)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,21)-(1,32)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :system @@ -35,6 +41,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ LocalVariableReadNode (location: (1,28)-(1,31)) + │ │ ├── flags: ∅ │ │ ├── name: :cmd │ │ └── depth: 0 │ ├── closing_loc: (1,31)-(1,32) = ")" diff --git a/test/prism/snapshots/seattlerb/defs_oneliner_eq2.txt b/test/prism/snapshots/seattlerb/defs_oneliner_eq2.txt index fcc5c63cf06..f51a58e37e6 100644 --- a/test/prism/snapshots/seattlerb/defs_oneliner_eq2.txt +++ b/test/prism/snapshots/seattlerb/defs_oneliner_eq2.txt @@ -1,26 +1,34 @@ @ ProgramNode (location: (1,0)-(3,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,3)) + ├── flags: ∅ └── body: (length: 1) └── @ ClassNode (location: (1,0)-(3,3)) + ├── flags: newline ├── locals: [] ├── class_keyword_loc: (1,0)-(1,5) = "class" ├── constant_path: │ @ ConstantReadNode (location: (1,6)-(1,7)) + │ ├── flags: ∅ │ └── name: :X ├── inheritance_operator_loc: ∅ ├── superclass: ∅ ├── body: │ @ StatementsNode (location: (2,2)-(2,21)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ DefNode (location: (2,2)-(2,21)) + │ ├── flags: newline │ ├── name: :== │ ├── name_loc: (2,11)-(2,13) = "==" │ ├── receiver: │ │ @ SelfNode (location: (2,6)-(2,10)) + │ │ └── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (2,14)-(2,15)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (2,14)-(2,15)) │ │ │ ├── flags: ∅ @@ -33,9 +41,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (2,19)-(2,21)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (2,19)-(2,21)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 42 │ ├── locals: [:o] │ ├── def_keyword_loc: (2,2)-(2,5) = "def" diff --git a/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt b/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt index f7762107682..13b91598944 100644 --- a/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt +++ b/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt @@ -1,15 +1,20 @@ @ ProgramNode (location: (1,0)-(13,43)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(13,43)) + ├── flags: ∅ └── body: (length: 3) ├── @ DefNode (location: (1,0)-(5,3)) + │ ├── flags: newline │ ├── name: :exec │ ├── name_loc: (1,9)-(1,13) = "exec" │ ├── receiver: │ │ @ SelfNode (location: (1,4)-(1,8)) + │ │ └── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,14)-(1,17)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,14)-(1,17)) │ │ │ ├── flags: ∅ @@ -22,12 +27,14 @@ │ │ └── block: ∅ │ ├── body: │ │ @ BeginNode (location: (1,0)-(5,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (2,2)-(2,13)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (2,2)-(2,13)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :system @@ -38,20 +45,24 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (2,9)-(2,12)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :cmd │ │ │ │ └── depth: 0 │ │ │ ├── closing_loc: (2,12)-(2,13) = ")" │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (3,0)-(4,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (3,0)-(3,6) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (4,2)-(4,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ NilNode (location: (4,2)-(4,5)) + │ │ │ │ └── flags: newline, static_literal │ │ │ └── consequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ @@ -64,12 +75,15 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (5,0)-(5,3) = "end" ├── @ DefNode (location: (8,0)-(10,3)) + │ ├── flags: newline │ ├── name: :exec │ ├── name_loc: (8,9)-(8,13) = "exec" │ ├── receiver: │ │ @ SelfNode (location: (8,4)-(8,8)) + │ │ └── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (8,14)-(8,17)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (8,14)-(8,17)) │ │ │ ├── flags: ∅ @@ -82,8 +96,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (9,2)-(9,24)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (9,2)-(9,24)) + │ │ ├── flags: newline │ │ ├── expression: │ │ │ @ CallNode (location: (9,2)-(9,13)) │ │ │ ├── flags: ignore_visibility @@ -97,6 +113,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (9,9)-(9,12)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :cmd │ │ │ │ └── depth: 0 │ │ │ ├── closing_loc: (9,12)-(9,13) = ")" @@ -104,6 +121,7 @@ │ │ ├── keyword_loc: (9,14)-(9,20) = "rescue" │ │ └── rescue_expression: │ │ @ NilNode (location: (9,21)-(9,24)) + │ │ └── flags: static_literal │ ├── locals: [:cmd] │ ├── def_keyword_loc: (8,0)-(8,3) = "def" │ ├── operator_loc: (8,8)-(8,9) = "." @@ -112,12 +130,15 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (10,0)-(10,3) = "end" └── @ DefNode (location: (13,0)-(13,43)) + ├── flags: newline ├── name: :exec ├── name_loc: (13,9)-(13,13) = "exec" ├── receiver: │ @ SelfNode (location: (13,4)-(13,8)) + │ └── flags: ∅ ├── parameters: │ @ ParametersNode (location: (13,14)-(13,17)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (13,14)-(13,17)) │ │ ├── flags: ∅ @@ -130,8 +151,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (13,21)-(13,43)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (13,21)-(13,43)) + │ ├── flags: newline │ ├── expression: │ │ @ CallNode (location: (13,21)-(13,32)) │ │ ├── flags: ignore_visibility @@ -145,6 +168,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (13,28)-(13,31)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :cmd │ │ │ └── depth: 0 │ │ ├── closing_loc: (13,31)-(13,32) = ")" @@ -152,6 +176,7 @@ │ ├── keyword_loc: (13,33)-(13,39) = "rescue" │ └── rescue_expression: │ @ NilNode (location: (13,40)-(13,43)) + │ └── flags: static_literal ├── locals: [:cmd] ├── def_keyword_loc: (13,0)-(13,3) = "def" ├── operator_loc: (13,8)-(13,9) = "." diff --git a/test/prism/snapshots/seattlerb/difficult0_.txt b/test/prism/snapshots/seattlerb/difficult0_.txt index 8ba30ccf85d..233440b1019 100644 --- a/test/prism/snapshots/seattlerb/difficult0_.txt +++ b/test/prism/snapshots/seattlerb/difficult0_.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(4,8)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,8)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(4,8)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :p @@ -35,17 +37,17 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ InterpolatedStringNode (location: (1,9)-(4,4)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── opening_loc: (1,9)-(1,10) = "'" │ │ │ ├── parts: (length: 2) │ │ │ │ ├── @ StringNode (location: (1,10)-(2,0)) - │ │ │ │ │ ├── flags: frozen + │ │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── content_loc: (1,10)-(2,0) = "b\n" │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── unescaped: "b\n" │ │ │ │ └── @ StringNode (location: (4,0)-(4,3)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (4,0)-(4,3) = " c" │ │ │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/difficult1_line_numbers.txt b/test/prism/snapshots/seattlerb/difficult1_line_numbers.txt index da2306312c7..daf2f413bf1 100644 --- a/test/prism/snapshots/seattlerb/difficult1_line_numbers.txt +++ b/test/prism/snapshots/seattlerb/difficult1_line_numbers.txt @@ -1,18 +1,23 @@ @ ProgramNode (location: (1,0)-(12,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(12,3)) + ├── flags: ∅ └── body: (length: 1) └── @ IfNode (location: (1,0)-(12,3)) + ├── flags: newline ├── if_keyword_loc: (1,0)-(1,2) = "if" ├── predicate: │ @ TrueNode (location: (1,3)-(1,7)) + │ └── flags: static_literal ├── then_keyword_loc: ∅ ├── statements: │ @ StatementsNode (location: (2,2)-(11,11)) + │ ├── flags: ∅ │ └── body: (length: 10) │ ├── @ CallNode (location: (2,2)-(2,5)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :p @@ -23,12 +28,12 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (2,4)-(2,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── @ CallNode (location: (3,2)-(3,7)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (3,2)-(3,3)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -49,12 +54,12 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (3,6)-(3,7)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── @ CallNode (location: (4,2)-(4,10)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (4,2)-(4,3)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -75,15 +80,15 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 2) │ │ │ ├── @ IntegerNode (location: (4,6)-(4,7)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 3 │ │ │ └── @ IntegerNode (location: (4,9)-(4,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 4 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── @ CallNode (location: (5,2)-(5,7)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (5,2)-(5,3)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -104,12 +109,12 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (5,6)-(5,7)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 5 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── @ CallNode (location: (6,2)-(6,10)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (6,2)-(6,3)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -130,15 +135,15 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 2) │ │ │ ├── @ IntegerNode (location: (6,6)-(6,7)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 6 │ │ │ └── @ IntegerNode (location: (6,9)-(6,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 7 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── @ CallNode (location: (7,2)-(7,6)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :p @@ -149,12 +154,12 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (7,4)-(7,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: (7,5)-(7,6) = ")" │ │ └── block: ∅ │ ├── @ CallNode (location: (8,2)-(8,8)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (8,2)-(8,3)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -175,12 +180,12 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (8,6)-(8,7)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── closing_loc: (8,7)-(8,8) = ")" │ │ └── block: ∅ │ ├── @ CallNode (location: (9,2)-(9,11)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (9,2)-(9,3)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -201,15 +206,15 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 2) │ │ │ ├── @ IntegerNode (location: (9,6)-(9,7)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 3 │ │ │ └── @ IntegerNode (location: (9,9)-(9,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 4 │ │ ├── closing_loc: (9,10)-(9,11) = ")" │ │ └── block: ∅ │ ├── @ CallNode (location: (10,2)-(10,8)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ CallNode (location: (10,2)-(10,3)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -230,12 +235,12 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (10,6)-(10,7)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 5 │ │ ├── closing_loc: (10,7)-(10,8) = ")" │ │ └── block: ∅ │ └── @ CallNode (location: (11,2)-(11,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (11,2)-(11,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -256,10 +261,10 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ IntegerNode (location: (11,6)-(11,7)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 6 │ │ └── @ IntegerNode (location: (11,9)-(11,10)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 7 │ ├── closing_loc: (11,10)-(11,11) = ")" │ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/difficult1_line_numbers2.txt b/test/prism/snapshots/seattlerb/difficult1_line_numbers2.txt index f586634c59b..480e51c2591 100644 --- a/test/prism/snapshots/seattlerb/difficult1_line_numbers2.txt +++ b/test/prism/snapshots/seattlerb/difficult1_line_numbers2.txt @@ -1,18 +1,23 @@ @ ProgramNode (location: (1,0)-(7,1)) +├── flags: ∅ ├── locals: [:b, :c] └── statements: @ StatementsNode (location: (1,0)-(7,1)) + ├── flags: ∅ └── body: (length: 2) ├── @ IfNode (location: (1,0)-(6,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (1,0)-(1,2) = "if" │ ├── predicate: │ │ @ TrueNode (location: (1,3)-(1,7)) + │ │ └── flags: static_literal │ ├── then_keyword_loc: (1,8)-(1,12) = "then" │ ├── statements: │ │ @ StatementsNode (location: (2,2)-(5,6)) + │ │ ├── flags: ∅ │ │ └── body: (length: 4) │ │ ├── @ CallNode (location: (2,2)-(2,8)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :p @@ -31,16 +36,17 @@ │ │ │ ├── closing_loc: (2,7)-(2,8) = ")" │ │ │ └── block: ∅ │ │ ├── @ LocalVariableWriteNode (location: (3,2)-(3,7)) + │ │ │ ├── flags: newline │ │ │ ├── name: :b │ │ │ ├── depth: 0 │ │ │ ├── name_loc: (3,2)-(3,3) = "b" │ │ │ ├── value: │ │ │ │ @ IntegerNode (location: (3,6)-(3,7)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── operator_loc: (3,4)-(3,5) = "=" │ │ ├── @ CallNode (location: (4,2)-(4,5)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :p @@ -51,23 +57,25 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (4,4)-(4,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :b │ │ │ │ └── depth: 0 │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ LocalVariableWriteNode (location: (5,2)-(5,6)) + │ │ ├── flags: newline │ │ ├── name: :c │ │ ├── depth: 0 │ │ ├── name_loc: (5,2)-(5,3) = "c" │ │ ├── value: │ │ │ @ IntegerNode (location: (5,5)-(5,6)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── operator_loc: (5,4)-(5,5) = "=" │ ├── consequent: ∅ │ └── end_keyword_loc: (6,0)-(6,3) = "end" └── @ CallNode (location: (7,0)-(7,1)) - ├── flags: variable_call, ignore_visibility + ├── flags: newline, variable_call, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a diff --git a/test/prism/snapshots/seattlerb/difficult2_.txt b/test/prism/snapshots/seattlerb/difficult2_.txt index b53d4cad3f6..2ffeda15260 100644 --- a/test/prism/snapshots/seattlerb/difficult2_.txt +++ b/test/prism/snapshots/seattlerb/difficult2_.txt @@ -1,20 +1,24 @@ @ ProgramNode (location: (1,0)-(2,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(2,6)) + ├── flags: ∅ └── body: (length: 2) ├── @ IfNode (location: (1,0)-(1,13)) + │ ├── flags: newline │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ IntegerNode (location: (1,0)-(1,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── then_keyword_loc: (1,2)-(1,3) = "?" │ ├── statements: │ │ @ StatementsNode (location: (1,4)-(1,9)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,4)-(1,9)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :b @@ -34,17 +38,19 @@ │ │ └── block: ∅ │ ├── consequent: │ │ @ ElseNode (location: (1,10)-(1,13)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (1,10)-(1,11) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (1,12)-(1,13)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ IntegerNode (location: (1,12)-(1,13)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: newline, static_literal, decimal │ │ │ └── value: 2 │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ └── @ CallNode (location: (2,0)-(2,6)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :a @@ -58,16 +64,17 @@ │ ├── flags: symbol_keys │ └── elements: (length: 1) │ └── @ AssocNode (location: (2,2)-(2,6)) + │ ├── flags: static_literal │ ├── key: │ │ @ SymbolNode (location: (2,2)-(2,4)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (2,2)-(2,3) = "d" │ │ ├── closing_loc: (2,3)-(2,4) = ":" │ │ └── unescaped: "d" │ ├── value: │ │ @ IntegerNode (location: (2,5)-(2,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ └── operator_loc: ∅ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/difficult3_.txt b/test/prism/snapshots/seattlerb/difficult3_.txt index f074c49a9f9..313cfa4cf26 100644 --- a/test/prism/snapshots/seattlerb/difficult3_.txt +++ b/test/prism/snapshots/seattlerb/difficult3_.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,18)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,18)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,18)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,22 +16,27 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,18)) + ├── flags: ∅ ├── locals: [:a, :b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,16)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,15)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :a │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :b │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (1,12)-(1,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (1,12)-(1,13) = "*" │ │ │ │ └── expression: │ │ │ │ @ RequiredParameterNode (location: (1,13)-(1,14)) diff --git a/test/prism/snapshots/seattlerb/difficult3_2.txt b/test/prism/snapshots/seattlerb/difficult3_2.txt index af1a6491716..e1eed78c796 100644 --- a/test/prism/snapshots/seattlerb/difficult3_2.txt +++ b/test/prism/snapshots/seattlerb/difficult3_2.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,13)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,13)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,13)) + ├── flags: ∅ ├── locals: [:a, :b] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,11)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,10)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: diff --git a/test/prism/snapshots/seattlerb/difficult3_3.txt b/test/prism/snapshots/seattlerb/difficult3_3.txt index e49bbcd55ab..5dcd71d6515 100644 --- a/test/prism/snapshots/seattlerb/difficult3_3.txt +++ b/test/prism/snapshots/seattlerb/difficult3_3.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,11 +16,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,17)) + ├── flags: ∅ ├── locals: [:a, :b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,15)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: diff --git a/test/prism/snapshots/seattlerb/difficult3_4.txt b/test/prism/snapshots/seattlerb/difficult3_4.txt index 73afffb4cb7..8d84f2d4c3d 100644 --- a/test/prism/snapshots/seattlerb/difficult3_4.txt +++ b/test/prism/snapshots/seattlerb/difficult3_4.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [:a] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ LocalVariableWriteNode (location: (1,0)-(1,17)) + ├── flags: newline ├── name: :a ├── depth: 0 ├── name_loc: (1,0)-(1,1) = "a" ├── value: │ @ IfNode (location: (1,2)-(1,17)) + │ ├── flags: newline │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (1,2)-(1,3)) @@ -24,15 +28,20 @@ │ ├── then_keyword_loc: (1,4)-(1,5) = "?" │ ├── statements: │ │ @ StatementsNode (location: (1,6)-(1,10)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ TrueNode (location: (1,6)-(1,10)) + │ │ └── flags: newline, static_literal │ ├── consequent: │ │ @ ElseNode (location: (1,10)-(1,17)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (1,10)-(1,11) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (1,12)-(1,17)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ FalseNode (location: (1,12)-(1,17)) + │ │ │ └── flags: newline, static_literal │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ └── operator_loc: (1,1)-(1,2) = "=" diff --git a/test/prism/snapshots/seattlerb/difficult3_5.txt b/test/prism/snapshots/seattlerb/difficult3_5.txt index 793c3f1e118..b8bbbdc03ec 100644 --- a/test/prism/snapshots/seattlerb/difficult3_5.txt +++ b/test/prism/snapshots/seattlerb/difficult3_5.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,19)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,19)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,19)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -15,21 +17,24 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ LambdaNode (location: (1,2)-(1,19)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── operator_loc: (1,2)-(1,4) = "->" │ ├── opening_loc: (1,7)-(1,8) = "{" │ ├── closing_loc: (1,18)-(1,19) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (1,4)-(1,6)) + │ │ ├── flags: ∅ │ │ ├── parameters: ∅ │ │ ├── locals: (length: 0) │ │ ├── opening_loc: (1,4)-(1,5) = "(" │ │ └── closing_loc: (1,5)-(1,6) = ")" │ └── body: │ @ StatementsNode (location: (1,9)-(1,17)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,9)-(1,17)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :g @@ -39,6 +44,7 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,11)-(1,17)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ diff --git a/test/prism/snapshots/seattlerb/difficult3__10.txt b/test/prism/snapshots/seattlerb/difficult3__10.txt index 0131e44d445..a5ce0762f16 100644 --- a/test/prism/snapshots/seattlerb/difficult3__10.txt +++ b/test/prism/snapshots/seattlerb/difficult3__10.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,18)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,18)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,18)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,19 +16,24 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,18)) + ├── flags: ∅ ├── locals: [:a, :b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,16)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,15)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :a │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 0) │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (1,9)-(1,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" │ │ │ │ └── expression: │ │ │ │ @ RequiredParameterNode (location: (1,10)-(1,11)) diff --git a/test/prism/snapshots/seattlerb/difficult3__11.txt b/test/prism/snapshots/seattlerb/difficult3__11.txt index a658b091c23..c1017885d8e 100644 --- a/test/prism/snapshots/seattlerb/difficult3__11.txt +++ b/test/prism/snapshots/seattlerb/difficult3__11.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,14)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,14)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,19 +16,24 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,14)) + ├── flags: ∅ ├── locals: [:a] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,12)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :a │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 0) │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (1,9)-(1,10)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" │ │ │ │ └── expression: ∅ │ │ │ ├── rights: (length: 0) diff --git a/test/prism/snapshots/seattlerb/difficult3__12.txt b/test/prism/snapshots/seattlerb/difficult3__12.txt index 5aa252fe6ac..bbcfad48b4c 100644 --- a/test/prism/snapshots/seattlerb/difficult3__12.txt +++ b/test/prism/snapshots/seattlerb/difficult3__12.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,19 +16,24 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,17)) + ├── flags: ∅ ├── locals: [:a, :b] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,15)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :a │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 0) │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (1,9)-(1,10)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" │ │ │ │ └── expression: ∅ │ │ │ ├── rights: (length: 1) diff --git a/test/prism/snapshots/seattlerb/difficult3__6.txt b/test/prism/snapshots/seattlerb/difficult3__6.txt index a42a625be73..95d1ac39b58 100644 --- a/test/prism/snapshots/seattlerb/difficult3__6.txt +++ b/test/prism/snapshots/seattlerb/difficult3__6.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,21)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,21)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,21)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,22 +16,27 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,21)) + ├── flags: ∅ ├── locals: [:a, :b, :c, :d] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,19)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,18)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :a │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,18)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :b │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (1,12)-(1,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (1,12)-(1,13) = "*" │ │ │ │ └── expression: │ │ │ │ @ RequiredParameterNode (location: (1,13)-(1,14)) diff --git a/test/prism/snapshots/seattlerb/difficult3__7.txt b/test/prism/snapshots/seattlerb/difficult3__7.txt index b08025804ca..4640cfdb534 100644 --- a/test/prism/snapshots/seattlerb/difficult3__7.txt +++ b/test/prism/snapshots/seattlerb/difficult3__7.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,22 +16,27 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,17)) + ├── flags: ∅ ├── locals: [:a, :b] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,15)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :a │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :b │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (1,12)-(1,13)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (1,12)-(1,13) = "*" │ │ │ │ └── expression: ∅ │ │ │ ├── rights: (length: 0) diff --git a/test/prism/snapshots/seattlerb/difficult3__8.txt b/test/prism/snapshots/seattlerb/difficult3__8.txt index b2b118faef0..e19cbfc279e 100644 --- a/test/prism/snapshots/seattlerb/difficult3__8.txt +++ b/test/prism/snapshots/seattlerb/difficult3__8.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,20)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,20)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,20)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,22 +16,27 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,20)) + ├── flags: ∅ ├── locals: [:a, :b, :c] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,18)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,17)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :a │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :b │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (1,12)-(1,13)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (1,12)-(1,13) = "*" │ │ │ │ └── expression: ∅ │ │ │ ├── rights: (length: 1) diff --git a/test/prism/snapshots/seattlerb/difficult3__9.txt b/test/prism/snapshots/seattlerb/difficult3__9.txt index 85c10a4432b..2259351b41f 100644 --- a/test/prism/snapshots/seattlerb/difficult3__9.txt +++ b/test/prism/snapshots/seattlerb/difficult3__9.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,15)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,15)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,15)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :f @@ -14,19 +16,24 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,2)-(1,15)) + ├── flags: ∅ ├── locals: [:a, :b] ├── parameters: │ @ BlockParametersNode (location: (1,4)-(1,13)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,5)-(1,12)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :a │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 0) │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (1,9)-(1,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" │ │ │ │ └── expression: │ │ │ │ @ RequiredParameterNode (location: (1,10)-(1,11)) diff --git a/test/prism/snapshots/seattlerb/difficult4__leading_dots.txt b/test/prism/snapshots/seattlerb/difficult4__leading_dots.txt index 8307c806e62..4201ed00aad 100644 --- a/test/prism/snapshots/seattlerb/difficult4__leading_dots.txt +++ b/test/prism/snapshots/seattlerb/difficult4__leading_dots.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(2,2)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(2,2)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(2,2)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(1,1)) │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/seattlerb/difficult4__leading_dots2.txt b/test/prism/snapshots/seattlerb/difficult4__leading_dots2.txt index ee4370c0f03..8dd122ddd44 100644 --- a/test/prism/snapshots/seattlerb/difficult4__leading_dots2.txt +++ b/test/prism/snapshots/seattlerb/difficult4__leading_dots2.txt @@ -1,16 +1,18 @@ @ ProgramNode (location: (1,0)-(2,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(2,3)) + ├── flags: ∅ └── body: (length: 2) ├── @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 1 └── @ RangeNode (location: (2,0)-(2,3)) - ├── flags: ∅ + ├── flags: newline, static_literal ├── left: ∅ ├── right: │ @ IntegerNode (location: (2,2)-(2,3)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 3 └── operator_loc: (2,0)-(2,2) = ".." diff --git a/test/prism/snapshots/seattlerb/difficult6_.txt b/test/prism/snapshots/seattlerb/difficult6_.txt index bf80034fe95..fc273bda46d 100644 --- a/test/prism/snapshots/seattlerb/difficult6_.txt +++ b/test/prism/snapshots/seattlerb/difficult6_.txt @@ -1,17 +1,22 @@ @ ProgramNode (location: (1,0)-(1,25)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,25)) + ├── flags: ∅ └── body: (length: 1) └── @ LambdaNode (location: (1,0)-(1,25)) + ├── flags: newline ├── locals: [:a, :b] ├── operator_loc: (1,0)-(1,2) = "->" ├── opening_loc: (1,13)-(1,14) = "{" ├── closing_loc: (1,24)-(1,25) = "}" ├── parameters: │ @ BlockParametersNode (location: (1,2)-(1,12)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,3)-(1,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,3)-(1,4)) │ │ │ ├── flags: ∅ @@ -24,6 +29,7 @@ │ │ │ ├── operator_loc: (1,7)-(1,8) = "=" │ │ │ └── value: │ │ │ @ NilNode (location: (1,8)-(1,11)) + │ │ │ └── flags: static_literal │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) │ │ ├── keywords: (length: 0) @@ -34,9 +40,10 @@ │ └── closing_loc: (1,11)-(1,12) = ")" └── body: @ StatementsNode (location: (1,15)-(1,23)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,15)-(1,23)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :p @@ -50,9 +57,11 @@ │ ├── flags: ∅ │ ├── elements: (length: 2) │ │ ├── @ LocalVariableReadNode (location: (1,18)-(1,19)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ └── @ LocalVariableReadNode (location: (1,21)-(1,22)) + │ │ ├── flags: ∅ │ │ ├── name: :b │ │ └── depth: 0 │ ├── opening_loc: (1,17)-(1,18) = "[" diff --git a/test/prism/snapshots/seattlerb/difficult6__7.txt b/test/prism/snapshots/seattlerb/difficult6__7.txt index 7fe70c70332..509da6914f4 100644 --- a/test/prism/snapshots/seattlerb/difficult6__7.txt +++ b/test/prism/snapshots/seattlerb/difficult6__7.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,11)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,11)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,11)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(1,1)) │ ├── flags: variable_call, ignore_visibility @@ -25,24 +27,28 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ ParenthesesNode (location: (1,4)-(1,7)) + │ ├── flags: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,5)-(1,6)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 │ ├── opening_loc: (1,4)-(1,5) = "(" │ └── closing_loc: (1,6)-(1,7) = ")" ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,8)-(1,11)) + ├── flags: ∅ ├── locals: [] ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (1,9)-(1,10)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,9)-(1,10)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :c diff --git a/test/prism/snapshots/seattlerb/difficult6__8.txt b/test/prism/snapshots/seattlerb/difficult6__8.txt index 7f915e283c7..c6fece62cb4 100644 --- a/test/prism/snapshots/seattlerb/difficult6__8.txt +++ b/test/prism/snapshots/seattlerb/difficult6__8.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,12)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,12)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,12)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,0)-(1,1)) │ ├── flags: variable_call, ignore_visibility @@ -25,24 +27,28 @@ │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ ParenthesesNode (location: (1,5)-(1,8)) + │ ├── flags: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,6)-(1,7)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 │ ├── opening_loc: (1,5)-(1,6) = "(" │ └── closing_loc: (1,7)-(1,8) = ")" ├── closing_loc: ∅ └── block: @ BlockNode (location: (1,9)-(1,12)) + ├── flags: ∅ ├── locals: [] ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (1,10)-(1,11)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,10)-(1,11)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :c diff --git a/test/prism/snapshots/seattlerb/difficult7_.txt b/test/prism/snapshots/seattlerb/difficult7_.txt index 40c778cf6cc..06357988484 100644 --- a/test/prism/snapshots/seattlerb/difficult7_.txt +++ b/test/prism/snapshots/seattlerb/difficult7_.txt @@ -1,15 +1,19 @@ @ ProgramNode (location: (1,6)-(4,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,6)-(4,7)) + ├── flags: ∅ └── body: (length: 1) └── @ HashNode (location: (1,6)-(4,7)) + ├── flags: newline ├── opening_loc: (1,6)-(1,7) = "{" ├── elements: (length: 2) │ ├── @ AssocNode (location: (2,8)-(2,33)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (2,8)-(2,10)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (2,8)-(2,9) = "a" │ │ │ ├── closing_loc: (2,9)-(2,10) = ":" @@ -26,12 +30,15 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: │ │ │ @ BlockNode (location: (2,18)-(2,33)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [] │ │ │ ├── parameters: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (2,20)-(2,31)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IfNode (location: (2,20)-(2,31)) + │ │ │ │ ├── flags: newline │ │ │ │ ├── if_keyword_loc: ∅ │ │ │ │ ├── predicate: │ │ │ │ │ @ CallNode (location: (2,20)-(2,21)) @@ -47,9 +54,10 @@ │ │ │ │ ├── then_keyword_loc: (2,22)-(2,23) = "?" │ │ │ │ ├── statements: │ │ │ │ │ @ StatementsNode (location: (2,24)-(2,27)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ CallNode (location: (2,24)-(2,27)) - │ │ │ │ │ ├── flags: ignore_visibility + │ │ │ │ │ ├── flags: newline, ignore_visibility │ │ │ │ │ ├── receiver: ∅ │ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ │ ├── name: :c @@ -60,12 +68,14 @@ │ │ │ │ │ └── block: ∅ │ │ │ │ ├── consequent: │ │ │ │ │ @ ElseNode (location: (2,28)-(2,31)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── else_keyword_loc: (2,28)-(2,29) = ":" │ │ │ │ │ ├── statements: │ │ │ │ │ │ @ StatementsNode (location: (2,30)-(2,31)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ │ └── @ CallNode (location: (2,30)-(2,31)) - │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ │ │ ├── receiver: ∅ │ │ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ │ │ ├── name: :d @@ -80,14 +90,16 @@ │ │ │ └── closing_loc: (2,32)-(2,33) = "}" │ │ └── operator_loc: ∅ │ └── @ AssocNode (location: (3,8)-(3,14)) + │ ├── flags: static_literal │ ├── key: │ │ @ SymbolNode (location: (3,8)-(3,10)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (3,8)-(3,9) = "e" │ │ ├── closing_loc: (3,9)-(3,10) = ":" │ │ └── unescaped: "e" │ ├── value: │ │ @ NilNode (location: (3,11)-(3,14)) + │ │ └── flags: static_literal │ └── operator_loc: ∅ └── closing_loc: (4,6)-(4,7) = "}" diff --git a/test/prism/snapshots/seattlerb/do_bug.txt b/test/prism/snapshots/seattlerb/do_bug.txt index 5877b18d686..8d1a0b786ce 100644 --- a/test/prism/snapshots/seattlerb/do_bug.txt +++ b/test/prism/snapshots/seattlerb/do_bug.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(4,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,3)) + ├── flags: ∅ └── body: (length: 2) ├── @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a @@ -15,12 +17,12 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (1,2)-(1,3)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── closing_loc: ∅ │ └── block: ∅ └── @ CallNode (location: (2,0)-(4,3)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (2,0)-(2,1)) │ ├── flags: variable_call, ignore_visibility @@ -40,11 +42,14 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (2,4)-(4,3)) + ├── flags: ∅ ├── locals: [:c] ├── parameters: │ @ BlockParametersNode (location: (2,7)-(2,10)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (2,8)-(2,9)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (2,8)-(2,9)) │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/do_lambda.txt b/test/prism/snapshots/seattlerb/do_lambda.txt index 4713fb3e4b7..76383b0ada0 100644 --- a/test/prism/snapshots/seattlerb/do_lambda.txt +++ b/test/prism/snapshots/seattlerb/do_lambda.txt @@ -1,15 +1,19 @@ @ ProgramNode (location: (1,0)-(1,11)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,11)) + ├── flags: ∅ └── body: (length: 1) └── @ LambdaNode (location: (1,0)-(1,11)) + ├── flags: newline ├── locals: [] ├── operator_loc: (1,0)-(1,2) = "->" ├── opening_loc: (1,5)-(1,7) = "do" ├── closing_loc: (1,8)-(1,11) = "end" ├── parameters: │ @ BlockParametersNode (location: (1,2)-(1,4)) + │ ├── flags: ∅ │ ├── parameters: ∅ │ ├── locals: (length: 0) │ ├── opening_loc: (1,2)-(1,3) = "(" diff --git a/test/prism/snapshots/seattlerb/dot2_nil__26.txt b/test/prism/snapshots/seattlerb/dot2_nil__26.txt index 104515ac3ad..fc5122055f5 100644 --- a/test/prism/snapshots/seattlerb/dot2_nil__26.txt +++ b/test/prism/snapshots/seattlerb/dot2_nil__26.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,3)) + ├── flags: ∅ └── body: (length: 1) └── @ RangeNode (location: (1,0)-(1,3)) - ├── flags: ∅ + ├── flags: newline ├── left: │ @ CallNode (location: (1,0)-(1,1)) │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/seattlerb/dot3_nil__26.txt b/test/prism/snapshots/seattlerb/dot3_nil__26.txt index ec7f57cd96f..c2277975db0 100644 --- a/test/prism/snapshots/seattlerb/dot3_nil__26.txt +++ b/test/prism/snapshots/seattlerb/dot3_nil__26.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,4)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,4)) + ├── flags: ∅ └── body: (length: 1) └── @ RangeNode (location: (1,0)-(1,4)) - ├── flags: exclude_end + ├── flags: newline, exclude_end ├── left: │ @ CallNode (location: (1,0)-(1,1)) │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/seattlerb/dstr_evstr.txt b/test/prism/snapshots/seattlerb/dstr_evstr.txt index add8ad6f5c1..143d8ff5840 100644 --- a/test/prism/snapshots/seattlerb/dstr_evstr.txt +++ b/test/prism/snapshots/seattlerb/dstr_evstr.txt @@ -1,28 +1,34 @@ @ ProgramNode (location: (1,0)-(1,12)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,12)) + ├── flags: ∅ └── body: (length: 1) └── @ InterpolatedStringNode (location: (1,0)-(1,12)) - ├── flags: ∅ + ├── flags: newline ├── opening_loc: (1,0)-(1,1) = "\"" ├── parts: (length: 2) │ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,7)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (1,1)-(1,3) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (1,3)-(1,6)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ StringNode (location: (1,3)-(1,6)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: (1,3)-(1,4) = "'" │ │ │ ├── content_loc: (1,4)-(1,5) = "a" │ │ │ ├── closing_loc: (1,5)-(1,6) = "'" │ │ │ └── unescaped: "a" │ │ └── closing_loc: (1,6)-(1,7) = "}" │ └── @ EmbeddedStatementsNode (location: (1,7)-(1,11)) + │ ├── flags: ∅ │ ├── opening_loc: (1,7)-(1,9) = "\#{" │ ├── statements: │ │ @ StatementsNode (location: (1,9)-(1,10)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,9)-(1,10)) │ │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/seattlerb/dstr_evstr_empty_end.txt b/test/prism/snapshots/seattlerb/dstr_evstr_empty_end.txt index 53f97e4b363..8e3ade63c97 100644 --- a/test/prism/snapshots/seattlerb/dstr_evstr_empty_end.txt +++ b/test/prism/snapshots/seattlerb/dstr_evstr_empty_end.txt @@ -1,15 +1,20 @@ @ ProgramNode (location: (1,0)-(1,11)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,11)) + ├── flags: ∅ └── body: (length: 1) └── @ InterpolatedSymbolNode (location: (1,0)-(1,11)) + ├── flags: newline ├── opening_loc: (1,0)-(1,2) = ":\"" ├── parts: (length: 1) │ └── @ EmbeddedStatementsNode (location: (1,2)-(1,10)) + │ ├── flags: ∅ │ ├── opening_loc: (1,2)-(1,4) = "\#{" │ ├── statements: │ │ @ StatementsNode (location: (1,4)-(1,9)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,4)-(1,9)) │ │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/seattlerb/dstr_lex_state.txt b/test/prism/snapshots/seattlerb/dstr_lex_state.txt index c4c0ef0437d..2bdeab0834e 100644 --- a/test/prism/snapshots/seattlerb/dstr_lex_state.txt +++ b/test/prism/snapshots/seattlerb/dstr_lex_state.txt @@ -1,16 +1,20 @@ @ ProgramNode (location: (1,0)-(1,8)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,8)) + ├── flags: ∅ └── body: (length: 1) └── @ InterpolatedStringNode (location: (1,0)-(1,8)) - ├── flags: ∅ + ├── flags: newline ├── opening_loc: (1,0)-(1,1) = "\"" ├── parts: (length: 1) │ └── @ EmbeddedStatementsNode (location: (1,1)-(1,7)) + │ ├── flags: ∅ │ ├── opening_loc: (1,1)-(1,3) = "\#{" │ ├── statements: │ │ @ StatementsNode (location: (1,3)-(1,6)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,3)-(1,6)) │ │ ├── flags: ignore_visibility @@ -24,7 +28,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ SymbolNode (location: (1,4)-(1,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (1,4)-(1,5) = ":" │ │ │ ├── value_loc: (1,5)-(1,6) = "a" │ │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/dstr_str.txt b/test/prism/snapshots/seattlerb/dstr_str.txt index 6fe07818809..7b3e0e36ad5 100644 --- a/test/prism/snapshots/seattlerb/dstr_str.txt +++ b/test/prism/snapshots/seattlerb/dstr_str.txt @@ -1,26 +1,30 @@ @ ProgramNode (location: (1,0)-(1,10)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,10)) + ├── flags: ∅ └── body: (length: 1) └── @ InterpolatedStringNode (location: (1,0)-(1,10)) - ├── flags: mutable + ├── flags: newline, static_literal, mutable ├── opening_loc: (1,0)-(1,1) = "\"" ├── parts: (length: 2) │ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,7)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (1,1)-(1,3) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (1,3)-(1,6)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ StringNode (location: (1,3)-(1,6)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: (1,3)-(1,4) = "'" │ │ │ ├── content_loc: (1,4)-(1,5) = "a" │ │ │ ├── closing_loc: (1,5)-(1,6) = "'" │ │ │ └── unescaped: "a" │ │ └── closing_loc: (1,6)-(1,7) = "}" │ └── @ StringNode (location: (1,7)-(1,9)) - │ ├── flags: frozen + │ ├── flags: static_literal, frozen │ ├── opening_loc: ∅ │ ├── content_loc: (1,7)-(1,9) = " b" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/dsym_esc_to_sym.txt b/test/prism/snapshots/seattlerb/dsym_esc_to_sym.txt index 7b1b68131e0..4224e305e9f 100644 --- a/test/prism/snapshots/seattlerb/dsym_esc_to_sym.txt +++ b/test/prism/snapshots/seattlerb/dsym_esc_to_sym.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ SymbolNode (location: (1,0)-(1,17)) - ├── flags: forced_utf8_encoding + ├── flags: newline, static_literal, forced_utf8_encoding ├── opening_loc: (1,0)-(1,2) = ":\"" ├── value_loc: (1,2)-(1,16) = "Variet\\303\\240" ├── closing_loc: (1,16)-(1,17) = "\"" diff --git a/test/prism/snapshots/seattlerb/dsym_to_sym.txt b/test/prism/snapshots/seattlerb/dsym_to_sym.txt index eb7e435c630..7c5d2bef874 100644 --- a/test/prism/snapshots/seattlerb/dsym_to_sym.txt +++ b/test/prism/snapshots/seattlerb/dsym_to_sym.txt @@ -1,35 +1,39 @@ @ ProgramNode (location: (1,0)-(3,13)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,13)) + ├── flags: ∅ └── body: (length: 2) ├── @ AliasMethodNode (location: (1,0)-(1,17)) + │ ├── flags: newline │ ├── new_name: │ │ @ SymbolNode (location: (1,6)-(1,11)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,6)-(1,8) = ":\"" │ │ ├── value_loc: (1,8)-(1,10) = "<<" │ │ ├── closing_loc: (1,10)-(1,11) = "\"" │ │ └── unescaped: "<<" │ ├── old_name: │ │ @ SymbolNode (location: (1,12)-(1,17)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,12)-(1,14) = ":\"" │ │ ├── value_loc: (1,14)-(1,16) = ">>" │ │ ├── closing_loc: (1,16)-(1,17) = "\"" │ │ └── unescaped: ">>" │ └── keyword_loc: (1,0)-(1,5) = "alias" └── @ AliasMethodNode (location: (3,0)-(3,13)) + ├── flags: newline ├── new_name: │ @ SymbolNode (location: (3,6)-(3,9)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (3,6)-(3,7) = ":" │ ├── value_loc: (3,7)-(3,9) = "<<" │ ├── closing_loc: ∅ │ └── unescaped: "<<" ├── old_name: │ @ SymbolNode (location: (3,10)-(3,13)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (3,10)-(3,11) = ":" │ ├── value_loc: (3,11)-(3,13) = ">>" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/eq_begin_line_numbers.txt b/test/prism/snapshots/seattlerb/eq_begin_line_numbers.txt index a5fc3951d69..010ee71da04 100644 --- a/test/prism/snapshots/seattlerb/eq_begin_line_numbers.txt +++ b/test/prism/snapshots/seattlerb/eq_begin_line_numbers.txt @@ -1,11 +1,13 @@ @ ProgramNode (location: (1,0)-(6,1)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(6,1)) + ├── flags: ∅ └── body: (length: 2) ├── @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 1 └── @ IntegerNode (location: (6,0)-(6,1)) - ├── flags: decimal + ├── flags: newline, static_literal, decimal └── value: 2 diff --git a/test/prism/snapshots/seattlerb/eq_begin_why_wont_people_use_their_spacebar.txt b/test/prism/snapshots/seattlerb/eq_begin_why_wont_people_use_their_spacebar.txt index 2103bde8cbf..5f6a3fe62ee 100644 --- a/test/prism/snapshots/seattlerb/eq_begin_why_wont_people_use_their_spacebar.txt +++ b/test/prism/snapshots/seattlerb/eq_begin_why_wont_people_use_their_spacebar.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(3,8)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,8)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(3,8)) - ├── flags: attribute_write + ├── flags: newline, attribute_write ├── receiver: │ @ CallNode (location: (1,0)-(1,1)) │ ├── flags: variable_call, ignore_visibility @@ -35,12 +37,14 @@ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ └── @ BeginNode (location: (1,5)-(3,8)) + │ ├── flags: ∅ │ ├── begin_keyword_loc: (1,5)-(1,10) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (2,7)-(2,9)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (2,7)-(2,9)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 42 │ ├── rescue_clause: ∅ │ ├── else_clause: ∅ diff --git a/test/prism/snapshots/seattlerb/evstr_evstr.txt b/test/prism/snapshots/seattlerb/evstr_evstr.txt index 9c801299f81..c8dba1c3e55 100644 --- a/test/prism/snapshots/seattlerb/evstr_evstr.txt +++ b/test/prism/snapshots/seattlerb/evstr_evstr.txt @@ -1,16 +1,20 @@ @ ProgramNode (location: (1,0)-(1,10)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,10)) + ├── flags: ∅ └── body: (length: 1) └── @ InterpolatedStringNode (location: (1,0)-(1,10)) - ├── flags: ∅ + ├── flags: newline ├── opening_loc: (1,0)-(1,1) = "\"" ├── parts: (length: 2) │ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,5)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (1,1)-(1,3) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (1,3)-(1,4)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (1,3)-(1,4)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -24,9 +28,11 @@ │ │ │ └── block: ∅ │ │ └── closing_loc: (1,4)-(1,5) = "}" │ └── @ EmbeddedStatementsNode (location: (1,5)-(1,9)) + │ ├── flags: ∅ │ ├── opening_loc: (1,5)-(1,7) = "\#{" │ ├── statements: │ │ @ StatementsNode (location: (1,7)-(1,8)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,7)-(1,8)) │ │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/seattlerb/evstr_str.txt b/test/prism/snapshots/seattlerb/evstr_str.txt index 54319e613c5..69a992b19a9 100644 --- a/test/prism/snapshots/seattlerb/evstr_str.txt +++ b/test/prism/snapshots/seattlerb/evstr_str.txt @@ -1,16 +1,20 @@ @ ProgramNode (location: (1,0)-(1,8)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,8)) + ├── flags: ∅ └── body: (length: 1) └── @ InterpolatedStringNode (location: (1,0)-(1,8)) - ├── flags: ∅ + ├── flags: newline ├── opening_loc: (1,0)-(1,1) = "\"" ├── parts: (length: 2) │ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,5)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (1,1)-(1,3) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (1,3)-(1,4)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (1,3)-(1,4)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -24,7 +28,7 @@ │ │ │ └── block: ∅ │ │ └── closing_loc: (1,4)-(1,5) = "}" │ └── @ StringNode (location: (1,5)-(1,7)) - │ ├── flags: frozen + │ ├── flags: static_literal, frozen │ ├── opening_loc: ∅ │ ├── content_loc: (1,5)-(1,7) = " b" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/expr_not_bang.txt b/test/prism/snapshots/seattlerb/expr_not_bang.txt index 0a289ab7bed..868ef85648f 100644 --- a/test/prism/snapshots/seattlerb/expr_not_bang.txt +++ b/test/prism/snapshots/seattlerb/expr_not_bang.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(1,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,5)) + ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (1,2)-(1,5)) │ ├── flags: ignore_visibility diff --git a/test/prism/snapshots/seattlerb/f_kw.txt b/test/prism/snapshots/seattlerb/f_kw.txt index 4226137925a..e2b82371b87 100644 --- a/test/prism/snapshots/seattlerb/f_kw.txt +++ b/test/prism/snapshots/seattlerb/f_kw.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,15)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,15)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,15)) + ├── flags: newline ├── name: :x ├── name_loc: (1,4)-(1,5) = "x" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,10)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -20,7 +24,7 @@ │ │ ├── name_loc: (1,6)-(1,8) = "k:" │ │ └── value: │ │ @ IntegerNode (location: (1,8)-(1,10)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ ├── keyword_rest: ∅ │ └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/f_kw__required.txt b/test/prism/snapshots/seattlerb/f_kw__required.txt index f72f43e034e..c44dbbf2fc8 100644 --- a/test/prism/snapshots/seattlerb/f_kw__required.txt +++ b/test/prism/snapshots/seattlerb/f_kw__required.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,13)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,13)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,13)) + ├── flags: newline ├── name: :x ├── name_loc: (1,4)-(1,5) = "x" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,6)-(1,8)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ diff --git a/test/prism/snapshots/seattlerb/flip2_env_lvar.txt b/test/prism/snapshots/seattlerb/flip2_env_lvar.txt index 5a71ab6cda3..8950bbf0876 100644 --- a/test/prism/snapshots/seattlerb/flip2_env_lvar.txt +++ b/test/prism/snapshots/seattlerb/flip2_env_lvar.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(1,16)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,16)) + ├── flags: ∅ └── body: (length: 1) └── @ IfNode (location: (1,0)-(1,16)) + ├── flags: newline ├── if_keyword_loc: (1,0)-(1,2) = "if" ├── predicate: │ @ FlipFlopNode (location: (1,3)-(1,7)) diff --git a/test/prism/snapshots/seattlerb/float_with_if_modifier.txt b/test/prism/snapshots/seattlerb/float_with_if_modifier.txt index 9c1da70f242..aab855944c0 100644 --- a/test/prism/snapshots/seattlerb/float_with_if_modifier.txt +++ b/test/prism/snapshots/seattlerb/float_with_if_modifier.txt @@ -1,17 +1,23 @@ @ ProgramNode (location: (1,0)-(1,10)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,10)) + ├── flags: ∅ └── body: (length: 1) └── @ IfNode (location: (1,0)-(1,10)) + ├── flags: newline ├── if_keyword_loc: (1,3)-(1,5) = "if" ├── predicate: │ @ TrueNode (location: (1,6)-(1,10)) + │ └── flags: static_literal ├── then_keyword_loc: ∅ ├── statements: │ @ StatementsNode (location: (1,0)-(1,3)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ FloatNode (location: (1,0)-(1,3)) + │ ├── flags: newline, static_literal │ └── value: 1.0 ├── consequent: ∅ └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/heredoc__backslash_dos_format.txt b/test/prism/snapshots/seattlerb/heredoc__backslash_dos_format.txt index 353e4c6964c..7d745587b3f 100644 --- a/test/prism/snapshots/seattlerb/heredoc__backslash_dos_format.txt +++ b/test/prism/snapshots/seattlerb/heredoc__backslash_dos_format.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(1,12)) +├── flags: ∅ ├── locals: [:str] └── statements: @ StatementsNode (location: (1,0)-(1,12)) + ├── flags: ∅ └── body: (length: 1) └── @ LocalVariableWriteNode (location: (1,0)-(1,12)) + ├── flags: newline ├── name: :str ├── depth: 0 ├── name_loc: (1,0)-(1,3) = "str" diff --git a/test/prism/snapshots/seattlerb/heredoc_backslash_nl.txt b/test/prism/snapshots/seattlerb/heredoc_backslash_nl.txt index fc4c1784fef..4c34bf6ef60 100644 --- a/test/prism/snapshots/seattlerb/heredoc_backslash_nl.txt +++ b/test/prism/snapshots/seattlerb/heredoc_backslash_nl.txt @@ -1,16 +1,18 @@ @ ProgramNode (location: (1,0)-(5,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(5,7)) + ├── flags: ∅ └── body: (length: 2) ├── @ StringNode (location: (1,0)-(3,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (1,0)-(1,1) = "\"" │ ├── content_loc: (1,1)-(3,0) = " why would someone do this? \\\n blah\n" │ ├── closing_loc: (3,0)-(3,1) = "\"" │ └── unescaped: " why would someone do this? blah\n" └── @ StringNode (location: (5,0)-(5,7)) - ├── flags: ∅ + ├── flags: newline ├── opening_loc: (5,0)-(5,7) = "<<-DESC" ├── content_loc: (6,0)-(8,0) = " why would someone do this? \\\n blah\n" ├── closing_loc: (8,0)-(9,0) = "DESC\n" diff --git a/test/prism/snapshots/seattlerb/heredoc_bad_hex_escape.txt b/test/prism/snapshots/seattlerb/heredoc_bad_hex_escape.txt index 2b1d776404b..1c521108c04 100644 --- a/test/prism/snapshots/seattlerb/heredoc_bad_hex_escape.txt +++ b/test/prism/snapshots/seattlerb/heredoc_bad_hex_escape.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(1,9)) +├── flags: ∅ ├── locals: [:s] └── statements: @ StatementsNode (location: (1,0)-(1,9)) + ├── flags: ∅ └── body: (length: 1) └── @ LocalVariableWriteNode (location: (1,0)-(1,9)) + ├── flags: newline ├── name: :s ├── depth: 0 ├── name_loc: (1,0)-(1,1) = "s" diff --git a/test/prism/snapshots/seattlerb/heredoc_bad_oct_escape.txt b/test/prism/snapshots/seattlerb/heredoc_bad_oct_escape.txt index 7a01f8d6d1c..9726a71822b 100644 --- a/test/prism/snapshots/seattlerb/heredoc_bad_oct_escape.txt +++ b/test/prism/snapshots/seattlerb/heredoc_bad_oct_escape.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(1,10)) +├── flags: ∅ ├── locals: [:s] └── statements: @ StatementsNode (location: (1,0)-(1,10)) + ├── flags: ∅ └── body: (length: 1) └── @ LocalVariableWriteNode (location: (1,0)-(1,10)) + ├── flags: newline ├── name: :s ├── depth: 0 ├── name_loc: (1,0)-(1,1) = "s" diff --git a/test/prism/snapshots/seattlerb/heredoc_comma_arg.txt b/test/prism/snapshots/seattlerb/heredoc_comma_arg.txt index 888ebc809a8..0a432984723 100644 --- a/test/prism/snapshots/seattlerb/heredoc_comma_arg.txt +++ b/test/prism/snapshots/seattlerb/heredoc_comma_arg.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(7,1)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(7,1)) + ├── flags: ∅ └── body: (length: 2) ├── @ ArrayNode (location: (1,0)-(2,3)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 1) │ │ └── @ StringNode (location: (1,1)-(2,1)) │ │ ├── flags: ∅ @@ -15,7 +17,7 @@ │ ├── opening_loc: (1,0)-(1,1) = "[" │ └── closing_loc: (2,2)-(2,3) = "]" └── @ ArrayNode (location: (4,0)-(7,1)) - ├── flags: ∅ + ├── flags: newline ├── elements: (length: 1) │ └── @ StringNode (location: (4,1)-(4,8)) │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/heredoc_lineno.txt b/test/prism/snapshots/seattlerb/heredoc_lineno.txt index a51ce71afe8..7dde22912e5 100644 --- a/test/prism/snapshots/seattlerb/heredoc_lineno.txt +++ b/test/prism/snapshots/seattlerb/heredoc_lineno.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(7,6)) +├── flags: ∅ ├── locals: [:c, :d] └── statements: @ StatementsNode (location: (1,0)-(7,6)) + ├── flags: ∅ └── body: (length: 2) ├── @ LocalVariableWriteNode (location: (1,0)-(1,11)) + │ ├── flags: newline │ ├── name: :c │ ├── depth: 0 │ ├── name_loc: (1,0)-(1,1) = "c" @@ -16,11 +19,12 @@ │ │ └── unescaped: "line2\nline3\nline4\n" │ └── operator_loc: (1,2)-(1,3) = "=" └── @ LocalVariableWriteNode (location: (7,0)-(7,6)) + ├── flags: newline ├── name: :d ├── depth: 0 ├── name_loc: (7,0)-(7,1) = "d" ├── value: │ @ IntegerNode (location: (7,4)-(7,6)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 42 └── operator_loc: (7,2)-(7,3) = "=" diff --git a/test/prism/snapshots/seattlerb/heredoc_nested.txt b/test/prism/snapshots/seattlerb/heredoc_nested.txt index a2322b9632e..4820ef6d4db 100644 --- a/test/prism/snapshots/seattlerb/heredoc_nested.txt +++ b/test/prism/snapshots/seattlerb/heredoc_nested.txt @@ -1,42 +1,46 @@ @ ProgramNode (location: (1,0)-(7,2)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(7,2)) + ├── flags: ∅ └── body: (length: 1) └── @ ArrayNode (location: (1,0)-(7,2)) - ├── flags: ∅ + ├── flags: newline, static_literal ├── elements: (length: 2) │ ├── @ InterpolatedStringNode (location: (1,1)-(1,4)) - │ │ ├── flags: mutable + │ │ ├── flags: static_literal, mutable │ │ ├── opening_loc: (1,1)-(1,4) = "<=" ├── @ SymbolNode (location: (77,0)-(77,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (77,0)-(77,1) = ":" │ ├── value_loc: (77,1)-(77,3) = ">>" │ ├── closing_loc: ∅ │ └── unescaped: ">>" ├── @ SymbolNode (location: (79,0)-(79,2)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (79,0)-(79,1) = ":" │ ├── value_loc: (79,1)-(79,2) = ">" │ ├── closing_loc: ∅ │ └── unescaped: ">" ├── @ SymbolNode (location: (81,0)-(81,4)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (81,0)-(81,1) = ":" │ ├── value_loc: (81,1)-(81,4) = "<=>" │ ├── closing_loc: ∅ │ └── unescaped: "<=>" ├── @ SymbolNode (location: (83,0)-(83,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (83,0)-(83,1) = ":" │ ├── value_loc: (83,1)-(83,3) = "<=" │ ├── closing_loc: ∅ │ └── unescaped: "<=" ├── @ SymbolNode (location: (85,0)-(85,3)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (85,0)-(85,1) = ":" │ ├── value_loc: (85,1)-(85,3) = "<<" │ ├── closing_loc: ∅ │ └── unescaped: "<<" ├── @ SymbolNode (location: (87,0)-(87,2)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (87,0)-(87,1) = ":" │ ├── value_loc: (87,1)-(87,2) = "<" │ ├── closing_loc: ∅ │ └── unescaped: "<" ├── @ SymbolNode (location: (89,0)-(89,9)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (89,0)-(89,1) = ":" │ ├── value_loc: (89,1)-(89,9) = "__LINE__" │ ├── closing_loc: ∅ │ └── unescaped: "__LINE__" ├── @ SymbolNode (location: (91,0)-(91,9)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (91,0)-(91,1) = ":" │ ├── value_loc: (91,1)-(91,9) = "__FILE__" │ ├── closing_loc: ∅ │ └── unescaped: "__FILE__" └── @ SymbolNode (location: (93,0)-(93,13)) - ├── flags: forced_us_ascii_encoding + ├── flags: newline, static_literal, forced_us_ascii_encoding ├── opening_loc: (93,0)-(93,1) = ":" ├── value_loc: (93,1)-(93,13) = "__ENCODING__" ├── closing_loc: ∅ diff --git a/test/prism/snapshots/ternary_operator.txt b/test/prism/snapshots/ternary_operator.txt index 0277ac88f0c..76debe3fa74 100644 --- a/test/prism/snapshots/ternary_operator.txt +++ b/test/prism/snapshots/ternary_operator.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(15,12)) +├── flags: ∅ ├── locals: [:_a] └── statements: @ StatementsNode (location: (1,0)-(15,12)) + ├── flags: ∅ └── body: (length: 8) ├── @ IfNode (location: (1,0)-(1,9)) + │ ├── flags: newline │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (1,0)-(1,1)) @@ -19,9 +22,10 @@ │ ├── then_keyword_loc: (1,2)-(1,3) = "?" │ ├── statements: │ │ @ StatementsNode (location: (1,4)-(1,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,4)-(1,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :b @@ -32,12 +36,14 @@ │ │ └── block: ∅ │ ├── consequent: │ │ @ ElseNode (location: (1,6)-(1,9)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (1,6)-(1,7) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (1,8)-(1,9)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (1,8)-(1,9)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :c @@ -49,6 +55,7 @@ │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ ├── @ IfNode (location: (3,0)-(3,27)) + │ ├── flags: newline │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (3,0)-(3,1)) @@ -64,8 +71,10 @@ │ ├── then_keyword_loc: (3,2)-(3,3) = "?" │ ├── statements: │ │ @ StatementsNode (location: (3,4)-(3,14)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ DefinedNode (location: (3,4)-(3,14)) + │ │ ├── flags: newline │ │ ├── lparen_loc: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (3,13)-(3,14)) @@ -82,11 +91,14 @@ │ │ └── keyword_loc: (3,4)-(3,12) = "defined?" │ ├── consequent: │ │ @ ElseNode (location: (3,15)-(3,27)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (3,15)-(3,16) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (3,17)-(3,27)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ DefinedNode (location: (3,17)-(3,27)) + │ │ │ ├── flags: newline │ │ │ ├── lparen_loc: ∅ │ │ │ ├── value: │ │ │ │ @ CallNode (location: (3,26)-(3,27)) @@ -104,6 +116,7 @@ │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ ├── @ IfNode (location: (5,0)-(5,15)) + │ ├── flags: newline │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (5,0)-(5,6)) @@ -119,18 +132,24 @@ │ ├── then_keyword_loc: (5,6)-(5,7) = "?" │ ├── statements: │ │ @ StatementsNode (location: (5,7)-(5,11)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ TrueNode (location: (5,7)-(5,11)) + │ │ └── flags: newline, static_literal │ ├── consequent: │ │ @ ElseNode (location: (5,11)-(5,15)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (5,11)-(5,12) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (5,12)-(5,15)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ NilNode (location: (5,12)-(5,15)) + │ │ │ └── flags: newline, static_literal │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ ├── @ IfNode (location: (7,0)-(7,16)) + │ ├── flags: newline │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (7,0)-(7,6)) @@ -146,18 +165,24 @@ │ ├── then_keyword_loc: (7,6)-(7,7) = "?" │ ├── statements: │ │ @ StatementsNode (location: (7,7)-(7,12)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ FalseNode (location: (7,7)-(7,12)) + │ │ └── flags: newline, static_literal │ ├── consequent: │ │ @ ElseNode (location: (7,12)-(7,16)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (7,12)-(7,13) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (7,13)-(7,16)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ NilNode (location: (7,13)-(7,16)) + │ │ │ └── flags: newline, static_literal │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ ├── @ IfNode (location: (9,0)-(9,14)) + │ ├── flags: newline │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (9,0)-(9,6)) @@ -173,18 +198,24 @@ │ ├── then_keyword_loc: (9,6)-(9,7) = "?" │ ├── statements: │ │ @ StatementsNode (location: (9,7)-(9,10)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (9,7)-(9,10)) + │ │ └── flags: newline, static_literal │ ├── consequent: │ │ @ ElseNode (location: (9,10)-(9,14)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (9,10)-(9,11) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (9,11)-(9,14)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ NilNode (location: (9,11)-(9,14)) + │ │ │ └── flags: newline, static_literal │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ ├── @ IfNode (location: (11,0)-(11,10)) + │ ├── flags: newline │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (11,0)-(11,2)) @@ -200,18 +231,24 @@ │ ├── then_keyword_loc: (11,2)-(11,3) = "?" │ ├── statements: │ │ @ StatementsNode (location: (11,3)-(11,6)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (11,3)-(11,6)) + │ │ └── flags: newline, static_literal │ ├── consequent: │ │ @ ElseNode (location: (11,6)-(11,10)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (11,6)-(11,7) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (11,7)-(11,10)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ NilNode (location: (11,7)-(11,10)) + │ │ │ └── flags: newline, static_literal │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ ├── @ IfNode (location: (13,0)-(13,14)) + │ ├── flags: newline │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (13,0)-(13,1)) @@ -227,9 +264,10 @@ │ ├── then_keyword_loc: (13,2)-(13,3) = "?" │ ├── statements: │ │ @ StatementsNode (location: (13,3)-(13,7)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (13,3)-(13,7)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :var1 @@ -240,12 +278,14 @@ │ │ └── block: ∅ │ ├── consequent: │ │ @ ElseNode (location: (13,8)-(13,14)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (13,8)-(13,9) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (13,10)-(13,14)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (13,10)-(13,14)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :var2 @@ -257,6 +297,7 @@ │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ └── @ IfNode (location: (15,0)-(15,12)) + ├── flags: newline ├── if_keyword_loc: ∅ ├── predicate: │ @ CallNode (location: (15,0)-(15,4)) @@ -272,24 +313,28 @@ ├── then_keyword_loc: (15,4)-(15,5) = "?" ├── statements: │ @ StatementsNode (location: (15,5)-(15,10)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ LocalVariableWriteNode (location: (15,5)-(15,10)) + │ ├── flags: newline │ ├── name: :_a │ ├── depth: 0 │ ├── name_loc: (15,5)-(15,7) = "_a" │ ├── value: │ │ @ IntegerNode (location: (15,9)-(15,10)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── operator_loc: (15,8)-(15,9) = "=" ├── consequent: │ @ ElseNode (location: (15,10)-(15,12)) + │ ├── flags: ∅ │ ├── else_keyword_loc: (15,10)-(15,11) = ":" │ ├── statements: │ │ @ StatementsNode (location: (15,11)-(15,12)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (15,11)-(15,12)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 │ └── end_keyword_loc: ∅ └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/tilde_heredocs.txt b/test/prism/snapshots/tilde_heredocs.txt index f50f915a648..dc6321ce1a5 100644 --- a/test/prism/snapshots/tilde_heredocs.txt +++ b/test/prism/snapshots/tilde_heredocs.txt @@ -1,403 +1,419 @@ @ ProgramNode (location: (1,0)-(94,6)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(94,6)) + ├── flags: ∅ └── body: (length: 19) ├── @ InterpolatedStringNode (location: (1,0)-(1,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (1,0)-(1,6) = "<<~EOF" │ ├── parts: (length: 4) │ │ ├── @ StringNode (location: (2,0)-(3,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (2,0)-(3,0) = " a\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: " a\n" │ │ ├── @ EmbeddedStatementsNode (location: (3,0)-(3,4)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (3,0)-(3,2) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (3,2)-(3,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (3,2)-(3,3)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── closing_loc: (3,3)-(3,4) = "}" │ │ ├── @ StringNode (location: (3,4)-(4,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (3,4)-(4,0) = "\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\n" │ │ └── @ StringNode (location: (4,0)-(5,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (4,0)-(5,0) = " a\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: " a\n" │ └── closing_loc: (5,0)-(6,0) = "EOF\n" ├── @ StringNode (location: (7,0)-(7,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (7,0)-(7,6) = "<<~EOF" │ ├── content_loc: (8,0)-(9,0) = " a\n" │ ├── closing_loc: (9,0)-(10,0) = "EOF\n" │ └── unescaped: "a\n" ├── @ InterpolatedStringNode (location: (11,0)-(11,6)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: (11,0)-(11,6) = "<<~EOF" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (12,0)-(13,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (12,0)-(13,0) = "\ta\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\ta\n" │ │ ├── @ StringNode (location: (13,0)-(14,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (13,0)-(14,0) = " b\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "b\n" │ │ └── @ StringNode (location: (14,0)-(15,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (14,0)-(15,0) = "\t\tc\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "\t\tc\n" │ └── closing_loc: (15,0)-(16,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (17,0)-(17,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (17,0)-(17,6) = "<<~EOF" │ ├── parts: (length: 2) │ │ ├── @ EmbeddedStatementsNode (location: (18,2)-(18,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (18,2)-(18,4) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (18,4)-(18,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (18,4)-(18,5)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── closing_loc: (18,5)-(18,6) = "}" │ │ └── @ StringNode (location: (18,6)-(19,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (18,6)-(19,0) = " a\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: " a\n" │ └── closing_loc: (19,0)-(20,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (21,0)-(21,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (21,0)-(21,6) = "<<~EOF" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (22,0)-(22,4)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (22,0)-(22,4) = " a " │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a " │ │ ├── @ EmbeddedStatementsNode (location: (22,4)-(22,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (22,4)-(22,6) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (22,6)-(22,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (22,6)-(22,7)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── closing_loc: (22,7)-(22,8) = "}" │ │ └── @ StringNode (location: (22,8)-(23,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (22,8)-(23,0) = "\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "\n" │ └── closing_loc: (23,0)-(24,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (25,0)-(25,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (25,0)-(25,6) = "<<~EOF" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (26,0)-(27,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (26,0)-(27,0) = " a\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: " a\n" │ │ ├── @ EmbeddedStatementsNode (location: (27,1)-(27,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (27,1)-(27,3) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (27,3)-(27,4)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (27,3)-(27,4)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── closing_loc: (27,4)-(27,5) = "}" │ │ └── @ StringNode (location: (27,5)-(28,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (27,5)-(28,0) = "\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "\n" │ └── closing_loc: (28,0)-(29,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (30,0)-(30,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (30,0)-(30,6) = "<<~EOF" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (31,0)-(32,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (31,0)-(32,0) = " a\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a\n" │ │ ├── @ EmbeddedStatementsNode (location: (32,2)-(32,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (32,2)-(32,4) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (32,4)-(32,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (32,4)-(32,5)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── closing_loc: (32,5)-(32,6) = "}" │ │ └── @ StringNode (location: (32,6)-(33,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (32,6)-(33,0) = "\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "\n" │ └── closing_loc: (33,0)-(34,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (35,0)-(35,6)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: (35,0)-(35,6) = "<<~EOF" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (36,0)-(37,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (36,0)-(37,0) = " a\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a\n" │ │ └── @ StringNode (location: (37,0)-(38,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (37,0)-(38,0) = " b\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "b\n" │ └── closing_loc: (38,0)-(39,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (40,0)-(40,6)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: (40,0)-(40,6) = "<<~EOF" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (41,0)-(42,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (41,0)-(42,0) = " a\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a\n" │ │ └── @ StringNode (location: (42,0)-(43,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (42,0)-(43,0) = " b\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: " b\n" │ └── closing_loc: (43,0)-(44,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (45,0)-(45,6)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: (45,0)-(45,6) = "<<~EOF" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (46,0)-(47,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (46,0)-(47,0) = "\t\t\ta\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\ta\n" │ │ └── @ StringNode (location: (47,0)-(48,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (47,0)-(48,0) = "\t\tb\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "b\n" │ └── closing_loc: (48,0)-(49,0) = "EOF\n" ├── @ StringNode (location: (50,0)-(50,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (50,0)-(50,8) = "<<~'EOF'" │ ├── content_loc: (51,0)-(52,0) = " a \#{1}\n" │ ├── closing_loc: (52,0)-(53,0) = "EOF\n" │ └── unescaped: "a \#{1}\n" ├── @ InterpolatedStringNode (location: (54,0)-(54,6)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: (54,0)-(54,6) = "<<~EOF" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (55,0)-(56,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (55,0)-(56,0) = "\ta\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a\n" │ │ └── @ StringNode (location: (56,0)-(57,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (56,0)-(57,0) = "\t b\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: " b\n" │ └── closing_loc: (57,0)-(58,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (59,0)-(59,6)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: (59,0)-(59,6) = "<<~EOF" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (60,0)-(61,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (60,0)-(61,0) = "\t a\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: " a\n" │ │ └── @ StringNode (location: (61,0)-(62,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (61,0)-(62,0) = "\tb\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "b\n" │ └── closing_loc: (62,0)-(63,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (64,0)-(64,6)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: (64,0)-(64,6) = "<<~EOF" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (65,0)-(66,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (65,0)-(66,0) = " \ta\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a\n" │ │ └── @ StringNode (location: (66,0)-(67,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (66,0)-(67,0) = " b\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "b\n" │ └── closing_loc: (67,0)-(68,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (69,0)-(69,6)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: (69,0)-(69,6) = "<<~EOF" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (70,0)-(71,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (70,0)-(71,0) = " a\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a\n" │ │ ├── @ StringNode (location: (71,0)-(72,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (71,0)-(72,0) = "\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\n" │ │ └── @ StringNode (location: (72,0)-(73,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (72,0)-(73,0) = " b\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "b\n" │ └── closing_loc: (73,0)-(74,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (75,0)-(75,6)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: (75,0)-(75,6) = "<<~EOF" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (76,0)-(77,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (76,0)-(77,0) = " a\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a\n" │ │ ├── @ StringNode (location: (77,0)-(78,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (77,0)-(78,0) = "\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\n" │ │ └── @ StringNode (location: (78,0)-(79,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (78,0)-(79,0) = " b\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "b\n" │ └── closing_loc: (79,0)-(80,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (81,0)-(81,6)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: (81,0)-(81,6) = "<<~EOF" │ ├── parts: (length: 5) │ │ ├── @ StringNode (location: (82,0)-(83,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (82,0)-(83,0) = " a\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a\n" │ │ ├── @ StringNode (location: (83,0)-(84,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (83,0)-(84,0) = "\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\n" │ │ ├── @ StringNode (location: (84,0)-(85,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (84,0)-(85,0) = "\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\n" │ │ ├── @ StringNode (location: (85,0)-(86,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (85,0)-(86,0) = "\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\n" │ │ └── @ StringNode (location: (86,0)-(87,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (86,0)-(87,0) = " b\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "b\n" │ └── closing_loc: (87,0)-(88,0) = "EOF\n" ├── @ InterpolatedStringNode (location: (89,0)-(89,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (89,0)-(89,6) = "<<~EOF" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (90,0)-(91,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (90,0)-(91,0) = "\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\n" │ │ ├── @ EmbeddedStatementsNode (location: (91,2)-(91,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (91,2)-(91,4) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (91,4)-(91,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (91,4)-(91,5)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── closing_loc: (91,5)-(91,6) = "}" │ │ └── @ StringNode (location: (91,6)-(92,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (91,6)-(92,0) = "a\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a\n" │ └── closing_loc: (92,0)-(93,0) = " EOF\n" └── @ InterpolatedStringNode (location: (94,0)-(94,6)) - ├── flags: ∅ + ├── flags: newline ├── opening_loc: (94,0)-(94,6) = "<<~EOT" ├── parts: (length: 3) │ ├── @ EmbeddedStatementsNode (location: (95,2)-(95,6)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (95,2)-(95,4) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (95,4)-(95,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ IntegerNode (location: (95,4)-(95,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── closing_loc: (95,5)-(95,6) = "}" │ ├── @ StringNode (location: (95,6)-(96,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (95,6)-(96,0) = "\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "\n" │ └── @ StringNode (location: (96,0)-(97,0)) - │ ├── flags: frozen + │ ├── flags: static_literal, frozen │ ├── opening_loc: ∅ │ ├── content_loc: (96,0)-(97,0) = "\tb\n" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/undef.txt b/test/prism/snapshots/undef.txt index e59ace92f5f..7491fc4c953 100644 --- a/test/prism/snapshots/undef.txt +++ b/test/prism/snapshots/undef.txt @@ -1,115 +1,129 @@ @ ProgramNode (location: (1,0)-(17,14)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(17,14)) + ├── flags: ∅ └── body: (length: 9) ├── @ UndefNode (location: (1,0)-(1,7)) + │ ├── flags: newline │ ├── names: (length: 1) │ │ └── @ SymbolNode (location: (1,6)-(1,7)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (1,6)-(1,7) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ └── keyword_loc: (1,0)-(1,5) = "undef" ├── @ UndefNode (location: (3,0)-(3,10)) + │ ├── flags: newline │ ├── names: (length: 2) │ │ ├── @ SymbolNode (location: (3,6)-(3,7)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (3,6)-(3,7) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ └── @ SymbolNode (location: (3,9)-(3,10)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (3,9)-(3,10) = "b" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "b" │ └── keyword_loc: (3,0)-(3,5) = "undef" ├── @ UndefNode (location: (5,0)-(5,8)) + │ ├── flags: newline │ ├── names: (length: 1) │ │ └── @ SymbolNode (location: (5,6)-(5,8)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (5,6)-(5,8) = "if" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "if" │ └── keyword_loc: (5,0)-(5,5) = "undef" ├── @ UndefNode (location: (7,0)-(7,9)) + │ ├── flags: newline │ ├── names: (length: 1) │ │ └── @ SymbolNode (location: (7,6)-(7,9)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (7,6)-(7,9) = "<=>" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "<=>" │ └── keyword_loc: (7,0)-(7,5) = "undef" ├── @ UndefNode (location: (9,0)-(9,8)) + │ ├── flags: newline │ ├── names: (length: 1) │ │ └── @ SymbolNode (location: (9,6)-(9,8)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (9,6)-(9,7) = ":" │ │ ├── value_loc: (9,7)-(9,8) = "a" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "a" │ └── keyword_loc: (9,0)-(9,5) = "undef" ├── @ UndefNode (location: (11,0)-(11,16)) + │ ├── flags: newline │ ├── names: (length: 3) │ │ ├── @ SymbolNode (location: (11,6)-(11,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (11,6)-(11,7) = ":" │ │ │ ├── value_loc: (11,7)-(11,8) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ ├── @ SymbolNode (location: (11,10)-(11,12)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (11,10)-(11,11) = ":" │ │ │ ├── value_loc: (11,11)-(11,12) = "b" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "b" │ │ └── @ SymbolNode (location: (11,14)-(11,16)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (11,14)-(11,15) = ":" │ │ ├── value_loc: (11,15)-(11,16) = "c" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "c" │ └── keyword_loc: (11,0)-(11,5) = "undef" ├── @ UndefNode (location: (13,0)-(13,12)) + │ ├── flags: newline │ ├── names: (length: 1) │ │ └── @ SymbolNode (location: (13,6)-(13,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (13,6)-(13,8) = ":'" │ │ ├── value_loc: (13,8)-(13,11) = "abc" │ │ ├── closing_loc: (13,11)-(13,12) = "'" │ │ └── unescaped: "abc" │ └── keyword_loc: (13,0)-(13,5) = "undef" ├── @ UndefNode (location: (15,0)-(15,16)) + │ ├── flags: newline │ ├── names: (length: 1) │ │ └── @ InterpolatedSymbolNode (location: (15,6)-(15,16)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (15,6)-(15,8) = ":\"" │ │ ├── parts: (length: 2) │ │ │ ├── @ StringNode (location: (15,8)-(15,11)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (15,8)-(15,11) = "abc" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "abc" │ │ │ └── @ EmbeddedStatementsNode (location: (15,11)-(15,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (15,11)-(15,13) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (15,13)-(15,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (15,13)-(15,14)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── closing_loc: (15,14)-(15,15) = "}" │ │ └── closing_loc: (15,15)-(15,16) = "\"" │ └── keyword_loc: (15,0)-(15,5) = "undef" └── @ UndefNode (location: (17,0)-(17,14)) + ├── flags: newline ├── names: (length: 1) │ └── @ SymbolNode (location: (17,6)-(17,14)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: ∅ │ ├── value_loc: (17,6)-(17,14) = "Constant" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/unescaping.txt b/test/prism/snapshots/unescaping.txt index 456ef226d07..822fbe7d8f2 100644 --- a/test/prism/snapshots/unescaping.txt +++ b/test/prism/snapshots/unescaping.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(7,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(7,7)) + ├── flags: ∅ └── body: (length: 4) ├── @ ArrayNode (location: (1,0)-(1,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 1) │ │ └── @ StringNode (location: (1,1)-(1,9)) │ │ ├── flags: ∅ @@ -15,19 +17,19 @@ │ ├── opening_loc: (1,0)-(1,1) = "[" │ └── closing_loc: (1,9)-(1,10) = "]" ├── @ RegularExpressionNode (location: (3,0)-(3,8)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (3,0)-(3,1) = "/" │ ├── content_loc: (3,1)-(3,7) = "\\c\#{1}" │ ├── closing_loc: (3,7)-(3,8) = "/" │ └── unescaped: "\\x03{1}" ├── @ StringNode (location: (5,0)-(5,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (5,0)-(5,1) = "\"" │ ├── content_loc: (5,1)-(5,7) = "\\c\#{1}" │ ├── closing_loc: (5,7)-(5,8) = "\"" │ └── unescaped: "\u0003{1}" └── @ StringNode (location: (7,0)-(7,7)) - ├── flags: ∅ + ├── flags: newline ├── opening_loc: (7,0)-(7,7) = "<<~HERE" ├── content_loc: (8,0)-(9,0) = " \\c\#{1}\n" ├── closing_loc: (9,0)-(10,0) = "HERE\n" diff --git a/test/prism/snapshots/unless.txt b/test/prism/snapshots/unless.txt index 6c4aaf66a5d..130c0bb2b86 100644 --- a/test/prism/snapshots/unless.txt +++ b/test/prism/snapshots/unless.txt @@ -1,58 +1,71 @@ @ ProgramNode (location: (1,0)-(14,22)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(14,22)) + ├── flags: ∅ └── body: (length: 7) ├── @ UnlessNode (location: (1,0)-(1,19)) + │ ├── flags: newline │ ├── keyword_loc: (1,0)-(1,6) = "unless" │ ├── predicate: │ │ @ TrueNode (location: (1,7)-(1,11)) + │ │ └── flags: static_literal │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (1,13)-(1,14)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (1,13)-(1,14)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 │ ├── consequent: ∅ │ └── end_keyword_loc: (1,16)-(1,19) = "end" ├── @ UnlessNode (location: (3,0)-(4,12)) + │ ├── flags: newline │ ├── keyword_loc: (3,0)-(3,6) = "unless" │ ├── predicate: │ │ @ TrueNode (location: (3,7)-(3,11)) + │ │ └── flags: static_literal │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (4,0)-(4,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (4,0)-(4,1)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 │ ├── consequent: │ │ @ ElseNode (location: (4,2)-(4,12)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (4,2)-(4,6) = "else" │ │ ├── statements: │ │ │ @ StatementsNode (location: (4,7)-(4,8)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ IntegerNode (location: (4,7)-(4,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: newline, static_literal, decimal │ │ │ └── value: 2 │ │ └── end_keyword_loc: (4,9)-(4,12) = "end" │ └── end_keyword_loc: (4,9)-(4,12) = "end" ├── @ UnlessNode (location: (6,0)-(6,13)) + │ ├── flags: newline │ ├── keyword_loc: (6,2)-(6,8) = "unless" │ ├── predicate: │ │ @ TrueNode (location: (6,9)-(6,13)) + │ │ └── flags: static_literal │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (6,0)-(6,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (6,0)-(6,1)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 │ ├── consequent: ∅ │ └── end_keyword_loc: ∅ ├── @ CallNode (location: (8,0)-(8,25)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -62,20 +75,26 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (8,4)-(8,25)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (8,6)-(8,23)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ UnlessNode (location: (8,6)-(8,23)) + │ │ ├── flags: newline │ │ ├── keyword_loc: (8,12)-(8,18) = "unless" │ │ ├── predicate: │ │ │ @ TrueNode (location: (8,19)-(8,23)) + │ │ │ └── flags: static_literal │ │ ├── then_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (8,6)-(8,11)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ BreakNode (location: (8,6)-(8,11)) + │ │ │ ├── flags: newline │ │ │ ├── arguments: ∅ │ │ │ └── keyword_loc: (8,6)-(8,11) = "break" │ │ ├── consequent: ∅ @@ -83,7 +102,7 @@ │ ├── opening_loc: (8,4)-(8,5) = "{" │ └── closing_loc: (8,24)-(8,25) = "}" ├── @ CallNode (location: (10,0)-(10,24)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :tap @@ -93,20 +112,26 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (10,4)-(10,24)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (10,6)-(10,22)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ UnlessNode (location: (10,6)-(10,22)) + │ │ ├── flags: newline │ │ ├── keyword_loc: (10,11)-(10,17) = "unless" │ │ ├── predicate: │ │ │ @ TrueNode (location: (10,18)-(10,22)) + │ │ │ └── flags: static_literal │ │ ├── then_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (10,6)-(10,10)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ NextNode (location: (10,6)-(10,10)) + │ │ │ ├── flags: newline │ │ │ ├── arguments: ∅ │ │ │ └── keyword_loc: (10,6)-(10,10) = "next" │ │ ├── consequent: ∅ @@ -114,20 +139,24 @@ │ ├── opening_loc: (10,4)-(10,5) = "{" │ └── closing_loc: (10,23)-(10,24) = "}" ├── @ UnlessNode (location: (12,0)-(12,18)) + │ ├── flags: newline │ ├── keyword_loc: (12,7)-(12,13) = "unless" │ ├── predicate: │ │ @ TrueNode (location: (12,14)-(12,18)) + │ │ └── flags: static_literal │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (12,0)-(12,6)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ ReturnNode (location: (12,0)-(12,6)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── keyword_loc: (12,0)-(12,6) = "return" │ │ └── arguments: ∅ │ ├── consequent: ∅ │ └── end_keyword_loc: ∅ └── @ UnlessNode (location: (14,0)-(14,22)) + ├── flags: newline ├── keyword_loc: (14,11)-(14,17) = "unless" ├── predicate: │ @ CallNode (location: (14,18)-(14,22)) @@ -143,9 +172,10 @@ ├── then_keyword_loc: ∅ ├── statements: │ @ StatementsNode (location: (14,0)-(14,10)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (14,0)-(14,10)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -156,13 +186,13 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ SymbolNode (location: (14,4)-(14,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (14,4)-(14,5) = ":" │ │ │ ├── value_loc: (14,5)-(14,6) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ └── @ SymbolNode (location: (14,8)-(14,10)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (14,8)-(14,9) = ":" │ │ ├── value_loc: (14,9)-(14,10) = "b" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/alias.txt b/test/prism/snapshots/unparser/corpus/literal/alias.txt index 18ddc86d4f4..6ce892b54d0 100644 --- a/test/prism/snapshots/unparser/corpus/literal/alias.txt +++ b/test/prism/snapshots/unparser/corpus/literal/alias.txt @@ -1,27 +1,33 @@ @ ProgramNode (location: (1,0)-(2,15)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(2,15)) + ├── flags: ∅ └── body: (length: 2) ├── @ AliasGlobalVariableNode (location: (1,0)-(1,15)) + │ ├── flags: newline │ ├── new_name: │ │ @ GlobalVariableReadNode (location: (1,6)-(1,10)) + │ │ ├── flags: ∅ │ │ └── name: :$foo │ ├── old_name: │ │ @ GlobalVariableReadNode (location: (1,11)-(1,15)) + │ │ ├── flags: ∅ │ │ └── name: :$bar │ └── keyword_loc: (1,0)-(1,5) = "alias" └── @ AliasMethodNode (location: (2,0)-(2,15)) + ├── flags: newline ├── new_name: │ @ SymbolNode (location: (2,6)-(2,10)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (2,6)-(2,7) = ":" │ ├── value_loc: (2,7)-(2,10) = "foo" │ ├── closing_loc: ∅ │ └── unescaped: "foo" ├── old_name: │ @ SymbolNode (location: (2,11)-(2,15)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (2,11)-(2,12) = ":" │ ├── value_loc: (2,12)-(2,15) = "bar" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/assignment.txt b/test/prism/snapshots/unparser/corpus/literal/assignment.txt index 7d3cc389c68..aa1d1037af9 100644 --- a/test/prism/snapshots/unparser/corpus/literal/assignment.txt +++ b/test/prism/snapshots/unparser/corpus/literal/assignment.txt @@ -1,21 +1,27 @@ @ ProgramNode (location: (1,0)-(51,17)) +├── flags: ∅ ├── locals: [:a, :b, :foo, :c, :x] └── statements: @ StatementsNode (location: (1,0)-(51,17)) + ├── flags: ∅ └── body: (length: 43) ├── @ GlobalVariableWriteNode (location: (1,0)-(1,6)) + │ ├── flags: newline │ ├── name: :$a │ ├── name_loc: (1,0)-(1,2) = "$a" │ ├── value: │ │ @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (1,3)-(1,4) = "=" ├── @ MultiWriteNode (location: (2,0)-(2,17)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ GlobalVariableTargetNode (location: (2,1)-(2,3)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :$a │ │ └── @ GlobalVariableTargetNode (location: (2,5)-(2,7)) + │ │ ├── flags: ∅ │ │ └── name: :$b │ ├── rest: ∅ │ ├── rights: (length: 0) @@ -24,29 +30,34 @@ │ ├── operator_loc: (2,9)-(2,10) = "=" │ └── value: │ @ ArrayNode (location: (2,11)-(2,17)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (2,12)-(2,13)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (2,15)-(2,16)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: (2,11)-(2,12) = "[" │ └── closing_loc: (2,16)-(2,17) = "]" ├── @ MultiWriteNode (location: (3,0)-(3,13)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ MultiTargetNode (location: (3,1)-(3,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 1) │ │ │ │ └── @ LocalVariableTargetNode (location: (3,2)-(3,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :a │ │ │ │ └── depth: 0 │ │ │ ├── rest: │ │ │ │ @ ImplicitRestNode (location: (3,3)-(3,4)) + │ │ │ │ └── flags: ∅ │ │ │ ├── rights: (length: 0) │ │ │ ├── lparen_loc: (3,1)-(3,2) = "(" │ │ │ └── rparen_loc: (3,4)-(3,5) = ")" │ │ └── @ LocalVariableTargetNode (location: (3,7)-(3,8)) + │ │ ├── flags: ∅ │ │ ├── name: :b │ │ └── depth: 0 │ ├── rest: ∅ @@ -56,15 +67,18 @@ │ ├── operator_loc: (3,10)-(3,11) = "=" │ └── value: │ @ IntegerNode (location: (3,12)-(3,13)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ MultiWriteNode (location: (4,0)-(4,9)) + │ ├── flags: newline │ ├── lefts: (length: 0) │ ├── rest: │ │ @ SplatNode (location: (4,1)-(4,3)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (4,1)-(4,2) = "*" │ │ └── expression: │ │ @ LocalVariableTargetNode (location: (4,2)-(4,3)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── rights: (length: 0) @@ -73,17 +87,20 @@ │ ├── operator_loc: (4,5)-(4,6) = "=" │ └── value: │ @ ArrayNode (location: (4,7)-(4,9)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 0) │ ├── opening_loc: (4,7)-(4,8) = "[" │ └── closing_loc: (4,8)-(4,9) = "]" ├── @ MultiWriteNode (location: (5,0)-(5,15)) + │ ├── flags: newline │ ├── lefts: (length: 0) │ ├── rest: │ │ @ SplatNode (location: (5,1)-(5,5)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (5,1)-(5,2) = "*" │ │ └── expression: │ │ @ LocalVariableTargetNode (location: (5,2)-(5,5)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── rights: (length: 0) @@ -92,21 +109,24 @@ │ ├── operator_loc: (5,7)-(5,8) = "=" │ └── value: │ @ ArrayNode (location: (5,9)-(5,15)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (5,10)-(5,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (5,13)-(5,14)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: (5,9)-(5,10) = "[" │ └── closing_loc: (5,14)-(5,15) = "]" ├── @ MultiWriteNode (location: (6,0)-(6,19)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ ClassVariableTargetNode (location: (6,1)-(6,4)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :@@a │ │ └── @ ClassVariableTargetNode (location: (6,6)-(6,9)) + │ │ ├── flags: ∅ │ │ └── name: :@@b │ ├── rest: ∅ │ ├── rights: (length: 0) @@ -115,21 +135,24 @@ │ ├── operator_loc: (6,11)-(6,12) = "=" │ └── value: │ @ ArrayNode (location: (6,13)-(6,19)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (6,14)-(6,15)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (6,17)-(6,18)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: (6,13)-(6,14) = "[" │ └── closing_loc: (6,18)-(6,19) = "]" ├── @ MultiWriteNode (location: (7,0)-(7,17)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ InstanceVariableTargetNode (location: (7,1)-(7,3)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :@a │ │ └── @ InstanceVariableTargetNode (location: (7,5)-(7,7)) + │ │ ├── flags: ∅ │ │ └── name: :@b │ ├── rest: ∅ │ ├── rights: (length: 0) @@ -138,27 +161,32 @@ │ ├── operator_loc: (7,9)-(7,10) = "=" │ └── value: │ @ ArrayNode (location: (7,11)-(7,17)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (7,12)-(7,13)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (7,15)-(7,16)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: (7,11)-(7,12) = "[" │ └── closing_loc: (7,16)-(7,17) = "]" ├── @ MultiWriteNode (location: (8,0)-(8,25)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ LocalVariableTargetNode (location: (8,1)-(8,2)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ └── @ MultiTargetNode (location: (8,4)-(8,10)) + │ │ ├── flags: ∅ │ │ ├── lefts: (length: 2) │ │ │ ├── @ LocalVariableTargetNode (location: (8,5)-(8,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :b │ │ │ │ └── depth: 0 │ │ │ └── @ LocalVariableTargetNode (location: (8,8)-(8,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :c │ │ │ └── depth: 0 │ │ ├── rest: ∅ @@ -175,28 +203,31 @@ │ ├── flags: ∅ │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (8,15)-(8,16)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ ArrayNode (location: (8,18)-(8,24)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── elements: (length: 2) │ │ │ ├── @ IntegerNode (location: (8,19)-(8,20)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── @ IntegerNode (location: (8,22)-(8,23)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ ├── opening_loc: (8,18)-(8,19) = "[" │ │ └── closing_loc: (8,23)-(8,24) = "]" │ ├── opening_loc: (8,14)-(8,15) = "[" │ └── closing_loc: (8,24)-(8,25) = "]" ├── @ MultiWriteNode (location: (9,0)-(9,15)) + │ ├── flags: newline │ ├── lefts: (length: 1) │ │ └── @ LocalVariableTargetNode (location: (9,1)-(9,2)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── rest: │ │ @ SplatNode (location: (9,4)-(9,5)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (9,4)-(9,5) = "*" │ │ └── expression: ∅ │ ├── rights: (length: 0) @@ -205,26 +236,30 @@ │ ├── operator_loc: (9,7)-(9,8) = "=" │ └── value: │ @ ArrayNode (location: (9,9)-(9,15)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (9,10)-(9,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (9,13)-(9,14)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: (9,9)-(9,10) = "[" │ └── closing_loc: (9,14)-(9,15) = "]" ├── @ MultiWriteNode (location: (10,0)-(10,18)) + │ ├── flags: newline │ ├── lefts: (length: 1) │ │ └── @ LocalVariableTargetNode (location: (10,1)-(10,2)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── rest: │ │ @ SplatNode (location: (10,4)-(10,8)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (10,4)-(10,5) = "*" │ │ └── expression: │ │ @ LocalVariableTargetNode (location: (10,5)-(10,8)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── rights: (length: 0) @@ -233,22 +268,25 @@ │ ├── operator_loc: (10,10)-(10,11) = "=" │ └── value: │ @ ArrayNode (location: (10,12)-(10,18)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (10,13)-(10,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (10,16)-(10,17)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: (10,12)-(10,13) = "[" │ └── closing_loc: (10,17)-(10,18) = "]" ├── @ MultiWriteNode (location: (11,0)-(11,15)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ LocalVariableTargetNode (location: (11,1)-(11,2)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ └── @ LocalVariableTargetNode (location: (11,4)-(11,5)) + │ │ ├── flags: ∅ │ │ ├── name: :b │ │ └── depth: 0 │ ├── rest: ∅ @@ -258,22 +296,25 @@ │ ├── operator_loc: (11,7)-(11,8) = "=" │ └── value: │ @ ArrayNode (location: (11,9)-(11,15)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (11,10)-(11,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (11,13)-(11,14)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: (11,9)-(11,10) = "[" │ └── closing_loc: (11,14)-(11,15) = "]" ├── @ MultiWriteNode (location: (12,0)-(12,12)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ LocalVariableTargetNode (location: (12,1)-(12,2)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ └── @ LocalVariableTargetNode (location: (12,4)-(12,5)) + │ │ ├── flags: ∅ │ │ ├── name: :b │ │ └── depth: 0 │ ├── rest: ∅ @@ -283,29 +324,36 @@ │ ├── operator_loc: (12,7)-(12,8) = "=" │ └── value: │ @ LocalVariableReadNode (location: (12,9)-(12,12)) + │ ├── flags: ∅ │ ├── name: :foo │ └── depth: 0 ├── @ MultiWriteNode (location: (13,0)-(13,10)) + │ ├── flags: newline │ ├── lefts: (length: 1) │ │ └── @ LocalVariableTargetNode (location: (13,1)-(13,2)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── rest: │ │ @ ImplicitRestNode (location: (13,2)-(13,3)) + │ │ └── flags: ∅ │ ├── rights: (length: 0) │ ├── lparen_loc: (13,0)-(13,1) = "(" │ ├── rparen_loc: (13,3)-(13,4) = ")" │ ├── operator_loc: (13,5)-(13,6) = "=" │ └── value: │ @ LocalVariableReadNode (location: (13,7)-(13,10)) + │ ├── flags: ∅ │ ├── name: :foo │ └── depth: 0 ├── @ MultiWriteNode (location: (14,0)-(14,23)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ CallTargetNode (location: (14,1)-(14,6)) │ │ │ ├── flags: ∅ │ │ │ ├── receiver: │ │ │ │ @ LocalVariableReadNode (location: (14,1)-(14,2)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :a │ │ │ │ └── depth: 0 │ │ │ ├── call_operator_loc: (14,2)-(14,3) = "." @@ -315,6 +363,7 @@ │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ LocalVariableReadNode (location: (14,8)-(14,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ ├── call_operator_loc: (14,9)-(14,10) = "." @@ -327,22 +376,24 @@ │ ├── operator_loc: (14,15)-(14,16) = "=" │ └── value: │ @ ArrayNode (location: (14,17)-(14,23)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (14,18)-(14,19)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (14,21)-(14,22)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: (14,17)-(14,18) = "[" │ └── closing_loc: (14,22)-(14,23) = "]" ├── @ MultiWriteNode (location: (15,0)-(15,24)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ IndexTargetNode (location: (15,1)-(15,8)) │ │ │ ├── flags: attribute_write │ │ │ ├── receiver: │ │ │ │ @ LocalVariableReadNode (location: (15,1)-(15,2)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :a │ │ │ │ └── depth: 0 │ │ │ ├── opening_loc: (15,2)-(15,3) = "[" @@ -351,9 +402,11 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ SplatNode (location: (15,3)-(15,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (15,3)-(15,4) = "*" │ │ │ │ └── expression: │ │ │ │ @ LocalVariableReadNode (location: (15,4)-(15,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :foo │ │ │ │ └── depth: 0 │ │ │ ├── closing_loc: (15,7)-(15,8) = "]" @@ -362,6 +415,7 @@ │ │ ├── flags: attribute_write │ │ ├── receiver: │ │ │ @ LocalVariableReadNode (location: (15,10)-(15,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ ├── opening_loc: (15,11)-(15,12) = "[" @@ -370,7 +424,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (15,12)-(15,13)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: (15,13)-(15,14) = "]" │ │ └── block: ∅ @@ -381,22 +435,24 @@ │ ├── operator_loc: (15,16)-(15,17) = "=" │ └── value: │ @ ArrayNode (location: (15,18)-(15,24)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (15,19)-(15,20)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (15,22)-(15,23)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: (15,18)-(15,19) = "[" │ └── closing_loc: (15,23)-(15,24) = "]" ├── @ MultiWriteNode (location: (16,0)-(16,21)) + │ ├── flags: newline │ ├── lefts: (length: 2) │ │ ├── @ IndexTargetNode (location: (16,1)-(16,5)) │ │ │ ├── flags: attribute_write │ │ │ ├── receiver: │ │ │ │ @ LocalVariableReadNode (location: (16,1)-(16,2)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :a │ │ │ │ └── depth: 0 │ │ │ ├── opening_loc: (16,2)-(16,3) = "[" @@ -405,7 +461,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ IntegerNode (location: (16,3)-(16,4)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 0 │ │ │ ├── closing_loc: (16,4)-(16,5) = "]" │ │ │ └── block: ∅ @@ -413,6 +469,7 @@ │ │ ├── flags: attribute_write │ │ ├── receiver: │ │ │ @ LocalVariableReadNode (location: (16,7)-(16,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ ├── opening_loc: (16,8)-(16,9) = "[" @@ -421,7 +478,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (16,9)-(16,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: (16,10)-(16,11) = "]" │ │ └── block: ∅ @@ -432,26 +489,29 @@ │ ├── operator_loc: (16,13)-(16,14) = "=" │ └── value: │ @ ArrayNode (location: (16,15)-(16,21)) - │ ├── flags: ∅ + │ ├── flags: static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (16,16)-(16,17)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (16,19)-(16,20)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: (16,15)-(16,16) = "[" │ └── closing_loc: (16,20)-(16,21) = "]" ├── @ MultiWriteNode (location: (17,0)-(17,12)) + │ ├── flags: newline │ ├── lefts: (length: 0) │ ├── rest: │ │ @ SplatNode (location: (17,1)-(17,7)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (17,1)-(17,2) = "*" │ │ └── expression: │ │ @ CallTargetNode (location: (17,2)-(17,7)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ LocalVariableReadNode (location: (17,2)-(17,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :c │ │ │ └── depth: 0 │ │ ├── call_operator_loc: (17,3)-(17,4) = "." @@ -463,11 +523,13 @@ │ ├── operator_loc: (17,9)-(17,10) = "=" │ └── value: │ @ IntegerNode (location: (17,11)-(17,12)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ ConstantPathWriteNode (location: (18,0)-(18,13)) + │ ├── flags: newline │ ├── target: │ │ @ ConstantPathNode (location: (18,0)-(18,5)) + │ │ ├── flags: ∅ │ │ ├── parent: ∅ │ │ ├── name: :Foo │ │ ├── delimiter_loc: (18,0)-(18,2) = "::" @@ -475,41 +537,49 @@ │ ├── operator_loc: (18,6)-(18,7) = "=" │ └── value: │ @ ConstantPathNode (location: (18,8)-(18,13)) + │ ├── flags: ∅ │ ├── parent: ∅ │ ├── name: :Bar │ ├── delimiter_loc: (18,8)-(18,10) = "::" │ └── name_loc: (18,10)-(18,13) = "Bar" ├── @ ClassVariableWriteNode (location: (19,0)-(19,7)) + │ ├── flags: newline │ ├── name: :@@a │ ├── name_loc: (19,0)-(19,3) = "@@a" │ ├── value: │ │ @ IntegerNode (location: (19,6)-(19,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (19,4)-(19,5) = "=" ├── @ InstanceVariableWriteNode (location: (20,0)-(20,6)) + │ ├── flags: newline │ ├── name: :@a │ ├── name_loc: (20,0)-(20,2) = "@a" │ ├── value: │ │ @ IntegerNode (location: (20,5)-(20,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (20,3)-(20,4) = "=" ├── @ ConstantWriteNode (location: (21,0)-(21,9)) + │ ├── flags: newline │ ├── name: :CONST │ ├── name_loc: (21,0)-(21,5) = "CONST" │ ├── value: │ │ @ IntegerNode (location: (21,8)-(21,9)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (21,6)-(21,7) = "=" ├── @ ConstantPathWriteNode (location: (22,0)-(22,23)) + │ ├── flags: newline │ ├── target: │ │ @ ConstantPathNode (location: (22,0)-(22,19)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantPathNode (location: (22,0)-(22,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── parent: │ │ │ │ @ ConstantReadNode (location: (22,0)-(22,4)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :Name │ │ │ ├── name: :Spaced │ │ │ ├── delimiter_loc: (22,4)-(22,6) = "::" @@ -520,23 +590,29 @@ │ ├── operator_loc: (22,20)-(22,21) = "=" │ └── value: │ @ IntegerNode (location: (22,22)-(22,23)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── @ LocalVariableWriteNode (location: (23,0)-(23,16)) + │ ├── flags: newline │ ├── name: :a │ ├── depth: 0 │ ├── name_loc: (23,0)-(23,1) = "a" │ ├── value: │ │ @ ParenthesesNode (location: (23,4)-(23,16)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (23,5)-(23,15)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ MultiWriteNode (location: (23,5)-(23,15)) + │ │ │ ├── flags: newline │ │ │ ├── lefts: (length: 2) │ │ │ │ ├── @ LocalVariableTargetNode (location: (23,6)-(23,7)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :b │ │ │ │ │ └── depth: 0 │ │ │ │ └── @ LocalVariableTargetNode (location: (23,9)-(23,10)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :c │ │ │ │ └── depth: 0 │ │ │ ├── rest: ∅ @@ -546,21 +622,23 @@ │ │ │ ├── operator_loc: (23,12)-(23,13) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (23,14)-(23,15)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── opening_loc: (23,4)-(23,5) = "(" │ │ └── closing_loc: (23,15)-(23,16) = ")" │ └── operator_loc: (23,2)-(23,3) = "=" ├── @ LocalVariableWriteNode (location: (24,0)-(24,5)) + │ ├── flags: newline │ ├── name: :a │ ├── depth: 0 │ ├── name_loc: (24,0)-(24,1) = "a" │ ├── value: │ │ @ IntegerNode (location: (24,4)-(24,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (24,2)-(24,3) = "=" ├── @ LocalVariableWriteNode (location: (25,0)-(25,11)) + │ ├── flags: newline │ ├── name: :foo │ ├── depth: 0 │ ├── name_loc: (25,0)-(25,3) = "foo" @@ -577,9 +655,10 @@ │ │ └── block: ∅ │ └── operator_loc: (25,4)-(25,5) = "=" ├── @ CallNode (location: (26,0)-(26,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (26,0)-(26,3)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── call_operator_loc: (26,3)-(26,4) = "." @@ -590,9 +669,10 @@ │ ├── closing_loc: (26,8)-(26,9) = ")" │ └── block: ∅ ├── @ CallNode (location: (27,0)-(27,13)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (27,0)-(27,3)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── call_operator_loc: (27,3)-(27,4) = "." @@ -604,17 +684,18 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ IntegerNode (location: (27,8)-(27,9)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (27,11)-(27,12)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: (27,12)-(27,13) = ")" │ └── block: ∅ ├── @ CallNode (location: (28,0)-(28,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (28,0)-(28,3)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── call_operator_loc: (28,3)-(28,4) = "." @@ -626,12 +707,14 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ TrueNode (location: (28,7)-(28,11)) + │ │ └── flags: static_literal │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (29,0)-(29,19)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ LocalVariableReadNode (location: (29,0)-(29,3)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -643,6 +726,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ SplatNode (location: (29,4)-(29,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (29,4)-(29,5) = "*" │ │ │ └── expression: │ │ │ @ CallNode (location: (29,5)-(29,10)) @@ -668,9 +752,10 @@ │ ├── closing_loc: (29,10)-(29,11) = "]" │ └── block: ∅ ├── @ CallNode (location: (30,0)-(30,17)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ LocalVariableReadNode (location: (30,0)-(30,3)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -682,14 +767,14 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ RangeNode (location: (30,4)-(30,8)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: static_literal │ │ │ ├── left: │ │ │ │ @ IntegerNode (location: (30,4)-(30,5)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── right: │ │ │ │ @ IntegerNode (location: (30,7)-(30,8)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── operator_loc: (30,5)-(30,7) = ".." │ │ └── @ CallNode (location: (30,12)-(30,17)) @@ -705,9 +790,10 @@ │ ├── closing_loc: (30,8)-(30,9) = "]" │ └── block: ∅ ├── @ CallNode (location: (31,0)-(31,9)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ LocalVariableReadNode (location: (31,0)-(31,3)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -719,14 +805,15 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (31,8)-(31,9)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── closing_loc: (31,4)-(31,5) = "]" │ └── block: ∅ ├── @ CallNode (location: (32,0)-(32,17)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ LocalVariableReadNode (location: (32,0)-(32,3)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -738,9 +825,11 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 3) │ │ ├── @ LocalVariableReadNode (location: (32,4)-(32,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ ├── @ LocalVariableReadNode (location: (32,7)-(32,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :b │ │ │ └── depth: 0 │ │ └── @ CallNode (location: (32,12)-(32,17)) @@ -756,9 +845,10 @@ │ ├── closing_loc: (32,8)-(32,9) = "]" │ └── block: ∅ ├── @ CallNode (location: (33,0)-(33,18)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ LocalVariableReadNode (location: (33,0)-(33,3)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -792,6 +882,7 @@ │ ├── closing_loc: (33,9)-(33,10) = "]" │ └── block: ∅ ├── @ LocalVariableWriteNode (location: (34,0)-(34,7)) + │ ├── flags: newline │ ├── name: :x │ ├── depth: 0 │ ├── name_loc: (34,0)-(34,1) = "x" @@ -804,9 +895,10 @@ │ │ └── unescaped: "" │ └── operator_loc: (34,2)-(34,3) = "=" ├── @ CallNode (location: (35,0)-(35,7)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ LocalVariableReadNode (location: (35,0)-(35,1)) + │ │ ├── flags: ∅ │ │ ├── name: :x │ │ └── depth: 0 │ ├── call_operator_loc: (35,1)-(35,2) = "." @@ -826,9 +918,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (36,0)-(36,12)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ LocalVariableReadNode (location: (36,0)-(36,1)) + │ │ ├── flags: ∅ │ │ ├── name: :x │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -858,9 +951,10 @@ │ ├── closing_loc: (36,5)-(36,6) = "]" │ └── block: ∅ ├── @ IndexOrWriteNode (location: (37,0)-(37,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (37,0)-(37,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -890,6 +984,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ InstanceVariableOrWriteNode (location: (38,0)-(38,10)) + │ ├── flags: newline │ ├── name: :@a │ ├── name_loc: (38,0)-(38,2) = "@a" │ ├── operator_loc: (38,3)-(38,6) = "||=" @@ -901,6 +996,7 @@ │ ├── closing_loc: (38,9)-(38,10) = ")" │ └── unescaped: "" ├── @ LocalVariableWriteNode (location: (39,0)-(39,14)) + │ ├── flags: newline │ ├── name: :x │ ├── depth: 0 │ ├── name_loc: (39,0)-(39,1) = "x" @@ -910,17 +1006,18 @@ │ │ ├── opening_loc: (39,4)-(39,14) = "<<-HEREDOC" │ │ ├── parts: (length: 3) │ │ │ ├── @ StringNode (location: (40,0)-(40,2)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (40,0)-(40,2) = " " │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: " " │ │ │ ├── @ EmbeddedStatementsNode (location: (40,2)-(40,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── opening_loc: (40,2)-(40,4) = "\#{" │ │ │ │ ├── statements: ∅ │ │ │ │ └── closing_loc: (40,4)-(40,5) = "}" │ │ │ └── @ StringNode (location: (40,5)-(41,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (40,5)-(41,0) = "\n" │ │ │ ├── closing_loc: ∅ @@ -928,9 +1025,10 @@ │ │ └── closing_loc: (41,0)-(42,0) = "HEREDOC\n" │ └── operator_loc: (39,2)-(39,3) = "=" ├── @ CallNode (location: (42,0)-(42,14)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ LocalVariableReadNode (location: (42,0)-(42,1)) + │ │ ├── flags: ∅ │ │ ├── name: :x │ │ └── depth: 0 │ ├── call_operator_loc: (42,1)-(42,2) = "." @@ -946,17 +1044,18 @@ │ │ ├── opening_loc: (42,4)-(42,14) = "<<-HEREDOC" │ │ ├── parts: (length: 3) │ │ │ ├── @ StringNode (location: (43,0)-(43,2)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (43,0)-(43,2) = " " │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: " " │ │ │ ├── @ EmbeddedStatementsNode (location: (43,2)-(43,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── opening_loc: (43,2)-(43,4) = "\#{" │ │ │ │ ├── statements: ∅ │ │ │ │ └── closing_loc: (43,4)-(43,5) = "}" │ │ │ └── @ StringNode (location: (43,5)-(44,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (43,5)-(44,0) = "\n" │ │ │ ├── closing_loc: ∅ @@ -965,9 +1064,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (45,0)-(45,16)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ LocalVariableReadNode (location: (45,0)-(45,1)) + │ │ ├── flags: ∅ │ │ ├── name: :x │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -983,17 +1083,18 @@ │ │ ├── opening_loc: (45,6)-(45,16) = "<<-HEREDOC" │ │ ├── parts: (length: 3) │ │ │ ├── @ StringNode (location: (46,0)-(46,2)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (46,0)-(46,2) = " " │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: " " │ │ │ ├── @ EmbeddedStatementsNode (location: (46,2)-(46,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── opening_loc: (46,2)-(46,4) = "\#{" │ │ │ │ ├── statements: ∅ │ │ │ │ └── closing_loc: (46,4)-(46,5) = "}" │ │ │ └── @ StringNode (location: (46,5)-(47,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (46,5)-(47,0) = "\n" │ │ │ ├── closing_loc: ∅ @@ -1002,9 +1103,10 @@ │ ├── closing_loc: (45,2)-(45,3) = "]" │ └── block: ∅ ├── @ IndexOrWriteNode (location: (48,0)-(48,21)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (48,0)-(48,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -1018,17 +1120,18 @@ │ │ ├── opening_loc: (48,2)-(48,12) = "<<-HEREDOC" │ │ ├── parts: (length: 3) │ │ │ ├── @ StringNode (location: (49,0)-(49,2)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (49,0)-(49,2) = " " │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: " " │ │ │ ├── @ EmbeddedStatementsNode (location: (49,2)-(49,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── opening_loc: (49,2)-(49,4) = "\#{" │ │ │ │ ├── statements: ∅ │ │ │ │ └── closing_loc: (49,4)-(49,5) = "}" │ │ │ └── @ StringNode (location: (49,5)-(50,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (49,5)-(50,0) = "\n" │ │ │ ├── closing_loc: ∅ @@ -1049,6 +1152,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ InstanceVariableOrWriteNode (location: (51,0)-(51,17)) + ├── flags: newline ├── name: :@a ├── name_loc: (51,0)-(51,2) = "@a" ├── operator_loc: (51,3)-(51,6) = "||=" @@ -1058,17 +1162,18 @@ ├── opening_loc: (51,7)-(51,17) = "<<-HEREDOC" ├── parts: (length: 3) │ ├── @ StringNode (location: (52,0)-(52,2)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (52,0)-(52,2) = " " │ │ ├── closing_loc: ∅ │ │ └── unescaped: " " │ ├── @ EmbeddedStatementsNode (location: (52,2)-(52,5)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (52,2)-(52,4) = "\#{" │ │ ├── statements: ∅ │ │ └── closing_loc: (52,4)-(52,5) = "}" │ └── @ StringNode (location: (52,5)-(53,0)) - │ ├── flags: frozen + │ ├── flags: static_literal, frozen │ ├── opening_loc: ∅ │ ├── content_loc: (52,5)-(53,0) = "\n" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/block.txt b/test/prism/snapshots/unparser/corpus/literal/block.txt index b4c86d0b04b..63cd76d683c 100644 --- a/test/prism/snapshots/unparser/corpus/literal/block.txt +++ b/test/prism/snapshots/unparser/corpus/literal/block.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(96,1)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(96,1)) + ├── flags: ∅ └── body: (length: 30) ├── @ CallNode (location: (1,0)-(2,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -14,13 +16,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,4)-(2,1)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ │ ├── opening_loc: (1,4)-(1,5) = "{" │ └── closing_loc: (2,0)-(2,1) = "}" ├── @ CallNode (location: (3,0)-(4,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -30,11 +33,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (3,4)-(4,1)) + │ ├── flags: ∅ │ ├── locals: [:a] │ ├── parameters: │ │ @ BlockParametersNode (location: (3,6)-(3,9)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (3,7)-(3,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (3,7)-(3,8)) │ │ │ │ ├── flags: ∅ @@ -52,7 +58,7 @@ │ ├── opening_loc: (3,4)-(3,5) = "{" │ └── closing_loc: (4,0)-(4,1) = "}" ├── @ CallNode (location: (5,0)-(6,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -62,11 +68,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (5,4)-(6,1)) + │ ├── flags: ∅ │ ├── locals: [:a] │ ├── parameters: │ │ @ BlockParametersNode (location: (5,6)-(5,10)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (5,7)-(5,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (5,7)-(5,8)) │ │ │ │ ├── flags: ∅ @@ -74,6 +83,7 @@ │ │ │ ├── optionals: (length: 0) │ │ │ ├── rest: │ │ │ │ @ ImplicitRestNode (location: (5,8)-(5,9)) + │ │ │ │ └── flags: ∅ │ │ │ ├── posts: (length: 0) │ │ │ ├── keywords: (length: 0) │ │ │ ├── keyword_rest: ∅ @@ -85,7 +95,7 @@ │ ├── opening_loc: (5,4)-(5,5) = "{" │ └── closing_loc: (6,0)-(6,1) = "}" ├── @ CallNode (location: (7,0)-(8,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -95,11 +105,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (7,4)-(8,1)) + │ ├── flags: ∅ │ ├── locals: [:a, :x] │ ├── parameters: │ │ @ BlockParametersNode (location: (7,6)-(7,13)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (7,7)-(7,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (7,7)-(7,8)) │ │ │ │ ├── flags: ∅ @@ -107,6 +120,7 @@ │ │ │ ├── optionals: (length: 0) │ │ │ ├── rest: │ │ │ │ @ ImplicitRestNode (location: (7,8)-(7,9)) + │ │ │ │ └── flags: ∅ │ │ │ ├── posts: (length: 0) │ │ │ ├── keywords: (length: 0) │ │ │ ├── keyword_rest: ∅ @@ -121,7 +135,7 @@ │ ├── opening_loc: (7,4)-(7,5) = "{" │ └── closing_loc: (8,0)-(8,1) = "}" ├── @ CallNode (location: (9,0)-(10,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -131,11 +145,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (9,4)-(10,1)) + │ ├── flags: ∅ │ ├── locals: [:a, :b] │ ├── parameters: │ │ @ BlockParametersNode (location: (9,6)-(9,12)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (9,7)-(9,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 2) │ │ │ │ ├── @ RequiredParameterNode (location: (9,7)-(9,8)) │ │ │ │ │ ├── flags: ∅ @@ -156,7 +173,7 @@ │ ├── opening_loc: (9,4)-(9,5) = "{" │ └── closing_loc: (10,0)-(10,1) = "}" ├── @ CallNode (location: (11,0)-(13,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -167,21 +184,24 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (11,4)-(11,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── closing_loc: (11,5)-(11,6) = ")" │ └── block: │ @ BlockNode (location: (11,7)-(13,1)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (12,2)-(12,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (12,2)-(12,5)) + │ │ └── flags: newline, static_literal │ ├── opening_loc: (11,7)-(11,8) = "{" │ └── closing_loc: (13,0)-(13,1) = "}" ├── @ CallNode (location: (14,0)-(16,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -191,11 +211,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (14,4)-(16,1)) + │ ├── flags: ∅ │ ├── locals: [:a, :b] │ ├── parameters: │ │ @ BlockParametersNode (location: (14,6)-(14,13)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (14,7)-(14,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (14,7)-(14,8)) │ │ │ │ ├── flags: ∅ @@ -216,12 +239,14 @@ │ │ └── closing_loc: (14,12)-(14,13) = "|" │ ├── body: │ │ @ StatementsNode (location: (15,2)-(15,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (15,2)-(15,5)) + │ │ └── flags: newline, static_literal │ ├── opening_loc: (14,4)-(14,5) = "{" │ └── closing_loc: (16,0)-(16,1) = "}" ├── @ CallNode (location: (17,0)-(19,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -231,11 +256,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (17,4)-(19,1)) + │ ├── flags: ∅ │ ├── locals: [:a] │ ├── parameters: │ │ @ BlockParametersNode (location: (17,6)-(17,12)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (17,7)-(17,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (17,7)-(17,8)) │ │ │ │ ├── flags: ∅ @@ -256,12 +284,14 @@ │ │ └── closing_loc: (17,11)-(17,12) = "|" │ ├── body: │ │ @ StatementsNode (location: (18,2)-(18,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (18,2)-(18,5)) + │ │ └── flags: newline, static_literal │ ├── opening_loc: (17,4)-(17,5) = "{" │ └── closing_loc: (19,0)-(19,1) = "}" ├── @ CallNode (location: (20,0)-(22,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -271,13 +301,15 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (20,4)-(22,1)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (21,2)-(21,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (21,2)-(21,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -289,7 +321,7 @@ │ ├── opening_loc: (20,4)-(20,5) = "{" │ └── closing_loc: (22,0)-(22,1) = "}" ├── @ CallNode (location: (23,0)-(25,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (23,0)-(23,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -309,13 +341,17 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (23,8)-(25,1)) + │ ├── flags: ∅ │ ├── locals: [:a, :b, :c] │ ├── parameters: │ │ @ BlockParametersNode (location: (23,10)-(23,21)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (23,11)-(23,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 2) │ │ │ │ ├── @ MultiTargetNode (location: (23,11)-(23,17)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── lefts: (length: 2) │ │ │ │ │ │ ├── @ RequiredParameterNode (location: (23,12)-(23,13)) │ │ │ │ │ │ │ ├── flags: ∅ @@ -341,9 +377,10 @@ │ │ └── closing_loc: (23,20)-(23,21) = "|" │ ├── body: │ │ @ StatementsNode (location: (24,2)-(24,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (24,2)-(24,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :d @@ -355,7 +392,7 @@ │ ├── opening_loc: (23,8)-(23,9) = "{" │ └── closing_loc: (25,0)-(25,1) = "}" ├── @ CallNode (location: (26,0)-(27,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (26,0)-(26,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -375,11 +412,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (26,8)-(27,1)) + │ ├── flags: ∅ │ ├── locals: [:a, :b] │ ├── parameters: │ │ @ BlockParametersNode (location: (26,10)-(26,17)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (26,11)-(26,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 0) │ │ │ ├── optionals: (length: 0) │ │ │ ├── rest: @@ -402,7 +442,7 @@ │ ├── opening_loc: (26,8)-(26,9) = "{" │ └── closing_loc: (27,0)-(27,1) = "}" ├── @ CallNode (location: (28,0)-(29,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (28,0)-(28,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -422,11 +462,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (28,8)-(29,1)) + │ ├── flags: ∅ │ ├── locals: [:a, :b] │ ├── parameters: │ │ @ BlockParametersNode (location: (28,10)-(28,16)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (28,11)-(28,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (28,11)-(28,12)) │ │ │ │ ├── flags: ∅ @@ -447,7 +490,7 @@ │ ├── opening_loc: (28,8)-(28,9) = "{" │ └── closing_loc: (29,0)-(29,1) = "}" ├── @ CallNode (location: (30,0)-(31,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (30,0)-(30,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -467,9 +510,11 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (30,8)-(31,1)) + │ ├── flags: ∅ │ ├── locals: [:a, :b] │ ├── parameters: │ │ @ BlockParametersNode (location: (30,10)-(30,18)) + │ │ ├── flags: ∅ │ │ ├── parameters: ∅ │ │ ├── locals: (length: 2) │ │ │ ├── @ BlockLocalVariableNode (location: (30,13)-(30,14)) @@ -484,7 +529,7 @@ │ ├── opening_loc: (30,8)-(30,9) = "{" │ └── closing_loc: (31,0)-(31,1) = "}" ├── @ CallNode (location: (32,0)-(34,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (32,0)-(32,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -504,11 +549,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (32,8)-(34,1)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: │ │ @ BlockParametersNode (location: (32,10)-(32,13)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (32,11)-(32,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 0) │ │ │ ├── optionals: (length: 0) │ │ │ ├── rest: @@ -526,9 +574,10 @@ │ │ └── closing_loc: (32,12)-(32,13) = "|" │ ├── body: │ │ @ StatementsNode (location: (33,2)-(33,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (33,2)-(33,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :d @@ -540,7 +589,7 @@ │ ├── opening_loc: (32,8)-(32,9) = "{" │ └── closing_loc: (34,0)-(34,1) = "}" ├── @ CallNode (location: (35,0)-(37,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (35,0)-(35,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -560,16 +609,21 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (35,8)-(37,1)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: │ │ @ BlockParametersNode (location: (35,10)-(35,15)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (35,11)-(35,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ MultiTargetNode (location: (35,11)-(35,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── lefts: (length: 0) │ │ │ │ ├── rest: │ │ │ │ │ @ SplatNode (location: (35,12)-(35,13)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── operator_loc: (35,12)-(35,13) = "*" │ │ │ │ │ └── expression: ∅ │ │ │ │ ├── rights: (length: 0) @@ -586,9 +640,10 @@ │ │ └── closing_loc: (35,14)-(35,15) = "|" │ ├── body: │ │ @ StatementsNode (location: (36,2)-(36,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (36,2)-(36,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :d @@ -600,7 +655,7 @@ │ ├── opening_loc: (35,8)-(35,9) = "{" │ └── closing_loc: (37,0)-(37,1) = "}" ├── @ CallNode (location: (38,0)-(40,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (38,0)-(38,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -620,18 +675,24 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (38,8)-(40,1)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: │ │ @ BlockParametersNode (location: (38,10)-(38,17)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (38,11)-(38,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ MultiTargetNode (location: (38,11)-(38,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── lefts: (length: 1) │ │ │ │ │ └── @ MultiTargetNode (location: (38,12)-(38,15)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── lefts: (length: 0) │ │ │ │ │ ├── rest: │ │ │ │ │ │ @ SplatNode (location: (38,13)-(38,14)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── operator_loc: (38,13)-(38,14) = "*" │ │ │ │ │ │ └── expression: ∅ │ │ │ │ │ ├── rights: (length: 0) @@ -652,9 +713,10 @@ │ │ └── closing_loc: (38,16)-(38,17) = "|" │ ├── body: │ │ @ StatementsNode (location: (39,2)-(39,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (39,2)-(39,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :d @@ -666,7 +728,7 @@ │ ├── opening_loc: (38,8)-(38,9) = "{" │ └── closing_loc: (40,0)-(40,1) = "}" ├── @ CallNode (location: (41,0)-(43,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (41,0)-(41,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -686,21 +748,27 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (41,8)-(43,1)) + │ ├── flags: ∅ │ ├── locals: [:a] │ ├── parameters: │ │ @ BlockParametersNode (location: (41,10)-(41,20)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (41,11)-(41,19)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ MultiTargetNode (location: (41,11)-(41,19)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── lefts: (length: 2) │ │ │ │ │ ├── @ RequiredParameterNode (location: (41,12)-(41,13)) │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── name: :a │ │ │ │ │ └── @ MultiTargetNode (location: (41,15)-(41,18)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── lefts: (length: 0) │ │ │ │ │ ├── rest: │ │ │ │ │ │ @ SplatNode (location: (41,16)-(41,17)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── operator_loc: (41,16)-(41,17) = "*" │ │ │ │ │ │ └── expression: ∅ │ │ │ │ │ ├── rights: (length: 0) @@ -721,9 +789,10 @@ │ │ └── closing_loc: (41,19)-(41,20) = "|" │ ├── body: │ │ @ StatementsNode (location: (42,2)-(42,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (42,2)-(42,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :d @@ -735,7 +804,7 @@ │ ├── opening_loc: (41,8)-(41,9) = "{" │ └── closing_loc: (43,0)-(43,1) = "}" ├── @ CallNode (location: (44,0)-(46,1)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (44,0)-(44,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -755,13 +824,17 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (44,8)-(46,1)) + │ ├── flags: ∅ │ ├── locals: [:a, :b] │ ├── parameters: │ │ @ BlockParametersNode (location: (44,10)-(44,18)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (44,11)-(44,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ MultiTargetNode (location: (44,11)-(44,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── lefts: (length: 2) │ │ │ │ │ ├── @ RequiredParameterNode (location: (44,12)-(44,13)) │ │ │ │ │ │ ├── flags: ∅ @@ -784,9 +857,10 @@ │ │ └── closing_loc: (44,17)-(44,18) = "|" │ ├── body: │ │ @ StatementsNode (location: (45,2)-(45,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (45,2)-(45,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :d @@ -798,7 +872,7 @@ │ ├── opening_loc: (44,8)-(44,9) = "{" │ └── closing_loc: (46,0)-(46,1) = "}" ├── @ CallNode (location: (47,0)-(48,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (47,0)-(48,1)) │ │ ├── flags: ∅ @@ -821,6 +895,7 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (47,8)-(48,1)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: ∅ @@ -834,7 +909,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (49,0)-(51,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :m @@ -844,21 +919,26 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (49,2)-(51,3)) + │ ├── flags: ∅ │ ├── locals: [:e] │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (49,2)-(51,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (50,0)-(50,21)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (50,0)-(50,6) = "rescue" │ │ │ ├── exceptions: (length: 1) │ │ │ │ └── @ ConstantReadNode (location: (50,7)-(50,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :Exception │ │ │ ├── operator_loc: (50,17)-(50,19) = "=>" │ │ │ ├── reference: │ │ │ │ @ LocalVariableTargetNode (location: (50,20)-(50,21)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :e │ │ │ │ └── depth: 0 │ │ │ ├── statements: ∅ @@ -869,7 +949,7 @@ │ ├── opening_loc: (49,2)-(49,4) = "do" │ └── closing_loc: (51,0)-(51,3) = "end" ├── @ CallNode (location: (52,0)-(56,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :m @@ -879,16 +959,19 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (52,2)-(56,3)) + │ ├── flags: ∅ │ ├── locals: [:bar] │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (52,2)-(56,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (53,2)-(53,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (53,2)-(53,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :foo @@ -899,19 +982,24 @@ │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (54,0)-(55,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (54,0)-(54,6) = "rescue" │ │ │ ├── exceptions: (length: 1) │ │ │ │ └── @ ConstantReadNode (location: (54,7)-(54,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :Exception │ │ │ ├── operator_loc: (54,17)-(54,19) = "=>" │ │ │ ├── reference: │ │ │ │ @ LocalVariableTargetNode (location: (54,20)-(54,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :bar │ │ │ │ └── depth: 0 │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (55,2)-(55,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (55,2)-(55,5)) + │ │ │ │ ├── flags: newline │ │ │ │ ├── name: :bar │ │ │ │ └── depth: 0 │ │ │ └── consequent: ∅ @@ -921,7 +1009,7 @@ │ ├── opening_loc: (52,2)-(52,4) = "do" │ └── closing_loc: (56,0)-(56,3) = "end" ├── @ CallNode (location: (57,0)-(61,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :m @@ -931,16 +1019,19 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (57,2)-(61,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (57,2)-(61,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (58,2)-(58,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (58,2)-(58,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -951,11 +1042,14 @@ │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (59,0)-(60,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (59,0)-(59,6) = "rescue" │ │ │ ├── exceptions: (length: 2) │ │ │ │ ├── @ ConstantReadNode (location: (59,7)-(59,16)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── name: :SomeError │ │ │ │ └── @ SplatNode (location: (59,18)-(59,22)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (59,18)-(59,19) = "*" │ │ │ │ └── expression: │ │ │ │ @ CallNode (location: (59,19)-(59,22)) @@ -972,9 +1066,10 @@ │ │ │ ├── reference: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (60,2)-(60,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (60,2)-(60,5)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :baz @@ -990,7 +1085,7 @@ │ ├── opening_loc: (57,2)-(57,4) = "do" │ └── closing_loc: (61,0)-(61,3) = "end" ├── @ CallNode (location: (62,0)-(66,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :m @@ -1000,16 +1095,19 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (62,2)-(66,3)) + │ ├── flags: ∅ │ ├── locals: [:exception] │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (62,2)-(66,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (63,2)-(63,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (63,2)-(63,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -1020,11 +1118,14 @@ │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (64,0)-(65,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (64,0)-(64,6) = "rescue" │ │ │ ├── exceptions: (length: 2) │ │ │ │ ├── @ ConstantReadNode (location: (64,7)-(64,16)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── name: :SomeError │ │ │ │ └── @ SplatNode (location: (64,18)-(64,22)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (64,18)-(64,19) = "*" │ │ │ │ └── expression: │ │ │ │ @ CallNode (location: (64,19)-(64,22)) @@ -1040,13 +1141,15 @@ │ │ │ ├── operator_loc: (64,23)-(64,25) = "=>" │ │ │ ├── reference: │ │ │ │ @ LocalVariableTargetNode (location: (64,26)-(64,35)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :exception │ │ │ │ └── depth: 0 │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (65,2)-(65,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (65,2)-(65,5)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :baz @@ -1062,7 +1165,7 @@ │ ├── opening_loc: (62,2)-(62,4) = "do" │ └── closing_loc: (66,0)-(66,3) = "end" ├── @ CallNode (location: (67,0)-(71,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :m @@ -1072,16 +1175,19 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (67,2)-(71,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (67,2)-(71,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (68,2)-(68,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (68,2)-(68,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -1092,9 +1198,11 @@ │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (69,0)-(70,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (69,0)-(69,6) = "rescue" │ │ │ ├── exceptions: (length: 1) │ │ │ │ └── @ SplatNode (location: (69,7)-(69,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (69,7)-(69,8) = "*" │ │ │ │ └── expression: │ │ │ │ @ CallNode (location: (69,8)-(69,11)) @@ -1111,9 +1219,10 @@ │ │ │ ├── reference: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (70,2)-(70,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (70,2)-(70,5)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :baz @@ -1129,7 +1238,7 @@ │ ├── opening_loc: (67,2)-(67,4) = "do" │ └── closing_loc: (71,0)-(71,3) = "end" ├── @ CallNode (location: (72,0)-(75,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :m @@ -1139,16 +1248,19 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (72,2)-(75,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (72,2)-(75,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (73,2)-(73,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (73,2)-(73,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -1159,9 +1271,11 @@ │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (74,0)-(74,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (74,0)-(74,6) = "rescue" │ │ │ ├── exceptions: (length: 1) │ │ │ │ └── @ ConstantReadNode (location: (74,7)-(74,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :LoadError │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ @@ -1173,7 +1287,7 @@ │ ├── opening_loc: (72,2)-(72,4) = "do" │ └── closing_loc: (75,0)-(75,3) = "end" ├── @ CallNode (location: (76,0)-(81,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :m @@ -1183,16 +1297,19 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (76,2)-(81,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (76,2)-(81,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (77,2)-(77,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (77,2)-(77,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -1203,6 +1320,7 @@ │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (78,0)-(78,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (78,0)-(78,6) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ @@ -1211,12 +1329,14 @@ │ │ │ └── consequent: ∅ │ │ ├── else_clause: │ │ │ @ ElseNode (location: (79,0)-(81,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── else_keyword_loc: (79,0)-(79,4) = "else" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (80,2)-(80,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (80,2)-(80,5)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :baz @@ -1231,7 +1351,7 @@ │ ├── opening_loc: (76,2)-(76,4) = "do" │ └── closing_loc: (81,0)-(81,3) = "end" ├── @ CallNode (location: (82,0)-(86,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :m @@ -1241,16 +1361,19 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (82,2)-(86,3)) + │ ├── flags: ∅ │ ├── locals: [:exception] │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (82,2)-(86,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (83,2)-(83,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (83,2)-(83,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -1261,9 +1384,11 @@ │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (84,0)-(85,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (84,0)-(84,6) = "rescue" │ │ │ ├── exceptions: (length: 1) │ │ │ │ └── @ SplatNode (location: (84,7)-(84,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (84,7)-(84,8) = "*" │ │ │ │ └── expression: │ │ │ │ @ CallNode (location: (84,8)-(84,11)) @@ -1279,13 +1404,15 @@ │ │ │ ├── operator_loc: (84,12)-(84,14) = "=>" │ │ │ ├── reference: │ │ │ │ @ LocalVariableTargetNode (location: (84,15)-(84,24)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :exception │ │ │ │ └── depth: 0 │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (85,2)-(85,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (85,2)-(85,5)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :baz @@ -1301,7 +1428,7 @@ │ ├── opening_loc: (82,2)-(82,4) = "do" │ └── closing_loc: (86,0)-(86,3) = "end" ├── @ CallNode (location: (87,0)-(89,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :m @@ -1311,16 +1438,19 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (87,2)-(89,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (87,2)-(89,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── rescue_clause: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: │ │ │ @ EnsureNode (location: (88,0)-(89,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── ensure_keyword_loc: (88,0)-(88,6) = "ensure" │ │ │ ├── statements: ∅ │ │ │ └── end_keyword_loc: (89,0)-(89,3) = "end" @@ -1328,7 +1458,7 @@ │ ├── opening_loc: (87,2)-(87,4) = "do" │ └── closing_loc: (89,0)-(89,3) = "end" ├── @ CallNode (location: (90,0)-(93,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :m @@ -1338,14 +1468,17 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (90,2)-(93,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (90,2)-(93,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (91,0)-(91,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (91,0)-(91,6) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ @@ -1355,6 +1488,7 @@ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: │ │ │ @ EnsureNode (location: (92,0)-(93,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── ensure_keyword_loc: (92,0)-(92,6) = "ensure" │ │ │ ├── statements: ∅ │ │ │ └── end_keyword_loc: (93,0)-(93,3) = "end" @@ -1362,7 +1496,7 @@ │ ├── opening_loc: (90,2)-(90,4) = "do" │ └── closing_loc: (93,0)-(93,3) = "end" └── @ CallNode (location: (94,0)-(96,1)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :bar @@ -1372,17 +1506,21 @@ ├── closing_loc: ∅ └── block: @ BlockNode (location: (94,4)-(96,1)) + ├── flags: ∅ ├── locals: [:_1, :_2] ├── parameters: │ @ NumberedParametersNode (location: (94,4)-(96,1)) + │ ├── flags: ∅ │ └── maximum: 2 ├── body: │ @ StatementsNode (location: (95,2)-(95,9)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (95,2)-(95,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (95,2)-(95,4)) + │ │ ├── flags: ∅ │ │ ├── name: :_1 │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -1394,6 +1532,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ LocalVariableReadNode (location: (95,7)-(95,9)) + │ │ ├── flags: ∅ │ │ ├── name: :_2 │ │ └── depth: 0 │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/case.txt b/test/prism/snapshots/unparser/corpus/literal/case.txt index 509caa55c8b..f7b279dffcf 100644 --- a/test/prism/snapshots/unparser/corpus/literal/case.txt +++ b/test/prism/snapshots/unparser/corpus/literal/case.txt @@ -1,12 +1,16 @@ @ ProgramNode (location: (1,0)-(37,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(37,3)) + ├── flags: ∅ └── body: (length: 8) ├── @ CaseNode (location: (1,0)-(6,3)) + │ ├── flags: newline │ ├── predicate: ∅ │ ├── conditions: (length: 2) │ │ ├── @ WhenNode (location: (2,0)-(3,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (2,0)-(2,4) = "when" │ │ │ ├── conditions: (length: 1) │ │ │ │ └── @ CallNode (location: (2,5)-(2,8)) @@ -22,9 +26,10 @@ │ │ │ ├── then_keyword_loc: ∅ │ │ │ └── statements: │ │ │ @ StatementsNode (location: (3,2)-(3,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (3,2)-(3,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :baz @@ -34,6 +39,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ WhenNode (location: (4,0)-(5,5)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (4,0)-(4,4) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ CallNode (location: (4,5)-(4,8)) @@ -49,9 +55,10 @@ │ │ ├── then_keyword_loc: ∅ │ │ └── statements: │ │ @ StatementsNode (location: (5,2)-(5,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (5,2)-(5,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -64,6 +71,7 @@ │ ├── case_keyword_loc: (1,0)-(1,4) = "case" │ └── end_keyword_loc: (6,0)-(6,3) = "end" ├── @ CaseNode (location: (7,0)-(11,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (7,5)-(7,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -77,6 +85,7 @@ │ │ └── block: ∅ │ ├── conditions: (length: 2) │ │ ├── @ WhenNode (location: (8,0)-(8,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (8,0)-(8,4) = "when" │ │ │ ├── conditions: (length: 1) │ │ │ │ └── @ CallNode (location: (8,5)-(8,8)) @@ -92,6 +101,7 @@ │ │ │ ├── then_keyword_loc: ∅ │ │ │ └── statements: ∅ │ │ └── @ WhenNode (location: (9,0)-(10,5)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (9,0)-(9,4) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ CallNode (location: (9,5)-(9,8)) @@ -107,9 +117,10 @@ │ │ ├── then_keyword_loc: ∅ │ │ └── statements: │ │ @ StatementsNode (location: (10,2)-(10,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (10,2)-(10,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -122,6 +133,7 @@ │ ├── case_keyword_loc: (7,0)-(7,4) = "case" │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ CaseNode (location: (12,0)-(17,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (12,5)-(12,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -135,6 +147,7 @@ │ │ └── block: ∅ │ ├── conditions: (length: 2) │ │ ├── @ WhenNode (location: (13,0)-(14,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (13,0)-(13,4) = "when" │ │ │ ├── conditions: (length: 1) │ │ │ │ └── @ CallNode (location: (13,5)-(13,8)) @@ -150,9 +163,10 @@ │ │ │ ├── then_keyword_loc: ∅ │ │ │ └── statements: │ │ │ @ StatementsNode (location: (14,2)-(14,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (14,2)-(14,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :baz @@ -162,6 +176,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ WhenNode (location: (15,0)-(16,5)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (15,0)-(15,4) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ CallNode (location: (15,5)-(15,8)) @@ -177,9 +192,10 @@ │ │ ├── then_keyword_loc: ∅ │ │ └── statements: │ │ @ StatementsNode (location: (16,2)-(16,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (16,2)-(16,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -192,6 +208,7 @@ │ ├── case_keyword_loc: (12,0)-(12,4) = "case" │ └── end_keyword_loc: (17,0)-(17,3) = "end" ├── @ CaseNode (location: (18,0)-(21,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (18,5)-(18,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -205,6 +222,7 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (19,0)-(20,8)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (19,0)-(19,4) = "when" │ │ ├── conditions: (length: 2) │ │ │ ├── @ CallNode (location: (19,5)-(19,8)) @@ -230,9 +248,10 @@ │ │ ├── then_keyword_loc: ∅ │ │ └── statements: │ │ @ StatementsNode (location: (20,2)-(20,8)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (20,2)-(20,8)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (20,2)-(20,3) = ":" │ │ ├── value_loc: (20,3)-(20,8) = "other" │ │ ├── closing_loc: ∅ @@ -241,6 +260,7 @@ │ ├── case_keyword_loc: (18,0)-(18,4) = "case" │ └── end_keyword_loc: (21,0)-(21,3) = "end" ├── @ CaseNode (location: (22,0)-(25,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (22,5)-(22,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -254,9 +274,11 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (23,0)-(24,8)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (23,0)-(23,4) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ SplatNode (location: (23,5)-(23,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (23,5)-(23,6) = "*" │ │ │ └── expression: │ │ │ @ CallNode (location: (23,6)-(23,9)) @@ -272,9 +294,10 @@ │ │ ├── then_keyword_loc: ∅ │ │ └── statements: │ │ @ StatementsNode (location: (24,2)-(24,8)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (24,2)-(24,8)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (24,2)-(24,3) = ":" │ │ ├── value_loc: (24,3)-(24,8) = "value" │ │ ├── closing_loc: ∅ @@ -283,6 +306,7 @@ │ ├── case_keyword_loc: (22,0)-(22,4) = "case" │ └── end_keyword_loc: (25,0)-(25,3) = "end" ├── @ CaseNode (location: (26,0)-(31,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (26,5)-(26,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -296,6 +320,7 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (27,0)-(28,5)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (27,0)-(27,4) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ CallNode (location: (27,5)-(27,8)) @@ -311,9 +336,10 @@ │ │ ├── then_keyword_loc: ∅ │ │ └── statements: │ │ @ StatementsNode (location: (28,2)-(28,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (28,2)-(28,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :baz @@ -324,12 +350,14 @@ │ │ └── block: ∅ │ ├── consequent: │ │ @ ElseNode (location: (29,0)-(31,3)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (29,0)-(29,4) = "else" │ │ ├── statements: │ │ │ @ StatementsNode (location: (30,2)-(30,6)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ SymbolNode (location: (30,2)-(30,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (30,2)-(30,3) = ":" │ │ │ ├── value_loc: (30,3)-(30,6) = "foo" │ │ │ ├── closing_loc: ∅ @@ -338,6 +366,7 @@ │ ├── case_keyword_loc: (26,0)-(26,4) = "case" │ └── end_keyword_loc: (31,0)-(31,3) = "end" ├── @ CaseNode (location: (32,0)-(34,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (32,5)-(32,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -351,9 +380,11 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ WhenNode (location: (33,0)-(33,15)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (33,0)-(33,4) = "when" │ │ ├── conditions: (length: 1) │ │ │ └── @ SplatNode (location: (33,5)-(33,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (33,5)-(33,6) = "*" │ │ │ └── expression: │ │ │ @ CallNode (location: (33,6)-(33,15)) @@ -395,6 +426,7 @@ │ ├── case_keyword_loc: (32,0)-(32,4) = "case" │ └── end_keyword_loc: (34,0)-(34,3) = "end" └── @ CaseNode (location: (35,0)-(37,3)) + ├── flags: newline ├── predicate: │ @ CallNode (location: (35,5)-(35,8)) │ ├── flags: variable_call, ignore_visibility @@ -408,9 +440,11 @@ │ └── block: ∅ ├── conditions: (length: 1) │ └── @ WhenNode (location: (36,0)-(36,15)) + │ ├── flags: ∅ │ ├── keyword_loc: (36,0)-(36,4) = "when" │ ├── conditions: (length: 1) │ │ └── @ SplatNode (location: (36,5)-(36,15)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (36,5)-(36,6) = "*" │ │ └── expression: │ │ @ CallNode (location: (36,6)-(36,15)) @@ -435,7 +469,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (36,14)-(36,15)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/class.txt b/test/prism/snapshots/unparser/corpus/literal/class.txt index 53068883987..add60ce3056 100644 --- a/test/prism/snapshots/unparser/corpus/literal/class.txt +++ b/test/prism/snapshots/unparser/corpus/literal/class.txt @@ -1,13 +1,17 @@ @ ProgramNode (location: (1,0)-(35,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(35,3)) + ├── flags: ∅ └── body: (length: 10) ├── @ ClassNode (location: (1,0)-(2,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (1,0)-(1,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (1,6)-(1,7)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── inheritance_operator_loc: ∅ │ ├── superclass: ∅ @@ -15,6 +19,7 @@ │ ├── end_keyword_loc: (2,0)-(2,3) = "end" │ └── name: :A ├── @ SingletonClassNode (location: (4,0)-(5,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (4,0)-(4,5) = "class" │ ├── operator_loc: (4,6)-(4,8) = "<<" @@ -32,6 +37,7 @@ │ ├── body: ∅ │ └── end_keyword_loc: (5,0)-(5,3) = "end" ├── @ SingletonClassNode (location: (7,0)-(9,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (7,0)-(7,5) = "class" │ ├── operator_loc: (7,6)-(7,8) = "<<" @@ -48,9 +54,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (8,2)-(8,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (8,2)-(8,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :b @@ -61,12 +68,15 @@ │ │ └── block: ∅ │ └── end_keyword_loc: (9,0)-(9,3) = "end" ├── @ ClassNode (location: (11,0)-(12,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (11,0)-(11,5) = "class" │ ├── constant_path: │ │ @ ConstantPathNode (location: (11,6)-(11,10)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantReadNode (location: (11,6)-(11,7)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── name: :B │ │ ├── delimiter_loc: (11,7)-(11,9) = "::" @@ -77,14 +87,18 @@ │ ├── end_keyword_loc: (12,0)-(12,3) = "end" │ └── name: :B ├── @ ClassNode (location: (14,0)-(15,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (14,0)-(14,5) = "class" │ ├── constant_path: │ │ @ ConstantPathNode (location: (14,6)-(14,13)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantPathNode (location: (14,6)-(14,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── parent: │ │ │ │ @ ConstantReadNode (location: (14,6)-(14,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :A │ │ │ ├── name: :B │ │ │ ├── delimiter_loc: (14,7)-(14,9) = "::" @@ -98,29 +112,36 @@ │ ├── end_keyword_loc: (15,0)-(15,3) = "end" │ └── name: :C ├── @ ClassNode (location: (17,0)-(18,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (17,0)-(17,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (17,6)-(17,7)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── inheritance_operator_loc: (17,8)-(17,9) = "<" │ ├── superclass: │ │ @ ConstantReadNode (location: (17,10)-(17,11)) + │ │ ├── flags: ∅ │ │ └── name: :B │ ├── body: ∅ │ ├── end_keyword_loc: (18,0)-(18,3) = "end" │ └── name: :A ├── @ ClassNode (location: (20,0)-(21,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (20,0)-(20,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (20,6)-(20,7)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── inheritance_operator_loc: (20,8)-(20,9) = "<" │ ├── superclass: │ │ @ ConstantPathNode (location: (20,10)-(20,14)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantReadNode (location: (20,10)-(20,11)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :B │ │ ├── name: :C │ │ ├── delimiter_loc: (20,11)-(20,13) = "::" @@ -129,12 +150,15 @@ │ ├── end_keyword_loc: (21,0)-(21,3) = "end" │ └── name: :A ├── @ ClassNode (location: (23,0)-(24,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (23,0)-(23,5) = "class" │ ├── constant_path: │ │ @ ConstantPathNode (location: (23,6)-(23,10)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantReadNode (location: (23,6)-(23,7)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── name: :B │ │ ├── delimiter_loc: (23,7)-(23,9) = "::" @@ -142,8 +166,10 @@ │ ├── inheritance_operator_loc: (23,11)-(23,12) = "<" │ ├── superclass: │ │ @ ConstantPathNode (location: (23,13)-(23,17)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantReadNode (location: (23,13)-(23,14)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :C │ │ ├── name: :D │ │ ├── delimiter_loc: (23,14)-(23,16) = "::" @@ -152,18 +178,21 @@ │ ├── end_keyword_loc: (24,0)-(24,3) = "end" │ └── name: :B ├── @ ClassNode (location: (26,0)-(32,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── class_keyword_loc: (26,0)-(26,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (26,6)-(26,7)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── inheritance_operator_loc: ∅ │ ├── superclass: ∅ │ ├── body: │ │ @ StatementsNode (location: (27,2)-(31,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 2) │ │ ├── @ CallNode (location: (27,2)-(27,16)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :include @@ -177,6 +206,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ ├── receiver: │ │ │ │ │ @ ConstantReadNode (location: (27,10)-(27,11)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── name: :B │ │ │ │ ├── call_operator_loc: (27,11)-(27,12) = "." │ │ │ │ ├── name: :new @@ -188,15 +218,17 @@ │ │ │ ├── closing_loc: (27,15)-(27,16) = ")" │ │ │ └── block: ∅ │ │ └── @ DefNode (location: (29,2)-(31,5)) + │ │ ├── flags: newline │ │ ├── name: :foo │ │ ├── name_loc: (29,6)-(29,9) = "foo" │ │ ├── receiver: ∅ │ │ ├── parameters: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (30,4)-(30,8)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ SymbolNode (location: (30,4)-(30,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (30,4)-(30,5) = ":" │ │ │ ├── value_loc: (30,5)-(30,8) = "bar" │ │ │ ├── closing_loc: ∅ @@ -211,10 +243,12 @@ │ ├── end_keyword_loc: (32,0)-(32,3) = "end" │ └── name: :A └── @ ClassNode (location: (34,0)-(35,3)) + ├── flags: newline ├── locals: [] ├── class_keyword_loc: (34,0)-(34,5) = "class" ├── constant_path: │ @ ConstantPathNode (location: (34,6)-(34,9)) + │ ├── flags: ∅ │ ├── parent: ∅ │ ├── name: :A │ ├── delimiter_loc: (34,6)-(34,8) = "::" diff --git a/test/prism/snapshots/unparser/corpus/literal/def.txt b/test/prism/snapshots/unparser/corpus/literal/def.txt index f3ef6c388e4..405c4f3fb84 100644 --- a/test/prism/snapshots/unparser/corpus/literal/def.txt +++ b/test/prism/snapshots/unparser/corpus/literal/def.txt @@ -1,21 +1,26 @@ @ ProgramNode (location: (1,0)-(134,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(134,3)) + ├── flags: ∅ └── body: (length: 30) ├── @ DefNode (location: (1,0)-(9,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (1,4)-(1,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (1,0)-(9,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (2,2)-(2,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (2,2)-(2,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :a @@ -26,15 +31,17 @@ │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (3,0)-(4,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (3,0)-(3,6) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (4,2)-(4,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (4,2)-(4,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :b @@ -46,12 +53,14 @@ │ │ │ └── consequent: ∅ │ │ ├── else_clause: │ │ │ @ ElseNode (location: (5,0)-(7,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── else_keyword_loc: (5,0)-(5,4) = "else" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (6,2)-(6,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (6,2)-(6,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :c @@ -63,12 +72,14 @@ │ │ │ └── end_keyword_loc: (7,0)-(7,6) = "ensure" │ │ ├── ensure_clause: │ │ │ @ EnsureNode (location: (7,0)-(9,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── ensure_keyword_loc: (7,0)-(7,6) = "ensure" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (8,2)-(8,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (8,2)-(8,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :d @@ -87,17 +98,21 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (9,0)-(9,3) = "end" ├── @ DefNode (location: (11,0)-(19,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (11,4)-(11,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (11,0)-(19,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (12,2)-(12,12)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ RescueModifierNode (location: (12,2)-(12,12)) + │ │ │ ├── flags: newline │ │ │ ├── expression: │ │ │ │ @ CallNode (location: (12,2)-(12,3)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -123,15 +138,17 @@ │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (13,0)-(14,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (13,0)-(13,6) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (14,2)-(14,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (14,2)-(14,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :b @@ -143,12 +160,14 @@ │ │ │ └── consequent: ∅ │ │ ├── else_clause: │ │ │ @ ElseNode (location: (15,0)-(17,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── else_keyword_loc: (15,0)-(15,4) = "else" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (16,2)-(16,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (16,2)-(16,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :c @@ -160,12 +179,14 @@ │ │ │ └── end_keyword_loc: (17,0)-(17,6) = "ensure" │ │ ├── ensure_clause: │ │ │ @ EnsureNode (location: (17,0)-(19,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── ensure_keyword_loc: (17,0)-(17,6) = "ensure" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (18,2)-(18,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (18,2)-(18,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :d @@ -184,11 +205,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (19,0)-(19,3) = "end" ├── @ DefNode (location: (21,0)-(22,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (21,4)-(21,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (21,8)-(21,18)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -213,6 +236,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (22,0)-(22,3) = "end" ├── @ DefNode (location: (24,0)-(25,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (24,4)-(24,7) = "foo" │ ├── receiver: ∅ @@ -226,15 +250,17 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (25,0)-(25,3) = "end" ├── @ DefNode (location: (27,0)-(29,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (27,4)-(27,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (28,2)-(28,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (28,2)-(28,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -251,18 +277,21 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (29,0)-(29,3) = "end" ├── @ DefNode (location: (31,0)-(37,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (31,4)-(31,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (31,0)-(37,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (32,2)-(32,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (32,2)-(32,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :foo @@ -273,15 +302,17 @@ │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (33,0)-(34,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (33,0)-(33,6) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (34,2)-(34,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (34,2)-(34,5)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :bar @@ -294,12 +325,14 @@ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: │ │ │ @ EnsureNode (location: (35,0)-(37,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── ensure_keyword_loc: (35,0)-(35,6) = "ensure" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (36,2)-(36,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (36,2)-(36,5)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :baz @@ -318,18 +351,21 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (37,0)-(37,3) = "end" ├── @ DefNode (location: (39,0)-(43,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (39,4)-(39,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (39,0)-(43,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (40,2)-(40,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (40,2)-(40,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -342,12 +378,14 @@ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: │ │ │ @ EnsureNode (location: (41,0)-(43,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── ensure_keyword_loc: (41,0)-(41,6) = "ensure" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (42,2)-(42,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (42,2)-(42,5)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :baz @@ -366,18 +404,21 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (43,0)-(43,3) = "end" ├── @ DefNode (location: (45,0)-(49,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (45,4)-(45,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (45,0)-(49,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (46,2)-(46,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (46,2)-(46,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -388,15 +429,17 @@ │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (47,0)-(48,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (47,0)-(47,6) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (48,2)-(48,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (48,2)-(48,5)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :baz @@ -417,11 +460,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (49,0)-(49,3) = "end" ├── @ DefNode (location: (51,0)-(53,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (51,4)-(51,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (51,8)-(51,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (51,8)-(51,11)) │ │ │ ├── flags: ∅ @@ -434,8 +479,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (52,2)-(52,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (52,2)-(52,5)) + │ │ ├── flags: newline │ │ ├── name: :bar │ │ └── depth: 0 │ ├── locals: [:bar] @@ -446,11 +493,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (53,0)-(53,3) = "end" ├── @ DefNode (location: (55,0)-(57,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (55,4)-(55,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (55,8)-(55,16)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ RequiredParameterNode (location: (55,8)-(55,11)) │ │ │ │ ├── flags: ∅ @@ -466,8 +515,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (56,2)-(56,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (56,2)-(56,5)) + │ │ ├── flags: newline │ │ ├── name: :bar │ │ └── depth: 0 │ ├── locals: [:bar, :baz] @@ -478,11 +529,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (57,0)-(57,3) = "end" ├── @ DefNode (location: (59,0)-(61,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (59,4)-(59,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (59,8)-(59,16)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (59,8)-(59,16)) @@ -492,6 +545,7 @@ │ │ │ ├── operator_loc: (59,12)-(59,13) = "=" │ │ │ └── value: │ │ │ @ ParenthesesNode (location: (59,14)-(59,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: ∅ │ │ │ ├── opening_loc: (59,14)-(59,15) = "(" │ │ │ └── closing_loc: (59,15)-(59,16) = ")" @@ -502,8 +556,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (60,2)-(60,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (60,2)-(60,5)) + │ │ ├── flags: newline │ │ ├── name: :bar │ │ └── depth: 0 │ ├── locals: [:bar] @@ -514,11 +570,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (61,0)-(61,3) = "end" ├── @ DefNode (location: (63,0)-(64,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (63,4)-(63,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (63,8)-(63,24)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (63,8)-(63,24)) @@ -528,11 +586,13 @@ │ │ │ ├── operator_loc: (63,12)-(63,13) = "=" │ │ │ └── value: │ │ │ @ ParenthesesNode (location: (63,14)-(63,24)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (63,15)-(63,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 2) │ │ │ │ ├── @ CallNode (location: (63,15)-(63,18)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ │ ├── receiver: ∅ │ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ │ ├── name: :baz @@ -542,6 +602,7 @@ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── block: ∅ │ │ │ │ └── @ NilNode (location: (63,20)-(63,23)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── opening_loc: (63,14)-(63,15) = "(" │ │ │ └── closing_loc: (63,23)-(63,24) = ")" │ │ ├── rest: ∅ @@ -558,11 +619,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (64,0)-(64,3) = "end" ├── @ DefNode (location: (66,0)-(68,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (66,4)-(66,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (66,8)-(66,18)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (66,8)-(66,18)) @@ -572,6 +635,7 @@ │ │ │ ├── operator_loc: (66,12)-(66,13) = "=" │ │ │ └── value: │ │ │ @ TrueNode (location: (66,14)-(66,18)) + │ │ │ └── flags: static_literal │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) │ │ ├── keywords: (length: 0) @@ -579,8 +643,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (67,2)-(67,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (67,2)-(67,5)) + │ │ ├── flags: newline │ │ ├── name: :bar │ │ └── depth: 0 │ ├── locals: [:bar] @@ -591,11 +657,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (68,0)-(68,3) = "end" ├── @ DefNode (location: (70,0)-(72,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (70,4)-(70,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (70,8)-(70,23)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (70,8)-(70,11)) │ │ │ ├── flags: ∅ @@ -608,6 +676,7 @@ │ │ │ ├── operator_loc: (70,17)-(70,18) = "=" │ │ │ └── value: │ │ │ @ TrueNode (location: (70,19)-(70,23)) + │ │ │ └── flags: static_literal │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) │ │ ├── keywords: (length: 0) @@ -615,8 +684,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (71,2)-(71,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (71,2)-(71,5)) + │ │ ├── flags: newline │ │ ├── name: :bar │ │ └── depth: 0 │ ├── locals: [:bar, :baz] @@ -627,11 +698,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (72,0)-(72,3) = "end" ├── @ DefNode (location: (74,0)-(75,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (74,4)-(74,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (74,8)-(74,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -643,7 +716,7 @@ │ │ │ ├── name_loc: (74,8)-(74,12) = "bar:" │ │ │ └── value: │ │ │ @ IntegerNode (location: (74,13)-(74,14)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── keyword_rest: ∅ │ │ └── block: ∅ @@ -656,11 +729,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (75,0)-(75,3) = "end" ├── @ DefNode (location: (77,0)-(78,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (77,4)-(77,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (77,8)-(77,16)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -692,11 +767,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (78,0)-(78,3) = "end" ├── @ DefNode (location: (80,0)-(81,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (80,4)-(80,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (80,8)-(80,18)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -728,11 +805,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (81,0)-(81,3) = "end" ├── @ DefNode (location: (83,0)-(85,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (83,4)-(83,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (83,8)-(83,9)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -747,9 +826,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (84,2)-(84,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (84,2)-(84,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -766,11 +846,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (85,0)-(85,3) = "end" ├── @ DefNode (location: (87,0)-(89,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (87,4)-(87,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (87,8)-(87,12)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: @@ -785,8 +867,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (88,2)-(88,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (88,2)-(88,5)) + │ │ ├── flags: newline │ │ ├── name: :bar │ │ └── depth: 0 │ ├── locals: [:bar] @@ -797,11 +881,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (89,0)-(89,3) = "end" ├── @ DefNode (location: (91,0)-(93,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (91,4)-(91,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (91,8)-(91,17)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (91,8)-(91,11)) │ │ │ ├── flags: ∅ @@ -819,8 +905,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (92,2)-(92,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (92,2)-(92,5)) + │ │ ├── flags: newline │ │ ├── name: :bar │ │ └── depth: 0 │ ├── locals: [:bar, :baz] @@ -831,11 +919,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (93,0)-(93,3) = "end" ├── @ DefNode (location: (95,0)-(97,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (95,4)-(95,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (95,8)-(95,24)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (95,8)-(95,18)) @@ -845,6 +935,7 @@ │ │ │ ├── operator_loc: (95,12)-(95,13) = "=" │ │ │ └── value: │ │ │ @ TrueNode (location: (95,14)-(95,18)) + │ │ │ └── flags: static_literal │ │ ├── rest: │ │ │ @ RestParameterNode (location: (95,20)-(95,24)) │ │ │ ├── flags: ∅ @@ -857,9 +948,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (96,2)-(96,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (96,2)-(96,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -876,11 +968,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (97,0)-(97,3) = "end" ├── @ DefNode (location: (99,0)-(101,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (99,4)-(99,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (99,8)-(99,32)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (99,8)-(99,18)) @@ -890,6 +984,7 @@ │ │ │ ├── operator_loc: (99,12)-(99,13) = "=" │ │ │ └── value: │ │ │ @ TrueNode (location: (99,14)-(99,18)) + │ │ │ └── flags: static_literal │ │ ├── rest: │ │ │ @ RestParameterNode (location: (99,20)-(99,24)) │ │ │ ├── flags: ∅ @@ -907,9 +1002,10 @@ │ │ └── operator_loc: (99,26)-(99,27) = "&" │ ├── body: │ │ @ StatementsNode (location: (100,2)-(100,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (100,2)-(100,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -926,11 +1022,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (101,0)-(101,3) = "end" ├── @ DefNode (location: (103,0)-(105,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (103,4)-(103,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (103,8)-(103,29)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (103,8)-(103,11)) │ │ │ ├── flags: ∅ @@ -943,6 +1041,7 @@ │ │ │ ├── operator_loc: (103,17)-(103,18) = "=" │ │ │ └── value: │ │ │ @ TrueNode (location: (103,19)-(103,23)) + │ │ │ └── flags: static_literal │ │ ├── rest: │ │ │ @ RestParameterNode (location: (103,25)-(103,29)) │ │ │ ├── flags: ∅ @@ -955,8 +1054,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (104,2)-(104,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (104,2)-(104,5)) + │ │ ├── flags: newline │ │ ├── name: :bar │ │ └── depth: 0 │ ├── locals: [:bar, :baz, :bor] @@ -967,11 +1068,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (105,0)-(105,3) = "end" ├── @ DefNode (location: (107,0)-(109,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (107,4)-(107,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (107,8)-(107,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -986,9 +1089,10 @@ │ │ └── operator_loc: (107,8)-(107,9) = "&" │ ├── body: │ │ @ StatementsNode (location: (108,2)-(108,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (108,2)-(108,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -1005,11 +1109,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (109,0)-(109,3) = "end" ├── @ DefNode (location: (111,0)-(113,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (111,4)-(111,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (111,8)-(111,19)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (111,8)-(111,11)) │ │ │ ├── flags: ∅ @@ -1027,8 +1133,10 @@ │ │ └── operator_loc: (111,13)-(111,14) = "&" │ ├── body: │ │ @ StatementsNode (location: (112,2)-(112,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (112,2)-(112,5)) + │ │ ├── flags: newline │ │ ├── name: :bar │ │ └── depth: 0 │ ├── locals: [:bar, :block] @@ -1039,15 +1147,17 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (113,0)-(113,3) = "end" ├── @ DefNode (location: (115,0)-(118,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (115,4)-(115,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (116,2)-(117,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 2) │ │ ├── @ CallNode (location: (116,2)-(116,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -1057,7 +1167,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ CallNode (location: (117,2)-(117,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :baz @@ -1074,15 +1184,19 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (118,0)-(118,3) = "end" ├── @ DefNode (location: (120,0)-(121,3)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (120,4)-(120,5) = "f" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (120,6)-(120,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ MultiTargetNode (location: (120,6)-(120,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── lefts: (length: 1) │ │ │ │ └── @ MultiTargetNode (location: (120,7)-(120,10)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── lefts: (length: 1) │ │ │ │ │ └── @ RequiredParameterNode (location: (120,8)-(120,9)) │ │ │ │ │ ├── flags: ∅ @@ -1110,11 +1224,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (121,0)-(121,3) = "end" ├── @ DefNode (location: (123,0)-(124,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (123,4)-(123,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (123,8)-(123,26)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -1146,29 +1262,32 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (124,0)-(124,3) = "end" ├── @ DefNode (location: (126,0)-(130,3)) + │ ├── flags: newline │ ├── name: :f │ ├── name_loc: (126,4)-(126,5) = "f" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (127,2)-(127,12)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ InterpolatedStringNode (location: (127,2)-(127,12)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── opening_loc: (127,2)-(127,12) = "<<-HEREDOC" │ │ ├── parts: (length: 3) │ │ │ ├── @ StringNode (location: (128,0)-(128,4)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (128,0)-(128,4) = " " │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: " " │ │ │ ├── @ EmbeddedStatementsNode (location: (128,4)-(128,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── opening_loc: (128,4)-(128,6) = "\#{" │ │ │ │ ├── statements: ∅ │ │ │ │ └── closing_loc: (128,6)-(128,7) = "}" │ │ │ └── @ StringNode (location: (128,7)-(129,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (128,7)-(129,0) = "\n" │ │ │ ├── closing_loc: ∅ @@ -1182,15 +1301,17 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (130,0)-(130,3) = "end" └── @ DefNode (location: (132,0)-(134,3)) + ├── flags: newline ├── name: :f ├── name_loc: (132,4)-(132,5) = "f" ├── receiver: ∅ ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (133,2)-(133,5)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ StringNode (location: (133,2)-(133,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (133,2)-(133,4) = "%(" │ ├── content_loc: (133,4)-(133,4) = "" │ ├── closing_loc: (133,4)-(133,5) = ")" diff --git a/test/prism/snapshots/unparser/corpus/literal/defined.txt b/test/prism/snapshots/unparser/corpus/literal/defined.txt index 89145ddcda8..d1b5a15685e 100644 --- a/test/prism/snapshots/unparser/corpus/literal/defined.txt +++ b/test/prism/snapshots/unparser/corpus/literal/defined.txt @@ -1,35 +1,47 @@ @ ProgramNode (location: (1,0)-(3,27)) +├── flags: ∅ ├── locals: [:a, :b] └── statements: @ StatementsNode (location: (1,0)-(3,27)) + ├── flags: ∅ └── body: (length: 3) ├── @ DefinedNode (location: (1,0)-(1,14)) + │ ├── flags: newline │ ├── lparen_loc: (1,8)-(1,9) = "(" │ ├── value: │ │ @ InstanceVariableReadNode (location: (1,9)-(1,13)) + │ │ ├── flags: ∅ │ │ └── name: :@foo │ ├── rparen_loc: (1,13)-(1,14) = ")" │ └── keyword_loc: (1,0)-(1,8) = "defined?" ├── @ DefinedNode (location: (2,0)-(2,13)) + │ ├── flags: newline │ ├── lparen_loc: (2,8)-(2,9) = "(" │ ├── value: │ │ @ ConstantReadNode (location: (2,9)-(2,12)) + │ │ ├── flags: ∅ │ │ └── name: :Foo │ ├── rparen_loc: (2,12)-(2,13) = ")" │ └── keyword_loc: (2,0)-(2,8) = "defined?" └── @ DefinedNode (location: (3,0)-(3,27)) + ├── flags: newline ├── lparen_loc: (3,8)-(3,9) = "(" ├── value: │ @ ParenthesesNode (location: (3,9)-(3,26)) + │ ├── flags: ∅ │ ├── body: │ │ @ StatementsNode (location: (3,10)-(3,25)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ MultiWriteNode (location: (3,10)-(3,25)) + │ │ ├── flags: newline │ │ ├── lefts: (length: 2) │ │ │ ├── @ LocalVariableTargetNode (location: (3,11)-(3,12)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :a │ │ │ │ └── depth: 0 │ │ │ └── @ LocalVariableTargetNode (location: (3,14)-(3,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :b │ │ │ └── depth: 0 │ │ ├── rest: ∅ @@ -39,13 +51,13 @@ │ │ ├── operator_loc: (3,17)-(3,18) = "=" │ │ └── value: │ │ @ ArrayNode (location: (3,19)-(3,25)) - │ │ ├── flags: ∅ + │ │ ├── flags: static_literal │ │ ├── elements: (length: 2) │ │ │ ├── @ IntegerNode (location: (3,20)-(3,21)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── @ IntegerNode (location: (3,23)-(3,24)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── opening_loc: (3,19)-(3,20) = "[" │ │ └── closing_loc: (3,24)-(3,25) = "]" diff --git a/test/prism/snapshots/unparser/corpus/literal/defs.txt b/test/prism/snapshots/unparser/corpus/literal/defs.txt index 78588771723..33c24f3b24e 100644 --- a/test/prism/snapshots/unparser/corpus/literal/defs.txt +++ b/test/prism/snapshots/unparser/corpus/literal/defs.txt @@ -1,13 +1,17 @@ @ ProgramNode (location: (1,0)-(40,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(40,3)) + ├── flags: ∅ └── body: (length: 10) ├── @ DefNode (location: (1,0)-(2,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (1,9)-(1,12) = "foo" │ ├── receiver: │ │ @ SelfNode (location: (1,4)-(1,8)) + │ │ └── flags: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -18,16 +22,19 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (2,0)-(2,3) = "end" ├── @ DefNode (location: (4,0)-(6,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (4,9)-(4,12) = "foo" │ ├── receiver: │ │ @ SelfNode (location: (4,4)-(4,8)) + │ │ └── flags: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (5,2)-(5,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (5,2)-(5,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -44,16 +51,19 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (6,0)-(6,3) = "end" ├── @ DefNode (location: (8,0)-(11,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (8,9)-(8,12) = "foo" │ ├── receiver: │ │ @ SelfNode (location: (8,4)-(8,8)) + │ │ └── flags: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (9,2)-(10,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 2) │ │ ├── @ CallNode (location: (9,2)-(9,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -63,7 +73,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ CallNode (location: (10,2)-(10,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :baz @@ -80,17 +90,20 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ DefNode (location: (13,0)-(15,3)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (13,8)-(13,11) = "bar" │ ├── receiver: │ │ @ ConstantReadNode (location: (13,4)-(13,7)) + │ │ ├── flags: ∅ │ │ └── name: :Foo │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (14,2)-(14,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (14,2)-(14,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -107,10 +120,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (15,0)-(15,3) = "end" ├── @ DefNode (location: (17,0)-(20,3)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (18,3)-(18,6) = "bar" │ ├── receiver: │ │ @ ParenthesesNode (location: (17,4)-(18,2)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ CallNode (location: (17,5)-(18,1)) │ │ │ ├── flags: ignore_visibility @@ -123,11 +138,14 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: │ │ │ @ BlockNode (location: (17,9)-(18,1)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [:bar] │ │ │ ├── parameters: │ │ │ │ @ BlockParametersNode (location: (17,11)-(17,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── parameters: │ │ │ │ │ @ ParametersNode (location: (17,12)-(17,15)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ │ └── @ RequiredParameterNode (location: (17,12)-(17,15)) │ │ │ │ │ │ ├── flags: ∅ @@ -149,9 +167,10 @@ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (19,2)-(19,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (19,2)-(19,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -168,10 +187,12 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (20,0)-(20,3) = "end" ├── @ DefNode (location: (22,0)-(24,3)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (22,13)-(22,16) = "bar" │ ├── receiver: │ │ @ ParenthesesNode (location: (22,4)-(22,12)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ CallNode (location: (22,5)-(22,11)) │ │ │ ├── flags: ignore_visibility @@ -185,7 +206,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ IntegerNode (location: (22,9)-(22,10)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── closing_loc: (22,10)-(22,11) = ")" │ │ │ └── block: ∅ @@ -194,9 +215,10 @@ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (23,2)-(23,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (23,2)-(23,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -213,17 +235,21 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (24,0)-(24,3) = "end" ├── @ DefNode (location: (26,0)-(28,3)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (26,19)-(26,22) = "bar" │ ├── receiver: │ │ @ ParenthesesNode (location: (26,4)-(26,18)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ CallNode (location: (26,5)-(26,17)) │ │ │ ├── flags: ∅ │ │ │ ├── receiver: │ │ │ │ @ ConstantPathNode (location: (26,5)-(26,13)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── parent: │ │ │ │ │ @ ConstantReadNode (location: (26,5)-(26,8)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── name: :Foo │ │ │ │ ├── name: :Bar │ │ │ │ ├── delimiter_loc: (26,8)-(26,10) = "::" @@ -240,9 +266,10 @@ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (27,2)-(27,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (27,2)-(27,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :baz @@ -259,14 +286,18 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (28,0)-(28,3) = "end" ├── @ DefNode (location: (30,0)-(32,3)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (30,15)-(30,18) = "bar" │ ├── receiver: │ │ @ ParenthesesNode (location: (30,4)-(30,14)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ ConstantPathNode (location: (30,5)-(30,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── parent: │ │ │ │ @ ConstantReadNode (location: (30,5)-(30,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :Foo │ │ │ ├── name: :Bar │ │ │ ├── delimiter_loc: (30,8)-(30,10) = "::" @@ -276,9 +307,10 @@ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (31,2)-(31,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (31,2)-(31,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :baz @@ -295,17 +327,20 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (32,0)-(32,3) = "end" ├── @ DefNode (location: (34,0)-(36,3)) + │ ├── flags: newline │ ├── name: :bar │ ├── name_loc: (34,8)-(34,11) = "bar" │ ├── receiver: │ │ @ ConstantReadNode (location: (34,4)-(34,7)) + │ │ ├── flags: ∅ │ │ └── name: :Foo │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (35,2)-(35,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (35,2)-(35,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :baz @@ -322,6 +357,7 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (36,0)-(36,3) = "end" └── @ DefNode (location: (38,0)-(40,3)) + ├── flags: newline ├── name: :bar ├── name_loc: (38,8)-(38,11) = "bar" ├── receiver: @@ -338,9 +374,10 @@ ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (39,2)-(39,5)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (39,2)-(39,5)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :baz diff --git a/test/prism/snapshots/unparser/corpus/literal/dstr.txt b/test/prism/snapshots/unparser/corpus/literal/dstr.txt index 8893e8b75d2..3092360608f 100644 --- a/test/prism/snapshots/unparser/corpus/literal/dstr.txt +++ b/test/prism/snapshots/unparser/corpus/literal/dstr.txt @@ -1,26 +1,32 @@ @ ProgramNode (location: (1,0)-(37,1)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(37,1)) + ├── flags: ∅ └── body: (length: 11) ├── @ IfNode (location: (1,0)-(3,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (1,0)-(1,2) = "if" │ ├── predicate: │ │ @ TrueNode (location: (1,3)-(1,7)) + │ │ └── flags: static_literal │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (2,2)-(2,8)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ InterpolatedStringNode (location: (2,2)-(2,8)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── opening_loc: (2,2)-(2,3) = "\"" │ │ ├── parts: (length: 2) │ │ │ ├── @ EmbeddedStatementsNode (location: (2,3)-(2,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── opening_loc: (2,3)-(2,5) = "\#{" │ │ │ │ ├── statements: ∅ │ │ │ │ └── closing_loc: (2,5)-(2,6) = "}" │ │ │ └── @ StringNode (location: (2,6)-(2,7)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (2,6)-(2,7) = "a" │ │ │ ├── closing_loc: ∅ @@ -29,36 +35,40 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" ├── @ IfNode (location: (4,0)-(11,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (4,0)-(4,2) = "if" │ ├── predicate: │ │ @ TrueNode (location: (4,3)-(4,7)) + │ │ └── flags: static_literal │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (5,2)-(10,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 2) │ │ ├── @ InterpolatedStringNode (location: (5,2)-(5,12)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── opening_loc: (5,2)-(5,12) = "<<-HEREDOC" │ │ │ ├── parts: (length: 3) │ │ │ │ ├── @ StringNode (location: (6,0)-(7,0)) - │ │ │ │ │ ├── flags: frozen + │ │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── content_loc: (6,0)-(7,0) = "a\n" │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── unescaped: "a\n" │ │ │ │ ├── @ EmbeddedStatementsNode (location: (7,0)-(7,3)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── opening_loc: (7,0)-(7,2) = "\#{" │ │ │ │ │ ├── statements: ∅ │ │ │ │ │ └── closing_loc: (7,2)-(7,3) = "}" │ │ │ │ └── @ StringNode (location: (7,3)-(9,0)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (7,3)-(9,0) = "a\nb\n" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "a\nb\n" │ │ │ └── closing_loc: (9,0)-(10,0) = " HEREDOC\n" │ │ └── @ CallNode (location: (10,2)-(10,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :x @@ -70,58 +80,63 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ InterpolatedStringNode (location: (12,0)-(12,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (12,0)-(12,10) = "<<-HEREDOC" │ ├── parts: (length: 7) │ │ ├── @ StringNode (location: (13,0)-(14,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (13,0)-(14,0) = "\\\#{}\\\#{}\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\#{}\#{}\n" │ │ ├── @ EmbeddedStatementsNode (location: (14,0)-(14,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (14,0)-(14,2) = "\#{" │ │ │ ├── statements: ∅ │ │ │ └── closing_loc: (14,2)-(14,3) = "}" │ │ ├── @ StringNode (location: (14,3)-(15,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (14,3)-(15,0) = "\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\n" │ │ ├── @ EmbeddedStatementsNode (location: (15,0)-(15,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (15,0)-(15,2) = "\#{" │ │ │ ├── statements: ∅ │ │ │ └── closing_loc: (15,2)-(15,3) = "}" │ │ ├── @ StringNode (location: (15,3)-(16,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (15,3)-(16,0) = "\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\n" │ │ ├── @ EmbeddedStatementsNode (location: (16,0)-(16,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (16,0)-(16,2) = "\#{" │ │ │ ├── statements: ∅ │ │ │ └── closing_loc: (16,2)-(16,3) = "}" │ │ └── @ StringNode (location: (16,3)-(17,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (16,3)-(17,0) = "\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "\n" │ └── closing_loc: (17,0)-(18,0) = "HEREDOC\n" ├── @ RescueModifierNode (location: (18,0)-(18,21)) + │ ├── flags: newline │ ├── expression: │ │ @ InterpolatedStringNode (location: (18,0)-(18,10)) │ │ ├── flags: ∅ │ │ ├── opening_loc: (18,0)-(18,10) = "<<-HEREDOC" │ │ ├── parts: (length: 2) │ │ │ ├── @ EmbeddedStatementsNode (location: (19,0)-(19,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── opening_loc: (19,0)-(19,2) = "\#{" │ │ │ │ ├── statements: ∅ │ │ │ │ └── closing_loc: (19,2)-(19,3) = "}" │ │ │ └── @ StringNode (location: (19,3)-(21,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (19,3)-(21,0) = "\na\n" │ │ │ ├── closing_loc: ∅ @@ -130,80 +145,92 @@ │ ├── keyword_loc: (18,11)-(18,17) = "rescue" │ └── rescue_expression: │ @ NilNode (location: (18,18)-(18,21)) + │ └── flags: static_literal ├── @ InterpolatedStringNode (location: (22,0)-(22,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (22,0)-(22,1) = "\"" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (22,1)-(22,2)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (22,1)-(22,2) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ └── @ EmbeddedVariableNode (location: (22,2)-(22,5)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (22,2)-(22,3) = "#" │ │ └── variable: │ │ @ NumberedReferenceReadNode (location: (22,3)-(22,5)) + │ │ ├── flags: ∅ │ │ └── number: 1 │ └── closing_loc: (22,5)-(22,6) = "\"" ├── @ InterpolatedStringNode (location: (23,0)-(23,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (23,0)-(23,1) = "\"" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (23,1)-(23,2)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (23,1)-(23,2) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ └── @ EmbeddedVariableNode (location: (23,2)-(23,5)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (23,2)-(23,3) = "#" │ │ └── variable: │ │ @ GlobalVariableReadNode (location: (23,3)-(23,5)) + │ │ ├── flags: ∅ │ │ └── name: :$a │ └── closing_loc: (23,5)-(23,6) = "\"" ├── @ InterpolatedStringNode (location: (24,0)-(24,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (24,0)-(24,1) = "\"" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (24,1)-(24,2)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (24,1)-(24,2) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ └── @ EmbeddedVariableNode (location: (24,2)-(24,5)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (24,2)-(24,3) = "#" │ │ └── variable: │ │ @ InstanceVariableReadNode (location: (24,3)-(24,5)) + │ │ ├── flags: ∅ │ │ └── name: :@a │ └── closing_loc: (24,5)-(24,6) = "\"" ├── @ InterpolatedStringNode (location: (25,0)-(25,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (25,0)-(25,1) = "\"" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (25,1)-(25,2)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (25,1)-(25,2) = "a" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ └── @ EmbeddedVariableNode (location: (25,2)-(25,6)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (25,2)-(25,3) = "#" │ │ └── variable: │ │ @ ClassVariableReadNode (location: (25,3)-(25,6)) + │ │ ├── flags: ∅ │ │ └── name: :@@a │ └── closing_loc: (25,6)-(25,7) = "\"" ├── @ IfNode (location: (26,0)-(30,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (26,0)-(26,2) = "if" │ ├── predicate: │ │ @ TrueNode (location: (26,3)-(26,7)) + │ │ └── flags: static_literal │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (27,2)-(27,19)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ ReturnNode (location: (27,2)-(27,19)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── keyword_loc: (27,2)-(27,8) = "return" │ │ └── arguments: │ │ @ ArgumentsNode (location: (27,9)-(27,19)) @@ -214,22 +241,24 @@ │ │ ├── opening_loc: (27,9)-(27,19) = "<<-HEREDOC" │ │ ├── parts: (length: 3) │ │ │ ├── @ StringNode (location: (28,0)-(28,4)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (28,0)-(28,4) = " " │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: " " │ │ │ ├── @ EmbeddedStatementsNode (location: (28,4)-(28,9)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── opening_loc: (28,4)-(28,6) = "\#{" │ │ │ │ ├── statements: │ │ │ │ │ @ StatementsNode (location: (28,6)-(28,8)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ IntegerNode (location: (28,6)-(28,8)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 42 │ │ │ │ └── closing_loc: (28,8)-(28,9) = "}" │ │ │ └── @ StringNode (location: (28,9)-(29,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (28,9)-(29,0) = "\n" │ │ │ ├── closing_loc: ∅ @@ -238,7 +267,7 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (30,0)-(30,3) = "end" ├── @ CallNode (location: (31,0)-(31,15)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -253,15 +282,17 @@ │ │ ├── opening_loc: (31,4)-(31,14) = "<<-HEREDOC" │ │ ├── parts: (length: 3) │ │ │ ├── @ StringNode (location: (32,0)-(32,2)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (32,0)-(32,2) = " " │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: " " │ │ │ ├── @ EmbeddedStatementsNode (location: (32,2)-(32,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── opening_loc: (32,2)-(32,4) = "\#{" │ │ │ │ ├── statements: │ │ │ │ │ @ StatementsNode (location: (32,4)-(32,7)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ CallNode (location: (32,4)-(32,7)) │ │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -275,7 +306,7 @@ │ │ │ │ │ └── block: ∅ │ │ │ │ └── closing_loc: (32,7)-(32,8) = "}" │ │ │ └── @ StringNode (location: (32,8)-(33,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (32,8)-(33,0) = "\n" │ │ │ ├── closing_loc: ∅ @@ -284,7 +315,7 @@ │ ├── closing_loc: (31,14)-(31,15) = ")" │ └── block: ∅ └── @ CallNode (location: (34,0)-(37,1)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :foo @@ -299,15 +330,17 @@ │ ├── opening_loc: (34,4)-(34,14) = "<<-HEREDOC" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (35,0)-(35,2)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (35,0)-(35,2) = " " │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: " " │ │ ├── @ EmbeddedStatementsNode (location: (35,2)-(35,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (35,2)-(35,4) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (35,4)-(35,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (35,4)-(35,7)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -321,7 +354,7 @@ │ │ │ │ └── block: ∅ │ │ │ └── closing_loc: (35,7)-(35,8) = "}" │ │ └── @ StringNode (location: (35,8)-(36,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (35,8)-(36,0) = "\n" │ │ ├── closing_loc: ∅ @@ -330,11 +363,14 @@ ├── closing_loc: (34,14)-(34,15) = ")" └── block: @ BlockNode (location: (34,16)-(37,1)) + ├── flags: ∅ ├── locals: [:x] ├── parameters: │ @ BlockParametersNode (location: (34,18)-(34,21)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (34,19)-(34,20)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (34,19)-(34,20)) │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/empty.txt b/test/prism/snapshots/unparser/corpus/literal/empty.txt index 3a21ce5559c..5756285aaf2 100644 --- a/test/prism/snapshots/unparser/corpus/literal/empty.txt +++ b/test/prism/snapshots/unparser/corpus/literal/empty.txt @@ -1,5 +1,7 @@ @ ProgramNode (location: (1,0)-(1,0)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,0)) + ├── flags: ∅ └── body: (length: 0) diff --git a/test/prism/snapshots/unparser/corpus/literal/empty_begin.txt b/test/prism/snapshots/unparser/corpus/literal/empty_begin.txt index 838b4bf6f04..25dc0b26a21 100644 --- a/test/prism/snapshots/unparser/corpus/literal/empty_begin.txt +++ b/test/prism/snapshots/unparser/corpus/literal/empty_begin.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(1,2)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,2)) + ├── flags: ∅ └── body: (length: 1) └── @ ParenthesesNode (location: (1,0)-(1,2)) + ├── flags: newline ├── body: ∅ ├── opening_loc: (1,0)-(1,1) = "(" └── closing_loc: (1,1)-(1,2) = ")" diff --git a/test/prism/snapshots/unparser/corpus/literal/flipflop.txt b/test/prism/snapshots/unparser/corpus/literal/flipflop.txt index 2d9f669e6f1..4c21f6c305d 100644 --- a/test/prism/snapshots/unparser/corpus/literal/flipflop.txt +++ b/test/prism/snapshots/unparser/corpus/literal/flipflop.txt @@ -1,24 +1,31 @@ @ ProgramNode (location: (1,0)-(10,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(10,3)) + ├── flags: ∅ └── body: (length: 4) ├── @ IfNode (location: (1,0)-(3,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (1,0)-(1,2) = "if" │ ├── predicate: │ │ @ ParenthesesNode (location: (1,3)-(1,23)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (1,4)-(1,22)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ FlipFlopNode (location: (1,4)-(1,22)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── left: │ │ │ │ @ ParenthesesNode (location: (1,4)-(1,12)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (1,5)-(1,11)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ CallNode (location: (1,5)-(1,11)) - │ │ │ │ │ ├── flags: ∅ + │ │ │ │ │ ├── flags: newline │ │ │ │ │ ├── receiver: │ │ │ │ │ │ @ CallNode (location: (1,5)-(1,6)) │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -39,7 +46,7 @@ │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── arguments: (length: 1) │ │ │ │ │ │ └── @ IntegerNode (location: (1,10)-(1,11)) - │ │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ │ └── value: 4 │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── block: ∅ @@ -47,11 +54,13 @@ │ │ │ │ └── closing_loc: (1,11)-(1,12) = ")" │ │ │ ├── right: │ │ │ │ @ ParenthesesNode (location: (1,14)-(1,22)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (1,15)-(1,21)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ CallNode (location: (1,15)-(1,21)) - │ │ │ │ │ ├── flags: ∅ + │ │ │ │ │ ├── flags: newline │ │ │ │ │ ├── receiver: │ │ │ │ │ │ @ CallNode (location: (1,15)-(1,16)) │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -72,7 +81,7 @@ │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── arguments: (length: 1) │ │ │ │ │ │ └── @ IntegerNode (location: (1,20)-(1,21)) - │ │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ │ └── value: 4 │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── block: ∅ @@ -84,9 +93,10 @@ │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (2,2)-(2,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (2,2)-(2,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo @@ -98,21 +108,26 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" ├── @ IfNode (location: (4,0)-(6,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (4,0)-(4,2) = "if" │ ├── predicate: │ │ @ ParenthesesNode (location: (4,3)-(4,24)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (4,4)-(4,23)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ FlipFlopNode (location: (4,4)-(4,23)) - │ │ │ ├── flags: exclude_end + │ │ │ ├── flags: newline, exclude_end │ │ │ ├── left: │ │ │ │ @ ParenthesesNode (location: (4,4)-(4,12)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (4,5)-(4,11)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ CallNode (location: (4,5)-(4,11)) - │ │ │ │ │ ├── flags: ∅ + │ │ │ │ │ ├── flags: newline │ │ │ │ │ ├── receiver: │ │ │ │ │ │ @ CallNode (location: (4,5)-(4,6)) │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -133,7 +148,7 @@ │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── arguments: (length: 1) │ │ │ │ │ │ └── @ IntegerNode (location: (4,10)-(4,11)) - │ │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ │ └── value: 4 │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── block: ∅ @@ -141,11 +156,13 @@ │ │ │ │ └── closing_loc: (4,11)-(4,12) = ")" │ │ │ ├── right: │ │ │ │ @ ParenthesesNode (location: (4,15)-(4,23)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (4,16)-(4,22)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ CallNode (location: (4,16)-(4,22)) - │ │ │ │ │ ├── flags: ∅ + │ │ │ │ │ ├── flags: newline │ │ │ │ │ ├── receiver: │ │ │ │ │ │ @ CallNode (location: (4,16)-(4,17)) │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -166,7 +183,7 @@ │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── arguments: (length: 1) │ │ │ │ │ │ └── @ IntegerNode (location: (4,21)-(4,22)) - │ │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ │ └── value: 4 │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── block: ∅ @@ -178,9 +195,10 @@ │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (5,2)-(5,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (5,2)-(5,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo @@ -192,6 +210,7 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (6,0)-(6,3) = "end" ├── @ IfNode (location: (7,0)-(8,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (7,0)-(7,2) = "if" │ ├── predicate: │ │ @ FlipFlopNode (location: (7,3)-(7,8)) @@ -214,6 +233,7 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (8,0)-(8,3) = "end" └── @ IfNode (location: (9,0)-(10,3)) + ├── flags: newline ├── if_keyword_loc: (9,0)-(9,2) = "if" ├── predicate: │ @ FlipFlopNode (location: (9,3)-(9,8)) diff --git a/test/prism/snapshots/unparser/corpus/literal/for.txt b/test/prism/snapshots/unparser/corpus/literal/for.txt index 660c6b73f3f..a1722a8a099 100644 --- a/test/prism/snapshots/unparser/corpus/literal/for.txt +++ b/test/prism/snapshots/unparser/corpus/literal/for.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(12,3)) +├── flags: ∅ ├── locals: [:a, :b] └── statements: @ StatementsNode (location: (1,0)-(12,3)) + ├── flags: ∅ └── body: (length: 4) ├── @ CallNode (location: (1,0)-(3,4)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar @@ -15,8 +17,10 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ForNode (location: (1,4)-(3,3)) + │ │ ├── flags: ∅ │ │ ├── index: │ │ │ @ LocalVariableTargetNode (location: (1,8)-(1,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ ├── collection: @@ -32,9 +36,10 @@ │ │ │ └── block: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (2,2)-(2,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (2,2)-(2,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :baz @@ -50,8 +55,10 @@ │ ├── closing_loc: (3,3)-(3,4) = ")" │ └── block: ∅ ├── @ ForNode (location: (4,0)-(6,3)) + │ ├── flags: newline │ ├── index: │ │ @ LocalVariableTargetNode (location: (4,4)-(4,5)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── collection: @@ -67,9 +74,10 @@ │ │ └── block: ∅ │ ├── statements: │ │ @ StatementsNode (location: (5,2)-(5,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (5,2)-(5,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :baz @@ -83,17 +91,22 @@ │ ├── do_keyword_loc: (4,13)-(4,15) = "do" │ └── end_keyword_loc: (6,0)-(6,3) = "end" ├── @ ForNode (location: (7,0)-(9,3)) + │ ├── flags: newline │ ├── index: │ │ @ MultiTargetNode (location: (7,4)-(7,11)) + │ │ ├── flags: ∅ │ │ ├── lefts: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (7,5)-(7,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ ├── rest: │ │ │ @ SplatNode (location: (7,8)-(7,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (7,8)-(7,9) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableTargetNode (location: (7,9)-(7,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :b │ │ │ └── depth: 0 │ │ ├── rights: (length: 0) @@ -112,9 +125,10 @@ │ │ └── block: ∅ │ ├── statements: │ │ @ StatementsNode (location: (8,2)-(8,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (8,2)-(8,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :baz @@ -128,13 +142,17 @@ │ ├── do_keyword_loc: (7,19)-(7,21) = "do" │ └── end_keyword_loc: (9,0)-(9,3) = "end" └── @ ForNode (location: (10,0)-(12,3)) + ├── flags: newline ├── index: │ @ MultiTargetNode (location: (10,4)-(10,10)) + │ ├── flags: ∅ │ ├── lefts: (length: 2) │ │ ├── @ LocalVariableTargetNode (location: (10,5)-(10,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ └── @ LocalVariableTargetNode (location: (10,8)-(10,9)) + │ │ ├── flags: ∅ │ │ ├── name: :b │ │ └── depth: 0 │ ├── rest: ∅ @@ -154,9 +172,10 @@ │ └── block: ∅ ├── statements: │ @ StatementsNode (location: (11,2)-(11,5)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (11,2)-(11,5)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :baz diff --git a/test/prism/snapshots/unparser/corpus/literal/hookexe.txt b/test/prism/snapshots/unparser/corpus/literal/hookexe.txt index dabedbc5885..bbcb8fee1b0 100644 --- a/test/prism/snapshots/unparser/corpus/literal/hookexe.txt +++ b/test/prism/snapshots/unparser/corpus/literal/hookexe.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(7,1)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(7,1)) + ├── flags: ∅ └── body: (length: 3) ├── @ PreExecutionNode (location: (1,0)-(3,1)) + │ ├── flags: newline │ ├── statements: │ │ @ StatementsNode (location: (2,2)-(2,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (2,2)-(2,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo @@ -21,7 +25,7 @@ │ ├── opening_loc: (1,6)-(1,7) = "{" │ └── closing_loc: (3,0)-(3,1) = "}" ├── @ CallNode (location: (4,0)-(4,3)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar @@ -31,11 +35,13 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ PostExecutionNode (location: (5,0)-(7,1)) + ├── flags: newline ├── statements: │ @ StatementsNode (location: (6,2)-(6,5)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (6,2)-(6,5)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :baz diff --git a/test/prism/snapshots/unparser/corpus/literal/if.txt b/test/prism/snapshots/unparser/corpus/literal/if.txt index 00eeba179c6..f4a18c0c120 100644 --- a/test/prism/snapshots/unparser/corpus/literal/if.txt +++ b/test/prism/snapshots/unparser/corpus/literal/if.txt @@ -1,13 +1,16 @@ @ ProgramNode (location: (1,0)-(36,3)) +├── flags: ∅ ├── locals: [:foo, :pair] └── statements: @ StatementsNode (location: (1,0)-(36,3)) + ├── flags: ∅ └── body: (length: 10) ├── @ IfNode (location: (1,0)-(3,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (1,0)-(1,2) = "if" │ ├── predicate: │ │ @ MatchLastLineNode (location: (1,3)-(1,8)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,3)-(1,4) = "/" │ │ ├── content_loc: (1,4)-(1,7) = "foo" │ │ ├── closing_loc: (1,7)-(1,8) = "/" @@ -15,9 +18,10 @@ │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (2,2)-(2,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (2,2)-(2,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -29,73 +33,85 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" ├── @ IfNode (location: (4,0)-(6,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (4,0)-(4,2) = "if" │ ├── predicate: │ │ @ IntegerNode (location: (4,3)-(4,4)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (5,2)-(5,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (5,2)-(5,3)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 9 │ ├── consequent: ∅ │ └── end_keyword_loc: (6,0)-(6,3) = "end" ├── @ IfNode (location: (7,0)-(11,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (7,0)-(7,2) = "if" │ ├── predicate: │ │ @ IntegerNode (location: (7,3)-(7,4)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 4 │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (8,2)-(8,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (8,2)-(8,3)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 5 │ ├── consequent: │ │ @ ElseNode (location: (9,0)-(11,3)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (9,0)-(9,4) = "else" │ │ ├── statements: │ │ │ @ StatementsNode (location: (10,2)-(10,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ IntegerNode (location: (10,2)-(10,3)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: newline, static_literal, decimal │ │ │ └── value: 6 │ │ └── end_keyword_loc: (11,0)-(11,3) = "end" │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ UnlessNode (location: (12,0)-(14,3)) + │ ├── flags: newline │ ├── keyword_loc: (12,0)-(12,6) = "unless" │ ├── predicate: │ │ @ IntegerNode (location: (12,7)-(12,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (13,2)-(13,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (13,2)-(13,5)) + │ │ └── flags: newline, static_literal │ ├── consequent: ∅ │ └── end_keyword_loc: (14,0)-(14,3) = "end" ├── @ UnlessNode (location: (15,0)-(17,3)) + │ ├── flags: newline │ ├── keyword_loc: (15,0)-(15,6) = "unless" │ ├── predicate: │ │ @ IntegerNode (location: (15,7)-(15,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 3 │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (16,2)-(16,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (16,2)-(16,3)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 9 │ ├── consequent: ∅ │ └── end_keyword_loc: (17,0)-(17,3) = "end" ├── @ IfNode (location: (18,0)-(19,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (18,0)-(18,2) = "if" │ ├── predicate: │ │ @ CallNode (location: (18,3)-(18,6)) @@ -113,25 +129,32 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (19,0)-(19,3) = "end" ├── @ ModuleNode (location: (21,0)-(23,3)) + │ ├── flags: newline │ ├── locals: [:foo] │ ├── module_keyword_loc: (21,0)-(21,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (21,7)-(21,8)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── body: │ │ @ StatementsNode (location: (22,2)-(22,18)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IfNode (location: (22,2)-(22,18)) + │ │ ├── flags: newline │ │ ├── if_keyword_loc: (22,12)-(22,14) = "if" │ │ ├── predicate: │ │ │ @ LocalVariableReadNode (location: (22,15)-(22,18)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :foo │ │ │ └── depth: 0 │ │ ├── then_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (22,2)-(22,11)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableWriteNode (location: (22,2)-(22,11)) + │ │ │ ├── flags: newline │ │ │ ├── name: :foo │ │ │ ├── depth: 0 │ │ │ ├── name_loc: (22,2)-(22,5) = "foo" @@ -152,25 +175,32 @@ │ ├── end_keyword_loc: (23,0)-(23,3) = "end" │ └── name: :A ├── @ ModuleNode (location: (25,0)-(27,3)) + │ ├── flags: newline │ ├── locals: [:foo] │ ├── module_keyword_loc: (25,0)-(25,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (25,7)-(25,8)) + │ │ ├── flags: ∅ │ │ └── name: :B │ ├── body: │ │ @ StatementsNode (location: (26,2)-(26,22)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ UnlessNode (location: (26,2)-(26,22)) + │ │ ├── flags: newline │ │ ├── keyword_loc: (26,12)-(26,18) = "unless" │ │ ├── predicate: │ │ │ @ LocalVariableReadNode (location: (26,19)-(26,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :foo │ │ │ └── depth: 0 │ │ ├── then_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (26,2)-(26,11)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableWriteNode (location: (26,2)-(26,11)) + │ │ │ ├── flags: newline │ │ │ ├── name: :foo │ │ │ ├── depth: 0 │ │ │ ├── name_loc: (26,2)-(26,5) = "foo" @@ -191,6 +221,7 @@ │ ├── end_keyword_loc: (27,0)-(27,3) = "end" │ └── name: :B ├── @ UnlessNode (location: (28,0)-(30,3)) + │ ├── flags: newline │ ├── keyword_loc: (28,0)-(28,6) = "unless" │ ├── predicate: │ │ @ CallNode (location: (28,7)-(28,10)) @@ -206,8 +237,10 @@ │ ├── then_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (29,2)-(29,11)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableWriteNode (location: (29,2)-(29,11)) + │ │ ├── flags: newline │ │ ├── name: :foo │ │ ├── depth: 0 │ │ ├── name_loc: (29,2)-(29,5) = "foo" @@ -226,6 +259,7 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (30,0)-(30,3) = "end" └── @ IfNode (location: (31,0)-(36,3)) + ├── flags: newline ├── if_keyword_loc: (31,0)-(31,2) = "if" ├── predicate: │ @ CallNode (location: (31,3)-(33,1)) @@ -239,11 +273,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (31,7)-(33,1)) + │ ├── flags: ∅ │ ├── locals: [:pair] │ ├── parameters: │ │ @ BlockParametersNode (location: (31,9)-(31,15)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (31,10)-(31,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (31,10)-(31,14)) │ │ │ │ ├── flags: ∅ @@ -259,8 +296,10 @@ │ │ └── closing_loc: (31,14)-(31,15) = "|" │ ├── body: │ │ @ StatementsNode (location: (32,2)-(32,6)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (32,2)-(32,6)) + │ │ ├── flags: newline │ │ ├── name: :pair │ │ └── depth: 0 │ ├── opening_loc: (31,7)-(31,8) = "{" @@ -268,20 +307,23 @@ ├── then_keyword_loc: ∅ ├── statements: │ @ StatementsNode (location: (34,2)-(35,5)) + │ ├── flags: ∅ │ └── body: (length: 2) │ ├── @ LocalVariableWriteNode (location: (34,2)-(34,13)) + │ │ ├── flags: newline │ │ ├── name: :pair │ │ ├── depth: 0 │ │ ├── name_loc: (34,2)-(34,6) = "pair" │ │ ├── value: │ │ │ @ SymbolNode (location: (34,9)-(34,13)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (34,9)-(34,10) = ":" │ │ │ ├── value_loc: (34,10)-(34,13) = "foo" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "foo" │ │ └── operator_loc: (34,7)-(34,8) = "=" │ └── @ LocalVariableReadNode (location: (35,2)-(35,5)) + │ ├── flags: newline │ ├── name: :foo │ └── depth: 0 ├── consequent: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/kwbegin.txt b/test/prism/snapshots/unparser/corpus/literal/kwbegin.txt index 48e53af00e4..068e20ad989 100644 --- a/test/prism/snapshots/unparser/corpus/literal/kwbegin.txt +++ b/test/prism/snapshots/unparser/corpus/literal/kwbegin.txt @@ -1,13 +1,17 @@ @ ProgramNode (location: (1,0)-(80,3)) +├── flags: ∅ ├── locals: [:foo, :bar, :exception] └── statements: @ StatementsNode (location: (1,0)-(80,3)) + ├── flags: ∅ └── body: (length: 14) ├── @ BeginNode (location: (1,0)-(3,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (1,0)-(1,5) = "begin" │ ├── statements: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (2,0)-(2,6)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (2,0)-(2,6) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ @@ -18,23 +22,27 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" ├── @ BeginNode (location: (5,0)-(7,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (5,0)-(5,5) = "begin" │ ├── statements: ∅ │ ├── rescue_clause: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (6,0)-(7,3)) + │ │ ├── flags: ∅ │ │ ├── ensure_keyword_loc: (6,0)-(6,6) = "ensure" │ │ ├── statements: ∅ │ │ └── end_keyword_loc: (7,0)-(7,3) = "end" │ └── end_keyword_loc: (7,0)-(7,3) = "end" ├── @ BeginNode (location: (9,0)-(11,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (9,0)-(9,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (10,2)-(10,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (10,2)-(10,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -48,12 +56,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ BeginNode (location: (13,0)-(17,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (13,0)-(13,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (14,2)-(14,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (14,2)-(14,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -64,15 +74,17 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (15,0)-(16,3)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (15,0)-(15,6) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (16,2)-(16,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (16,2)-(16,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -86,12 +98,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (17,0)-(17,3) = "end" ├── @ BeginNode (location: (19,0)-(24,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (19,0)-(19,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (20,2)-(21,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 2) │ │ ├── @ CallNode (location: (20,2)-(20,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :a @@ -101,7 +115,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ CallNode (location: (21,2)-(21,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :b @@ -112,15 +126,17 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (22,0)-(23,3)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (22,0)-(22,6) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (23,2)-(23,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (23,2)-(23,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -134,13 +150,16 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (24,0)-(24,3) = "end" ├── @ BeginNode (location: (26,0)-(28,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (26,0)-(26,5) = "begin" │ ├── statements: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (27,0)-(27,8)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (27,0)-(27,6) = "rescue" │ │ ├── exceptions: (length: 1) │ │ │ └── @ ConstantReadNode (location: (27,7)-(27,8)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ @@ -150,17 +169,21 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (28,0)-(28,3) = "end" ├── @ BeginNode (location: (30,0)-(32,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (30,0)-(30,5) = "begin" │ ├── statements: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (31,0)-(31,15)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (31,0)-(31,6) = "rescue" │ │ ├── exceptions: (length: 1) │ │ │ └── @ ConstantReadNode (location: (31,7)-(31,8)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── operator_loc: (31,9)-(31,11) = "=>" │ │ ├── reference: │ │ │ @ LocalVariableTargetNode (location: (31,12)-(31,15)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :foo │ │ │ └── depth: 0 │ │ ├── statements: ∅ @@ -169,12 +192,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (32,0)-(32,3) = "end" ├── @ BeginNode (location: (34,0)-(42,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (34,0)-(34,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (35,2)-(35,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (35,2)-(35,3)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a @@ -185,17 +210,20 @@ │ │ └── block: ∅ │ ├── rescue_clause: │ │ @ RescueNode (location: (36,0)-(39,3)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (36,0)-(36,6) = "rescue" │ │ ├── exceptions: (length: 1) │ │ │ └── @ ConstantReadNode (location: (36,7)-(36,8)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (37,2)-(37,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (37,2)-(37,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b @@ -206,17 +234,20 @@ │ │ │ └── block: ∅ │ │ └── consequent: │ │ @ RescueNode (location: (38,0)-(39,3)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (38,0)-(38,6) = "rescue" │ │ ├── exceptions: (length: 1) │ │ │ └── @ ConstantReadNode (location: (38,7)-(38,8)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :B │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (39,2)-(39,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (39,2)-(39,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :c @@ -229,12 +260,14 @@ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (40,0)-(42,3)) + │ │ ├── flags: ∅ │ │ ├── ensure_keyword_loc: (40,0)-(40,6) = "ensure" │ │ ├── statements: │ │ │ @ StatementsNode (location: (41,2)-(41,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (41,2)-(41,3)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :d @@ -246,20 +279,25 @@ │ │ └── end_keyword_loc: (42,0)-(42,3) = "end" │ └── end_keyword_loc: (42,0)-(42,3) = "end" ├── @ BeginNode (location: (44,0)-(53,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (44,0)-(44,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (45,2)-(49,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ BeginNode (location: (45,2)-(49,5)) + │ │ ├── flags: newline │ │ ├── begin_keyword_loc: (45,2)-(45,7) = "begin" │ │ ├── statements: │ │ │ @ StatementsNode (location: (46,4)-(47,7)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 2) │ │ │ ├── @ LocalVariableReadNode (location: (46,4)-(46,7)) + │ │ │ │ ├── flags: newline │ │ │ │ ├── name: :foo │ │ │ │ └── depth: 0 │ │ │ └── @ CallNode (location: (47,4)-(47,7)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -270,6 +308,7 @@ │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (48,2)-(48,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (48,2)-(48,8) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ @@ -281,15 +320,17 @@ │ │ └── end_keyword_loc: (49,2)-(49,5) = "end" │ ├── rescue_clause: │ │ @ RescueNode (location: (50,0)-(52,5)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (50,0)-(50,6) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (51,2)-(52,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 2) │ │ │ ├── @ CallNode (location: (51,2)-(51,5)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :baz @@ -299,7 +340,7 @@ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: ∅ │ │ │ └── @ CallNode (location: (52,2)-(52,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -313,11 +354,14 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (53,0)-(53,3) = "end" ├── @ BeginNode (location: (55,0)-(58,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (55,0)-(55,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (56,2)-(56,35)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (56,2)-(56,35)) + │ │ ├── flags: newline │ │ ├── expression: │ │ │ @ CallNode (location: (56,2)-(56,18)) │ │ │ ├── flags: ignore_visibility @@ -331,12 +375,14 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ ConstantReadNode (location: (56,8)-(56,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :Exception │ │ │ ├── closing_loc: (56,17)-(56,18) = ")" │ │ │ └── block: ∅ │ │ ├── keyword_loc: (56,19)-(56,25) = "rescue" │ │ └── rescue_expression: │ │ @ LocalVariableWriteNode (location: (56,26)-(56,35)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ ├── depth: 0 │ │ ├── name_loc: (56,26)-(56,29) = "foo" @@ -354,9 +400,11 @@ │ │ └── operator_loc: (56,30)-(56,31) = "=" │ ├── rescue_clause: │ │ @ RescueNode (location: (57,0)-(57,16)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (57,0)-(57,6) = "rescue" │ │ ├── exceptions: (length: 1) │ │ │ └── @ ConstantReadNode (location: (57,7)-(57,16)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Exception │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ @@ -366,26 +414,33 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (58,0)-(58,3) = "end" ├── @ BeginNode (location: (60,0)-(64,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (60,0)-(60,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (61,2)-(61,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (61,2)-(61,5)) + │ │ ├── flags: newline │ │ ├── name: :foo │ │ └── depth: 0 │ ├── rescue_clause: │ │ @ RescueNode (location: (62,0)-(63,5)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (62,0)-(62,6) = "rescue" │ │ ├── exceptions: (length: 0) │ │ ├── operator_loc: (62,7)-(62,9) = "=>" │ │ ├── reference: │ │ │ @ LocalVariableTargetNode (location: (62,10)-(62,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── statements: │ │ │ @ StatementsNode (location: (63,2)-(63,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (63,2)-(63,5)) + │ │ │ ├── flags: newline │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ └── consequent: ∅ @@ -393,30 +448,39 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (64,0)-(64,3) = "end" ├── @ BeginNode (location: (66,0)-(70,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (66,0)-(66,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (67,2)-(67,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (67,2)-(67,5)) + │ │ ├── flags: newline │ │ ├── name: :foo │ │ └── depth: 0 │ ├── rescue_clause: │ │ @ RescueNode (location: (68,0)-(69,5)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (68,0)-(68,6) = "rescue" │ │ ├── exceptions: (length: 2) │ │ │ ├── @ ConstantReadNode (location: (68,7)-(68,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :Exception │ │ │ └── @ ConstantReadNode (location: (68,18)-(68,23)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :Other │ │ ├── operator_loc: (68,24)-(68,26) = "=>" │ │ ├── reference: │ │ │ @ LocalVariableTargetNode (location: (68,27)-(68,30)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── statements: │ │ │ @ StatementsNode (location: (69,2)-(69,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (69,2)-(69,5)) + │ │ │ ├── flags: newline │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ └── consequent: ∅ @@ -424,35 +488,44 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (70,0)-(70,3) = "end" ├── @ BeginNode (location: (72,0)-(76,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (72,0)-(72,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (73,2)-(73,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (73,2)-(73,5)) + │ │ ├── flags: newline │ │ ├── name: :bar │ │ └── depth: 0 │ ├── rescue_clause: │ │ @ RescueNode (location: (74,0)-(75,5)) + │ │ ├── flags: ∅ │ │ ├── keyword_loc: (74,0)-(74,6) = "rescue" │ │ ├── exceptions: (length: 2) │ │ │ ├── @ ConstantReadNode (location: (74,7)-(74,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :SomeError │ │ │ └── @ SplatNode (location: (74,18)-(74,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (74,18)-(74,19) = "*" │ │ │ └── expression: │ │ │ @ LocalVariableReadNode (location: (74,19)-(74,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :bar │ │ │ └── depth: 0 │ │ ├── operator_loc: (74,23)-(74,25) = "=>" │ │ ├── reference: │ │ │ @ LocalVariableTargetNode (location: (74,26)-(74,35)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :exception │ │ │ └── depth: 0 │ │ ├── statements: │ │ │ @ StatementsNode (location: (75,2)-(75,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (75,2)-(75,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :baz @@ -466,20 +539,25 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (76,0)-(76,3) = "end" └── @ SingletonClassNode (location: (78,0)-(80,3)) + ├── flags: newline ├── locals: [] ├── class_keyword_loc: (78,0)-(78,5) = "class" ├── operator_loc: (78,6)-(78,8) = "<<" ├── expression: │ @ SelfNode (location: (78,9)-(78,13)) + │ └── flags: ∅ ├── body: │ @ StatementsNode (location: (79,2)-(79,23)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (79,2)-(79,23)) + │ ├── flags: newline │ ├── expression: │ │ @ UndefNode (location: (79,2)-(79,12)) + │ │ ├── flags: ∅ │ │ ├── names: (length: 1) │ │ │ └── @ SymbolNode (location: (79,8)-(79,12)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (79,8)-(79,9) = ":" │ │ │ ├── value_loc: (79,9)-(79,12) = "bar" │ │ │ ├── closing_loc: ∅ @@ -488,4 +566,5 @@ │ ├── keyword_loc: (79,13)-(79,19) = "rescue" │ └── rescue_expression: │ @ NilNode (location: (79,20)-(79,23)) + │ └── flags: static_literal └── end_keyword_loc: (80,0)-(80,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/lambda.txt b/test/prism/snapshots/unparser/corpus/literal/lambda.txt index 3594787bcab..863678f17b4 100644 --- a/test/prism/snapshots/unparser/corpus/literal/lambda.txt +++ b/test/prism/snapshots/unparser/corpus/literal/lambda.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(13,1)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(13,1)) + ├── flags: ∅ └── body: (length: 6) ├── @ CallNode (location: (1,0)-(2,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :lambda @@ -14,13 +16,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,7)-(2,1)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ │ ├── opening_loc: (1,7)-(1,8) = "{" │ └── closing_loc: (2,0)-(2,1) = "}" ├── @ CallNode (location: (3,0)-(5,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :lambda @@ -30,11 +33,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (3,7)-(5,1)) + │ ├── flags: ∅ │ ├── locals: [:a, :b] │ ├── parameters: │ │ @ BlockParametersNode (location: (3,9)-(3,15)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (3,10)-(3,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 2) │ │ │ │ ├── @ RequiredParameterNode (location: (3,10)-(3,11)) │ │ │ │ │ ├── flags: ∅ @@ -53,33 +59,40 @@ │ │ └── closing_loc: (3,14)-(3,15) = "|" │ ├── body: │ │ @ StatementsNode (location: (4,2)-(4,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (4,2)-(4,3)) + │ │ ├── flags: newline │ │ ├── name: :a │ │ └── depth: 0 │ ├── opening_loc: (3,7)-(3,8) = "{" │ └── closing_loc: (5,0)-(5,1) = "}" ├── @ LambdaNode (location: (6,0)-(7,1)) + │ ├── flags: newline │ ├── locals: [] │ ├── operator_loc: (6,0)-(6,2) = "->" │ ├── opening_loc: (6,5)-(6,6) = "{" │ ├── closing_loc: (7,0)-(7,1) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (6,2)-(6,4)) + │ │ ├── flags: ∅ │ │ ├── parameters: ∅ │ │ ├── locals: (length: 0) │ │ ├── opening_loc: (6,2)-(6,3) = "(" │ │ └── closing_loc: (6,3)-(6,4) = ")" │ └── body: ∅ ├── @ LambdaNode (location: (8,0)-(9,1)) + │ ├── flags: newline │ ├── locals: [:a] │ ├── operator_loc: (8,0)-(8,2) = "->" │ ├── opening_loc: (8,6)-(8,7) = "{" │ ├── closing_loc: (9,0)-(9,1) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (8,2)-(8,5)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (8,3)-(8,4)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (8,3)-(8,4)) │ │ │ │ ├── flags: ∅ @@ -95,14 +108,17 @@ │ │ └── closing_loc: (8,4)-(8,5) = ")" │ └── body: ∅ ├── @ LambdaNode (location: (10,0)-(11,1)) + │ ├── flags: newline │ ├── locals: [:a, :b] │ ├── operator_loc: (10,0)-(10,2) = "->" │ ├── opening_loc: (10,9)-(10,10) = "{" │ ├── closing_loc: (11,0)-(11,1) = "}" │ ├── parameters: │ │ @ BlockParametersNode (location: (10,2)-(10,8)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (10,3)-(10,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 2) │ │ │ │ ├── @ RequiredParameterNode (location: (10,3)-(10,4)) │ │ │ │ │ ├── flags: ∅ @@ -121,14 +137,17 @@ │ │ └── closing_loc: (10,7)-(10,8) = ")" │ └── body: ∅ └── @ LambdaNode (location: (12,0)-(13,1)) + ├── flags: newline ├── locals: [:a, :b, :c] ├── operator_loc: (12,0)-(12,2) = "->" ├── opening_loc: (12,12)-(12,13) = "{" ├── closing_loc: (13,0)-(13,1) = "}" ├── parameters: │ @ BlockParametersNode (location: (12,2)-(12,11)) + │ ├── flags: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (12,3)-(12,7)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 2) │ │ │ ├── @ RequiredParameterNode (location: (12,3)-(12,4)) │ │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/literal.txt b/test/prism/snapshots/unparser/corpus/literal/literal.txt index ddb10456bf0..430a8a06793 100644 --- a/test/prism/snapshots/unparser/corpus/literal/literal.txt +++ b/test/prism/snapshots/unparser/corpus/literal/literal.txt @@ -1,15 +1,19 @@ @ ProgramNode (location: (1,0)-(91,2)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(91,2)) + ├── flags: ∅ └── body: (length: 78) ├── @ HashNode (location: (1,0)-(1,38)) + │ ├── flags: newline │ ├── opening_loc: (1,0)-(1,1) = "{" │ ├── elements: (length: 2) │ │ ├── @ AssocNode (location: (1,2)-(1,21)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ StringNode (location: (1,2)-(1,7)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: (1,2)-(1,3) = "\"" │ │ │ │ ├── content_loc: (1,3)-(1,6) = "foo" │ │ │ │ ├── closing_loc: (1,6)-(1,7) = "\"" @@ -20,17 +24,18 @@ │ │ │ │ ├── opening_loc: (1,11)-(1,21) = "<<-HEREDOC" │ │ │ │ ├── parts: (length: 3) │ │ │ │ │ ├── @ StringNode (location: (2,0)-(2,2)) - │ │ │ │ │ │ ├── flags: frozen + │ │ │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ ├── content_loc: (2,0)-(2,2) = " " │ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ └── unescaped: " " │ │ │ │ │ ├── @ EmbeddedStatementsNode (location: (2,2)-(2,5)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── opening_loc: (2,2)-(2,4) = "\#{" │ │ │ │ │ │ ├── statements: ∅ │ │ │ │ │ │ └── closing_loc: (2,4)-(2,5) = "}" │ │ │ │ │ └── @ StringNode (location: (2,5)-(3,0)) - │ │ │ │ │ ├── flags: frozen + │ │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── content_loc: (2,5)-(3,0) = "\n" │ │ │ │ │ ├── closing_loc: ∅ @@ -38,16 +43,17 @@ │ │ │ │ └── closing_loc: (3,0)-(4,0) = "HEREDOC\n" │ │ │ └── operator_loc: (1,8)-(1,10) = "=>" │ │ └── @ AssocNode (location: (1,23)-(1,36)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ StringNode (location: (1,23)-(1,28)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: (1,23)-(1,24) = "\"" │ │ │ ├── content_loc: (1,24)-(1,27) = "bar" │ │ │ ├── closing_loc: (1,27)-(1,28) = "\"" │ │ │ └── unescaped: "bar" │ │ ├── value: │ │ │ @ SymbolNode (location: (1,32)-(1,36)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (1,32)-(1,33) = ":" │ │ │ ├── value_loc: (1,33)-(1,36) = "baz" │ │ │ ├── closing_loc: ∅ @@ -55,12 +61,14 @@ │ │ └── operator_loc: (1,29)-(1,31) = "=>" │ └── closing_loc: (1,37)-(1,38) = "}" ├── @ HashNode (location: (4,0)-(4,31)) + │ ├── flags: newline │ ├── opening_loc: (4,0)-(4,1) = "{" │ ├── elements: (length: 2) │ │ ├── @ AssocNode (location: (4,2)-(4,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ StringNode (location: (4,2)-(4,7)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: (4,2)-(4,3) = "\"" │ │ │ │ ├── content_loc: (4,3)-(4,6) = "foo" │ │ │ │ ├── closing_loc: (4,6)-(4,7) = "\"" @@ -74,16 +82,17 @@ │ │ │ │ └── unescaped: "" │ │ │ └── operator_loc: (4,8)-(4,10) = "=>" │ │ └── @ AssocNode (location: (4,16)-(4,29)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ StringNode (location: (4,16)-(4,21)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: (4,16)-(4,17) = "\"" │ │ │ ├── content_loc: (4,17)-(4,20) = "bar" │ │ │ ├── closing_loc: (4,20)-(4,21) = "\"" │ │ │ └── unescaped: "bar" │ │ ├── value: │ │ │ @ SymbolNode (location: (4,25)-(4,29)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (4,25)-(4,26) = ":" │ │ │ ├── value_loc: (4,26)-(4,29) = "baz" │ │ │ ├── closing_loc: ∅ @@ -91,7 +100,7 @@ │ │ └── operator_loc: (4,22)-(4,24) = "=>" │ └── closing_loc: (4,30)-(4,31) = "}" ├── @ ArrayNode (location: (5,0)-(5,12)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 2) │ │ ├── @ StringNode (location: (5,1)-(5,6)) │ │ │ ├── flags: ∅ @@ -108,7 +117,7 @@ │ ├── opening_loc: (5,0)-(5,1) = "[" │ └── closing_loc: (5,11)-(5,12) = "]" ├── @ CallNode (location: (6,0)-(6,15)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (6,0)-(6,13)) │ │ ├── flags: ignore_visibility @@ -126,17 +135,18 @@ │ │ │ ├── opening_loc: (6,2)-(6,12) = "<<-HEREDOC" │ │ │ ├── parts: (length: 3) │ │ │ │ ├── @ StringNode (location: (7,0)-(7,2)) - │ │ │ │ │ ├── flags: frozen + │ │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── content_loc: (7,0)-(7,2) = " " │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ └── unescaped: " " │ │ │ │ ├── @ EmbeddedStatementsNode (location: (7,2)-(7,5)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── opening_loc: (7,2)-(7,4) = "\#{" │ │ │ │ │ ├── statements: ∅ │ │ │ │ │ └── closing_loc: (7,4)-(7,5) = "}" │ │ │ │ └── @ StringNode (location: (7,5)-(8,0)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (7,5)-(8,0) = "\n" │ │ │ │ ├── closing_loc: ∅ @@ -152,7 +162,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (9,0)-(9,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (9,0)-(9,6)) │ │ ├── flags: ignore_visibility @@ -181,12 +191,14 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ HashNode (location: (10,0)-(10,30)) + │ ├── flags: newline │ ├── opening_loc: (10,0)-(10,1) = "{" │ ├── elements: (length: 2) │ │ ├── @ AssocNode (location: (10,2)-(10,21)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ StringNode (location: (10,2)-(10,7)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: (10,2)-(10,3) = "\"" │ │ │ │ ├── content_loc: (10,3)-(10,6) = "foo" │ │ │ │ ├── closing_loc: (10,6)-(10,7) = "\"" @@ -197,17 +209,18 @@ │ │ │ │ ├── opening_loc: (10,11)-(10,21) = "<<-HEREDOC" │ │ │ │ ├── parts: (length: 3) │ │ │ │ │ ├── @ StringNode (location: (11,0)-(11,2)) - │ │ │ │ │ │ ├── flags: frozen + │ │ │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ ├── content_loc: (11,0)-(11,2) = " " │ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ └── unescaped: " " │ │ │ │ │ ├── @ EmbeddedStatementsNode (location: (11,2)-(11,5)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── opening_loc: (11,2)-(11,4) = "\#{" │ │ │ │ │ │ ├── statements: ∅ │ │ │ │ │ │ └── closing_loc: (11,4)-(11,5) = "}" │ │ │ │ │ └── @ StringNode (location: (11,5)-(12,0)) - │ │ │ │ │ ├── flags: frozen + │ │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── content_loc: (11,5)-(12,0) = "\n" │ │ │ │ │ ├── closing_loc: ∅ @@ -215,6 +228,7 @@ │ │ │ │ └── closing_loc: (12,0)-(13,0) = "HEREDOC\n" │ │ │ └── operator_loc: (10,8)-(10,10) = "=>" │ │ └── @ AssocSplatNode (location: (10,23)-(10,28)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (10,25)-(10,28)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -229,12 +243,14 @@ │ │ └── operator_loc: (10,23)-(10,25) = "**" │ └── closing_loc: (10,29)-(10,30) = "}" ├── @ HashNode (location: (13,0)-(13,23)) + │ ├── flags: newline │ ├── opening_loc: (13,0)-(13,1) = "{" │ ├── elements: (length: 2) │ │ ├── @ AssocNode (location: (13,2)-(13,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ StringNode (location: (13,2)-(13,7)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: (13,2)-(13,3) = "\"" │ │ │ │ ├── content_loc: (13,3)-(13,6) = "foo" │ │ │ │ ├── closing_loc: (13,6)-(13,7) = "\"" @@ -248,6 +264,7 @@ │ │ │ │ └── unescaped: "" │ │ │ └── operator_loc: (13,8)-(13,10) = "=>" │ │ └── @ AssocSplatNode (location: (13,16)-(13,21)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (13,18)-(13,21)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -262,45 +279,51 @@ │ │ └── operator_loc: (13,16)-(13,18) = "**" │ └── closing_loc: (13,22)-(13,23) = "}" ├── @ InterpolatedStringNode (location: (14,0)-(14,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (14,0)-(14,1) = "\"" │ ├── parts: (length: 5) │ │ ├── @ EmbeddedVariableNode (location: (14,1)-(14,4)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (14,1)-(14,2) = "#" │ │ │ └── variable: │ │ │ @ InstanceVariableReadNode (location: (14,2)-(14,4)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :@a │ │ ├── @ StringNode (location: (14,4)-(14,5)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (14,4)-(14,5) = " " │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: " " │ │ ├── @ EmbeddedVariableNode (location: (14,5)-(14,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (14,5)-(14,6) = "#" │ │ │ └── variable: │ │ │ @ ClassVariableReadNode (location: (14,6)-(14,9)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :@@a │ │ ├── @ StringNode (location: (14,9)-(14,10)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (14,9)-(14,10) = " " │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: " " │ │ └── @ EmbeddedVariableNode (location: (14,10)-(14,13)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (14,10)-(14,11) = "#" │ │ └── variable: │ │ @ GlobalVariableReadNode (location: (14,11)-(14,13)) + │ │ ├── flags: ∅ │ │ └── name: :$a │ └── closing_loc: (14,13)-(14,14) = "\"" ├── @ IntegerNode (location: (15,0)-(15,1)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 0 ├── @ CallNode (location: (16,0)-(16,3)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (16,1)-(16,3)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: ∅ │ ├── name: :+@ @@ -310,83 +333,93 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ IntegerNode (location: (17,0)-(17,1)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 1 ├── @ IntegerNode (location: (18,0)-(18,1)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 1 ├── @ RationalNode (location: (19,0)-(19,2)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ ├── numerator: 1 │ └── denominator: 1 ├── @ RationalNode (location: (20,0)-(20,4)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ ├── numerator: 3 │ └── denominator: 2 ├── @ RationalNode (location: (21,0)-(21,4)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ ├── numerator: 13 │ └── denominator: 10 ├── @ ImaginaryNode (location: (22,0)-(22,2)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ IntegerNode (location: (22,0)-(22,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 5 ├── @ ImaginaryNode (location: (23,0)-(23,3)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ IntegerNode (location: (23,0)-(23,2)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: -5 ├── @ ImaginaryNode (location: (24,0)-(24,4)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ FloatNode (location: (24,0)-(24,3)) + │ ├── flags: static_literal │ └── value: 0.6 ├── @ ImaginaryNode (location: (25,0)-(25,5)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ FloatNode (location: (25,0)-(25,4)) + │ ├── flags: static_literal │ └── value: -0.6 ├── @ ImaginaryNode (location: (26,0)-(26,32)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ IntegerNode (location: (26,0)-(26,31)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1000000000000000000000000000000 ├── @ ImaginaryNode (location: (27,0)-(27,3)) + │ ├── flags: newline, static_literal │ └── numeric: │ @ RationalNode (location: (27,0)-(27,2)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ ├── numerator: 1 │ └── denominator: 1 ├── @ InterpolatedStringNode (location: (28,0)-(28,11)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: ∅ │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (28,0)-(28,5)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: (28,0)-(28,1) = "\"" │ │ │ ├── content_loc: (28,1)-(28,4) = "foo" │ │ │ ├── closing_loc: (28,4)-(28,5) = "\"" │ │ │ └── unescaped: "foo" │ │ └── @ StringNode (location: (28,6)-(28,11)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: (28,6)-(28,7) = "\"" │ │ ├── content_loc: (28,7)-(28,10) = "bar" │ │ ├── closing_loc: (28,10)-(28,11) = "\"" │ │ └── unescaped: "bar" │ └── closing_loc: ∅ ├── @ InterpolatedStringNode (location: (29,0)-(29,15)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (29,0)-(29,1) = "\"" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (29,1)-(29,8)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (29,1)-(29,8) = "foobar " │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "foobar " │ │ └── @ EmbeddedStatementsNode (location: (29,8)-(29,14)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (29,8)-(29,10) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (29,10)-(29,13)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (29,10)-(29,13)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -401,239 +434,256 @@ │ │ └── closing_loc: (29,13)-(29,14) = "}" │ └── closing_loc: (29,14)-(29,15) = "\"" ├── @ InterpolatedStringNode (location: (30,0)-(30,12)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (30,0)-(30,1) = "\"" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (30,1)-(30,4)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (30,1)-(30,4) = "foo" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "foo" │ │ ├── @ EmbeddedStatementsNode (location: (30,4)-(30,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (30,4)-(30,6) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (30,6)-(30,7)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (30,6)-(30,7)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── closing_loc: (30,7)-(30,8) = "}" │ │ └── @ StringNode (location: (30,8)-(30,11)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (30,8)-(30,11) = "bar" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "bar" │ └── closing_loc: (30,11)-(30,12) = "\"" ├── @ InterpolatedStringNode (location: (31,0)-(31,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (31,0)-(31,1) = "\"" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (31,1)-(31,5)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (31,1)-(31,5) = "\\\\\\\\" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\\\\" │ │ └── @ EmbeddedStatementsNode (location: (31,5)-(31,8)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (31,5)-(31,7) = "\#{" │ │ ├── statements: ∅ │ │ └── closing_loc: (31,7)-(31,8) = "}" │ └── closing_loc: (31,8)-(31,9) = "\"" ├── @ InterpolatedStringNode (location: (32,0)-(32,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (32,0)-(32,1) = "\"" │ ├── parts: (length: 2) │ │ ├── @ EmbeddedStatementsNode (location: (32,1)-(32,4)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (32,1)-(32,3) = "\#{" │ │ │ ├── statements: ∅ │ │ │ └── closing_loc: (32,3)-(32,4) = "}" │ │ └── @ StringNode (location: (32,4)-(32,8)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (32,4)-(32,8) = "\\\#{}" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "\#{}" │ └── closing_loc: (32,8)-(32,9) = "\"" ├── @ InterpolatedStringNode (location: (33,0)-(33,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (33,0)-(33,1) = "\"" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (33,1)-(33,5)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (33,1)-(33,5) = "\\\#{}" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\#{}" │ │ └── @ EmbeddedStatementsNode (location: (33,5)-(33,8)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (33,5)-(33,7) = "\#{" │ │ ├── statements: ∅ │ │ └── closing_loc: (33,7)-(33,8) = "}" │ └── closing_loc: (33,8)-(33,9) = "\"" ├── @ StringNode (location: (34,0)-(34,15)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (34,0)-(34,1) = "\"" │ ├── content_loc: (34,1)-(34,14) = "foo\\\\\\\#{@bar}" │ ├── closing_loc: (34,14)-(34,15) = "\"" │ └── unescaped: "foo\\\#{@bar}" ├── @ StringNode (location: (35,0)-(35,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (35,0)-(35,1) = "\"" │ ├── content_loc: (35,1)-(35,3) = "\\\"" │ ├── closing_loc: (35,3)-(35,4) = "\"" │ └── unescaped: "\"" ├── @ StringNode (location: (36,0)-(36,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (36,0)-(36,1) = "\"" │ ├── content_loc: (36,1)-(36,8) = "foo bar" │ ├── closing_loc: (36,8)-(36,9) = "\"" │ └── unescaped: "foo bar" ├── @ StringNode (location: (37,0)-(37,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (37,0)-(37,1) = "\"" │ ├── content_loc: (37,1)-(37,9) = "foo\\nbar" │ ├── closing_loc: (37,9)-(37,10) = "\"" │ └── unescaped: "foo\nbar" ├── @ XStringNode (location: (38,0)-(38,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (38,0)-(38,1) = "`" │ ├── content_loc: (38,1)-(38,4) = "foo" │ ├── closing_loc: (38,4)-(38,5) = "`" │ └── unescaped: "foo" ├── @ InterpolatedXStringNode (location: (39,0)-(39,12)) + │ ├── flags: newline │ ├── opening_loc: (39,0)-(39,1) = "`" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (39,1)-(39,4)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (39,1)-(39,4) = "foo" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "foo" │ │ └── @ EmbeddedStatementsNode (location: (39,4)-(39,11)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (39,4)-(39,6) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (39,6)-(39,10)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ InstanceVariableReadNode (location: (39,6)-(39,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :@bar │ │ └── closing_loc: (39,10)-(39,11) = "}" │ └── closing_loc: (39,11)-(39,12) = "`" ├── @ XStringNode (location: (40,0)-(40,3)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (40,0)-(40,1) = "`" │ ├── content_loc: (40,1)-(40,2) = ")" │ ├── closing_loc: (40,2)-(40,3) = "`" │ └── unescaped: ")" ├── @ XStringNode (location: (41,0)-(41,4)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (41,0)-(41,1) = "`" │ ├── content_loc: (41,1)-(41,3) = "\\`" │ ├── closing_loc: (41,3)-(41,4) = "`" │ └── unescaped: "`" ├── @ XStringNode (location: (42,0)-(42,3)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (42,0)-(42,1) = "`" │ ├── content_loc: (42,1)-(42,2) = "\"" │ ├── closing_loc: (42,2)-(42,3) = "`" │ └── unescaped: "\"" ├── @ SymbolNode (location: (43,0)-(43,4)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (43,0)-(43,1) = ":" │ ├── value_loc: (43,1)-(43,4) = "foo" │ ├── closing_loc: ∅ │ └── unescaped: "foo" ├── @ SymbolNode (location: (44,0)-(44,6)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (44,0)-(44,2) = ":\"" │ ├── value_loc: (44,2)-(44,5) = "A B" │ ├── closing_loc: (44,5)-(44,6) = "\"" │ └── unescaped: "A B" ├── @ SymbolNode (location: (45,0)-(45,4)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (45,0)-(45,1) = ":" │ ├── value_loc: (45,1)-(45,4) = "foo" │ ├── closing_loc: ∅ │ └── unescaped: "foo" ├── @ SymbolNode (location: (46,0)-(46,6)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (46,0)-(46,2) = ":\"" │ ├── value_loc: (46,2)-(46,5) = "A B" │ ├── closing_loc: (46,5)-(46,6) = "\"" │ └── unescaped: "A B" ├── @ SymbolNode (location: (47,0)-(47,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (47,0)-(47,2) = ":\"" │ ├── value_loc: (47,2)-(47,6) = "A\\\"B" │ ├── closing_loc: (47,6)-(47,7) = "\"" │ └── unescaped: "A\"B" ├── @ SymbolNode (location: (48,0)-(48,3)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: (48,0)-(48,2) = ":\"" │ ├── value_loc: (1,0)-(1,0) = "" │ ├── closing_loc: (48,2)-(48,3) = "\"" │ └── unescaped: "" ├── @ RegularExpressionNode (location: (49,0)-(49,5)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (49,0)-(49,1) = "/" │ ├── content_loc: (49,1)-(49,4) = "foo" │ ├── closing_loc: (49,4)-(49,5) = "/" │ └── unescaped: "foo" ├── @ RegularExpressionNode (location: (50,0)-(50,28)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (50,0)-(50,1) = "/" │ ├── content_loc: (50,1)-(50,27) = "[^-+',.\\/:@[:alnum:]\\[\\]]+" │ ├── closing_loc: (50,27)-(50,28) = "/" │ └── unescaped: "[^-+',./:@[:alnum:]\\[\\]]+" ├── @ InterpolatedRegularExpressionNode (location: (51,0)-(51,12)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (51,0)-(51,1) = "/" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (51,1)-(51,4)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (51,1)-(51,4) = "foo" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "foo" │ │ └── @ EmbeddedStatementsNode (location: (51,4)-(51,11)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (51,4)-(51,6) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (51,6)-(51,10)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ InstanceVariableReadNode (location: (51,6)-(51,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :@bar │ │ └── closing_loc: (51,10)-(51,11) = "}" │ └── closing_loc: (51,11)-(51,12) = "/" ├── @ InterpolatedRegularExpressionNode (location: (52,0)-(52,15)) - │ ├── flags: ignore_case, extended, multi_line + │ ├── flags: newline, ignore_case, extended, multi_line │ ├── opening_loc: (52,0)-(52,1) = "/" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (52,1)-(52,4)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (52,1)-(52,4) = "foo" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "foo" │ │ └── @ EmbeddedStatementsNode (location: (52,4)-(52,11)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (52,4)-(52,6) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (52,6)-(52,10)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ InstanceVariableReadNode (location: (52,6)-(52,10)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :@bar │ │ └── closing_loc: (52,10)-(52,11) = "}" │ └── closing_loc: (52,11)-(52,15) = "/imx" ├── @ InterpolatedRegularExpressionNode (location: (53,0)-(53,13)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── opening_loc: (53,0)-(53,1) = "/" │ ├── parts: (length: 1) │ │ └── @ EmbeddedStatementsNode (location: (53,1)-(53,12)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (53,1)-(53,3) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (53,3)-(53,11)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ StringNode (location: (53,3)-(53,11)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: (53,3)-(53,4) = "\"" │ │ │ ├── content_loc: (53,4)-(53,10) = "\\u0000" │ │ │ ├── closing_loc: (53,10)-(53,11) = "\"" @@ -641,42 +691,45 @@ │ │ └── closing_loc: (53,11)-(53,12) = "}" │ └── closing_loc: (53,12)-(53,13) = "/" ├── @ RegularExpressionNode (location: (54,0)-(54,4)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (54,0)-(54,1) = "/" │ ├── content_loc: (54,1)-(54,3) = "\\n" │ ├── closing_loc: (54,3)-(54,4) = "/" │ └── unescaped: "\\n" ├── @ RegularExpressionNode (location: (55,0)-(55,4)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (55,0)-(55,1) = "/" │ ├── content_loc: (55,1)-(55,3) = "\\n" │ ├── closing_loc: (55,3)-(55,4) = "/" │ └── unescaped: "\\n" ├── @ RegularExpressionNode (location: (56,0)-(56,5)) - │ ├── flags: extended, forced_us_ascii_encoding + │ ├── flags: newline, static_literal, extended, forced_us_ascii_encoding │ ├── opening_loc: (56,0)-(56,1) = "/" │ ├── content_loc: (56,1)-(56,3) = "\\n" │ ├── closing_loc: (56,3)-(56,5) = "/x" │ └── unescaped: "\\n" ├── @ RegularExpressionNode (location: (57,0)-(57,7)) - │ ├── flags: extended, forced_us_ascii_encoding + │ ├── flags: newline, static_literal, extended, forced_us_ascii_encoding │ ├── opening_loc: (57,0)-(57,1) = "/" │ ├── content_loc: (57,1)-(57,5) = "\\/\\/" │ ├── closing_loc: (57,5)-(57,7) = "/x" │ └── unescaped: "//" ├── @ InterpolatedSymbolNode (location: (58,0)-(58,15)) + │ ├── flags: newline │ ├── opening_loc: (58,0)-(58,2) = ":\"" │ ├── parts: (length: 3) │ │ ├── @ StringNode (location: (58,2)-(58,5)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (58,2)-(58,5) = "foo" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "foo" │ │ ├── @ EmbeddedStatementsNode (location: (58,5)-(58,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (58,5)-(58,7) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (58,7)-(58,10)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (58,7)-(58,10)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -690,22 +743,25 @@ │ │ │ │ └── block: ∅ │ │ │ └── closing_loc: (58,10)-(58,11) = "}" │ │ └── @ StringNode (location: (58,11)-(58,14)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (58,11)-(58,14) = "baz" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "baz" │ └── closing_loc: (58,14)-(58,15) = "\"" ├── @ InterpolatedSymbolNode (location: (59,0)-(59,11)) + │ ├── flags: newline, static_literal │ ├── opening_loc: (59,0)-(59,2) = ":\"" │ ├── parts: (length: 1) │ │ └── @ EmbeddedStatementsNode (location: (59,2)-(59,10)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (59,2)-(59,4) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (59,4)-(59,9)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ StringNode (location: (59,4)-(59,9)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: (59,4)-(59,5) = "\"" │ │ │ ├── content_loc: (59,5)-(59,8) = "foo" │ │ │ ├── closing_loc: (59,8)-(59,9) = "\"" @@ -713,16 +769,19 @@ │ │ └── closing_loc: (59,9)-(59,10) = "}" │ └── closing_loc: (59,10)-(59,11) = "\"" ├── @ RangeNode (location: (60,0)-(60,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── left: │ │ @ ParenthesesNode (location: (60,0)-(60,11)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (60,1)-(60,10)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (60,1)-(60,10)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ FloatNode (location: (60,1)-(60,4)) + │ │ │ │ ├── flags: static_literal │ │ │ │ └── value: 0.0 │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :/ @@ -733,6 +792,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ FloatNode (location: (60,7)-(60,10)) + │ │ │ │ ├── flags: static_literal │ │ │ │ └── value: 0.0 │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ @@ -740,24 +800,27 @@ │ │ └── closing_loc: (60,10)-(60,11) = ")" │ ├── right: │ │ @ IntegerNode (location: (60,13)-(60,14)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (60,11)-(60,13) = ".." ├── @ RangeNode (location: (61,0)-(61,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── left: │ │ @ IntegerNode (location: (61,0)-(61,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── right: │ │ @ ParenthesesNode (location: (61,3)-(61,14)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (61,4)-(61,13)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (61,4)-(61,13)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ FloatNode (location: (61,4)-(61,7)) + │ │ │ │ ├── flags: static_literal │ │ │ │ └── value: 0.0 │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :/ @@ -768,6 +831,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ FloatNode (location: (61,10)-(61,13)) + │ │ │ │ ├── flags: static_literal │ │ │ │ └── value: 0.0 │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ @@ -775,16 +839,19 @@ │ │ └── closing_loc: (61,13)-(61,14) = ")" │ └── operator_loc: (61,1)-(61,3) = ".." ├── @ RangeNode (location: (62,0)-(62,16)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── left: │ │ @ ParenthesesNode (location: (62,0)-(62,11)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (62,1)-(62,10)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (62,1)-(62,10)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ FloatNode (location: (62,1)-(62,4)) + │ │ │ │ ├── flags: static_literal │ │ │ │ └── value: 0.0 │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :/ @@ -795,6 +862,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ FloatNode (location: (62,7)-(62,10)) + │ │ │ │ ├── flags: static_literal │ │ │ │ └── value: 0.0 │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ @@ -802,31 +870,34 @@ │ │ └── closing_loc: (62,10)-(62,11) = ")" │ ├── right: │ │ @ IntegerNode (location: (62,13)-(62,16)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 100 │ └── operator_loc: (62,11)-(62,13) = ".." ├── @ FloatNode (location: (63,0)-(63,4)) + │ ├── flags: newline, static_literal │ └── value: -0.1 ├── @ FloatNode (location: (64,0)-(64,3)) + │ ├── flags: newline, static_literal │ └── value: 0.1 ├── @ ArrayNode (location: (65,0)-(65,6)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (65,1)-(65,2)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (65,4)-(65,5)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── opening_loc: (65,0)-(65,1) = "[" │ └── closing_loc: (65,5)-(65,6) = "]" ├── @ ArrayNode (location: (66,0)-(66,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── elements: (length: 3) │ │ ├── @ IntegerNode (location: (66,1)-(66,2)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── @ ParenthesesNode (location: (66,4)-(66,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: ∅ │ │ │ ├── opening_loc: (66,4)-(66,5) = "(" │ │ │ └── closing_loc: (66,5)-(66,6) = ")" @@ -843,137 +914,160 @@ │ ├── opening_loc: (66,0)-(66,1) = "[" │ └── closing_loc: (66,10)-(66,11) = "]" ├── @ ArrayNode (location: (67,0)-(67,3)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 1) │ │ └── @ IntegerNode (location: (67,1)-(67,2)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── opening_loc: (67,0)-(67,1) = "[" │ └── closing_loc: (67,2)-(67,3) = "]" ├── @ ArrayNode (location: (68,0)-(68,2)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── elements: (length: 0) │ ├── opening_loc: (68,0)-(68,1) = "[" │ └── closing_loc: (68,1)-(68,2) = "]" ├── @ ArrayNode (location: (69,0)-(69,10)) - │ ├── flags: contains_splat + │ ├── flags: newline, contains_splat │ ├── elements: (length: 2) │ │ ├── @ IntegerNode (location: (69,1)-(69,2)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ SplatNode (location: (69,4)-(69,9)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (69,4)-(69,5) = "*" │ │ └── expression: │ │ @ InstanceVariableReadNode (location: (69,5)-(69,9)) + │ │ ├── flags: ∅ │ │ └── name: :@foo │ ├── opening_loc: (69,0)-(69,1) = "[" │ └── closing_loc: (69,9)-(69,10) = "]" ├── @ ArrayNode (location: (70,0)-(70,10)) - │ ├── flags: contains_splat + │ ├── flags: newline, contains_splat │ ├── elements: (length: 2) │ │ ├── @ SplatNode (location: (70,1)-(70,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (70,1)-(70,2) = "*" │ │ │ └── expression: │ │ │ @ InstanceVariableReadNode (location: (70,2)-(70,6)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :@foo │ │ └── @ IntegerNode (location: (70,8)-(70,9)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── opening_loc: (70,0)-(70,1) = "[" │ └── closing_loc: (70,9)-(70,10) = "]" ├── @ ArrayNode (location: (71,0)-(71,14)) - │ ├── flags: contains_splat + │ ├── flags: newline, contains_splat │ ├── elements: (length: 2) │ │ ├── @ SplatNode (location: (71,1)-(71,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (71,1)-(71,2) = "*" │ │ │ └── expression: │ │ │ @ InstanceVariableReadNode (location: (71,2)-(71,6)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :@foo │ │ └── @ SplatNode (location: (71,8)-(71,13)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (71,8)-(71,9) = "*" │ │ └── expression: │ │ @ InstanceVariableReadNode (location: (71,9)-(71,13)) + │ │ ├── flags: ∅ │ │ └── name: :@baz │ ├── opening_loc: (71,0)-(71,1) = "[" │ └── closing_loc: (71,13)-(71,14) = "]" ├── @ HashNode (location: (72,0)-(72,2)) + │ ├── flags: newline, static_literal │ ├── opening_loc: (72,0)-(72,1) = "{" │ ├── elements: (length: 0) │ └── closing_loc: (72,1)-(72,2) = "}" ├── @ HashNode (location: (73,0)-(73,12)) + │ ├── flags: newline │ ├── opening_loc: (73,0)-(73,1) = "{" │ ├── elements: (length: 1) │ │ └── @ AssocNode (location: (73,2)-(73,10)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ ParenthesesNode (location: (73,2)-(73,4)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: ∅ │ │ │ ├── opening_loc: (73,2)-(73,3) = "(" │ │ │ └── closing_loc: (73,3)-(73,4) = ")" │ │ ├── value: │ │ │ @ ParenthesesNode (location: (73,8)-(73,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: ∅ │ │ │ ├── opening_loc: (73,8)-(73,9) = "(" │ │ │ └── closing_loc: (73,9)-(73,10) = ")" │ │ └── operator_loc: (73,5)-(73,7) = "=>" │ └── closing_loc: (73,11)-(73,12) = "}" ├── @ HashNode (location: (74,0)-(74,10)) + │ ├── flags: newline, static_literal │ ├── opening_loc: (74,0)-(74,1) = "{" │ ├── elements: (length: 1) │ │ └── @ AssocNode (location: (74,2)-(74,8)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ IntegerNode (location: (74,2)-(74,3)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── value: │ │ │ @ IntegerNode (location: (74,7)-(74,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: (74,4)-(74,6) = "=>" │ └── closing_loc: (74,9)-(74,10) = "}" ├── @ HashNode (location: (75,0)-(75,18)) + │ ├── flags: newline, static_literal │ ├── opening_loc: (75,0)-(75,1) = "{" │ ├── elements: (length: 2) │ │ ├── @ AssocNode (location: (75,2)-(75,8)) + │ │ │ ├── flags: static_literal │ │ │ ├── key: │ │ │ │ @ IntegerNode (location: (75,2)-(75,3)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── value: │ │ │ │ @ IntegerNode (location: (75,7)-(75,8)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── operator_loc: (75,4)-(75,6) = "=>" │ │ └── @ AssocNode (location: (75,10)-(75,16)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ IntegerNode (location: (75,10)-(75,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 3 │ │ ├── value: │ │ │ @ IntegerNode (location: (75,15)-(75,16)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 4 │ │ └── operator_loc: (75,12)-(75,14) = "=>" │ └── closing_loc: (75,17)-(75,18) = "}" ├── @ HashNode (location: (76,0)-(76,27)) + │ ├── flags: newline │ ├── opening_loc: (76,0)-(76,1) = "{" │ ├── elements: (length: 2) │ │ ├── @ AssocNode (location: (76,2)-(76,19)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (76,2)-(76,4)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (76,2)-(76,3) = "a" │ │ │ │ ├── closing_loc: (76,3)-(76,4) = ":" │ │ │ │ └── unescaped: "a" │ │ │ ├── value: │ │ │ │ @ ParenthesesNode (location: (76,5)-(76,19)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (76,6)-(76,18)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ RescueModifierNode (location: (76,6)-(76,18)) + │ │ │ │ │ ├── flags: newline │ │ │ │ │ ├── expression: │ │ │ │ │ │ @ IntegerNode (location: (76,6)-(76,7)) - │ │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ │ └── value: 1 │ │ │ │ │ ├── keyword_loc: (76,8)-(76,14) = "rescue" │ │ │ │ │ └── rescue_expression: @@ -991,63 +1085,69 @@ │ │ │ │ └── closing_loc: (76,18)-(76,19) = ")" │ │ │ └── operator_loc: ∅ │ │ └── @ AssocNode (location: (76,21)-(76,25)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (76,21)-(76,23)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (76,21)-(76,22) = "b" │ │ │ ├── closing_loc: (76,22)-(76,23) = ":" │ │ │ └── unescaped: "b" │ │ ├── value: │ │ │ @ IntegerNode (location: (76,24)-(76,25)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: ∅ │ └── closing_loc: (76,26)-(76,27) = "}" ├── @ HashNode (location: (77,0)-(77,14)) + │ ├── flags: newline, static_literal │ ├── opening_loc: (77,0)-(77,1) = "{" │ ├── elements: (length: 2) │ │ ├── @ AssocNode (location: (77,2)-(77,6)) + │ │ │ ├── flags: static_literal │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (77,2)-(77,4)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (77,2)-(77,3) = "a" │ │ │ │ ├── closing_loc: (77,3)-(77,4) = ":" │ │ │ │ └── unescaped: "a" │ │ │ ├── value: │ │ │ │ @ IntegerNode (location: (77,5)-(77,6)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── operator_loc: ∅ │ │ └── @ AssocNode (location: (77,8)-(77,12)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (77,8)-(77,10)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (77,8)-(77,9) = "b" │ │ │ ├── closing_loc: (77,9)-(77,10) = ":" │ │ │ └── unescaped: "b" │ │ ├── value: │ │ │ @ IntegerNode (location: (77,11)-(77,12)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: ∅ │ └── closing_loc: (77,13)-(77,14) = "}" ├── @ HashNode (location: (78,0)-(78,9)) + │ ├── flags: newline, static_literal │ ├── opening_loc: (78,0)-(78,1) = "{" │ ├── elements: (length: 1) │ │ └── @ AssocNode (location: (78,2)-(78,7)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (78,2)-(78,4)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (78,2)-(78,3) = "a" │ │ │ ├── closing_loc: (78,3)-(78,4) = ":" │ │ │ └── unescaped: "a" │ │ ├── value: │ │ │ @ SymbolNode (location: (78,5)-(78,7)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (78,5)-(78,6) = ":" │ │ │ ├── value_loc: (78,6)-(78,7) = "a" │ │ │ ├── closing_loc: ∅ @@ -1055,66 +1155,72 @@ │ │ └── operator_loc: ∅ │ └── closing_loc: (78,8)-(78,9) = "}" ├── @ HashNode (location: (79,0)-(79,15)) + │ ├── flags: newline, static_literal │ ├── opening_loc: (79,0)-(79,1) = "{" │ ├── elements: (length: 1) │ │ └── @ AssocNode (location: (79,2)-(79,13)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (79,2)-(79,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (79,2)-(79,4) = ":\"" │ │ │ ├── value_loc: (79,4)-(79,7) = "a b" │ │ │ ├── closing_loc: (79,7)-(79,8) = "\"" │ │ │ └── unescaped: "a b" │ │ ├── value: │ │ │ @ IntegerNode (location: (79,12)-(79,13)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── operator_loc: (79,9)-(79,11) = "=>" │ └── closing_loc: (79,14)-(79,15) = "}" ├── @ HashNode (location: (80,0)-(80,12)) + │ ├── flags: newline, static_literal │ ├── opening_loc: (80,0)-(80,1) = "{" │ ├── elements: (length: 1) │ │ └── @ AssocNode (location: (80,2)-(80,10)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (80,2)-(80,5)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (80,2)-(80,3) = ":" │ │ │ ├── value_loc: (80,3)-(80,5) = "-@" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "-@" │ │ ├── value: │ │ │ @ IntegerNode (location: (80,9)-(80,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── operator_loc: (80,6)-(80,8) = "=>" │ └── closing_loc: (80,11)-(80,12) = "}" ├── @ InterpolatedStringNode (location: (81,0)-(82,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (81,0)-(81,1) = "\"" │ ├── parts: (length: 4) │ │ ├── @ EmbeddedStatementsNode (location: (81,1)-(81,4)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (81,1)-(81,3) = "\#{" │ │ │ ├── statements: ∅ │ │ │ └── closing_loc: (81,3)-(81,4) = "}" │ │ ├── @ StringNode (location: (81,4)-(82,0)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (81,4)-(82,0) = "\n" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\n" │ │ ├── @ EmbeddedStatementsNode (location: (82,0)-(82,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (82,0)-(82,2) = "\#{" │ │ │ ├── statements: ∅ │ │ │ └── closing_loc: (82,2)-(82,3) = "}" │ │ └── @ StringNode (location: (82,3)-(82,6)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (82,3)-(82,6) = "\\na" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "\na" │ └── closing_loc: (82,6)-(82,7) = "\"" ├── @ CallNode (location: (83,0)-(86,1)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1124,31 +1230,35 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (83,4)-(86,1)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (84,2)-(85,7)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ InterpolatedStringNode (location: (84,2)-(85,7)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── opening_loc: (84,2)-(84,3) = "\"" │ │ ├── parts: (length: 4) │ │ │ ├── @ EmbeddedStatementsNode (location: (84,3)-(84,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── opening_loc: (84,3)-(84,5) = "\#{" │ │ │ │ ├── statements: ∅ │ │ │ │ └── closing_loc: (84,5)-(84,6) = "}" │ │ │ ├── @ StringNode (location: (84,6)-(85,0)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (84,6)-(85,0) = "\n" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "\n" │ │ │ ├── @ EmbeddedStatementsNode (location: (85,0)-(85,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── opening_loc: (85,0)-(85,2) = "\#{" │ │ │ │ ├── statements: ∅ │ │ │ │ └── closing_loc: (85,2)-(85,3) = "}" │ │ │ └── @ StringNode (location: (85,3)-(85,6)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (85,3)-(85,6) = "\\na" │ │ │ ├── closing_loc: ∅ @@ -1157,24 +1267,27 @@ │ ├── opening_loc: (83,4)-(83,5) = "{" │ └── closing_loc: (86,0)-(86,1) = "}" ├── @ SymbolNode (location: (87,0)-(88,2)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (87,0)-(87,2) = ":\"" │ ├── value_loc: (87,2)-(88,1) = "a\\\\\nb" │ ├── closing_loc: (88,1)-(88,2) = "\"" │ └── unescaped: "a\\\nb" └── @ InterpolatedXStringNode (location: (89,0)-(91,2)) + ├── flags: newline ├── opening_loc: (89,0)-(89,1) = "`" ├── parts: (length: 3) │ ├── @ StringNode (location: (89,1)-(90,0)) - │ │ ├── flags: frozen + │ │ ├── flags: static_literal, frozen │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (89,1)-(90,0) = " x\n" │ │ ├── closing_loc: ∅ │ │ └── unescaped: " x\n" │ ├── @ EmbeddedStatementsNode (location: (90,0)-(90,6)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (90,0)-(90,2) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (90,2)-(90,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (90,2)-(90,5)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -1188,7 +1301,7 @@ │ │ │ └── block: ∅ │ │ └── closing_loc: (90,5)-(90,6) = "}" │ └── @ StringNode (location: (90,6)-(91,1)) - │ ├── flags: frozen + │ ├── flags: static_literal, frozen │ ├── opening_loc: ∅ │ ├── content_loc: (90,6)-(91,1) = "\n#" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/module.txt b/test/prism/snapshots/unparser/corpus/literal/module.txt index 6428aeea82e..9ad15d2dcd1 100644 --- a/test/prism/snapshots/unparser/corpus/literal/module.txt +++ b/test/prism/snapshots/unparser/corpus/literal/module.txt @@ -1,24 +1,31 @@ @ ProgramNode (location: (1,0)-(16,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(16,3)) + ├── flags: ∅ └── body: (length: 4) ├── @ ModuleNode (location: (1,0)-(2,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── module_keyword_loc: (1,0)-(1,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (1,7)-(1,8)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── body: ∅ │ ├── end_keyword_loc: (2,0)-(2,3) = "end" │ └── name: :A ├── @ ModuleNode (location: (4,0)-(5,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── module_keyword_loc: (4,0)-(4,6) = "module" │ ├── constant_path: │ │ @ ConstantPathNode (location: (4,7)-(4,11)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantReadNode (location: (4,7)-(4,8)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── name: :B │ │ ├── delimiter_loc: (4,8)-(4,10) = "::" @@ -27,14 +34,18 @@ │ ├── end_keyword_loc: (5,0)-(5,3) = "end" │ └── name: :B ├── @ ModuleNode (location: (7,0)-(8,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── module_keyword_loc: (7,0)-(7,6) = "module" │ ├── constant_path: │ │ @ ConstantPathNode (location: (7,7)-(7,14)) + │ │ ├── flags: ∅ │ │ ├── parent: │ │ │ @ ConstantPathNode (location: (7,7)-(7,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── parent: │ │ │ │ @ ConstantReadNode (location: (7,7)-(7,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :A │ │ │ ├── name: :B │ │ │ ├── delimiter_loc: (7,8)-(7,10) = "::" @@ -46,16 +57,19 @@ │ ├── end_keyword_loc: (8,0)-(8,3) = "end" │ └── name: :C └── @ ModuleNode (location: (10,0)-(16,3)) + ├── flags: newline ├── locals: [] ├── module_keyword_loc: (10,0)-(10,6) = "module" ├── constant_path: │ @ ConstantReadNode (location: (10,7)-(10,8)) + │ ├── flags: ∅ │ └── name: :A ├── body: │ @ StatementsNode (location: (11,2)-(15,5)) + │ ├── flags: ∅ │ └── body: (length: 2) │ ├── @ CallNode (location: (11,2)-(11,16)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :include @@ -69,6 +83,7 @@ │ │ │ ├── flags: ∅ │ │ │ ├── receiver: │ │ │ │ @ ConstantReadNode (location: (11,10)-(11,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :B │ │ │ ├── call_operator_loc: (11,11)-(11,12) = "." │ │ │ ├── name: :new @@ -80,15 +95,17 @@ │ │ ├── closing_loc: (11,15)-(11,16) = ")" │ │ └── block: ∅ │ └── @ DefNode (location: (13,2)-(15,5)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (13,6)-(13,9) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (14,4)-(14,8)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ SymbolNode (location: (14,4)-(14,8)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (14,4)-(14,5) = ":" │ │ ├── value_loc: (14,5)-(14,8) = "bar" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/opasgn.txt b/test/prism/snapshots/unparser/corpus/literal/opasgn.txt index 0761b47348b..3df6248d4ba 100644 --- a/test/prism/snapshots/unparser/corpus/literal/opasgn.txt +++ b/test/prism/snapshots/unparser/corpus/literal/opasgn.txt @@ -1,59 +1,67 @@ @ ProgramNode (location: (1,0)-(24,10)) +├── flags: ∅ ├── locals: [:a, :h] └── statements: @ StatementsNode (location: (1,0)-(24,10)) + ├── flags: ∅ └── body: (length: 24) ├── @ LocalVariableOperatorWriteNode (location: (1,0)-(1,6)) + │ ├── flags: newline │ ├── name_loc: (1,0)-(1,1) = "a" │ ├── binary_operator_loc: (1,2)-(1,4) = "+=" │ ├── value: │ │ @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── name: :a │ ├── binary_operator: :+ │ └── depth: 0 ├── @ LocalVariableOperatorWriteNode (location: (2,0)-(2,6)) + │ ├── flags: newline │ ├── name_loc: (2,0)-(2,1) = "a" │ ├── binary_operator_loc: (2,2)-(2,4) = "-=" │ ├── value: │ │ @ IntegerNode (location: (2,5)-(2,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── name: :a │ ├── binary_operator: :- │ └── depth: 0 ├── @ LocalVariableOperatorWriteNode (location: (3,0)-(3,7)) + │ ├── flags: newline │ ├── name_loc: (3,0)-(3,1) = "a" │ ├── binary_operator_loc: (3,2)-(3,5) = "**=" │ ├── value: │ │ @ IntegerNode (location: (3,6)-(3,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── name: :a │ ├── binary_operator: :** │ └── depth: 0 ├── @ LocalVariableOperatorWriteNode (location: (4,0)-(4,6)) + │ ├── flags: newline │ ├── name_loc: (4,0)-(4,1) = "a" │ ├── binary_operator_loc: (4,2)-(4,4) = "*=" │ ├── value: │ │ @ IntegerNode (location: (4,5)-(4,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── name: :a │ ├── binary_operator: :* │ └── depth: 0 ├── @ LocalVariableOperatorWriteNode (location: (5,0)-(5,6)) + │ ├── flags: newline │ ├── name_loc: (5,0)-(5,1) = "a" │ ├── binary_operator_loc: (5,2)-(5,4) = "/=" │ ├── value: │ │ @ IntegerNode (location: (5,5)-(5,6)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── name: :a │ ├── binary_operator: :/ │ └── depth: 0 ├── @ LocalVariableAndWriteNode (location: (6,0)-(6,7)) + │ ├── flags: newline │ ├── name_loc: (6,0)-(6,1) = "a" │ ├── operator_loc: (6,2)-(6,5) = "&&=" │ ├── value: @@ -70,27 +78,31 @@ │ ├── name: :a │ └── depth: 0 ├── @ LocalVariableOrWriteNode (location: (7,0)-(7,7)) + │ ├── flags: newline │ ├── name_loc: (7,0)-(7,1) = "a" │ ├── operator_loc: (7,2)-(7,5) = "||=" │ ├── value: │ │ @ IntegerNode (location: (7,6)-(7,7)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── name: :a │ └── depth: 0 ├── @ CallNode (location: (8,0)-(8,13)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ParenthesesNode (location: (8,0)-(8,9)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (8,1)-(8,8)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableOrWriteNode (location: (8,1)-(8,8)) + │ │ │ ├── flags: newline │ │ │ ├── name_loc: (8,1)-(8,2) = "a" │ │ │ ├── operator_loc: (8,3)-(8,6) = "||=" │ │ │ ├── value: │ │ │ │ @ IntegerNode (location: (8,7)-(8,8)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ ├── name: :a │ │ │ └── depth: 0 @@ -104,17 +116,21 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (9,0)-(9,17)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ ParenthesesNode (location: (9,0)-(9,10)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (9,1)-(9,9)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableOrWriteNode (location: (9,1)-(9,9)) + │ │ │ ├── flags: newline │ │ │ ├── name_loc: (9,1)-(9,2) = "h" │ │ │ ├── operator_loc: (9,3)-(9,6) = "||=" │ │ │ ├── value: │ │ │ │ @ HashNode (location: (9,7)-(9,9)) + │ │ │ │ ├── flags: static_literal │ │ │ │ ├── opening_loc: (9,7)-(9,8) = "{" │ │ │ │ ├── elements: (length: 0) │ │ │ │ └── closing_loc: (9,8)-(9,9) = "}" @@ -153,9 +169,10 @@ │ ├── closing_loc: (9,12)-(9,13) = "]" │ └── block: ∅ ├── @ CallOperatorWriteNode (location: (10,0)-(10,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (10,0)-(10,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: (10,1)-(10,2) = "." @@ -166,12 +183,13 @@ │ ├── binary_operator_loc: (10,4)-(10,6) = "+=" │ └── value: │ @ IntegerNode (location: (10,7)-(10,8)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── @ CallOperatorWriteNode (location: (11,0)-(11,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (11,0)-(11,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: (11,1)-(11,2) = "." @@ -182,12 +200,13 @@ │ ├── binary_operator_loc: (11,4)-(11,6) = "-=" │ └── value: │ @ IntegerNode (location: (11,7)-(11,8)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── @ CallOperatorWriteNode (location: (12,0)-(12,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (12,0)-(12,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: (12,1)-(12,2) = "." @@ -198,12 +217,13 @@ │ ├── binary_operator_loc: (12,4)-(12,7) = "**=" │ └── value: │ @ IntegerNode (location: (12,8)-(12,9)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── @ CallOperatorWriteNode (location: (13,0)-(13,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (13,0)-(13,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: (13,1)-(13,2) = "." @@ -214,12 +234,13 @@ │ ├── binary_operator_loc: (13,4)-(13,6) = "*=" │ └── value: │ @ IntegerNode (location: (13,7)-(13,8)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── @ CallOperatorWriteNode (location: (14,0)-(14,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (14,0)-(14,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: (14,1)-(14,2) = "." @@ -230,12 +251,13 @@ │ ├── binary_operator_loc: (14,4)-(14,6) = "/=" │ └── value: │ @ IntegerNode (location: (14,7)-(14,8)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── @ CallAndWriteNode (location: (15,0)-(15,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (15,0)-(15,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: (15,1)-(15,2) = "." @@ -255,9 +277,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallOrWriteNode (location: (16,0)-(16,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (16,0)-(16,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: (16,1)-(16,2) = "." @@ -267,12 +290,13 @@ │ ├── operator_loc: (16,4)-(16,7) = "||=" │ └── value: │ @ IntegerNode (location: (16,8)-(16,9)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── @ IndexOperatorWriteNode (location: (17,0)-(17,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (17,0)-(17,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -297,12 +321,13 @@ │ ├── binary_operator_loc: (17,5)-(17,7) = "+=" │ └── value: │ @ IntegerNode (location: (17,8)-(17,9)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── @ IndexOperatorWriteNode (location: (18,0)-(18,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (18,0)-(18,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -327,12 +352,13 @@ │ ├── binary_operator_loc: (18,5)-(18,7) = "-=" │ └── value: │ @ IntegerNode (location: (18,8)-(18,9)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── @ IndexOperatorWriteNode (location: (19,0)-(19,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (19,0)-(19,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -357,12 +383,13 @@ │ ├── binary_operator_loc: (19,5)-(19,8) = "**=" │ └── value: │ @ IntegerNode (location: (19,9)-(19,10)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── @ IndexOperatorWriteNode (location: (20,0)-(20,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (20,0)-(20,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -387,12 +414,13 @@ │ ├── binary_operator_loc: (20,5)-(20,7) = "*=" │ └── value: │ @ IntegerNode (location: (20,8)-(20,9)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── @ IndexOperatorWriteNode (location: (21,0)-(21,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (21,0)-(21,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -417,12 +445,13 @@ │ ├── binary_operator_loc: (21,5)-(21,7) = "/=" │ └── value: │ @ IntegerNode (location: (21,8)-(21,9)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── @ IndexAndWriteNode (location: (22,0)-(22,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (22,0)-(22,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -456,9 +485,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ IndexOrWriteNode (location: (23,0)-(23,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (23,0)-(23,1)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -482,10 +512,10 @@ │ ├── operator_loc: (23,5)-(23,8) = "||=" │ └── value: │ @ IntegerNode (location: (23,9)-(23,10)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 └── @ CallOperatorWriteNode (location: (24,0)-(24,10)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (24,0)-(24,3)) │ ├── flags: variable_call, ignore_visibility @@ -505,5 +535,5 @@ ├── binary_operator_loc: (24,6)-(24,8) = "+=" └── value: @ IntegerNode (location: (24,9)-(24,10)) - ├── flags: decimal + ├── flags: static_literal, decimal └── value: 1 diff --git a/test/prism/snapshots/unparser/corpus/literal/pattern.txt b/test/prism/snapshots/unparser/corpus/literal/pattern.txt index 5a0b4bb7336..7a542b26cf9 100644 --- a/test/prism/snapshots/unparser/corpus/literal/pattern.txt +++ b/test/prism/snapshots/unparser/corpus/literal/pattern.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(41,8)) +├── flags: ∅ ├── locals: [:a, :x, :y] └── statements: @ StatementsNode (location: (1,0)-(41,8)) + ├── flags: ∅ └── body: (length: 4) ├── @ CaseMatchNode (location: (1,0)-(33,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (1,5)-(1,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -17,58 +20,69 @@ │ │ └── block: ∅ │ ├── conditions: (length: 15) │ │ ├── @ InNode (location: (2,0)-(3,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ ArrayPatternNode (location: (2,3)-(2,17)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: │ │ │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── name: :A │ │ │ │ ├── requireds: (length: 2) │ │ │ │ │ ├── @ IntegerNode (location: (2,5)-(2,6)) - │ │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ │ └── value: 1 │ │ │ │ │ └── @ IntegerNode (location: (2,8)-(2,9)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 2 │ │ │ │ ├── rest: │ │ │ │ │ @ SplatNode (location: (2,11)-(2,13)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── operator_loc: (2,11)-(2,12) = "*" │ │ │ │ │ └── expression: │ │ │ │ │ @ LocalVariableTargetNode (location: (2,12)-(2,13)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :a │ │ │ │ │ └── depth: 0 │ │ │ │ ├── posts: (length: 1) │ │ │ │ │ └── @ IntegerNode (location: (2,15)-(2,16)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 3 │ │ │ │ ├── opening_loc: (2,4)-(2,5) = "[" │ │ │ │ └── closing_loc: (2,16)-(2,17) = "]" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (3,2)-(3,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (3,2)-(3,6)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── in_loc: (2,0)-(2,2) = "in" │ │ │ └── then_loc: (2,18)-(2,22) = "then" │ │ ├── @ InNode (location: (4,0)-(5,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ ArrayPatternNode (location: (4,3)-(4,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── requireds: (length: 2) │ │ │ │ │ ├── @ IntegerNode (location: (4,4)-(4,5)) - │ │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ │ └── value: 1 │ │ │ │ │ └── @ IntegerNode (location: (4,7)-(4,8)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 2 │ │ │ │ ├── rest: │ │ │ │ │ @ ImplicitRestNode (location: (4,8)-(4,9)) + │ │ │ │ │ └── flags: ∅ │ │ │ │ ├── posts: (length: 0) │ │ │ │ ├── opening_loc: (4,3)-(4,4) = "[" │ │ │ │ └── closing_loc: (4,10)-(4,11) = "]" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (5,2)-(5,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (5,2)-(5,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :y @@ -80,24 +94,30 @@ │ │ │ ├── in_loc: (4,0)-(4,2) = "in" │ │ │ └── then_loc: (4,12)-(4,16) = "then" │ │ ├── @ InNode (location: (6,0)-(7,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ HashPatternNode (location: (6,3)-(6,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: │ │ │ │ │ @ ConstantReadNode (location: (6,3)-(6,4)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── name: :A │ │ │ │ ├── elements: (length: 1) │ │ │ │ │ └── @ AssocNode (location: (6,5)-(6,7)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── key: │ │ │ │ │ │ @ SymbolNode (location: (6,5)-(6,7)) - │ │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ ├── value_loc: (6,5)-(6,6) = "x" │ │ │ │ │ │ ├── closing_loc: (6,6)-(6,7) = ":" │ │ │ │ │ │ └── unescaped: "x" │ │ │ │ │ ├── value: │ │ │ │ │ │ @ ImplicitNode (location: (6,5)-(6,6)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── value: │ │ │ │ │ │ @ LocalVariableTargetNode (location: (6,5)-(6,6)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── name: :x │ │ │ │ │ │ └── depth: 0 │ │ │ │ │ └── operator_loc: ∅ @@ -106,19 +126,25 @@ │ │ │ │ └── closing_loc: (6,7)-(6,8) = ")" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (7,2)-(7,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (7,2)-(7,6)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── in_loc: (6,0)-(6,2) = "in" │ │ │ └── then_loc: (6,9)-(6,13) = "then" │ │ ├── @ InNode (location: (8,0)-(9,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ HashPatternNode (location: (8,3)-(8,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── elements: (length: 0) │ │ │ │ ├── rest: │ │ │ │ │ @ AssocSplatNode (location: (8,4)-(8,7)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── value: │ │ │ │ │ │ @ LocalVariableTargetNode (location: (8,6)-(8,7)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── name: :a │ │ │ │ │ │ └── depth: 0 │ │ │ │ │ └── operator_loc: (8,4)-(8,6) = "**" @@ -126,21 +152,28 @@ │ │ │ │ └── closing_loc: (8,7)-(8,8) = "}" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (9,2)-(9,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (9,2)-(9,6)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── in_loc: (8,0)-(8,2) = "in" │ │ │ └── then_loc: (8,9)-(8,13) = "then" │ │ ├── @ InNode (location: (10,0)-(11,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ IfNode (location: (10,3)-(10,13)) + │ │ │ │ ├── flags: newline │ │ │ │ ├── if_keyword_loc: (10,6)-(10,8) = "if" │ │ │ │ ├── predicate: │ │ │ │ │ @ TrueNode (location: (10,9)-(10,13)) + │ │ │ │ │ └── flags: static_literal │ │ │ │ ├── then_keyword_loc: ∅ │ │ │ │ ├── statements: │ │ │ │ │ @ StatementsNode (location: (10,3)-(10,5)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ HashPatternNode (location: (10,3)-(10,5)) + │ │ │ │ │ ├── flags: newline │ │ │ │ │ ├── constant: ∅ │ │ │ │ │ ├── elements: (length: 0) │ │ │ │ │ ├── rest: ∅ @@ -150,23 +183,30 @@ │ │ │ │ └── end_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (11,2)-(11,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (11,2)-(11,6)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── in_loc: (10,0)-(10,2) = "in" │ │ │ └── then_loc: (10,14)-(10,18) = "then" │ │ ├── @ InNode (location: (12,0)-(13,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ ArrayPatternNode (location: (12,3)-(12,12)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── requireds: (length: 2) │ │ │ │ │ ├── @ LocalVariableTargetNode (location: (12,4)-(12,5)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── name: :x │ │ │ │ │ │ └── depth: 0 │ │ │ │ │ └── @ LocalVariableTargetNode (location: (12,7)-(12,8)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :y │ │ │ │ │ └── depth: 0 │ │ │ │ ├── rest: │ │ │ │ │ @ SplatNode (location: (12,10)-(12,11)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── operator_loc: (12,10)-(12,11) = "*" │ │ │ │ │ └── expression: ∅ │ │ │ │ ├── posts: (length: 0) @@ -174,39 +214,45 @@ │ │ │ │ └── closing_loc: (12,11)-(12,12) = "]" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (13,2)-(13,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (13,2)-(13,6)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── in_loc: (12,0)-(12,2) = "in" │ │ │ └── then_loc: (12,13)-(12,17) = "then" │ │ ├── @ InNode (location: (14,0)-(15,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ HashPatternNode (location: (14,3)-(14,16)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── elements: (length: 2) │ │ │ │ │ ├── @ AssocNode (location: (14,4)-(14,8)) + │ │ │ │ │ │ ├── flags: static_literal │ │ │ │ │ │ ├── key: │ │ │ │ │ │ │ @ SymbolNode (location: (14,4)-(14,6)) - │ │ │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ │ ├── value_loc: (14,4)-(14,5) = "a" │ │ │ │ │ │ │ ├── closing_loc: (14,5)-(14,6) = ":" │ │ │ │ │ │ │ └── unescaped: "a" │ │ │ │ │ │ ├── value: │ │ │ │ │ │ │ @ IntegerNode (location: (14,7)-(14,8)) - │ │ │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ │ │ └── value: 1 │ │ │ │ │ │ └── operator_loc: ∅ │ │ │ │ │ └── @ AssocNode (location: (14,10)-(14,15)) + │ │ │ │ │ ├── flags: static_literal │ │ │ │ │ ├── key: │ │ │ │ │ │ @ SymbolNode (location: (14,10)-(14,13)) - │ │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ ├── value_loc: (14,10)-(14,12) = "aa" │ │ │ │ │ │ ├── closing_loc: (14,12)-(14,13) = ":" │ │ │ │ │ │ └── unescaped: "aa" │ │ │ │ │ ├── value: │ │ │ │ │ │ @ IntegerNode (location: (14,14)-(14,15)) - │ │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ │ └── value: 2 │ │ │ │ │ └── operator_loc: ∅ │ │ │ │ ├── rest: ∅ @@ -214,13 +260,17 @@ │ │ │ │ └── closing_loc: (14,15)-(14,16) = "}" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (15,2)-(15,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (15,2)-(15,6)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── in_loc: (14,0)-(14,2) = "in" │ │ │ └── then_loc: (14,17)-(14,21) = "then" │ │ ├── @ InNode (location: (16,0)-(17,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ HashPatternNode (location: (16,3)-(16,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── elements: (length: 0) │ │ │ │ ├── rest: ∅ @@ -228,43 +278,53 @@ │ │ │ │ └── closing_loc: (16,4)-(16,5) = "}" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (17,2)-(17,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (17,2)-(17,6)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── in_loc: (16,0)-(16,2) = "in" │ │ │ └── then_loc: (16,6)-(16,10) = "then" │ │ ├── @ InNode (location: (18,0)-(19,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ HashPatternNode (location: (18,3)-(18,10)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── elements: (length: 0) │ │ │ │ ├── rest: │ │ │ │ │ @ NoKeywordsParameterNode (location: (18,4)-(18,9)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── operator_loc: (18,4)-(18,6) = "**" │ │ │ │ │ └── keyword_loc: (18,6)-(18,9) = "nil" │ │ │ │ ├── opening_loc: (18,3)-(18,4) = "{" │ │ │ │ └── closing_loc: (18,9)-(18,10) = "}" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (19,2)-(19,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (19,2)-(19,6)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── in_loc: (18,0)-(18,2) = "in" │ │ │ └── then_loc: (18,11)-(18,15) = "then" │ │ ├── @ InNode (location: (20,0)-(21,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ HashPatternNode (location: (20,3)-(20,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── constant: ∅ │ │ │ │ ├── elements: (length: 1) │ │ │ │ │ └── @ AssocNode (location: (20,4)-(20,10)) + │ │ │ │ │ ├── flags: static_literal │ │ │ │ │ ├── key: │ │ │ │ │ │ @ SymbolNode (location: (20,4)-(20,8)) - │ │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ │ ├── opening_loc: (20,4)-(20,5) = "\"" │ │ │ │ │ │ ├── value_loc: (20,5)-(20,6) = "a" │ │ │ │ │ │ ├── closing_loc: (20,6)-(20,8) = "\":" │ │ │ │ │ │ └── unescaped: "a" │ │ │ │ │ ├── value: │ │ │ │ │ │ @ IntegerNode (location: (20,9)-(20,10)) - │ │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ │ └── value: 1 │ │ │ │ │ └── operator_loc: ∅ │ │ │ │ ├── rest: ∅ @@ -272,90 +332,114 @@ │ │ │ │ └── closing_loc: (20,10)-(20,11) = "}" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (21,2)-(21,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (21,2)-(21,6)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── in_loc: (20,0)-(20,2) = "in" │ │ │ └── then_loc: (20,12)-(20,16) = "then" │ │ ├── @ InNode (location: (22,0)-(23,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ AlternationPatternNode (location: (22,3)-(22,8)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── left: │ │ │ │ │ @ IntegerNode (location: (22,3)-(22,4)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── right: │ │ │ │ │ @ IntegerNode (location: (22,7)-(22,8)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 2 │ │ │ │ └── operator_loc: (22,5)-(22,6) = "|" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (23,2)-(23,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (23,2)-(23,6)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── in_loc: (22,0)-(22,2) = "in" │ │ │ └── then_loc: (22,9)-(22,13) = "then" │ │ ├── @ InNode (location: (24,0)-(25,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ CapturePatternNode (location: (24,3)-(24,9)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── value: │ │ │ │ │ @ IntegerNode (location: (24,3)-(24,4)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── target: │ │ │ │ │ @ LocalVariableTargetNode (location: (24,8)-(24,9)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :a │ │ │ │ │ └── depth: 0 │ │ │ │ └── operator_loc: (24,5)-(24,7) = "=>" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (25,2)-(25,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (25,2)-(25,6)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── in_loc: (24,0)-(24,2) = "in" │ │ │ └── then_loc: (24,10)-(24,14) = "then" │ │ ├── @ InNode (location: (26,0)-(27,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ PinnedVariableNode (location: (26,3)-(26,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── variable: │ │ │ │ │ @ LocalVariableReadNode (location: (26,4)-(26,5)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :x │ │ │ │ │ └── depth: 0 │ │ │ │ └── operator_loc: (26,3)-(26,4) = "^" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (27,2)-(27,6)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (27,2)-(27,6)) + │ │ │ │ └── flags: newline, static_literal │ │ │ ├── in_loc: (26,0)-(26,2) = "in" │ │ │ └── then_loc: (26,6)-(26,10) = "then" │ │ ├── @ InNode (location: (28,0)-(28,4)) + │ │ │ ├── flags: ∅ │ │ │ ├── pattern: │ │ │ │ @ IntegerNode (location: (28,3)-(28,4)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── statements: ∅ │ │ │ ├── in_loc: (28,0)-(28,2) = "in" │ │ │ └── then_loc: ∅ │ │ └── @ InNode (location: (29,0)-(30,6)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ IntegerNode (location: (29,3)-(29,4)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── statements: │ │ │ @ StatementsNode (location: (30,2)-(30,6)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ TrueNode (location: (30,2)-(30,6)) + │ │ │ └── flags: newline, static_literal │ │ ├── in_loc: (29,0)-(29,2) = "in" │ │ └── then_loc: (29,5)-(29,9) = "then" │ ├── consequent: │ │ @ ElseNode (location: (31,0)-(33,3)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (31,0)-(31,4) = "else" │ │ ├── statements: │ │ │ @ StatementsNode (location: (32,2)-(32,6)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ TrueNode (location: (32,2)-(32,6)) + │ │ │ └── flags: newline, static_literal │ │ └── end_keyword_loc: (33,0)-(33,3) = "end" │ ├── case_keyword_loc: (1,0)-(1,4) = "case" │ └── end_keyword_loc: (33,0)-(33,3) = "end" ├── @ CaseMatchNode (location: (34,0)-(36,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (34,5)-(34,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -369,28 +453,33 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (35,0)-(35,17)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ArrayPatternNode (location: (35,3)-(35,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── constant: │ │ │ │ @ ConstantReadNode (location: (35,3)-(35,4)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── name: :A │ │ │ ├── requireds: (length: 2) │ │ │ │ ├── @ IntegerNode (location: (35,5)-(35,6)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ └── @ IntegerNode (location: (35,8)-(35,9)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ ├── rest: │ │ │ │ @ SplatNode (location: (35,11)-(35,13)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── operator_loc: (35,11)-(35,12) = "*" │ │ │ │ └── expression: │ │ │ │ @ LocalVariableTargetNode (location: (35,12)-(35,13)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :a │ │ │ │ └── depth: 0 │ │ │ ├── posts: (length: 1) │ │ │ │ └── @ IntegerNode (location: (35,15)-(35,16)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 3 │ │ │ ├── opening_loc: (35,4)-(35,5) = "[" │ │ │ └── closing_loc: (35,16)-(35,17) = "]" @@ -401,6 +490,7 @@ │ ├── case_keyword_loc: (34,0)-(34,4) = "case" │ └── end_keyword_loc: (36,0)-(36,3) = "end" ├── @ CaseMatchNode (location: (37,0)-(40,3)) + │ ├── flags: newline │ ├── predicate: │ │ @ CallNode (location: (37,5)-(37,8)) │ │ ├── flags: variable_call, ignore_visibility @@ -414,29 +504,35 @@ │ │ └── block: ∅ │ ├── conditions: (length: 1) │ │ └── @ InNode (location: (38,0)-(38,4)) + │ │ ├── flags: ∅ │ │ ├── pattern: │ │ │ @ ConstantReadNode (location: (38,3)-(38,4)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── statements: ∅ │ │ ├── in_loc: (38,0)-(38,2) = "in" │ │ └── then_loc: ∅ │ ├── consequent: │ │ @ ElseNode (location: (39,0)-(40,3)) + │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (39,0)-(39,4) = "else" │ │ ├── statements: ∅ │ │ └── end_keyword_loc: (40,0)-(40,3) = "end" │ ├── case_keyword_loc: (37,0)-(37,4) = "case" │ └── end_keyword_loc: (40,0)-(40,3) = "end" └── @ MatchPredicateNode (location: (41,0)-(41,8)) + ├── flags: newline ├── value: │ @ IntegerNode (location: (41,0)-(41,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── pattern: │ @ ArrayPatternNode (location: (41,5)-(41,8)) + │ ├── flags: ∅ │ ├── constant: ∅ │ ├── requireds: (length: 1) │ │ └── @ LocalVariableTargetNode (location: (41,6)-(41,7)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── rest: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/pragma.txt b/test/prism/snapshots/unparser/corpus/literal/pragma.txt index 08e386b872b..2a82f0c860e 100644 --- a/test/prism/snapshots/unparser/corpus/literal/pragma.txt +++ b/test/prism/snapshots/unparser/corpus/literal/pragma.txt @@ -1,15 +1,19 @@ @ ProgramNode (location: (1,0)-(4,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,7)) + ├── flags: ∅ └── body: (length: 4) ├── @ SourceEncodingNode (location: (1,0)-(1,12)) + │ └── flags: newline, static_literal ├── @ SourceFileNode (location: (2,0)-(2,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ └── filepath: "unparser/corpus/literal/pragma.txt" ├── @ SourceLineNode (location: (3,0)-(3,8)) + │ └── flags: newline, static_literal └── @ CallNode (location: (4,0)-(4,7)) - ├── flags: variable_call, ignore_visibility + ├── flags: newline, variable_call, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :__dir__ diff --git a/test/prism/snapshots/unparser/corpus/literal/range.txt b/test/prism/snapshots/unparser/corpus/literal/range.txt index ab015d04fce..d6bbe34b343 100644 --- a/test/prism/snapshots/unparser/corpus/literal/range.txt +++ b/test/prism/snapshots/unparser/corpus/literal/range.txt @@ -1,55 +1,61 @@ @ ProgramNode (location: (1,0)-(4,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,5)) + ├── flags: ∅ └── body: (length: 4) ├── @ ParenthesesNode (location: (1,0)-(1,5)) + │ ├── flags: newline │ ├── body: │ │ @ StatementsNode (location: (1,1)-(1,4)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RangeNode (location: (1,1)-(1,4)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline, static_literal │ │ ├── left: │ │ │ @ IntegerNode (location: (1,1)-(1,2)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (1,2)-(1,4) = ".." │ ├── opening_loc: (1,0)-(1,1) = "(" │ └── closing_loc: (1,4)-(1,5) = ")" ├── @ RangeNode (location: (2,0)-(2,4)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── left: │ │ @ IntegerNode (location: (2,0)-(2,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── right: │ │ @ IntegerNode (location: (2,3)-(2,4)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── operator_loc: (2,1)-(2,3) = ".." ├── @ ParenthesesNode (location: (3,0)-(3,6)) + │ ├── flags: newline │ ├── body: │ │ @ StatementsNode (location: (3,1)-(3,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RangeNode (location: (3,1)-(3,5)) - │ │ ├── flags: exclude_end + │ │ ├── flags: newline, static_literal, exclude_end │ │ ├── left: │ │ │ @ IntegerNode (location: (3,1)-(3,2)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── right: ∅ │ │ └── operator_loc: (3,2)-(3,5) = "..." │ ├── opening_loc: (3,0)-(3,1) = "(" │ └── closing_loc: (3,5)-(3,6) = ")" └── @ RangeNode (location: (4,0)-(4,5)) - ├── flags: exclude_end + ├── flags: newline, static_literal, exclude_end ├── left: │ @ IntegerNode (location: (4,0)-(4,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── right: │ @ IntegerNode (location: (4,4)-(4,5)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 └── operator_loc: (4,1)-(4,4) = "..." diff --git a/test/prism/snapshots/unparser/corpus/literal/rescue.txt b/test/prism/snapshots/unparser/corpus/literal/rescue.txt index d3c9d62166e..78801c1d90a 100644 --- a/test/prism/snapshots/unparser/corpus/literal/rescue.txt +++ b/test/prism/snapshots/unparser/corpus/literal/rescue.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(3,27)) +├── flags: ∅ ├── locals: [:x] └── statements: @ StatementsNode (location: (1,0)-(3,27)) + ├── flags: ∅ └── body: (length: 3) ├── @ RescueModifierNode (location: (1,0)-(1,14)) + │ ├── flags: newline │ ├── expression: │ │ @ CallNode (location: (1,0)-(1,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -28,6 +31,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ RescueModifierNode (location: (2,0)-(2,21)) + │ ├── flags: newline │ ├── expression: │ │ @ CallNode (location: (2,0)-(2,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -59,15 +63,19 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ LocalVariableWriteNode (location: (3,0)-(3,27)) + ├── flags: newline ├── name: :x ├── depth: 0 ├── name_loc: (3,0)-(3,1) = "x" ├── value: │ @ ParenthesesNode (location: (3,4)-(3,27)) + │ ├── flags: ∅ │ ├── body: │ │ @ StatementsNode (location: (3,5)-(3,26)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (3,5)-(3,26)) + │ │ ├── flags: newline │ │ ├── expression: │ │ │ @ CallNode (location: (3,5)-(3,8)) │ │ │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/unparser/corpus/literal/send.txt b/test/prism/snapshots/unparser/corpus/literal/send.txt index 3fd7f719a1d..56d13740294 100644 --- a/test/prism/snapshots/unparser/corpus/literal/send.txt +++ b/test/prism/snapshots/unparser/corpus/literal/send.txt @@ -1,31 +1,42 @@ @ ProgramNode (location: (1,0)-(84,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(84,7)) + ├── flags: ∅ └── body: (length: 62) ├── @ ModuleNode (location: (1,0)-(3,3)) + │ ├── flags: newline │ ├── locals: [:foo, :a, :_] │ ├── module_keyword_loc: (1,0)-(1,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (1,7)-(1,8)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── body: │ │ @ StatementsNode (location: (2,2)-(2,22)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableOrWriteNode (location: (2,2)-(2,22)) + │ │ ├── flags: newline │ │ ├── name_loc: (2,2)-(2,5) = "foo" │ │ ├── operator_loc: (2,6)-(2,9) = "||=" │ │ ├── value: │ │ │ @ ParenthesesNode (location: (2,10)-(2,22)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (2,11)-(2,21)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ MultiWriteNode (location: (2,11)-(2,21)) + │ │ │ │ ├── flags: newline │ │ │ │ ├── lefts: (length: 2) │ │ │ │ │ ├── @ LocalVariableTargetNode (location: (2,12)-(2,13)) + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── name: :a │ │ │ │ │ │ └── depth: 0 │ │ │ │ │ └── @ LocalVariableTargetNode (location: (2,15)-(2,16)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── name: :_ │ │ │ │ │ └── depth: 0 │ │ │ │ ├── rest: ∅ @@ -51,27 +62,32 @@ │ ├── end_keyword_loc: (3,0)-(3,3) = "end" │ └── name: :A ├── @ ModuleNode (location: (5,0)-(8,3)) + │ ├── flags: newline │ ├── locals: [:local] │ ├── module_keyword_loc: (5,0)-(5,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (5,7)-(5,8)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── body: │ │ @ StatementsNode (location: (6,2)-(7,11)) + │ │ ├── flags: ∅ │ │ └── body: (length: 2) │ │ ├── @ LocalVariableWriteNode (location: (6,2)-(6,11)) + │ │ │ ├── flags: newline │ │ │ ├── name: :local │ │ │ ├── depth: 0 │ │ │ ├── name_loc: (6,2)-(6,7) = "local" │ │ │ ├── value: │ │ │ │ @ IntegerNode (location: (6,10)-(6,11)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── operator_loc: (6,8)-(6,9) = "=" │ │ └── @ CallNode (location: (7,2)-(7,11)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ LocalVariableReadNode (location: (7,2)-(7,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :local │ │ │ └── depth: 0 │ │ ├── call_operator_loc: (7,7)-(7,8) = "." @@ -84,13 +100,15 @@ │ ├── end_keyword_loc: (8,0)-(8,3) = "end" │ └── name: :A ├── @ CallNode (location: (9,0)-(10,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ClassNode (location: (9,0)-(10,3)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── class_keyword_loc: (9,0)-(9,5) = "class" │ │ ├── constant_path: │ │ │ @ ConstantReadNode (location: (9,6)-(9,7)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── inheritance_operator_loc: ∅ │ │ ├── superclass: ∅ @@ -105,13 +123,15 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (11,0)-(12,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ModuleNode (location: (11,0)-(12,3)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── module_keyword_loc: (11,0)-(11,6) = "module" │ │ ├── constant_path: │ │ │ @ ConstantReadNode (location: (11,7)-(11,8)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :A │ │ ├── body: ∅ │ │ ├── end_keyword_loc: (12,0)-(12,3) = "end" @@ -124,13 +144,15 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (13,0)-(15,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ BeginNode (location: (13,0)-(15,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: (13,0)-(13,5) = "begin" │ │ ├── statements: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (14,0)-(14,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (14,0)-(14,6) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ @@ -148,15 +170,19 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (16,0)-(19,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CaseNode (location: (16,0)-(19,3)) + │ │ ├── flags: ∅ │ │ ├── predicate: │ │ │ @ ParenthesesNode (location: (16,5)-(17,10)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (16,6)-(17,9)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 2) │ │ │ │ ├── @ DefNode (location: (16,6)-(17,3)) + │ │ │ │ │ ├── flags: newline │ │ │ │ │ ├── name: :foo │ │ │ │ │ ├── name_loc: (16,10)-(16,13) = "foo" │ │ │ │ │ ├── receiver: ∅ @@ -170,7 +196,7 @@ │ │ │ │ │ ├── equal_loc: ∅ │ │ │ │ │ └── end_keyword_loc: (17,0)-(17,3) = "end" │ │ │ │ └── @ SymbolNode (location: (17,5)-(17,9)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (17,5)-(17,6) = ":" │ │ │ │ ├── value_loc: (17,6)-(17,9) = "bar" │ │ │ │ ├── closing_loc: ∅ @@ -179,6 +205,7 @@ │ │ │ └── closing_loc: (17,9)-(17,10) = ")" │ │ ├── conditions: (length: 1) │ │ │ └── @ WhenNode (location: (18,0)-(18,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (18,0)-(18,4) = "when" │ │ │ ├── conditions: (length: 1) │ │ │ │ └── @ CallNode (location: (18,5)-(18,8)) @@ -204,9 +231,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (20,0)-(22,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CaseNode (location: (20,0)-(22,3)) + │ │ ├── flags: ∅ │ │ ├── predicate: │ │ │ @ CallNode (location: (20,5)-(20,8)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -220,6 +248,7 @@ │ │ │ └── block: ∅ │ │ ├── conditions: (length: 1) │ │ │ └── @ WhenNode (location: (21,0)-(21,8)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (21,0)-(21,4) = "when" │ │ │ ├── conditions: (length: 1) │ │ │ │ └── @ CallNode (location: (21,5)-(21,8)) @@ -245,14 +274,16 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (23,0)-(24,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ SingletonClassNode (location: (23,0)-(24,3)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── class_keyword_loc: (23,0)-(23,5) = "class" │ │ ├── operator_loc: (23,6)-(23,8) = "<<" │ │ ├── expression: │ │ │ @ SelfNode (location: (23,9)-(23,13)) + │ │ │ └── flags: ∅ │ │ ├── body: ∅ │ │ └── end_keyword_loc: (24,0)-(24,3) = "end" │ ├── call_operator_loc: (24,3)-(24,4) = "." @@ -263,13 +294,15 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (25,0)-(26,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ DefNode (location: (25,0)-(26,3)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ ├── name_loc: (25,9)-(25,12) = "foo" │ │ ├── receiver: │ │ │ @ SelfNode (location: (25,4)-(25,8)) + │ │ │ └── flags: ∅ │ │ ├── parameters: ∅ │ │ ├── body: ∅ │ │ ├── locals: [] @@ -287,9 +320,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (27,0)-(28,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ DefNode (location: (27,0)-(28,3)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ ├── name_loc: (27,4)-(27,7) = "foo" │ │ ├── receiver: ∅ @@ -310,7 +344,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (29,0)-(30,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ UntilNode (location: (29,0)-(30,3)) │ │ ├── flags: ∅ @@ -336,7 +370,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (31,0)-(32,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ WhileNode (location: (31,0)-(32,3)) │ │ ├── flags: ∅ @@ -362,7 +396,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (33,0)-(34,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (33,0)-(34,1)) │ │ ├── flags: ignore_visibility @@ -375,6 +409,7 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (33,5)-(34,1)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: ∅ @@ -388,9 +423,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (35,0)-(36,7)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IfNode (location: (35,0)-(36,3)) + │ │ ├── flags: newline │ │ ├── if_keyword_loc: (35,0)-(35,2) = "if" │ │ ├── predicate: │ │ │ @ CallNode (location: (35,3)-(35,6)) @@ -415,17 +451,19 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (37,0)-(37,19)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ParenthesesNode (location: (37,0)-(37,15)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (37,1)-(37,14)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (37,1)-(37,14)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ RegularExpressionNode (location: (37,1)-(37,6)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (37,1)-(37,2) = "/" │ │ │ │ ├── content_loc: (37,2)-(37,5) = "bar" │ │ │ │ ├── closing_loc: (37,5)-(37,6) = "/" @@ -439,7 +477,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ SymbolNode (location: (37,10)-(37,14)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (37,10)-(37,11) = ":" │ │ │ │ ├── value_loc: (37,11)-(37,14) = "foo" │ │ │ │ ├── closing_loc: ∅ @@ -456,21 +494,23 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (38,0)-(38,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ParenthesesNode (location: (38,0)-(38,6)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (38,1)-(38,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ RangeNode (location: (38,1)-(38,5)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline, static_literal │ │ │ ├── left: │ │ │ │ @ IntegerNode (location: (38,1)-(38,2)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── right: │ │ │ │ @ IntegerNode (location: (38,4)-(38,5)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 2 │ │ │ └── operator_loc: (38,2)-(38,4) = ".." │ │ ├── opening_loc: (38,0)-(38,1) = "(" @@ -483,14 +523,16 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (39,0)-(39,18)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ParenthesesNode (location: (39,0)-(39,14)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (39,1)-(39,13)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (39,1)-(39,13)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ CallNode (location: (39,1)-(39,4)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -511,7 +553,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ RegularExpressionNode (location: (39,8)-(39,13)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: (39,8)-(39,9) = "/" │ │ │ │ ├── content_loc: (39,9)-(39,12) = "bar" │ │ │ │ ├── closing_loc: (39,12)-(39,13) = "/" @@ -528,10 +570,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (40,0)-(40,13)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RegularExpressionNode (location: (40,0)-(40,5)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (40,0)-(40,1) = "/" │ │ ├── content_loc: (40,1)-(40,4) = "bar" │ │ ├── closing_loc: (40,4)-(40,5) = "/" @@ -545,7 +587,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SymbolNode (location: (40,9)-(40,13)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (40,9)-(40,10) = ":" │ │ ├── value_loc: (40,10)-(40,13) = "foo" │ │ ├── closing_loc: ∅ @@ -553,10 +595,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (41,0)-(41,12)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ RegularExpressionNode (location: (41,0)-(41,5)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (41,0)-(41,1) = "/" │ │ ├── content_loc: (41,1)-(41,4) = "bar" │ │ ├── closing_loc: (41,4)-(41,5) = "/" @@ -582,17 +624,17 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ RangeNode (location: (42,0)-(42,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── left: │ │ @ IntegerNode (location: (42,0)-(42,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── right: │ │ @ CallNode (location: (42,3)-(42,8)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ IntegerNode (location: (42,3)-(42,4)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ ├── call_operator_loc: (42,4)-(42,5) = "." │ │ ├── name: :max @@ -603,9 +645,10 @@ │ │ └── block: ∅ │ └── operator_loc: (42,1)-(42,3) = ".." ├── @ CallNode (location: (43,0)-(43,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ConstantReadNode (location: (43,0)-(43,1)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── call_operator_loc: (43,1)-(43,2) = "." │ ├── name: :foo @@ -615,7 +658,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (44,0)-(44,5)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :FOO @@ -625,7 +668,7 @@ │ ├── closing_loc: (44,4)-(44,5) = ")" │ └── block: ∅ ├── @ CallNode (location: (45,0)-(45,4)) - │ ├── flags: safe_navigation + │ ├── flags: newline, safe_navigation │ ├── receiver: │ │ @ CallNode (location: (45,0)-(45,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -645,7 +688,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (46,0)-(46,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (46,0)-(46,1)) │ │ ├── flags: variable_call, ignore_visibility @@ -665,7 +708,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (47,0)-(47,3)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -675,7 +718,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (48,0)-(48,18)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (48,0)-(48,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -696,11 +739,13 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ParenthesesNode (location: (48,7)-(48,18)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (48,8)-(48,17)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (48,8)-(48,17)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ CallNode (location: (48,8)-(48,11)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -737,7 +782,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (49,0)-(49,12)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (49,0)-(49,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -758,7 +803,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ RegularExpressionNode (location: (49,7)-(49,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (49,7)-(49,8) = "/" │ │ ├── content_loc: (49,8)-(49,11) = "bar" │ │ ├── closing_loc: (49,11)-(49,12) = "/" @@ -766,7 +811,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (50,0)-(50,17)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -776,12 +821,16 @@ │ ├── closing_loc: (50,17)-(50,18) = ")" │ └── block: │ @ BlockArgumentNode (location: (50,4)-(50,17)) + │ ├── flags: ∅ │ ├── expression: │ │ @ ParenthesesNode (location: (50,5)-(50,17)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (50,6)-(50,16)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ OrNode (location: (50,6)-(50,16)) + │ │ │ ├── flags: newline │ │ │ ├── left: │ │ │ │ @ CallNode (location: (50,6)-(50,9)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -809,7 +858,7 @@ │ │ └── closing_loc: (50,16)-(50,17) = ")" │ └── operator_loc: (50,4)-(50,5) = "&" ├── @ CallNode (location: (51,0)-(51,10)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -819,6 +868,7 @@ │ ├── closing_loc: (51,10)-(51,11) = ")" │ └── block: │ @ BlockArgumentNode (location: (51,4)-(51,10)) + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (51,5)-(51,10)) │ │ ├── flags: variable_call, ignore_visibility @@ -832,7 +882,7 @@ │ │ └── block: ∅ │ └── operator_loc: (51,4)-(51,5) = "&" ├── @ CallNode (location: (52,0)-(52,17)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -843,6 +893,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (52,4)-(52,9)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (52,4)-(52,5) = "*" │ │ └── expression: │ │ @ CallNode (location: (52,5)-(52,9)) @@ -858,6 +909,7 @@ │ ├── closing_loc: (52,17)-(52,18) = ")" │ └── block: │ @ BlockArgumentNode (location: (52,11)-(52,17)) + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (52,12)-(52,17)) │ │ ├── flags: variable_call, ignore_visibility @@ -871,7 +923,7 @@ │ │ └── block: ∅ │ └── operator_loc: (52,11)-(52,12) = "&" ├── @ CallNode (location: (53,0)-(53,15)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -882,6 +934,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (53,4)-(53,14)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (53,4)-(53,5) = "*" │ │ └── expression: │ │ @ CallNode (location: (53,5)-(53,14)) @@ -897,7 +950,7 @@ │ ├── closing_loc: (53,14)-(53,15) = ")" │ └── block: ∅ ├── @ CallNode (location: (54,0)-(54,9)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -908,15 +961,15 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ IntegerNode (location: (54,4)-(54,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (54,7)-(54,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: (54,8)-(54,9) = ")" │ └── block: ∅ ├── @ CallNode (location: (55,0)-(55,8)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -939,7 +992,7 @@ │ ├── closing_loc: (55,7)-(55,8) = ")" │ └── block: ∅ ├── @ CallNode (location: (56,0)-(56,15)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -960,6 +1013,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ SplatNode (location: (56,9)-(56,14)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (56,9)-(56,10) = "*" │ │ └── expression: │ │ @ CallNode (location: (56,10)-(56,14)) @@ -975,7 +1029,7 @@ │ ├── closing_loc: (56,14)-(56,15) = ")" │ └── block: ∅ ├── @ CallNode (location: (57,0)-(57,17)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1007,7 +1061,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ RegularExpressionNode (location: (57,11)-(57,16)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (57,11)-(57,12) = "/" │ │ │ ├── content_loc: (57,12)-(57,15) = "bar" │ │ │ ├── closing_loc: (57,15)-(57,16) = "/" @@ -1017,7 +1071,7 @@ │ ├── closing_loc: (57,16)-(57,17) = ")" │ └── block: ∅ ├── @ CallNode (location: (58,0)-(58,13)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (58,0)-(58,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1037,6 +1091,7 @@ │ ├── closing_loc: (58,12)-(58,13) = ")" │ └── block: │ @ BlockArgumentNode (location: (58,8)-(58,12)) + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (58,9)-(58,12)) │ │ ├── flags: variable_call, ignore_visibility @@ -1050,7 +1105,7 @@ │ │ └── block: ∅ │ └── operator_loc: (58,8)-(58,9) = "&" ├── @ CallNode (location: (59,0)-(59,26)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (59,0)-(59,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1071,6 +1126,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 3) │ │ ├── @ SplatNode (location: (59,8)-(59,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (59,8)-(59,9) = "*" │ │ │ └── expression: │ │ │ @ CallNode (location: (59,9)-(59,13)) @@ -1094,6 +1150,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ SplatNode (location: (59,20)-(59,25)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (59,20)-(59,21) = "*" │ │ └── expression: │ │ @ CallNode (location: (59,21)-(59,25)) @@ -1109,7 +1166,7 @@ │ ├── closing_loc: (59,25)-(59,26) = ")" │ └── block: ∅ ├── @ CallNode (location: (60,0)-(60,14)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (60,0)-(60,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1130,6 +1187,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (60,8)-(60,13)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (60,8)-(60,9) = "*" │ │ └── expression: │ │ @ CallNode (location: (60,9)-(60,13)) @@ -1145,7 +1203,7 @@ │ ├── closing_loc: (60,13)-(60,14) = ")" │ └── block: ∅ ├── @ CallNode (location: (61,0)-(61,19)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (61,0)-(61,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1166,6 +1224,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ SplatNode (location: (61,8)-(61,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (61,8)-(61,9) = "*" │ │ │ └── expression: │ │ │ @ CallNode (location: (61,9)-(61,13)) @@ -1191,7 +1250,7 @@ │ ├── closing_loc: (61,18)-(61,19) = ")" │ └── block: ∅ ├── @ CallNode (location: (62,0)-(62,19)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (62,0)-(62,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1212,7 +1271,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SymbolNode (location: (62,8)-(62,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (62,8)-(62,9) = ":" │ │ ├── value_loc: (62,9)-(62,12) = "baz" │ │ ├── closing_loc: ∅ @@ -1220,6 +1279,7 @@ │ ├── closing_loc: (62,18)-(62,19) = ")" │ └── block: │ @ BlockArgumentNode (location: (62,14)-(62,18)) + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (62,15)-(62,18)) │ │ ├── flags: variable_call, ignore_visibility @@ -1233,7 +1293,7 @@ │ │ └── block: ∅ │ └── operator_loc: (62,14)-(62,15) = "&" ├── @ CallNode (location: (63,0)-(63,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (63,0)-(63,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1257,9 +1317,10 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (63,8)-(63,16)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (63,8)-(63,12)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (63,8)-(63,11) = "baz" │ │ │ ├── closing_loc: (63,11)-(63,12) = ":" @@ -1279,7 +1340,7 @@ │ ├── closing_loc: (63,16)-(63,17) = ")" │ └── block: ∅ ├── @ CallNode (location: (64,0)-(64,26)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (64,0)-(64,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1313,9 +1374,10 @@ │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (64,13)-(64,25)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ StringNode (location: (64,13)-(64,18)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: (64,13)-(64,14) = "\"" │ │ │ ├── content_loc: (64,14)-(64,17) = "baz" │ │ │ ├── closing_loc: (64,17)-(64,18) = "\"" @@ -1335,7 +1397,7 @@ │ ├── closing_loc: (64,25)-(64,26) = ")" │ └── block: ∅ ├── @ CallNode (location: (65,0)-(65,19)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (65,0)-(65,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1366,6 +1428,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ SplatNode (location: (65,13)-(65,18)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (65,13)-(65,14) = "*" │ │ └── expression: │ │ @ CallNode (location: (65,14)-(65,18)) @@ -1381,7 +1444,7 @@ │ ├── closing_loc: (65,18)-(65,19) = ")" │ └── block: ∅ ├── @ CallNode (location: (66,0)-(66,27)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (66,0)-(66,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1412,6 +1475,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ SplatNode (location: (66,13)-(66,18)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (66,13)-(66,14) = "*" │ │ └── expression: │ │ @ CallNode (location: (66,14)-(66,18)) @@ -1427,6 +1491,7 @@ │ ├── closing_loc: (66,26)-(66,27) = ")" │ └── block: │ @ BlockArgumentNode (location: (66,20)-(66,26)) + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (66,21)-(66,26)) │ │ ├── flags: variable_call, ignore_visibility @@ -1440,7 +1505,7 @@ │ │ └── block: ∅ │ └── operator_loc: (66,20)-(66,21) = "&" ├── @ CallNode (location: (67,0)-(67,16)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (67,0)-(67,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1471,13 +1536,14 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ HashNode (location: (67,13)-(67,15)) + │ │ ├── flags: static_literal │ │ ├── opening_loc: (67,13)-(67,14) = "{" │ │ ├── elements: (length: 0) │ │ └── closing_loc: (67,14)-(67,15) = "}" │ ├── closing_loc: (67,15)-(67,16) = ")" │ └── block: ∅ ├── @ CallNode (location: (68,0)-(68,26)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (68,0)-(68,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1498,12 +1564,14 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ HashNode (location: (68,8)-(68,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (68,8)-(68,9) = "{" │ │ │ ├── elements: (length: 1) │ │ │ │ └── @ AssocNode (location: (68,10)-(68,18)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── key: │ │ │ │ │ @ SymbolNode (location: (68,10)-(68,14)) - │ │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── value_loc: (68,10)-(68,13) = "foo" │ │ │ │ │ ├── closing_loc: (68,13)-(68,14) = ":" @@ -1534,7 +1602,7 @@ │ ├── closing_loc: (68,25)-(68,26) = ")" │ └── block: ∅ ├── @ CallNode (location: (69,0)-(69,12)) - │ ├── flags: attribute_write + │ ├── flags: newline, attribute_write │ ├── receiver: │ │ @ CallNode (location: (69,0)-(69,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1555,7 +1623,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SymbolNode (location: (69,8)-(69,12)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (69,8)-(69,9) = ":" │ │ ├── value_loc: (69,9)-(69,12) = "baz" │ │ ├── closing_loc: ∅ @@ -1563,7 +1631,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (70,0)-(70,9)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -1577,9 +1645,10 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (70,4)-(70,8)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (70,4)-(70,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (70,4)-(70,5) = "a" │ │ │ ├── closing_loc: (70,5)-(70,6) = ":" @@ -1599,7 +1668,7 @@ │ ├── closing_loc: (70,8)-(70,9) = ")" │ └── block: ∅ ├── @ CallNode (location: (71,0)-(71,11)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (71,0)-(71,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1623,9 +1692,10 @@ │ │ ├── flags: symbol_keys │ │ └── elements: (length: 1) │ │ └── @ AssocNode (location: (71,6)-(71,10)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (71,6)-(71,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (71,6)-(71,7) = "a" │ │ │ ├── closing_loc: (71,7)-(71,8) = ":" @@ -1645,7 +1715,7 @@ │ ├── closing_loc: (71,10)-(71,11) = ")" │ └── block: ∅ ├── @ CallNode (location: (72,0)-(72,10)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (72,0)-(72,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1669,6 +1739,7 @@ │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocSplatNode (location: (72,6)-(72,9)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (72,8)-(72,9)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -1684,7 +1755,7 @@ │ ├── closing_loc: (72,9)-(72,10) = ")" │ └── block: ∅ ├── @ CallNode (location: (73,0)-(73,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (73,0)-(73,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1705,6 +1776,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (73,4)-(73,8)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (73,4)-(73,5) = "*" │ │ └── expression: │ │ @ CallNode (location: (73,5)-(73,8)) @@ -1720,7 +1792,7 @@ │ ├── closing_loc: (73,8)-(73,9) = "]" │ └── block: ∅ ├── @ CallNode (location: (74,0)-(74,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (74,0)-(74,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1741,15 +1813,15 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ IntegerNode (location: (74,4)-(74,5)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── @ IntegerNode (location: (74,7)-(74,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── closing_loc: (74,8)-(74,9) = "]" │ └── block: ∅ ├── @ CallNode (location: (75,0)-(75,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (75,0)-(75,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -1769,9 +1841,10 @@ │ ├── closing_loc: (75,4)-(75,5) = "]" │ └── block: ∅ ├── @ CallNode (location: (76,0)-(76,8)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: │ │ @ SelfNode (location: (76,0)-(76,4)) + │ │ └── flags: ∅ │ ├── call_operator_loc: (76,4)-(76,5) = "." │ ├── name: :foo │ ├── message_loc: (76,5)-(76,8) = "foo" @@ -1780,9 +1853,10 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (77,0)-(77,13)) - │ ├── flags: attribute_write, ignore_visibility + │ ├── flags: newline, attribute_write, ignore_visibility │ ├── receiver: │ │ @ SelfNode (location: (77,0)-(77,4)) + │ │ └── flags: ∅ │ ├── call_operator_loc: (77,4)-(77,5) = "." │ ├── name: :foo= │ ├── message_loc: (77,5)-(77,8) = "foo" @@ -1792,7 +1866,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SymbolNode (location: (77,9)-(77,13)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (77,9)-(77,10) = ":" │ │ ├── value_loc: (77,10)-(77,13) = "bar" │ │ ├── closing_loc: ∅ @@ -1800,14 +1874,16 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (78,0)-(78,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ParenthesesNode (location: (78,0)-(78,7)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (78,1)-(78,6)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (78,1)-(78,6)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ CallNode (location: (78,1)-(78,2)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -1850,11 +1926,13 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ParenthesesNode (location: (78,10)-(78,17)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (78,11)-(78,16)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (78,11)-(78,16)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ CallNode (location: (78,11)-(78,12)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -1891,14 +1969,16 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (79,0)-(79,19)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ParenthesesNode (location: (79,0)-(79,7)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (79,1)-(79,6)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (79,1)-(79,6)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ CallNode (location: (79,1)-(79,2)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -1986,14 +2066,16 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (80,0)-(80,17)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ParenthesesNode (location: (80,0)-(80,7)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (80,1)-(80,6)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (80,1)-(80,6)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ CallNode (location: (80,1)-(80,2)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -2057,6 +2139,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ SplatNode (location: (80,14)-(80,16)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (80,14)-(80,15) = "*" │ │ │ └── expression: │ │ │ @ CallNode (location: (80,15)-(80,16)) @@ -2074,7 +2157,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (81,0)-(81,8)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :x @@ -2088,6 +2171,7 @@ │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocSplatNode (location: (81,2)-(81,7)) + │ │ ├── flags: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (81,4)-(81,7)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -2103,7 +2187,7 @@ │ ├── closing_loc: (81,7)-(81,8) = ")" │ └── block: ∅ ├── @ CallNode (location: (82,0)-(82,6)) - │ ├── flags: safe_navigation + │ ├── flags: newline, safe_navigation │ ├── receiver: │ │ @ CallNode (location: (82,0)-(82,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2123,7 +2207,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (83,0)-(83,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (83,0)-(83,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -2156,7 +2240,7 @@ │ ├── closing_loc: (83,7)-(83,8) = ")" │ └── block: ∅ └── @ CallNode (location: (84,0)-(84,7)) - ├── flags: safe_navigation + ├── flags: newline, safe_navigation ├── receiver: │ @ CallNode (location: (84,0)-(84,1)) │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/unparser/corpus/literal/since/27.txt b/test/prism/snapshots/unparser/corpus/literal/since/27.txt index 60edc18604f..e4cda312f83 100644 --- a/test/prism/snapshots/unparser/corpus/literal/since/27.txt +++ b/test/prism/snapshots/unparser/corpus/literal/since/27.txt @@ -1,23 +1,29 @@ @ ProgramNode (location: (1,0)-(4,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,5)) + ├── flags: ∅ └── body: (length: 2) ├── @ LambdaNode (location: (1,0)-(3,1)) + │ ├── flags: newline │ ├── locals: [:_1, :_2] │ ├── operator_loc: (1,0)-(1,2) = "->" │ ├── opening_loc: (1,3)-(1,4) = "{" │ ├── closing_loc: (3,0)-(3,1) = "}" │ ├── parameters: │ │ @ NumberedParametersNode (location: (1,0)-(3,1)) + │ │ ├── flags: ∅ │ │ └── maximum: 2 │ └── body: │ @ StatementsNode (location: (2,2)-(2,9)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (2,2)-(2,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (2,2)-(2,4)) + │ │ ├── flags: ∅ │ │ ├── name: :_1 │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -29,20 +35,23 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ LocalVariableReadNode (location: (2,7)-(2,9)) + │ │ ├── flags: ∅ │ │ ├── name: :_2 │ │ └── depth: 0 │ ├── closing_loc: ∅ │ └── block: ∅ └── @ ParenthesesNode (location: (4,0)-(4,5)) + ├── flags: newline ├── body: │ @ StatementsNode (location: (4,1)-(4,4)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RangeNode (location: (4,1)-(4,4)) - │ ├── flags: ∅ + │ ├── flags: newline, static_literal │ ├── left: ∅ │ ├── right: │ │ @ IntegerNode (location: (4,3)-(4,4)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ └── operator_loc: (4,1)-(4,3) = ".." ├── opening_loc: (4,0)-(4,1) = "(" diff --git a/test/prism/snapshots/unparser/corpus/literal/since/30.txt b/test/prism/snapshots/unparser/corpus/literal/since/30.txt index 300dd869f5a..0102b2c97b4 100644 --- a/test/prism/snapshots/unparser/corpus/literal/since/30.txt +++ b/test/prism/snapshots/unparser/corpus/literal/since/30.txt @@ -1,18 +1,23 @@ @ ProgramNode (location: (1,0)-(4,17)) +├── flags: ∅ ├── locals: [:a, :foo] └── statements: @ StatementsNode (location: (1,0)-(4,17)) + ├── flags: ∅ └── body: (length: 4) ├── @ MatchRequiredNode (location: (1,0)-(1,8)) + │ ├── flags: newline │ ├── value: │ │ @ IntegerNode (location: (1,0)-(1,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── pattern: │ │ @ ArrayPatternNode (location: (1,5)-(1,8)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ LocalVariableTargetNode (location: (1,6)-(1,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ ├── rest: ∅ @@ -21,16 +26,19 @@ │ │ └── closing_loc: (1,7)-(1,8) = "]" │ └── operator_loc: (1,2)-(1,4) = "=>" ├── @ MatchRequiredNode (location: (2,0)-(2,8)) + │ ├── flags: newline │ ├── value: │ │ @ IntegerNode (location: (2,0)-(2,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── pattern: │ │ @ ArrayPatternNode (location: (2,5)-(2,8)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── requireds: (length: 0) │ │ ├── rest: │ │ │ @ SplatNode (location: (2,6)-(2,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (2,6)-(2,7) = "*" │ │ │ └── expression: ∅ │ │ ├── posts: (length: 0) @@ -38,49 +46,59 @@ │ │ └── closing_loc: (2,7)-(2,8) = "]" │ └── operator_loc: (2,2)-(2,4) = "=>" ├── @ MatchPredicateNode (location: (3,0)-(3,15)) + │ ├── flags: newline │ ├── value: │ │ @ IntegerNode (location: (3,0)-(3,1)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── pattern: │ │ @ FindPatternNode (location: (3,5)-(3,15)) + │ │ ├── flags: ∅ │ │ ├── constant: ∅ │ │ ├── left: │ │ │ @ SplatNode (location: (3,6)-(3,7)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (3,6)-(3,7) = "*" │ │ │ └── expression: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ IntegerNode (location: (3,9)-(3,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 42 │ │ ├── right: │ │ │ @ SplatNode (location: (3,13)-(3,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (3,13)-(3,14) = "*" │ │ │ └── expression: ∅ │ │ ├── opening_loc: (3,5)-(3,6) = "[" │ │ └── closing_loc: (3,14)-(3,15) = "]" │ └── operator_loc: (3,2)-(3,4) = "in" └── @ MatchPredicateNode (location: (4,0)-(4,17)) + ├── flags: newline ├── value: │ @ IntegerNode (location: (4,0)-(4,1)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 1 ├── pattern: │ @ FindPatternNode (location: (4,5)-(4,17)) + │ ├── flags: ∅ │ ├── constant: ∅ │ ├── left: │ │ @ SplatNode (location: (4,6)-(4,7)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (4,6)-(4,7) = "*" │ │ └── expression: ∅ │ ├── requireds: (length: 1) │ │ └── @ LocalVariableTargetNode (location: (4,9)-(4,10)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── right: │ │ @ SplatNode (location: (4,12)-(4,16)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (4,12)-(4,13) = "*" │ │ └── expression: │ │ @ LocalVariableTargetNode (location: (4,13)-(4,16)) + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ └── depth: 0 │ ├── opening_loc: (4,5)-(4,6) = "[" diff --git a/test/prism/snapshots/unparser/corpus/literal/since/31.txt b/test/prism/snapshots/unparser/corpus/literal/since/31.txt index 142a56ae832..81bcd9662bd 100644 --- a/test/prism/snapshots/unparser/corpus/literal/since/31.txt +++ b/test/prism/snapshots/unparser/corpus/literal/since/31.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(7,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(7,3)) + ├── flags: ∅ └── body: (length: 2) ├── @ DefNode (location: (1,0)-(3,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (1,4)-(1,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,8)-(1,9)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -23,9 +27,10 @@ │ │ └── operator_loc: (1,8)-(1,9) = "&" │ ├── body: │ │ @ StatementsNode (location: (2,2)-(2,7)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (2,2)-(2,7)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -35,6 +40,7 @@ │ │ ├── closing_loc: (2,7)-(2,8) = ")" │ │ └── block: │ │ @ BlockArgumentNode (location: (2,6)-(2,7)) + │ │ ├── flags: ∅ │ │ ├── expression: ∅ │ │ └── operator_loc: (2,6)-(2,7) = "&" │ ├── locals: [] @@ -45,11 +51,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" └── @ DefNode (location: (5,0)-(7,3)) + ├── flags: newline ├── name: :foo ├── name_loc: (5,4)-(5,7) = "foo" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (5,8)-(5,12)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (5,8)-(5,9)) │ │ ├── flags: ∅ @@ -67,9 +75,10 @@ │ └── operator_loc: (5,11)-(5,12) = "&" ├── body: │ @ StatementsNode (location: (6,2)-(6,7)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (6,2)-(6,7)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar @@ -79,6 +88,7 @@ │ ├── closing_loc: (6,7)-(6,8) = ")" │ └── block: │ @ BlockArgumentNode (location: (6,6)-(6,7)) + │ ├── flags: ∅ │ ├── expression: ∅ │ └── operator_loc: (6,6)-(6,7) = "&" ├── locals: [:a] diff --git a/test/prism/snapshots/unparser/corpus/literal/since/32.txt b/test/prism/snapshots/unparser/corpus/literal/since/32.txt index 2b28be2fa80..efd01196785 100644 --- a/test/prism/snapshots/unparser/corpus/literal/since/32.txt +++ b/test/prism/snapshots/unparser/corpus/literal/since/32.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(11,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(11,3)) + ├── flags: ∅ └── body: (length: 3) ├── @ DefNode (location: (1,0)-(3,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (1,4)-(1,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,8)-(1,20)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,8)-(1,16)) │ │ │ ├── flags: ∅ @@ -26,9 +30,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (2,2)-(2,19)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (2,2)-(2,19)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -39,12 +44,14 @@ │ │ │ ├── flags: contains_keywords, contains_keyword_splat │ │ │ └── arguments: (length: 2) │ │ │ ├── @ LocalVariableReadNode (location: (2,6)-(2,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :argument │ │ │ │ └── depth: 0 │ │ │ └── @ KeywordHashNode (location: (2,16)-(2,18)) │ │ │ ├── flags: ∅ │ │ │ └── elements: (length: 1) │ │ │ └── @ AssocSplatNode (location: (2,16)-(2,18)) + │ │ │ ├── flags: ∅ │ │ │ ├── value: ∅ │ │ │ └── operator_loc: (2,16)-(2,18) = "**" │ │ ├── closing_loc: (2,18)-(2,19) = ")" @@ -57,11 +64,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" ├── @ DefNode (location: (5,0)-(7,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (5,4)-(5,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (5,8)-(5,19)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (5,8)-(5,16)) │ │ │ ├── flags: ∅ @@ -79,9 +88,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (6,2)-(6,18)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (6,2)-(6,18)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -92,9 +102,11 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 2) │ │ │ ├── @ LocalVariableReadNode (location: (6,6)-(6,14)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :argument │ │ │ │ └── depth: 0 │ │ │ └── @ SplatNode (location: (6,16)-(6,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── operator_loc: (6,16)-(6,17) = "*" │ │ │ └── expression: ∅ │ │ ├── closing_loc: (6,17)-(6,18) = ")" @@ -107,11 +119,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (7,0)-(7,3) = "end" └── @ DefNode (location: (9,0)-(11,3)) + ├── flags: newline ├── name: :foo ├── name_loc: (9,4)-(9,7) = "foo" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (9,8)-(9,10)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -126,24 +140,28 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (10,2)-(10,20)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ HashNode (location: (10,2)-(10,20)) + │ ├── flags: newline │ ├── opening_loc: (10,2)-(10,3) = "{" │ ├── elements: (length: 2) │ │ ├── @ AssocNode (location: (10,4)-(10,14)) + │ │ │ ├── flags: static_literal │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (10,4)-(10,12)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (10,4)-(10,11) = "default" │ │ │ │ ├── closing_loc: (10,11)-(10,12) = ":" │ │ │ │ └── unescaped: "default" │ │ │ ├── value: │ │ │ │ @ IntegerNode (location: (10,13)-(10,14)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── operator_loc: ∅ │ │ └── @ AssocSplatNode (location: (10,16)-(10,18)) + │ │ ├── flags: ∅ │ │ ├── value: ∅ │ │ └── operator_loc: (10,16)-(10,18) = "**" │ └── closing_loc: (10,19)-(10,20) = "}" diff --git a/test/prism/snapshots/unparser/corpus/literal/singletons.txt b/test/prism/snapshots/unparser/corpus/literal/singletons.txt index 45c06f7b07d..23069207c93 100644 --- a/test/prism/snapshots/unparser/corpus/literal/singletons.txt +++ b/test/prism/snapshots/unparser/corpus/literal/singletons.txt @@ -1,9 +1,15 @@ @ ProgramNode (location: (1,0)-(4,4)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(4,4)) + ├── flags: ∅ └── body: (length: 4) ├── @ FalseNode (location: (1,0)-(1,5)) + │ └── flags: newline, static_literal ├── @ NilNode (location: (2,0)-(2,3)) + │ └── flags: newline, static_literal ├── @ SelfNode (location: (3,0)-(3,4)) + │ └── flags: newline └── @ TrueNode (location: (4,0)-(4,4)) + └── flags: newline, static_literal diff --git a/test/prism/snapshots/unparser/corpus/literal/super.txt b/test/prism/snapshots/unparser/corpus/literal/super.txt index d5a78899197..a6311116ca5 100644 --- a/test/prism/snapshots/unparser/corpus/literal/super.txt +++ b/test/prism/snapshots/unparser/corpus/literal/super.txt @@ -1,17 +1,22 @@ @ ProgramNode (location: (1,0)-(21,1)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(21,1)) + ├── flags: ∅ └── body: (length: 11) ├── @ ForwardingSuperNode (location: (1,0)-(1,5)) + │ ├── flags: newline │ └── block: ∅ ├── @ SuperNode (location: (2,0)-(2,7)) + │ ├── flags: newline │ ├── keyword_loc: (2,0)-(2,5) = "super" │ ├── lparen_loc: (2,5)-(2,6) = "(" │ ├── arguments: ∅ │ ├── rparen_loc: (2,6)-(2,7) = ")" │ └── block: ∅ ├── @ SuperNode (location: (3,0)-(3,8)) + │ ├── flags: newline │ ├── keyword_loc: (3,0)-(3,5) = "super" │ ├── lparen_loc: (3,5)-(3,6) = "(" │ ├── arguments: @@ -31,6 +36,7 @@ │ ├── rparen_loc: (3,7)-(3,8) = ")" │ └── block: ∅ ├── @ SuperNode (location: (4,0)-(4,11)) + │ ├── flags: newline │ ├── keyword_loc: (4,0)-(4,5) = "super" │ ├── lparen_loc: (4,5)-(4,6) = "(" │ ├── arguments: @@ -60,12 +66,14 @@ │ ├── rparen_loc: (4,10)-(4,11) = ")" │ └── block: ∅ ├── @ SuperNode (location: (5,0)-(5,13)) + │ ├── flags: newline │ ├── keyword_loc: (5,0)-(5,5) = "super" │ ├── lparen_loc: (5,5)-(5,6) = "(" │ ├── arguments: ∅ │ ├── rparen_loc: (5,12)-(5,13) = ")" │ └── block: │ @ BlockArgumentNode (location: (5,6)-(5,12)) + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (5,7)-(5,12)) │ │ ├── flags: variable_call, ignore_visibility @@ -79,6 +87,7 @@ │ │ └── block: ∅ │ └── operator_loc: (5,6)-(5,7) = "&" ├── @ SuperNode (location: (6,0)-(6,16)) + │ ├── flags: newline │ ├── keyword_loc: (6,0)-(6,5) = "super" │ ├── lparen_loc: (6,5)-(6,6) = "(" │ ├── arguments: @@ -98,6 +107,7 @@ │ ├── rparen_loc: (6,15)-(6,16) = ")" │ └── block: │ @ BlockArgumentNode (location: (6,9)-(6,15)) + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (6,10)-(6,15)) │ │ ├── flags: variable_call, ignore_visibility @@ -111,6 +121,7 @@ │ │ └── block: ∅ │ └── operator_loc: (6,9)-(6,10) = "&" ├── @ SuperNode (location: (7,0)-(9,2)) + │ ├── flags: newline │ ├── keyword_loc: (7,0)-(7,5) = "super" │ ├── lparen_loc: (7,5)-(7,6) = "(" │ ├── arguments: @@ -128,13 +139,15 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (7,8)-(9,1)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (8,2)-(8,5)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (8,2)-(8,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :foo @@ -148,15 +161,18 @@ │ ├── rparen_loc: (9,1)-(9,2) = ")" │ └── block: ∅ ├── @ ForwardingSuperNode (location: (10,0)-(12,1)) + │ ├── flags: newline │ └── block: │ @ BlockNode (location: (10,6)-(12,1)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (11,2)-(11,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (11,2)-(11,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo @@ -168,6 +184,7 @@ │ ├── opening_loc: (10,6)-(10,7) = "{" │ └── closing_loc: (12,0)-(12,1) = "}" ├── @ SuperNode (location: (13,0)-(15,1)) + │ ├── flags: newline │ ├── keyword_loc: (13,0)-(13,5) = "super" │ ├── lparen_loc: (13,5)-(13,6) = "(" │ ├── arguments: @@ -187,13 +204,15 @@ │ ├── rparen_loc: (13,7)-(13,8) = ")" │ └── block: │ @ BlockNode (location: (13,9)-(15,1)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (14,2)-(14,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (14,2)-(14,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo @@ -205,19 +224,22 @@ │ ├── opening_loc: (13,9)-(13,10) = "{" │ └── closing_loc: (15,0)-(15,1) = "}" ├── @ SuperNode (location: (16,0)-(18,1)) + │ ├── flags: newline │ ├── keyword_loc: (16,0)-(16,5) = "super" │ ├── lparen_loc: (16,5)-(16,6) = "(" │ ├── arguments: ∅ │ ├── rparen_loc: (16,6)-(16,7) = ")" │ └── block: │ @ BlockNode (location: (16,8)-(18,1)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (17,2)-(17,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (17,2)-(17,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo @@ -229,6 +251,7 @@ │ ├── opening_loc: (16,8)-(16,9) = "{" │ └── closing_loc: (18,0)-(18,1) = "}" └── @ SuperNode (location: (19,0)-(21,1)) + ├── flags: newline ├── keyword_loc: (19,0)-(19,5) = "super" ├── lparen_loc: (19,5)-(19,6) = "(" ├── arguments: @@ -258,13 +281,15 @@ ├── rparen_loc: (19,10)-(19,11) = ")" └── block: @ BlockNode (location: (19,12)-(21,1)) + ├── flags: ∅ ├── locals: [] ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (20,2)-(20,5)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (20,2)-(20,5)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo diff --git a/test/prism/snapshots/unparser/corpus/literal/unary.txt b/test/prism/snapshots/unparser/corpus/literal/unary.txt index 5e9563d811d..be19b0457c9 100644 --- a/test/prism/snapshots/unparser/corpus/literal/unary.txt +++ b/test/prism/snapshots/unparser/corpus/literal/unary.txt @@ -1,13 +1,15 @@ @ ProgramNode (location: (1,0)-(8,9)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(8,9)) + ├── flags: ∅ └── body: (length: 8) ├── @ CallNode (location: (1,0)-(1,2)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (1,1)-(1,2)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── call_operator_loc: ∅ │ ├── name: :! @@ -17,17 +19,19 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (2,0)-(2,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ParenthesesNode (location: (2,1)-(2,5)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (2,2)-(2,4)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (2,2)-(2,4)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ IntegerNode (location: (2,3)-(2,4)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :! @@ -46,20 +50,25 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (3,0)-(3,16)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ ParenthesesNode (location: (3,1)-(3,16)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (3,2)-(3,15)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (3,2)-(3,15)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ ParenthesesNode (location: (3,3)-(3,15)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── body: │ │ │ │ │ @ StatementsNode (location: (3,4)-(3,14)) + │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ OrNode (location: (3,4)-(3,14)) + │ │ │ │ │ ├── flags: newline │ │ │ │ │ ├── left: │ │ │ │ │ │ @ CallNode (location: (3,4)-(3,7)) │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -102,20 +111,22 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (4,0)-(4,9)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (4,1)-(4,9)) │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ ParenthesesNode (location: (4,1)-(4,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── body: │ │ │ │ @ StatementsNode (location: (4,2)-(4,4)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (4,2)-(4,4)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: newline │ │ │ │ ├── receiver: │ │ │ │ │ @ IntegerNode (location: (4,3)-(4,4)) - │ │ │ │ │ ├── flags: decimal + │ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ │ └── value: 1 │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :! @@ -141,7 +152,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (5,0)-(5,2)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (5,1)-(5,2)) │ │ ├── flags: variable_call, ignore_visibility @@ -161,7 +172,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (6,0)-(6,2)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (6,1)-(6,2)) │ │ ├── flags: variable_call, ignore_visibility @@ -181,7 +192,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (7,0)-(7,2)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (7,1)-(7,2)) │ │ ├── flags: variable_call, ignore_visibility @@ -201,17 +212,19 @@ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ CallNode (location: (8,0)-(8,9)) - ├── flags: ∅ + ├── flags: newline ├── receiver: │ @ CallNode (location: (8,1)-(8,9)) │ ├── flags: ∅ │ ├── receiver: │ │ @ ParenthesesNode (location: (8,1)-(8,5)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (8,2)-(8,4)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (8,2)-(8,4)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ CallNode (location: (8,3)-(8,4)) │ │ │ │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/unparser/corpus/literal/undef.txt b/test/prism/snapshots/unparser/corpus/literal/undef.txt index 282cbe8f872..b7ccf68e27e 100644 --- a/test/prism/snapshots/unparser/corpus/literal/undef.txt +++ b/test/prism/snapshots/unparser/corpus/literal/undef.txt @@ -1,27 +1,31 @@ @ ProgramNode (location: (1,0)-(2,16)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(2,16)) + ├── flags: ∅ └── body: (length: 2) ├── @ UndefNode (location: (1,0)-(1,10)) + │ ├── flags: newline │ ├── names: (length: 1) │ │ └── @ SymbolNode (location: (1,6)-(1,10)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (1,6)-(1,7) = ":" │ │ ├── value_loc: (1,7)-(1,10) = "foo" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "foo" │ └── keyword_loc: (1,0)-(1,5) = "undef" └── @ UndefNode (location: (2,0)-(2,16)) + ├── flags: newline ├── names: (length: 2) │ ├── @ SymbolNode (location: (2,6)-(2,10)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (2,6)-(2,7) = ":" │ │ ├── value_loc: (2,7)-(2,10) = "foo" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "foo" │ └── @ SymbolNode (location: (2,12)-(2,16)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: static_literal, forced_us_ascii_encoding │ ├── opening_loc: (2,12)-(2,13) = ":" │ ├── value_loc: (2,13)-(2,16) = "bar" │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/variables.txt b/test/prism/snapshots/unparser/corpus/literal/variables.txt index 9ae8ad12071..3861af1a462 100644 --- a/test/prism/snapshots/unparser/corpus/literal/variables.txt +++ b/test/prism/snapshots/unparser/corpus/literal/variables.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(10,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(10,17)) + ├── flags: ∅ └── body: (length: 10) ├── @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a @@ -14,32 +16,43 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ InstanceVariableReadNode (location: (2,0)-(2,2)) + │ ├── flags: newline │ └── name: :@a ├── @ ClassVariableReadNode (location: (3,0)-(3,3)) + │ ├── flags: newline │ └── name: :@@a ├── @ GlobalVariableReadNode (location: (4,0)-(4,2)) + │ ├── flags: newline │ └── name: :$a ├── @ NumberedReferenceReadNode (location: (5,0)-(5,2)) + │ ├── flags: newline │ └── number: 1 ├── @ BackReferenceReadNode (location: (6,0)-(6,2)) + │ ├── flags: newline │ └── name: :$` ├── @ ConstantReadNode (location: (7,0)-(7,5)) + │ ├── flags: newline │ └── name: :CONST ├── @ ConstantPathNode (location: (8,0)-(8,13)) + │ ├── flags: newline │ ├── parent: │ │ @ ConstantReadNode (location: (8,0)-(8,6)) + │ │ ├── flags: ∅ │ │ └── name: :SCOPED │ ├── name: :CONST │ ├── delimiter_loc: (8,6)-(8,8) = "::" │ └── name_loc: (8,8)-(8,13) = "CONST" ├── @ ConstantPathNode (location: (9,0)-(9,10)) + │ ├── flags: newline │ ├── parent: ∅ │ ├── name: :TOPLEVEL │ ├── delimiter_loc: (9,0)-(9,2) = "::" │ └── name_loc: (9,2)-(9,10) = "TOPLEVEL" └── @ ConstantPathNode (location: (10,0)-(10,17)) + ├── flags: newline ├── parent: │ @ ConstantPathNode (location: (10,0)-(10,10)) + │ ├── flags: ∅ │ ├── parent: ∅ │ ├── name: :TOPLEVEL │ ├── delimiter_loc: (10,0)-(10,2) = "::" diff --git a/test/prism/snapshots/unparser/corpus/literal/while.txt b/test/prism/snapshots/unparser/corpus/literal/while.txt index 0f752f3392d..7d9a24ec624 100644 --- a/test/prism/snapshots/unparser/corpus/literal/while.txt +++ b/test/prism/snapshots/unparser/corpus/literal/while.txt @@ -1,19 +1,24 @@ @ ProgramNode (location: (1,0)-(73,3)) +├── flags: ∅ ├── locals: [:x] └── statements: @ StatementsNode (location: (1,0)-(73,3)) + ├── flags: ∅ └── body: (length: 17) ├── @ ModuleNode (location: (1,0)-(7,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── module_keyword_loc: (1,0)-(1,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (1,7)-(1,8)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── body: │ │ @ StatementsNode (location: (2,2)-(6,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (2,2)-(6,3)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo @@ -23,11 +28,14 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (2,6)-(6,3)) + │ │ ├── flags: ∅ │ │ ├── locals: [:bar, :foo] │ │ ├── parameters: │ │ │ @ BlockParametersNode (location: (2,8)-(2,13)) + │ │ │ ├── flags: ∅ │ │ │ ├── parameters: │ │ │ │ @ ParametersNode (location: (2,9)-(2,12)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ └── @ RequiredParameterNode (location: (2,9)-(2,12)) │ │ │ │ │ ├── flags: ∅ @@ -43,9 +51,10 @@ │ │ │ └── closing_loc: (2,12)-(2,13) = "|" │ │ ├── body: │ │ │ @ StatementsNode (location: (3,4)-(5,7)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ WhileNode (location: (3,4)-(5,7)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── keyword_loc: (3,4)-(3,9) = "while" │ │ │ ├── closing_loc: (5,4)-(5,7) = "end" │ │ │ ├── predicate: @@ -61,13 +70,16 @@ │ │ │ │ └── block: ∅ │ │ │ └── statements: │ │ │ @ StatementsNode (location: (4,6)-(4,15)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableWriteNode (location: (4,6)-(4,15)) + │ │ │ ├── flags: newline │ │ │ ├── name: :foo │ │ │ ├── depth: 0 │ │ │ ├── name_loc: (4,6)-(4,9) = "foo" │ │ │ ├── value: │ │ │ │ @ LocalVariableReadNode (location: (4,12)-(4,15)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :bar │ │ │ │ └── depth: 0 │ │ │ └── operator_loc: (4,10)-(4,11) = "=" @@ -76,15 +88,17 @@ │ ├── end_keyword_loc: (7,0)-(7,3) = "end" │ └── name: :A ├── @ DefNode (location: (9,0)-(11,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (9,4)-(9,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (10,2)-(10,28)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ WhileNode (location: (10,2)-(10,28)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── keyword_loc: (10,12)-(10,17) = "while" │ │ ├── closing_loc: ∅ │ │ ├── predicate: @@ -92,6 +106,7 @@ │ │ │ ├── flags: ∅ │ │ │ ├── receiver: │ │ │ │ @ LocalVariableReadNode (location: (10,18)-(10,21)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :foo │ │ │ │ └── depth: 0 │ │ │ ├── call_operator_loc: ∅ @@ -116,8 +131,10 @@ │ │ │ └── block: ∅ │ │ └── statements: │ │ @ StatementsNode (location: (10,2)-(10,11)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableWriteNode (location: (10,2)-(10,11)) + │ │ ├── flags: newline │ │ ├── name: :foo │ │ ├── depth: 0 │ │ ├── name_loc: (10,2)-(10,5) = "foo" @@ -141,26 +158,32 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ ModuleNode (location: (13,0)-(15,3)) + │ ├── flags: newline │ ├── locals: [:foo] │ ├── module_keyword_loc: (13,0)-(13,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (13,7)-(13,8)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── body: │ │ @ StatementsNode (location: (14,2)-(14,21)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ WhileNode (location: (14,2)-(14,21)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── keyword_loc: (14,12)-(14,17) = "while" │ │ ├── closing_loc: ∅ │ │ ├── predicate: │ │ │ @ LocalVariableReadNode (location: (14,18)-(14,21)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :foo │ │ │ └── depth: 0 │ │ └── statements: │ │ @ StatementsNode (location: (14,2)-(14,11)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableWriteNode (location: (14,2)-(14,11)) + │ │ ├── flags: newline │ │ ├── name: :foo │ │ ├── depth: 0 │ │ ├── name_loc: (14,2)-(14,5) = "foo" @@ -179,26 +202,32 @@ │ ├── end_keyword_loc: (15,0)-(15,3) = "end" │ └── name: :A ├── @ ModuleNode (location: (17,0)-(19,3)) + │ ├── flags: newline │ ├── locals: [:foo] │ ├── module_keyword_loc: (17,0)-(17,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (17,7)-(17,8)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── body: │ │ @ StatementsNode (location: (18,2)-(18,21)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ UntilNode (location: (18,2)-(18,21)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── keyword_loc: (18,12)-(18,17) = "until" │ │ ├── closing_loc: ∅ │ │ ├── predicate: │ │ │ @ LocalVariableReadNode (location: (18,18)-(18,21)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :foo │ │ │ └── depth: 0 │ │ └── statements: │ │ @ StatementsNode (location: (18,2)-(18,11)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableWriteNode (location: (18,2)-(18,11)) + │ │ ├── flags: newline │ │ ├── name: :foo │ │ ├── depth: 0 │ │ ├── name_loc: (18,2)-(18,5) = "foo" @@ -217,16 +246,19 @@ │ ├── end_keyword_loc: (19,0)-(19,3) = "end" │ └── name: :A ├── @ ModuleNode (location: (21,0)-(25,3)) + │ ├── flags: newline │ ├── locals: [:foo] │ ├── module_keyword_loc: (21,0)-(21,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (21,7)-(21,8)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── body: │ │ @ StatementsNode (location: (22,2)-(24,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ WhileNode (location: (22,2)-(24,5)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── keyword_loc: (22,2)-(22,7) = "while" │ │ ├── closing_loc: (24,2)-(24,5) = "end" │ │ ├── predicate: @@ -242,8 +274,10 @@ │ │ │ └── block: ∅ │ │ └── statements: │ │ @ StatementsNode (location: (23,4)-(23,13)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableWriteNode (location: (23,4)-(23,13)) + │ │ ├── flags: newline │ │ ├── name: :foo │ │ ├── depth: 0 │ │ ├── name_loc: (23,4)-(23,7) = "foo" @@ -262,16 +296,19 @@ │ ├── end_keyword_loc: (25,0)-(25,3) = "end" │ └── name: :A ├── @ ModuleNode (location: (27,0)-(33,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── module_keyword_loc: (27,0)-(27,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (27,7)-(27,8)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── body: │ │ @ StatementsNode (location: (28,2)-(32,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (28,2)-(32,3)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :each @@ -281,11 +318,14 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (28,7)-(32,3)) + │ │ ├── flags: ∅ │ │ ├── locals: [:baz, :foo] │ │ ├── parameters: │ │ │ @ BlockParametersNode (location: (28,9)-(28,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── parameters: │ │ │ │ @ ParametersNode (location: (28,10)-(28,13)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ └── @ RequiredParameterNode (location: (28,10)-(28,13)) │ │ │ │ │ ├── flags: ∅ @@ -301,9 +341,10 @@ │ │ │ └── closing_loc: (28,13)-(28,14) = "|" │ │ ├── body: │ │ │ @ StatementsNode (location: (29,4)-(31,7)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ WhileNode (location: (29,4)-(31,7)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── keyword_loc: (29,4)-(29,9) = "while" │ │ │ ├── closing_loc: (31,4)-(31,7) = "end" │ │ │ ├── predicate: @@ -319,8 +360,10 @@ │ │ │ │ └── block: ∅ │ │ │ └── statements: │ │ │ @ StatementsNode (location: (30,6)-(30,15)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableWriteNode (location: (30,6)-(30,15)) + │ │ │ ├── flags: newline │ │ │ ├── name: :foo │ │ │ ├── depth: 0 │ │ │ ├── name_loc: (30,6)-(30,9) = "foo" @@ -341,16 +384,19 @@ │ ├── end_keyword_loc: (33,0)-(33,3) = "end" │ └── name: :A ├── @ ModuleNode (location: (35,0)-(41,3)) + │ ├── flags: newline │ ├── locals: [] │ ├── module_keyword_loc: (35,0)-(35,6) = "module" │ ├── constant_path: │ │ @ ConstantReadNode (location: (35,7)-(35,8)) + │ │ ├── flags: ∅ │ │ └── name: :A │ ├── body: │ │ @ StatementsNode (location: (36,2)-(40,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (36,2)-(40,3)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :each @@ -360,11 +406,14 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (36,7)-(40,3)) + │ │ ├── flags: ∅ │ │ ├── locals: [:foo] │ │ ├── parameters: │ │ │ @ BlockParametersNode (location: (36,9)-(36,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── parameters: │ │ │ │ @ ParametersNode (location: (36,10)-(36,13)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── requireds: (length: 1) │ │ │ │ │ └── @ RequiredParameterNode (location: (36,10)-(36,13)) │ │ │ │ │ ├── flags: ∅ @@ -380,19 +429,23 @@ │ │ │ └── closing_loc: (36,13)-(36,14) = "|" │ │ ├── body: │ │ │ @ StatementsNode (location: (37,4)-(39,7)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ WhileNode (location: (37,4)-(39,7)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── keyword_loc: (37,4)-(37,9) = "while" │ │ │ ├── closing_loc: (39,4)-(39,7) = "end" │ │ │ ├── predicate: │ │ │ │ @ LocalVariableReadNode (location: (37,10)-(37,13)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :foo │ │ │ │ └── depth: 0 │ │ │ └── statements: │ │ │ @ StatementsNode (location: (38,6)-(38,15)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableWriteNode (location: (38,6)-(38,15)) + │ │ │ ├── flags: newline │ │ │ ├── name: :foo │ │ │ ├── depth: 0 │ │ │ ├── name_loc: (38,6)-(38,9) = "foo" @@ -413,16 +466,19 @@ │ ├── end_keyword_loc: (41,0)-(41,3) = "end" │ └── name: :A ├── @ LocalVariableWriteNode (location: (42,0)-(44,14)) + │ ├── flags: newline │ ├── name: :x │ ├── depth: 0 │ ├── name_loc: (42,0)-(42,1) = "x" │ ├── value: │ │ @ ParenthesesNode (location: (42,4)-(44,14)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (42,5)-(44,13)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ WhileNode (location: (42,5)-(44,13)) - │ │ │ ├── flags: begin_modifier + │ │ │ ├── flags: newline, begin_modifier │ │ │ ├── keyword_loc: (44,4)-(44,9) = "while" │ │ │ ├── closing_loc: ∅ │ │ │ ├── predicate: @@ -438,14 +494,17 @@ │ │ │ │ └── block: ∅ │ │ │ └── statements: │ │ │ @ StatementsNode (location: (42,5)-(44,3)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ BeginNode (location: (42,5)-(44,3)) + │ │ │ ├── flags: newline │ │ │ ├── begin_keyword_loc: (42,5)-(42,10) = "begin" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (43,2)-(43,5)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ CallNode (location: (43,2)-(43,5)) - │ │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :foo @@ -462,7 +521,7 @@ │ │ └── closing_loc: (44,13)-(44,14) = ")" │ └── operator_loc: (42,2)-(42,3) = "=" ├── @ WhileNode (location: (45,0)-(47,13)) - │ ├── flags: begin_modifier + │ ├── flags: newline, begin_modifier │ ├── keyword_loc: (47,4)-(47,9) = "while" │ ├── closing_loc: ∅ │ ├── predicate: @@ -478,14 +537,17 @@ │ │ └── block: ∅ │ └── statements: │ @ StatementsNode (location: (45,0)-(47,3)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ BeginNode (location: (45,0)-(47,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (45,0)-(45,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (46,2)-(46,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (46,2)-(46,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo @@ -499,7 +561,7 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (47,0)-(47,3) = "end" ├── @ UntilNode (location: (48,0)-(51,13)) - │ ├── flags: begin_modifier + │ ├── flags: newline, begin_modifier │ ├── keyword_loc: (51,4)-(51,9) = "until" │ ├── closing_loc: ∅ │ ├── predicate: @@ -515,14 +577,17 @@ │ │ └── block: ∅ │ └── statements: │ @ StatementsNode (location: (48,0)-(51,3)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ BeginNode (location: (48,0)-(51,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (48,0)-(48,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (49,2)-(50,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 2) │ │ ├── @ CallNode (location: (49,2)-(49,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :foo @@ -532,7 +597,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ CallNode (location: (50,2)-(50,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -546,7 +611,7 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (51,0)-(51,3) = "end" ├── @ WhileNode (location: (52,0)-(55,13)) - │ ├── flags: begin_modifier + │ ├── flags: newline, begin_modifier │ ├── keyword_loc: (55,4)-(55,9) = "while" │ ├── closing_loc: ∅ │ ├── predicate: @@ -562,14 +627,17 @@ │ │ └── block: ∅ │ └── statements: │ @ StatementsNode (location: (52,0)-(55,3)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ BeginNode (location: (52,0)-(55,3)) + │ ├── flags: newline │ ├── begin_keyword_loc: (52,0)-(52,5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (53,2)-(54,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 2) │ │ ├── @ CallNode (location: (53,2)-(53,5)) - │ │ │ ├── flags: variable_call, ignore_visibility + │ │ │ ├── flags: newline, variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :foo @@ -579,7 +647,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── @ CallNode (location: (54,2)-(54,5)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -593,35 +661,40 @@ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (55,0)-(55,3) = "end" ├── @ WhileNode (location: (56,0)-(57,3)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (56,0)-(56,5) = "while" │ ├── closing_loc: (57,0)-(57,3) = "end" │ ├── predicate: │ │ @ FalseNode (location: (56,6)-(56,11)) + │ │ └── flags: static_literal │ └── statements: ∅ ├── @ WhileNode (location: (58,0)-(60,3)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (58,0)-(58,5) = "while" │ ├── closing_loc: (60,0)-(60,3) = "end" │ ├── predicate: │ │ @ FalseNode (location: (58,6)-(58,11)) + │ │ └── flags: static_literal │ └── statements: │ @ StatementsNode (location: (59,2)-(59,3)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ IntegerNode (location: (59,2)-(59,3)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 3 ├── @ WhileNode (location: (61,0)-(64,3)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (61,0)-(61,5) = "while" │ ├── closing_loc: (64,0)-(64,3) = "end" │ ├── predicate: │ │ @ ParenthesesNode (location: (61,6)-(62,2)) + │ │ ├── flags: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (61,7)-(62,1)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (61,7)-(62,1)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :foo @@ -631,6 +704,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: │ │ │ @ BlockNode (location: (61,11)-(62,1)) + │ │ │ ├── flags: ∅ │ │ │ ├── locals: [] │ │ │ ├── parameters: ∅ │ │ │ ├── body: ∅ @@ -640,43 +714,49 @@ │ │ └── closing_loc: (62,1)-(62,2) = ")" │ └── statements: │ @ StatementsNode (location: (63,2)-(63,7)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ SymbolNode (location: (63,2)-(63,7)) - │ ├── flags: forced_us_ascii_encoding + │ ├── flags: newline, static_literal, forced_us_ascii_encoding │ ├── opening_loc: (63,2)-(63,3) = ":" │ ├── value_loc: (63,3)-(63,7) = "body" │ ├── closing_loc: ∅ │ └── unescaped: "body" ├── @ UntilNode (location: (65,0)-(66,3)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (65,0)-(65,5) = "until" │ ├── closing_loc: (66,0)-(66,3) = "end" │ ├── predicate: │ │ @ FalseNode (location: (65,6)-(65,11)) + │ │ └── flags: static_literal │ └── statements: ∅ ├── @ UntilNode (location: (67,0)-(69,3)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── keyword_loc: (67,0)-(67,5) = "until" │ ├── closing_loc: (69,0)-(69,3) = "end" │ ├── predicate: │ │ @ FalseNode (location: (67,6)-(67,11)) + │ │ └── flags: static_literal │ └── statements: │ @ StatementsNode (location: (68,2)-(68,3)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ IntegerNode (location: (68,2)-(68,3)) - │ ├── flags: decimal + │ ├── flags: newline, static_literal, decimal │ └── value: 3 └── @ UntilNode (location: (70,0)-(73,3)) - ├── flags: ∅ + ├── flags: newline ├── keyword_loc: (70,0)-(70,5) = "until" ├── closing_loc: (73,0)-(73,3) = "end" ├── predicate: │ @ ParenthesesNode (location: (70,6)-(71,2)) + │ ├── flags: ∅ │ ├── body: │ │ @ StatementsNode (location: (70,7)-(71,1)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (70,7)-(71,1)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo @@ -686,6 +766,7 @@ │ │ ├── closing_loc: ∅ │ │ └── block: │ │ @ BlockNode (location: (70,11)-(71,1)) + │ │ ├── flags: ∅ │ │ ├── locals: [] │ │ ├── parameters: ∅ │ │ ├── body: ∅ @@ -695,9 +776,10 @@ │ └── closing_loc: (71,1)-(71,2) = ")" └── statements: @ StatementsNode (location: (72,2)-(72,7)) + ├── flags: ∅ └── body: (length: 1) └── @ SymbolNode (location: (72,2)-(72,7)) - ├── flags: forced_us_ascii_encoding + ├── flags: newline, static_literal, forced_us_ascii_encoding ├── opening_loc: (72,2)-(72,3) = ":" ├── value_loc: (72,3)-(72,7) = "body" ├── closing_loc: ∅ diff --git a/test/prism/snapshots/unparser/corpus/semantic/and.txt b/test/prism/snapshots/unparser/corpus/semantic/and.txt index bc9d674e44e..2a6fdcf2bc1 100644 --- a/test/prism/snapshots/unparser/corpus/semantic/and.txt +++ b/test/prism/snapshots/unparser/corpus/semantic/and.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(8,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(8,3)) + ├── flags: ∅ └── body: (length: 4) ├── @ OrNode (location: (1,0)-(1,14)) + │ ├── flags: newline │ ├── left: │ │ @ RangeNode (location: (1,0)-(1,5)) │ │ ├── flags: exclude_end @@ -58,6 +61,7 @@ │ │ └── operator_loc: (1,10)-(1,13) = "..." │ └── operator_loc: (1,6)-(1,8) = "or" ├── @ AndNode (location: (2,0)-(2,15)) + │ ├── flags: newline │ ├── left: │ │ @ RangeNode (location: (2,0)-(2,5)) │ │ ├── flags: exclude_end @@ -112,9 +116,11 @@ │ │ └── operator_loc: (2,11)-(2,14) = "..." │ └── operator_loc: (2,6)-(2,9) = "and" ├── @ IfNode (location: (4,0)-(5,3)) + │ ├── flags: newline │ ├── if_keyword_loc: (4,0)-(4,2) = "if" │ ├── predicate: │ │ @ OrNode (location: (4,3)-(4,17)) + │ │ ├── flags: ∅ │ │ ├── left: │ │ │ @ FlipFlopNode (location: (4,3)-(4,8)) │ │ │ ├── flags: exclude_end @@ -173,9 +179,11 @@ │ ├── consequent: ∅ │ └── end_keyword_loc: (5,0)-(5,3) = "end" └── @ IfNode (location: (7,0)-(8,3)) + ├── flags: newline ├── if_keyword_loc: (7,0)-(7,2) = "if" ├── predicate: │ @ AndNode (location: (7,3)-(7,18)) + │ ├── flags: ∅ │ ├── left: │ │ @ FlipFlopNode (location: (7,3)-(7,8)) │ │ ├── flags: exclude_end diff --git a/test/prism/snapshots/unparser/corpus/semantic/block.txt b/test/prism/snapshots/unparser/corpus/semantic/block.txt index b9aa6b21844..c3b27b194ee 100644 --- a/test/prism/snapshots/unparser/corpus/semantic/block.txt +++ b/test/prism/snapshots/unparser/corpus/semantic/block.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(26,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(26,3)) + ├── flags: ∅ └── body: (length: 6) ├── @ CallNode (location: (1,0)-(2,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -14,13 +16,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (1,4)-(2,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ │ ├── opening_loc: (1,4)-(1,6) = "do" │ └── closing_loc: (2,0)-(2,3) = "end" ├── @ CallNode (location: (4,0)-(6,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -30,14 +33,17 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (4,4)-(6,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ BeginNode (location: (4,4)-(6,3)) + │ │ ├── flags: ∅ │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (5,0)-(5,6)) + │ │ │ ├── flags: ∅ │ │ │ ├── keyword_loc: (5,0)-(5,6) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ @@ -50,7 +56,7 @@ │ ├── opening_loc: (4,4)-(4,6) = "do" │ └── closing_loc: (6,0)-(6,3) = "end" ├── @ CallNode (location: (8,0)-(11,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -60,22 +66,28 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (8,4)-(11,3)) + │ ├── flags: ∅ │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (9,2)-(10,5)) + │ │ ├── flags: ∅ │ │ └── body: (length: 2) │ │ ├── @ RescueModifierNode (location: (9,2)-(9,16)) + │ │ │ ├── flags: newline │ │ │ ├── expression: │ │ │ │ @ NilNode (location: (9,2)-(9,5)) + │ │ │ │ └── flags: static_literal │ │ │ ├── keyword_loc: (9,6)-(9,12) = "rescue" │ │ │ └── rescue_expression: │ │ │ @ NilNode (location: (9,13)-(9,16)) + │ │ │ └── flags: static_literal │ │ └── @ NilNode (location: (10,2)-(10,5)) + │ │ └── flags: newline, static_literal │ ├── opening_loc: (8,4)-(8,6) = "do" │ └── closing_loc: (11,0)-(11,3) = "end" ├── @ CallNode (location: (13,0)-(14,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -85,11 +97,14 @@ │ ├── closing_loc: ∅ │ └── block: │ @ BlockNode (location: (13,4)-(14,3)) + │ ├── flags: ∅ │ ├── locals: [:a] │ ├── parameters: │ │ @ BlockParametersNode (location: (13,7)-(13,10)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (13,8)-(13,9)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (13,8)-(13,9)) │ │ │ │ ├── flags: ∅ @@ -107,7 +122,7 @@ │ ├── opening_loc: (13,4)-(13,6) = "do" │ └── closing_loc: (14,0)-(14,3) = "end" ├── @ CallNode (location: (16,0)-(20,3)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo @@ -126,11 +141,14 @@ │ ├── closing_loc: (16,10)-(16,11) = ")" │ └── block: │ @ BlockNode (location: (16,12)-(20,3)) + │ ├── flags: ∅ │ ├── locals: [:a] │ ├── parameters: │ │ @ BlockParametersNode (location: (16,15)-(16,18)) + │ │ ├── flags: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (16,16)-(16,17)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 1) │ │ │ │ └── @ RequiredParameterNode (location: (16,16)-(16,17)) │ │ │ │ ├── flags: ∅ @@ -146,14 +164,16 @@ │ │ └── closing_loc: (16,17)-(16,18) = "|" │ ├── body: │ │ @ StatementsNode (location: (19,2)-(19,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ LocalVariableReadNode (location: (19,2)-(19,3)) + │ │ ├── flags: newline │ │ ├── name: :a │ │ └── depth: 0 │ ├── opening_loc: (16,12)-(16,14) = "do" │ └── closing_loc: (20,0)-(20,3) = "end" └── @ CallNode (location: (22,0)-(26,3)) - ├── flags: ignore_visibility + ├── flags: newline, ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :foo @@ -172,13 +192,15 @@ ├── closing_loc: (22,10)-(22,11) = ")" └── block: @ BlockNode (location: (22,12)-(26,3)) + ├── flags: ∅ ├── locals: [] ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (25,2)-(25,3)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (25,2)-(25,3)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :a diff --git a/test/prism/snapshots/unparser/corpus/semantic/def.txt b/test/prism/snapshots/unparser/corpus/semantic/def.txt index b44983c2f37..f05ce02bca7 100644 --- a/test/prism/snapshots/unparser/corpus/semantic/def.txt +++ b/test/prism/snapshots/unparser/corpus/semantic/def.txt @@ -1,22 +1,28 @@ @ ProgramNode (location: (1,0)-(7,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(7,3)) + ├── flags: ∅ └── body: (length: 2) ├── @ DefNode (location: (1,0)-(3,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (1,4)-(1,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (2,2)-(2,9)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ ParenthesesNode (location: (2,2)-(2,9)) + │ │ ├── flags: newline │ │ ├── body: │ │ │ @ StatementsNode (location: (2,3)-(2,8)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (2,3)-(2,8)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── receiver: │ │ │ │ @ CallNode (location: (2,3)-(2,4)) │ │ │ │ ├── flags: variable_call, ignore_visibility @@ -58,14 +64,17 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" └── @ DefNode (location: (5,0)-(7,3)) + ├── flags: newline ├── name: :foo ├── name_loc: (5,4)-(5,7) = "foo" ├── receiver: ∅ ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (6,2)-(6,20)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (6,2)-(6,20)) + │ ├── flags: newline │ ├── expression: │ │ @ CallNode (location: (6,2)-(6,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -80,6 +89,7 @@ │ ├── keyword_loc: (6,4)-(6,10) = "rescue" │ └── rescue_expression: │ @ ConstantReadNode (location: (6,11)-(6,20)) + │ ├── flags: ∅ │ └── name: :Exception ├── locals: [] ├── def_keyword_loc: (5,0)-(5,3) = "def" diff --git a/test/prism/snapshots/unparser/corpus/semantic/dstr.txt b/test/prism/snapshots/unparser/corpus/semantic/dstr.txt index 499bf59d1ab..e1b647c744b 100644 --- a/test/prism/snapshots/unparser/corpus/semantic/dstr.txt +++ b/test/prism/snapshots/unparser/corpus/semantic/dstr.txt @@ -1,248 +1,262 @@ @ ProgramNode (location: (1,0)-(127,11)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(127,11)) + ├── flags: ∅ └── body: (length: 33) ├── @ StringNode (location: (1,0)-(1,5)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (1,0)-(1,5) = "<= ├── name_loc: (11,4)-(11,6) = ">=" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (11,7)-(11,12)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (11,7)-(11,12)) │ │ ├── flags: ∅ @@ -201,9 +220,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (11,16)-(11,28)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (11,16)-(11,28)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :do_something diff --git a/test/prism/snapshots/whitequark/endless_method.txt b/test/prism/snapshots/whitequark/endless_method.txt index 17d3873b663..5b48a95ae58 100644 --- a/test/prism/snapshots/whitequark/endless_method.txt +++ b/test/prism/snapshots/whitequark/endless_method.txt @@ -1,18 +1,22 @@ @ ProgramNode (location: (1,0)-(7,22)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(7,22)) + ├── flags: ∅ └── body: (length: 4) ├── @ DefNode (location: (1,0)-(1,14)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (1,4)-(1,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,12)-(1,14)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (1,12)-(1,14)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 42 │ ├── locals: [] │ ├── def_keyword_loc: (1,0)-(1,3) = "def" @@ -22,11 +26,13 @@ │ ├── equal_loc: (1,10)-(1,11) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (3,0)-(3,18)) + │ ├── flags: newline │ ├── name: :inc │ ├── name_loc: (3,4)-(3,7) = "inc" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (3,8)-(3,9)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (3,8)-(3,9)) │ │ │ ├── flags: ∅ @@ -39,11 +45,13 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (3,13)-(3,18)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (3,13)-(3,18)) - │ │ ├── flags: ∅ + │ │ ├── flags: newline │ │ ├── receiver: │ │ │ @ LocalVariableReadNode (location: (3,13)-(3,14)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :x │ │ │ └── depth: 0 │ │ ├── call_operator_loc: ∅ @@ -55,7 +63,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ IntegerNode (location: (3,17)-(3,18)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ @@ -67,6 +75,7 @@ │ ├── equal_loc: (3,11)-(3,12) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (5,0)-(5,18)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (5,8)-(5,11) = "foo" │ ├── receiver: @@ -83,9 +92,10 @@ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (5,16)-(5,18)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (5,16)-(5,18)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 42 │ ├── locals: [] │ ├── def_keyword_loc: (5,0)-(5,3) = "def" @@ -95,6 +105,7 @@ │ ├── equal_loc: (5,14)-(5,15) = "=" │ └── end_keyword_loc: ∅ └── @ DefNode (location: (7,0)-(7,22)) + ├── flags: newline ├── name: :inc ├── name_loc: (7,8)-(7,11) = "inc" ├── receiver: @@ -110,6 +121,7 @@ │ └── block: ∅ ├── parameters: │ @ ParametersNode (location: (7,12)-(7,13)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (7,12)-(7,13)) │ │ ├── flags: ∅ @@ -122,11 +134,13 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (7,17)-(7,22)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (7,17)-(7,22)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── receiver: │ │ @ LocalVariableReadNode (location: (7,17)-(7,18)) + │ │ ├── flags: ∅ │ │ ├── name: :x │ │ └── depth: 0 │ ├── call_operator_loc: ∅ @@ -138,7 +152,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IntegerNode (location: (7,21)-(7,22)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── closing_loc: ∅ │ └── block: ∅ diff --git a/test/prism/snapshots/whitequark/endless_method_command_syntax.txt b/test/prism/snapshots/whitequark/endless_method_command_syntax.txt index 4ec57ccd35f..f2fa941fee2 100644 --- a/test/prism/snapshots/whitequark/endless_method_command_syntax.txt +++ b/test/prism/snapshots/whitequark/endless_method_command_syntax.txt @@ -1,18 +1,22 @@ @ ProgramNode (location: (1,0)-(15,62)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(15,62)) + ├── flags: ∅ └── body: (length: 8) ├── @ DefNode (location: (1,0)-(1,22)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (1,4)-(1,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,10)-(1,22)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,10)-(1,22)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -38,15 +42,17 @@ │ ├── equal_loc: (1,8)-(1,9) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (3,0)-(3,24)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (3,4)-(3,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (3,12)-(3,24)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (3,12)-(3,24)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -72,11 +78,13 @@ │ ├── equal_loc: (3,10)-(3,11) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (5,0)-(5,19)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (5,4)-(5,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (5,8)-(5,9)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (5,8)-(5,9)) │ │ │ ├── flags: ∅ @@ -89,9 +97,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (5,13)-(5,19)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (5,13)-(5,19)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -102,6 +111,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (5,18)-(5,19)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :x │ │ │ └── depth: 0 │ │ ├── closing_loc: ∅ @@ -114,6 +124,7 @@ │ ├── equal_loc: (5,11)-(5,12) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (7,0)-(7,26)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (7,8)-(7,11) = "foo" │ ├── receiver: @@ -130,9 +141,10 @@ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (7,14)-(7,26)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (7,14)-(7,26)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -158,6 +170,7 @@ │ ├── equal_loc: (7,12)-(7,13) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (9,0)-(9,28)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (9,8)-(9,11) = "foo" │ ├── receiver: @@ -174,9 +187,10 @@ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (9,16)-(9,28)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (9,16)-(9,28)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -202,6 +216,7 @@ │ ├── equal_loc: (9,14)-(9,15) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (11,0)-(11,23)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (11,8)-(11,11) = "foo" │ ├── receiver: @@ -217,6 +232,7 @@ │ │ └── block: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (11,12)-(11,13)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (11,12)-(11,13)) │ │ │ ├── flags: ∅ @@ -229,9 +245,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (11,17)-(11,23)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (11,17)-(11,23)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -242,6 +259,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (11,22)-(11,23)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :x │ │ │ └── depth: 0 │ │ ├── closing_loc: ∅ @@ -254,11 +272,13 @@ │ ├── equal_loc: (11,15)-(11,16) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (13,0)-(13,60)) + │ ├── flags: newline │ ├── name: :rescued │ ├── name_loc: (13,4)-(13,11) = "rescued" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (13,12)-(13,13)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (13,12)-(13,13)) │ │ │ ├── flags: ∅ @@ -271,8 +291,10 @@ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (13,17)-(13,60)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (13,17)-(13,60)) + │ │ ├── flags: newline │ │ ├── expression: │ │ │ @ CallNode (location: (13,17)-(13,37)) │ │ │ ├── flags: ignore_visibility @@ -300,17 +322,20 @@ │ │ ├── opening_loc: (13,45)-(13,46) = "\"" │ │ ├── parts: (length: 2) │ │ │ ├── @ StringNode (location: (13,46)-(13,55)) - │ │ │ │ ├── flags: frozen + │ │ │ │ ├── flags: static_literal, frozen │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── content_loc: (13,46)-(13,55) = "instance " │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "instance " │ │ │ └── @ EmbeddedStatementsNode (location: (13,55)-(13,59)) + │ │ │ ├── flags: ∅ │ │ │ ├── opening_loc: (13,55)-(13,57) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (13,57)-(13,58)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (13,57)-(13,58)) + │ │ │ │ ├── flags: ∅ │ │ │ │ ├── name: :x │ │ │ │ └── depth: 0 │ │ │ └── closing_loc: (13,58)-(13,59) = "}" @@ -323,12 +348,15 @@ │ ├── equal_loc: (13,15)-(13,16) = "=" │ └── end_keyword_loc: ∅ └── @ DefNode (location: (15,0)-(15,62)) + ├── flags: newline ├── name: :rescued ├── name_loc: (15,9)-(15,16) = "rescued" ├── receiver: │ @ SelfNode (location: (15,4)-(15,8)) + │ └── flags: ∅ ├── parameters: │ @ ParametersNode (location: (15,17)-(15,18)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (15,17)-(15,18)) │ │ ├── flags: ∅ @@ -341,8 +369,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (15,22)-(15,62)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (15,22)-(15,62)) + │ ├── flags: newline │ ├── expression: │ │ @ CallNode (location: (15,22)-(15,42)) │ │ ├── flags: ignore_visibility @@ -370,17 +400,20 @@ │ ├── opening_loc: (15,50)-(15,51) = "\"" │ ├── parts: (length: 2) │ │ ├── @ StringNode (location: (15,51)-(15,57)) - │ │ │ ├── flags: frozen + │ │ │ ├── flags: static_literal, frozen │ │ │ ├── opening_loc: ∅ │ │ │ ├── content_loc: (15,51)-(15,57) = "class " │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "class " │ │ └── @ EmbeddedStatementsNode (location: (15,57)-(15,61)) + │ │ ├── flags: ∅ │ │ ├── opening_loc: (15,57)-(15,59) = "\#{" │ │ ├── statements: │ │ │ @ StatementsNode (location: (15,59)-(15,60)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (15,59)-(15,60)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :x │ │ │ └── depth: 0 │ │ └── closing_loc: (15,60)-(15,61) = "}" diff --git a/test/prism/snapshots/whitequark/endless_method_forwarded_args_legacy.txt b/test/prism/snapshots/whitequark/endless_method_forwarded_args_legacy.txt index 64a3ffa2520..67264d3b1c4 100644 --- a/test/prism/snapshots/whitequark/endless_method_forwarded_args_legacy.txt +++ b/test/prism/snapshots/whitequark/endless_method_forwarded_args_legacy.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,23)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,23)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,23)) + ├── flags: newline ├── name: :foo ├── name_loc: (1,4)-(1,7) = "foo" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,8)-(1,11)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -16,12 +20,14 @@ │ ├── keywords: (length: 0) │ ├── keyword_rest: │ │ @ ForwardingParameterNode (location: (1,8)-(1,11)) + │ │ └── flags: ∅ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,15)-(1,23)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,15)-(1,23)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar @@ -32,6 +38,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ForwardingArgumentsNode (location: (1,19)-(1,22)) + │ │ └── flags: ∅ │ ├── closing_loc: (1,22)-(1,23) = ")" │ └── block: ∅ ├── locals: [] diff --git a/test/prism/snapshots/whitequark/endless_method_with_rescue_mod.txt b/test/prism/snapshots/whitequark/endless_method_with_rescue_mod.txt index 2284b243549..54562212860 100644 --- a/test/prism/snapshots/whitequark/endless_method_with_rescue_mod.txt +++ b/test/prism/snapshots/whitequark/endless_method_with_rescue_mod.txt @@ -1,25 +1,30 @@ @ ProgramNode (location: (1,0)-(3,25)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,25)) + ├── flags: ∅ └── body: (length: 2) ├── @ DefNode (location: (1,0)-(1,20)) + │ ├── flags: newline │ ├── name: :m │ ├── name_loc: (1,4)-(1,5) = "m" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,10)-(1,20)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (1,10)-(1,20)) + │ │ ├── flags: newline │ │ ├── expression: │ │ │ @ IntegerNode (location: (1,10)-(1,11)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── keyword_loc: (1,12)-(1,18) = "rescue" │ │ └── rescue_expression: │ │ @ IntegerNode (location: (1,19)-(1,20)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── locals: [] │ ├── def_keyword_loc: (1,0)-(1,3) = "def" @@ -29,23 +34,27 @@ │ ├── equal_loc: (1,8)-(1,9) = "=" │ └── end_keyword_loc: ∅ └── @ DefNode (location: (3,0)-(3,25)) + ├── flags: newline ├── name: :m ├── name_loc: (3,9)-(3,10) = "m" ├── receiver: │ @ SelfNode (location: (3,4)-(3,8)) + │ └── flags: ∅ ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (3,15)-(3,25)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (3,15)-(3,25)) + │ ├── flags: newline │ ├── expression: │ │ @ IntegerNode (location: (3,15)-(3,16)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── keyword_loc: (3,17)-(3,23) = "rescue" │ └── rescue_expression: │ @ IntegerNode (location: (3,24)-(3,25)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── locals: [] ├── def_keyword_loc: (3,0)-(3,3) = "def" diff --git a/test/prism/snapshots/whitequark/endless_method_without_args.txt b/test/prism/snapshots/whitequark/endless_method_without_args.txt index a7a9c93ef34..2e97f101c77 100644 --- a/test/prism/snapshots/whitequark/endless_method_without_args.txt +++ b/test/prism/snapshots/whitequark/endless_method_without_args.txt @@ -1,18 +1,22 @@ @ ProgramNode (location: (1,0)-(7,28)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(7,28)) + ├── flags: ∅ └── body: (length: 4) ├── @ DefNode (location: (1,0)-(1,12)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (1,4)-(1,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,10)-(1,12)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (1,10)-(1,12)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 42 │ ├── locals: [] │ ├── def_keyword_loc: (1,0)-(1,3) = "def" @@ -22,21 +26,25 @@ │ ├── equal_loc: (1,8)-(1,9) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (3,0)-(3,23)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (3,4)-(3,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (3,10)-(3,23)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (3,10)-(3,23)) + │ │ ├── flags: newline │ │ ├── expression: │ │ │ @ IntegerNode (location: (3,10)-(3,12)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 42 │ │ ├── keyword_loc: (3,13)-(3,19) = "rescue" │ │ └── rescue_expression: │ │ @ NilNode (location: (3,20)-(3,23)) + │ │ └── flags: static_literal │ ├── locals: [] │ ├── def_keyword_loc: (3,0)-(3,3) = "def" │ ├── operator_loc: ∅ @@ -45,16 +53,19 @@ │ ├── equal_loc: (3,8)-(3,9) = "=" │ └── end_keyword_loc: ∅ ├── @ DefNode (location: (5,0)-(5,17)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (5,9)-(5,12) = "foo" │ ├── receiver: │ │ @ SelfNode (location: (5,4)-(5,8)) + │ │ └── flags: ∅ │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (5,15)-(5,17)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (5,15)-(5,17)) - │ │ ├── flags: decimal + │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 42 │ ├── locals: [] │ ├── def_keyword_loc: (5,0)-(5,3) = "def" @@ -64,22 +75,27 @@ │ ├── equal_loc: (5,13)-(5,14) = "=" │ └── end_keyword_loc: ∅ └── @ DefNode (location: (7,0)-(7,28)) + ├── flags: newline ├── name: :foo ├── name_loc: (7,9)-(7,12) = "foo" ├── receiver: │ @ SelfNode (location: (7,4)-(7,8)) + │ └── flags: ∅ ├── parameters: ∅ ├── body: │ @ StatementsNode (location: (7,15)-(7,28)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (7,15)-(7,28)) + │ ├── flags: newline │ ├── expression: │ │ @ IntegerNode (location: (7,15)-(7,17)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ ├── keyword_loc: (7,18)-(7,24) = "rescue" │ └── rescue_expression: │ @ NilNode (location: (7,25)-(7,28)) + │ └── flags: static_literal ├── locals: [] ├── def_keyword_loc: (7,0)-(7,3) = "def" ├── operator_loc: (7,8)-(7,9) = "." diff --git a/test/prism/snapshots/whitequark/ensure.txt b/test/prism/snapshots/whitequark/ensure.txt index a48d2370e8d..63d4a3b05dc 100644 --- a/test/prism/snapshots/whitequark/ensure.txt +++ b/test/prism/snapshots/whitequark/ensure.txt @@ -1,15 +1,19 @@ @ ProgramNode (location: (1,0)-(1,29)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,29)) + ├── flags: ∅ └── body: (length: 1) └── @ BeginNode (location: (1,0)-(1,29)) + ├── flags: newline ├── begin_keyword_loc: (1,0)-(1,5) = "begin" ├── statements: │ @ StatementsNode (location: (1,7)-(1,11)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,7)-(1,11)) - │ ├── flags: variable_call, ignore_visibility + │ ├── flags: newline, variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :meth @@ -22,12 +26,14 @@ ├── else_clause: ∅ ├── ensure_clause: │ @ EnsureNode (location: (1,13)-(1,29)) + │ ├── flags: ∅ │ ├── ensure_keyword_loc: (1,13)-(1,19) = "ensure" │ ├── statements: │ │ @ StatementsNode (location: (1,21)-(1,24)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,21)-(1,24)) - │ │ ├── flags: variable_call, ignore_visibility + │ │ ├── flags: newline, variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar diff --git a/test/prism/snapshots/whitequark/ensure_empty.txt b/test/prism/snapshots/whitequark/ensure_empty.txt index 0bab5d80c36..c7369b7b1f5 100644 --- a/test/prism/snapshots/whitequark/ensure_empty.txt +++ b/test/prism/snapshots/whitequark/ensure_empty.txt @@ -1,15 +1,19 @@ @ ProgramNode (location: (1,0)-(1,16)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,16)) + ├── flags: ∅ └── body: (length: 1) └── @ BeginNode (location: (1,0)-(1,16)) + ├── flags: newline ├── begin_keyword_loc: (1,0)-(1,5) = "begin" ├── statements: ∅ ├── rescue_clause: ∅ ├── else_clause: ∅ ├── ensure_clause: │ @ EnsureNode (location: (1,6)-(1,16)) + │ ├── flags: ∅ │ ├── ensure_keyword_loc: (1,6)-(1,12) = "ensure" │ ├── statements: ∅ │ └── end_keyword_loc: (1,13)-(1,16) = "end" diff --git a/test/prism/snapshots/whitequark/false.txt b/test/prism/snapshots/whitequark/false.txt index 00562f703a9..4686f6aa08a 100644 --- a/test/prism/snapshots/whitequark/false.txt +++ b/test/prism/snapshots/whitequark/false.txt @@ -1,6 +1,9 @@ @ ProgramNode (location: (1,0)-(1,5)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,5)) + ├── flags: ∅ └── body: (length: 1) └── @ FalseNode (location: (1,0)-(1,5)) + └── flags: newline, static_literal diff --git a/test/prism/snapshots/whitequark/float.txt b/test/prism/snapshots/whitequark/float.txt index 5e6a597db7d..7839f899625 100644 --- a/test/prism/snapshots/whitequark/float.txt +++ b/test/prism/snapshots/whitequark/float.txt @@ -1,9 +1,13 @@ @ ProgramNode (location: (1,0)-(3,4)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,4)) + ├── flags: ∅ └── body: (length: 2) ├── @ FloatNode (location: (1,0)-(1,5)) + │ ├── flags: newline, static_literal │ └── value: -1.33 └── @ FloatNode (location: (3,0)-(3,4)) + ├── flags: newline, static_literal └── value: 1.33 diff --git a/test/prism/snapshots/whitequark/for.txt b/test/prism/snapshots/whitequark/for.txt index fec8bdfd64f..8dca927c905 100644 --- a/test/prism/snapshots/whitequark/for.txt +++ b/test/prism/snapshots/whitequark/for.txt @@ -1,11 +1,15 @@ @ ProgramNode (location: (1,0)-(3,22)) +├── flags: ∅ ├── locals: [:a] └── statements: @ StatementsNode (location: (1,0)-(3,22)) + ├── flags: ∅ └── body: (length: 2) ├── @ ForNode (location: (1,0)-(1,24)) + │ ├── flags: newline │ ├── index: │ │ @ LocalVariableTargetNode (location: (1,4)-(1,5)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── collection: @@ -21,9 +25,10 @@ │ │ └── block: ∅ │ ├── statements: │ │ @ StatementsNode (location: (1,16)-(1,19)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,16)-(1,19)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :p @@ -34,6 +39,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (1,18)-(1,19)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ ├── closing_loc: ∅ @@ -43,8 +49,10 @@ │ ├── do_keyword_loc: (1,13)-(1,15) = "do" │ └── end_keyword_loc: (1,21)-(1,24) = "end" └── @ ForNode (location: (3,0)-(3,22)) + ├── flags: newline ├── index: │ @ LocalVariableTargetNode (location: (3,4)-(3,5)) + │ ├── flags: ∅ │ ├── name: :a │ └── depth: 0 ├── collection: @@ -60,9 +68,10 @@ │ └── block: ∅ ├── statements: │ @ StatementsNode (location: (3,14)-(3,17)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (3,14)-(3,17)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :p @@ -73,6 +82,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ LocalVariableReadNode (location: (3,16)-(3,17)) + │ │ ├── flags: ∅ │ │ ├── name: :a │ │ └── depth: 0 │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/whitequark/for_mlhs.txt b/test/prism/snapshots/whitequark/for_mlhs.txt index 42d8fa22585..0f70dd8a7da 100644 --- a/test/prism/snapshots/whitequark/for_mlhs.txt +++ b/test/prism/snapshots/whitequark/for_mlhs.txt @@ -1,16 +1,22 @@ @ ProgramNode (location: (1,0)-(1,28)) +├── flags: ∅ ├── locals: [:a, :b] └── statements: @ StatementsNode (location: (1,0)-(1,28)) + ├── flags: ∅ └── body: (length: 1) └── @ ForNode (location: (1,0)-(1,28)) + ├── flags: newline ├── index: │ @ MultiTargetNode (location: (1,4)-(1,8)) + │ ├── flags: ∅ │ ├── lefts: (length: 2) │ │ ├── @ LocalVariableTargetNode (location: (1,4)-(1,5)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ └── @ LocalVariableTargetNode (location: (1,7)-(1,8)) + │ │ ├── flags: ∅ │ │ ├── name: :b │ │ └── depth: 0 │ ├── rest: ∅ @@ -30,9 +36,10 @@ │ └── block: ∅ ├── statements: │ @ StatementsNode (location: (1,17)-(1,23)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,17)-(1,23)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :p @@ -43,9 +50,11 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ LocalVariableReadNode (location: (1,19)-(1,20)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :a │ │ │ └── depth: 0 │ │ └── @ LocalVariableReadNode (location: (1,22)-(1,23)) + │ │ ├── flags: ∅ │ │ ├── name: :b │ │ └── depth: 0 │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/whitequark/forward_arg.txt b/test/prism/snapshots/whitequark/forward_arg.txt index 17504c64e02..b8c22d08f2d 100644 --- a/test/prism/snapshots/whitequark/forward_arg.txt +++ b/test/prism/snapshots/whitequark/forward_arg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,27)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,27)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,27)) + ├── flags: newline ├── name: :foo ├── name_loc: (1,4)-(1,7) = "foo" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,8)-(1,11)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -16,12 +20,14 @@ │ ├── keywords: (length: 0) │ ├── keyword_rest: │ │ @ ForwardingParameterNode (location: (1,8)-(1,11)) + │ │ └── flags: ∅ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,14)-(1,22)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,14)-(1,22)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar @@ -32,6 +38,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ForwardingArgumentsNode (location: (1,18)-(1,21)) + │ │ └── flags: ∅ │ ├── closing_loc: (1,21)-(1,22) = ")" │ └── block: ∅ ├── locals: [] diff --git a/test/prism/snapshots/whitequark/forward_arg_with_open_args.txt b/test/prism/snapshots/whitequark/forward_arg_with_open_args.txt index 7e58260b582..20c8486276b 100644 --- a/test/prism/snapshots/whitequark/forward_arg_with_open_args.txt +++ b/test/prism/snapshots/whitequark/forward_arg_with_open_args.txt @@ -1,18 +1,24 @@ @ ProgramNode (location: (1,0)-(27,28)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(27,28)) + ├── flags: ∅ └── body: (length: 10) ├── @ ParenthesesNode (location: (1,0)-(3,4)) + │ ├── flags: newline │ ├── body: │ │ @ StatementsNode (location: (1,1)-(3,3)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ DefNode (location: (1,1)-(3,3)) + │ │ ├── flags: newline │ │ ├── name: :foo │ │ ├── name_loc: (1,5)-(1,8) = "foo" │ │ ├── receiver: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (1,9)-(1,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 0) │ │ │ ├── optionals: (length: 0) │ │ │ ├── rest: ∅ @@ -20,12 +26,14 @@ │ │ │ ├── keywords: (length: 0) │ │ │ ├── keyword_rest: │ │ │ │ @ ForwardingParameterNode (location: (1,9)-(1,12)) + │ │ │ │ └── flags: ∅ │ │ │ └── block: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (2,2)-(2,10)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (2,2)-(2,10)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -36,6 +44,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ ForwardingArgumentsNode (location: (2,6)-(2,9)) + │ │ │ │ └── flags: ∅ │ │ │ ├── closing_loc: (2,9)-(2,10) = ")" │ │ │ └── block: ∅ │ │ ├── locals: [] @@ -48,15 +57,19 @@ │ ├── opening_loc: (1,0)-(1,1) = "(" │ └── closing_loc: (3,3)-(3,4) = ")" ├── @ ParenthesesNode (location: (5,0)-(5,28)) + │ ├── flags: newline │ ├── body: │ │ @ StatementsNode (location: (5,1)-(5,27)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ DefNode (location: (5,1)-(5,27)) + │ │ ├── flags: newline │ │ ├── name: :foo │ │ ├── name_loc: (5,5)-(5,8) = "foo" │ │ ├── receiver: ∅ │ │ ├── parameters: │ │ │ @ ParametersNode (location: (5,9)-(5,12)) + │ │ │ ├── flags: ∅ │ │ │ ├── requireds: (length: 0) │ │ │ ├── optionals: (length: 0) │ │ │ ├── rest: ∅ @@ -64,12 +77,14 @@ │ │ │ ├── keywords: (length: 0) │ │ │ ├── keyword_rest: │ │ │ │ @ ForwardingParameterNode (location: (5,9)-(5,12)) + │ │ │ │ └── flags: ∅ │ │ │ └── block: ∅ │ │ ├── body: │ │ │ @ StatementsNode (location: (5,14)-(5,22)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (5,14)-(5,22)) - │ │ │ ├── flags: ignore_visibility + │ │ │ ├── flags: newline, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar @@ -80,6 +95,7 @@ │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ ForwardingArgumentsNode (location: (5,18)-(5,21)) + │ │ │ │ └── flags: ∅ │ │ │ ├── closing_loc: (5,21)-(5,22) = ")" │ │ │ └── block: ∅ │ │ ├── locals: [] @@ -92,11 +108,13 @@ │ ├── opening_loc: (5,0)-(5,1) = "(" │ └── closing_loc: (5,27)-(5,28) = ")" ├── @ DefNode (location: (7,0)-(8,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (7,4)-(7,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (7,8)-(7,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -104,6 +122,7 @@ │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (7,8)-(7,11)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -114,11 +133,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (8,0)-(8,3) = "end" ├── @ DefNode (location: (10,0)-(10,26)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (10,4)-(10,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (10,8)-(10,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -126,12 +147,14 @@ │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (10,8)-(10,11)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (10,13)-(10,21)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (10,13)-(10,21)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -142,6 +165,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ForwardingArgumentsNode (location: (10,17)-(10,20)) + │ │ │ └── flags: ∅ │ │ ├── closing_loc: (10,20)-(10,21) = ")" │ │ └── block: ∅ │ ├── locals: [] @@ -152,11 +176,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (10,23)-(10,26) = "end" ├── @ DefNode (location: (12,0)-(14,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (12,4)-(12,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (12,8)-(12,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (12,8)-(12,9)) │ │ │ ├── flags: ∅ @@ -167,12 +193,14 @@ │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (12,11)-(12,14)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (13,2)-(13,10)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (13,2)-(13,10)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -183,6 +211,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ForwardingArgumentsNode (location: (13,6)-(13,9)) + │ │ │ └── flags: ∅ │ │ ├── closing_loc: (13,9)-(13,10) = ")" │ │ └── block: ∅ │ ├── locals: [:a] @@ -193,11 +222,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (14,0)-(14,3) = "end" ├── @ DefNode (location: (16,0)-(16,29)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (16,4)-(16,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (16,8)-(16,14)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (16,8)-(16,9)) │ │ │ ├── flags: ∅ @@ -208,12 +239,14 @@ │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (16,11)-(16,14)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (16,16)-(16,24)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (16,16)-(16,24)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -224,6 +257,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ForwardingArgumentsNode (location: (16,20)-(16,23)) + │ │ │ └── flags: ∅ │ │ ├── closing_loc: (16,23)-(16,24) = ")" │ │ └── block: ∅ │ ├── locals: [:a] @@ -234,11 +268,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (16,26)-(16,29) = "end" ├── @ DefNode (location: (18,0)-(19,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (18,4)-(18,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (18,8)-(18,21)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (18,8)-(18,9)) │ │ │ ├── flags: ∅ @@ -251,13 +287,14 @@ │ │ │ ├── operator_loc: (18,13)-(18,14) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (18,15)-(18,16)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (18,18)-(18,21)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: ∅ │ ├── locals: [:a, :b] @@ -268,11 +305,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (19,0)-(19,3) = "end" ├── @ DefNode (location: (21,0)-(23,3)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (21,4)-(21,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (21,8)-(21,18)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (21,8)-(21,13)) @@ -282,19 +321,21 @@ │ │ │ ├── operator_loc: (21,10)-(21,11) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (21,12)-(21,13)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (21,15)-(21,18)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (22,2)-(22,10)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (22,2)-(22,10)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -305,6 +346,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ForwardingArgumentsNode (location: (22,6)-(22,9)) + │ │ │ └── flags: ∅ │ │ ├── closing_loc: (22,9)-(22,10) = ")" │ │ └── block: ∅ │ ├── locals: [:b] @@ -315,11 +357,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (23,0)-(23,3) = "end" ├── @ DefNode (location: (25,0)-(25,33)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (25,4)-(25,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (25,8)-(25,18)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 1) │ │ │ └── @ OptionalParameterNode (location: (25,8)-(25,13)) @@ -329,19 +373,21 @@ │ │ │ ├── operator_loc: (25,10)-(25,11) = "=" │ │ │ └── value: │ │ │ @ IntegerNode (location: (25,12)-(25,13)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (25,15)-(25,18)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (25,20)-(25,28)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (25,20)-(25,28)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -352,6 +398,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ForwardingArgumentsNode (location: (25,24)-(25,27)) + │ │ │ └── flags: ∅ │ │ ├── closing_loc: (25,27)-(25,28) = ")" │ │ └── block: ∅ │ ├── locals: [:b] @@ -362,11 +409,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (25,30)-(25,33) = "end" └── @ DefNode (location: (27,0)-(27,28)) + ├── flags: newline ├── name: :foo ├── name_loc: (27,4)-(27,7) = "foo" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (27,8)-(27,14)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (27,8)-(27,9)) │ │ ├── flags: ∅ @@ -377,12 +426,14 @@ │ ├── keywords: (length: 0) │ ├── keyword_rest: │ │ @ ForwardingParameterNode (location: (27,11)-(27,14)) + │ │ └── flags: ∅ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (27,16)-(27,24)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (27,16)-(27,24)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar @@ -393,6 +444,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ForwardingArgumentsNode (location: (27,20)-(27,23)) + │ │ └── flags: ∅ │ ├── closing_loc: (27,23)-(27,24) = ")" │ └── block: ∅ ├── locals: [:a] diff --git a/test/prism/snapshots/whitequark/forward_args_legacy.txt b/test/prism/snapshots/whitequark/forward_args_legacy.txt index f46967ba500..6fd9c536e35 100644 --- a/test/prism/snapshots/whitequark/forward_args_legacy.txt +++ b/test/prism/snapshots/whitequark/forward_args_legacy.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(5,29)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(5,29)) + ├── flags: ∅ └── body: (length: 3) ├── @ DefNode (location: (1,0)-(1,27)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (1,4)-(1,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (1,8)-(1,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -16,12 +20,14 @@ │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (1,8)-(1,11)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (1,14)-(1,22)) + │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,14)-(1,22)) - │ │ ├── flags: ignore_visibility + │ │ ├── flags: newline, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar @@ -32,6 +38,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ ForwardingArgumentsNode (location: (1,18)-(1,21)) + │ │ │ └── flags: ∅ │ │ ├── closing_loc: (1,21)-(1,22) = ")" │ │ └── block: ∅ │ ├── locals: [] @@ -42,11 +49,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (1,24)-(1,27) = "end" ├── @ DefNode (location: (3,0)-(3,17)) + │ ├── flags: newline │ ├── name: :foo │ ├── name_loc: (3,4)-(3,7) = "foo" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (3,8)-(3,11)) + │ │ ├── flags: ∅ │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ @@ -54,6 +63,7 @@ │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ ForwardingParameterNode (location: (3,8)-(3,11)) + │ │ │ └── flags: ∅ │ │ └── block: ∅ │ ├── body: ∅ │ ├── locals: [] @@ -64,11 +74,13 @@ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (3,14)-(3,17) = "end" └── @ DefNode (location: (5,0)-(5,29)) + ├── flags: newline ├── name: :foo ├── name_loc: (5,4)-(5,7) = "foo" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (5,8)-(5,11)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -76,11 +88,14 @@ │ ├── keywords: (length: 0) │ ├── keyword_rest: │ │ @ ForwardingParameterNode (location: (5,8)-(5,11)) + │ │ └── flags: ∅ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (5,14)-(5,24)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ SuperNode (location: (5,14)-(5,24)) + │ ├── flags: newline │ ├── keyword_loc: (5,14)-(5,19) = "super" │ ├── lparen_loc: (5,19)-(5,20) = "(" │ ├── arguments: @@ -88,6 +103,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ ForwardingArgumentsNode (location: (5,20)-(5,23)) + │ │ └── flags: ∅ │ ├── rparen_loc: (5,23)-(5,24) = ")" │ └── block: ∅ ├── locals: [] diff --git a/test/prism/snapshots/whitequark/forwarded_argument_with_kwrestarg.txt b/test/prism/snapshots/whitequark/forwarded_argument_with_kwrestarg.txt index acaf9c052d1..d80ace6fbaf 100644 --- a/test/prism/snapshots/whitequark/forwarded_argument_with_kwrestarg.txt +++ b/test/prism/snapshots/whitequark/forwarded_argument_with_kwrestarg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,45)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,45)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,45)) + ├── flags: newline ├── name: :foo ├── name_loc: (1,4)-(1,7) = "foo" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,8)-(1,20)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (1,8)-(1,16)) │ │ ├── flags: ∅ @@ -26,9 +30,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,23)-(1,40)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,23)-(1,40)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar @@ -39,12 +44,14 @@ │ │ ├── flags: contains_keywords, contains_keyword_splat │ │ └── arguments: (length: 2) │ │ ├── @ LocalVariableReadNode (location: (1,27)-(1,35)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :argument │ │ │ └── depth: 0 │ │ └── @ KeywordHashNode (location: (1,37)-(1,39)) │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocSplatNode (location: (1,37)-(1,39)) + │ │ ├── flags: ∅ │ │ ├── value: ∅ │ │ └── operator_loc: (1,37)-(1,39) = "**" │ ├── closing_loc: (1,39)-(1,40) = ")" diff --git a/test/prism/snapshots/whitequark/forwarded_argument_with_restarg.txt b/test/prism/snapshots/whitequark/forwarded_argument_with_restarg.txt index 367fad7fec8..3607930b728 100644 --- a/test/prism/snapshots/whitequark/forwarded_argument_with_restarg.txt +++ b/test/prism/snapshots/whitequark/forwarded_argument_with_restarg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,43)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,43)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,43)) + ├── flags: newline ├── name: :foo ├── name_loc: (1,4)-(1,7) = "foo" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,8)-(1,19)) + │ ├── flags: ∅ │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (1,8)-(1,16)) │ │ ├── flags: ∅ @@ -26,9 +30,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,22)-(1,38)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,22)-(1,38)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar @@ -39,9 +44,11 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 2) │ │ ├── @ LocalVariableReadNode (location: (1,26)-(1,34)) + │ │ │ ├── flags: ∅ │ │ │ ├── name: :argument │ │ │ └── depth: 0 │ │ └── @ SplatNode (location: (1,36)-(1,37)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (1,36)-(1,37) = "*" │ │ └── expression: ∅ │ ├── closing_loc: (1,37)-(1,38) = ")" diff --git a/test/prism/snapshots/whitequark/forwarded_kwrestarg.txt b/test/prism/snapshots/whitequark/forwarded_kwrestarg.txt index b4235fb20ae..50cc9ca38b8 100644 --- a/test/prism/snapshots/whitequark/forwarded_kwrestarg.txt +++ b/test/prism/snapshots/whitequark/forwarded_kwrestarg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,25)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,25)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,25)) + ├── flags: newline ├── name: :foo ├── name_loc: (1,4)-(1,7) = "foo" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,8)-(1,10)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -23,9 +27,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,13)-(1,20)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,13)-(1,20)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar @@ -39,6 +44,7 @@ │ │ ├── flags: ∅ │ │ └── elements: (length: 1) │ │ └── @ AssocSplatNode (location: (1,17)-(1,19)) + │ │ ├── flags: ∅ │ │ ├── value: ∅ │ │ └── operator_loc: (1,17)-(1,19) = "**" │ ├── closing_loc: (1,19)-(1,20) = ")" diff --git a/test/prism/snapshots/whitequark/forwarded_kwrestarg_with_additional_kwarg.txt b/test/prism/snapshots/whitequark/forwarded_kwrestarg_with_additional_kwarg.txt index 33779abcc16..32ace5cb3d4 100644 --- a/test/prism/snapshots/whitequark/forwarded_kwrestarg_with_additional_kwarg.txt +++ b/test/prism/snapshots/whitequark/forwarded_kwrestarg_with_additional_kwarg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,41)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,41)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,41)) + ├── flags: newline ├── name: :foo ├── name_loc: (1,4)-(1,7) = "foo" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,8)-(1,10)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: ∅ @@ -23,9 +27,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,13)-(1,36)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,13)-(1,36)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar @@ -39,18 +44,21 @@ │ │ ├── flags: ∅ │ │ └── elements: (length: 2) │ │ ├── @ AssocSplatNode (location: (1,17)-(1,19)) + │ │ │ ├── flags: ∅ │ │ │ ├── value: ∅ │ │ │ └── operator_loc: (1,17)-(1,19) = "**" │ │ └── @ AssocNode (location: (1,21)-(1,35)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (1,21)-(1,30)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (1,21)-(1,29) = "from_foo" │ │ │ ├── closing_loc: (1,29)-(1,30) = ":" │ │ │ └── unescaped: "from_foo" │ │ ├── value: │ │ │ @ TrueNode (location: (1,31)-(1,35)) + │ │ │ └── flags: static_literal │ │ └── operator_loc: ∅ │ ├── closing_loc: (1,35)-(1,36) = ")" │ └── block: ∅ diff --git a/test/prism/snapshots/whitequark/forwarded_restarg.txt b/test/prism/snapshots/whitequark/forwarded_restarg.txt index 17ff8894afa..c0bdd05a36e 100644 --- a/test/prism/snapshots/whitequark/forwarded_restarg.txt +++ b/test/prism/snapshots/whitequark/forwarded_restarg.txt @@ -1,14 +1,18 @@ @ ProgramNode (location: (1,0)-(1,23)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,23)) + ├── flags: ∅ └── body: (length: 1) └── @ DefNode (location: (1,0)-(1,23)) + ├── flags: newline ├── name: :foo ├── name_loc: (1,4)-(1,7) = "foo" ├── receiver: ∅ ├── parameters: │ @ ParametersNode (location: (1,8)-(1,9)) + │ ├── flags: ∅ │ ├── requireds: (length: 0) │ ├── optionals: (length: 0) │ ├── rest: @@ -23,9 +27,10 @@ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (1,12)-(1,18)) + │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,12)-(1,18)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar @@ -36,6 +41,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (1,16)-(1,17)) + │ │ ├── flags: ∅ │ │ ├── operator_loc: (1,16)-(1,17) = "*" │ │ └── expression: ∅ │ ├── closing_loc: (1,17)-(1,18) = ")" diff --git a/test/prism/snapshots/whitequark/gvar.txt b/test/prism/snapshots/whitequark/gvar.txt index f4401c4389b..5191f28e241 100644 --- a/test/prism/snapshots/whitequark/gvar.txt +++ b/test/prism/snapshots/whitequark/gvar.txt @@ -1,7 +1,10 @@ @ ProgramNode (location: (1,0)-(1,4)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,4)) + ├── flags: ∅ └── body: (length: 1) └── @ GlobalVariableReadNode (location: (1,0)-(1,4)) + ├── flags: newline └── name: :$foo diff --git a/test/prism/snapshots/whitequark/gvasgn.txt b/test/prism/snapshots/whitequark/gvasgn.txt index fc044054d88..e5bfe44d18a 100644 --- a/test/prism/snapshots/whitequark/gvasgn.txt +++ b/test/prism/snapshots/whitequark/gvasgn.txt @@ -1,13 +1,16 @@ @ ProgramNode (location: (1,0)-(1,9)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,9)) + ├── flags: ∅ └── body: (length: 1) └── @ GlobalVariableWriteNode (location: (1,0)-(1,9)) + ├── flags: newline ├── name: :$var ├── name_loc: (1,0)-(1,4) = "$var" ├── value: │ @ IntegerNode (location: (1,7)-(1,9)) - │ ├── flags: decimal + │ ├── flags: static_literal, decimal │ └── value: 10 └── operator_loc: (1,5)-(1,6) = "=" diff --git a/test/prism/snapshots/whitequark/hash_empty.txt b/test/prism/snapshots/whitequark/hash_empty.txt index 38a2c15a9ad..3f6fcdd171f 100644 --- a/test/prism/snapshots/whitequark/hash_empty.txt +++ b/test/prism/snapshots/whitequark/hash_empty.txt @@ -1,9 +1,12 @@ @ ProgramNode (location: (1,0)-(1,3)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,3)) + ├── flags: ∅ └── body: (length: 1) └── @ HashNode (location: (1,0)-(1,3)) + ├── flags: newline, static_literal ├── opening_loc: (1,0)-(1,1) = "{" ├── elements: (length: 0) └── closing_loc: (1,2)-(1,3) = "}" diff --git a/test/prism/snapshots/whitequark/hash_hashrocket.txt b/test/prism/snapshots/whitequark/hash_hashrocket.txt index e661a7b0480..fcf3fe3055b 100644 --- a/test/prism/snapshots/whitequark/hash_hashrocket.txt +++ b/test/prism/snapshots/whitequark/hash_hashrocket.txt @@ -1,39 +1,46 @@ @ ProgramNode (location: (1,0)-(3,25)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,25)) + ├── flags: ∅ └── body: (length: 2) ├── @ HashNode (location: (1,0)-(1,10)) + │ ├── flags: newline, static_literal │ ├── opening_loc: (1,0)-(1,1) = "{" │ ├── elements: (length: 1) │ │ └── @ AssocNode (location: (1,2)-(1,8)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ IntegerNode (location: (1,2)-(1,3)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── value: │ │ │ @ IntegerNode (location: (1,7)-(1,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: (1,4)-(1,6) = "=>" │ └── closing_loc: (1,9)-(1,10) = "}" └── @ HashNode (location: (3,0)-(3,25)) + ├── flags: newline ├── opening_loc: (3,0)-(3,1) = "{" ├── elements: (length: 2) │ ├── @ AssocNode (location: (3,2)-(3,8)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ IntegerNode (location: (3,2)-(3,3)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ ├── value: │ │ │ @ IntegerNode (location: (3,7)-(3,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: (3,4)-(3,6) = "=>" │ └── @ AssocNode (location: (3,10)-(3,23)) + │ ├── flags: ∅ │ ├── key: │ │ @ SymbolNode (location: (3,10)-(3,14)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (3,10)-(3,11) = ":" │ │ ├── value_loc: (3,11)-(3,14) = "foo" │ │ ├── closing_loc: ∅ diff --git a/test/prism/snapshots/whitequark/hash_kwsplat.txt b/test/prism/snapshots/whitequark/hash_kwsplat.txt index a5d12174cc4..acccc48b3d6 100644 --- a/test/prism/snapshots/whitequark/hash_kwsplat.txt +++ b/test/prism/snapshots/whitequark/hash_kwsplat.txt @@ -1,25 +1,30 @@ @ ProgramNode (location: (1,0)-(1,17)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,17)) + ├── flags: ∅ └── body: (length: 1) └── @ HashNode (location: (1,0)-(1,17)) + ├── flags: newline ├── opening_loc: (1,0)-(1,1) = "{" ├── elements: (length: 2) │ ├── @ AssocNode (location: (1,2)-(1,8)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (1,2)-(1,6)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (1,2)-(1,5) = "foo" │ │ │ ├── closing_loc: (1,5)-(1,6) = ":" │ │ │ └── unescaped: "foo" │ │ ├── value: │ │ │ @ IntegerNode (location: (1,7)-(1,8)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: ∅ │ └── @ AssocSplatNode (location: (1,10)-(1,15)) + │ ├── flags: ∅ │ ├── value: │ │ @ CallNode (location: (1,12)-(1,15)) │ │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/whitequark/hash_label.txt b/test/prism/snapshots/whitequark/hash_label.txt index fdf7a21ed0c..b321e218592 100644 --- a/test/prism/snapshots/whitequark/hash_label.txt +++ b/test/prism/snapshots/whitequark/hash_label.txt @@ -1,22 +1,26 @@ @ ProgramNode (location: (1,0)-(1,10)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,10)) + ├── flags: ∅ └── body: (length: 1) └── @ HashNode (location: (1,0)-(1,10)) + ├── flags: newline, static_literal ├── opening_loc: (1,0)-(1,1) = "{" ├── elements: (length: 1) │ └── @ AssocNode (location: (1,2)-(1,8)) + │ ├── flags: static_literal │ ├── key: │ │ @ SymbolNode (location: (1,2)-(1,6)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (1,2)-(1,5) = "foo" │ │ ├── closing_loc: (1,5)-(1,6) = ":" │ │ └── unescaped: "foo" │ ├── value: │ │ @ IntegerNode (location: (1,7)-(1,8)) - │ │ ├── flags: decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── operator_loc: ∅ └── closing_loc: (1,9)-(1,10) = "}" diff --git a/test/prism/snapshots/whitequark/hash_label_end.txt b/test/prism/snapshots/whitequark/hash_label_end.txt index 88b70d38e2c..7714021dbb4 100644 --- a/test/prism/snapshots/whitequark/hash_label_end.txt +++ b/test/prism/snapshots/whitequark/hash_label_end.txt @@ -1,10 +1,12 @@ @ ProgramNode (location: (1,0)-(5,22)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(5,22)) + ├── flags: ∅ └── body: (length: 3) ├── @ CallNode (location: (1,0)-(1,12)) - │ ├── flags: ignore_visibility + │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :f @@ -15,6 +17,7 @@ │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ IfNode (location: (1,2)-(1,11)) + │ │ ├── flags: newline │ │ ├── if_keyword_loc: ∅ │ │ ├── predicate: │ │ │ @ CallNode (location: (1,2)-(1,3)) @@ -30,69 +33,78 @@ │ │ ├── then_keyword_loc: (1,4)-(1,5) = "?" │ │ ├── statements: │ │ │ @ StatementsNode (location: (1,6)-(1,9)) + │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ StringNode (location: (1,6)-(1,9)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: newline │ │ │ ├── opening_loc: (1,6)-(1,7) = "\"" │ │ │ ├── content_loc: (1,7)-(1,8) = "a" │ │ │ ├── closing_loc: (1,8)-(1,9) = "\"" │ │ │ └── unescaped: "a" │ │ ├── consequent: │ │ │ @ ElseNode (location: (1,9)-(1,11)) + │ │ │ ├── flags: ∅ │ │ │ ├── else_keyword_loc: (1,9)-(1,10) = ":" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (1,10)-(1,11)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ IntegerNode (location: (1,10)-(1,11)) - │ │ │ │ ├── flags: decimal + │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ └── value: 1 │ │ │ └── end_keyword_loc: ∅ │ │ └── end_keyword_loc: ∅ │ ├── closing_loc: (1,11)-(1,12) = ")" │ └── block: ∅ ├── @ HashNode (location: (3,0)-(3,12)) + │ ├── flags: newline, static_literal │ ├── opening_loc: (3,0)-(3,1) = "{" │ ├── elements: (length: 1) │ │ └── @ AssocNode (location: (3,2)-(3,10)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (3,2)-(3,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (3,2)-(3,3) = "'" │ │ │ ├── value_loc: (3,3)-(3,6) = "foo" │ │ │ ├── closing_loc: (3,6)-(3,8) = "':" │ │ │ └── unescaped: "foo" │ │ ├── value: │ │ │ @ IntegerNode (location: (3,9)-(3,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: ∅ │ └── closing_loc: (3,11)-(3,12) = "}" └── @ HashNode (location: (5,0)-(5,22)) + ├── flags: newline ├── opening_loc: (5,0)-(5,1) = "{" ├── elements: (length: 2) │ ├── @ AssocNode (location: (5,2)-(5,10)) + │ │ ├── flags: static_literal │ │ ├── key: │ │ │ @ SymbolNode (location: (5,2)-(5,8)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: (5,2)-(5,3) = "'" │ │ │ ├── value_loc: (5,3)-(5,6) = "foo" │ │ │ ├── closing_loc: (5,6)-(5,8) = "':" │ │ │ └── unescaped: "foo" │ │ ├── value: │ │ │ @ IntegerNode (location: (5,9)-(5,10)) - │ │ │ ├── flags: decimal + │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 2 │ │ └── operator_loc: ∅ │ └── @ AssocNode (location: (5,12)-(5,21)) + │ ├── flags: ∅ │ ├── key: │ │ @ SymbolNode (location: (5,12)-(5,18)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: (5,12)-(5,13) = "'" │ │ ├── value_loc: (5,13)-(5,16) = "bar" │ │ ├── closing_loc: (5,16)-(5,18) = "':" │ │ └── unescaped: "bar" │ ├── value: │ │ @ HashNode (location: (5,19)-(5,21)) + │ │ ├── flags: static_literal │ │ ├── opening_loc: (5,19)-(5,20) = "{" │ │ ├── elements: (length: 0) │ │ └── closing_loc: (5,20)-(5,21) = "}" diff --git a/test/prism/snapshots/whitequark/hash_pair_value_omission.txt b/test/prism/snapshots/whitequark/hash_pair_value_omission.txt index 455ba48407a..d87b1ef0f9f 100644 --- a/test/prism/snapshots/whitequark/hash_pair_value_omission.txt +++ b/test/prism/snapshots/whitequark/hash_pair_value_omission.txt @@ -1,39 +1,48 @@ @ ProgramNode (location: (1,0)-(5,7)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(5,7)) + ├── flags: ∅ └── body: (length: 3) ├── @ HashNode (location: (1,0)-(1,6)) + │ ├── flags: newline │ ├── opening_loc: (1,0)-(1,1) = "{" │ ├── elements: (length: 1) │ │ └── @ AssocNode (location: (1,1)-(1,5)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (1,1)-(1,5)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (1,1)-(1,4) = "BAR" │ │ │ ├── closing_loc: (1,4)-(1,5) = ":" │ │ │ └── unescaped: "BAR" │ │ ├── value: │ │ │ @ ImplicitNode (location: (1,1)-(1,5)) + │ │ │ ├── flags: ∅ │ │ │ └── value: │ │ │ @ ConstantReadNode (location: (1,1)-(1,5)) + │ │ │ ├── flags: ∅ │ │ │ └── name: :BAR │ │ └── operator_loc: ∅ │ └── closing_loc: (1,5)-(1,6) = "}" ├── @ HashNode (location: (3,0)-(3,8)) + │ ├── flags: newline │ ├── opening_loc: (3,0)-(3,1) = "{" │ ├── elements: (length: 2) │ │ ├── @ AssocNode (location: (3,1)-(3,3)) + │ │ │ ├── flags: ∅ │ │ │ ├── key: │ │ │ │ @ SymbolNode (location: (3,1)-(3,3)) - │ │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── value_loc: (3,1)-(3,2) = "a" │ │ │ │ ├── closing_loc: (3,2)-(3,3) = ":" │ │ │ │ └── unescaped: "a" │ │ │ ├── value: │ │ │ │ @ ImplicitNode (location: (3,1)-(3,3)) + │ │ │ │ ├── flags: ∅ │ │ │ │ └── value: │ │ │ │ @ CallNode (location: (3,1)-(3,3)) │ │ │ │ ├── flags: ignore_visibility @@ -47,15 +56,17 @@ │ │ │ │ └── block: ∅ │ │ │ └── operator_loc: ∅ │ │ └── @ AssocNode (location: (3,5)-(3,7)) + │ │ ├── flags: ∅ │ │ ├── key: │ │ │ @ SymbolNode (location: (3,5)-(3,7)) - │ │ │ ├── flags: forced_us_ascii_encoding + │ │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ │ ├── opening_loc: ∅ │ │ │ ├── value_loc: (3,5)-(3,6) = "b" │ │ │ ├── closing_loc: (3,6)-(3,7) = ":" │ │ │ └── unescaped: "b" │ │ ├── value: │ │ │ @ ImplicitNode (location: (3,5)-(3,7)) + │ │ │ ├── flags: ∅ │ │ │ └── value: │ │ │ @ CallNode (location: (3,5)-(3,7)) │ │ │ ├── flags: ignore_visibility @@ -70,18 +81,21 @@ │ │ └── operator_loc: ∅ │ └── closing_loc: (3,7)-(3,8) = "}" └── @ HashNode (location: (5,0)-(5,7)) + ├── flags: newline ├── opening_loc: (5,0)-(5,1) = "{" ├── elements: (length: 1) │ └── @ AssocNode (location: (5,1)-(5,6)) + │ ├── flags: ∅ │ ├── key: │ │ @ SymbolNode (location: (5,1)-(5,6)) - │ │ ├── flags: forced_us_ascii_encoding + │ │ ├── flags: static_literal, forced_us_ascii_encoding │ │ ├── opening_loc: ∅ │ │ ├── value_loc: (5,1)-(5,5) = "puts" │ │ ├── closing_loc: (5,5)-(5,6) = ":" │ │ └── unescaped: "puts" │ ├── value: │ │ @ ImplicitNode (location: (5,1)-(5,6)) + │ │ ├── flags: ∅ │ │ └── value: │ │ @ CallNode (location: (5,1)-(5,6)) │ │ ├── flags: ignore_visibility diff --git a/test/prism/snapshots/whitequark/heredoc.txt b/test/prism/snapshots/whitequark/heredoc.txt index 86543097ee1..76b3e94a922 100644 --- a/test/prism/snapshots/whitequark/heredoc.txt +++ b/test/prism/snapshots/whitequark/heredoc.txt @@ -1,22 +1,24 @@ @ ProgramNode (location: (1,0)-(11,8)) +├── flags: ∅ ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(11,8)) + ├── flags: ∅ └── body: (length: 3) ├── @ StringNode (location: (1,0)-(1,8)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (1,0)-(1,8) = "<<'HERE'" │ ├── content_loc: (2,0)-(4,0) = "foo\nbar\n" │ ├── closing_loc: (4,0)-(5,0) = "HERE\n" │ └── unescaped: "foo\nbar\n" ├── @ StringNode (location: (6,0)-(6,6)) - │ ├── flags: ∅ + │ ├── flags: newline │ ├── opening_loc: (6,0)-(6,6) = "< Date: Wed, 3 Jul 2024 08:42:28 -0400 Subject: [PATCH 027/109] Add Node#breadth_first_search --- templates/lib/prism/node.rb.erb | 17 +++++++++++++++++ test/prism/result/breadth_first_search_test.rb | 18 ++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 test/prism/result/breadth_first_search_test.rb diff --git a/templates/lib/prism/node.rb.erb b/templates/lib/prism/node.rb.erb index ce166dda65f..66cbce767ef 100644 --- a/templates/lib/prism/node.rb.erb +++ b/templates/lib/prism/node.rb.erb @@ -116,6 +116,23 @@ module Prism result end + # Returns the first node that matches the given block when visited in a + # depth-first search. This is useful for finding a node that matches a + # particular condition. + # + # node.breadth_first_search { |node| node.node_id == node_id } + # + def breadth_first_search(&block) + queue = [self] #: Array[Prism::node] + + while (node = queue.shift) + return node if yield node + queue.concat(node.compact_child_nodes) + end + + nil + end + # Returns a list of the fields that exist for this node class. Fields # describe the structure of the node. This kind of reflection is useful for # things like recursively visiting each node _and_ field in the tree. diff --git a/test/prism/result/breadth_first_search_test.rb b/test/prism/result/breadth_first_search_test.rb new file mode 100644 index 00000000000..e2e043a9021 --- /dev/null +++ b/test/prism/result/breadth_first_search_test.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require_relative "../test_helper" + +module Prism + class BreadthFirstSearchTest < TestCase + def test_breadth_first_search + result = Prism.parse("[1 + 2, 2]") + found = + result.value.breadth_first_search do |node| + node.is_a?(IntegerNode) && node.value == 2 + end + + refute_nil found + assert_equal 8, found.start_offset + end + end +end From 08a71f62598dfa29c39dee86a96322ee8af7d3b3 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 3 Jul 2024 08:50:22 -0400 Subject: [PATCH 028/109] Move Node#type and Node::type documentation --- prism.gemspec | 1 + templates/lib/prism/node.rb.erb | 49 +++++++++++++++------------------ test/prism/newline_test.rb | 1 + 3 files changed, 24 insertions(+), 27 deletions(-) diff --git a/prism.gemspec b/prism.gemspec index b39ba706dcd..750af194a83 100644 --- a/prism.gemspec +++ b/prism.gemspec @@ -82,6 +82,7 @@ Gem::Specification.new do |spec| "lib/prism/pack.rb", "lib/prism/parse_result.rb", "lib/prism/parse_result/comments.rb", + "lib/prism/parse_result/errors.rb", "lib/prism/parse_result/newlines.rb", "lib/prism/pattern.rb", "lib/prism/polyfill/byteindex.rb", diff --git a/templates/lib/prism/node.rb.erb b/templates/lib/prism/node.rb.erb index 66cbce767ef..8b6c54ef009 100644 --- a/templates/lib/prism/node.rb.erb +++ b/templates/lib/prism/node.rb.erb @@ -176,18 +176,31 @@ module Prism raise NoMethodError, "undefined method `comment_targets' for #{inspect}" end - # Returns a symbol symbolizing the type of node that this represents. This - # is particularly useful for case statements and array comparisons. - def type - raise NoMethodError, "undefined method `type' for #{inspect}" - end - # Returns a string representation of the node. def inspect raise NoMethodError, "undefined method `inspect' for #{inspect}" end - # Returns the type of the node as a symbol. + # Sometimes you want to check an instance of a node against a list of + # classes to see what kind of behavior to perform. Usually this is done by + # calling `[cls1, cls2].include?(node.class)` or putting the node into a + # case statement and doing `case node; when cls1; when cls2; end`. Both of + # these approaches are relatively slow because of the constant lookups, + # method calls, and/or array allocations. + # + # Instead, you can call #type, which will return to you a symbol that you + # can use for comparison. This is faster than the other approaches because + # it uses a single integer comparison, but also because if you're on CRuby + # you can take advantage of the fact that case statements with all symbol + # keys will use a jump table. + def type + raise NoMethodError, "undefined method `type' for #{inspect}" + end + + # Similar to #type, this method returns a symbol that you can use for + # splitting on the type of the node without having to do a long === chain. + # Note that like #type, it will still be slower than using == for a single + # class, but should be faster in a case statement or an array comparison. def self.type raise NoMethodError, "undefined method `type' for #{inspect}" end @@ -340,30 +353,12 @@ module Prism InspectVisitor.compose(self) end - # Sometimes you want to check an instance of a node against a list of - # classes to see what kind of behavior to perform. Usually this is done by - # calling `[cls1, cls2].include?(node.class)` or putting the node into a - # case statement and doing `case node; when cls1; when cls2; end`. Both of - # these approaches are relatively slow because of the constant lookups, - # method calls, and/or array allocations. - # - # Instead, you can call #type, which will return to you a symbol that you - # can use for comparison. This is faster than the other approaches because - # it uses a single integer comparison, but also because if you're on CRuby - # you can take advantage of the fact that case statements with all symbol - # keys will use a jump table. - # - # def type: () -> Symbol + # Return a symbol representation of this node type. See `Node#type`. def type :<%= node.human %> end - # Similar to #type, this method returns a symbol that you can use for - # splitting on the type of the node without having to do a long === chain. - # Note that like #type, it will still be slower than using == for a single - # class, but should be faster in a case statement or an array comparison. - # - # def self.type: () -> Symbol + # Return a symbol representation of this node type. See `Node::type`. def self.type :<%= node.human %> end diff --git a/test/prism/newline_test.rb b/test/prism/newline_test.rb index a244b5428a6..fefe9def91f 100644 --- a/test/prism/newline_test.rb +++ b/test/prism/newline_test.rb @@ -14,6 +14,7 @@ class NewlineTest < TestCase unescape_test.rb encoding/regular_expression_encoding_test.rb encoding/string_encoding_test.rb + result/breadth_first_search_test.rb result/static_literals_test.rb result/warnings_test.rb ruby/parser_test.rb From bf16ade7f918f403339048f2dace3183e03db6c0 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 3 Jul 2024 10:42:56 -0400 Subject: [PATCH 029/109] Add node ids to nodes --- docs/serialization.md | 1 + include/prism/parser.h | 7 + lib/prism/node_ext.rb | 22 +- src/prism.c | 536 +++++++++++++------- templates/ext/prism/api_node.c.erb | 13 +- templates/include/prism/ast.h.erb | 6 + templates/java/org/prism/Loader.java.erb | 5 +- templates/java/org/prism/Nodes.java.erb | 15 +- templates/javascript/src/deserialize.js.erb | 3 +- templates/javascript/src/nodes.js.erb | 18 +- templates/lib/prism/dsl.rb.erb | 6 +- templates/lib/prism/node.rb.erb | 19 +- templates/lib/prism/serialize.rb.erb | 6 +- templates/src/serialize.c.erb | 1 + test/prism/result/node_id_test.rb | 27 + 15 files changed, 475 insertions(+), 210 deletions(-) create mode 100644 test/prism/result/node_id_test.rb diff --git a/docs/serialization.md b/docs/serialization.md index ad3ddb4837a..ec395f8847d 100644 --- a/docs/serialization.md +++ b/docs/serialization.md @@ -116,6 +116,7 @@ Each node is structured like the following table: | # bytes | field | | --- | --- | | `1` | node type | +| varuint | node identifier | | location | node location | | varuint | node flags | diff --git a/include/prism/parser.h b/include/prism/parser.h index 048955409b4..bc311b6ef45 100644 --- a/include/prism/parser.h +++ b/include/prism/parser.h @@ -625,6 +625,13 @@ typedef uint32_t pm_state_stack_t; * it's considering. */ struct pm_parser { + /** + * The next node identifier that will be assigned. This is a unique + * identifier used to track nodes such that the syntax tree can be dropped + * but the node can be found through another parse. + */ + uint32_t node_id; + /** The current state of the lexer. */ pm_lex_state_t lex_state; diff --git a/lib/prism/node_ext.rb b/lib/prism/node_ext.rb index 30ab6523843..354bfdb2058 100644 --- a/lib/prism/node_ext.rb +++ b/lib/prism/node_ext.rb @@ -72,6 +72,7 @@ class StringNode < Node def to_interpolated InterpolatedStringNode.new( source, + -1, location, frozen? ? InterpolatedStringNodeFlags::FROZEN : 0, opening_loc, @@ -89,10 +90,11 @@ class XStringNode < Node def to_interpolated InterpolatedXStringNode.new( source, + -1, location, flags, opening_loc, - [StringNode.new(source, content_loc, 0, nil, content_loc, nil, unescaped)], + [StringNode.new(source, node_id, content_loc, 0, nil, content_loc, nil, unescaped)], closing_loc ) end @@ -119,9 +121,9 @@ def numeric deprecated("value", "numerator", "denominator") if denominator == 1 - IntegerNode.new(source, location.chop, flags, numerator) + IntegerNode.new(source, -1, location.chop, flags, numerator) else - FloatNode.new(source, location.chop, 0, numerator.to_f / denominator) + FloatNode.new(source, -1, location.chop, 0, numerator.to_f / denominator) end end end @@ -199,7 +201,12 @@ def full_name # continue to supply that API. def child deprecated("name", "name_loc") - name ? ConstantReadNode.new(source, name_loc, 0, name) : MissingNode.new(source, location, 0) + + if name + ConstantReadNode.new(source, -1, name_loc, 0, name) + else + MissingNode.new(source, -1, location, 0) + end end end @@ -235,7 +242,12 @@ def full_name # continue to supply that API. def child deprecated("name", "name_loc") - name ? ConstantReadNode.new(source, name_loc, 0, name) : MissingNode.new(source, location, 0) + + if name + ConstantReadNode.new(source, -1, name_loc, 0, name) + else + MissingNode.new(source, -1, location, 0) + end end end diff --git a/src/prism.c b/src/prism.c index 36f3a829eda..73df294213a 100644 --- a/src/prism.c +++ b/src/prism.c @@ -1875,7 +1875,7 @@ pm_statements_node_body_length(pm_statements_node_t *node); * implement our own arena allocation. */ static inline void * -pm_alloc_node(PRISM_ATTRIBUTE_UNUSED pm_parser_t *parser, size_t size) { +pm_node_alloc(PRISM_ATTRIBUTE_UNUSED pm_parser_t *parser, size_t size) { void *memory = xcalloc(1, size); if (memory == NULL) { fprintf(stderr, "Failed to allocate %d bytes\n", (int) size); @@ -1884,15 +1884,22 @@ pm_alloc_node(PRISM_ATTRIBUTE_UNUSED pm_parser_t *parser, size_t size) { return memory; } -#define PM_ALLOC_NODE(parser, type) (type *) pm_alloc_node(parser, sizeof(type)) +#define PM_NODE_ALLOC(parser, type) (type *) pm_node_alloc(parser, sizeof(type)) +#define PM_NODE_IDENTIFY(parser) (++parser->node_id) /** * Allocate a new MissingNode node. */ static pm_missing_node_t * pm_missing_node_create(pm_parser_t *parser, const uint8_t *start, const uint8_t *end) { - pm_missing_node_t *node = PM_ALLOC_NODE(parser, pm_missing_node_t); - *node = (pm_missing_node_t) {{ .type = PM_MISSING_NODE, .location = { .start = start, .end = end } }}; + pm_missing_node_t *node = PM_NODE_ALLOC(parser, pm_missing_node_t); + + *node = (pm_missing_node_t) {{ + .type = PM_MISSING_NODE, + .node_id = PM_NODE_IDENTIFY(parser), + .location = { .start = start, .end = end } + }}; + return node; } @@ -1902,11 +1909,12 @@ pm_missing_node_create(pm_parser_t *parser, const uint8_t *start, const uint8_t static pm_alias_global_variable_node_t * pm_alias_global_variable_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t *new_name, pm_node_t *old_name) { assert(keyword->type == PM_TOKEN_KEYWORD_ALIAS); - pm_alias_global_variable_node_t *node = PM_ALLOC_NODE(parser, pm_alias_global_variable_node_t); + pm_alias_global_variable_node_t *node = PM_NODE_ALLOC(parser, pm_alias_global_variable_node_t); *node = (pm_alias_global_variable_node_t) { { .type = PM_ALIAS_GLOBAL_VARIABLE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword->start, .end = old_name->location.end @@ -1926,11 +1934,12 @@ pm_alias_global_variable_node_create(pm_parser_t *parser, const pm_token_t *keyw static pm_alias_method_node_t * pm_alias_method_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t *new_name, pm_node_t *old_name) { assert(keyword->type == PM_TOKEN_KEYWORD_ALIAS); - pm_alias_method_node_t *node = PM_ALLOC_NODE(parser, pm_alias_method_node_t); + pm_alias_method_node_t *node = PM_NODE_ALLOC(parser, pm_alias_method_node_t); *node = (pm_alias_method_node_t) { { .type = PM_ALIAS_METHOD_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword->start, .end = old_name->location.end @@ -1949,11 +1958,12 @@ pm_alias_method_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_n */ static pm_alternation_pattern_node_t * pm_alternation_pattern_node_create(pm_parser_t *parser, pm_node_t *left, pm_node_t *right, const pm_token_t *operator) { - pm_alternation_pattern_node_t *node = PM_ALLOC_NODE(parser, pm_alternation_pattern_node_t); + pm_alternation_pattern_node_t *node = PM_NODE_ALLOC(parser, pm_alternation_pattern_node_t); *node = (pm_alternation_pattern_node_t) { { .type = PM_ALTERNATION_PATTERN_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = left->location.start, .end = right->location.end @@ -1974,11 +1984,12 @@ static pm_and_node_t * pm_and_node_create(pm_parser_t *parser, pm_node_t *left, const pm_token_t *operator, pm_node_t *right) { pm_assert_value_expression(parser, left); - pm_and_node_t *node = PM_ALLOC_NODE(parser, pm_and_node_t); + pm_and_node_t *node = PM_NODE_ALLOC(parser, pm_and_node_t); *node = (pm_and_node_t) { { .type = PM_AND_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = left->location.start, .end = right->location.end @@ -1997,11 +2008,12 @@ pm_and_node_create(pm_parser_t *parser, pm_node_t *left, const pm_token_t *opera */ static pm_arguments_node_t * pm_arguments_node_create(pm_parser_t *parser) { - pm_arguments_node_t *node = PM_ALLOC_NODE(parser, pm_arguments_node_t); + pm_arguments_node_t *node = PM_NODE_ALLOC(parser, pm_arguments_node_t); *node = (pm_arguments_node_t) { { .type = PM_ARGUMENTS_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_NULL_VALUE(parser) }, .arguments = { 0 } @@ -2036,12 +2048,13 @@ pm_arguments_node_arguments_append(pm_arguments_node_t *node, pm_node_t *argumen */ static pm_array_node_t * pm_array_node_create(pm_parser_t *parser, const pm_token_t *opening) { - pm_array_node_t *node = PM_ALLOC_NODE(parser, pm_array_node_t); + pm_array_node_t *node = PM_NODE_ALLOC(parser, pm_array_node_t); *node = (pm_array_node_t) { { .type = PM_ARRAY_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(opening) }, .opening_loc = PM_OPTIONAL_LOCATION_TOKEN_VALUE(opening), @@ -2099,11 +2112,12 @@ pm_array_node_close_set(pm_array_node_t *node, const pm_token_t *closing) { */ static pm_array_pattern_node_t * pm_array_pattern_node_node_list_create(pm_parser_t *parser, pm_node_list_t *nodes) { - pm_array_pattern_node_t *node = PM_ALLOC_NODE(parser, pm_array_pattern_node_t); + pm_array_pattern_node_t *node = PM_NODE_ALLOC(parser, pm_array_pattern_node_t); *node = (pm_array_pattern_node_t) { { .type = PM_ARRAY_PATTERN_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = nodes->nodes[0]->location.start, .end = nodes->nodes[nodes->size - 1]->location.end @@ -2141,11 +2155,12 @@ pm_array_pattern_node_node_list_create(pm_parser_t *parser, pm_node_list_t *node */ static pm_array_pattern_node_t * pm_array_pattern_node_rest_create(pm_parser_t *parser, pm_node_t *rest) { - pm_array_pattern_node_t *node = PM_ALLOC_NODE(parser, pm_array_pattern_node_t); + pm_array_pattern_node_t *node = PM_NODE_ALLOC(parser, pm_array_pattern_node_t); *node = (pm_array_pattern_node_t) { { .type = PM_ARRAY_PATTERN_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = rest->location, }, .constant = NULL, @@ -2165,11 +2180,12 @@ pm_array_pattern_node_rest_create(pm_parser_t *parser, pm_node_t *rest) { */ static pm_array_pattern_node_t * pm_array_pattern_node_constant_create(pm_parser_t *parser, pm_node_t *constant, const pm_token_t *opening, const pm_token_t *closing) { - pm_array_pattern_node_t *node = PM_ALLOC_NODE(parser, pm_array_pattern_node_t); + pm_array_pattern_node_t *node = PM_NODE_ALLOC(parser, pm_array_pattern_node_t); *node = (pm_array_pattern_node_t) { { .type = PM_ARRAY_PATTERN_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = constant->location.start, .end = closing->end @@ -2192,11 +2208,12 @@ pm_array_pattern_node_constant_create(pm_parser_t *parser, pm_node_t *constant, */ static pm_array_pattern_node_t * pm_array_pattern_node_empty_create(pm_parser_t *parser, const pm_token_t *opening, const pm_token_t *closing) { - pm_array_pattern_node_t *node = PM_ALLOC_NODE(parser, pm_array_pattern_node_t); + pm_array_pattern_node_t *node = PM_NODE_ALLOC(parser, pm_array_pattern_node_t); *node = (pm_array_pattern_node_t) { { .type = PM_ARRAY_PATTERN_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = opening->start, .end = closing->end @@ -2223,7 +2240,7 @@ pm_array_pattern_node_requireds_append(pm_array_pattern_node_t *node, pm_node_t */ static pm_assoc_node_t * pm_assoc_node_create(pm_parser_t *parser, pm_node_t *key, const pm_token_t *operator, pm_node_t *value) { - pm_assoc_node_t *node = PM_ALLOC_NODE(parser, pm_assoc_node_t); + pm_assoc_node_t *node = PM_NODE_ALLOC(parser, pm_assoc_node_t); const uint8_t *end; if (value != NULL && value->location.end > key->location.end) { @@ -2252,6 +2269,7 @@ pm_assoc_node_create(pm_parser_t *parser, pm_node_t *key, const pm_token_t *oper { .type = PM_ASSOC_NODE, .flags = flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = key->location.start, .end = end @@ -2271,11 +2289,12 @@ pm_assoc_node_create(pm_parser_t *parser, pm_node_t *key, const pm_token_t *oper static pm_assoc_splat_node_t * pm_assoc_splat_node_create(pm_parser_t *parser, pm_node_t *value, const pm_token_t *operator) { assert(operator->type == PM_TOKEN_USTAR_STAR); - pm_assoc_splat_node_t *node = PM_ALLOC_NODE(parser, pm_assoc_splat_node_t); + pm_assoc_splat_node_t *node = PM_NODE_ALLOC(parser, pm_assoc_splat_node_t); *node = (pm_assoc_splat_node_t) { { .type = PM_ASSOC_SPLAT_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = operator->start, .end = value == NULL ? operator->end : value->location.end @@ -2294,11 +2313,12 @@ pm_assoc_splat_node_create(pm_parser_t *parser, pm_node_t *value, const pm_token static pm_back_reference_read_node_t * pm_back_reference_read_node_create(pm_parser_t *parser, const pm_token_t *name) { assert(name->type == PM_TOKEN_BACK_REFERENCE); - pm_back_reference_read_node_t *node = PM_ALLOC_NODE(parser, pm_back_reference_read_node_t); + pm_back_reference_read_node_t *node = PM_NODE_ALLOC(parser, pm_back_reference_read_node_t); *node = (pm_back_reference_read_node_t) { { .type = PM_BACK_REFERENCE_READ_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(name), }, .name = pm_parser_constant_id_token(parser, name) @@ -2312,11 +2332,12 @@ pm_back_reference_read_node_create(pm_parser_t *parser, const pm_token_t *name) */ static pm_begin_node_t * pm_begin_node_create(pm_parser_t *parser, const pm_token_t *begin_keyword, pm_statements_node_t *statements) { - pm_begin_node_t *node = PM_ALLOC_NODE(parser, pm_begin_node_t); + pm_begin_node_t *node = PM_NODE_ALLOC(parser, pm_begin_node_t); *node = (pm_begin_node_t) { { .type = PM_BEGIN_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = begin_keyword->start, .end = statements == NULL ? begin_keyword->end : statements->base.location.end @@ -2377,11 +2398,12 @@ pm_begin_node_end_keyword_set(pm_begin_node_t *node, const pm_token_t *end_keywo */ static pm_block_argument_node_t * pm_block_argument_node_create(pm_parser_t *parser, const pm_token_t *operator, pm_node_t *expression) { - pm_block_argument_node_t *node = PM_ALLOC_NODE(parser, pm_block_argument_node_t); + pm_block_argument_node_t *node = PM_NODE_ALLOC(parser, pm_block_argument_node_t); *node = (pm_block_argument_node_t) { { .type = PM_BLOCK_ARGUMENT_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = operator->start, .end = expression == NULL ? operator->end : expression->location.end @@ -2399,11 +2421,12 @@ pm_block_argument_node_create(pm_parser_t *parser, const pm_token_t *operator, p */ static pm_block_node_t * pm_block_node_create(pm_parser_t *parser, pm_constant_id_list_t *locals, const pm_token_t *opening, pm_node_t *parameters, pm_node_t *body, const pm_token_t *closing) { - pm_block_node_t *node = PM_ALLOC_NODE(parser, pm_block_node_t); + pm_block_node_t *node = PM_NODE_ALLOC(parser, pm_block_node_t); *node = (pm_block_node_t) { { .type = PM_BLOCK_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = opening->start, .end = closing->end }, }, .locals = *locals, @@ -2422,11 +2445,12 @@ pm_block_node_create(pm_parser_t *parser, pm_constant_id_list_t *locals, const p static pm_block_parameter_node_t * pm_block_parameter_node_create(pm_parser_t *parser, const pm_token_t *name, const pm_token_t *operator) { assert(operator->type == PM_TOKEN_NOT_PROVIDED || operator->type == PM_TOKEN_UAMPERSAND || operator->type == PM_TOKEN_AMPERSAND); - pm_block_parameter_node_t *node = PM_ALLOC_NODE(parser, pm_block_parameter_node_t); + pm_block_parameter_node_t *node = PM_NODE_ALLOC(parser, pm_block_parameter_node_t); *node = (pm_block_parameter_node_t) { { .type = PM_BLOCK_PARAMETER_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = operator->start, .end = (name->type == PM_TOKEN_NOT_PROVIDED ? operator->end : name->end) @@ -2445,7 +2469,7 @@ pm_block_parameter_node_create(pm_parser_t *parser, const pm_token_t *name, cons */ static pm_block_parameters_node_t * pm_block_parameters_node_create(pm_parser_t *parser, pm_parameters_node_t *parameters, const pm_token_t *opening) { - pm_block_parameters_node_t *node = PM_ALLOC_NODE(parser, pm_block_parameters_node_t); + pm_block_parameters_node_t *node = PM_NODE_ALLOC(parser, pm_block_parameters_node_t); const uint8_t *start; if (opening->type != PM_TOKEN_NOT_PROVIDED) { @@ -2468,6 +2492,7 @@ pm_block_parameters_node_create(pm_parser_t *parser, pm_parameters_node_t *param *node = (pm_block_parameters_node_t) { { .type = PM_BLOCK_PARAMETERS_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = start, .end = end @@ -2498,11 +2523,12 @@ pm_block_parameters_node_closing_set(pm_block_parameters_node_t *node, const pm_ */ static pm_block_local_variable_node_t * pm_block_local_variable_node_create(pm_parser_t *parser, const pm_token_t *name) { - pm_block_local_variable_node_t *node = PM_ALLOC_NODE(parser, pm_block_local_variable_node_t); + pm_block_local_variable_node_t *node = PM_NODE_ALLOC(parser, pm_block_local_variable_node_t); *node = (pm_block_local_variable_node_t) { { .type = PM_BLOCK_LOCAL_VARIABLE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(name), }, .name = pm_parser_constant_id_token(parser, name) @@ -2528,11 +2554,12 @@ pm_block_parameters_node_append_local(pm_block_parameters_node_t *node, const pm static pm_break_node_t * pm_break_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_arguments_node_t *arguments) { assert(keyword->type == PM_TOKEN_KEYWORD_BREAK); - pm_break_node_t *node = PM_ALLOC_NODE(parser, pm_break_node_t); + pm_break_node_t *node = PM_NODE_ALLOC(parser, pm_break_node_t); *node = (pm_break_node_t) { { .type = PM_BREAK_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword->start, .end = (arguments == NULL ? keyword->end : arguments->base.location.end) @@ -2560,12 +2587,13 @@ static const pm_node_flags_t PM_CALL_NODE_FLAGS_INDEX = 0x40; */ static pm_call_node_t * pm_call_node_create(pm_parser_t *parser, pm_node_flags_t flags) { - pm_call_node_t *node = PM_ALLOC_NODE(parser, pm_call_node_t); + pm_call_node_t *node = PM_NODE_ALLOC(parser, pm_call_node_t); *node = (pm_call_node_t) { { .type = PM_CALL_NODE, .flags = flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_NULL_VALUE(parser), }, .receiver = NULL, @@ -2864,12 +2892,13 @@ static pm_call_and_write_node_t * pm_call_and_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(target->block == NULL); assert(operator->type == PM_TOKEN_AMPERSAND_AMPERSAND_EQUAL); - pm_call_and_write_node_t *node = PM_ALLOC_NODE(parser, pm_call_and_write_node_t); + pm_call_and_write_node_t *node = PM_NODE_ALLOC(parser, pm_call_and_write_node_t); *node = (pm_call_and_write_node_t) { { .type = PM_CALL_AND_WRITE_NODE, .flags = target->base.flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -2923,7 +2952,7 @@ pm_index_arguments_check(pm_parser_t *parser, const pm_arguments_node_t *argumen static pm_index_and_write_node_t * pm_index_and_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(operator->type == PM_TOKEN_AMPERSAND_AMPERSAND_EQUAL); - pm_index_and_write_node_t *node = PM_ALLOC_NODE(parser, pm_index_and_write_node_t); + pm_index_and_write_node_t *node = PM_NODE_ALLOC(parser, pm_index_and_write_node_t); pm_index_arguments_check(parser, target->arguments, target->block); @@ -2931,6 +2960,7 @@ pm_index_and_write_node_create(pm_parser_t *parser, pm_call_node_t *target, cons { .type = PM_INDEX_AND_WRITE_NODE, .flags = target->base.flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -2960,12 +2990,13 @@ pm_index_and_write_node_create(pm_parser_t *parser, pm_call_node_t *target, cons static pm_call_operator_write_node_t * pm_call_operator_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(target->block == NULL); - pm_call_operator_write_node_t *node = PM_ALLOC_NODE(parser, pm_call_operator_write_node_t); + pm_call_operator_write_node_t *node = PM_NODE_ALLOC(parser, pm_call_operator_write_node_t); *node = (pm_call_operator_write_node_t) { { .type = PM_CALL_OPERATOR_WRITE_NODE, .flags = target->base.flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -2996,7 +3027,7 @@ pm_call_operator_write_node_create(pm_parser_t *parser, pm_call_node_t *target, */ static pm_index_operator_write_node_t * pm_index_operator_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const pm_token_t *operator, pm_node_t *value) { - pm_index_operator_write_node_t *node = PM_ALLOC_NODE(parser, pm_index_operator_write_node_t); + pm_index_operator_write_node_t *node = PM_NODE_ALLOC(parser, pm_index_operator_write_node_t); pm_index_arguments_check(parser, target->arguments, target->block); @@ -3004,6 +3035,7 @@ pm_index_operator_write_node_create(pm_parser_t *parser, pm_call_node_t *target, { .type = PM_INDEX_OPERATOR_WRITE_NODE, .flags = target->base.flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3035,12 +3067,13 @@ static pm_call_or_write_node_t * pm_call_or_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(target->block == NULL); assert(operator->type == PM_TOKEN_PIPE_PIPE_EQUAL); - pm_call_or_write_node_t *node = PM_ALLOC_NODE(parser, pm_call_or_write_node_t); + pm_call_or_write_node_t *node = PM_NODE_ALLOC(parser, pm_call_or_write_node_t); *node = (pm_call_or_write_node_t) { { .type = PM_CALL_OR_WRITE_NODE, .flags = target->base.flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3071,7 +3104,7 @@ pm_call_or_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const static pm_index_or_write_node_t * pm_index_or_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(operator->type == PM_TOKEN_PIPE_PIPE_EQUAL); - pm_index_or_write_node_t *node = PM_ALLOC_NODE(parser, pm_index_or_write_node_t); + pm_index_or_write_node_t *node = PM_NODE_ALLOC(parser, pm_index_or_write_node_t); pm_index_arguments_check(parser, target->arguments, target->block); @@ -3079,6 +3112,7 @@ pm_index_or_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const { .type = PM_INDEX_OR_WRITE_NODE, .flags = target->base.flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3108,12 +3142,13 @@ pm_index_or_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const */ static pm_call_target_node_t * pm_call_target_node_create(pm_parser_t *parser, pm_call_node_t *target) { - pm_call_target_node_t *node = PM_ALLOC_NODE(parser, pm_call_target_node_t); + pm_call_target_node_t *node = PM_NODE_ALLOC(parser, pm_call_target_node_t); *node = (pm_call_target_node_t) { { .type = PM_CALL_TARGET_NODE, .flags = target->base.flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = target->base.location }, .receiver = target->receiver, @@ -3136,7 +3171,7 @@ pm_call_target_node_create(pm_parser_t *parser, pm_call_node_t *target) { */ static pm_index_target_node_t * pm_index_target_node_create(pm_parser_t *parser, pm_call_node_t *target) { - pm_index_target_node_t *node = PM_ALLOC_NODE(parser, pm_index_target_node_t); + pm_index_target_node_t *node = PM_NODE_ALLOC(parser, pm_index_target_node_t); pm_node_flags_t flags = target->base.flags; pm_index_arguments_check(parser, target->arguments, target->block); @@ -3145,6 +3180,7 @@ pm_index_target_node_create(pm_parser_t *parser, pm_call_node_t *target) { { .type = PM_INDEX_TARGET_NODE, .flags = flags | PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE, + .node_id = PM_NODE_IDENTIFY(parser), .location = target->base.location }, .receiver = target->receiver, @@ -3167,11 +3203,12 @@ pm_index_target_node_create(pm_parser_t *parser, pm_call_node_t *target) { */ static pm_capture_pattern_node_t * pm_capture_pattern_node_create(pm_parser_t *parser, pm_node_t *value, pm_node_t *target, const pm_token_t *operator) { - pm_capture_pattern_node_t *node = PM_ALLOC_NODE(parser, pm_capture_pattern_node_t); + pm_capture_pattern_node_t *node = PM_NODE_ALLOC(parser, pm_capture_pattern_node_t); *node = (pm_capture_pattern_node_t) { { .type = PM_CAPTURE_PATTERN_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = value->location.start, .end = target->location.end @@ -3190,11 +3227,12 @@ pm_capture_pattern_node_create(pm_parser_t *parser, pm_node_t *value, pm_node_t */ static pm_case_node_t * pm_case_node_create(pm_parser_t *parser, const pm_token_t *case_keyword, pm_node_t *predicate, const pm_token_t *end_keyword) { - pm_case_node_t *node = PM_ALLOC_NODE(parser, pm_case_node_t); + pm_case_node_t *node = PM_NODE_ALLOC(parser, pm_case_node_t); *node = (pm_case_node_t) { { .type = PM_CASE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = case_keyword->start, .end = end_keyword->end @@ -3244,11 +3282,12 @@ pm_case_node_end_keyword_loc_set(pm_case_node_t *node, const pm_token_t *end_key */ static pm_case_match_node_t * pm_case_match_node_create(pm_parser_t *parser, const pm_token_t *case_keyword, pm_node_t *predicate, const pm_token_t *end_keyword) { - pm_case_match_node_t *node = PM_ALLOC_NODE(parser, pm_case_match_node_t); + pm_case_match_node_t *node = PM_NODE_ALLOC(parser, pm_case_match_node_t); *node = (pm_case_match_node_t) { { .type = PM_CASE_MATCH_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = case_keyword->start, .end = end_keyword->end @@ -3298,11 +3337,12 @@ pm_case_match_node_end_keyword_loc_set(pm_case_match_node_t *node, const pm_toke */ static pm_class_node_t * pm_class_node_create(pm_parser_t *parser, pm_constant_id_list_t *locals, const pm_token_t *class_keyword, pm_node_t *constant_path, const pm_token_t *name, const pm_token_t *inheritance_operator, pm_node_t *superclass, pm_node_t *body, const pm_token_t *end_keyword) { - pm_class_node_t *node = PM_ALLOC_NODE(parser, pm_class_node_t); + pm_class_node_t *node = PM_NODE_ALLOC(parser, pm_class_node_t); *node = (pm_class_node_t) { { .type = PM_CLASS_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = class_keyword->start, .end = end_keyword->end }, }, .locals = *locals, @@ -3324,11 +3364,12 @@ pm_class_node_create(pm_parser_t *parser, pm_constant_id_list_t *locals, const p static pm_class_variable_and_write_node_t * pm_class_variable_and_write_node_create(pm_parser_t *parser, pm_class_variable_read_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(operator->type == PM_TOKEN_AMPERSAND_AMPERSAND_EQUAL); - pm_class_variable_and_write_node_t *node = PM_ALLOC_NODE(parser, pm_class_variable_and_write_node_t); + pm_class_variable_and_write_node_t *node = PM_NODE_ALLOC(parser, pm_class_variable_and_write_node_t); *node = (pm_class_variable_and_write_node_t) { { .type = PM_CLASS_VARIABLE_AND_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3348,11 +3389,12 @@ pm_class_variable_and_write_node_create(pm_parser_t *parser, pm_class_variable_r */ static pm_class_variable_operator_write_node_t * pm_class_variable_operator_write_node_create(pm_parser_t *parser, pm_class_variable_read_node_t *target, const pm_token_t *operator, pm_node_t *value) { - pm_class_variable_operator_write_node_t *node = PM_ALLOC_NODE(parser, pm_class_variable_operator_write_node_t); + pm_class_variable_operator_write_node_t *node = PM_NODE_ALLOC(parser, pm_class_variable_operator_write_node_t); *node = (pm_class_variable_operator_write_node_t) { { .type = PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3374,11 +3416,12 @@ pm_class_variable_operator_write_node_create(pm_parser_t *parser, pm_class_varia static pm_class_variable_or_write_node_t * pm_class_variable_or_write_node_create(pm_parser_t *parser, pm_class_variable_read_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(operator->type == PM_TOKEN_PIPE_PIPE_EQUAL); - pm_class_variable_or_write_node_t *node = PM_ALLOC_NODE(parser, pm_class_variable_or_write_node_t); + pm_class_variable_or_write_node_t *node = PM_NODE_ALLOC(parser, pm_class_variable_or_write_node_t); *node = (pm_class_variable_or_write_node_t) { { .type = PM_CLASS_VARIABLE_OR_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3399,11 +3442,12 @@ pm_class_variable_or_write_node_create(pm_parser_t *parser, pm_class_variable_re static pm_class_variable_read_node_t * pm_class_variable_read_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_CLASS_VARIABLE); - pm_class_variable_read_node_t *node = PM_ALLOC_NODE(parser, pm_class_variable_read_node_t); + pm_class_variable_read_node_t *node = PM_NODE_ALLOC(parser, pm_class_variable_read_node_t); *node = (pm_class_variable_read_node_t) { { .type = PM_CLASS_VARIABLE_READ_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }, .name = pm_parser_constant_id_token(parser, token) @@ -3431,12 +3475,13 @@ pm_implicit_array_write_flags(const pm_node_t *node, pm_node_flags_t flags) { */ static pm_class_variable_write_node_t * pm_class_variable_write_node_create(pm_parser_t *parser, pm_class_variable_read_node_t *read_node, pm_token_t *operator, pm_node_t *value) { - pm_class_variable_write_node_t *node = PM_ALLOC_NODE(parser, pm_class_variable_write_node_t); + pm_class_variable_write_node_t *node = PM_NODE_ALLOC(parser, pm_class_variable_write_node_t); *node = (pm_class_variable_write_node_t) { { .type = PM_CLASS_VARIABLE_WRITE_NODE, .flags = pm_implicit_array_write_flags(value, PM_WRITE_NODE_FLAGS_IMPLICIT_ARRAY), + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = read_node->base.location.start, .end = value->location.end @@ -3457,11 +3502,12 @@ pm_class_variable_write_node_create(pm_parser_t *parser, pm_class_variable_read_ static pm_constant_path_and_write_node_t * pm_constant_path_and_write_node_create(pm_parser_t *parser, pm_constant_path_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(operator->type == PM_TOKEN_AMPERSAND_AMPERSAND_EQUAL); - pm_constant_path_and_write_node_t *node = PM_ALLOC_NODE(parser, pm_constant_path_and_write_node_t); + pm_constant_path_and_write_node_t *node = PM_NODE_ALLOC(parser, pm_constant_path_and_write_node_t); *node = (pm_constant_path_and_write_node_t) { { .type = PM_CONSTANT_PATH_AND_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3480,11 +3526,12 @@ pm_constant_path_and_write_node_create(pm_parser_t *parser, pm_constant_path_nod */ static pm_constant_path_operator_write_node_t * pm_constant_path_operator_write_node_create(pm_parser_t *parser, pm_constant_path_node_t *target, const pm_token_t *operator, pm_node_t *value) { - pm_constant_path_operator_write_node_t *node = PM_ALLOC_NODE(parser, pm_constant_path_operator_write_node_t); + pm_constant_path_operator_write_node_t *node = PM_NODE_ALLOC(parser, pm_constant_path_operator_write_node_t); *node = (pm_constant_path_operator_write_node_t) { { .type = PM_CONSTANT_PATH_OPERATOR_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3505,11 +3552,12 @@ pm_constant_path_operator_write_node_create(pm_parser_t *parser, pm_constant_pat static pm_constant_path_or_write_node_t * pm_constant_path_or_write_node_create(pm_parser_t *parser, pm_constant_path_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(operator->type == PM_TOKEN_PIPE_PIPE_EQUAL); - pm_constant_path_or_write_node_t *node = PM_ALLOC_NODE(parser, pm_constant_path_or_write_node_t); + pm_constant_path_or_write_node_t *node = PM_NODE_ALLOC(parser, pm_constant_path_or_write_node_t); *node = (pm_constant_path_or_write_node_t) { { .type = PM_CONSTANT_PATH_OR_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3529,7 +3577,7 @@ pm_constant_path_or_write_node_create(pm_parser_t *parser, pm_constant_path_node static pm_constant_path_node_t * pm_constant_path_node_create(pm_parser_t *parser, pm_node_t *parent, const pm_token_t *delimiter, const pm_token_t *name_token) { pm_assert_value_expression(parser, parent); - pm_constant_path_node_t *node = PM_ALLOC_NODE(parser, pm_constant_path_node_t); + pm_constant_path_node_t *node = PM_NODE_ALLOC(parser, pm_constant_path_node_t); pm_constant_id_t name = PM_CONSTANT_ID_UNSET; if (name_token->type == PM_TOKEN_CONSTANT) { @@ -3539,6 +3587,7 @@ pm_constant_path_node_create(pm_parser_t *parser, pm_node_t *parent, const pm_to *node = (pm_constant_path_node_t) { { .type = PM_CONSTANT_PATH_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = parent == NULL ? delimiter->start : parent->location.start, .end = name_token->end @@ -3558,12 +3607,13 @@ pm_constant_path_node_create(pm_parser_t *parser, pm_node_t *parent, const pm_to */ static pm_constant_path_write_node_t * pm_constant_path_write_node_create(pm_parser_t *parser, pm_constant_path_node_t *target, const pm_token_t *operator, pm_node_t *value) { - pm_constant_path_write_node_t *node = PM_ALLOC_NODE(parser, pm_constant_path_write_node_t); + pm_constant_path_write_node_t *node = PM_NODE_ALLOC(parser, pm_constant_path_write_node_t); *node = (pm_constant_path_write_node_t) { { .type = PM_CONSTANT_PATH_WRITE_NODE, .flags = pm_implicit_array_write_flags(value, PM_WRITE_NODE_FLAGS_IMPLICIT_ARRAY), + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3583,11 +3633,12 @@ pm_constant_path_write_node_create(pm_parser_t *parser, pm_constant_path_node_t static pm_constant_and_write_node_t * pm_constant_and_write_node_create(pm_parser_t *parser, pm_constant_read_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(operator->type == PM_TOKEN_AMPERSAND_AMPERSAND_EQUAL); - pm_constant_and_write_node_t *node = PM_ALLOC_NODE(parser, pm_constant_and_write_node_t); + pm_constant_and_write_node_t *node = PM_NODE_ALLOC(parser, pm_constant_and_write_node_t); *node = (pm_constant_and_write_node_t) { { .type = PM_CONSTANT_AND_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3607,11 +3658,12 @@ pm_constant_and_write_node_create(pm_parser_t *parser, pm_constant_read_node_t * */ static pm_constant_operator_write_node_t * pm_constant_operator_write_node_create(pm_parser_t *parser, pm_constant_read_node_t *target, const pm_token_t *operator, pm_node_t *value) { - pm_constant_operator_write_node_t *node = PM_ALLOC_NODE(parser, pm_constant_operator_write_node_t); + pm_constant_operator_write_node_t *node = PM_NODE_ALLOC(parser, pm_constant_operator_write_node_t); *node = (pm_constant_operator_write_node_t) { { .type = PM_CONSTANT_OPERATOR_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3633,11 +3685,12 @@ pm_constant_operator_write_node_create(pm_parser_t *parser, pm_constant_read_nod static pm_constant_or_write_node_t * pm_constant_or_write_node_create(pm_parser_t *parser, pm_constant_read_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(operator->type == PM_TOKEN_PIPE_PIPE_EQUAL); - pm_constant_or_write_node_t *node = PM_ALLOC_NODE(parser, pm_constant_or_write_node_t); + pm_constant_or_write_node_t *node = PM_NODE_ALLOC(parser, pm_constant_or_write_node_t); *node = (pm_constant_or_write_node_t) { { .type = PM_CONSTANT_OR_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3658,11 +3711,12 @@ pm_constant_or_write_node_create(pm_parser_t *parser, pm_constant_read_node_t *t static pm_constant_read_node_t * pm_constant_read_node_create(pm_parser_t *parser, const pm_token_t *name) { assert(name->type == PM_TOKEN_CONSTANT || name->type == PM_TOKEN_MISSING); - pm_constant_read_node_t *node = PM_ALLOC_NODE(parser, pm_constant_read_node_t); + pm_constant_read_node_t *node = PM_NODE_ALLOC(parser, pm_constant_read_node_t); *node = (pm_constant_read_node_t) { { .type = PM_CONSTANT_READ_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(name) }, .name = pm_parser_constant_id_token(parser, name) @@ -3676,12 +3730,13 @@ pm_constant_read_node_create(pm_parser_t *parser, const pm_token_t *name) { */ static pm_constant_write_node_t * pm_constant_write_node_create(pm_parser_t *parser, pm_constant_read_node_t *target, const pm_token_t *operator, pm_node_t *value) { - pm_constant_write_node_t *node = PM_ALLOC_NODE(parser, pm_constant_write_node_t); + pm_constant_write_node_t *node = PM_NODE_ALLOC(parser, pm_constant_write_node_t); *node = (pm_constant_write_node_t) { { .type = PM_CONSTANT_WRITE_NODE, .flags = pm_implicit_array_write_flags(value, PM_WRITE_NODE_FLAGS_IMPLICIT_ARRAY), + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -3866,7 +3921,7 @@ pm_def_node_create( const pm_token_t *equal, const pm_token_t *end_keyword ) { - pm_def_node_t *node = PM_ALLOC_NODE(parser, pm_def_node_t); + pm_def_node_t *node = PM_NODE_ALLOC(parser, pm_def_node_t); const uint8_t *end; if (end_keyword->type == PM_TOKEN_NOT_PROVIDED) { @@ -3886,6 +3941,7 @@ pm_def_node_create( *node = (pm_def_node_t) { { .type = PM_DEF_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = def_keyword->start, .end = end }, }, .name = name, @@ -3910,11 +3966,12 @@ pm_def_node_create( */ static pm_defined_node_t * pm_defined_node_create(pm_parser_t *parser, const pm_token_t *lparen, pm_node_t *value, const pm_token_t *rparen, const pm_location_t *keyword_loc) { - pm_defined_node_t *node = PM_ALLOC_NODE(parser, pm_defined_node_t); + pm_defined_node_t *node = PM_NODE_ALLOC(parser, pm_defined_node_t); *node = (pm_defined_node_t) { { .type = PM_DEFINED_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword_loc->start, .end = (rparen->type == PM_TOKEN_NOT_PROVIDED ? value->location.end : rparen->end) @@ -3934,7 +3991,7 @@ pm_defined_node_create(pm_parser_t *parser, const pm_token_t *lparen, pm_node_t */ static pm_else_node_t * pm_else_node_create(pm_parser_t *parser, const pm_token_t *else_keyword, pm_statements_node_t *statements, const pm_token_t *end_keyword) { - pm_else_node_t *node = PM_ALLOC_NODE(parser, pm_else_node_t); + pm_else_node_t *node = PM_NODE_ALLOC(parser, pm_else_node_t); const uint8_t *end = NULL; if ((end_keyword->type == PM_TOKEN_NOT_PROVIDED) && (statements != NULL)) { end = statements->base.location.end; @@ -3945,6 +4002,7 @@ pm_else_node_create(pm_parser_t *parser, const pm_token_t *else_keyword, pm_stat *node = (pm_else_node_t) { { .type = PM_ELSE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = else_keyword->start, .end = end, @@ -3963,11 +4021,12 @@ pm_else_node_create(pm_parser_t *parser, const pm_token_t *else_keyword, pm_stat */ static pm_embedded_statements_node_t * pm_embedded_statements_node_create(pm_parser_t *parser, const pm_token_t *opening, pm_statements_node_t *statements, const pm_token_t *closing) { - pm_embedded_statements_node_t *node = PM_ALLOC_NODE(parser, pm_embedded_statements_node_t); + pm_embedded_statements_node_t *node = PM_NODE_ALLOC(parser, pm_embedded_statements_node_t); *node = (pm_embedded_statements_node_t) { { .type = PM_EMBEDDED_STATEMENTS_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = opening->start, .end = closing->end @@ -3986,11 +4045,12 @@ pm_embedded_statements_node_create(pm_parser_t *parser, const pm_token_t *openin */ static pm_embedded_variable_node_t * pm_embedded_variable_node_create(pm_parser_t *parser, const pm_token_t *operator, pm_node_t *variable) { - pm_embedded_variable_node_t *node = PM_ALLOC_NODE(parser, pm_embedded_variable_node_t); + pm_embedded_variable_node_t *node = PM_NODE_ALLOC(parser, pm_embedded_variable_node_t); *node = (pm_embedded_variable_node_t) { { .type = PM_EMBEDDED_VARIABLE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = operator->start, .end = variable->location.end @@ -4008,11 +4068,12 @@ pm_embedded_variable_node_create(pm_parser_t *parser, const pm_token_t *operator */ static pm_ensure_node_t * pm_ensure_node_create(pm_parser_t *parser, const pm_token_t *ensure_keyword, pm_statements_node_t *statements, const pm_token_t *end_keyword) { - pm_ensure_node_t *node = PM_ALLOC_NODE(parser, pm_ensure_node_t); + pm_ensure_node_t *node = PM_NODE_ALLOC(parser, pm_ensure_node_t); *node = (pm_ensure_node_t) { { .type = PM_ENSURE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = ensure_keyword->start, .end = end_keyword->end @@ -4032,11 +4093,12 @@ pm_ensure_node_create(pm_parser_t *parser, const pm_token_t *ensure_keyword, pm_ static pm_false_node_t * pm_false_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_KEYWORD_FALSE); - pm_false_node_t *node = PM_ALLOC_NODE(parser, pm_false_node_t); + pm_false_node_t *node = PM_NODE_ALLOC(parser, pm_false_node_t); *node = (pm_false_node_t) {{ .type = PM_FALSE_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }}; @@ -4049,7 +4111,7 @@ pm_false_node_create(pm_parser_t *parser, const pm_token_t *token) { */ static pm_find_pattern_node_t * pm_find_pattern_node_create(pm_parser_t *parser, pm_node_list_t *nodes) { - pm_find_pattern_node_t *node = PM_ALLOC_NODE(parser, pm_find_pattern_node_t); + pm_find_pattern_node_t *node = PM_NODE_ALLOC(parser, pm_find_pattern_node_t); pm_node_t *left = nodes->nodes[0]; pm_node_t *right; @@ -4063,6 +4125,7 @@ pm_find_pattern_node_create(pm_parser_t *parser, pm_node_list_t *nodes) { *node = (pm_find_pattern_node_t) { { .type = PM_FIND_PATTERN_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = left->location.start, .end = right->location.end, @@ -4165,12 +4228,13 @@ pm_double_parse(pm_parser_t *parser, const pm_token_t *token) { static pm_float_node_t * pm_float_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_FLOAT); - pm_float_node_t *node = PM_ALLOC_NODE(parser, pm_float_node_t); + pm_float_node_t *node = PM_NODE_ALLOC(parser, pm_float_node_t); *node = (pm_float_node_t) { { .type = PM_FLOAT_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }, .value = pm_double_parse(parser, token) @@ -4186,11 +4250,12 @@ static pm_imaginary_node_t * pm_float_node_imaginary_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_FLOAT_IMAGINARY); - pm_imaginary_node_t *node = PM_ALLOC_NODE(parser, pm_imaginary_node_t); + pm_imaginary_node_t *node = PM_NODE_ALLOC(parser, pm_imaginary_node_t); *node = (pm_imaginary_node_t) { { .type = PM_IMAGINARY_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }, .numeric = (pm_node_t *) pm_float_node_create(parser, &((pm_token_t) { @@ -4210,11 +4275,12 @@ static pm_rational_node_t * pm_float_node_rational_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_FLOAT_RATIONAL); - pm_rational_node_t *node = PM_ALLOC_NODE(parser, pm_rational_node_t); + pm_rational_node_t *node = PM_NODE_ALLOC(parser, pm_rational_node_t); *node = (pm_rational_node_t) { { .type = PM_RATIONAL_NODE, .flags = PM_INTEGER_BASE_FLAGS_DECIMAL | PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }, .numerator = { 0 }, @@ -4263,11 +4329,12 @@ static pm_imaginary_node_t * pm_float_node_rational_imaginary_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_FLOAT_RATIONAL_IMAGINARY); - pm_imaginary_node_t *node = PM_ALLOC_NODE(parser, pm_imaginary_node_t); + pm_imaginary_node_t *node = PM_NODE_ALLOC(parser, pm_imaginary_node_t); *node = (pm_imaginary_node_t) { { .type = PM_IMAGINARY_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }, .numeric = (pm_node_t *) pm_float_node_rational_create(parser, &((pm_token_t) { @@ -4294,11 +4361,12 @@ pm_for_node_create( const pm_token_t *do_keyword, const pm_token_t *end_keyword ) { - pm_for_node_t *node = PM_ALLOC_NODE(parser, pm_for_node_t); + pm_for_node_t *node = PM_NODE_ALLOC(parser, pm_for_node_t); *node = (pm_for_node_t) { { .type = PM_FOR_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = for_keyword->start, .end = end_keyword->end @@ -4322,8 +4390,14 @@ pm_for_node_create( static pm_forwarding_arguments_node_t * pm_forwarding_arguments_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_UDOT_DOT_DOT); - pm_forwarding_arguments_node_t *node = PM_ALLOC_NODE(parser, pm_forwarding_arguments_node_t); - *node = (pm_forwarding_arguments_node_t) {{ .type = PM_FORWARDING_ARGUMENTS_NODE, .location = PM_LOCATION_TOKEN_VALUE(token) }}; + pm_forwarding_arguments_node_t *node = PM_NODE_ALLOC(parser, pm_forwarding_arguments_node_t); + + *node = (pm_forwarding_arguments_node_t) {{ + .type = PM_FORWARDING_ARGUMENTS_NODE, + .node_id = PM_NODE_IDENTIFY(parser), + .location = PM_LOCATION_TOKEN_VALUE(token) + }}; + return node; } @@ -4333,8 +4407,14 @@ pm_forwarding_arguments_node_create(pm_parser_t *parser, const pm_token_t *token static pm_forwarding_parameter_node_t * pm_forwarding_parameter_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_UDOT_DOT_DOT); - pm_forwarding_parameter_node_t *node = PM_ALLOC_NODE(parser, pm_forwarding_parameter_node_t); - *node = (pm_forwarding_parameter_node_t) {{ .type = PM_FORWARDING_PARAMETER_NODE, .location = PM_LOCATION_TOKEN_VALUE(token) }}; + pm_forwarding_parameter_node_t *node = PM_NODE_ALLOC(parser, pm_forwarding_parameter_node_t); + + *node = (pm_forwarding_parameter_node_t) {{ + .type = PM_FORWARDING_PARAMETER_NODE, + .node_id = PM_NODE_IDENTIFY(parser), + .location = PM_LOCATION_TOKEN_VALUE(token) + }}; + return node; } @@ -4345,7 +4425,7 @@ static pm_forwarding_super_node_t * pm_forwarding_super_node_create(pm_parser_t *parser, const pm_token_t *token, pm_arguments_t *arguments) { assert(arguments->block == NULL || PM_NODE_TYPE_P(arguments->block, PM_BLOCK_NODE)); assert(token->type == PM_TOKEN_KEYWORD_SUPER); - pm_forwarding_super_node_t *node = PM_ALLOC_NODE(parser, pm_forwarding_super_node_t); + pm_forwarding_super_node_t *node = PM_NODE_ALLOC(parser, pm_forwarding_super_node_t); pm_block_node_t *block = NULL; if (arguments->block != NULL) { @@ -4355,6 +4435,7 @@ pm_forwarding_super_node_create(pm_parser_t *parser, const pm_token_t *token, pm *node = (pm_forwarding_super_node_t) { { .type = PM_FORWARDING_SUPER_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = token->start, .end = block != NULL ? block->base.location.end : token->end @@ -4372,11 +4453,12 @@ pm_forwarding_super_node_create(pm_parser_t *parser, const pm_token_t *token, pm */ static pm_hash_pattern_node_t * pm_hash_pattern_node_empty_create(pm_parser_t *parser, const pm_token_t *opening, const pm_token_t *closing) { - pm_hash_pattern_node_t *node = PM_ALLOC_NODE(parser, pm_hash_pattern_node_t); + pm_hash_pattern_node_t *node = PM_NODE_ALLOC(parser, pm_hash_pattern_node_t); *node = (pm_hash_pattern_node_t) { { .type = PM_HASH_PATTERN_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = opening->start, .end = closing->end @@ -4397,7 +4479,7 @@ pm_hash_pattern_node_empty_create(pm_parser_t *parser, const pm_token_t *opening */ static pm_hash_pattern_node_t * pm_hash_pattern_node_node_list_create(pm_parser_t *parser, pm_node_list_t *elements, pm_node_t *rest) { - pm_hash_pattern_node_t *node = PM_ALLOC_NODE(parser, pm_hash_pattern_node_t); + pm_hash_pattern_node_t *node = PM_NODE_ALLOC(parser, pm_hash_pattern_node_t); const uint8_t *start; const uint8_t *end; @@ -4419,6 +4501,7 @@ pm_hash_pattern_node_node_list_create(pm_parser_t *parser, pm_node_list_t *eleme *node = (pm_hash_pattern_node_t) { { .type = PM_HASH_PATTERN_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = start, .end = end @@ -4465,11 +4548,12 @@ pm_global_variable_write_name(pm_parser_t *parser, const pm_node_t *target) { static pm_global_variable_and_write_node_t * pm_global_variable_and_write_node_create(pm_parser_t *parser, pm_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(operator->type == PM_TOKEN_AMPERSAND_AMPERSAND_EQUAL); - pm_global_variable_and_write_node_t *node = PM_ALLOC_NODE(parser, pm_global_variable_and_write_node_t); + pm_global_variable_and_write_node_t *node = PM_NODE_ALLOC(parser, pm_global_variable_and_write_node_t); *node = (pm_global_variable_and_write_node_t) { { .type = PM_GLOBAL_VARIABLE_AND_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->location.start, .end = value->location.end @@ -4489,11 +4573,12 @@ pm_global_variable_and_write_node_create(pm_parser_t *parser, pm_node_t *target, */ static pm_global_variable_operator_write_node_t * pm_global_variable_operator_write_node_create(pm_parser_t *parser, pm_node_t *target, const pm_token_t *operator, pm_node_t *value) { - pm_global_variable_operator_write_node_t *node = PM_ALLOC_NODE(parser, pm_global_variable_operator_write_node_t); + pm_global_variable_operator_write_node_t *node = PM_NODE_ALLOC(parser, pm_global_variable_operator_write_node_t); *node = (pm_global_variable_operator_write_node_t) { { .type = PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->location.start, .end = value->location.end @@ -4515,11 +4600,12 @@ pm_global_variable_operator_write_node_create(pm_parser_t *parser, pm_node_t *ta static pm_global_variable_or_write_node_t * pm_global_variable_or_write_node_create(pm_parser_t *parser, pm_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(operator->type == PM_TOKEN_PIPE_PIPE_EQUAL); - pm_global_variable_or_write_node_t *node = PM_ALLOC_NODE(parser, pm_global_variable_or_write_node_t); + pm_global_variable_or_write_node_t *node = PM_NODE_ALLOC(parser, pm_global_variable_or_write_node_t); *node = (pm_global_variable_or_write_node_t) { { .type = PM_GLOBAL_VARIABLE_OR_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->location.start, .end = value->location.end @@ -4539,11 +4625,12 @@ pm_global_variable_or_write_node_create(pm_parser_t *parser, pm_node_t *target, */ static pm_global_variable_read_node_t * pm_global_variable_read_node_create(pm_parser_t *parser, const pm_token_t *name) { - pm_global_variable_read_node_t *node = PM_ALLOC_NODE(parser, pm_global_variable_read_node_t); + pm_global_variable_read_node_t *node = PM_NODE_ALLOC(parser, pm_global_variable_read_node_t); *node = (pm_global_variable_read_node_t) { { .type = PM_GLOBAL_VARIABLE_READ_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(name), }, .name = pm_parser_constant_id_token(parser, name) @@ -4557,11 +4644,12 @@ pm_global_variable_read_node_create(pm_parser_t *parser, const pm_token_t *name) */ static pm_global_variable_read_node_t * pm_global_variable_read_node_synthesized_create(pm_parser_t *parser, pm_constant_id_t name) { - pm_global_variable_read_node_t *node = PM_ALLOC_NODE(parser, pm_global_variable_read_node_t); + pm_global_variable_read_node_t *node = PM_NODE_ALLOC(parser, pm_global_variable_read_node_t); *node = (pm_global_variable_read_node_t) { { .type = PM_GLOBAL_VARIABLE_READ_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_NULL_VALUE(parser) }, .name = name @@ -4575,11 +4663,12 @@ pm_global_variable_read_node_synthesized_create(pm_parser_t *parser, pm_constant */ static pm_global_variable_write_node_t * pm_global_variable_write_node_create(pm_parser_t *parser, pm_node_t *target, const pm_token_t *operator, pm_node_t *value) { - pm_global_variable_write_node_t *node = PM_ALLOC_NODE(parser, pm_global_variable_write_node_t); + pm_global_variable_write_node_t *node = PM_NODE_ALLOC(parser, pm_global_variable_write_node_t); *node = (pm_global_variable_write_node_t) { { .type = PM_GLOBAL_VARIABLE_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .flags = pm_implicit_array_write_flags(value, PM_WRITE_NODE_FLAGS_IMPLICIT_ARRAY), .location = { .start = target->location.start, @@ -4600,11 +4689,12 @@ pm_global_variable_write_node_create(pm_parser_t *parser, pm_node_t *target, con */ static pm_global_variable_write_node_t * pm_global_variable_write_node_synthesized_create(pm_parser_t *parser, pm_constant_id_t name, pm_node_t *value) { - pm_global_variable_write_node_t *node = PM_ALLOC_NODE(parser, pm_global_variable_write_node_t); + pm_global_variable_write_node_t *node = PM_NODE_ALLOC(parser, pm_global_variable_write_node_t); *node = (pm_global_variable_write_node_t) { { .type = PM_GLOBAL_VARIABLE_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_NULL_VALUE(parser) }, .name = name, @@ -4622,12 +4712,13 @@ pm_global_variable_write_node_synthesized_create(pm_parser_t *parser, pm_constan static pm_hash_node_t * pm_hash_node_create(pm_parser_t *parser, const pm_token_t *opening) { assert(opening != NULL); - pm_hash_node_t *node = PM_ALLOC_NODE(parser, pm_hash_node_t); + pm_hash_node_t *node = PM_NODE_ALLOC(parser, pm_hash_node_t); *node = (pm_hash_node_t) { { .type = PM_HASH_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(opening) }, .opening_loc = PM_LOCATION_TOKEN_VALUE(opening), @@ -4677,7 +4768,7 @@ pm_if_node_create(pm_parser_t *parser, const pm_token_t *end_keyword ) { pm_conditional_predicate(parser, predicate, PM_CONDITIONAL_PREDICATE_TYPE_CONDITIONAL); - pm_if_node_t *node = PM_ALLOC_NODE(parser, pm_if_node_t); + pm_if_node_t *node = PM_NODE_ALLOC(parser, pm_if_node_t); const uint8_t *end; if (end_keyword->type != PM_TOKEN_NOT_PROVIDED) { @@ -4694,6 +4785,7 @@ pm_if_node_create(pm_parser_t *parser, { .type = PM_IF_NODE, .flags = PM_NODE_FLAG_NEWLINE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = if_keyword->start, .end = end @@ -4716,7 +4808,7 @@ pm_if_node_create(pm_parser_t *parser, static pm_if_node_t * pm_if_node_modifier_create(pm_parser_t *parser, pm_node_t *statement, const pm_token_t *if_keyword, pm_node_t *predicate) { pm_conditional_predicate(parser, predicate, PM_CONDITIONAL_PREDICATE_TYPE_CONDITIONAL); - pm_if_node_t *node = PM_ALLOC_NODE(parser, pm_if_node_t); + pm_if_node_t *node = PM_NODE_ALLOC(parser, pm_if_node_t); pm_statements_node_t *statements = pm_statements_node_create(parser); pm_statements_node_body_append(parser, statements, statement); @@ -4725,6 +4817,7 @@ pm_if_node_modifier_create(pm_parser_t *parser, pm_node_t *statement, const pm_t { .type = PM_IF_NODE, .flags = PM_NODE_FLAG_NEWLINE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = statement->location.start, .end = predicate->location.end @@ -4758,12 +4851,13 @@ pm_if_node_ternary_create(pm_parser_t *parser, pm_node_t *predicate, const pm_to pm_token_t end_keyword = not_provided(parser); pm_else_node_t *else_node = pm_else_node_create(parser, colon, else_statements, &end_keyword); - pm_if_node_t *node = PM_ALLOC_NODE(parser, pm_if_node_t); + pm_if_node_t *node = PM_NODE_ALLOC(parser, pm_if_node_t); *node = (pm_if_node_t) { { .type = PM_IF_NODE, .flags = PM_NODE_FLAG_NEWLINE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = predicate->location.start, .end = false_expression->location.end, @@ -4798,11 +4892,12 @@ pm_else_node_end_keyword_loc_set(pm_else_node_t *node, const pm_token_t *keyword */ static pm_implicit_node_t * pm_implicit_node_create(pm_parser_t *parser, pm_node_t *value) { - pm_implicit_node_t *node = PM_ALLOC_NODE(parser, pm_implicit_node_t); + pm_implicit_node_t *node = PM_NODE_ALLOC(parser, pm_implicit_node_t); *node = (pm_implicit_node_t) { { .type = PM_IMPLICIT_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = value->location }, .value = value @@ -4818,11 +4913,12 @@ static pm_implicit_rest_node_t * pm_implicit_rest_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_COMMA); - pm_implicit_rest_node_t *node = PM_ALLOC_NODE(parser, pm_implicit_rest_node_t); + pm_implicit_rest_node_t *node = PM_NODE_ALLOC(parser, pm_implicit_rest_node_t); *node = (pm_implicit_rest_node_t) { { .type = PM_IMPLICIT_REST_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) } }; @@ -4836,12 +4932,13 @@ pm_implicit_rest_node_create(pm_parser_t *parser, const pm_token_t *token) { static pm_integer_node_t * pm_integer_node_create(pm_parser_t *parser, pm_node_flags_t base, const pm_token_t *token) { assert(token->type == PM_TOKEN_INTEGER); - pm_integer_node_t *node = PM_ALLOC_NODE(parser, pm_integer_node_t); + pm_integer_node_t *node = PM_NODE_ALLOC(parser, pm_integer_node_t); *node = (pm_integer_node_t) { { .type = PM_INTEGER_NODE, .flags = base | PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }, .value = { 0 } @@ -4868,11 +4965,12 @@ static pm_imaginary_node_t * pm_integer_node_imaginary_create(pm_parser_t *parser, pm_node_flags_t base, const pm_token_t *token) { assert(token->type == PM_TOKEN_INTEGER_IMAGINARY); - pm_imaginary_node_t *node = PM_ALLOC_NODE(parser, pm_imaginary_node_t); + pm_imaginary_node_t *node = PM_NODE_ALLOC(parser, pm_imaginary_node_t); *node = (pm_imaginary_node_t) { { .type = PM_IMAGINARY_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }, .numeric = (pm_node_t *) pm_integer_node_create(parser, base, &((pm_token_t) { @@ -4893,11 +4991,12 @@ static pm_rational_node_t * pm_integer_node_rational_create(pm_parser_t *parser, pm_node_flags_t base, const pm_token_t *token) { assert(token->type == PM_TOKEN_INTEGER_RATIONAL); - pm_rational_node_t *node = PM_ALLOC_NODE(parser, pm_rational_node_t); + pm_rational_node_t *node = PM_NODE_ALLOC(parser, pm_rational_node_t); *node = (pm_rational_node_t) { { .type = PM_RATIONAL_NODE, .flags = base | PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }, .numerator = { 0 }, @@ -4926,11 +5025,12 @@ static pm_imaginary_node_t * pm_integer_node_rational_imaginary_create(pm_parser_t *parser, pm_node_flags_t base, const pm_token_t *token) { assert(token->type == PM_TOKEN_INTEGER_RATIONAL_IMAGINARY); - pm_imaginary_node_t *node = PM_ALLOC_NODE(parser, pm_imaginary_node_t); + pm_imaginary_node_t *node = PM_NODE_ALLOC(parser, pm_imaginary_node_t); *node = (pm_imaginary_node_t) { { .type = PM_IMAGINARY_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }, .numeric = (pm_node_t *) pm_integer_node_rational_create(parser, base, &((pm_token_t) { @@ -4948,7 +5048,7 @@ pm_integer_node_rational_imaginary_create(pm_parser_t *parser, pm_node_flags_t b */ static pm_in_node_t * pm_in_node_create(pm_parser_t *parser, pm_node_t *pattern, pm_statements_node_t *statements, const pm_token_t *in_keyword, const pm_token_t *then_keyword) { - pm_in_node_t *node = PM_ALLOC_NODE(parser, pm_in_node_t); + pm_in_node_t *node = PM_NODE_ALLOC(parser, pm_in_node_t); const uint8_t *end; if (statements != NULL) { @@ -4962,6 +5062,7 @@ pm_in_node_create(pm_parser_t *parser, pm_node_t *pattern, pm_statements_node_t *node = (pm_in_node_t) { { .type = PM_IN_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = in_keyword->start, .end = end @@ -4982,11 +5083,12 @@ pm_in_node_create(pm_parser_t *parser, pm_node_t *pattern, pm_statements_node_t static pm_instance_variable_and_write_node_t * pm_instance_variable_and_write_node_create(pm_parser_t *parser, pm_instance_variable_read_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(operator->type == PM_TOKEN_AMPERSAND_AMPERSAND_EQUAL); - pm_instance_variable_and_write_node_t *node = PM_ALLOC_NODE(parser, pm_instance_variable_and_write_node_t); + pm_instance_variable_and_write_node_t *node = PM_NODE_ALLOC(parser, pm_instance_variable_and_write_node_t); *node = (pm_instance_variable_and_write_node_t) { { .type = PM_INSTANCE_VARIABLE_AND_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -5006,11 +5108,12 @@ pm_instance_variable_and_write_node_create(pm_parser_t *parser, pm_instance_vari */ static pm_instance_variable_operator_write_node_t * pm_instance_variable_operator_write_node_create(pm_parser_t *parser, pm_instance_variable_read_node_t *target, const pm_token_t *operator, pm_node_t *value) { - pm_instance_variable_operator_write_node_t *node = PM_ALLOC_NODE(parser, pm_instance_variable_operator_write_node_t); + pm_instance_variable_operator_write_node_t *node = PM_NODE_ALLOC(parser, pm_instance_variable_operator_write_node_t); *node = (pm_instance_variable_operator_write_node_t) { { .type = PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -5032,11 +5135,12 @@ pm_instance_variable_operator_write_node_create(pm_parser_t *parser, pm_instance static pm_instance_variable_or_write_node_t * pm_instance_variable_or_write_node_create(pm_parser_t *parser, pm_instance_variable_read_node_t *target, const pm_token_t *operator, pm_node_t *value) { assert(operator->type == PM_TOKEN_PIPE_PIPE_EQUAL); - pm_instance_variable_or_write_node_t *node = PM_ALLOC_NODE(parser, pm_instance_variable_or_write_node_t); + pm_instance_variable_or_write_node_t *node = PM_NODE_ALLOC(parser, pm_instance_variable_or_write_node_t); *node = (pm_instance_variable_or_write_node_t) { { .type = PM_INSTANCE_VARIABLE_OR_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -5057,11 +5161,12 @@ pm_instance_variable_or_write_node_create(pm_parser_t *parser, pm_instance_varia static pm_instance_variable_read_node_t * pm_instance_variable_read_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_INSTANCE_VARIABLE); - pm_instance_variable_read_node_t *node = PM_ALLOC_NODE(parser, pm_instance_variable_read_node_t); + pm_instance_variable_read_node_t *node = PM_NODE_ALLOC(parser, pm_instance_variable_read_node_t); *node = (pm_instance_variable_read_node_t) { { .type = PM_INSTANCE_VARIABLE_READ_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }, .name = pm_parser_constant_id_token(parser, token) @@ -5076,11 +5181,12 @@ pm_instance_variable_read_node_create(pm_parser_t *parser, const pm_token_t *tok */ static pm_instance_variable_write_node_t * pm_instance_variable_write_node_create(pm_parser_t *parser, pm_instance_variable_read_node_t *read_node, pm_token_t *operator, pm_node_t *value) { - pm_instance_variable_write_node_t *node = PM_ALLOC_NODE(parser, pm_instance_variable_write_node_t); + pm_instance_variable_write_node_t *node = PM_NODE_ALLOC(parser, pm_instance_variable_write_node_t); *node = (pm_instance_variable_write_node_t) { { .type = PM_INSTANCE_VARIABLE_WRITE_NODE, .flags = pm_implicit_array_write_flags(value, PM_WRITE_NODE_FLAGS_IMPLICIT_ARRAY), + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = read_node->base.location.start, .end = value->location.end @@ -5144,12 +5250,13 @@ pm_interpolated_node_append(pm_node_t *node, pm_node_list_t *parts, pm_node_t *p */ static pm_interpolated_regular_expression_node_t * pm_interpolated_regular_expression_node_create(pm_parser_t *parser, const pm_token_t *opening) { - pm_interpolated_regular_expression_node_t *node = PM_ALLOC_NODE(parser, pm_interpolated_regular_expression_node_t); + pm_interpolated_regular_expression_node_t *node = PM_NODE_ALLOC(parser, pm_interpolated_regular_expression_node_t); *node = (pm_interpolated_regular_expression_node_t) { { .type = PM_INTERPOLATED_REGULAR_EXPRESSION_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = opening->start, .end = NULL, @@ -5286,7 +5393,7 @@ pm_interpolated_string_node_append(pm_interpolated_string_node_t *node, pm_node_ */ static pm_interpolated_string_node_t * pm_interpolated_string_node_create(pm_parser_t *parser, const pm_token_t *opening, const pm_node_list_t *parts, const pm_token_t *closing) { - pm_interpolated_string_node_t *node = PM_ALLOC_NODE(parser, pm_interpolated_string_node_t); + pm_interpolated_string_node_t *node = PM_NODE_ALLOC(parser, pm_interpolated_string_node_t); pm_node_flags_t flags = PM_NODE_FLAG_STATIC_LITERAL; switch (parser->frozen_string_literal) { @@ -5302,6 +5409,7 @@ pm_interpolated_string_node_create(pm_parser_t *parser, const pm_token_t *openin { .type = PM_INTERPOLATED_STRING_NODE, .flags = flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = opening->start, .end = closing->end, @@ -5352,12 +5460,13 @@ pm_interpolated_symbol_node_closing_loc_set(pm_interpolated_symbol_node_t *node, */ static pm_interpolated_symbol_node_t * pm_interpolated_symbol_node_create(pm_parser_t *parser, const pm_token_t *opening, const pm_node_list_t *parts, const pm_token_t *closing) { - pm_interpolated_symbol_node_t *node = PM_ALLOC_NODE(parser, pm_interpolated_symbol_node_t); + pm_interpolated_symbol_node_t *node = PM_NODE_ALLOC(parser, pm_interpolated_symbol_node_t); *node = (pm_interpolated_symbol_node_t) { { .type = PM_INTERPOLATED_SYMBOL_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = opening->start, .end = closing->end, @@ -5383,11 +5492,12 @@ pm_interpolated_symbol_node_create(pm_parser_t *parser, const pm_token_t *openin */ static pm_interpolated_x_string_node_t * pm_interpolated_xstring_node_create(pm_parser_t *parser, const pm_token_t *opening, const pm_token_t *closing) { - pm_interpolated_x_string_node_t *node = PM_ALLOC_NODE(parser, pm_interpolated_x_string_node_t); + pm_interpolated_x_string_node_t *node = PM_NODE_ALLOC(parser, pm_interpolated_x_string_node_t); *node = (pm_interpolated_x_string_node_t) { { .type = PM_INTERPOLATED_X_STRING_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = opening->start, .end = closing->end @@ -5418,11 +5528,12 @@ pm_interpolated_xstring_node_closing_set(pm_interpolated_x_string_node_t *node, */ static pm_it_local_variable_read_node_t * pm_it_local_variable_read_node_create(pm_parser_t *parser, const pm_token_t *name) { - pm_it_local_variable_read_node_t *node = PM_ALLOC_NODE(parser, pm_it_local_variable_read_node_t); + pm_it_local_variable_read_node_t *node = PM_NODE_ALLOC(parser, pm_it_local_variable_read_node_t); *node = (pm_it_local_variable_read_node_t) { { .type = PM_IT_LOCAL_VARIABLE_READ_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(name) } }; @@ -5435,11 +5546,12 @@ pm_it_local_variable_read_node_create(pm_parser_t *parser, const pm_token_t *nam */ static pm_it_parameters_node_t * pm_it_parameters_node_create(pm_parser_t *parser, const pm_token_t *opening, const pm_token_t *closing) { - pm_it_parameters_node_t *node = PM_ALLOC_NODE(parser, pm_it_parameters_node_t); + pm_it_parameters_node_t *node = PM_NODE_ALLOC(parser, pm_it_parameters_node_t); *node = (pm_it_parameters_node_t) { { .type = PM_IT_PARAMETERS_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = opening->start, .end = closing->end @@ -5455,13 +5567,14 @@ pm_it_parameters_node_create(pm_parser_t *parser, const pm_token_t *opening, con */ static pm_keyword_hash_node_t * pm_keyword_hash_node_create(pm_parser_t *parser) { - pm_keyword_hash_node_t *node = PM_ALLOC_NODE(parser, pm_keyword_hash_node_t); + pm_keyword_hash_node_t *node = PM_NODE_ALLOC(parser, pm_keyword_hash_node_t); *node = (pm_keyword_hash_node_t) { .base = { .type = PM_KEYWORD_HASH_NODE, - .location = PM_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE, - .flags = PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS + .flags = PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS, + .node_id = PM_NODE_IDENTIFY(parser), + .location = PM_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE }, .elements = { 0 } }; @@ -5492,11 +5605,12 @@ pm_keyword_hash_node_elements_append(pm_keyword_hash_node_t *hash, pm_node_t *el */ static pm_required_keyword_parameter_node_t * pm_required_keyword_parameter_node_create(pm_parser_t *parser, const pm_token_t *name) { - pm_required_keyword_parameter_node_t *node = PM_ALLOC_NODE(parser, pm_required_keyword_parameter_node_t); + pm_required_keyword_parameter_node_t *node = PM_NODE_ALLOC(parser, pm_required_keyword_parameter_node_t); *node = (pm_required_keyword_parameter_node_t) { { .type = PM_REQUIRED_KEYWORD_PARAMETER_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = name->start, .end = name->end @@ -5514,11 +5628,12 @@ pm_required_keyword_parameter_node_create(pm_parser_t *parser, const pm_token_t */ static pm_optional_keyword_parameter_node_t * pm_optional_keyword_parameter_node_create(pm_parser_t *parser, const pm_token_t *name, pm_node_t *value) { - pm_optional_keyword_parameter_node_t *node = PM_ALLOC_NODE(parser, pm_optional_keyword_parameter_node_t); + pm_optional_keyword_parameter_node_t *node = PM_NODE_ALLOC(parser, pm_optional_keyword_parameter_node_t); *node = (pm_optional_keyword_parameter_node_t) { { .type = PM_OPTIONAL_KEYWORD_PARAMETER_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = name->start, .end = value->location.end @@ -5537,11 +5652,12 @@ pm_optional_keyword_parameter_node_create(pm_parser_t *parser, const pm_token_t */ static pm_keyword_rest_parameter_node_t * pm_keyword_rest_parameter_node_create(pm_parser_t *parser, const pm_token_t *operator, const pm_token_t *name) { - pm_keyword_rest_parameter_node_t *node = PM_ALLOC_NODE(parser, pm_keyword_rest_parameter_node_t); + pm_keyword_rest_parameter_node_t *node = PM_NODE_ALLOC(parser, pm_keyword_rest_parameter_node_t); *node = (pm_keyword_rest_parameter_node_t) { { .type = PM_KEYWORD_REST_PARAMETER_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = operator->start, .end = (name->type == PM_TOKEN_NOT_PROVIDED ? operator->end : name->end) @@ -5568,11 +5684,12 @@ pm_lambda_node_create( pm_node_t *parameters, pm_node_t *body ) { - pm_lambda_node_t *node = PM_ALLOC_NODE(parser, pm_lambda_node_t); + pm_lambda_node_t *node = PM_NODE_ALLOC(parser, pm_lambda_node_t); *node = (pm_lambda_node_t) { { .type = PM_LAMBDA_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = operator->start, .end = closing->end @@ -5596,11 +5713,12 @@ static pm_local_variable_and_write_node_t * pm_local_variable_and_write_node_create(pm_parser_t *parser, pm_node_t *target, const pm_token_t *operator, pm_node_t *value, pm_constant_id_t name, uint32_t depth) { assert(PM_NODE_TYPE_P(target, PM_LOCAL_VARIABLE_READ_NODE) || PM_NODE_TYPE_P(target, PM_CALL_NODE)); assert(operator->type == PM_TOKEN_AMPERSAND_AMPERSAND_EQUAL); - pm_local_variable_and_write_node_t *node = PM_ALLOC_NODE(parser, pm_local_variable_and_write_node_t); + pm_local_variable_and_write_node_t *node = PM_NODE_ALLOC(parser, pm_local_variable_and_write_node_t); *node = (pm_local_variable_and_write_node_t) { { .type = PM_LOCAL_VARIABLE_AND_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->location.start, .end = value->location.end @@ -5621,11 +5739,12 @@ pm_local_variable_and_write_node_create(pm_parser_t *parser, pm_node_t *target, */ static pm_local_variable_operator_write_node_t * pm_local_variable_operator_write_node_create(pm_parser_t *parser, pm_node_t *target, const pm_token_t *operator, pm_node_t *value, pm_constant_id_t name, uint32_t depth) { - pm_local_variable_operator_write_node_t *node = PM_ALLOC_NODE(parser, pm_local_variable_operator_write_node_t); + pm_local_variable_operator_write_node_t *node = PM_NODE_ALLOC(parser, pm_local_variable_operator_write_node_t); *node = (pm_local_variable_operator_write_node_t) { { .type = PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->location.start, .end = value->location.end @@ -5649,11 +5768,12 @@ static pm_local_variable_or_write_node_t * pm_local_variable_or_write_node_create(pm_parser_t *parser, pm_node_t *target, const pm_token_t *operator, pm_node_t *value, pm_constant_id_t name, uint32_t depth) { assert(PM_NODE_TYPE_P(target, PM_LOCAL_VARIABLE_READ_NODE) || PM_NODE_TYPE_P(target, PM_CALL_NODE)); assert(operator->type == PM_TOKEN_PIPE_PIPE_EQUAL); - pm_local_variable_or_write_node_t *node = PM_ALLOC_NODE(parser, pm_local_variable_or_write_node_t); + pm_local_variable_or_write_node_t *node = PM_NODE_ALLOC(parser, pm_local_variable_or_write_node_t); *node = (pm_local_variable_or_write_node_t) { { .type = PM_LOCAL_VARIABLE_OR_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->location.start, .end = value->location.end @@ -5676,11 +5796,12 @@ static pm_local_variable_read_node_t * pm_local_variable_read_node_create_constant_id(pm_parser_t *parser, const pm_token_t *name, pm_constant_id_t name_id, uint32_t depth, bool missing) { if (!missing) pm_locals_read(&pm_parser_scope_find(parser, depth)->locals, name_id); - pm_local_variable_read_node_t *node = PM_ALLOC_NODE(parser, pm_local_variable_read_node_t); + pm_local_variable_read_node_t *node = PM_NODE_ALLOC(parser, pm_local_variable_read_node_t); *node = (pm_local_variable_read_node_t) { { .type = PM_LOCAL_VARIABLE_READ_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(name) }, .name = name_id, @@ -5714,12 +5835,13 @@ pm_local_variable_read_node_missing_create(pm_parser_t *parser, const pm_token_t */ static pm_local_variable_write_node_t * pm_local_variable_write_node_create(pm_parser_t *parser, pm_constant_id_t name, uint32_t depth, pm_node_t *value, const pm_location_t *name_loc, const pm_token_t *operator) { - pm_local_variable_write_node_t *node = PM_ALLOC_NODE(parser, pm_local_variable_write_node_t); + pm_local_variable_write_node_t *node = PM_NODE_ALLOC(parser, pm_local_variable_write_node_t); *node = (pm_local_variable_write_node_t) { { .type = PM_LOCAL_VARIABLE_WRITE_NODE, .flags = pm_implicit_array_write_flags(value, PM_WRITE_NODE_FLAGS_IMPLICIT_ARRAY), + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = name_loc->start, .end = value->location.end @@ -5770,11 +5892,12 @@ pm_refute_numbered_parameter(pm_parser_t *parser, const uint8_t *start, const ui static pm_local_variable_target_node_t * pm_local_variable_target_node_create(pm_parser_t *parser, const pm_location_t *location, pm_constant_id_t name, uint32_t depth) { pm_refute_numbered_parameter(parser, location->start, location->end); - pm_local_variable_target_node_t *node = PM_ALLOC_NODE(parser, pm_local_variable_target_node_t); + pm_local_variable_target_node_t *node = PM_NODE_ALLOC(parser, pm_local_variable_target_node_t); *node = (pm_local_variable_target_node_t) { { .type = PM_LOCAL_VARIABLE_TARGET_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = *location }, .name = name, @@ -5791,11 +5914,12 @@ static pm_match_predicate_node_t * pm_match_predicate_node_create(pm_parser_t *parser, pm_node_t *value, pm_node_t *pattern, const pm_token_t *operator) { pm_assert_value_expression(parser, value); - pm_match_predicate_node_t *node = PM_ALLOC_NODE(parser, pm_match_predicate_node_t); + pm_match_predicate_node_t *node = PM_NODE_ALLOC(parser, pm_match_predicate_node_t); *node = (pm_match_predicate_node_t) { { .type = PM_MATCH_PREDICATE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = value->location.start, .end = pattern->location.end @@ -5816,11 +5940,12 @@ static pm_match_required_node_t * pm_match_required_node_create(pm_parser_t *parser, pm_node_t *value, pm_node_t *pattern, const pm_token_t *operator) { pm_assert_value_expression(parser, value); - pm_match_required_node_t *node = PM_ALLOC_NODE(parser, pm_match_required_node_t); + pm_match_required_node_t *node = PM_NODE_ALLOC(parser, pm_match_required_node_t); *node = (pm_match_required_node_t) { { .type = PM_MATCH_REQUIRED_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = value->location.start, .end = pattern->location.end @@ -5839,11 +5964,12 @@ pm_match_required_node_create(pm_parser_t *parser, pm_node_t *value, pm_node_t * */ static pm_match_write_node_t * pm_match_write_node_create(pm_parser_t *parser, pm_call_node_t *call) { - pm_match_write_node_t *node = PM_ALLOC_NODE(parser, pm_match_write_node_t); + pm_match_write_node_t *node = PM_NODE_ALLOC(parser, pm_match_write_node_t); *node = (pm_match_write_node_t) { { .type = PM_MATCH_WRITE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = call->base.location }, .call = call, @@ -5858,11 +5984,12 @@ pm_match_write_node_create(pm_parser_t *parser, pm_call_node_t *call) { */ static pm_module_node_t * pm_module_node_create(pm_parser_t *parser, pm_constant_id_list_t *locals, const pm_token_t *module_keyword, pm_node_t *constant_path, const pm_token_t *name, pm_node_t *body, const pm_token_t *end_keyword) { - pm_module_node_t *node = PM_ALLOC_NODE(parser, pm_module_node_t); + pm_module_node_t *node = PM_NODE_ALLOC(parser, pm_module_node_t); *node = (pm_module_node_t) { { .type = PM_MODULE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = module_keyword->start, .end = end_keyword->end @@ -5884,11 +6011,12 @@ pm_module_node_create(pm_parser_t *parser, pm_constant_id_list_t *locals, const */ static pm_multi_target_node_t * pm_multi_target_node_create(pm_parser_t *parser) { - pm_multi_target_node_t *node = PM_ALLOC_NODE(parser, pm_multi_target_node_t); + pm_multi_target_node_t *node = PM_NODE_ALLOC(parser, pm_multi_target_node_t); *node = (pm_multi_target_node_t) { { .type = PM_MULTI_TARGET_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = NULL, .end = NULL } }, .lefts = { 0 }, @@ -5958,12 +6086,13 @@ pm_multi_target_node_closing_set(pm_multi_target_node_t *node, const pm_token_t */ static pm_multi_write_node_t * pm_multi_write_node_create(pm_parser_t *parser, pm_multi_target_node_t *target, const pm_token_t *operator, pm_node_t *value) { - pm_multi_write_node_t *node = PM_ALLOC_NODE(parser, pm_multi_write_node_t); + pm_multi_write_node_t *node = PM_NODE_ALLOC(parser, pm_multi_write_node_t); *node = (pm_multi_write_node_t) { { .type = PM_MULTI_WRITE_NODE, .flags = pm_implicit_array_write_flags(value, PM_WRITE_NODE_FLAGS_IMPLICIT_ARRAY), + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = target->base.location.start, .end = value->location.end @@ -5991,11 +6120,12 @@ pm_multi_write_node_create(pm_parser_t *parser, pm_multi_target_node_t *target, static pm_next_node_t * pm_next_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_arguments_node_t *arguments) { assert(keyword->type == PM_TOKEN_KEYWORD_NEXT); - pm_next_node_t *node = PM_ALLOC_NODE(parser, pm_next_node_t); + pm_next_node_t *node = PM_NODE_ALLOC(parser, pm_next_node_t); *node = (pm_next_node_t) { { .type = PM_NEXT_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword->start, .end = (arguments == NULL ? keyword->end : arguments->base.location.end) @@ -6014,11 +6144,12 @@ pm_next_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_arguments static pm_nil_node_t * pm_nil_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_KEYWORD_NIL); - pm_nil_node_t *node = PM_ALLOC_NODE(parser, pm_nil_node_t); + pm_nil_node_t *node = PM_NODE_ALLOC(parser, pm_nil_node_t); *node = (pm_nil_node_t) {{ .type = PM_NIL_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }}; @@ -6032,11 +6163,12 @@ static pm_no_keywords_parameter_node_t * pm_no_keywords_parameter_node_create(pm_parser_t *parser, const pm_token_t *operator, const pm_token_t *keyword) { assert(operator->type == PM_TOKEN_USTAR_STAR || operator->type == PM_TOKEN_STAR_STAR); assert(keyword->type == PM_TOKEN_KEYWORD_NIL); - pm_no_keywords_parameter_node_t *node = PM_ALLOC_NODE(parser, pm_no_keywords_parameter_node_t); + pm_no_keywords_parameter_node_t *node = PM_NODE_ALLOC(parser, pm_no_keywords_parameter_node_t); *node = (pm_no_keywords_parameter_node_t) { { .type = PM_NO_KEYWORDS_PARAMETER_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = operator->start, .end = keyword->end @@ -6054,11 +6186,12 @@ pm_no_keywords_parameter_node_create(pm_parser_t *parser, const pm_token_t *oper */ static pm_numbered_parameters_node_t * pm_numbered_parameters_node_create(pm_parser_t *parser, const pm_location_t *location, uint8_t maximum) { - pm_numbered_parameters_node_t *node = PM_ALLOC_NODE(parser, pm_numbered_parameters_node_t); + pm_numbered_parameters_node_t *node = PM_NODE_ALLOC(parser, pm_numbered_parameters_node_t); *node = (pm_numbered_parameters_node_t) { { .type = PM_NUMBERED_PARAMETERS_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = *location }, .maximum = maximum @@ -6119,11 +6252,12 @@ pm_numbered_reference_read_node_number(pm_parser_t *parser, const pm_token_t *to static pm_numbered_reference_read_node_t * pm_numbered_reference_read_node_create(pm_parser_t *parser, const pm_token_t *name) { assert(name->type == PM_TOKEN_NUMBERED_REFERENCE); - pm_numbered_reference_read_node_t *node = PM_ALLOC_NODE(parser, pm_numbered_reference_read_node_t); + pm_numbered_reference_read_node_t *node = PM_NODE_ALLOC(parser, pm_numbered_reference_read_node_t); *node = (pm_numbered_reference_read_node_t) { { .type = PM_NUMBERED_REFERENCE_READ_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(name), }, .number = pm_numbered_reference_read_node_number(parser, name) @@ -6137,11 +6271,12 @@ pm_numbered_reference_read_node_create(pm_parser_t *parser, const pm_token_t *na */ static pm_optional_parameter_node_t * pm_optional_parameter_node_create(pm_parser_t *parser, const pm_token_t *name, const pm_token_t *operator, pm_node_t *value) { - pm_optional_parameter_node_t *node = PM_ALLOC_NODE(parser, pm_optional_parameter_node_t); + pm_optional_parameter_node_t *node = PM_NODE_ALLOC(parser, pm_optional_parameter_node_t); *node = (pm_optional_parameter_node_t) { { .type = PM_OPTIONAL_PARAMETER_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = name->start, .end = value->location.end @@ -6163,11 +6298,12 @@ static pm_or_node_t * pm_or_node_create(pm_parser_t *parser, pm_node_t *left, const pm_token_t *operator, pm_node_t *right) { pm_assert_value_expression(parser, left); - pm_or_node_t *node = PM_ALLOC_NODE(parser, pm_or_node_t); + pm_or_node_t *node = PM_NODE_ALLOC(parser, pm_or_node_t); *node = (pm_or_node_t) { { .type = PM_OR_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = left->location.start, .end = right->location.end @@ -6186,11 +6322,12 @@ pm_or_node_create(pm_parser_t *parser, pm_node_t *left, const pm_token_t *operat */ static pm_parameters_node_t * pm_parameters_node_create(pm_parser_t *parser) { - pm_parameters_node_t *node = PM_ALLOC_NODE(parser, pm_parameters_node_t); + pm_parameters_node_t *node = PM_NODE_ALLOC(parser, pm_parameters_node_t); *node = (pm_parameters_node_t) { { .type = PM_PARAMETERS_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(&parser->current) }, .rest = NULL, @@ -6293,11 +6430,12 @@ pm_parameters_node_block_set(pm_parameters_node_t *params, pm_block_parameter_no */ static pm_program_node_t * pm_program_node_create(pm_parser_t *parser, pm_constant_id_list_t *locals, pm_statements_node_t *statements) { - pm_program_node_t *node = PM_ALLOC_NODE(parser, pm_program_node_t); + pm_program_node_t *node = PM_NODE_ALLOC(parser, pm_program_node_t); *node = (pm_program_node_t) { { .type = PM_PROGRAM_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = statements == NULL ? parser->start : statements->base.location.start, .end = statements == NULL ? parser->end : statements->base.location.end @@ -6315,11 +6453,12 @@ pm_program_node_create(pm_parser_t *parser, pm_constant_id_list_t *locals, pm_st */ static pm_parentheses_node_t * pm_parentheses_node_create(pm_parser_t *parser, const pm_token_t *opening, pm_node_t *body, const pm_token_t *closing) { - pm_parentheses_node_t *node = PM_ALLOC_NODE(parser, pm_parentheses_node_t); + pm_parentheses_node_t *node = PM_NODE_ALLOC(parser, pm_parentheses_node_t); *node = (pm_parentheses_node_t) { { .type = PM_PARENTHESES_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = opening->start, .end = closing->end @@ -6338,11 +6477,12 @@ pm_parentheses_node_create(pm_parser_t *parser, const pm_token_t *opening, pm_no */ static pm_pinned_expression_node_t * pm_pinned_expression_node_create(pm_parser_t *parser, pm_node_t *expression, const pm_token_t *operator, const pm_token_t *lparen, const pm_token_t *rparen) { - pm_pinned_expression_node_t *node = PM_ALLOC_NODE(parser, pm_pinned_expression_node_t); + pm_pinned_expression_node_t *node = PM_NODE_ALLOC(parser, pm_pinned_expression_node_t); *node = (pm_pinned_expression_node_t) { { .type = PM_PINNED_EXPRESSION_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = operator->start, .end = rparen->end @@ -6362,11 +6502,12 @@ pm_pinned_expression_node_create(pm_parser_t *parser, pm_node_t *expression, con */ static pm_pinned_variable_node_t * pm_pinned_variable_node_create(pm_parser_t *parser, const pm_token_t *operator, pm_node_t *variable) { - pm_pinned_variable_node_t *node = PM_ALLOC_NODE(parser, pm_pinned_variable_node_t); + pm_pinned_variable_node_t *node = PM_NODE_ALLOC(parser, pm_pinned_variable_node_t); *node = (pm_pinned_variable_node_t) { { .type = PM_PINNED_VARIABLE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = operator->start, .end = variable->location.end @@ -6384,11 +6525,12 @@ pm_pinned_variable_node_create(pm_parser_t *parser, const pm_token_t *operator, */ static pm_post_execution_node_t * pm_post_execution_node_create(pm_parser_t *parser, const pm_token_t *keyword, const pm_token_t *opening, pm_statements_node_t *statements, const pm_token_t *closing) { - pm_post_execution_node_t *node = PM_ALLOC_NODE(parser, pm_post_execution_node_t); + pm_post_execution_node_t *node = PM_NODE_ALLOC(parser, pm_post_execution_node_t); *node = (pm_post_execution_node_t) { { .type = PM_POST_EXECUTION_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword->start, .end = closing->end @@ -6408,11 +6550,12 @@ pm_post_execution_node_create(pm_parser_t *parser, const pm_token_t *keyword, co */ static pm_pre_execution_node_t * pm_pre_execution_node_create(pm_parser_t *parser, const pm_token_t *keyword, const pm_token_t *opening, pm_statements_node_t *statements, const pm_token_t *closing) { - pm_pre_execution_node_t *node = PM_ALLOC_NODE(parser, pm_pre_execution_node_t); + pm_pre_execution_node_t *node = PM_NODE_ALLOC(parser, pm_pre_execution_node_t); *node = (pm_pre_execution_node_t) { { .type = PM_PRE_EXECUTION_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword->start, .end = closing->end @@ -6435,7 +6578,7 @@ pm_range_node_create(pm_parser_t *parser, pm_node_t *left, const pm_token_t *ope pm_assert_value_expression(parser, left); pm_assert_value_expression(parser, right); - pm_range_node_t *node = PM_ALLOC_NODE(parser, pm_range_node_t); + pm_range_node_t *node = PM_NODE_ALLOC(parser, pm_range_node_t); pm_node_flags_t flags = 0; // Indicate that this node is an exclusive range if the operator is `...`. @@ -6457,6 +6600,7 @@ pm_range_node_create(pm_parser_t *parser, pm_node_t *left, const pm_token_t *ope { .type = PM_RANGE_NODE, .flags = flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = (left == NULL ? operator->start : left->location.start), .end = (right == NULL ? operator->end : right->location.end) @@ -6476,9 +6620,14 @@ pm_range_node_create(pm_parser_t *parser, pm_node_t *left, const pm_token_t *ope static pm_redo_node_t * pm_redo_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_KEYWORD_REDO); - pm_redo_node_t *node = PM_ALLOC_NODE(parser, pm_redo_node_t); + pm_redo_node_t *node = PM_NODE_ALLOC(parser, pm_redo_node_t); + + *node = (pm_redo_node_t) {{ + .type = PM_REDO_NODE, + .node_id = PM_NODE_IDENTIFY(parser), + .location = PM_LOCATION_TOKEN_VALUE(token) + }}; - *node = (pm_redo_node_t) {{ .type = PM_REDO_NODE, .location = PM_LOCATION_TOKEN_VALUE(token) }}; return node; } @@ -6488,12 +6637,13 @@ pm_redo_node_create(pm_parser_t *parser, const pm_token_t *token) { */ static pm_regular_expression_node_t * pm_regular_expression_node_create_unescaped(pm_parser_t *parser, const pm_token_t *opening, const pm_token_t *content, const pm_token_t *closing, const pm_string_t *unescaped) { - pm_regular_expression_node_t *node = PM_ALLOC_NODE(parser, pm_regular_expression_node_t); + pm_regular_expression_node_t *node = PM_NODE_ALLOC(parser, pm_regular_expression_node_t); *node = (pm_regular_expression_node_t) { { .type = PM_REGULAR_EXPRESSION_NODE, .flags = pm_regular_expression_flags_create(parser, closing) | PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = MIN(opening->start, closing->start), .end = MAX(opening->end, closing->end) @@ -6521,11 +6671,12 @@ pm_regular_expression_node_create(pm_parser_t *parser, const pm_token_t *opening */ static pm_required_parameter_node_t * pm_required_parameter_node_create(pm_parser_t *parser, const pm_token_t *token) { - pm_required_parameter_node_t *node = PM_ALLOC_NODE(parser, pm_required_parameter_node_t); + pm_required_parameter_node_t *node = PM_NODE_ALLOC(parser, pm_required_parameter_node_t); *node = (pm_required_parameter_node_t) { { .type = PM_REQUIRED_PARAMETER_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }, .name = pm_parser_constant_id_token(parser, token) @@ -6539,11 +6690,12 @@ pm_required_parameter_node_create(pm_parser_t *parser, const pm_token_t *token) */ static pm_rescue_modifier_node_t * pm_rescue_modifier_node_create(pm_parser_t *parser, pm_node_t *expression, const pm_token_t *keyword, pm_node_t *rescue_expression) { - pm_rescue_modifier_node_t *node = PM_ALLOC_NODE(parser, pm_rescue_modifier_node_t); + pm_rescue_modifier_node_t *node = PM_NODE_ALLOC(parser, pm_rescue_modifier_node_t); *node = (pm_rescue_modifier_node_t) { { .type = PM_RESCUE_MODIFIER_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = expression->location.start, .end = rescue_expression->location.end @@ -6562,11 +6714,12 @@ pm_rescue_modifier_node_create(pm_parser_t *parser, pm_node_t *expression, const */ static pm_rescue_node_t * pm_rescue_node_create(pm_parser_t *parser, const pm_token_t *keyword) { - pm_rescue_node_t *node = PM_ALLOC_NODE(parser, pm_rescue_node_t); + pm_rescue_node_t *node = PM_NODE_ALLOC(parser, pm_rescue_node_t); *node = (pm_rescue_node_t) { { .type = PM_RESCUE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(keyword) }, .keyword_loc = PM_LOCATION_TOKEN_VALUE(keyword), @@ -6628,11 +6781,12 @@ pm_rescue_node_exceptions_append(pm_rescue_node_t *node, pm_node_t *exception) { */ static pm_rest_parameter_node_t * pm_rest_parameter_node_create(pm_parser_t *parser, const pm_token_t *operator, const pm_token_t *name) { - pm_rest_parameter_node_t *node = PM_ALLOC_NODE(parser, pm_rest_parameter_node_t); + pm_rest_parameter_node_t *node = PM_NODE_ALLOC(parser, pm_rest_parameter_node_t); *node = (pm_rest_parameter_node_t) { { .type = PM_REST_PARAMETER_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = operator->start, .end = (name->type == PM_TOKEN_NOT_PROVIDED ? operator->end : name->end) @@ -6652,9 +6806,14 @@ pm_rest_parameter_node_create(pm_parser_t *parser, const pm_token_t *operator, c static pm_retry_node_t * pm_retry_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_KEYWORD_RETRY); - pm_retry_node_t *node = PM_ALLOC_NODE(parser, pm_retry_node_t); + pm_retry_node_t *node = PM_NODE_ALLOC(parser, pm_retry_node_t); + + *node = (pm_retry_node_t) {{ + .type = PM_RETRY_NODE, + .node_id = PM_NODE_IDENTIFY(parser), + .location = PM_LOCATION_TOKEN_VALUE(token) + }}; - *node = (pm_retry_node_t) {{ .type = PM_RETRY_NODE, .location = PM_LOCATION_TOKEN_VALUE(token) }}; return node; } @@ -6663,12 +6822,12 @@ pm_retry_node_create(pm_parser_t *parser, const pm_token_t *token) { */ static pm_return_node_t * pm_return_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_arguments_node_t *arguments) { - pm_return_node_t *node = PM_ALLOC_NODE(parser, pm_return_node_t); + pm_return_node_t *node = PM_NODE_ALLOC(parser, pm_return_node_t); *node = (pm_return_node_t) { { .type = PM_RETURN_NODE, - .flags = 0, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword->start, .end = (arguments == NULL ? keyword->end : arguments->base.location.end) @@ -6687,10 +6846,11 @@ pm_return_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_argumen static pm_self_node_t * pm_self_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_KEYWORD_SELF); - pm_self_node_t *node = PM_ALLOC_NODE(parser, pm_self_node_t); + pm_self_node_t *node = PM_NODE_ALLOC(parser, pm_self_node_t); *node = (pm_self_node_t) {{ .type = PM_SELF_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }}; @@ -6702,12 +6862,13 @@ pm_self_node_create(pm_parser_t *parser, const pm_token_t *token) { */ static pm_shareable_constant_node_t * pm_shareable_constant_node_create(pm_parser_t *parser, pm_node_t *write, pm_shareable_constant_value_t value) { - pm_shareable_constant_node_t *node = PM_ALLOC_NODE(parser, pm_shareable_constant_node_t); + pm_shareable_constant_node_t *node = PM_NODE_ALLOC(parser, pm_shareable_constant_node_t); *node = (pm_shareable_constant_node_t) { { .type = PM_SHAREABLE_CONSTANT_NODE, .flags = (pm_node_flags_t) value, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_NODE_VALUE(write) }, .write = write @@ -6721,11 +6882,12 @@ pm_shareable_constant_node_create(pm_parser_t *parser, pm_node_t *write, pm_shar */ static pm_singleton_class_node_t * pm_singleton_class_node_create(pm_parser_t *parser, pm_constant_id_list_t *locals, const pm_token_t *class_keyword, const pm_token_t *operator, pm_node_t *expression, pm_node_t *body, const pm_token_t *end_keyword) { - pm_singleton_class_node_t *node = PM_ALLOC_NODE(parser, pm_singleton_class_node_t); + pm_singleton_class_node_t *node = PM_NODE_ALLOC(parser, pm_singleton_class_node_t); *node = (pm_singleton_class_node_t) { { .type = PM_SINGLETON_CLASS_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = class_keyword->start, .end = end_keyword->end @@ -6748,11 +6910,12 @@ pm_singleton_class_node_create(pm_parser_t *parser, pm_constant_id_list_t *local static pm_source_encoding_node_t * pm_source_encoding_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_KEYWORD___ENCODING__); - pm_source_encoding_node_t *node = PM_ALLOC_NODE(parser, pm_source_encoding_node_t); + pm_source_encoding_node_t *node = PM_NODE_ALLOC(parser, pm_source_encoding_node_t); *node = (pm_source_encoding_node_t) {{ .type = PM_SOURCE_ENCODING_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }}; @@ -6764,7 +6927,7 @@ pm_source_encoding_node_create(pm_parser_t *parser, const pm_token_t *token) { */ static pm_source_file_node_t* pm_source_file_node_create(pm_parser_t *parser, const pm_token_t *file_keyword) { - pm_source_file_node_t *node = PM_ALLOC_NODE(parser, pm_source_file_node_t); + pm_source_file_node_t *node = PM_NODE_ALLOC(parser, pm_source_file_node_t); assert(file_keyword->type == PM_TOKEN_KEYWORD___FILE__); pm_node_flags_t flags = 0; @@ -6782,6 +6945,7 @@ pm_source_file_node_create(pm_parser_t *parser, const pm_token_t *file_keyword) { .type = PM_SOURCE_FILE_NODE, .flags = flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(file_keyword), }, .filepath = parser->filepath @@ -6796,11 +6960,12 @@ pm_source_file_node_create(pm_parser_t *parser, const pm_token_t *file_keyword) static pm_source_line_node_t * pm_source_line_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_KEYWORD___LINE__); - pm_source_line_node_t *node = PM_ALLOC_NODE(parser, pm_source_line_node_t); + pm_source_line_node_t *node = PM_NODE_ALLOC(parser, pm_source_line_node_t); *node = (pm_source_line_node_t) {{ .type = PM_SOURCE_LINE_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }}; @@ -6812,11 +6977,12 @@ pm_source_line_node_create(pm_parser_t *parser, const pm_token_t *token) { */ static pm_splat_node_t * pm_splat_node_create(pm_parser_t *parser, const pm_token_t *operator, pm_node_t *expression) { - pm_splat_node_t *node = PM_ALLOC_NODE(parser, pm_splat_node_t); + pm_splat_node_t *node = PM_NODE_ALLOC(parser, pm_splat_node_t); *node = (pm_splat_node_t) { { .type = PM_SPLAT_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = operator->start, .end = (expression == NULL ? operator->end : expression->location.end) @@ -6834,11 +7000,12 @@ pm_splat_node_create(pm_parser_t *parser, const pm_token_t *operator, pm_node_t */ static pm_statements_node_t * pm_statements_node_create(pm_parser_t *parser) { - pm_statements_node_t *node = PM_ALLOC_NODE(parser, pm_statements_node_t); + pm_statements_node_t *node = PM_NODE_ALLOC(parser, pm_statements_node_t); *node = (pm_statements_node_t) { { .type = PM_STATEMENTS_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_NULL_VALUE(parser) }, .body = { 0 } @@ -6920,7 +7087,7 @@ pm_statements_node_body_prepend(pm_statements_node_t *node, pm_node_t *statement */ static inline pm_string_node_t * pm_string_node_create_unescaped(pm_parser_t *parser, const pm_token_t *opening, const pm_token_t *content, const pm_token_t *closing, const pm_string_t *string) { - pm_string_node_t *node = PM_ALLOC_NODE(parser, pm_string_node_t); + pm_string_node_t *node = PM_NODE_ALLOC(parser, pm_string_node_t); pm_node_flags_t flags = 0; switch (parser->frozen_string_literal) { @@ -6936,6 +7103,7 @@ pm_string_node_create_unescaped(pm_parser_t *parser, const pm_token_t *opening, { .type = PM_STRING_NODE, .flags = flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = (opening->type == PM_TOKEN_NOT_PROVIDED ? content->start : opening->start), .end = (closing->type == PM_TOKEN_NOT_PROVIDED ? content->end : closing->end) @@ -6975,7 +7143,7 @@ pm_string_node_create_current_string(pm_parser_t *parser, const pm_token_t *open static pm_super_node_t * pm_super_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_arguments_t *arguments) { assert(keyword->type == PM_TOKEN_KEYWORD_SUPER); - pm_super_node_t *node = PM_ALLOC_NODE(parser, pm_super_node_t); + pm_super_node_t *node = PM_NODE_ALLOC(parser, pm_super_node_t); const uint8_t *end = pm_arguments_end(arguments); if (end == NULL) { @@ -6985,6 +7153,7 @@ pm_super_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_argument *node = (pm_super_node_t) { { .type = PM_SUPER_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword->start, .end = end, @@ -7216,12 +7385,13 @@ parse_and_validate_regular_expression_encoding(pm_parser_t *parser, const pm_str */ static pm_symbol_node_t * pm_symbol_node_create_unescaped(pm_parser_t *parser, const pm_token_t *opening, const pm_token_t *value, const pm_token_t *closing, const pm_string_t *unescaped, pm_node_flags_t flags) { - pm_symbol_node_t *node = PM_ALLOC_NODE(parser, pm_symbol_node_t); + pm_symbol_node_t *node = PM_NODE_ALLOC(parser, pm_symbol_node_t); *node = (pm_symbol_node_t) { { .type = PM_SYMBOL_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL | flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = (opening->type == PM_TOKEN_NOT_PROVIDED ? value->start : opening->start), .end = (closing->type == PM_TOKEN_NOT_PROVIDED ? value->end : closing->end) @@ -7297,12 +7467,13 @@ pm_symbol_node_label_create(pm_parser_t *parser, const pm_token_t *token) { */ static pm_symbol_node_t * pm_symbol_node_synthesized_create(pm_parser_t *parser, const char *content) { - pm_symbol_node_t *node = PM_ALLOC_NODE(parser, pm_symbol_node_t); + pm_symbol_node_t *node = PM_NODE_ALLOC(parser, pm_symbol_node_t); *node = (pm_symbol_node_t) { { .type = PM_SYMBOL_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL | PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_NULL_VALUE(parser) }, .value_loc = PM_LOCATION_NULL_VALUE(parser), @@ -7339,12 +7510,13 @@ pm_symbol_node_label_p(pm_node_t *node) { */ static pm_symbol_node_t * pm_string_node_to_symbol_node(pm_parser_t *parser, pm_string_node_t *node, const pm_token_t *opening, const pm_token_t *closing) { - pm_symbol_node_t *new_node = PM_ALLOC_NODE(parser, pm_symbol_node_t); + pm_symbol_node_t *new_node = PM_NODE_ALLOC(parser, pm_symbol_node_t); *new_node = (pm_symbol_node_t) { { .type = PM_SYMBOL_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = opening->start, .end = closing->end @@ -7372,7 +7544,7 @@ pm_string_node_to_symbol_node(pm_parser_t *parser, pm_string_node_t *node, const */ static pm_string_node_t * pm_symbol_node_to_string_node(pm_parser_t *parser, pm_symbol_node_t *node) { - pm_string_node_t *new_node = PM_ALLOC_NODE(parser, pm_string_node_t); + pm_string_node_t *new_node = PM_NODE_ALLOC(parser, pm_string_node_t); pm_node_flags_t flags = 0; switch (parser->frozen_string_literal) { @@ -7388,6 +7560,7 @@ pm_symbol_node_to_string_node(pm_parser_t *parser, pm_symbol_node_t *node) { { .type = PM_STRING_NODE, .flags = flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = node->base.location }, .opening_loc = node->opening_loc, @@ -7410,11 +7583,12 @@ pm_symbol_node_to_string_node(pm_parser_t *parser, pm_symbol_node_t *node) { static pm_true_node_t * pm_true_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_KEYWORD_TRUE); - pm_true_node_t *node = PM_ALLOC_NODE(parser, pm_true_node_t); + pm_true_node_t *node = PM_NODE_ALLOC(parser, pm_true_node_t); *node = (pm_true_node_t) {{ .type = PM_TRUE_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token) }}; @@ -7426,11 +7600,12 @@ pm_true_node_create(pm_parser_t *parser, const pm_token_t *token) { */ static pm_true_node_t * pm_true_node_synthesized_create(pm_parser_t *parser) { - pm_true_node_t *node = PM_ALLOC_NODE(parser, pm_true_node_t); + pm_true_node_t *node = PM_NODE_ALLOC(parser, pm_true_node_t); *node = (pm_true_node_t) {{ .type = PM_TRUE_NODE, .flags = PM_NODE_FLAG_STATIC_LITERAL, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = parser->start, .end = parser->end } }}; @@ -7443,11 +7618,12 @@ pm_true_node_synthesized_create(pm_parser_t *parser) { static pm_undef_node_t * pm_undef_node_create(pm_parser_t *parser, const pm_token_t *token) { assert(token->type == PM_TOKEN_KEYWORD_UNDEF); - pm_undef_node_t *node = PM_ALLOC_NODE(parser, pm_undef_node_t); + pm_undef_node_t *node = PM_NODE_ALLOC(parser, pm_undef_node_t); *node = (pm_undef_node_t) { { .type = PM_UNDEF_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_TOKEN_VALUE(token), }, .keyword_loc = PM_LOCATION_TOKEN_VALUE(token), @@ -7472,7 +7648,7 @@ pm_undef_node_append(pm_undef_node_t *node, pm_node_t *name) { static pm_unless_node_t * pm_unless_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t *predicate, const pm_token_t *then_keyword, pm_statements_node_t *statements) { pm_conditional_predicate(parser, predicate, PM_CONDITIONAL_PREDICATE_TYPE_CONDITIONAL); - pm_unless_node_t *node = PM_ALLOC_NODE(parser, pm_unless_node_t); + pm_unless_node_t *node = PM_NODE_ALLOC(parser, pm_unless_node_t); const uint8_t *end; if (statements != NULL) { @@ -7485,6 +7661,7 @@ pm_unless_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t { .type = PM_UNLESS_NODE, .flags = PM_NODE_FLAG_NEWLINE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword->start, .end = end @@ -7507,7 +7684,7 @@ pm_unless_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t static pm_unless_node_t * pm_unless_node_modifier_create(pm_parser_t *parser, pm_node_t *statement, const pm_token_t *unless_keyword, pm_node_t *predicate) { pm_conditional_predicate(parser, predicate, PM_CONDITIONAL_PREDICATE_TYPE_CONDITIONAL); - pm_unless_node_t *node = PM_ALLOC_NODE(parser, pm_unless_node_t); + pm_unless_node_t *node = PM_NODE_ALLOC(parser, pm_unless_node_t); pm_statements_node_t *statements = pm_statements_node_create(parser); pm_statements_node_body_append(parser, statements, statement); @@ -7516,6 +7693,7 @@ pm_unless_node_modifier_create(pm_parser_t *parser, pm_node_t *statement, const { .type = PM_UNLESS_NODE, .flags = PM_NODE_FLAG_NEWLINE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = statement->location.start, .end = predicate->location.end @@ -7566,13 +7744,14 @@ pm_loop_modifier_block_exits(pm_parser_t *parser, pm_statements_node_t *statemen */ static pm_until_node_t * pm_until_node_create(pm_parser_t *parser, const pm_token_t *keyword, const pm_token_t *closing, pm_node_t *predicate, pm_statements_node_t *statements, pm_node_flags_t flags) { - pm_until_node_t *node = PM_ALLOC_NODE(parser, pm_until_node_t); + pm_until_node_t *node = PM_NODE_ALLOC(parser, pm_until_node_t); pm_conditional_predicate(parser, predicate, PM_CONDITIONAL_PREDICATE_TYPE_CONDITIONAL); *node = (pm_until_node_t) { { .type = PM_UNTIL_NODE, .flags = flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword->start, .end = closing->end, @@ -7592,7 +7771,7 @@ pm_until_node_create(pm_parser_t *parser, const pm_token_t *keyword, const pm_to */ static pm_until_node_t * pm_until_node_modifier_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t *predicate, pm_statements_node_t *statements, pm_node_flags_t flags) { - pm_until_node_t *node = PM_ALLOC_NODE(parser, pm_until_node_t); + pm_until_node_t *node = PM_NODE_ALLOC(parser, pm_until_node_t); pm_conditional_predicate(parser, predicate, PM_CONDITIONAL_PREDICATE_TYPE_CONDITIONAL); pm_loop_modifier_block_exits(parser, statements); @@ -7600,6 +7779,7 @@ pm_until_node_modifier_create(pm_parser_t *parser, const pm_token_t *keyword, pm { .type = PM_UNTIL_NODE, .flags = flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = statements->base.location.start, .end = predicate->location.end, @@ -7619,11 +7799,12 @@ pm_until_node_modifier_create(pm_parser_t *parser, const pm_token_t *keyword, pm */ static pm_when_node_t * pm_when_node_create(pm_parser_t *parser, const pm_token_t *keyword) { - pm_when_node_t *node = PM_ALLOC_NODE(parser, pm_when_node_t); + pm_when_node_t *node = PM_NODE_ALLOC(parser, pm_when_node_t); *node = (pm_when_node_t) { { .type = PM_WHEN_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword->start, .end = NULL @@ -7673,13 +7854,14 @@ pm_when_node_statements_set(pm_when_node_t *node, pm_statements_node_t *statemen */ static pm_while_node_t * pm_while_node_create(pm_parser_t *parser, const pm_token_t *keyword, const pm_token_t *closing, pm_node_t *predicate, pm_statements_node_t *statements, pm_node_flags_t flags) { - pm_while_node_t *node = PM_ALLOC_NODE(parser, pm_while_node_t); + pm_while_node_t *node = PM_NODE_ALLOC(parser, pm_while_node_t); pm_conditional_predicate(parser, predicate, PM_CONDITIONAL_PREDICATE_TYPE_CONDITIONAL); *node = (pm_while_node_t) { { .type = PM_WHILE_NODE, .flags = flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword->start, .end = closing->end @@ -7699,7 +7881,7 @@ pm_while_node_create(pm_parser_t *parser, const pm_token_t *keyword, const pm_to */ static pm_while_node_t * pm_while_node_modifier_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t *predicate, pm_statements_node_t *statements, pm_node_flags_t flags) { - pm_while_node_t *node = PM_ALLOC_NODE(parser, pm_while_node_t); + pm_while_node_t *node = PM_NODE_ALLOC(parser, pm_while_node_t); pm_conditional_predicate(parser, predicate, PM_CONDITIONAL_PREDICATE_TYPE_CONDITIONAL); pm_loop_modifier_block_exits(parser, statements); @@ -7707,6 +7889,7 @@ pm_while_node_modifier_create(pm_parser_t *parser, const pm_token_t *keyword, pm { .type = PM_WHILE_NODE, .flags = flags, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = statements->base.location.start, .end = predicate->location.end @@ -7726,11 +7909,12 @@ pm_while_node_modifier_create(pm_parser_t *parser, const pm_token_t *keyword, pm */ static pm_while_node_t * pm_while_node_synthesized_create(pm_parser_t *parser, pm_node_t *predicate, pm_statements_node_t *statements) { - pm_while_node_t *node = PM_ALLOC_NODE(parser, pm_while_node_t); + pm_while_node_t *node = PM_NODE_ALLOC(parser, pm_while_node_t); *node = (pm_while_node_t) { { .type = PM_WHILE_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = PM_LOCATION_NULL_VALUE(parser) }, .keyword_loc = PM_LOCATION_NULL_VALUE(parser), @@ -7748,12 +7932,13 @@ pm_while_node_synthesized_create(pm_parser_t *parser, pm_node_t *predicate, pm_s */ static pm_x_string_node_t * pm_xstring_node_create_unescaped(pm_parser_t *parser, const pm_token_t *opening, const pm_token_t *content, const pm_token_t *closing, const pm_string_t *unescaped) { - pm_x_string_node_t *node = PM_ALLOC_NODE(parser, pm_x_string_node_t); + pm_x_string_node_t *node = PM_NODE_ALLOC(parser, pm_x_string_node_t); *node = (pm_x_string_node_t) { { .type = PM_X_STRING_NODE, .flags = PM_STRING_FLAGS_FROZEN, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = opening->start, .end = closing->end @@ -7781,7 +7966,7 @@ pm_xstring_node_create(pm_parser_t *parser, const pm_token_t *opening, const pm_ */ static pm_yield_node_t * pm_yield_node_create(pm_parser_t *parser, const pm_token_t *keyword, const pm_location_t *lparen_loc, pm_arguments_node_t *arguments, const pm_location_t *rparen_loc) { - pm_yield_node_t *node = PM_ALLOC_NODE(parser, pm_yield_node_t); + pm_yield_node_t *node = PM_NODE_ALLOC(parser, pm_yield_node_t); const uint8_t *end; if (rparen_loc->start != NULL) { @@ -7797,6 +7982,7 @@ pm_yield_node_create(pm_parser_t *parser, const pm_token_t *keyword, const pm_lo *node = (pm_yield_node_t) { { .type = PM_YIELD_NODE, + .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = keyword->start, .end = end @@ -7811,7 +7997,8 @@ pm_yield_node_create(pm_parser_t *parser, const pm_token_t *keyword, const pm_lo return node; } -#undef PM_ALLOC_NODE +#undef PM_NODE_ALLOC +#undef PM_NODE_IDENTIFY /** * Check if any of the currently visible scopes contain a local variable @@ -21328,6 +21515,7 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm assert(source != NULL); *parser = (pm_parser_t) { + .node_id = 0, .lex_state = PM_LEX_STATE_BEG, .enclosure_nesting = 0, .lambda_enclosure_nesting = -1, diff --git a/templates/ext/prism/api_node.c.erb b/templates/ext/prism/api_node.c.erb index a5086d5bcaa..03615b0ae24 100644 --- a/templates/ext/prism/api_node.c.erb +++ b/templates/ext/prism/api_node.c.erb @@ -173,17 +173,20 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi <%- if node.fields.any? { |field| ![Prism::Template::NodeField, Prism::Template::OptionalNodeField].include?(field.class) } -%> pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node; <%- end -%> - VALUE argv[<%= node.fields.length + 3 %>]; + VALUE argv[<%= node.fields.length + 4 %>]; // source argv[0] = source; + // node_id + argv[1] = ULONG2NUM(node->node_id); + // location - argv[1] = pm_location_new(parser, node->location.start, node->location.end); + argv[2] = pm_location_new(parser, node->location.start, node->location.end); // flags - argv[2] = ULONG2NUM(node->flags); - <%- node.fields.each.with_index(3) do |field, index| -%> + argv[3] = ULONG2NUM(node->flags); + <%- node.fields.each.with_index(4) do |field, index| -%> // <%= field.name %> <%- case field -%> @@ -235,7 +238,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi <%- end -%> <%- end -%> - rb_ary_push(value_stack, rb_class_new_instance(<%= node.fields.length + 3 %>, argv, rb_cPrism<%= node.name %>)); + rb_ary_push(value_stack, rb_class_new_instance(<%= node.fields.length + 4 %>, argv, rb_cPrism<%= node.name %>)); break; } <%- end -%> diff --git a/templates/include/prism/ast.h.erb b/templates/include/prism/ast.h.erb index 585e3f40583..54da751bd51 100644 --- a/templates/include/prism/ast.h.erb +++ b/templates/include/prism/ast.h.erb @@ -136,6 +136,12 @@ typedef struct pm_node { */ pm_node_flags_t flags; + /** + * The unique identifier for this node, which is deterministic based on the + * source. It is used to identify unique nodes across parses. + */ + uint32_t node_id; + /** * This is the location of the node in the source. It's a range of bytes * containing a start and an end. diff --git a/templates/java/org/prism/Loader.java.erb b/templates/java/org/prism/Loader.java.erb index 87329643551..0a0a167b325 100644 --- a/templates/java/org/prism/Loader.java.erb +++ b/templates/java/org/prism/Loader.java.erb @@ -353,6 +353,7 @@ public class Loader { private Nodes.Node loadNode() { int type = buffer.get() & 0xFF; + int nodeId = loadVarUInt(); int startOffset = loadVarUInt(); int length = loadVarUInt(); @@ -361,7 +362,8 @@ public class Loader { <%- nodes.each_with_index do |node, index| -%> case <%= index + 1 %>: <%- - params = node.needs_serialized_length? ? ["buffer.getInt()"] : [] + params = ["nodeId", "startOffset", "length"] + params << "buffer.getInt()" if node.needs_serialized_length? params << "loadFlags()" params.concat node.semantic_fields.map { |field| case field @@ -384,7 +386,6 @@ public class Loader { else raise end } - params.concat ["startOffset", "length"] -%> return new Nodes.<%= node.name %>(<%= params.join(", ") -%>); <%- end -%> diff --git a/templates/java/org/prism/Nodes.java.erb b/templates/java/org/prism/Nodes.java.erb index 6a78ef89cbc..7389e70ef06 100644 --- a/templates/java/org/prism/Nodes.java.erb +++ b/templates/java/org/prism/Nodes.java.erb @@ -92,11 +92,13 @@ public abstract class Nodes { public static final Node[] EMPTY_ARRAY = {}; + public final int nodeId; public final int startOffset; public final int length; private boolean newLineFlag = false; - public Node(int startOffset, int length) { + public Node(int nodeId, int startOffset, int length) { + this.nodeId = nodeId; this.startOffset = startOffset; this.length = length; } @@ -210,24 +212,23 @@ public abstract class Nodes { * */ <%- end -%> - <%- if field.class.name.include?('Optional') -%> + <%- if field.class.name.include?("Optional") -%> @Nullable <%- end -%> <%- if field.respond_to?(:union_kind) && field.union_kind -%> - @UnionType({ <%= field.union_kind.map { |t| "#{t}.class" }.join(', ') %> }) + @UnionType({ <%= field.union_kind.map { |t| "#{t}.class" }.join(", ") %> }) <%- end -%> public final <%= field.java_type %> <%= field.name %>; <%- end -%> <%- - params = [] + params = ["int nodeId", "int startOffset", "int length"] params << "int serializedLength" if node.needs_serialized_length? params << "short flags" - params.concat node.semantic_fields.map { |field| "#{field.java_type} #{field.name}" } - params.concat ["int startOffset", "int length"] + params.concat(node.semantic_fields.map { |field| "#{field.java_type} #{field.name}" }) -%> public <%= node.name -%>(<%= params.join(", ") %>) { - super(startOffset, length); + super(nodeId, startOffset, length); <%- if node.needs_serialized_length? -%> this.serializedLength = serializedLength; <%- end -%> diff --git a/templates/javascript/src/deserialize.js.erb b/templates/javascript/src/deserialize.js.erb index 663695a32a8..b946baef624 100644 --- a/templates/javascript/src/deserialize.js.erb +++ b/templates/javascript/src/deserialize.js.erb @@ -295,6 +295,7 @@ export function deserialize(source, array) { function readRequiredNode() { const type = buffer.readByte(); + const nodeID = buffer.readVarInt(); const location = buffer.readLocation(); switch (type) { @@ -303,7 +304,7 @@ export function deserialize(source, array) { <%- if node.needs_serialized_length? -%> buffer.readUint32(); <%- end -%> - return new nodes.<%= node.name %>(<%= ["location", "buffer.readVarInt()", *node.fields.map { |field| + return new nodes.<%= node.name %>(<%= ["nodeID", "location", "buffer.readVarInt()", *node.fields.map { |field| case field when Prism::Template::NodeField then "readRequiredNode()" when Prism::Template::OptionalNodeField then "readOptionalNode()" diff --git a/templates/javascript/src/nodes.js.erb b/templates/javascript/src/nodes.js.erb index 009573154f5..94d972a9b69 100644 --- a/templates/javascript/src/nodes.js.erb +++ b/templates/javascript/src/nodes.js.erb @@ -57,6 +57,16 @@ const <%= flag.name %> = { <%- end -%> */ export class <%= node.name -%> { + /** + * @type {Integer} + */ + nodeID; + + /** + * @type {Location} + */ + location; + /** * @type number */ @@ -69,11 +79,6 @@ export class <%= node.name -%> { <%= prop(field) %>; <%- end -%> - /** - * @type {Location} - */ - location; - /** * Construct a new <%= node.name %>. * @@ -82,7 +87,8 @@ export class <%= node.name -%> { <%- end -%> * @param {Location} location */ - constructor(<%= ["location", "flags", *node.fields.map { |field| prop(field) }].join(", ") %>) { + constructor(<%= ["nodeID", "location", "flags", *node.fields.map { |field| prop(field) }].join(", ") %>) { + this.nodeID = nodeID; this.location = location; this.#flags = flags; <%- node.fields.each do |field| -%> diff --git a/templates/lib/prism/dsl.rb.erb b/templates/lib/prism/dsl.rb.erb index ec899f0b748..d004ffb25b2 100644 --- a/templates/lib/prism/dsl.rb.erb +++ b/templates/lib/prism/dsl.rb.erb @@ -6,11 +6,13 @@ module Prism # # Prism::ArrayNode.new( # source, + # 0, # Prism::Location.new(source, 0, 3), # 0, # [ # Prism::IntegerNode.new( # source, + # 0, # Prism::Location.new(source, 1, 1), # Prism::IntegerBaseFlags::DECIMAL, # 1 @@ -65,7 +67,7 @@ module Prism <%- nodes.each do |node| -%> # Create a new <%= node.name %> node. - def <%= node.human %>(<%= ["source: default_source", "location: default_location", "flags: 0", *node.fields.map { |field| + def <%= node.human %>(<%= ["source: default_source", "node_id: 0", "location: default_location", "flags: 0", *node.fields.map { |field| case field when Prism::Template::NodeField, Prism::Template::ConstantField "#{field.name}: default_node(source, location)" @@ -83,7 +85,7 @@ module Prism raise end }].join(", ") %>) - <%= node.name %>.new(<%= ["source", "location", "flags", *node.fields.map(&:name)].join(", ") %>) + <%= node.name %>.new(<%= ["source", "node_id", "location", "flags", *node.fields.map(&:name)].join(", ") %>) end <%- end -%> <%- flags.each do |flag| -%> diff --git a/templates/lib/prism/node.rb.erb b/templates/lib/prism/node.rb.erb index 8b6c54ef009..1cd0ce0ba07 100644 --- a/templates/lib/prism/node.rb.erb +++ b/templates/lib/prism/node.rb.erb @@ -6,6 +6,12 @@ module Prism attr_reader :source private :source + # A unique identifier for this node. This is used in a very specific + # use case where you want to keep around a reference to a node without + # having to keep around the syntax tree in memory. This unique identifier + # will be consistent across multiple parses of the same source code. + attr_reader :node_id + # A Location instance that represents the location of this node in the # source. def location @@ -212,8 +218,9 @@ module Prism <%- end -%> class <%= node.name -%> < Node # Initialize a new <%= node.name %> node. - def initialize(<%= ["source", "location", "flags", *node.fields.map(&:name)].join(", ") %>) + def initialize(<%= ["source", "node_id", "location", "flags", *node.fields.map(&:name)].join(", ") %>) @source = source + @node_id = node_id @location = location @flags = flags <%- node.fields.each do |field| -%> @@ -274,17 +281,17 @@ module Prism }.compact.join(", ") %>] #: Array[Prism::node | Location] end - # def copy: (<%= (["?location: Location", "?flags: Integer"] + node.fields.map { |field| "?#{field.name}: #{field.rbs_class}" }).join(", ") %>) -> <%= node.name %> - def copy(<%= (["location", "flags"] + node.fields.map(&:name)).map { |field| "#{field}: self.#{field}" }.join(", ") %>) - <%= node.name %>.new(<%= ["source", "location", "flags", *node.fields.map(&:name)].join(", ") %>) + # def copy: (<%= (["?node_id: Integer", "?location: Location", "?flags: Integer"] + node.fields.map { |field| "?#{field.name}: #{field.rbs_class}" }).join(", ") %>) -> <%= node.name %> + def copy(<%= (["node_id", "location", "flags"] + node.fields.map(&:name)).map { |field| "#{field}: self.#{field}" }.join(", ") %>) + <%= node.name %>.new(<%= ["source", "node_id", "location", "flags", *node.fields.map(&:name)].join(", ") %>) end # def deconstruct: () -> Array[nil | Node] alias deconstruct child_nodes - # def deconstruct_keys: (Array[Symbol] keys) -> { <%= (node.fields.map { |field| "#{field.name}: #{field.rbs_class}" } + ["location: Location"]).join(", ") %> } + # def deconstruct_keys: (Array[Symbol] keys) -> { <%= (["node_id: Integer", "location: Location"] + node.fields.map { |field| "#{field.name}: #{field.rbs_class}" }).join(", ") %> } def deconstruct_keys(keys) - { <%= (node.fields.map { |field| "#{field.name}: #{field.name}" } + ["location: location"]).join(", ") %> } + { <%= (["node_id: node_id", "location: location"] + node.fields.map { |field| "#{field.name}: #{field.name}" }).join(", ") %> } end <%- if (node_flags = node.flags) -%> <%- node_flags.values.each do |value| -%> diff --git a/templates/lib/prism/serialize.rb.erb b/templates/lib/prism/serialize.rb.erb index cc16c09fe70..fc01d9e4c7e 100644 --- a/templates/lib/prism/serialize.rb.erb +++ b/templates/lib/prism/serialize.rb.erb @@ -322,6 +322,7 @@ module Prism if RUBY_ENGINE == "ruby" def load_node type = io.getbyte + node_id = load_varuint location = load_location case type @@ -330,7 +331,7 @@ module Prism <%- if node.needs_serialized_length? -%> load_uint32 <%- end -%> - <%= node.name %>.new(<%= ["source", "location", "load_varuint", *node.fields.map { |field| + <%= node.name %>.new(<%= ["source", "node_id", "location", "load_varuint", *node.fields.map { |field| case field when Prism::Template::NodeField then "load_node" when Prism::Template::OptionalNodeField then "load_optional_node" @@ -362,11 +363,12 @@ module Prism nil, <%- nodes.each do |node| -%> -> { + node_id = load_varuint location = load_location <%- if node.needs_serialized_length? -%> load_uint32 <%- end -%> - <%= node.name %>.new(<%= ["source", "location", "load_varuint", *node.fields.map { |field| + <%= node.name %>.new(<%= ["source", "node_id", "location", "load_varuint", *node.fields.map { |field| case field when Prism::Template::NodeField then "load_node" when Prism::Template::OptionalNodeField then "load_optional_node" diff --git a/templates/src/serialize.c.erb b/templates/src/serialize.c.erb index 9c3ddecf25e..f62453e6998 100644 --- a/templates/src/serialize.c.erb +++ b/templates/src/serialize.c.erb @@ -74,6 +74,7 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) { size_t offset = buffer->length; + pm_buffer_append_varuint(buffer, node->node_id); pm_serialize_location(parser, &node->location, buffer); switch (PM_NODE_TYPE(node)) { diff --git a/test/prism/result/node_id_test.rb b/test/prism/result/node_id_test.rb new file mode 100644 index 00000000000..59b79bc5746 --- /dev/null +++ b/test/prism/result/node_id_test.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require_relative "../test_helper" + +module Prism + class NodeIdTest < TestCase + Fixture.each do |fixture| + define_method(fixture.test_name) { assert_node_ids(fixture.read) } + end + + private + + def assert_node_ids(source) + queue = [Prism.parse(source).value] + node_ids = [] + + while (node = queue.shift) + node_ids << node.node_id + queue.concat(node.compact_child_nodes) + end + + node_ids.sort! + refute_includes node_ids, 0 + assert_equal node_ids, node_ids.uniq + end + end +end From 86cf82794aa33e5741b9e8a4a1d9778d7e818991 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 3 Jul 2024 11:23:17 -0400 Subject: [PATCH 030/109] Various cleanup for initializers and typechecks --- .gitignore | 1 + gemfiles/typecheck/Gemfile | 2 +- gemfiles/typecheck/Gemfile.lock | 7 +- lib/prism/parse_result.rb | 1 + lib/prism/parse_result/errors.rb | 10 +- prism.gemspec | 1 + rbi/prism/dsl.rbi | 524 ++++++++++++++++++++++++ rust/ruby-prism/build.rs | 48 +-- sig/prism/_private/parse_result.rbs | 7 + sig/prism/parse_result.rbs | 2 + templates/java/org/prism/Nodes.java.erb | 11 +- templates/javascript/src/nodes.js.erb | 6 +- templates/lib/prism/dsl.rb.erb | 19 +- templates/rbi/prism/dsl.rbi.erb | 68 +++ templates/rbi/prism/node.rbi.erb | 36 +- templates/sig/prism/dsl.rbs.erb | 28 +- templates/sig/prism/node.rbs.erb | 22 +- templates/template.rb | 5 + test/prism/errors_test.rb | 8 +- test/prism/result/warnings_test.rb | 59 +-- 20 files changed, 772 insertions(+), 93 deletions(-) create mode 100644 rbi/prism/dsl.rbi create mode 100644 templates/rbi/prism/dsl.rbi.erb diff --git a/.gitignore b/.gitignore index dcd31e030d5..ccd0db280d4 100644 --- a/.gitignore +++ b/.gitignore @@ -65,6 +65,7 @@ out.svg /sig/prism/node.rbs /sig/prism/visitor.rbs /sig/prism/_private/dot_visitor.rbs +/rbi/prism/dsl.rb /rbi/prism/node.rbi /rbi/prism/visitor.rbi diff --git a/gemfiles/typecheck/Gemfile b/gemfiles/typecheck/Gemfile index 24594774a9d..f448096bb80 100644 --- a/gemfiles/typecheck/Gemfile +++ b/gemfiles/typecheck/Gemfile @@ -2,7 +2,7 @@ source "https://rubygems.org" -gemspec path: "../.." +# gemspec path: "../.." gem "minitest" gem "parser" diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index 190e5770c28..01202be12f9 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -1,8 +1,3 @@ -PATH - remote: ../.. - specs: - prism (0.30.0) - GEM remote: https://rubygems.org/ specs: @@ -42,6 +37,7 @@ GEM ast (~> 2.4.1) racc power_assert (2.0.3) + prism (0.30.0) racc (1.8.0) rainbow (3.1.1) rake (13.2.1) @@ -118,7 +114,6 @@ PLATFORMS DEPENDENCIES minitest parser - prism! rake rake-compiler rbs diff --git a/lib/prism/parse_result.rb b/lib/prism/parse_result.rb index ae572427077..df1d66f44cb 100644 --- a/lib/prism/parse_result.rb +++ b/lib/prism/parse_result.rb @@ -588,6 +588,7 @@ class ParseResult < Result autoload :Newlines, "prism/parse_result/newlines" private_constant :Comments + private_constant :Errors private_constant :Newlines # The syntax tree that was parsed from the source code. diff --git a/lib/prism/parse_result/errors.rb b/lib/prism/parse_result/errors.rb index 1eaeebee6e4..847a8442fed 100644 --- a/lib/prism/parse_result/errors.rb +++ b/lib/prism/parse_result/errors.rb @@ -32,19 +32,19 @@ def format io = StringIO.new source_lines.each.with_index(1) do |line, line_number| io.puts(line) - + (error_lines.delete(line_number) || []).each do |error| location = error.location - + case line_number when location.start_line io.print(" " * location.start_column + "^") - + if location.start_line == location.end_line if location.start_column != location.end_column io.print("~" * (location.end_column - location.start_column - 1)) end - + io.puts(" " + error.message) else io.puts("~" * (line.bytesize - location.start_column)) @@ -56,7 +56,7 @@ def format end end end - + io.puts io.string end diff --git a/prism.gemspec b/prism.gemspec index 750af194a83..08212318bc1 100644 --- a/prism.gemspec +++ b/prism.gemspec @@ -104,6 +104,7 @@ Gem::Specification.new do |spec| "prism.gemspec", "rbi/prism.rbi", "rbi/prism/compiler.rbi", + "rbi/prism/dsl.rbi", "rbi/prism/inspect_visitor.rbi", "rbi/prism/node_ext.rbi", "rbi/prism/node.rbi", diff --git a/rbi/prism/dsl.rbi b/rbi/prism/dsl.rbi new file mode 100644 index 00000000000..df96bb4d269 --- /dev/null +++ b/rbi/prism/dsl.rbi @@ -0,0 +1,524 @@ +# typed: strict + +=begin +This file is generated by the templates/template.rb script and should not be +modified manually. See templates/rbi/prism/dsl.rbi.erb +if you are looking to modify the template +=end + +module Prism::DSL + sig { params(string: String).returns(Prism::Source) } + def source(string); end + + sig { params(source: Prism::Source, start_offset: Integer, length: Integer).returns(Prism::Location) } + def location(source: default_source, start_offset: 0, length: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, new_name: Prism::Node, old_name: Prism::Node, keyword_loc: Prism::Location).returns(Prism::AliasGlobalVariableNode) } + def alias_global_variable_node(source: default_source, node_id: 0, location: default_location, flags: 0, new_name: default_node(source, location), old_name: default_node(source, location), keyword_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, new_name: Prism::Node, old_name: Prism::Node, keyword_loc: Prism::Location).returns(Prism::AliasMethodNode) } + def alias_method_node(source: default_source, node_id: 0, location: default_location, flags: 0, new_name: default_node(source, location), old_name: default_node(source, location), keyword_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, left: Prism::Node, right: Prism::Node, operator_loc: Prism::Location).returns(Prism::AlternationPatternNode) } + def alternation_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: default_node(source, location), right: default_node(source, location), operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, left: Prism::Node, right: Prism::Node, operator_loc: Prism::Location).returns(Prism::AndNode) } + def and_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: default_node(source, location), right: default_node(source, location), operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, arguments: T::Array[Prism::Node]).returns(Prism::ArgumentsNode) } + def arguments_node(source: default_source, node_id: 0, location: default_location, flags: 0, arguments: []); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, elements: T::Array[Prism::Node], opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::ArrayNode) } + def array_node(source: default_source, node_id: 0, location: default_location, flags: 0, elements: [], opening_loc: nil, closing_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(Prism::Node), requireds: T::Array[Prism::Node], rest: T.nilable(Prism::Node), posts: T::Array[Prism::Node], opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::ArrayPatternNode) } + def array_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, constant: nil, requireds: [], rest: nil, posts: [], opening_loc: nil, closing_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, key: Prism::Node, value: Prism::Node, operator_loc: T.nilable(Prism::Location)).returns(Prism::AssocNode) } + def assoc_node(source: default_source, node_id: 0, location: default_location, flags: 0, key: default_node(source, location), value: default_node(source, location), operator_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: T.nilable(Prism::Node), operator_loc: Prism::Location).returns(Prism::AssocSplatNode) } + def assoc_splat_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: nil, operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::BackReferenceReadNode) } + def back_reference_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, begin_keyword_loc: T.nilable(Prism::Location), statements: T.nilable(Prism::StatementsNode), rescue_clause: T.nilable(Prism::RescueNode), else_clause: T.nilable(Prism::ElseNode), ensure_clause: T.nilable(Prism::EnsureNode), end_keyword_loc: T.nilable(Prism::Location)).returns(Prism::BeginNode) } + def begin_node(source: default_source, node_id: 0, location: default_location, flags: 0, begin_keyword_loc: nil, statements: nil, rescue_clause: nil, else_clause: nil, ensure_clause: nil, end_keyword_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, expression: T.nilable(Prism::Node), operator_loc: Prism::Location).returns(Prism::BlockArgumentNode) } + def block_argument_node(source: default_source, node_id: 0, location: default_location, flags: 0, expression: nil, operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::BlockLocalVariableNode) } + def block_local_variable_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, locals: T::Array[Symbol], parameters: T.nilable(Prism::Node), body: T.nilable(Prism::Node), opening_loc: Prism::Location, closing_loc: Prism::Location).returns(Prism::BlockNode) } + def block_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], parameters: nil, body: nil, opening_loc: location, closing_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: T.nilable(Symbol), name_loc: T.nilable(Prism::Location), operator_loc: Prism::Location).returns(Prism::BlockParameterNode) } + def block_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: nil, name_loc: nil, operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, parameters: T.nilable(Prism::ParametersNode), locals: T::Array[Prism::BlockLocalVariableNode], opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::BlockParametersNode) } + def block_parameters_node(source: default_source, node_id: 0, location: default_location, flags: 0, parameters: nil, locals: [], opening_loc: nil, closing_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, arguments: T.nilable(Prism::ArgumentsNode), keyword_loc: Prism::Location).returns(Prism::BreakNode) } + def break_node(source: default_source, node_id: 0, location: default_location, flags: 0, arguments: nil, keyword_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), message_loc: T.nilable(Prism::Location), read_name: Symbol, write_name: Symbol, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::CallAndWriteNode) } + def call_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, message_loc: nil, read_name: :"", write_name: :"", operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), name: Symbol, message_loc: T.nilable(Prism::Location), opening_loc: T.nilable(Prism::Location), arguments: T.nilable(Prism::ArgumentsNode), closing_loc: T.nilable(Prism::Location), block: T.nilable(Prism::Node)).returns(Prism::CallNode) } + def call_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, name: :"", message_loc: nil, opening_loc: nil, arguments: nil, closing_loc: nil, block: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), message_loc: T.nilable(Prism::Location), read_name: Symbol, write_name: Symbol, binary_operator: Symbol, binary_operator_loc: Prism::Location, value: Prism::Node).returns(Prism::CallOperatorWriteNode) } + def call_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, message_loc: nil, read_name: :"", write_name: :"", binary_operator: :"", binary_operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), message_loc: T.nilable(Prism::Location), read_name: Symbol, write_name: Symbol, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::CallOrWriteNode) } + def call_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, message_loc: nil, read_name: :"", write_name: :"", operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: Prism::Node, call_operator_loc: Prism::Location, name: Symbol, message_loc: Prism::Location).returns(Prism::CallTargetNode) } + def call_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: default_node(source, location), call_operator_loc: location, name: :"", message_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: Prism::Node, target: Prism::Node, operator_loc: Prism::Location).returns(Prism::CapturePatternNode) } + def capture_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: default_node(source, location), target: default_node(source, location), operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, predicate: T.nilable(Prism::Node), conditions: T::Array[Prism::Node], consequent: T.nilable(Prism::ElseNode), case_keyword_loc: Prism::Location, end_keyword_loc: Prism::Location).returns(Prism::CaseMatchNode) } + def case_match_node(source: default_source, node_id: 0, location: default_location, flags: 0, predicate: nil, conditions: [], consequent: nil, case_keyword_loc: location, end_keyword_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, predicate: T.nilable(Prism::Node), conditions: T::Array[Prism::Node], consequent: T.nilable(Prism::ElseNode), case_keyword_loc: Prism::Location, end_keyword_loc: Prism::Location).returns(Prism::CaseNode) } + def case_node(source: default_source, node_id: 0, location: default_location, flags: 0, predicate: nil, conditions: [], consequent: nil, case_keyword_loc: location, end_keyword_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, locals: T::Array[Symbol], class_keyword_loc: Prism::Location, constant_path: Prism::Node, inheritance_operator_loc: T.nilable(Prism::Location), superclass: T.nilable(Prism::Node), body: T.nilable(Prism::Node), end_keyword_loc: Prism::Location, name: Symbol).returns(Prism::ClassNode) } + def class_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], class_keyword_loc: location, constant_path: default_node(source, location), inheritance_operator_loc: nil, superclass: nil, body: nil, end_keyword_loc: location, name: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ClassVariableAndWriteNode) } + def class_variable_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, binary_operator_loc: Prism::Location, value: Prism::Node, binary_operator: Symbol).returns(Prism::ClassVariableOperatorWriteNode) } + def class_variable_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, binary_operator_loc: location, value: default_node(source, location), binary_operator: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ClassVariableOrWriteNode) } + def class_variable_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::ClassVariableReadNode) } + def class_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::ClassVariableTargetNode) } + def class_variable_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, value: Prism::Node, operator_loc: Prism::Location).returns(Prism::ClassVariableWriteNode) } + def class_variable_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location), operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ConstantAndWriteNode) } + def constant_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, binary_operator_loc: Prism::Location, value: Prism::Node, binary_operator: Symbol).returns(Prism::ConstantOperatorWriteNode) } + def constant_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, binary_operator_loc: location, value: default_node(source, location), binary_operator: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ConstantOrWriteNode) } + def constant_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, target: Prism::ConstantPathNode, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ConstantPathAndWriteNode) } + def constant_path_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, target: constant_path_node(source: source), operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, parent: T.nilable(Prism::Node), name: T.nilable(Symbol), delimiter_loc: Prism::Location, name_loc: Prism::Location).returns(Prism::ConstantPathNode) } + def constant_path_node(source: default_source, node_id: 0, location: default_location, flags: 0, parent: nil, name: nil, delimiter_loc: location, name_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, target: Prism::ConstantPathNode, binary_operator_loc: Prism::Location, value: Prism::Node, binary_operator: Symbol).returns(Prism::ConstantPathOperatorWriteNode) } + def constant_path_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, target: constant_path_node(source: source), binary_operator_loc: location, value: default_node(source, location), binary_operator: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, target: Prism::ConstantPathNode, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ConstantPathOrWriteNode) } + def constant_path_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, target: constant_path_node(source: source), operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, parent: T.nilable(Prism::Node), name: T.nilable(Symbol), delimiter_loc: Prism::Location, name_loc: Prism::Location).returns(Prism::ConstantPathTargetNode) } + def constant_path_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, parent: nil, name: nil, delimiter_loc: location, name_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, target: Prism::ConstantPathNode, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ConstantPathWriteNode) } + def constant_path_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, target: constant_path_node(source: source), operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::ConstantReadNode) } + def constant_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::ConstantTargetNode) } + def constant_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, value: Prism::Node, operator_loc: Prism::Location).returns(Prism::ConstantWriteNode) } + def constant_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location), operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, receiver: T.nilable(Prism::Node), parameters: T.nilable(Prism::ParametersNode), body: T.nilable(Prism::Node), locals: T::Array[Symbol], def_keyword_loc: Prism::Location, operator_loc: T.nilable(Prism::Location), lparen_loc: T.nilable(Prism::Location), rparen_loc: T.nilable(Prism::Location), equal_loc: T.nilable(Prism::Location), end_keyword_loc: T.nilable(Prism::Location)).returns(Prism::DefNode) } + def def_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, receiver: nil, parameters: nil, body: nil, locals: [], def_keyword_loc: location, operator_loc: nil, lparen_loc: nil, rparen_loc: nil, equal_loc: nil, end_keyword_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, lparen_loc: T.nilable(Prism::Location), value: Prism::Node, rparen_loc: T.nilable(Prism::Location), keyword_loc: Prism::Location).returns(Prism::DefinedNode) } + def defined_node(source: default_source, node_id: 0, location: default_location, flags: 0, lparen_loc: nil, value: default_node(source, location), rparen_loc: nil, keyword_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, else_keyword_loc: Prism::Location, statements: T.nilable(Prism::StatementsNode), end_keyword_loc: T.nilable(Prism::Location)).returns(Prism::ElseNode) } + def else_node(source: default_source, node_id: 0, location: default_location, flags: 0, else_keyword_loc: location, statements: nil, end_keyword_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, statements: T.nilable(Prism::StatementsNode), closing_loc: Prism::Location).returns(Prism::EmbeddedStatementsNode) } + def embedded_statements_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, statements: nil, closing_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, operator_loc: Prism::Location, variable: Prism::Node).returns(Prism::EmbeddedVariableNode) } + def embedded_variable_node(source: default_source, node_id: 0, location: default_location, flags: 0, operator_loc: location, variable: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, ensure_keyword_loc: Prism::Location, statements: T.nilable(Prism::StatementsNode), end_keyword_loc: Prism::Location).returns(Prism::EnsureNode) } + def ensure_node(source: default_source, node_id: 0, location: default_location, flags: 0, ensure_keyword_loc: location, statements: nil, end_keyword_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::FalseNode) } + def false_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(Prism::Node), left: Prism::Node, requireds: T::Array[Prism::Node], right: Prism::Node, opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::FindPatternNode) } + def find_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, constant: nil, left: default_node(source, location), requireds: [], right: default_node(source, location), opening_loc: nil, closing_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, left: T.nilable(Prism::Node), right: T.nilable(Prism::Node), operator_loc: Prism::Location).returns(Prism::FlipFlopNode) } + def flip_flop_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: nil, right: nil, operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: Float).returns(Prism::FloatNode) } + def float_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: 0.0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, index: Prism::Node, collection: Prism::Node, statements: T.nilable(Prism::StatementsNode), for_keyword_loc: Prism::Location, in_keyword_loc: Prism::Location, do_keyword_loc: T.nilable(Prism::Location), end_keyword_loc: Prism::Location).returns(Prism::ForNode) } + def for_node(source: default_source, node_id: 0, location: default_location, flags: 0, index: default_node(source, location), collection: default_node(source, location), statements: nil, for_keyword_loc: location, in_keyword_loc: location, do_keyword_loc: nil, end_keyword_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::ForwardingArgumentsNode) } + def forwarding_arguments_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::ForwardingParameterNode) } + def forwarding_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, block: T.nilable(Prism::BlockNode)).returns(Prism::ForwardingSuperNode) } + def forwarding_super_node(source: default_source, node_id: 0, location: default_location, flags: 0, block: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::GlobalVariableAndWriteNode) } + def global_variable_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, binary_operator_loc: Prism::Location, value: Prism::Node, binary_operator: Symbol).returns(Prism::GlobalVariableOperatorWriteNode) } + def global_variable_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, binary_operator_loc: location, value: default_node(source, location), binary_operator: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::GlobalVariableOrWriteNode) } + def global_variable_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::GlobalVariableReadNode) } + def global_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::GlobalVariableTargetNode) } + def global_variable_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, value: Prism::Node, operator_loc: Prism::Location).returns(Prism::GlobalVariableWriteNode) } + def global_variable_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location), operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, elements: T::Array[T.any(Prism::AssocNode, Prism::AssocSplatNode)], closing_loc: Prism::Location).returns(Prism::HashNode) } + def hash_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, elements: [], closing_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(Prism::Node), elements: T::Array[Prism::AssocNode], rest: T.nilable(T.any(Prism::AssocSplatNode, Prism::NoKeywordsParameterNode)), opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::HashPatternNode) } + def hash_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, constant: nil, elements: [], rest: nil, opening_loc: nil, closing_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, if_keyword_loc: T.nilable(Prism::Location), predicate: Prism::Node, then_keyword_loc: T.nilable(Prism::Location), statements: T.nilable(Prism::StatementsNode), consequent: T.nilable(Prism::Node), end_keyword_loc: T.nilable(Prism::Location)).returns(Prism::IfNode) } + def if_node(source: default_source, node_id: 0, location: default_location, flags: 0, if_keyword_loc: nil, predicate: default_node(source, location), then_keyword_loc: nil, statements: nil, consequent: nil, end_keyword_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, numeric: T.any(Prism::FloatNode, Prism::IntegerNode, Prism::RationalNode)).returns(Prism::ImaginaryNode) } + def imaginary_node(source: default_source, node_id: 0, location: default_location, flags: 0, numeric: float_node(source: source)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: Prism::Node).returns(Prism::ImplicitNode) } + def implicit_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::ImplicitRestNode) } + def implicit_rest_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, pattern: Prism::Node, statements: T.nilable(Prism::StatementsNode), in_loc: Prism::Location, then_loc: T.nilable(Prism::Location)).returns(Prism::InNode) } + def in_node(source: default_source, node_id: 0, location: default_location, flags: 0, pattern: default_node(source, location), statements: nil, in_loc: location, then_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), opening_loc: Prism::Location, arguments: T.nilable(Prism::ArgumentsNode), closing_loc: Prism::Location, block: T.nilable(Prism::Node), operator_loc: Prism::Location, value: Prism::Node).returns(Prism::IndexAndWriteNode) } + def index_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, opening_loc: location, arguments: nil, closing_loc: location, block: nil, operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), opening_loc: Prism::Location, arguments: T.nilable(Prism::ArgumentsNode), closing_loc: Prism::Location, block: T.nilable(Prism::Node), binary_operator: Symbol, binary_operator_loc: Prism::Location, value: Prism::Node).returns(Prism::IndexOperatorWriteNode) } + def index_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, opening_loc: location, arguments: nil, closing_loc: location, block: nil, binary_operator: :"", binary_operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), opening_loc: Prism::Location, arguments: T.nilable(Prism::ArgumentsNode), closing_loc: Prism::Location, block: T.nilable(Prism::Node), operator_loc: Prism::Location, value: Prism::Node).returns(Prism::IndexOrWriteNode) } + def index_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, opening_loc: location, arguments: nil, closing_loc: location, block: nil, operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: Prism::Node, opening_loc: Prism::Location, arguments: T.nilable(Prism::ArgumentsNode), closing_loc: Prism::Location, block: T.nilable(Prism::Node)).returns(Prism::IndexTargetNode) } + def index_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: default_node(source, location), opening_loc: location, arguments: nil, closing_loc: location, block: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::InstanceVariableAndWriteNode) } + def instance_variable_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, binary_operator_loc: Prism::Location, value: Prism::Node, binary_operator: Symbol).returns(Prism::InstanceVariableOperatorWriteNode) } + def instance_variable_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, binary_operator_loc: location, value: default_node(source, location), binary_operator: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::InstanceVariableOrWriteNode) } + def instance_variable_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::InstanceVariableReadNode) } + def instance_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::InstanceVariableTargetNode) } + def instance_variable_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, value: Prism::Node, operator_loc: Prism::Location).returns(Prism::InstanceVariableWriteNode) } + def instance_variable_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location), operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: Integer).returns(Prism::IntegerNode) } + def integer_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode)], closing_loc: Prism::Location).returns(Prism::InterpolatedMatchLastLineNode) } + def interpolated_match_last_line_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, parts: [], closing_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode)], closing_loc: Prism::Location).returns(Prism::InterpolatedRegularExpressionNode) } + def interpolated_regular_expression_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, parts: [], closing_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode, Prism::InterpolatedStringNode)], closing_loc: T.nilable(Prism::Location)).returns(Prism::InterpolatedStringNode) } + def interpolated_string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: nil, parts: [], closing_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode)], closing_loc: T.nilable(Prism::Location)).returns(Prism::InterpolatedSymbolNode) } + def interpolated_symbol_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: nil, parts: [], closing_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode)], closing_loc: Prism::Location).returns(Prism::InterpolatedXStringNode) } + def interpolated_x_string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, parts: [], closing_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::ItLocalVariableReadNode) } + def it_local_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::ItParametersNode) } + def it_parameters_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, elements: T::Array[T.any(Prism::AssocNode, Prism::AssocSplatNode)]).returns(Prism::KeywordHashNode) } + def keyword_hash_node(source: default_source, node_id: 0, location: default_location, flags: 0, elements: []); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: T.nilable(Symbol), name_loc: T.nilable(Prism::Location), operator_loc: Prism::Location).returns(Prism::KeywordRestParameterNode) } + def keyword_rest_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: nil, name_loc: nil, operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, locals: T::Array[Symbol], operator_loc: Prism::Location, opening_loc: Prism::Location, closing_loc: Prism::Location, parameters: T.nilable(Prism::Node), body: T.nilable(Prism::Node)).returns(Prism::LambdaNode) } + def lambda_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], operator_loc: location, opening_loc: location, closing_loc: location, parameters: nil, body: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node, name: Symbol, depth: Integer).returns(Prism::LocalVariableAndWriteNode) } + def local_variable_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name_loc: location, operator_loc: location, value: default_node(source, location), name: :"", depth: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name_loc: Prism::Location, binary_operator_loc: Prism::Location, value: Prism::Node, name: Symbol, binary_operator: Symbol, depth: Integer).returns(Prism::LocalVariableOperatorWriteNode) } + def local_variable_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name_loc: location, binary_operator_loc: location, value: default_node(source, location), name: :"", binary_operator: :"", depth: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node, name: Symbol, depth: Integer).returns(Prism::LocalVariableOrWriteNode) } + def local_variable_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name_loc: location, operator_loc: location, value: default_node(source, location), name: :"", depth: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, depth: Integer).returns(Prism::LocalVariableReadNode) } + def local_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", depth: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, depth: Integer).returns(Prism::LocalVariableTargetNode) } + def local_variable_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", depth: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, depth: Integer, name_loc: Prism::Location, value: Prism::Node, operator_loc: Prism::Location).returns(Prism::LocalVariableWriteNode) } + def local_variable_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", depth: 0, name_loc: location, value: default_node(source, location), operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, content_loc: Prism::Location, closing_loc: Prism::Location, unescaped: String).returns(Prism::MatchLastLineNode) } + def match_last_line_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, content_loc: location, closing_loc: location, unescaped: ""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: Prism::Node, pattern: Prism::Node, operator_loc: Prism::Location).returns(Prism::MatchPredicateNode) } + def match_predicate_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: default_node(source, location), pattern: default_node(source, location), operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: Prism::Node, pattern: Prism::Node, operator_loc: Prism::Location).returns(Prism::MatchRequiredNode) } + def match_required_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: default_node(source, location), pattern: default_node(source, location), operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, call: Prism::CallNode, targets: T::Array[Prism::LocalVariableTargetNode]).returns(Prism::MatchWriteNode) } + def match_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, call: call_node(source: source), targets: []); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::MissingNode) } + def missing_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, locals: T::Array[Symbol], module_keyword_loc: Prism::Location, constant_path: Prism::Node, body: T.nilable(Prism::Node), end_keyword_loc: Prism::Location, name: Symbol).returns(Prism::ModuleNode) } + def module_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], module_keyword_loc: location, constant_path: default_node(source, location), body: nil, end_keyword_loc: location, name: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, lefts: T::Array[T.any(Prism::LocalVariableTargetNode, Prism::InstanceVariableTargetNode, Prism::ClassVariableTargetNode, Prism::GlobalVariableTargetNode, Prism::ConstantTargetNode, Prism::ConstantPathTargetNode, Prism::CallTargetNode, Prism::IndexTargetNode, Prism::MultiTargetNode, Prism::RequiredParameterNode, Prism::BackReferenceReadNode, Prism::NumberedReferenceReadNode)], rest: T.nilable(T.any(Prism::ImplicitRestNode, Prism::SplatNode)), rights: T::Array[T.any(Prism::LocalVariableTargetNode, Prism::InstanceVariableTargetNode, Prism::ClassVariableTargetNode, Prism::GlobalVariableTargetNode, Prism::ConstantTargetNode, Prism::ConstantPathTargetNode, Prism::CallTargetNode, Prism::IndexTargetNode, Prism::MultiTargetNode, Prism::RequiredParameterNode, Prism::BackReferenceReadNode)], lparen_loc: T.nilable(Prism::Location), rparen_loc: T.nilable(Prism::Location)).returns(Prism::MultiTargetNode) } + def multi_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, lefts: [], rest: nil, rights: [], lparen_loc: nil, rparen_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, lefts: T::Array[T.any(Prism::LocalVariableTargetNode, Prism::InstanceVariableTargetNode, Prism::ClassVariableTargetNode, Prism::GlobalVariableTargetNode, Prism::ConstantTargetNode, Prism::ConstantPathTargetNode, Prism::CallTargetNode, Prism::IndexTargetNode, Prism::MultiTargetNode)], rest: T.nilable(T.any(Prism::ImplicitRestNode, Prism::SplatNode)), rights: T::Array[T.any(Prism::LocalVariableTargetNode, Prism::InstanceVariableTargetNode, Prism::ClassVariableTargetNode, Prism::GlobalVariableTargetNode, Prism::ConstantTargetNode, Prism::ConstantPathTargetNode, Prism::CallTargetNode, Prism::IndexTargetNode, Prism::MultiTargetNode)], lparen_loc: T.nilable(Prism::Location), rparen_loc: T.nilable(Prism::Location), operator_loc: Prism::Location, value: Prism::Node).returns(Prism::MultiWriteNode) } + def multi_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, lefts: [], rest: nil, rights: [], lparen_loc: nil, rparen_loc: nil, operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, arguments: T.nilable(Prism::ArgumentsNode), keyword_loc: Prism::Location).returns(Prism::NextNode) } + def next_node(source: default_source, node_id: 0, location: default_location, flags: 0, arguments: nil, keyword_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::NilNode) } + def nil_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, operator_loc: Prism::Location, keyword_loc: Prism::Location).returns(Prism::NoKeywordsParameterNode) } + def no_keywords_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, operator_loc: location, keyword_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, maximum: Integer).returns(Prism::NumberedParametersNode) } + def numbered_parameters_node(source: default_source, node_id: 0, location: default_location, flags: 0, maximum: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, number: Integer).returns(Prism::NumberedReferenceReadNode) } + def numbered_reference_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, number: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, value: Prism::Node).returns(Prism::OptionalKeywordParameterNode) } + def optional_keyword_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::OptionalParameterNode) } + def optional_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, left: Prism::Node, right: Prism::Node, operator_loc: Prism::Location).returns(Prism::OrNode) } + def or_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: default_node(source, location), right: default_node(source, location), operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, requireds: T::Array[T.any(Prism::RequiredParameterNode, Prism::MultiTargetNode)], optionals: T::Array[Prism::OptionalParameterNode], rest: T.nilable(T.any(Prism::RestParameterNode, Prism::ImplicitRestNode)), posts: T::Array[T.any(Prism::RequiredParameterNode, Prism::MultiTargetNode, Prism::KeywordRestParameterNode, Prism::NoKeywordsParameterNode, Prism::ForwardingParameterNode)], keywords: T::Array[T.any(Prism::RequiredKeywordParameterNode, Prism::OptionalKeywordParameterNode)], keyword_rest: T.nilable(T.any(Prism::KeywordRestParameterNode, Prism::ForwardingParameterNode, Prism::NoKeywordsParameterNode)), block: T.nilable(Prism::BlockParameterNode)).returns(Prism::ParametersNode) } + def parameters_node(source: default_source, node_id: 0, location: default_location, flags: 0, requireds: [], optionals: [], rest: nil, posts: [], keywords: [], keyword_rest: nil, block: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, body: T.nilable(Prism::Node), opening_loc: Prism::Location, closing_loc: Prism::Location).returns(Prism::ParenthesesNode) } + def parentheses_node(source: default_source, node_id: 0, location: default_location, flags: 0, body: nil, opening_loc: location, closing_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, expression: Prism::Node, operator_loc: Prism::Location, lparen_loc: Prism::Location, rparen_loc: Prism::Location).returns(Prism::PinnedExpressionNode) } + def pinned_expression_node(source: default_source, node_id: 0, location: default_location, flags: 0, expression: default_node(source, location), operator_loc: location, lparen_loc: location, rparen_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, variable: Prism::Node, operator_loc: Prism::Location).returns(Prism::PinnedVariableNode) } + def pinned_variable_node(source: default_source, node_id: 0, location: default_location, flags: 0, variable: default_node(source, location), operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, statements: T.nilable(Prism::StatementsNode), keyword_loc: Prism::Location, opening_loc: Prism::Location, closing_loc: Prism::Location).returns(Prism::PostExecutionNode) } + def post_execution_node(source: default_source, node_id: 0, location: default_location, flags: 0, statements: nil, keyword_loc: location, opening_loc: location, closing_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, statements: T.nilable(Prism::StatementsNode), keyword_loc: Prism::Location, opening_loc: Prism::Location, closing_loc: Prism::Location).returns(Prism::PreExecutionNode) } + def pre_execution_node(source: default_source, node_id: 0, location: default_location, flags: 0, statements: nil, keyword_loc: location, opening_loc: location, closing_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, locals: T::Array[Symbol], statements: Prism::StatementsNode).returns(Prism::ProgramNode) } + def program_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], statements: statements_node(source: source)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, left: T.nilable(Prism::Node), right: T.nilable(Prism::Node), operator_loc: Prism::Location).returns(Prism::RangeNode) } + def range_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: nil, right: nil, operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, numerator: Integer, denominator: Integer).returns(Prism::RationalNode) } + def rational_node(source: default_source, node_id: 0, location: default_location, flags: 0, numerator: 0, denominator: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::RedoNode) } + def redo_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, content_loc: Prism::Location, closing_loc: Prism::Location, unescaped: String).returns(Prism::RegularExpressionNode) } + def regular_expression_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, content_loc: location, closing_loc: location, unescaped: ""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location).returns(Prism::RequiredKeywordParameterNode) } + def required_keyword_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::RequiredParameterNode) } + def required_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, expression: Prism::Node, keyword_loc: Prism::Location, rescue_expression: Prism::Node).returns(Prism::RescueModifierNode) } + def rescue_modifier_node(source: default_source, node_id: 0, location: default_location, flags: 0, expression: default_node(source, location), keyword_loc: location, rescue_expression: default_node(source, location)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, exceptions: T::Array[Prism::Node], operator_loc: T.nilable(Prism::Location), reference: T.nilable(Prism::Node), statements: T.nilable(Prism::StatementsNode), consequent: T.nilable(Prism::RescueNode)).returns(Prism::RescueNode) } + def rescue_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, exceptions: [], operator_loc: nil, reference: nil, statements: nil, consequent: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: T.nilable(Symbol), name_loc: T.nilable(Prism::Location), operator_loc: Prism::Location).returns(Prism::RestParameterNode) } + def rest_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: nil, name_loc: nil, operator_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::RetryNode) } + def retry_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, arguments: T.nilable(Prism::ArgumentsNode)).returns(Prism::ReturnNode) } + def return_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, arguments: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::SelfNode) } + def self_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, write: T.any(Prism::ConstantWriteNode, Prism::ConstantAndWriteNode, Prism::ConstantOrWriteNode, Prism::ConstantOperatorWriteNode, Prism::ConstantPathWriteNode, Prism::ConstantPathAndWriteNode, Prism::ConstantPathOrWriteNode, Prism::ConstantPathOperatorWriteNode)).returns(Prism::ShareableConstantNode) } + def shareable_constant_node(source: default_source, node_id: 0, location: default_location, flags: 0, write: constant_write_node(source: source)); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, locals: T::Array[Symbol], class_keyword_loc: Prism::Location, operator_loc: Prism::Location, expression: Prism::Node, body: T.nilable(Prism::Node), end_keyword_loc: Prism::Location).returns(Prism::SingletonClassNode) } + def singleton_class_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], class_keyword_loc: location, operator_loc: location, expression: default_node(source, location), body: nil, end_keyword_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::SourceEncodingNode) } + def source_encoding_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, filepath: String).returns(Prism::SourceFileNode) } + def source_file_node(source: default_source, node_id: 0, location: default_location, flags: 0, filepath: ""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::SourceLineNode) } + def source_line_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, operator_loc: Prism::Location, expression: T.nilable(Prism::Node)).returns(Prism::SplatNode) } + def splat_node(source: default_source, node_id: 0, location: default_location, flags: 0, operator_loc: location, expression: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, body: T::Array[Prism::Node]).returns(Prism::StatementsNode) } + def statements_node(source: default_source, node_id: 0, location: default_location, flags: 0, body: []); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), content_loc: Prism::Location, closing_loc: T.nilable(Prism::Location), unescaped: String).returns(Prism::StringNode) } + def string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: nil, content_loc: location, closing_loc: nil, unescaped: ""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, lparen_loc: T.nilable(Prism::Location), arguments: T.nilable(Prism::ArgumentsNode), rparen_loc: T.nilable(Prism::Location), block: T.nilable(Prism::Node)).returns(Prism::SuperNode) } + def super_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, lparen_loc: nil, arguments: nil, rparen_loc: nil, block: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), value_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location), unescaped: String).returns(Prism::SymbolNode) } + def symbol_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: nil, value_loc: nil, closing_loc: nil, unescaped: ""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::TrueNode) } + def true_node(source: default_source, node_id: 0, location: default_location, flags: 0); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, names: T::Array[T.any(Prism::SymbolNode, Prism::InterpolatedSymbolNode)], keyword_loc: Prism::Location).returns(Prism::UndefNode) } + def undef_node(source: default_source, node_id: 0, location: default_location, flags: 0, names: [], keyword_loc: location); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, predicate: Prism::Node, then_keyword_loc: T.nilable(Prism::Location), statements: T.nilable(Prism::StatementsNode), consequent: T.nilable(Prism::ElseNode), end_keyword_loc: T.nilable(Prism::Location)).returns(Prism::UnlessNode) } + def unless_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, predicate: default_node(source, location), then_keyword_loc: nil, statements: nil, consequent: nil, end_keyword_loc: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).returns(Prism::UntilNode) } + def until_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, closing_loc: nil, predicate: default_node(source, location), statements: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, conditions: T::Array[Prism::Node], then_keyword_loc: T.nilable(Prism::Location), statements: T.nilable(Prism::StatementsNode)).returns(Prism::WhenNode) } + def when_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, conditions: [], then_keyword_loc: nil, statements: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).returns(Prism::WhileNode) } + def while_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, closing_loc: nil, predicate: default_node(source, location), statements: nil); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, content_loc: Prism::Location, closing_loc: Prism::Location, unescaped: String).returns(Prism::XStringNode) } + def x_string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, content_loc: location, closing_loc: location, unescaped: ""); end + + sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, lparen_loc: T.nilable(Prism::Location), arguments: T.nilable(Prism::ArgumentsNode), rparen_loc: T.nilable(Prism::Location)).returns(Prism::YieldNode) } + def yield_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, lparen_loc: nil, arguments: nil, rparen_loc: nil); end + + sig { params(name: Symbol).returns(Integer) } + def arguments_node_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def array_node_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def call_node_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def encoding_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def integer_base_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def interpolated_string_node_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def keyword_hash_node_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def loop_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def parameter_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def range_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def regular_expression_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def return_node_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def shareable_constant_node_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def string_flag(name); end + + sig { params(name: Symbol).returns(Integer) } + def symbol_flag(name); end + + private + + sig { returns(Prism::Source) } + def default_source; end + + sig { returns(Prism::Location) } + def default_location; end + + sig { params(source: Prism::Source, location: Prism::Location).returns(Prism::Node) } + def default_node(source, location); end +end diff --git a/rust/ruby-prism/build.rs b/rust/ruby-prism/build.rs index 958b658191c..f1f1cb696dc 100644 --- a/rust/ruby-prism/build.rs +++ b/rust/ruby-prism/build.rs @@ -40,9 +40,6 @@ enum NodeFieldType { #[serde(rename = "uint32")] UInt32, - #[serde(rename = "flags")] - Flags, - #[serde(rename = "integer")] Integer, @@ -85,6 +82,8 @@ struct Flags { struct Node { name: String, + flags: Option, + #[serde(default)] fields: Vec, @@ -235,6 +234,28 @@ fn write_node(file: &mut File, flags: &[Flags], node: &Node) -> Result<(), Box pm_node_flags_t {{")?; + writeln!(file, " unsafe {{ (*self.pointer).base.flags }}")?; + writeln!(file, " }}")?; + + if let Some(kind) = &node.flags { + let our_flags = flags.iter().filter(|f| &f.name == kind).collect::>(); + assert!(our_flags.len() == 1); + + for flag in our_flags { + for value in &flag.values { + writeln!(file)?; + writeln!(file, " /// {}", value.comment)?; + writeln!(file, " #[must_use]")?; + writeln!(file, " pub fn {}(&self) -> bool {{", accessor_func_name(&value.name))?; + writeln!(file, " (self.flags() & {}) != 0", enum_const_name(&flag.name, &value.name))?; + writeln!(file, " }}")?; + } + } + } for field in &node.fields { writeln!(file)?; @@ -335,27 +356,6 @@ fn write_node(file: &mut File, flags: &[Flags], node: &Node) -> Result<(), Box { - let Some(NodeFieldKind::Concrete(kind)) = &field.kind else { - panic!("Flag fields must have a concrete kind"); - }; - let our_flags = flags.iter().filter(|f| &f.name == kind).collect::>(); - assert!(our_flags.len() == 1); - - writeln!(file, " fn {}(&self) -> pm_node_flags_t {{", field.name)?; - writeln!(file, " unsafe {{ (*self.pointer).base.flags }}")?; - writeln!(file, " }}")?; - - for flag in our_flags { - for value in &flag.values { - writeln!(file, " /// {}", value.comment)?; - writeln!(file, " #[must_use]")?; - writeln!(file, " pub fn {}(&self) -> bool {{", accessor_func_name(&value.name))?; - writeln!(file, " (self.{}() & {}) != 0", field.name, enum_const_name(&flag.name, &value.name))?; - writeln!(file, " }}")?; - } - } - }, NodeFieldType::Integer => { writeln!(file, " pub fn {}(&self) -> Integer<'pr> {{", field.name)?; writeln!(file, " Integer::new(unsafe {{ &(*self.pointer).{} }})", field.name)?; diff --git a/sig/prism/_private/parse_result.rbs b/sig/prism/_private/parse_result.rbs index 9a1eb0ac1c9..62e0cdc9177 100644 --- a/sig/prism/_private/parse_result.rbs +++ b/sig/prism/_private/parse_result.rbs @@ -49,6 +49,13 @@ module Prism def nearest_targets: (Prism::node, comment) -> (untyped | ::Array[untyped]) end + class Errors + attr_reader parse_result: ParseResult + + def initialize: (ParseResult parse_result) -> void + def format: () -> String + end + class Newlines < Visitor @newline_marked: Array[bool] diff --git a/sig/prism/parse_result.rbs b/sig/prism/parse_result.rbs index 3487d5412ca..d5b9767a01b 100644 --- a/sig/prism/parse_result.rbs +++ b/sig/prism/parse_result.rbs @@ -17,6 +17,8 @@ module Prism def character_column: (Integer byte_offset) -> Integer def code_units_offset: (Integer byte_offset, Encoding encoding) -> Integer def code_units_column: (Integer byte_offset, Encoding encoding) -> Integer + + def self.for: (String source) -> Source end class ASCIISource < Source diff --git a/templates/java/org/prism/Nodes.java.erb b/templates/java/org/prism/Nodes.java.erb index 7389e70ef06..48202163956 100644 --- a/templates/java/org/prism/Nodes.java.erb +++ b/templates/java/org/prism/Nodes.java.erb @@ -95,12 +95,14 @@ public abstract class Nodes { public final int nodeId; public final int startOffset; public final int length; + protected final short flags; private boolean newLineFlag = false; - public Node(int nodeId, int startOffset, int length) { + public Node(int nodeId, int startOffset, int length, short flags) { this.nodeId = nodeId; this.startOffset = startOffset; this.length = length; + this.flags = flags; } public final int endOffset() { @@ -228,11 +230,10 @@ public abstract class Nodes { params.concat(node.semantic_fields.map { |field| "#{field.java_type} #{field.name}" }) -%> public <%= node.name -%>(<%= params.join(", ") %>) { - super(nodeId, startOffset, length); + super(nodeId, startOffset, length, flags); <%- if node.needs_serialized_length? -%> this.serializedLength = serializedLength; <%- end -%> - this.flags = flags; <%- node.semantic_fields.each do |field| -%> this.<%= field.name %> = <%= field.name %>; <%- end -%> @@ -242,7 +243,7 @@ public abstract class Nodes { <%- node_flags.values.each do |value| -%> public boolean is<%= value.camelcase %>() { - return <%= node_flags.name %>.is<%= value.camelcase %>(this.<%= node_flags.name %>); + return <%= node_flags.name %>.is<%= value.camelcase %>(flags); } <%- end -%> <%- end -%> @@ -353,7 +354,7 @@ public abstract class Nodes { builder.append(nextNextIndent).append('"').append(constant).append('"').append('\n'); } <%- when Prism::Template::Flags -%> - builder.append(this.flags); + builder.append(flags); builder.append('\n'); <%- when Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::IntegerField, Prism::Template::DoubleField -%> builder.append(this.<%= field.name %>); diff --git a/templates/javascript/src/nodes.js.erb b/templates/javascript/src/nodes.js.erb index 94d972a9b69..2c1604bf8ea 100644 --- a/templates/javascript/src/nodes.js.erb +++ b/templates/javascript/src/nodes.js.erb @@ -32,7 +32,7 @@ import * as visitors from "./visitor.js" * <%= flag.comment %> */ const <%= flag.name %> = { -<%- flag.values.each_with_index do |value, index| -%> +<%- flag.values.each.with_index(2) do |value, index| -%> <%= value.name %>: 1 << <%= index %>, <%- end -%> }; @@ -82,10 +82,12 @@ export class <%= node.name -%> { /** * Construct a new <%= node.name %>. * + * @param {number} nodeID + * @param {Location} location + * @param {number} flags <%- node.fields.each do |field| -%> * @param {<%= jstype(field) %>} <%= prop(field) %> <%- end -%> - * @param {Location} location */ constructor(<%= ["nodeID", "location", "flags", *node.fields.map { |field| prop(field) }].join(", ") %>) { this.nodeID = nodeID; diff --git a/templates/lib/prism/dsl.rb.erb b/templates/lib/prism/dsl.rb.erb index d004ffb25b2..f0dac2a4f0d 100644 --- a/templates/lib/prism/dsl.rb.erb +++ b/templates/lib/prism/dsl.rb.erb @@ -69,8 +69,15 @@ module Prism # Create a new <%= node.name %> node. def <%= node.human %>(<%= ["source: default_source", "node_id: 0", "location: default_location", "flags: 0", *node.fields.map { |field| case field - when Prism::Template::NodeField, Prism::Template::ConstantField - "#{field.name}: default_node(source, location)" + when Prism::Template::NodeField + if !field.kind? + "#{field.name}: default_node(source, location)" + else + kind = field.specific_kind || field.union_kind.first + "#{field.name}: #{kind.gsub(/(?<=.)[A-Z]/, "_\\0").downcase}(source: source)" + end + when Prism::Template::ConstantField + "#{field.name}: :\"\"" when Prism::Template::OptionalNodeField, Prism::Template::OptionalConstantField, Prism::Template::OptionalLocationField "#{field.name}: nil" when Prism::Template::NodeListField, Prism::Template::ConstantListField @@ -79,8 +86,10 @@ module Prism "#{field.name}: \"\"" when Prism::Template::LocationField "#{field.name}: location" - when Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::IntegerField, Prism::Template::DoubleField + when Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::IntegerField "#{field.name}: 0" + when Prism::Template::DoubleField + "#{field.name}: 0.0" else raise end @@ -96,7 +105,7 @@ module Prism <%- flag.values.each do |value| -%> when :<%= value.name.downcase %> then <%= flag.name %>::<%= value.name %> <%- end -%> - else raise ArgumentError, "invalid <%= flag.name %> flag: #{name.inspect}" + else Kernel.raise ArgumentError, "invalid <%= flag.name %> flag: #{name.inspect}" end end <%- end -%> @@ -118,7 +127,7 @@ module Prism # The default node that gets attached to nodes if no node is specified for a # required node field. def default_node(source, location) - MissingNode.new(source, location) + MissingNode.new(source, -1, location, 0) end end end diff --git a/templates/rbi/prism/dsl.rbi.erb b/templates/rbi/prism/dsl.rbi.erb new file mode 100644 index 00000000000..4f31af3710e --- /dev/null +++ b/templates/rbi/prism/dsl.rbi.erb @@ -0,0 +1,68 @@ +module Prism::DSL + sig { params(string: String).returns(Prism::Source) } + def source(string); end + + sig { params(source: Prism::Source, start_offset: Integer, length: Integer).returns(Prism::Location) } + def location(source: default_source, start_offset: 0, length: 0); end + <%- nodes.each do |node| -%> + <%- + params = [ + ["source", "default_source", "Prism::Source"], + ["node_id", "0", "Integer"], + ["location", "default_location", "Prism::Location"], + ["flags", "0", "Integer"] + ].concat(node.fields.map { |field| + case field + when Prism::Template::NodeField + if !field.kind? + [field.name, "default_node(source, location)", field.rbi_class] + else + kind = field.specific_kind || field.union_kind.first + [field.name, %Q{#{kind.gsub(/(?<=.)[A-Z]/, "_\\0").downcase}(source: source)}, field.rbi_class] + end + when Prism::Template::OptionalNodeField + [field.name, "nil", field.rbi_class] + when Prism::Template::NodeListField + [field.name, "[]", field.rbi_class] + when Prism::Template::ConstantField + [field.name, ":\"\"", field.rbi_class] + when Prism::Template::OptionalConstantField + [field.name, "nil", field.rbi_class] + when Prism::Template::ConstantListField + [field.name, "[]", field.rbi_class] + when Prism::Template::StringField + [field.name, "\"\"", field.rbi_class] + when Prism::Template::LocationField + [field.name, "location", field.rbi_class] + when Prism::Template::OptionalLocationField + [field.name, "nil", field.rbi_class] + when Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::IntegerField + [field.name, "0", field.rbi_class] + when Prism::Template::DoubleField + [field.name, "0.0", field.rbi_class] + else + raise + end + }) + -%> + + sig { params(<%= params.map { |(name, _, type)| "#{name}: #{type}" }.join(", ") %>).returns(Prism::<%= node.name %>) } + def <%= node.human %>(<%= params.map { |(name, default, _)| "#{name}: #{default}" }.join(", ") %>); end + <%- end -%> + <%- flags.each do |flag| -%> + + sig { params(name: Symbol).returns(Integer) } + def <%= flag.human.chomp("s") %>(name); end + <%- end -%> + + private + + sig { returns(Prism::Source) } + def default_source; end + + sig { returns(Prism::Location) } + def default_location; end + + sig { params(source: Prism::Source, location: Prism::Location).returns(Prism::Node) } + def default_node(source, location); end +end diff --git a/templates/rbi/prism/node.rbi.erb b/templates/rbi/prism/node.rbi.erb index 07c31ea95aa..fb7a6eec9a8 100644 --- a/templates/rbi/prism/node.rbi.erb +++ b/templates/rbi/prism/node.rbi.erb @@ -4,9 +4,21 @@ class Prism::Node sig { returns(Prism::Source) } def source; end + sig { returns(Integer) } + def node_id; end + sig { returns(Prism::Location) } def location; end + sig{ returns(Integer) } + def flags; end + + sig { returns(T::Boolean) } + def newline?; end + + sig { returns(T::Boolean) } + def static_literal?; end + sig { returns(Integer) } def start_offset; end @@ -34,6 +46,9 @@ class Prism::Node sig { params(line: Integer, column: Integer).returns(T::Array[Prism::Node]) } def tunnel(line, column); end + sig { params(block: T.proc.params(node: Prism::Node).returns(T::Boolean)).returns(T.nilable(Prism::Node)) } + def breadth_first_search(&block); end + sig { abstract.params(visitor: Prism::Visitor).returns(T.untyped) } def accept(visitor); end @@ -64,8 +79,6 @@ end #<%= line %> <%- end -%> class Prism::<%= node.name -%> < Prism::Node - sig{ returns(Integer) } - def flags; end <%- if (node_flags = node.flags) -%> <%- node_flags.values.each do |value| -%> @@ -78,8 +91,8 @@ class Prism::<%= node.name -%> < Prism::Node def <%= field.name %>; end <%- end -%> - sig { params(<%= ["source: Prism::Source", *node.fields.map { |field| "#{field.name}: #{field.rbi_class}" }, "location: Prism::Location"].join(", ") %>).void } - def initialize(<%= ["source", *node.fields.map(&:name), "location"].join(", ") %>); end + sig { params(<%= ["source: Prism::Source", "node_id: Integer", "location: Prism::Location", "flags: Integer", *node.fields.map { |field| "#{field.name}: #{field.rbi_class}" }].join(", ") %>).void } + def initialize(<%= ["source", "node_id", "location", "flags", *node.fields.map(&:name)].join(", ") %>); end sig { override.params(visitor: Prism::Visitor).returns(T.untyped) } def accept(visitor); end @@ -96,8 +109,8 @@ class Prism::<%= node.name -%> < Prism::Node sig { override.returns(T::Array[T.any(Prism::Node, Prism::Location)]) } def comment_targets; end - sig { params(<%= (node.fields.map { |field| "#{field.name}: #{field.rbi_class}" } + ["location: Prism::Location"]).join(", ") %>).returns(Prism::<%= node.name %>) } - def copy(<%= (node.fields.map(&:name) + ["location"]).map { |field| "#{field}: self.#{field}" }.join(", ") %>); end + sig { params(<%= (["node_id: Integer", "location: Prism::Location", "flags: Integer"] + node.fields.map { |field| "#{field.name}: #{field.rbi_class}" }).join(", ") %>).returns(Prism::<%= node.name %>) } + def copy(<%= (["node_id", "location", "flags"] + node.fields.map(&:name)).map { |field| "#{field}: self.#{field}" }.join(", ") %>); end sig { params(keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.untyped]) } def deconstruct_keys(keys); end @@ -139,3 +152,14 @@ module Prism::<%= flag.name %> <%- end -%> end <%- end -%> + +# The flags that are common to all nodes. +module Prism::NodeFlags + # A flag to indicate that the node is a candidate to emit a :line event + # through tracepoint when compiled. + NEWLINE = T.let(1, Integer) + + # A flag to indicate that the value that the node represents is a value that + # can be determined at parse-time. + STATIC_LITERAL = T.let(2, Integer) +end diff --git a/templates/sig/prism/dsl.rbs.erb b/templates/sig/prism/dsl.rbs.erb index 793c452735a..401467c0d8f 100644 --- a/templates/sig/prism/dsl.rbs.erb +++ b/templates/sig/prism/dsl.rbs.erb @@ -1,13 +1,31 @@ module Prism module DSL - private + def source: (String string) -> Source - # Create a new Location object - def Location: (?Source source, ?Integer start_offset, ?Integer length) -> Location + def location: (?source: Source, ?start_offset: Integer, ?length: Integer) -> Location <%- nodes.each do |node| -%> + <%- + params = [ + ["source", "Source"], + ["node_id", "Integer"], + ["location", "Location"], + ["flags", "Integer"] + ].concat(node.fields.map { |field| [field.name, field.rbs_class] }) + -%> + + def <%= node.human %>: (<%= params.map { |(name, type)| "?#{name}: #{type}" }.join(", ") %>) -> <%= node.name %> + <%- end -%> + <%- flags.each do |flag| -%> - # Create a new <%= node.name %> node - def <%= node.name %>: (<%= (node.fields.map { |field| "#{field.rbs_class} #{field.name}" } + ["?Source source", "?Location location"]).join(", ") %>) -> <%= node.name %> + def <%= flag.human.chomp("s") %>: (Symbol name) -> Integer <%- end -%> + + private + + def default_source: () -> Source + + def default_location: () -> Location + + def default_node: (Source source, Location location) -> node end end diff --git a/templates/sig/prism/node.rbs.erb b/templates/sig/prism/node.rbs.erb index 15502b89c6e..f7a5af21983 100644 --- a/templates/sig/prism/node.rbs.erb +++ b/templates/sig/prism/node.rbs.erb @@ -7,8 +7,13 @@ module Prism class Node extend _NodeSingleton - attr_reader location: Location attr_reader source: Source + attr_reader node_id: Integer + attr_reader location: Location + attr_reader flags: Integer + + def newline?: () -> bool + def static_literal?: () -> bool def start_offset: () -> Integer def end_offset: () -> Integer @@ -19,6 +24,7 @@ module Prism def pretty_print: (untyped q) -> untyped def to_dot: () -> String def tunnel: (Integer line, Integer column) -> Array[Prism::node] + def breadth_first_search: () { (Prism::node) -> bool } -> Prism::node? def deprecated: (*String) -> void def newline!: (Array[untyped]) -> void end @@ -46,8 +52,6 @@ module Prism <%- end -%> class <%= node.name -%> < Node include _Node - - attr_reader :flags <%- if (node_flags = node.flags) -%> <%- node_flags.values.each do |value| -%> @@ -59,9 +63,9 @@ module Prism attr_reader <%= field.name %>: <%= field.rbs_class %> <%- end -%> - def initialize: (<%= ["Source source", *node.fields.map { |field| "#{field.rbs_class} #{field.name}" }, "Location location"].join(", ") %>) -> void - def copy: (<%= (node.fields.map { |field| "?#{field.name}: #{field.rbs_class}" } + ["?location: Location"]).join(", ") %>) -> <%= node.name %> - def deconstruct_keys: (Array[Symbol] keys) -> { <%= (node.fields.map { |field| "#{field.name}: #{field.rbs_class}" } + ["location: Location"]).join(", ") %> } + def initialize: (<%= ["Source source", "Integer node_id", "Location location", "Integer flags", *node.fields.map { |field| "#{field.rbs_class} #{field.name}" }].join(", ") %>) -> void + def copy: (<%= (["?node_id: Integer", "?location: Location", "?flags: Integer"] + node.fields.map { |field| "?#{field.name}: #{field.rbs_class}" }).join(", ") %>) -> <%= node.name %> + def deconstruct_keys: (Array[Symbol] keys) -> { <%= (["node_id: Integer", "location: Location"] + node.fields.map { |field| "#{field.name}: #{field.rbs_class}" }).join(", ") %> } <%- node.fields.each do |field| -%> <%- case field -%> <%- when Prism::Template::LocationField -%> @@ -89,4 +93,10 @@ module Prism <%- end -%> end <%- end -%> + + # The flags that are common to all nodes. + module NodeFlags + NEWLINE: Integer + STATIC_LITERAL: Integer + end end diff --git a/templates/template.rb b/templates/template.rb index 8e6f1b16aac..130e15d075b 100755 --- a/templates/template.rb +++ b/templates/template.rb @@ -93,6 +93,10 @@ def should_be_serialized? # Some node fields can be specialized if they point to a specific kind of # node and not just a generic node. class NodeKindField < Field + def kind? + options.key?(:kind) + end + def c_type if specific_kind "pm_#{specific_kind.gsub(/(?<=.)[A-Z]/, "_\\0").downcase}" @@ -624,6 +628,7 @@ def locals "src/prettyprint.c", "src/serialize.c", "src/token_type.c", + "rbi/prism/dsl.rbi", "rbi/prism/node.rbi", "rbi/prism/visitor.rbi", "sig/prism.rbs", diff --git a/test/prism/errors_test.rb b/test/prism/errors_test.rb index 4c5f93cc9f1..9a108ceca7c 100644 --- a/test/prism/errors_test.rb +++ b/test/prism/errors_test.rb @@ -18,6 +18,12 @@ class ErrorsTest < TestCase ] end + if RUBY_VERSION < "3.4" + filepaths -= [ + "it_with_ordinary_parameter.txt" + ] + end + filepaths.each do |filepath| define_method(:"test_#{File.basename(filepath, ".txt")}") do assert_errors(File.join(base, filepath)) @@ -77,7 +83,7 @@ def foo(bar: bar) = 42 private def assert_errors(filepath) - expected = File.read(filepath) + expected = File.read(filepath, binmode: true, external_encoding: Encoding::UTF_8) source = expected.lines.grep_v(/^\s*\^/).join.gsub(/\n*\z/, "") refute_valid_syntax(source) diff --git a/test/prism/result/warnings_test.rb b/test/prism/result/warnings_test.rb index 747440dd76e..c147616a6a4 100644 --- a/test/prism/result/warnings_test.rb +++ b/test/prism/result/warnings_test.rb @@ -76,33 +76,38 @@ def test_integer_in_flip_flop end def test_literal_in_conditionals - source = <<~RUBY - if (a = 2); a; end - if ($a = 2); end - if (@a = 2); end - if (@@a = 2); end - if a; elsif b = 2; b end - unless (a = 2); a; end - unless ($a = 2); end - unless (@a = 2); end - unless (@@a = 2); end - while (a = 2); a; end - while ($a = 2); end - while (@a = 2); end - while (@@a = 2); end - until (a = 2); a; end - until ($a = 2); end - until (@a = 2); end - until (@@a = 2); end - foo if (a, b = 2); [a, b] - foo if a = 2 and a - (@foo = 1) ? a : b - !(a = 2) and a - not a = 2 and a - RUBY - - source.each_line(chomp: true) do |line| - assert_warning(line, "found '= literal' in conditional, should be ==") + sources = [ + "if (a = 2); a; end", + "if ($a = 2); end", + "if (@a = 2); end", + "if a; elsif b = 2; b end", + "unless (a = 2); a; end", + "unless ($a = 2); end", + "unless (@a = 2); end", + "while (a = 2); a; end", + "while ($a = 2); end", + "while (@a = 2); end", + "until (a = 2); a; end", + "until ($a = 2); end", + "until (@a = 2); end", + "foo if (a, b = 2); [a, b]", + "foo if a = 2 and a", + "(@foo = 1) ? a : b", + "!(a = 2) and a", + "not a = 2 and a" + ] + + if RUBY_VERSION >= "3.3" + sources.push( + "if (@@a = 2); end", + "unless (@@a = 2); end", + "while (@@a = 2); end", + "until (@@a = 2); end" + ) + end + + sources.each do |source| + assert_warning(source, "= literal' in conditional, should be ==") end end From 12863fd7448932414ef4662c74fb2978beb26bd0 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 3 Jul 2024 14:17:17 -0400 Subject: [PATCH 031/109] Do not expose node_id to Java --- templates/java/org/prism/Loader.java.erb | 4 ++-- templates/java/org/prism/Nodes.java.erb | 8 +++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/templates/java/org/prism/Loader.java.erb b/templates/java/org/prism/Loader.java.erb index 0a0a167b325..c22b8ed2a17 100644 --- a/templates/java/org/prism/Loader.java.erb +++ b/templates/java/org/prism/Loader.java.erb @@ -353,7 +353,7 @@ public class Loader { private Nodes.Node loadNode() { int type = buffer.get() & 0xFF; - int nodeId = loadVarUInt(); + loadVarUInt(); // skip over node_id int startOffset = loadVarUInt(); int length = loadVarUInt(); @@ -362,7 +362,7 @@ public class Loader { <%- nodes.each_with_index do |node, index| -%> case <%= index + 1 %>: <%- - params = ["nodeId", "startOffset", "length"] + params = ["startOffset", "length"] params << "buffer.getInt()" if node.needs_serialized_length? params << "loadFlags()" params.concat node.semantic_fields.map { |field| diff --git a/templates/java/org/prism/Nodes.java.erb b/templates/java/org/prism/Nodes.java.erb index 48202163956..45a4aa71dd7 100644 --- a/templates/java/org/prism/Nodes.java.erb +++ b/templates/java/org/prism/Nodes.java.erb @@ -92,14 +92,12 @@ public abstract class Nodes { public static final Node[] EMPTY_ARRAY = {}; - public final int nodeId; public final int startOffset; public final int length; protected final short flags; private boolean newLineFlag = false; - public Node(int nodeId, int startOffset, int length, short flags) { - this.nodeId = nodeId; + public Node(int startOffset, int length, short flags) { this.startOffset = startOffset; this.length = length; this.flags = flags; @@ -224,13 +222,13 @@ public abstract class Nodes { <%- end -%> <%- - params = ["int nodeId", "int startOffset", "int length"] + params = ["int startOffset", "int length"] params << "int serializedLength" if node.needs_serialized_length? params << "short flags" params.concat(node.semantic_fields.map { |field| "#{field.java_type} #{field.name}" }) -%> public <%= node.name -%>(<%= params.join(", ") %>) { - super(nodeId, startOffset, length, flags); + super(startOffset, length, flags); <%- if node.needs_serialized_length? -%> this.serializedLength = serializedLength; <%- end -%> From b80322d56c4af3e802e2eea0654ea4912a305302 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Wed, 3 Jul 2024 13:09:24 +0200 Subject: [PATCH 032/109] Use gmake on FreeBSD --- Rakefile | 2 +- ext/prism/extconf.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Rakefile b/Rakefile index 365509de6e4..7a5e5370392 100644 --- a/Rakefile +++ b/Rakefile @@ -10,7 +10,7 @@ require_relative "templates/template" desc "Generate all ERB template based files" task templates: Prism::Template::TEMPLATES -make = RUBY_PLATFORM.include?("openbsd") ? "gmake" : "make" +make = RUBY_PLATFORM.match?(/openbsd|freebsd/) ? "gmake" : "make" task(make: :templates) { sh(make) } task(make_no_debug: :templates) { sh("#{make} all-no-debug") } task(make_minimal: :templates) { sh("#{make} minimal") } diff --git a/ext/prism/extconf.rb b/ext/prism/extconf.rb index accf08ad70b..53a5bfcc049 100644 --- a/ext/prism/extconf.rb +++ b/ext/prism/extconf.rb @@ -50,7 +50,7 @@ def make(env, target) Dir.chdir(File.expand_path("../..", __dir__)) do system( env, - RUBY_PLATFORM.include?("openbsd") ? "gmake" : "make", + RUBY_PLATFORM.match?(/openbsd|freebsd/) ? "gmake" : "make", target, exception: true ) From 82429243b3845f8d8c74c2b612be94a336033031 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 16:17:58 +0000 Subject: [PATCH 033/109] Bump org.junit.jupiter:junit-jupiter-engine in /java-wasm Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.10.2 to 5.10.3. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.2...r5.10.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-wasm/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index 998160486c3..d273dcb746b 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -15,7 +15,7 @@ 11 11 - 5.10.2 + 5.10.3 From ad5efb260889af3ee2245e63142db2652d182f53 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 3 Jul 2024 14:52:41 -0400 Subject: [PATCH 034/109] Bump typecheck deps --- gemfiles/typecheck/Gemfile.lock | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index 01202be12f9..5bb6b42fe63 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -29,7 +29,7 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) logger (1.6.0) - minitest (5.24.0) + minitest (5.24.1) mutex_m (0.2.0) netrc (0.11.0) parallel (1.25.1) @@ -56,14 +56,14 @@ GEM sexp_processor (~> 4.16) securerandom (0.3.1) sexp_processor (4.17.1) - sorbet (0.5.11444) - sorbet-static (= 0.5.11444) - sorbet-runtime (0.5.11444) - sorbet-static (0.5.11444-universal-darwin) - sorbet-static (0.5.11444-x86_64-linux) - sorbet-static-and-runtime (0.5.11444) - sorbet (= 0.5.11444) - sorbet-runtime (= 0.5.11444) + sorbet (0.5.11466) + sorbet-static (= 0.5.11466) + sorbet-runtime (0.5.11466) + sorbet-static (0.5.11466-universal-darwin) + sorbet-static (0.5.11466-x86_64-linux) + sorbet-static-and-runtime (0.5.11466) + sorbet (= 0.5.11466) + sorbet-runtime (= 0.5.11466) spoom (1.3.2) erubi (>= 1.10.0) prism (>= 0.19.0) @@ -85,7 +85,7 @@ GEM strscan (>= 1.0.0) terminal-table (>= 2, < 4) strscan (3.1.0) - tapioca (0.14.4) + tapioca (0.15.0) bundler (>= 2.2.25) netrc (>= 0.11.0) parallel (>= 1.21.0) @@ -103,9 +103,9 @@ GEM concurrent-ruby (~> 1.0) unicode-display_width (2.5.0) yard (0.9.36) - yard-sorbet (0.8.1) - sorbet-runtime (>= 0.5) - yard (>= 0.9) + yard-sorbet (0.9.0) + sorbet-runtime + yard PLATFORMS arm64-darwin-23 From 9ecf4c6e3092ea2f07c23c660fbf29a12bd3fbb3 Mon Sep 17 00:00:00 2001 From: Cameron Dutro Date: Wed, 3 Jul 2024 20:33:01 -0700 Subject: [PATCH 035/109] Decoder map; fix issue with symbol nodes --- templates/javascript/src/deserialize.js.erb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/templates/javascript/src/deserialize.js.erb b/templates/javascript/src/deserialize.js.erb index 1ab6576adbf..686bcac71fc 100644 --- a/templates/javascript/src/deserialize.js.erb +++ b/templates/javascript/src/deserialize.js.erb @@ -25,6 +25,10 @@ class SerializationBuffer { FORCED_UTF8_ENCODING_FLAG = 1; FORCED_BINARY_ENCODING_FLAG = 2; + DECODER_MAP = new Map([ + ["ascii-8bit", "ascii"] + ]); + constructor(source, array) { this.source = source; this.array = array; @@ -164,6 +168,8 @@ class SerializationBuffer { } getDecoder(encoding) { + encoding = this.DECODER_MAP.get(encoding) || encoding; + if (!this.decoders.has(encoding)) { this.decoders.set(encoding, new TextDecoder(encoding, {fatal: true})); } @@ -366,7 +372,7 @@ export function deserialize(source, array) { buffer.readUint32(); <%- end -%> return new nodes.<%= node.name %>(<%= (node.fields.map.with_index { |field, index| - if index == 0 && field.name == "flags" && field.kind == "StringFlags" + if index == 0 && field.name == "flags" && %w(StringFlags SymbolFlags).include?(first_field&.kind) "stringFlags" else case field From 073e8ba307230aaad649e103c8e3c6693758109a Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Thu, 11 Jul 2024 10:17:02 -0400 Subject: [PATCH 036/109] (ruby_parser) Reverse associativity of and and or nodes --- lib/prism/translation/ruby_parser.rb | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/prism/translation/ruby_parser.rb b/lib/prism/translation/ruby_parser.rb index 38690c54b3e..5ea9be8394f 100644 --- a/lib/prism/translation/ruby_parser.rb +++ b/lib/prism/translation/ruby_parser.rb @@ -55,7 +55,19 @@ def visit_alternation_pattern_node(node) # a and b # ^^^^^^^ def visit_and_node(node) - s(node, :and, visit(node.left), visit(node.right)) + left = visit(node.left) + + if left[0] == :and + # ruby_parser has the and keyword as right-associative as opposed to + # prism which has it as left-associative. We reverse that + # associativity here. + nest = left + nest = nest[2] while nest[2][0] == :and + nest[2] = s(node, :and, nest[2], visit(node.right)) + left + else + s(node, :and, left, visit(node.right)) + end end # [] @@ -1136,7 +1148,19 @@ def visit_optional_parameter_node(node) # a or b # ^^^^^^ def visit_or_node(node) - s(node, :or, visit(node.left), visit(node.right)) + left = visit(node.left) + + if left[0] == :or + # ruby_parser has the or keyword as right-associative as opposed to + # prism which has it as left-associative. We reverse that + # associativity here. + nest = left + nest = nest[2] while nest[2][0] == :or + nest[2] = s(node, :or, nest[2], visit(node.right)) + left + else + s(node, :or, left, visit(node.right)) + end end # def foo(bar, *baz); end From 47cb73ce697199ca4ce7a069c8358a5da1c066e7 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Thu, 11 Jul 2024 10:23:01 -0400 Subject: [PATCH 037/109] (ruby_parser) Match match3 nodes for regular expressions --- lib/prism/translation/ruby_parser.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/prism/translation/ruby_parser.rb b/lib/prism/translation/ruby_parser.rb index 5ea9be8394f..c737ef7a2b7 100644 --- a/lib/prism/translation/ruby_parser.rb +++ b/lib/prism/translation/ruby_parser.rb @@ -263,6 +263,11 @@ def visit_call_node(node) when RegularExpressionNode, InterpolatedRegularExpressionNode return s(node, :match2, visit(node.receiver), visit(node.arguments.arguments.first)) end + + case node.arguments.arguments.first + when RegularExpressionNode, InterpolatedRegularExpressionNode + return s(node, :match3, visit(node.arguments.arguments.first), visit(node.receiver)) + end end end From afc7c9344a7a365a32d450e7b33ba86b80209650 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Thu, 11 Jul 2024 10:30:03 -0400 Subject: [PATCH 038/109] (ruby_parser) Handle bare string in implicit concat --- lib/prism/translation/ruby_parser.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/prism/translation/ruby_parser.rb b/lib/prism/translation/ruby_parser.rb index c737ef7a2b7..45b9c4690b3 100644 --- a/lib/prism/translation/ruby_parser.rb +++ b/lib/prism/translation/ruby_parser.rb @@ -893,6 +893,13 @@ def visit_interpolated_x_string_node(node) visited << result end elsif result[0] == :dstr + if !visited.empty? && part.parts[0].is_a?(StringNode) + # If we are in the middle of an implicitly concatenated string, + # we should not have a bare string as the first part. In this + # case we need to visit just that first part and then we can + # push the rest of the parts onto the visited array. + result[1] = visit(part.parts[0]) + end visited.concat(result[1..-1]) else visited << result From c7a4a90ee8641edac41372ad4d3cad7dfc15d253 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Thu, 11 Jul 2024 11:15:04 -0400 Subject: [PATCH 039/109] Bump typecheck dependencies to fix CI --- gemfiles/typecheck/Gemfile.lock | 30 ++++++++++++++-------------- templates/lib/prism/serialize.rb.erb | 4 ++-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index 5bb6b42fe63..9f04537e017 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -33,7 +33,7 @@ GEM mutex_m (0.2.0) netrc (0.11.0) parallel (1.25.1) - parser (3.3.3.0) + parser (3.3.4.0) ast (~> 2.4.1) racc power_assert (2.0.3) @@ -49,24 +49,24 @@ GEM rbi (0.1.13) prism (>= 0.18.0, < 1.0.0) sorbet-runtime (>= 0.5.9204) - rbs (3.5.1) + rbs (3.5.2) logger - ruby_parser (3.21.0) + ruby_parser (3.21.1) racc (~> 1.5) sexp_processor (~> 4.16) securerandom (0.3.1) - sexp_processor (4.17.1) - sorbet (0.5.11466) - sorbet-static (= 0.5.11466) - sorbet-runtime (0.5.11466) - sorbet-static (0.5.11466-universal-darwin) - sorbet-static (0.5.11466-x86_64-linux) - sorbet-static-and-runtime (0.5.11466) - sorbet (= 0.5.11466) - sorbet-runtime (= 0.5.11466) - spoom (1.3.2) + sexp_processor (4.17.2) + sorbet (0.5.11480) + sorbet-static (= 0.5.11480) + sorbet-runtime (0.5.11480) + sorbet-static (0.5.11480-universal-darwin) + sorbet-static (0.5.11480-x86_64-linux) + sorbet-static-and-runtime (0.5.11480) + sorbet (= 0.5.11480) + sorbet-runtime (= 0.5.11480) + spoom (1.3.3) erubi (>= 1.10.0) - prism (>= 0.19.0) + prism (>= 0.28.0) sorbet-static-and-runtime (>= 0.5.10187) thor (>= 0.19.2) steep (1.8.0.dev.1) @@ -85,7 +85,7 @@ GEM strscan (>= 1.0.0) terminal-table (>= 2, < 4) strscan (3.1.0) - tapioca (0.15.0) + tapioca (0.15.1) bundler (>= 2.2.25) netrc (>= 0.11.0) parallel (>= 1.21.0) diff --git a/templates/lib/prism/serialize.rb.erb b/templates/lib/prism/serialize.rb.erb index fc01d9e4c7e..7469f3683d1 100644 --- a/templates/lib/prism/serialize.rb.erb +++ b/templates/lib/prism/serialize.rb.erb @@ -131,8 +131,8 @@ module Prism comments = load_comments magic_comments = Array.new(load_varuint) { MagicComment.new(load_location_object, load_location_object) } data_loc = load_optional_location_object - errors = Array.new(load_varuint) { ParseError.new(DIAGNOSTIC_TYPES[load_varuint], load_embedded_string, load_location_object, load_error_level) } - warnings = Array.new(load_varuint) { ParseWarning.new(DIAGNOSTIC_TYPES[load_varuint], load_embedded_string, load_location_object, load_warning_level) } + errors = Array.new(load_varuint) { ParseError.new(DIAGNOSTIC_TYPES.fetch(load_varuint), load_embedded_string, load_location_object, load_error_level) } + warnings = Array.new(load_varuint) { ParseWarning.new(DIAGNOSTIC_TYPES.fetch(load_varuint), load_embedded_string, load_location_object, load_warning_level) } [comments, magic_comments, data_loc, errors, warnings] end From 9bdd59b99c1e92817d31aec9c6c7979db3051877 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Fri, 12 Jul 2024 09:40:27 -0400 Subject: [PATCH 040/109] Copy changes from ruby/ruby --- include/prism/parser.h | 6 +++--- include/prism/util/pm_newline_list.h | 11 +++++++++++ src/util/pm_newline_list.c | 29 ++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/include/prism/parser.h b/include/prism/parser.h index bc311b6ef45..847b29f368f 100644 --- a/include/prism/parser.h +++ b/include/prism/parser.h @@ -508,9 +508,9 @@ typedef struct { /** The type of shareable constant value that can be set. */ typedef uint8_t pm_shareable_constant_value_t; static const pm_shareable_constant_value_t PM_SCOPE_SHAREABLE_CONSTANT_NONE = 0x0; -static const pm_shareable_constant_value_t PM_SCOPE_SHAREABLE_CONSTANT_LITERAL = 0x1; -static const pm_shareable_constant_value_t PM_SCOPE_SHAREABLE_CONSTANT_EXPERIMENTAL_EVERYTHING = 0x2; -static const pm_shareable_constant_value_t PM_SCOPE_SHAREABLE_CONSTANT_EXPERIMENTAL_COPY = 0x4; +static const pm_shareable_constant_value_t PM_SCOPE_SHAREABLE_CONSTANT_LITERAL = PM_SHAREABLE_CONSTANT_NODE_FLAGS_LITERAL; +static const pm_shareable_constant_value_t PM_SCOPE_SHAREABLE_CONSTANT_EXPERIMENTAL_EVERYTHING = PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_EVERYTHING; +static const pm_shareable_constant_value_t PM_SCOPE_SHAREABLE_CONSTANT_EXPERIMENTAL_COPY = PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_COPY; /** * This tracks an individual local variable in a certain lexical context, as diff --git a/include/prism/util/pm_newline_list.h b/include/prism/util/pm_newline_list.h index 7ae9b6b3da0..406abe8ba59 100644 --- a/include/prism/util/pm_newline_list.h +++ b/include/prism/util/pm_newline_list.h @@ -80,6 +80,17 @@ pm_newline_list_clear(pm_newline_list_t *list); */ bool pm_newline_list_append(pm_newline_list_t *list, const uint8_t *cursor); +/** + * Returns the line of the given offset. If the offset is not in the list, the + * line of the closest offset less than the given offset is returned. + * + * @param list The list to search. + * @param cursor A pointer to the offset to search for. + * @param start_line The line to start counting from. + * @return The line of the given offset. + */ +int32_t pm_newline_list_line(const pm_newline_list_t *list, const uint8_t *cursor, int32_t start_line); + /** * Returns the line and column of the given offset. If the offset is not in the * list, the line and column of the closest offset less than the given offset diff --git a/src/util/pm_newline_list.c b/src/util/pm_newline_list.c index ce07ce8c8e4..8331618f54f 100644 --- a/src/util/pm_newline_list.c +++ b/src/util/pm_newline_list.c @@ -54,6 +54,35 @@ pm_newline_list_append(pm_newline_list_t *list, const uint8_t *cursor) { return true; } +/** + * Returns the line of the given offset. If the offset is not in the list, the + * line of the closest offset less than the given offset is returned. + */ +int32_t +pm_newline_list_line(const pm_newline_list_t *list, const uint8_t *cursor, int32_t start_line) { + assert(cursor >= list->start); + size_t offset = (size_t) (cursor - list->start); + + size_t left = 0; + size_t right = list->size - 1; + + while (left <= right) { + size_t mid = left + (right - left) / 2; + + if (list->offsets[mid] == offset) { + return ((int32_t) mid) + start_line; + } + + if (list->offsets[mid] < offset) { + left = mid + 1; + } else { + right = mid - 1; + } + } + + return ((int32_t) left) + start_line - 1; +} + /** * Returns the line and column of the given offset. If the offset is not in the * list, the line and column of the closest offset less than the given offset From a54abc4d1b7d4d255b9f71f2b7e6880a7b4fc498 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Fri, 12 Jul 2024 09:27:32 -0400 Subject: [PATCH 041/109] When parsing an invalid write, still add to the local table --- src/prism.c | 2 +- test/prism/locals_test.rb | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/prism.c b/src/prism.c index 73df294213a..d46c06c58d3 100644 --- a/src/prism.c +++ b/src/prism.c @@ -13695,7 +13695,7 @@ parse_unwriteable_write(pm_parser_t *parser, pm_node_t *target, const pm_token_t default: break; } - pm_constant_id_t name = pm_parser_constant_id_location(parser, target->location.start, target->location.end); + pm_constant_id_t name = pm_parser_local_add_location(parser, target->location.start, target->location.end, 1); pm_local_variable_write_node_t *result = pm_local_variable_write_node_create(parser, name, 0, value, &target->location, equals); pm_node_destroy(parser, target); diff --git a/test/prism/locals_test.rb b/test/prism/locals_test.rb index 3c45d8b08b1..ea61fd94996 100644 --- a/test/prism/locals_test.rb +++ b/test/prism/locals_test.rb @@ -9,6 +9,11 @@ # to test on the most recent versions. return if !defined?(RubyVM::InstructionSequence) || RUBY_VERSION < "3.4.0" +# In Ruby 3.4.0, the local table for method forwarding changed. But 3.4.0 can +# refer to the dev version, so while 3.4.0 still isn't released, we need to +# check if we have a high enough revision. +return if RubyVM::InstructionSequence.compile("def foo(...); end").to_a[13][2][2][10].length != 1 + # Omit tests if running on a 32-bit machine because there is a bug with how # Ruby is handling large ISeqs on 32-bit machines return if RUBY_PLATFORM =~ /i686/ From 74a53e2a91d499f4e1cb4e05747c0e1b45ae9ae1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:01:57 +0000 Subject: [PATCH 042/109] Bump rbs from 3.5.1 to 3.5.2 in /gemfiles/3.0 Bumps [rbs](https://github.com/ruby/rbs) from 3.5.1 to 3.5.2. - [Release notes](https://github.com/ruby/rbs/releases) - [Changelog](https://github.com/ruby/rbs/blob/master/CHANGELOG.md) - [Commits](https://github.com/ruby/rbs/compare/v3.5.1...v3.5.2) --- updated-dependencies: - dependency-name: rbs dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/3.0/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/3.0/Gemfile.lock b/gemfiles/3.0/Gemfile.lock index 1b42cdb60b9..04707e7b8ab 100644 --- a/gemfiles/3.0/Gemfile.lock +++ b/gemfiles/3.0/Gemfile.lock @@ -22,7 +22,7 @@ GEM rake (13.2.1) rake-compiler (1.2.7) rake - rbs (3.5.1) + rbs (3.5.2) logger ruby_memcheck (3.0.0) nokogiri From e5d7aac11ddc7b8862627cbc6e11ed874686aa8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:03:04 +0000 Subject: [PATCH 043/109] Bump sorbet from 0.5.11480 to 0.5.11481 in /gemfiles/typecheck Bumps [sorbet](https://github.com/sorbet/sorbet) from 0.5.11480 to 0.5.11481. - [Release notes](https://github.com/sorbet/sorbet/releases) - [Commits](https://github.com/sorbet/sorbet/commits) --- updated-dependencies: - dependency-name: sorbet dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/typecheck/Gemfile.lock | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index 9f04537e017..2f50af2cba3 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -19,7 +19,8 @@ GEM csv (3.3.0) drb (2.2.1) erubi (1.13.0) - ffi (1.17.0) + ffi (1.17.0-arm64-darwin) + ffi (1.17.0-x86_64-linux-gnu) fileutils (1.7.2) i18n (1.14.5) concurrent-ruby (~> 1.0) @@ -56,14 +57,14 @@ GEM sexp_processor (~> 4.16) securerandom (0.3.1) sexp_processor (4.17.2) - sorbet (0.5.11480) - sorbet-static (= 0.5.11480) - sorbet-runtime (0.5.11480) - sorbet-static (0.5.11480-universal-darwin) - sorbet-static (0.5.11480-x86_64-linux) - sorbet-static-and-runtime (0.5.11480) - sorbet (= 0.5.11480) - sorbet-runtime (= 0.5.11480) + sorbet (0.5.11481) + sorbet-static (= 0.5.11481) + sorbet-runtime (0.5.11481) + sorbet-static (0.5.11481-universal-darwin) + sorbet-static (0.5.11481-x86_64-linux) + sorbet-static-and-runtime (0.5.11481) + sorbet (= 0.5.11481) + sorbet-runtime (= 0.5.11481) spoom (1.3.3) erubi (>= 1.10.0) prism (>= 0.28.0) From 5a52660f3fc65a8992f4a69854bcb080cca3fe0b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 16:17:01 +0000 Subject: [PATCH 044/109] Bump org.apache.maven.plugins:maven-surefire-plugin in /java-wasm Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.3.0 to 3.3.1. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.3.0...surefire-3.3.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-wasm/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index d273dcb746b..d741e21c8d8 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -37,7 +37,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.3.0 + 3.3.1 From f1f3dffa53a553abdbda5a3e7f513f206134f4b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:01:50 +0000 Subject: [PATCH 045/109] Bump parser from 3.3.3.0 to 3.3.4.0 in /gemfiles/2.7 Bumps [parser](https://github.com/whitequark/parser) from 3.3.3.0 to 3.3.4.0. - [Changelog](https://github.com/whitequark/parser/blob/master/CHANGELOG.md) - [Commits](https://github.com/whitequark/parser/compare/v3.3.3.0...v3.3.4.0) --- updated-dependencies: - dependency-name: parser dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/2.7/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/2.7/Gemfile.lock b/gemfiles/2.7/Gemfile.lock index c166d2e2a9c..91129100158 100644 --- a/gemfiles/2.7/Gemfile.lock +++ b/gemfiles/2.7/Gemfile.lock @@ -9,7 +9,7 @@ GEM ast (2.4.2) ffi (1.16.3) onigmo (0.1.0) - parser (3.3.3.0) + parser (3.3.4.0) ast (~> 2.4.1) racc power_assert (2.0.3) From f4152c1f50286eec27d8396316b79c9d75b08792 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Mon, 15 Jul 2024 14:02:20 -0400 Subject: [PATCH 046/109] Fix up implicit flags --- src/prism.c | 8 ++++---- test/prism/snapshots/integer_operations.txt | 8 ++++---- test/prism/snapshots/multi_write.txt | 2 +- test/prism/snapshots/ranges.txt | 8 ++++---- test/prism/snapshots/seattlerb/call_gt.txt | 2 +- test/prism/snapshots/seattlerb/call_lt.txt | 2 +- test/prism/snapshots/seattlerb/call_lte.txt | 2 +- test/prism/snapshots/whitequark/send_binary_op.txt | 8 ++++---- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/prism.c b/src/prism.c index d46c06c58d3..2e1d90ad4d8 100644 --- a/src/prism.c +++ b/src/prism.c @@ -2575,10 +2575,10 @@ pm_break_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_argument // There are certain flags that we want to use internally but don't want to // expose because they are not relevant beyond parsing. Therefore we'll define // them here and not define them in config.yml/a header file. -static const pm_node_flags_t PM_WRITE_NODE_FLAGS_IMPLICIT_ARRAY = 0x1; -static const pm_node_flags_t PM_CALL_NODE_FLAGS_IMPLICIT_ARRAY = 0x10; -static const pm_node_flags_t PM_CALL_NODE_FLAGS_COMPARISON = 0x20; -static const pm_node_flags_t PM_CALL_NODE_FLAGS_INDEX = 0x40; +static const pm_node_flags_t PM_WRITE_NODE_FLAGS_IMPLICIT_ARRAY = 0x4; +static const pm_node_flags_t PM_CALL_NODE_FLAGS_IMPLICIT_ARRAY = 0x40; +static const pm_node_flags_t PM_CALL_NODE_FLAGS_COMPARISON = 0x80; +static const pm_node_flags_t PM_CALL_NODE_FLAGS_INDEX = 0x100; /** * Allocate and initialize a new CallNode node. This sets everything to NULL or diff --git a/test/prism/snapshots/integer_operations.txt b/test/prism/snapshots/integer_operations.txt index 39a2d8eebfd..9962ccf247d 100644 --- a/test/prism/snapshots/integer_operations.txt +++ b/test/prism/snapshots/integer_operations.txt @@ -238,7 +238,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (25,0)-(25,5)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (25,0)-(25,1)) │ │ ├── flags: static_literal, decimal @@ -276,7 +276,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (29,0)-(29,6)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (29,0)-(29,1)) │ │ ├── flags: static_literal, decimal @@ -371,7 +371,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (39,0)-(39,5)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (39,0)-(39,1)) │ │ ├── flags: static_literal, decimal @@ -390,7 +390,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (41,0)-(41,6)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: newline │ ├── receiver: │ │ @ IntegerNode (location: (41,0)-(41,1)) │ │ ├── flags: static_literal, decimal diff --git a/test/prism/snapshots/multi_write.txt b/test/prism/snapshots/multi_write.txt index 68fa62cf92a..fa36f50423f 100644 --- a/test/prism/snapshots/multi_write.txt +++ b/test/prism/snapshots/multi_write.txt @@ -53,7 +53,7 @@ │ ├── flags: newline │ ├── expression: │ │ @ LocalVariableWriteNode (location: (3,0)-(3,10)) - │ │ ├── flags: newline + │ │ ├── flags: ∅ │ │ ├── name: :foo │ │ ├── depth: 0 │ │ ├── name_loc: (3,0)-(3,3) = "foo" diff --git a/test/prism/snapshots/ranges.txt b/test/prism/snapshots/ranges.txt index 7c2175791bf..81dbe3d901d 100644 --- a/test/prism/snapshots/ranges.txt +++ b/test/prism/snapshots/ranges.txt @@ -361,7 +361,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (35,0)-(35,7)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: newline │ ├── receiver: │ │ @ RangeNode (location: (35,0)-(35,3)) │ │ ├── flags: static_literal @@ -385,7 +385,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (37,0)-(37,7)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: newline │ ├── receiver: │ │ @ RangeNode (location: (37,0)-(37,3)) │ │ ├── flags: static_literal @@ -409,7 +409,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (39,0)-(39,8)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: newline │ ├── receiver: │ │ @ RangeNode (location: (39,0)-(39,3)) │ │ ├── flags: static_literal @@ -433,7 +433,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (41,0)-(41,8)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: newline │ ├── receiver: │ │ @ RangeNode (location: (41,0)-(41,3)) │ │ ├── flags: static_literal diff --git a/test/prism/snapshots/seattlerb/call_gt.txt b/test/prism/snapshots/seattlerb/call_gt.txt index b1ee64e57c3..22371dd8ca0 100644 --- a/test/prism/snapshots/seattlerb/call_gt.txt +++ b/test/prism/snapshots/seattlerb/call_gt.txt @@ -6,7 +6,7 @@ ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: newline, ignore_visibility + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) │ ├── flags: static_literal, decimal diff --git a/test/prism/snapshots/seattlerb/call_lt.txt b/test/prism/snapshots/seattlerb/call_lt.txt index 6c5b5f22139..bec3deddd08 100644 --- a/test/prism/snapshots/seattlerb/call_lt.txt +++ b/test/prism/snapshots/seattlerb/call_lt.txt @@ -6,7 +6,7 @@ ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: newline, ignore_visibility + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) │ ├── flags: static_literal, decimal diff --git a/test/prism/snapshots/seattlerb/call_lte.txt b/test/prism/snapshots/seattlerb/call_lte.txt index 9fadb1f981b..a71e03ee128 100644 --- a/test/prism/snapshots/seattlerb/call_lte.txt +++ b/test/prism/snapshots/seattlerb/call_lte.txt @@ -6,7 +6,7 @@ ├── flags: ∅ └── body: (length: 1) └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: newline, ignore_visibility + ├── flags: newline ├── receiver: │ @ IntegerNode (location: (1,0)-(1,1)) │ ├── flags: static_literal, decimal diff --git a/test/prism/snapshots/whitequark/send_binary_op.txt b/test/prism/snapshots/whitequark/send_binary_op.txt index a020262b1d7..49a2cffa659 100644 --- a/test/prism/snapshots/whitequark/send_binary_op.txt +++ b/test/prism/snapshots/whitequark/send_binary_op.txt @@ -240,7 +240,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (19,0)-(19,7)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (19,0)-(19,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -292,7 +292,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (23,0)-(23,8)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (23,0)-(23,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -422,7 +422,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (33,0)-(33,7)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (33,0)-(33,3)) │ │ ├── flags: variable_call, ignore_visibility @@ -448,7 +448,7 @@ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallNode (location: (35,0)-(35,8)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: newline │ ├── receiver: │ │ @ CallNode (location: (35,0)-(35,3)) │ │ ├── flags: variable_call, ignore_visibility From 9e9b069404453c89e0f7915ff60aecc6f1a9890c Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 16 Jul 2024 15:13:55 -0400 Subject: [PATCH 047/109] Move sample files under sample/prism --- README.md | 3 ++- sample/{ => prism}/find_calls.rb | 0 sample/{ => prism}/find_comments.rb | 0 sample/{ => prism}/locate_nodes.rb | 0 sample/{ => prism}/visit_nodes.rb | 0 5 files changed, 2 insertions(+), 1 deletion(-) rename sample/{ => prism}/find_calls.rb (100%) rename sample/{ => prism}/find_comments.rb (100%) rename sample/{ => prism}/locate_nodes.rb (100%) rename sample/{ => prism}/visit_nodes.rb (100%) diff --git a/README.md b/README.md index 6ef9432f8a4..04f12bca998 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,8 @@ The repository contains the infrastructure for both a shared library (libprism) ├── rust │   ├── ruby-prism Rustified crate for the shared library │   └── ruby-prism-sys FFI binding for Rust -├── sample Sample code that uses the Ruby API for documentation +├── sample +│ └── prism Sample code that uses the Ruby API for documentation purposes ├── sig RBS type signatures for the Ruby library ├── src │   ├── util various utility files diff --git a/sample/find_calls.rb b/sample/prism/find_calls.rb similarity index 100% rename from sample/find_calls.rb rename to sample/prism/find_calls.rb diff --git a/sample/find_comments.rb b/sample/prism/find_comments.rb similarity index 100% rename from sample/find_comments.rb rename to sample/prism/find_comments.rb diff --git a/sample/locate_nodes.rb b/sample/prism/locate_nodes.rb similarity index 100% rename from sample/locate_nodes.rb rename to sample/prism/locate_nodes.rb diff --git a/sample/visit_nodes.rb b/sample/prism/visit_nodes.rb similarity index 100% rename from sample/visit_nodes.rb rename to sample/prism/visit_nodes.rb From 165a1a0e78e3dff8d3dc88f2760146775efca0e4 Mon Sep 17 00:00:00 2001 From: Koichi ITO Date: Wed, 17 Jul 2024 21:29:08 +0900 Subject: [PATCH 048/109] [Doc] Tweak example of `Prism::Dispatcher` This PR tweaked the documentation to correct an error encountered when running the example code of `Prism::Dispatcher`. This aims to make understanding the example smoother. --- templates/lib/prism/dispatcher.rb.erb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/lib/prism/dispatcher.rb.erb b/templates/lib/prism/dispatcher.rb.erb index 1370ca76364..0db00034642 100644 --- a/templates/lib/prism/dispatcher.rb.erb +++ b/templates/lib/prism/dispatcher.rb.erb @@ -14,7 +14,8 @@ module Prism # end # end # - # dispatcher = Dispatcher.new + # listener = OctalListener.new + # dispatcher = Prism::Dispatcher.new # dispatcher.register(listener, :on_integer_node_enter) # # Then, you can walk any number of trees and dispatch events to the listeners: From 67c2a07578a0a56694087eaa4ea721be90a5a7dc Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 17 Jul 2024 15:14:57 -0400 Subject: [PATCH 049/109] Sync upstream ruby/ruby and remove redundant return --- config.yml | 6 - src/prism.c | 111 ------------------ test/prism/result/redundant_return_test.rb | 73 ------------ .../seattlerb/parse_line_defn_complex.txt | 2 +- .../snapshots/seattlerb/parse_line_return.txt | 2 +- .../snapshots/whitequark/ruby_bug_9669.txt | 2 +- 6 files changed, 3 insertions(+), 193 deletions(-) delete mode 100644 test/prism/result/redundant_return_test.rb diff --git a/config.yml b/config.yml index 321264e686d..ad5d633755b 100644 --- a/config.yml +++ b/config.yml @@ -735,11 +735,6 @@ flags: - name: FORCED_US_ASCII_ENCODING comment: "internal bytes forced the encoding to US-ASCII" comment: Flags for regular expression and match last line nodes. - - name: ReturnNodeFlags - values: - - name: REDUNDANT - comment: "a return statement that is redundant because it is the last statement in a method" - comment: Flags for return nodes. - name: ShareableConstantNodeFlags values: - name: LITERAL @@ -3455,7 +3450,6 @@ nodes: retry ^^^^^ - name: ReturnNode - flags: ReturnNodeFlags fields: - name: keyword_loc type: location diff --git a/src/prism.c b/src/prism.c index 2e1d90ad4d8..427ac49e3d1 100644 --- a/src/prism.c +++ b/src/prism.c @@ -3795,113 +3795,6 @@ pm_def_node_receiver_check(pm_parser_t *parser, const pm_node_t *node) { } } -/** - * When a method body is created, we want to check if the last statement is a - * return or a statement that houses a return. If it is, then we want to mark - * that return as being redundant so that we can compile it differently but also - * so that we can indicate that to the user. - */ -static void -pm_def_node_body_redundant_return(pm_node_t *node) { - switch (PM_NODE_TYPE(node)) { - case PM_RETURN_NODE: - node->flags |= PM_RETURN_NODE_FLAGS_REDUNDANT; - break; - case PM_BEGIN_NODE: { - pm_begin_node_t *cast = (pm_begin_node_t *) node; - - if (cast->statements != NULL && cast->else_clause == NULL) { - pm_def_node_body_redundant_return((pm_node_t *) cast->statements); - } - break; - } - case PM_STATEMENTS_NODE: { - pm_statements_node_t *cast = (pm_statements_node_t *) node; - - if (cast->body.size > 0) { - pm_def_node_body_redundant_return(cast->body.nodes[cast->body.size - 1]); - } - break; - } - case PM_IF_NODE: { - pm_if_node_t *cast = (pm_if_node_t *) node; - - if (cast->statements != NULL) { - pm_def_node_body_redundant_return((pm_node_t *) cast->statements); - } - - if (cast->consequent != NULL) { - pm_def_node_body_redundant_return(cast->consequent); - } - break; - } - case PM_UNLESS_NODE: { - pm_unless_node_t *cast = (pm_unless_node_t *) node; - - if (cast->statements != NULL) { - pm_def_node_body_redundant_return((pm_node_t *) cast->statements); - } - - if (cast->consequent != NULL) { - pm_def_node_body_redundant_return((pm_node_t *) cast->consequent); - } - break; - } - case PM_ELSE_NODE: { - pm_else_node_t *cast = (pm_else_node_t *) node; - - if (cast->statements != NULL) { - pm_def_node_body_redundant_return((pm_node_t *) cast->statements); - } - break; - } - case PM_CASE_NODE: { - pm_case_node_t *cast = (pm_case_node_t *) node; - pm_node_t *condition; - - PM_NODE_LIST_FOREACH(&cast->conditions, index, condition) { - pm_def_node_body_redundant_return(condition); - } - - if (cast->consequent != NULL) { - pm_def_node_body_redundant_return((pm_node_t *) cast->consequent); - } - break; - } - case PM_WHEN_NODE: { - pm_when_node_t *cast = (pm_when_node_t *) node; - - if (cast->statements != NULL) { - pm_def_node_body_redundant_return((pm_node_t *) cast->statements); - } - break; - } - case PM_CASE_MATCH_NODE: { - pm_case_match_node_t *cast = (pm_case_match_node_t *) node; - pm_node_t *condition; - - PM_NODE_LIST_FOREACH(&cast->conditions, index, condition) { - pm_def_node_body_redundant_return(condition); - } - - if (cast->consequent != NULL) { - pm_def_node_body_redundant_return((pm_node_t *) cast->consequent); - } - break; - } - case PM_IN_NODE: { - pm_in_node_t *cast = (pm_in_node_t *) node; - - if (cast->statements != NULL) { - pm_def_node_body_redundant_return((pm_node_t *) cast->statements); - } - break; - } - default: - break; - } -} - /** * Allocate and initialize a new DefNode node. */ @@ -3934,10 +3827,6 @@ pm_def_node_create( pm_def_node_receiver_check(parser, receiver); } - if (body != NULL) { - pm_def_node_body_redundant_return(body); - } - *node = (pm_def_node_t) { { .type = PM_DEF_NODE, diff --git a/test/prism/result/redundant_return_test.rb b/test/prism/result/redundant_return_test.rb deleted file mode 100644 index 3b20aeba00f..00000000000 --- a/test/prism/result/redundant_return_test.rb +++ /dev/null @@ -1,73 +0,0 @@ -# frozen_string_literal: true - -require_relative "../test_helper" - -module Prism - class RedundantReturnTest < TestCase - def test_statements - assert_redundant_return("def foo; return; end") - refute_redundant_return("def foo; return; 1; end") - end - - def test_begin_implicit - assert_redundant_return("def foo; return; rescue; end") - refute_redundant_return("def foo; return; 1; rescue; end") - refute_redundant_return("def foo; return; rescue; else; end") - end - - def test_begin_explicit - assert_redundant_return("def foo; begin; return; rescue; end; end") - refute_redundant_return("def foo; begin; return; 1; rescue; end; end") - refute_redundant_return("def foo; begin; return; rescue; else; end; end") - end - - def test_if - assert_redundant_return("def foo; return if bar; end") - end - - def test_unless - assert_redundant_return("def foo; return unless bar; end") - end - - def test_else - assert_redundant_return("def foo; if bar; baz; else; return; end; end") - end - - def test_case_when - assert_redundant_return("def foo; case bar; when baz; return; end; end") - end - - def test_case_else - assert_redundant_return("def foo; case bar; when baz; else; return; end; end") - end - - def test_case_match_in - assert_redundant_return("def foo; case bar; in baz; return; end; end") - end - - def test_case_match_else - assert_redundant_return("def foo; case bar; in baz; else; return; end; end") - end - - private - - def assert_redundant_return(source) - assert find_return(source).redundant? - end - - def refute_redundant_return(source) - refute find_return(source).redundant? - end - - def find_return(source) - queue = [Prism.parse(source).value] - - while (current = queue.shift) - return current if current.is_a?(ReturnNode) - queue.concat(current.compact_child_nodes) - end - - flunk "Could not find return node in #{node.inspect}" - end - end -end diff --git a/test/prism/snapshots/seattlerb/parse_line_defn_complex.txt b/test/prism/snapshots/seattlerb/parse_line_defn_complex.txt index 2a91fc6bba3..fb4d1940f20 100644 --- a/test/prism/snapshots/seattlerb/parse_line_defn_complex.txt +++ b/test/prism/snapshots/seattlerb/parse_line_defn_complex.txt @@ -56,7 +56,7 @@ │ │ ├── binary_operator: :* │ │ └── depth: 0 │ └── @ ReturnNode (location: (4,2)-(4,10)) - │ ├── flags: newline, redundant + │ ├── flags: newline │ ├── keyword_loc: (4,2)-(4,8) = "return" │ └── arguments: │ @ ArgumentsNode (location: (4,9)-(4,10)) diff --git a/test/prism/snapshots/seattlerb/parse_line_return.txt b/test/prism/snapshots/seattlerb/parse_line_return.txt index 70a72867463..14d18e71d3c 100644 --- a/test/prism/snapshots/seattlerb/parse_line_return.txt +++ b/test/prism/snapshots/seattlerb/parse_line_return.txt @@ -27,7 +27,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ ReturnNode (location: (3,10)-(3,19)) - │ │ ├── flags: newline, redundant + │ │ ├── flags: newline │ │ ├── keyword_loc: (3,10)-(3,16) = "return" │ │ └── arguments: │ │ @ ArgumentsNode (location: (3,17)-(3,19)) diff --git a/test/prism/snapshots/whitequark/ruby_bug_9669.txt b/test/prism/snapshots/whitequark/ruby_bug_9669.txt index 3d2e3056576..c771c50c8a6 100644 --- a/test/prism/snapshots/whitequark/ruby_bug_9669.txt +++ b/test/prism/snapshots/whitequark/ruby_bug_9669.txt @@ -29,7 +29,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ ReturnNode (location: (2,0)-(2,6)) - │ │ ├── flags: newline, redundant + │ │ ├── flags: newline │ │ ├── keyword_loc: (2,0)-(2,6) = "return" │ │ └── arguments: ∅ │ ├── locals: [:b] From b167189c1e88bddc298df704d5d80d53cac65962 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 17 Jul 2024 15:27:06 -0400 Subject: [PATCH 050/109] Update RBI --- rbi/prism/dsl.rbi | 3 --- 1 file changed, 3 deletions(-) diff --git a/rbi/prism/dsl.rbi b/rbi/prism/dsl.rbi index df96bb4d269..e19087c1336 100644 --- a/rbi/prism/dsl.rbi +++ b/rbi/prism/dsl.rbi @@ -499,9 +499,6 @@ module Prism::DSL sig { params(name: Symbol).returns(Integer) } def regular_expression_flag(name); end - sig { params(name: Symbol).returns(Integer) } - def return_node_flag(name); end - sig { params(name: Symbol).returns(Integer) } def shareable_constant_node_flag(name); end From 4a41d298c83e0e303435940eef27669c9a4f601a Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 17 Jul 2024 15:30:03 -0400 Subject: [PATCH 051/109] Have parse_stream handle NUL bytes --- ext/prism/extension.c | 4 ++-- src/prism.c | 9 ++++++--- test/prism/api/parse_stream_test.rb | 8 ++++++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/ext/prism/extension.c b/ext/prism/extension.c index d0bc5e7f0c1..64affd40013 100644 --- a/ext/prism/extension.c +++ b/ext/prism/extension.c @@ -856,8 +856,8 @@ parse_stream_fgets(char *string, int size, void *stream) { return NULL; } - const char *cstr = StringValueCStr(line); - size_t length = strlen(cstr); + const char *cstr = RSTRING_PTR(line); + long length = RSTRING_LEN(line); memcpy(string, cstr, length); string[length] = '\0'; diff --git a/src/prism.c b/src/prism.c index 427ac49e3d1..2d6cccffba7 100644 --- a/src/prism.c +++ b/src/prism.c @@ -21696,18 +21696,21 @@ pm_parse_stream_read(pm_buffer_t *buffer, void *stream, pm_parse_stream_fgets_t #define LINE_SIZE 4096 char line[LINE_SIZE]; - while (fgets(line, LINE_SIZE, stream) != NULL) { - size_t length = strlen(line); + while (memset(line, '\n', LINE_SIZE), fgets(line, LINE_SIZE, stream) != NULL) { + size_t length = LINE_SIZE; + while (length > 0 && line[length - 1] == '\n') length--; - if (length == LINE_SIZE && line[length - 1] != '\n') { + if (length == LINE_SIZE) { // If we read a line that is the maximum size and it doesn't end // with a newline, then we'll just append it to the buffer and // continue reading. + length--; pm_buffer_append_string(buffer, line, length); continue; } // Append the line to the buffer. + length--; pm_buffer_append_string(buffer, line, length); // Check if the line matches the __END__ marker. If it does, then stop diff --git a/test/prism/api/parse_stream_test.rb b/test/prism/api/parse_stream_test.rb index 0edee74cc22..1c068c617c4 100644 --- a/test/prism/api/parse_stream_test.rb +++ b/test/prism/api/parse_stream_test.rb @@ -69,5 +69,13 @@ def test_false___END___in_heredoc assert result.success? assert_equal 4, result.value.statements.body.length end + + def test_nul_bytes + io = StringIO.new("1 # \0\0\0 \n2 # \0\0\0\n3") + result = Prism.parse_stream(io) + + assert result.success? + assert_equal 3, result.value.statements.body.length + end end end From f5149870ab58f1161e758944b8326abbb4c48953 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Thu, 18 Jul 2024 15:26:29 -0400 Subject: [PATCH 052/109] Mark local variable writes in value positions as being read --- src/prism.c | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/src/prism.c b/src/prism.c index 2d6cccffba7..b18577a21ec 100644 --- a/src/prism.c +++ b/src/prism.c @@ -1036,8 +1036,8 @@ pm_parser_optional_constant_id_token(pm_parser_t *parser, const pm_token_t *toke * If the node is value node, it returns NULL. * If not, it returns the pointer to the node to be inspected as "void expression". */ -static pm_node_t* -pm_check_value_expression(pm_node_t *node) { +static pm_node_t * +pm_check_value_expression(pm_parser_t *parser, pm_node_t *node) { pm_node_t* void_node = NULL; while (node != NULL) { @@ -1096,7 +1096,7 @@ pm_check_value_expression(pm_node_t *node) { if (cast->statements == NULL || cast->consequent == NULL) { return NULL; } - pm_node_t *vn = pm_check_value_expression((pm_node_t *) cast->statements); + pm_node_t *vn = pm_check_value_expression(parser, (pm_node_t *) cast->statements); if (vn == NULL) { return NULL; } @@ -1111,7 +1111,7 @@ pm_check_value_expression(pm_node_t *node) { if (cast->statements == NULL || cast->consequent == NULL) { return NULL; } - pm_node_t *vn = pm_check_value_expression((pm_node_t *) cast->statements); + pm_node_t *vn = pm_check_value_expression(parser, (pm_node_t *) cast->statements); if (vn == NULL) { return NULL; } @@ -1136,6 +1136,15 @@ pm_check_value_expression(pm_node_t *node) { node = cast->left; break; } + case PM_LOCAL_VARIABLE_WRITE_NODE: { + pm_local_variable_write_node_t *cast = (pm_local_variable_write_node_t *) node; + + pm_scope_t *scope = parser->current_scope; + for (uint32_t depth = 0; depth < cast->depth; depth++) scope = scope->previous; + + pm_locals_read(&scope->locals, cast->name); + return NULL; + } default: return NULL; } @@ -1146,7 +1155,7 @@ pm_check_value_expression(pm_node_t *node) { static inline void pm_assert_value_expression(pm_parser_t *parser, pm_node_t *node) { - pm_node_t *void_node = pm_check_value_expression(node); + pm_node_t *void_node = pm_check_value_expression(parser, node); if (void_node != NULL) { pm_parser_err_node(parser, void_node, PM_ERR_VOID_EXPRESSION); } @@ -1338,13 +1347,25 @@ static bool pm_conditional_predicate_warn_write_literal_p(const pm_node_t *node) { switch (PM_NODE_TYPE(node)) { case PM_ARRAY_NODE: { + if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) return true; + const pm_array_node_t *cast = (const pm_array_node_t *) node; - const pm_node_t *element; + for (size_t index = 0; index < cast->elements.size; index++) { + if (!pm_conditional_predicate_warn_write_literal_p(cast->elements.nodes[index])) return false; + } - PM_NODE_LIST_FOREACH(&cast->elements, index, element) { - if (!pm_conditional_predicate_warn_write_literal_p(element)) { - return false; - } + return true; + } + case PM_HASH_NODE: { + if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) return true; + + const pm_hash_node_t *cast = (const pm_hash_node_t *) node; + for (size_t index = 0; index < cast->elements.size; index++) { + const pm_node_t *element = cast->elements.nodes[index]; + if (!PM_NODE_TYPE_P(element, PM_ASSOC_NODE)) return false; + + const pm_assoc_node_t *assoc = (const pm_assoc_node_t *) element; + if (!pm_conditional_predicate_warn_write_literal_p(assoc->key) || !pm_conditional_predicate_warn_write_literal_p(assoc->value)) return false; } return true; From aec088c8af0ea5e3bf2a9921ff0c7a34b6036e6e Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Thu, 18 Jul 2024 15:46:18 -0400 Subject: [PATCH 053/109] Do not read directory --- include/prism/util/pm_string.h | 1 + src/util/pm_string.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/include/prism/util/pm_string.h b/include/prism/util/pm_string.h index d23792c0bad..e4a20558d36 100644 --- a/include/prism/util/pm_string.h +++ b/include/prism/util/pm_string.h @@ -9,6 +9,7 @@ #include "prism/defines.h" #include +#include #include #include #include diff --git a/src/util/pm_string.c b/src/util/pm_string.c index dfc121b6a27..e9e597113f6 100644 --- a/src/util/pm_string.c +++ b/src/util/pm_string.c @@ -116,6 +116,13 @@ pm_string_mapped_init(pm_string_t *string, const char *filepath) { return false; } + // Ensure it is a file and not a directory + if (S_ISDIR(sb.st_mode)) { + errno = EISDIR; + close(fd); + return false; + } + // mmap the file descriptor to virtually get the contents size_t size = (size_t) sb.st_size; uint8_t *source = NULL; From 22c3b559cd041d726b574d2002b8d565ac380b61 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Fri, 19 Jul 2024 08:46:39 -0400 Subject: [PATCH 054/109] Fix parsing parentheses in hash patterns --- src/prism.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/prism.c b/src/prism.c index b18577a21ec..02ccecfc120 100644 --- a/src/prism.c +++ b/src/prism.c @@ -17034,7 +17034,8 @@ parse_pattern_primitives(pm_parser_t *parser, pm_constant_id_list_t *captures, p break; } - case PM_TOKEN_PARENTHESIS_LEFT: { + case PM_TOKEN_PARENTHESIS_LEFT: + case PM_TOKEN_PARENTHESIS_LEFT_PARENTHESES: { pm_token_t opening = parser->current; parser_lex(parser); From 284ea06bf2f8730075b5bd2394c6fdc5caa2e305 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 16:51:52 +0000 Subject: [PATCH 055/109] Bump com.dylibso.chicory:runtime from 0.0.10 to 0.0.12 in /java-wasm Bumps [com.dylibso.chicory:runtime](https://github.com/dylibso/chicory) from 0.0.10 to 0.0.12. - [Commits](https://github.com/dylibso/chicory/compare/0.0.10...0.0.12) --- updated-dependencies: - dependency-name: com.dylibso.chicory:runtime dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-wasm/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index d741e21c8d8..b1c14cbd82f 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -22,7 +22,7 @@ com.dylibso.chicory runtime - 0.0.10 + 0.0.12 org.junit.jupiter From 12c6adcbd65c51f49445d0b614427e52c42416b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 16:15:23 +0000 Subject: [PATCH 056/109] Bump sorbet from 0.5.11481 to 0.5.11491 in /gemfiles/typecheck Bumps [sorbet](https://github.com/sorbet/sorbet) from 0.5.11481 to 0.5.11491. - [Release notes](https://github.com/sorbet/sorbet/releases) - [Commits](https://github.com/sorbet/sorbet/commits) --- updated-dependencies: - dependency-name: sorbet dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/typecheck/Gemfile.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index 2f50af2cba3..b2386c27021 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -57,14 +57,14 @@ GEM sexp_processor (~> 4.16) securerandom (0.3.1) sexp_processor (4.17.2) - sorbet (0.5.11481) - sorbet-static (= 0.5.11481) - sorbet-runtime (0.5.11481) - sorbet-static (0.5.11481-universal-darwin) - sorbet-static (0.5.11481-x86_64-linux) - sorbet-static-and-runtime (0.5.11481) - sorbet (= 0.5.11481) - sorbet-runtime (= 0.5.11481) + sorbet (0.5.11491) + sorbet-static (= 0.5.11491) + sorbet-runtime (0.5.11491) + sorbet-static (0.5.11491-universal-darwin) + sorbet-static (0.5.11491-x86_64-linux) + sorbet-static-and-runtime (0.5.11491) + sorbet (= 0.5.11491) + sorbet-runtime (= 0.5.11491) spoom (1.3.3) erubi (>= 1.10.0) prism (>= 0.28.0) From 7e0cc56c5b9f1a358d08cfc85b9f6d75177f2d79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 16:14:18 +0000 Subject: [PATCH 057/109] Bump parser from 3.3.3.0 to 3.3.4.0 in /gemfiles/3.0 Bumps [parser](https://github.com/whitequark/parser) from 3.3.3.0 to 3.3.4.0. - [Changelog](https://github.com/whitequark/parser/blob/master/CHANGELOG.md) - [Commits](https://github.com/whitequark/parser/compare/v3.3.3.0...v3.3.4.0) --- updated-dependencies: - dependency-name: parser dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/3.0/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/3.0/Gemfile.lock b/gemfiles/3.0/Gemfile.lock index 04707e7b8ab..82163ef0edf 100644 --- a/gemfiles/3.0/Gemfile.lock +++ b/gemfiles/3.0/Gemfile.lock @@ -14,7 +14,7 @@ GEM mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) - parser (3.3.3.0) + parser (3.3.4.0) ast (~> 2.4.1) racc power_assert (2.0.3) From 3d46f431986bd49172a2d3f075c09cd3bdf0ec17 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 16:14:29 +0000 Subject: [PATCH 058/109] Bump rbs from 3.5.1 to 3.5.2 in /gemfiles/3.1 Bumps [rbs](https://github.com/ruby/rbs) from 3.5.1 to 3.5.2. - [Release notes](https://github.com/ruby/rbs/releases) - [Changelog](https://github.com/ruby/rbs/blob/master/CHANGELOG.md) - [Commits](https://github.com/ruby/rbs/compare/v3.5.1...v3.5.2) --- updated-dependencies: - dependency-name: rbs dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/3.1/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/3.1/Gemfile.lock b/gemfiles/3.1/Gemfile.lock index 472ba5fa9ae..2d95653fa93 100644 --- a/gemfiles/3.1/Gemfile.lock +++ b/gemfiles/3.1/Gemfile.lock @@ -22,7 +22,7 @@ GEM rake (13.2.1) rake-compiler (1.2.7) rake - rbs (3.5.1) + rbs (3.5.2) logger ruby_memcheck (3.0.0) nokogiri From 5d5bf92be8537b8283b547aa878e3b8d970e731f Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Fri, 19 Jul 2024 11:08:06 -0400 Subject: [PATCH 059/109] Implement mismatched indentation warning --- config.yml | 3 +- include/prism/parser.h | 6 + src/prism.c | 411 ++++++++++++++++++++++------- templates/src/diagnostic.c.erb | 3 +- test/prism/result/warnings_test.rb | 73 ++++- 5 files changed, 391 insertions(+), 105 deletions(-) diff --git a/config.yml b/config.yml index ad5d633755b..fed82651732 100644 --- a/config.yml +++ b/config.yml @@ -298,10 +298,11 @@ warnings: - DUPLICATED_WHEN_CLAUSE - FLOAT_OUT_OF_RANGE - IGNORED_FROZEN_STRING_LITERAL + - INDENTATION_MISMATCH - INTEGER_IN_FLIP_FLOP - INVALID_CHARACTER + - INVALID_MAGIC_COMMENT_VALUE - INVALID_NUMBERED_REFERENCE - - INVALID_SHAREABLE_CONSTANT_VALUE - KEYWORD_EOL - LITERAL_IN_CONDITION_DEFAULT - LITERAL_IN_CONDITION_VERBOSE diff --git a/include/prism/parser.h b/include/prism/parser.h index 847b29f368f..ea40fc910a2 100644 --- a/include/prism/parser.h +++ b/include/prism/parser.h @@ -902,6 +902,12 @@ struct pm_parser { * characters. */ bool current_regular_expression_ascii_only; + + /** + * By default, Ruby always warns about mismatched indentation. This can be + * toggled with a magic comment. + */ + bool warn_mismatched_indentation; }; #endif diff --git a/src/prism.c b/src/prism.c index 02ccecfc120..1f63b89e541 100644 --- a/src/prism.c +++ b/src/prism.c @@ -8266,16 +8266,24 @@ parser_lex_magic_comment_encoding(pm_parser_t *parser) { } } +typedef enum { + PM_MAGIC_COMMENT_BOOLEAN_VALUE_TRUE, + PM_MAGIC_COMMENT_BOOLEAN_VALUE_FALSE, + PM_MAGIC_COMMENT_BOOLEAN_VALUE_INVALID +} pm_magic_comment_boolean_value_t; + /** * Check if this is a magic comment that includes the frozen_string_literal * pragma. If it does, set that field on the parser. */ -static void -parser_lex_magic_comment_frozen_string_literal_value(pm_parser_t *parser, const uint8_t *start, const uint8_t *end) { - if ((start + 4 <= end) && pm_strncasecmp(start, (const uint8_t *) "true", 4) == 0) { - parser->frozen_string_literal = PM_OPTIONS_FROZEN_STRING_LITERAL_ENABLED; - } else if ((start + 5 <= end) && pm_strncasecmp(start, (const uint8_t *) "false", 5) == 0) { - parser->frozen_string_literal = PM_OPTIONS_FROZEN_STRING_LITERAL_DISABLED; +static pm_magic_comment_boolean_value_t +parser_lex_magic_comment_boolean_value(const uint8_t *value_start, uint32_t value_length) { + if (value_length == 4 && pm_strncasecmp(value_start, (const uint8_t *) "true", 4) == 0) { + return PM_MAGIC_COMMENT_BOOLEAN_VALUE_TRUE; + } else if (value_length == 5 && pm_strncasecmp(value_start, (const uint8_t *) "false", 5) == 0) { + return PM_MAGIC_COMMENT_BOOLEAN_VALUE_FALSE; + } else { + return PM_MAGIC_COMMENT_BOOLEAN_VALUE_INVALID; } } @@ -8364,6 +8372,7 @@ parser_lex_magic_comment(pm_parser_t *parser, bool semantic_token_seen) { if (*cursor == '\\' && (cursor + 1 < end)) cursor++; } value_end = cursor; + if (*cursor == '"') cursor++; } else { value_start = cursor; while (cursor < end && *cursor != '"' && *cursor != ';' && !pm_char_is_whitespace(*cursor)) cursor++; @@ -8381,28 +8390,28 @@ parser_lex_magic_comment(pm_parser_t *parser, bool semantic_token_seen) { // underscores. We only need to do this if there _is_ a dash in the key. pm_string_t key; const size_t key_length = (size_t) (key_end - key_start); - const uint8_t *dash = pm_memchr(key_start, '-', (size_t) key_length, parser->encoding_changed, parser->encoding); + const uint8_t *dash = pm_memchr(key_start, '-', key_length, parser->encoding_changed, parser->encoding); if (dash == NULL) { pm_string_shared_init(&key, key_start, key_end); } else { - size_t width = (size_t) (key_end - key_start); - uint8_t *buffer = xmalloc(width); + uint8_t *buffer = xmalloc(key_length); if (buffer == NULL) break; - memcpy(buffer, key_start, width); + memcpy(buffer, key_start, key_length); buffer[dash - key_start] = '_'; while ((dash = pm_memchr(dash + 1, '-', (size_t) (key_end - dash - 1), parser->encoding_changed, parser->encoding)) != NULL) { buffer[dash - key_start] = '_'; } - pm_string_owned_init(&key, buffer, width); + pm_string_owned_init(&key, buffer, key_length); } // Finally, we can start checking the key against the list of known // magic comment keys, and potentially change state based on that. const uint8_t *key_source = pm_string_source(&key); + uint32_t value_length = (uint32_t) (value_end - value_start); // We only want to attempt to compare against encoding comments if it's // the first line in the file (or the second in the case of a shebang). @@ -8415,40 +8424,82 @@ parser_lex_magic_comment(pm_parser_t *parser, bool semantic_token_seen) { } } - // We only want to handle frozen string literal comments if it's before - // any semantic tokens have been seen. - if (key_length == 21 && pm_strncasecmp(key_source, (const uint8_t *) "frozen_string_literal", 21) == 0) { - if (semantic_token_seen) { - pm_parser_warn_token(parser, &parser->current, PM_WARN_IGNORED_FROZEN_STRING_LITERAL); - } else { - parser_lex_magic_comment_frozen_string_literal_value(parser, value_start, value_end); + if (key_length == 11) { + if (pm_strncasecmp(key_source, (const uint8_t *) "warn_indent", 11) == 0) { + switch (parser_lex_magic_comment_boolean_value(value_start, value_length)) { + case PM_MAGIC_COMMENT_BOOLEAN_VALUE_INVALID: + PM_PARSER_WARN_TOKEN_FORMAT( + parser, + parser->current, + PM_WARN_INVALID_MAGIC_COMMENT_VALUE, + (int) key_length, + (const char *) key_source, + (int) value_length, + (const char *) value_start + ); + break; + case PM_MAGIC_COMMENT_BOOLEAN_VALUE_FALSE: + parser->warn_mismatched_indentation = false; + break; + case PM_MAGIC_COMMENT_BOOLEAN_VALUE_TRUE: + parser->warn_mismatched_indentation = true; + break; + } } - } - - // If we have hit a ractor pragma, attempt to lex that. - uint32_t value_length = (uint32_t) (value_end - value_start); - if (key_length == 24 && pm_strncasecmp(key_source, (const uint8_t *) "shareable_constant_value", 24) == 0) { - const uint8_t *cursor = parser->current.start; - while ((cursor > parser->start) && ((cursor[-1] == ' ') || (cursor[-1] == '\t'))) cursor--; - - if (!((cursor == parser->start) || (cursor[-1] == '\n'))) { - pm_parser_warn_token(parser, &parser->current, PM_WARN_SHAREABLE_CONSTANT_VALUE_LINE); - } else if (value_length == 4 && pm_strncasecmp(value_start, (const uint8_t *) "none", 4) == 0) { - pm_parser_scope_shareable_constant_set(parser, PM_SCOPE_SHAREABLE_CONSTANT_NONE); - } else if (value_length == 7 && pm_strncasecmp(value_start, (const uint8_t *) "literal", 7) == 0) { - pm_parser_scope_shareable_constant_set(parser, PM_SCOPE_SHAREABLE_CONSTANT_LITERAL); - } else if (value_length == 23 && pm_strncasecmp(value_start, (const uint8_t *) "experimental_everything", 23) == 0) { - pm_parser_scope_shareable_constant_set(parser, PM_SCOPE_SHAREABLE_CONSTANT_EXPERIMENTAL_EVERYTHING); - } else if (value_length == 17 && pm_strncasecmp(value_start, (const uint8_t *) "experimental_copy", 17) == 0) { - pm_parser_scope_shareable_constant_set(parser, PM_SCOPE_SHAREABLE_CONSTANT_EXPERIMENTAL_COPY); - } else { - PM_PARSER_WARN_TOKEN_FORMAT( - parser, - parser->current, - PM_WARN_INVALID_SHAREABLE_CONSTANT_VALUE, - (int) value_length, - (const char *) value_start - ); + } else if (key_length == 21) { + if (pm_strncasecmp(key_source, (const uint8_t *) "frozen_string_literal", 21) == 0) { + // We only want to handle frozen string literal comments if it's + // before any semantic tokens have been seen. + if (semantic_token_seen) { + pm_parser_warn_token(parser, &parser->current, PM_WARN_IGNORED_FROZEN_STRING_LITERAL); + } else { + switch (parser_lex_magic_comment_boolean_value(value_start, value_length)) { + case PM_MAGIC_COMMENT_BOOLEAN_VALUE_INVALID: + PM_PARSER_WARN_TOKEN_FORMAT( + parser, + parser->current, + PM_WARN_INVALID_MAGIC_COMMENT_VALUE, + (int) key_length, + (const char *) key_source, + (int) value_length, + (const char *) value_start + ); + break; + case PM_MAGIC_COMMENT_BOOLEAN_VALUE_FALSE: + parser->frozen_string_literal = PM_OPTIONS_FROZEN_STRING_LITERAL_DISABLED; + break; + case PM_MAGIC_COMMENT_BOOLEAN_VALUE_TRUE: + parser->frozen_string_literal = PM_OPTIONS_FROZEN_STRING_LITERAL_ENABLED; + break; + } + } + } + } else if (key_length == 24) { + if (pm_strncasecmp(key_source, (const uint8_t *) "shareable_constant_value", 24) == 0) { + const uint8_t *cursor = parser->current.start; + while ((cursor > parser->start) && ((cursor[-1] == ' ') || (cursor[-1] == '\t'))) cursor--; + + if (!((cursor == parser->start) || (cursor[-1] == '\n'))) { + pm_parser_warn_token(parser, &parser->current, PM_WARN_SHAREABLE_CONSTANT_VALUE_LINE); + } else if (value_length == 4 && pm_strncasecmp(value_start, (const uint8_t *) "none", 4) == 0) { + pm_parser_scope_shareable_constant_set(parser, PM_SCOPE_SHAREABLE_CONSTANT_NONE); + } else if (value_length == 7 && pm_strncasecmp(value_start, (const uint8_t *) "literal", 7) == 0) { + pm_parser_scope_shareable_constant_set(parser, PM_SCOPE_SHAREABLE_CONSTANT_LITERAL); + } else if (value_length == 23 && pm_strncasecmp(value_start, (const uint8_t *) "experimental_everything", 23) == 0) { + pm_parser_scope_shareable_constant_set(parser, PM_SCOPE_SHAREABLE_CONSTANT_EXPERIMENTAL_EVERYTHING); + } else if (value_length == 17 && pm_strncasecmp(value_start, (const uint8_t *) "experimental_copy", 17) == 0) { + pm_parser_scope_shareable_constant_set(parser, PM_SCOPE_SHAREABLE_CONSTANT_EXPERIMENTAL_COPY); + } else { + PM_PARSER_WARN_TOKEN_FORMAT( + parser, + parser->current, + PM_WARN_INVALID_MAGIC_COMMENT_VALUE, + (int) key_length, + (const char *) key_source, + (int) value_length, + (const char *) value_start + ); + } } } @@ -8462,7 +8513,7 @@ parser_lex_magic_comment(pm_parser_t *parser, bool semantic_token_seen) { magic_comment->key_start = key_start; magic_comment->value_start = value_start; magic_comment->key_length = (uint32_t) key_length; - magic_comment->value_length = (uint32_t) (value_end - value_start); + magic_comment->value_length = value_length; pm_list_append(&parser->magic_comment_list, (pm_list_node_t *) magic_comment); } } @@ -14653,6 +14704,103 @@ parse_parameters( return params; } +/** + * Accepts a parser returns the index of the last newline in the file that was + * ecorded before the current token within the newline list. + */ +static size_t +token_newline_index(const pm_parser_t *parser) { + if (parser->heredoc_end == NULL) { + // This is the common case. In this case we can look at the previously + // recorded newline in the newline list and subtract from the current + // offset. + return parser->newline_list.size - 1; + } else { + // This is unlikely. This is the case that we have already parsed the + // start of a heredoc, so we cannot rely on looking at the previous + // offset of the newline list, and instead must go through the whole + // process of a binary search for the line number. + return (size_t) pm_newline_list_line(&parser->newline_list, parser->current.start, 0); + } +} + +/** + * Accepts a parser, a newline index, and a token and returns the column. The + * important piece of this is that it expands tabs out to the next tab stop. + */ +static int64_t +token_column(const pm_parser_t *parser, size_t newline_index, const pm_token_t *token, bool break_on_non_space) { + const uint8_t *cursor = parser->start + parser->newline_list.offsets[newline_index]; + const uint8_t *end = token->start; + + // Skip over the BOM if it is present. + if ( + newline_index == 0 && + parser->start[0] == 0xef && + parser->start[1] == 0xbb && + parser->start[2] == 0xbf + ) cursor += 3; + + int64_t column = 0; + for (; cursor < end; cursor++) { + switch (*cursor) { + case '\t': + column = ((column / PM_TAB_WHITESPACE_SIZE) + 1) * PM_TAB_WHITESPACE_SIZE; + break; + case ' ': + column++; + break; + default: + column++; + if (break_on_non_space) return -1; + break; + } + } + + return column; +} + +/** + * Accepts a parser, two newline indices, and pointers to two tokens. This + * function warns if the indentation of the two tokens does not match. + */ +static void +parser_warn_indentation_mismatch(pm_parser_t *parser, size_t opening_newline_index, const pm_token_t *opening_token, bool if_after_else) { + // If these warnings are disabled (unlikely), then we can just return. + if (!parser->warn_mismatched_indentation) return; + + // If the tokens are on the same line, we do not warn. + size_t closing_newline_index = token_newline_index(parser); + if (opening_newline_index == closing_newline_index) return; + + // If the opening token has anything other than spaces or tabs before it, + // then we do not warn. This is unless we are matching up an `if`/`end` pair + // and the `if` immediately follows an `else` keyword. + int64_t opening_column = token_column(parser, opening_newline_index, opening_token, !if_after_else); + if (!if_after_else && (opening_column == -1)) return; + + // Get a reference to the closing token off the current parser. This assumes + // that the caller has placed this in the correct position. + pm_token_t *closing_token = &parser->current; + + // If the tokens are at the same indentation, we do not warn. + int64_t closing_column = token_column(parser, closing_newline_index, closing_token, true); + if ((closing_column == -1) || (opening_column == closing_column)) return; + + // Otherwise, add a warning. + PM_PARSER_WARN_FORMAT( + parser, + closing_token->start, + closing_token->end, + PM_WARN_INDENTATION_MISMATCH, + (int) (closing_token->end - closing_token->start), + (const char *) closing_token->start, + (int) (opening_token->end - opening_token->start), + (const char *) opening_token->start, + ((int32_t) opening_newline_index) + parser->start_line + ); +} + typedef enum { PM_RESCUES_BEGIN = 1, PM_RESCUES_BLOCK, @@ -14668,10 +14816,13 @@ typedef enum { * nodes pointing to each other from the top. */ static inline void -parse_rescues(pm_parser_t *parser, pm_begin_node_t *parent_node, pm_rescues_type_t type) { +parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_t *opening, pm_begin_node_t *parent_node, pm_rescues_type_t type) { pm_rescue_node_t *current = NULL; - while (accept1(parser, PM_TOKEN_KEYWORD_RESCUE)) { + while (match1(parser, PM_TOKEN_KEYWORD_RESCUE)) { + if (opening != NULL) parser_warn_indentation_mismatch(parser, opening_newline_index, opening, false); + parser_lex(parser); + pm_rescue_node_t *rescue = pm_rescue_node_create(parser, &parser->previous); switch (parser->current.type) { @@ -14763,17 +14914,25 @@ parse_rescues(pm_parser_t *parser, pm_begin_node_t *parent_node, pm_rescues_type // The end node locations on rescue nodes will not be set correctly // since we won't know the end until we've found all consequent // clauses. This sets the end location on all rescues once we know it. - if (current) { + if (current != NULL) { const uint8_t *end_to_set = current->base.location.end; - current = parent_node->rescue_clause; - while (current) { - current->base.location.end = end_to_set; - current = current->consequent; + pm_rescue_node_t *clause = parent_node->rescue_clause; + + while (clause != NULL) { + clause->base.location.end = end_to_set; + clause = clause->consequent; } } - if (accept1(parser, PM_TOKEN_KEYWORD_ELSE)) { - pm_token_t else_keyword = parser->previous; + pm_token_t else_keyword; + if (match1(parser, PM_TOKEN_KEYWORD_ELSE)) { + if (opening != NULL) parser_warn_indentation_mismatch(parser, opening_newline_index, opening, false); + opening_newline_index = token_newline_index(parser); + + else_keyword = parser->current; + opening = &else_keyword; + + parser_lex(parser); accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); pm_statements_node_t *else_statements = NULL; @@ -14800,10 +14959,17 @@ parse_rescues(pm_parser_t *parser, pm_begin_node_t *parent_node, pm_rescues_type pm_else_node_t *else_clause = pm_else_node_create(parser, &else_keyword, else_statements, &parser->current); pm_begin_node_else_clause_set(parent_node, else_clause); + + // If we don't have a `current` rescue node, then this is a dangling + // else, and it's an error. + if (current == NULL) pm_parser_err_node(parser, (pm_node_t *) else_clause, PM_ERR_BEGIN_LONELY_ELSE); } - if (accept1(parser, PM_TOKEN_KEYWORD_ENSURE)) { - pm_token_t ensure_keyword = parser->previous; + if (match1(parser, PM_TOKEN_KEYWORD_ENSURE)) { + if (opening != NULL) parser_warn_indentation_mismatch(parser, opening_newline_index, opening, false); + pm_token_t ensure_keyword = parser->current; + + parser_lex(parser); accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); pm_statements_node_t *ensure_statements = NULL; @@ -14832,7 +14998,8 @@ parse_rescues(pm_parser_t *parser, pm_begin_node_t *parent_node, pm_rescues_type pm_begin_node_ensure_clause_set(parent_node, ensure_clause); } - if (parser->current.type == PM_TOKEN_KEYWORD_END) { + if (match1(parser, PM_TOKEN_KEYWORD_END)) { + if (opening != NULL) parser_warn_indentation_mismatch(parser, opening_newline_index, opening, false); pm_begin_node_end_keyword_set(parent_node, &parser->current); } else { pm_token_t end_keyword = (pm_token_t) { .type = PM_TOKEN_MISSING, .start = parser->previous.end, .end = parser->previous.end }; @@ -14845,11 +15012,11 @@ parse_rescues(pm_parser_t *parser, pm_begin_node_t *parent_node, pm_rescues_type * class, module, def, etc.). */ static pm_begin_node_t * -parse_rescues_implicit_begin(pm_parser_t *parser, const uint8_t *start, pm_statements_node_t *statements, pm_rescues_type_t type) { +parse_rescues_implicit_begin(pm_parser_t *parser, size_t opening_newline_index, const pm_token_t *opening, const uint8_t *start, pm_statements_node_t *statements, pm_rescues_type_t type) { pm_token_t begin_keyword = not_provided(parser); pm_begin_node_t *node = pm_begin_node_create(parser, &begin_keyword, statements); - parse_rescues(parser, node, type); + parse_rescues(parser, opening_newline_index, opening, node, type); node->base.location.start = start; return node; @@ -15070,7 +15237,7 @@ parse_block(pm_parser_t *parser) { if (match2(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE)) { assert(statements == NULL || PM_NODE_TYPE_P(statements, PM_STATEMENTS_NODE)); - statements = (pm_node_t *) parse_rescues_implicit_begin(parser, opening.start, (pm_statements_node_t *) statements, PM_RESCUES_BLOCK); + statements = (pm_node_t *) parse_rescues_implicit_begin(parser, 0, NULL, opening.start, (pm_statements_node_t *) statements, PM_RESCUES_BLOCK); } } @@ -15340,7 +15507,7 @@ parse_predicate(pm_parser_t *parser, pm_binding_power_t binding_power, pm_contex } static inline pm_node_t * -parse_conditional(pm_parser_t *parser, pm_context_t context) { +parse_conditional(pm_parser_t *parser, pm_context_t context, size_t opening_newline_index, bool if_after_else) { pm_node_list_t current_block_exits = { 0 }; pm_node_list_t *previous_block_exits = push_block_exits(parser, ¤t_block_exits); @@ -15382,6 +15549,7 @@ parse_conditional(pm_parser_t *parser, pm_context_t context) { PM_PARSER_WARN_TOKEN_FORMAT_CONTENT(parser, parser->current, PM_WARN_KEYWORD_EOL); } + parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false); pm_token_t elsif_keyword = parser->current; parser_lex(parser); @@ -15399,6 +15567,9 @@ parse_conditional(pm_parser_t *parser, pm_context_t context) { } if (match1(parser, PM_TOKEN_KEYWORD_ELSE)) { + parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false); + opening_newline_index = token_newline_index(parser); + parser_lex(parser); pm_token_t else_keyword = parser->previous; @@ -15407,6 +15578,7 @@ parse_conditional(pm_parser_t *parser, pm_context_t context) { pm_accepts_block_stack_pop(parser); accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); + parser_warn_indentation_mismatch(parser, opening_newline_index, &else_keyword, false); expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CONDITIONAL_TERM_ELSE); pm_else_node_t *else_node = pm_else_node_create(parser, &else_keyword, else_statements, &parser->previous); @@ -15423,8 +15595,7 @@ parse_conditional(pm_parser_t *parser, pm_context_t context) { break; } } else { - // We should specialize this error message to refer to 'if' or 'unless' - // explicitly. + parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, if_after_else); expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CONDITIONAL_TERM); } @@ -18190,7 +18361,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } } case PM_TOKEN_KEYWORD_CASE: { + size_t opening_newline_index = token_newline_index(parser); parser_lex(parser); + pm_token_t case_keyword = parser->previous; pm_node_t *predicate = NULL; @@ -18209,7 +18382,10 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b while (accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON)); } - if (accept1(parser, PM_TOKEN_KEYWORD_END)) { + if (match1(parser, PM_TOKEN_KEYWORD_END)) { + parser_warn_indentation_mismatch(parser, opening_newline_index, &case_keyword, false); + parser_lex(parser); + pop_block_exits(parser, previous_block_exits); pm_node_list_free(¤t_block_exits); @@ -18229,7 +18405,10 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // At this point we've seen a when keyword, so we know this is a // case-when node. We will continue to parse the when nodes // until we hit the end of the list. - while (accept1(parser, PM_TOKEN_KEYWORD_WHEN)) { + while (match1(parser, PM_TOKEN_KEYWORD_WHEN)) { + parser_warn_indentation_mismatch(parser, opening_newline_index, &case_keyword, false); + parser_lex(parser); + pm_token_t when_keyword = parser->previous; pm_when_node_t *when_node = pm_when_node_create(parser, &when_keyword); @@ -18302,6 +18481,8 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // will continue to parse the in nodes until we hit the end of // the list. while (match1(parser, PM_TOKEN_KEYWORD_IN)) { + parser_warn_indentation_mismatch(parser, opening_newline_index, &case_keyword, false); + bool previous_pattern_matching_newlines = parser->pattern_matching_newlines; parser->pattern_matching_newlines = true; @@ -18387,7 +18568,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } } + parser_warn_indentation_mismatch(parser, opening_newline_index, &case_keyword, false); expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CASE_TERM); + if (PM_NODE_TYPE_P(node, PM_CASE_NODE)) { pm_case_node_end_keyword_loc_set((pm_case_node_t *) node, &parser->previous); } else { @@ -18400,6 +18583,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b return node; } case PM_TOKEN_KEYWORD_BEGIN: { + size_t opening_newline_index = token_newline_index(parser); parser_lex(parser); pm_token_t begin_keyword = parser->previous; @@ -18409,7 +18593,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_node_list_t *previous_block_exits = push_block_exits(parser, ¤t_block_exits); pm_statements_node_t *begin_statements = NULL; - if (!match3(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_END)) { + if (!match4(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); begin_statements = parse_statements(parser, PM_CONTEXT_BEGIN); pm_accepts_block_stack_pop(parser); @@ -18417,16 +18601,12 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } pm_begin_node_t *begin_node = pm_begin_node_create(parser, &begin_keyword, begin_statements); - parse_rescues(parser, begin_node, PM_RESCUES_BEGIN); - + parse_rescues(parser, opening_newline_index, &begin_keyword, begin_node, PM_RESCUES_BEGIN); expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_BEGIN_TERM); + begin_node->base.location.end = parser->previous.end; pm_begin_node_end_keyword_set(begin_node, &parser->previous); - if ((begin_node->else_clause != NULL) && (begin_node->rescue_clause == NULL)) { - pm_parser_err_node(parser, (pm_node_t *) begin_node->else_clause, PM_ERR_BEGIN_LONELY_ELSE); - } - pop_block_exits(parser, previous_block_exits); pm_node_list_free(¤t_block_exits); @@ -18542,7 +18722,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b return node; } case PM_TOKEN_KEYWORD_CLASS: { + size_t opening_newline_index = token_newline_index(parser); parser_lex(parser); + pm_token_t class_keyword = parser->previous; pm_do_loop_stack_push(parser, false); @@ -18557,7 +18739,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); pm_node_t *statements = NULL; - if (!match3(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_END)) { + if (!match4(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_SCLASS); pm_accepts_block_stack_pop(parser); @@ -18565,7 +18747,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (match2(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE)) { assert(statements == NULL || PM_NODE_TYPE_P(statements, PM_STATEMENTS_NODE)); - statements = (pm_node_t *) parse_rescues_implicit_begin(parser, class_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_SCLASS); + statements = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &class_keyword, class_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_SCLASS); + } else { + parser_warn_indentation_mismatch(parser, opening_newline_index, &class_keyword, false); } expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CLASS_TERM); @@ -18613,7 +18797,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } pm_node_t *statements = NULL; - if (!match3(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_END)) { + if (!match4(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_CLASS); pm_accepts_block_stack_pop(parser); @@ -18621,7 +18805,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (match2(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE)) { assert(statements == NULL || PM_NODE_TYPE_P(statements, PM_STATEMENTS_NODE)); - statements = (pm_node_t *) parse_rescues_implicit_begin(parser, class_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_CLASS); + statements = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &class_keyword, class_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_CLASS); + } else { + parser_warn_indentation_mismatch(parser, opening_newline_index, &class_keyword, false); } expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CLASS_TERM); @@ -18650,6 +18836,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_node_list_t *previous_block_exits = push_block_exits(parser, ¤t_block_exits); pm_token_t def_keyword = parser->current; + size_t opening_newline_index = token_newline_index(parser); pm_node_t *receiver = NULL; pm_token_t operator = not_provided(parser); @@ -18881,19 +19068,22 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_accepts_block_stack_push(parser, true); pm_do_loop_stack_push(parser, false); - if (!match3(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_END)) { + if (!match4(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_DEF); pm_accepts_block_stack_pop(parser); } - if (match2(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE)) { + if (match3(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE)) { assert(statements == NULL || PM_NODE_TYPE_P(statements, PM_STATEMENTS_NODE)); - statements = (pm_node_t *) parse_rescues_implicit_begin(parser, def_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_DEF); + statements = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &def_keyword, def_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_DEF); + } else { + parser_warn_indentation_mismatch(parser, opening_newline_index, &def_keyword, false); } pm_accepts_block_stack_pop(parser); pm_do_loop_stack_pop(parser); + expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_DEF_TERM); end_keyword = parser->previous; } @@ -18984,9 +19174,11 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } case PM_TOKEN_KEYWORD_FALSE: parser_lex(parser); - return (pm_node_t *)pm_false_node_create(parser, &parser->previous); + return (pm_node_t *) pm_false_node_create(parser, &parser->previous); case PM_TOKEN_KEYWORD_FOR: { + size_t opening_newline_index = token_newline_index(parser); parser_lex(parser); + pm_token_t for_keyword = parser->previous; pm_node_t *index; @@ -19033,13 +19225,15 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } accept2(parser, PM_TOKEN_SEMICOLON, PM_TOKEN_NEWLINE); - pm_statements_node_t *statements = NULL; - if (!accept1(parser, PM_TOKEN_KEYWORD_END)) { + pm_statements_node_t *statements = NULL; + if (!match1(parser, PM_TOKEN_KEYWORD_END)) { statements = parse_statements(parser, PM_CONTEXT_FOR); - expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_FOR_TERM); } + parser_warn_indentation_mismatch(parser, opening_newline_index, &for_keyword, false); + expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_FOR_TERM); + return (pm_node_t *) pm_for_node_create(parser, index, collection, statements, &for_keyword, &in_keyword, &do_keyword, &parser->previous); } case PM_TOKEN_KEYWORD_IF: @@ -19047,8 +19241,11 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b PM_PARSER_WARN_TOKEN_FORMAT_CONTENT(parser, parser->current, PM_WARN_KEYWORD_EOL); } + size_t opening_newline_index = token_newline_index(parser); + bool if_after_else = parser->previous.type == PM_TOKEN_KEYWORD_ELSE; parser_lex(parser); - return parse_conditional(parser, PM_CONTEXT_IF); + + return parse_conditional(parser, PM_CONTEXT_IF, opening_newline_index, if_after_else); case PM_TOKEN_KEYWORD_UNDEF: { if (binding_power != PM_BINDING_POWER_STATEMENT) { pm_parser_err_current(parser, PM_ERR_STATEMENT_UNDEF); @@ -19108,13 +19305,17 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b return (pm_node_t *) pm_call_node_not_create(parser, receiver, &message, &arguments); } - case PM_TOKEN_KEYWORD_UNLESS: + case PM_TOKEN_KEYWORD_UNLESS: { + size_t opening_newline_index = token_newline_index(parser); parser_lex(parser); - return parse_conditional(parser, PM_CONTEXT_UNLESS); + + return parse_conditional(parser, PM_CONTEXT_UNLESS, opening_newline_index, false); + } case PM_TOKEN_KEYWORD_MODULE: { pm_node_list_t current_block_exits = { 0 }; pm_node_list_t *previous_block_exits = push_block_exits(parser, ¤t_block_exits); + size_t opening_newline_index = token_newline_index(parser); parser_lex(parser); pm_token_t module_keyword = parser->previous; @@ -19150,15 +19351,17 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b accept2(parser, PM_TOKEN_SEMICOLON, PM_TOKEN_NEWLINE); pm_node_t *statements = NULL; - if (!match3(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_END)) { + if (!match4(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_MODULE); pm_accepts_block_stack_pop(parser); } - if (match2(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE)) { + if (match3(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE)) { assert(statements == NULL || PM_NODE_TYPE_P(statements, PM_STATEMENTS_NODE)); - statements = (pm_node_t *) parse_rescues_implicit_begin(parser, module_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_MODULE); + statements = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &module_keyword, module_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_MODULE); + } else { + parser_warn_indentation_mismatch(parser, opening_newline_index, &module_keyword, false); } pm_constant_id_list_t locals; @@ -19202,6 +19405,8 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); return (pm_node_t *) pm_true_node_create(parser, &parser->previous); case PM_TOKEN_KEYWORD_UNTIL: { + size_t opening_newline_index = token_newline_index(parser); + context_push(parser, PM_CONTEXT_LOOP_PREDICATE); pm_do_loop_stack_push(parser, true); @@ -19215,17 +19420,21 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b expect3(parser, PM_TOKEN_KEYWORD_DO_LOOP, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON, PM_ERR_CONDITIONAL_UNTIL_PREDICATE); pm_statements_node_t *statements = NULL; - if (!accept1(parser, PM_TOKEN_KEYWORD_END)) { + if (!match1(parser, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); statements = parse_statements(parser, PM_CONTEXT_UNTIL); pm_accepts_block_stack_pop(parser); accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); - expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_UNTIL_TERM); } + parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false); + expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_UNTIL_TERM); + return (pm_node_t *) pm_until_node_create(parser, &keyword, &parser->previous, predicate, statements, 0); } case PM_TOKEN_KEYWORD_WHILE: { + size_t opening_newline_index = token_newline_index(parser); + context_push(parser, PM_CONTEXT_LOOP_PREDICATE); pm_do_loop_stack_push(parser, true); @@ -19239,14 +19448,16 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b expect3(parser, PM_TOKEN_KEYWORD_DO_LOOP, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON, PM_ERR_CONDITIONAL_WHILE_PREDICATE); pm_statements_node_t *statements = NULL; - if (!accept1(parser, PM_TOKEN_KEYWORD_END)) { + if (!match1(parser, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); statements = parse_statements(parser, PM_CONTEXT_WHILE); pm_accepts_block_stack_pop(parser); accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); - expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_WHILE_TERM); } + parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false); + expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_WHILE_TERM); + return (pm_node_t *) pm_while_node_create(parser, &keyword, &parser->previous, predicate, statements, 0); } case PM_TOKEN_PERCENT_LOWER_I: { @@ -19887,6 +20098,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b int previous_lambda_enclosure_nesting = parser->lambda_enclosure_nesting; parser->lambda_enclosure_nesting = parser->enclosure_nesting; + size_t opening_newline_index = token_newline_index(parser); pm_accepts_block_stack_push(parser, true); parser_lex(parser); @@ -19932,10 +20144,12 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (accept1(parser, PM_TOKEN_LAMBDA_BEGIN)) { opening = parser->previous; - if (!accept1(parser, PM_TOKEN_BRACE_RIGHT)) { + if (!match1(parser, PM_TOKEN_BRACE_RIGHT)) { body = (pm_node_t *) parse_statements(parser, PM_CONTEXT_LAMBDA_BRACES); - expect1(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_LAMBDA_TERM_BRACE); } + + parser_warn_indentation_mismatch(parser, opening_newline_index, &operator, false); + expect1(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_LAMBDA_TERM_BRACE); } else { expect1(parser, PM_TOKEN_KEYWORD_DO, PM_ERR_LAMBDA_OPEN); opening = parser->previous; @@ -19948,7 +20162,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (match2(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE)) { assert(body == NULL || PM_NODE_TYPE_P(body, PM_STATEMENTS_NODE)); - body = (pm_node_t *) parse_rescues_implicit_begin(parser, opening.start, (pm_statements_node_t *) body, PM_RESCUES_LAMBDA); + body = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &operator, opening.start, (pm_statements_node_t *) body, PM_RESCUES_LAMBDA); + } else { + parser_warn_indentation_mismatch(parser, opening_newline_index, &operator, false); } expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_LAMBDA_TERM_END); @@ -21473,7 +21689,8 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm .current_block_exits = NULL, .semantic_token_seen = false, .frozen_string_literal = PM_OPTIONS_FROZEN_STRING_LITERAL_UNSET, - .current_regular_expression_ascii_only = false + .current_regular_expression_ascii_only = false, + .warn_mismatched_indentation = true }; // Initialize the constant pool. We're going to completely guess as to the diff --git a/templates/src/diagnostic.c.erb b/templates/src/diagnostic.c.erb index 064063d9f46..5e6858ac616 100644 --- a/templates/src/diagnostic.c.erb +++ b/templates/src/diagnostic.c.erb @@ -380,9 +380,10 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_WARN_END_IN_METHOD] = { "END in method; use at_exit", PM_WARNING_LEVEL_DEFAULT }, [PM_WARN_FLOAT_OUT_OF_RANGE] = { "Float %.*s%s out of range", PM_WARNING_LEVEL_VERBOSE }, [PM_WARN_IGNORED_FROZEN_STRING_LITERAL] = { "'frozen_string_literal' is ignored after any tokens", PM_WARNING_LEVEL_VERBOSE }, + [PM_WARN_INDENTATION_MISMATCH] = { "mismatched indentations at '%.*s' with '%.*s' at %" PRIi32, PM_WARNING_LEVEL_VERBOSE }, [PM_WARN_INTEGER_IN_FLIP_FLOP] = { "integer literal in flip-flop", PM_WARNING_LEVEL_DEFAULT }, [PM_WARN_INVALID_CHARACTER] = { "invalid character syntax; use %s%s%s", PM_WARNING_LEVEL_DEFAULT }, - [PM_WARN_INVALID_SHAREABLE_CONSTANT_VALUE] = { "invalid value for shareable_constant_value: %.*s", PM_WARNING_LEVEL_VERBOSE }, + [PM_WARN_INVALID_MAGIC_COMMENT_VALUE] = { "invalid value for %.*s: %.*s", PM_WARNING_LEVEL_VERBOSE }, [PM_WARN_INVALID_NUMBERED_REFERENCE] = { "'%.*s' is too big for a number variable, always nil", PM_WARNING_LEVEL_DEFAULT }, [PM_WARN_KEYWORD_EOL] = { "`%.*s` at the end of line without an expression", PM_WARNING_LEVEL_VERBOSE }, [PM_WARN_LITERAL_IN_CONDITION_DEFAULT] = { "%sliteral in %s", PM_WARNING_LEVEL_DEFAULT }, diff --git a/test/prism/result/warnings_test.rb b/test/prism/result/warnings_test.rb index c147616a6a4..8ccaec74ed6 100644 --- a/test/prism/result/warnings_test.rb +++ b/test/prism/result/warnings_test.rb @@ -71,6 +71,64 @@ def test_float_out_of_range assert_warning("_ = 1.0e100000", "out of range") end + def test_indentation_mismatch + assert_warning("if true\n end", "mismatched indentations at 'end' with 'if'") + assert_warning("if true\n elsif true\nend", "mismatched indentations at 'elsif' with 'if'") + assert_warning("if true\n else\nend", "mismatched indentations at 'else' with 'if'", "mismatched indentations at 'end' with 'else'") + + assert_warning("unless true\n end", "mismatched indentations at 'end' with 'unless'") + assert_warning("unless true\n else\nend", "mismatched indentations at 'else' with 'unless'", "mismatched indentations at 'end' with 'else'") + + assert_warning("while true\n end", "mismatched indentations at 'end' with 'while'") + assert_warning("until true\n end", "mismatched indentations at 'end' with 'until'") + + assert_warning("begin\n end", "mismatched indentations at 'end' with 'begin'") + assert_warning("begin\n rescue\nend", "mismatched indentations at 'rescue' with 'begin'") + assert_warning("begin\n ensure\nend", "mismatched indentations at 'ensure' with 'begin'") + assert_warning("begin\nrescue\n else\nend", "mismatched indentations at 'else' with 'begin'", "mismatched indentations at 'end' with 'else'") + assert_warning("begin\n rescue\n ensure\n end", "mismatched indentations at 'rescue' with 'begin'", "mismatched indentations at 'ensure' with 'begin'", "mismatched indentations at 'end' with 'begin'"); + + assert_warning("def foo\n end", "mismatched indentations at 'end' with 'def'") + assert_warning("def foo\n rescue\nend", "mismatched indentations at 'rescue' with 'def'") + assert_warning("def foo\n ensure\nend", "mismatched indentations at 'ensure' with 'def'") + assert_warning("def foo\nrescue\n else\nend", "mismatched indentations at 'else' with 'def'", "mismatched indentations at 'end' with 'else'") + assert_warning("def foo\n rescue\n ensure\n end", "mismatched indentations at 'rescue' with 'def'", "mismatched indentations at 'ensure' with 'def'", "mismatched indentations at 'end' with 'def'"); + + assert_warning("class Foo\n end", "mismatched indentations at 'end' with 'class'") + assert_warning("class Foo\n rescue\nend", "mismatched indentations at 'rescue' with 'class'") + assert_warning("class Foo\n ensure\nend", "mismatched indentations at 'ensure' with 'class'") + assert_warning("class Foo\nrescue\n else\nend", "mismatched indentations at 'else' with 'class'", "mismatched indentations at 'end' with 'else'") + assert_warning("class Foo\n rescue\n ensure\n end", "mismatched indentations at 'rescue' with 'class'", "mismatched indentations at 'ensure' with 'class'", "mismatched indentations at 'end' with 'class'"); + + assert_warning("module Foo\n end", "mismatched indentations at 'end' with 'module'") + assert_warning("module Foo\n rescue\nend", "mismatched indentations at 'rescue' with 'module'") + assert_warning("module Foo\n ensure\nend", "mismatched indentations at 'ensure' with 'module'") + assert_warning("module Foo\nrescue\n else\nend", "mismatched indentations at 'else' with 'module'", "mismatched indentations at 'end' with 'else'") + assert_warning("module Foo\n rescue\n ensure\n end", "mismatched indentations at 'rescue' with 'module'", "mismatched indentations at 'ensure' with 'module'", "mismatched indentations at 'end' with 'module'"); + + assert_warning("class << foo\n end", "mismatched indentations at 'end' with 'class'") + assert_warning("class << foo\n rescue\nend", "mismatched indentations at 'rescue' with 'class'") + assert_warning("class << foo\n ensure\nend", "mismatched indentations at 'ensure' with 'class'") + assert_warning("class << foo\nrescue\n else\nend", "mismatched indentations at 'else' with 'class'", "mismatched indentations at 'end' with 'else'") + assert_warning("class << foo\n rescue\n ensure\n end", "mismatched indentations at 'rescue' with 'class'", "mismatched indentations at 'ensure' with 'class'", "mismatched indentations at 'end' with 'class'"); + + assert_warning("case 1; when 2\n end", "mismatched indentations at 'end' with 'case'") + assert_warning("case 1; in 2\n end", "mismatched indentations at 'end' with 'case'") + + assert_warning("-> {\n }", "mismatched indentations at '}' with '->'") + assert_warning("-> do\n end", "mismatched indentations at 'end' with '->'") + assert_warning("-> do\n rescue\nend", "mismatched indentations at 'rescue' with '->'") + assert_warning("-> do\n ensure\nend", "mismatched indentations at 'ensure' with '->'") + assert_warning("-> do\nrescue\n else\nend", "mismatched indentations at 'else' with '->'", "mismatched indentations at 'end' with 'else'") + assert_warning("-> do\n rescue\n ensure\n end", "mismatched indentations at 'rescue' with '->'", "mismatched indentations at 'ensure' with '->'", "mismatched indentations at 'end' with '->'"); + assert_warning("foo do\nrescue\n else\nend", "mismatched indentations at 'end' with 'else'") + + refute_warning("class Foo; end") # same line + refute_warning("; class Foo\nend") # non whitespace on opening line + refute_warning("\tclass Foo\n end") # tab stop matches space + refute_warning(" \tclass Foo\n end") # tab stop matches space + end + def test_integer_in_flip_flop assert_warning("1 if 2..foo", "integer") end @@ -275,14 +333,17 @@ def test_warnings_verbosity private - def assert_warning(source, message) + def assert_warning(source, *messages) warnings = Prism.parse(source).warnings + assert_equal messages.length, warnings.length, "Expected #{messages.length} warning(s) in #{source.inspect}, got #{warnings.map(&:message).inspect}" - assert_equal 1, warnings.length, "Expected only one warning in #{source.inspect}, got #{warnings.map(&:message).inspect}" - assert_include warnings.first.message, message + warnings.zip(messages).each do |warning, message| + assert_include warning.message, message + end if defined?(RubyVM::AbstractSyntaxTree) - assert_include capture_warning { RubyVM::AbstractSyntaxTree.parse(source) }, message + stderr = capture_stderr { RubyVM::AbstractSyntaxTree.parse(source) } + messages.each { |message| assert_include stderr, message } end end @@ -290,11 +351,11 @@ def refute_warning(source, compare: true, **options) assert_empty Prism.parse(source, **options).warnings if compare && defined?(RubyVM::AbstractSyntaxTree) - assert_empty capture_warning { RubyVM::AbstractSyntaxTree.parse(source) } + assert_empty capture_stderr { RubyVM::AbstractSyntaxTree.parse(source) } end end - def capture_warning + def capture_stderr stderr, $stderr, verbose, $VERBOSE = $stderr, StringIO.new, $VERBOSE, true begin From 4c554097940d58990acc8abdd77f9df0c0fd72d7 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Mon, 22 Jul 2024 15:08:34 -0400 Subject: [PATCH 060/109] Ignore shebangs in evals --- src/prism.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/prism.c b/src/prism.c index 1f63b89e541..55f7eb22c53 100644 --- a/src/prism.c +++ b/src/prism.c @@ -21797,7 +21797,7 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm pm_parser_warn_shebang_carriage_return(parser, parser->start, length); if (newline != NULL) parser->encoding_comment_start = newline + 1; search_shebang = false; - } else { + } else if (!parser->parsing_eval) { search_shebang = true; } } From c9bc398b4b2c673c822d4093ffd03bac1efe9173 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?fn=20=E2=8C=83=20=E2=8C=A5?= <70830482+FnControlOption@users.noreply.github.com> Date: Wed, 17 Jul 2024 16:41:50 -0700 Subject: [PATCH 061/109] Implement string field accessors in Rust crate --- rust/ruby-prism-sys/build/vendored.rs | 5 +++++ rust/ruby-prism/build.rs | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/rust/ruby-prism-sys/build/vendored.rs b/rust/ruby-prism-sys/build/vendored.rs index 122fd3e265c..670df42d50a 100644 --- a/rust/ruby-prism-sys/build/vendored.rs +++ b/rust/ruby-prism-sys/build/vendored.rs @@ -74,6 +74,11 @@ fn version() -> &'static str { env!("CARGO_PKG_VERSION") } +/// Generated by running the following command: +/// +/// ```sh +/// bundle exec rake cargo:build +/// ``` fn vendor_dir() -> PathBuf { let prism_dir = format!("prism-{}", version()); Path::new(env!("CARGO_MANIFEST_DIR")).join("vendor").join(prism_dir) diff --git a/rust/ruby-prism/build.rs b/rust/ruby-prism/build.rs index f1f1cb696dc..fb3dd79a6e2 100644 --- a/rust/ruby-prism/build.rs +++ b/rust/ruby-prism/build.rs @@ -51,6 +51,7 @@ enum NodeFieldType { #[serde(untagged)] enum NodeFieldKind { Concrete(String), + #[allow(dead_code)] Union(Vec), } @@ -304,8 +305,13 @@ fn write_node(file: &mut File, flags: &[Flags], node: &Node) -> Result<(), Box { - writeln!(file, " pub const fn {}(&self) -> &str {{", field.name)?; - writeln!(file, " \"\"")?; + writeln!(file, " pub fn {}(&self) -> &str {{", field.name)?; + writeln!(file, " unsafe {{")?; + writeln!(file, " let source = (*self.pointer).{}.source;", field.name)?; + writeln!(file, " let length = (*self.pointer).{}.length;", field.name)?; + writeln!(file, " let slice = std::slice::from_raw_parts(source, length);")?; + writeln!(file, " std::str::from_utf8_unchecked(slice)")?; + writeln!(file, " }}")?; writeln!(file, " }}")?; }, NodeFieldType::Constant => { From cb09d41d51bf9feff5448361f024fd2864958e7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?fn=20=E2=8C=83=20=E2=8C=A5?= <70830482+FnControlOption@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:09:04 -0700 Subject: [PATCH 062/109] Update build.rs --- rust/ruby-prism/build.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/rust/ruby-prism/build.rs b/rust/ruby-prism/build.rs index fb3dd79a6e2..c8618815c51 100644 --- a/rust/ruby-prism/build.rs +++ b/rust/ruby-prism/build.rs @@ -51,7 +51,6 @@ enum NodeFieldType { #[serde(untagged)] enum NodeFieldKind { Concrete(String), - #[allow(dead_code)] Union(Vec), } @@ -305,12 +304,11 @@ fn write_node(file: &mut File, flags: &[Flags], node: &Node) -> Result<(), Box { - writeln!(file, " pub fn {}(&self) -> &str {{", field.name)?; + writeln!(file, " pub fn {}(&self) -> &[u8] {{", field.name)?; writeln!(file, " unsafe {{")?; writeln!(file, " let source = (*self.pointer).{}.source;", field.name)?; writeln!(file, " let length = (*self.pointer).{}.length;", field.name)?; - writeln!(file, " let slice = std::slice::from_raw_parts(source, length);")?; - writeln!(file, " std::str::from_utf8_unchecked(slice)")?; + writeln!(file, " std::slice::from_raw_parts(source, length)")?; writeln!(file, " }}")?; writeln!(file, " }}")?; }, From 3d39b7961f4081afbd2942cbd2fca54d7de1f60b Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 23 Jul 2024 10:07:05 -0400 Subject: [PATCH 063/109] Recurse upward to detect invalid returns --- src/prism.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 80 insertions(+), 7 deletions(-) diff --git a/src/prism.c b/src/prism.c index 55f7eb22c53..1e2f71cf28e 100644 --- a/src/prism.c +++ b/src/prism.c @@ -15336,6 +15336,83 @@ parse_arguments_list(pm_parser_t *parser, pm_arguments_t *arguments, bool accept return found; } +/** + * Check that the return is allowed in the current context. If it isn't, add an + * error to the parser. + */ +static void +parse_return(pm_parser_t *parser, pm_node_t *node) { + for (pm_context_node_t *context_node = parser->current_context; context_node != NULL; context_node = context_node->prev) { + switch (context_node->context) { + case PM_CONTEXT_BEGIN_ELSE: + case PM_CONTEXT_BEGIN_ENSURE: + case PM_CONTEXT_BEGIN_RESCUE: + case PM_CONTEXT_BEGIN: + case PM_CONTEXT_CASE_IN: + case PM_CONTEXT_CASE_WHEN: + case PM_CONTEXT_DEFAULT_PARAMS: + case PM_CONTEXT_DEF_PARAMS: + case PM_CONTEXT_DEFINED: + case PM_CONTEXT_ELSE: + case PM_CONTEXT_ELSIF: + case PM_CONTEXT_EMBEXPR: + case PM_CONTEXT_FOR_INDEX: + case PM_CONTEXT_FOR: + case PM_CONTEXT_IF: + case PM_CONTEXT_LOOP_PREDICATE: + case PM_CONTEXT_MAIN: + case PM_CONTEXT_PARENS: + case PM_CONTEXT_POSTEXE: + case PM_CONTEXT_PREDICATE: + case PM_CONTEXT_PREEXE: + case PM_CONTEXT_RESCUE_MODIFIER: + case PM_CONTEXT_SCLASS_ELSE: + case PM_CONTEXT_SCLASS_ENSURE: + case PM_CONTEXT_SCLASS_RESCUE: + case PM_CONTEXT_SCLASS: + case PM_CONTEXT_TERNARY: + case PM_CONTEXT_UNLESS: + case PM_CONTEXT_UNTIL: + case PM_CONTEXT_WHILE: + // Keep iterating up the lists of contexts, because returns can + // see through these. + continue; + case PM_CONTEXT_CLASS_ELSE: + case PM_CONTEXT_CLASS_ENSURE: + case PM_CONTEXT_CLASS_RESCUE: + case PM_CONTEXT_CLASS: + case PM_CONTEXT_MODULE_ELSE: + case PM_CONTEXT_MODULE_ENSURE: + case PM_CONTEXT_MODULE_RESCUE: + case PM_CONTEXT_MODULE: + // These contexts are invalid for a return. + pm_parser_err_node(parser, node, PM_ERR_RETURN_INVALID); + return; + case PM_CONTEXT_BLOCK_BRACES: + case PM_CONTEXT_BLOCK_ELSE: + case PM_CONTEXT_BLOCK_ENSURE: + case PM_CONTEXT_BLOCK_KEYWORDS: + case PM_CONTEXT_BLOCK_RESCUE: + case PM_CONTEXT_DEF_ELSE: + case PM_CONTEXT_DEF_ENSURE: + case PM_CONTEXT_DEF_RESCUE: + case PM_CONTEXT_DEF: + case PM_CONTEXT_LAMBDA_BRACES: + case PM_CONTEXT_LAMBDA_DO_END: + case PM_CONTEXT_LAMBDA_ELSE: + case PM_CONTEXT_LAMBDA_ENSURE: + case PM_CONTEXT_LAMBDA_RESCUE: + // These contexts are valid for a return, and we should not + // continue to loop. + return; + case PM_CONTEXT_NONE: + // This case should never happen. + assert(false && "unreachable"); + break; + } + } +} + /** * Check that the block exit (next, break, redo) is allowed in the current * context. If it isn't, add an error to the parser. @@ -18669,13 +18746,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b return node; } case PM_TOKEN_KEYWORD_RETURN: { - if ( - (parser->current_context->context == PM_CONTEXT_CLASS) || - (parser->current_context->context == PM_CONTEXT_MODULE) - ) { - pm_parser_err_previous(parser, PM_ERR_RETURN_INVALID); - } - return (pm_node_t *) pm_return_node_create(parser, &keyword, arguments.arguments); + pm_node_t *node = (pm_node_t *) pm_return_node_create(parser, &keyword, arguments.arguments); + parse_return(parser, node); + return node; } default: assert(false && "unreachable"); From 18a8597276e32cb648b04baf21724457ca30096b Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 23 Jul 2024 14:33:00 -0400 Subject: [PATCH 064/109] Single line method bodies should not be marked as newline --- src/prism.c | 32 +++++++++---------- test/prism/snapshots/command_method_call.txt | 2 +- test/prism/snapshots/endless_methods.txt | 6 ++-- test/prism/snapshots/methods.txt | 14 ++++---- test/prism/snapshots/regex.txt | 2 +- test/prism/snapshots/rescue.txt | 2 +- .../seattlerb/defn_endless_command.txt | 2 +- .../seattlerb/defn_endless_command_rescue.txt | 2 +- .../snapshots/seattlerb/defn_oneliner.txt | 2 +- .../snapshots/seattlerb/defn_oneliner_eq2.txt | 2 +- .../seattlerb/defn_oneliner_noargs.txt | 2 +- .../defn_oneliner_noargs_parentheses.txt | 2 +- .../seattlerb/defn_oneliner_rescue.txt | 2 +- .../seattlerb/defs_endless_command.txt | 2 +- .../seattlerb/defs_endless_command_rescue.txt | 2 +- .../snapshots/seattlerb/defs_oneliner.txt | 2 +- .../snapshots/seattlerb/defs_oneliner_eq2.txt | 2 +- .../seattlerb/defs_oneliner_rescue.txt | 2 +- test/prism/snapshots/while.txt | 2 +- .../whitequark/endless_comparison_method.txt | 12 +++---- .../snapshots/whitequark/endless_method.txt | 8 ++--- .../endless_method_command_syntax.txt | 16 +++++----- .../endless_method_forwarded_args_legacy.txt | 2 +- .../endless_method_with_rescue_mod.txt | 4 +-- .../endless_method_without_args.txt | 8 ++--- 25 files changed, 67 insertions(+), 67 deletions(-) diff --git a/src/prism.c b/src/prism.c index 1e2f71cf28e..9168c520b73 100644 --- a/src/prism.c +++ b/src/prism.c @@ -1886,7 +1886,7 @@ static pm_statements_node_t * pm_statements_node_create(pm_parser_t *parser); static void -pm_statements_node_body_append(pm_parser_t *parser, pm_statements_node_t *node, pm_node_t *statement); +pm_statements_node_body_append(pm_parser_t *parser, pm_statements_node_t *node, pm_node_t *statement, bool newline); static size_t pm_statements_node_body_length(pm_statements_node_t *node); @@ -4721,7 +4721,7 @@ pm_if_node_modifier_create(pm_parser_t *parser, pm_node_t *statement, const pm_t pm_if_node_t *node = PM_NODE_ALLOC(parser, pm_if_node_t); pm_statements_node_t *statements = pm_statements_node_create(parser); - pm_statements_node_body_append(parser, statements, statement); + pm_statements_node_body_append(parser, statements, statement, true); *node = (pm_if_node_t) { { @@ -4753,10 +4753,10 @@ pm_if_node_ternary_create(pm_parser_t *parser, pm_node_t *predicate, const pm_to pm_conditional_predicate(parser, predicate, PM_CONDITIONAL_PREDICATE_TYPE_CONDITIONAL); pm_statements_node_t *if_statements = pm_statements_node_create(parser); - pm_statements_node_body_append(parser, if_statements, true_expression); + pm_statements_node_body_append(parser, if_statements, true_expression, true); pm_statements_node_t *else_statements = pm_statements_node_create(parser); - pm_statements_node_body_append(parser, else_statements, false_expression); + pm_statements_node_body_append(parser, else_statements, false_expression, true); pm_token_t end_keyword = not_provided(parser); pm_else_node_t *else_node = pm_else_node_create(parser, colon, else_statements, &end_keyword); @@ -6959,7 +6959,7 @@ pm_statements_node_body_update(pm_statements_node_t *node, pm_node_t *statement) * Append a new node to the given StatementsNode node's body. */ static void -pm_statements_node_body_append(pm_parser_t *parser, pm_statements_node_t *node, pm_node_t *statement) { +pm_statements_node_body_append(pm_parser_t *parser, pm_statements_node_t *node, pm_node_t *statement, bool newline) { pm_statements_node_body_update(node, statement); if (node->body.size > 0) { @@ -6979,7 +6979,7 @@ pm_statements_node_body_append(pm_parser_t *parser, pm_statements_node_t *node, } pm_node_list_append(&node->body, statement); - pm_node_flag_set(statement, PM_NODE_FLAG_NEWLINE); + if (newline) pm_node_flag_set(statement, PM_NODE_FLAG_NEWLINE); } /** @@ -7597,7 +7597,7 @@ pm_unless_node_modifier_create(pm_parser_t *parser, pm_node_t *statement, const pm_unless_node_t *node = PM_NODE_ALLOC(parser, pm_unless_node_t); pm_statements_node_t *statements = pm_statements_node_create(parser); - pm_statements_node_body_append(parser, statements, statement); + pm_statements_node_body_append(parser, statements, statement, true); *node = (pm_unless_node_t) { { @@ -13754,7 +13754,7 @@ parse_statements(pm_parser_t *parser, pm_context_t context) { while (true) { pm_node_t *node = parse_expression(parser, PM_BINDING_POWER_STATEMENT, true, PM_ERR_CANNOT_PARSE_EXPRESSION); - pm_statements_node_body_append(parser, statements, node); + pm_statements_node_body_append(parser, statements, node, true); // If we're recovering from a syntax error, then we need to stop parsing // the statements now. @@ -17940,7 +17940,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // and we didn't return a multiple assignment node, then we can return a // regular parentheses node now. pm_statements_node_t *statements = pm_statements_node_create(parser); - pm_statements_node_body_append(parser, statements, statement); + pm_statements_node_body_append(parser, statements, statement, true); return (pm_node_t *) pm_parentheses_node_create(parser, &opening, (pm_node_t *) statements, &parser->previous); } @@ -17950,7 +17950,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // We'll do that here. context_push(parser, PM_CONTEXT_PARENS); pm_statements_node_t *statements = pm_statements_node_create(parser); - pm_statements_node_body_append(parser, statements, statement); + pm_statements_node_body_append(parser, statements, statement, true); // If we didn't find a terminator and we didn't find a right // parenthesis, then this is a syntax error. @@ -17961,7 +17961,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // Parse each statement within the parentheses. while (true) { pm_node_t *node = parse_expression(parser, PM_BINDING_POWER_STATEMENT, true, PM_ERR_CANNOT_PARSE_EXPRESSION); - pm_statements_node_body_append(parser, statements, node); + pm_statements_node_body_append(parser, statements, node, true); // If we're recovering from a syntax error, then we need to stop // parsing the statements now. @@ -19123,7 +19123,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b statement = (pm_node_t *) pm_rescue_modifier_node_create(parser, statement, &rescue_keyword, value); } - pm_statements_node_body_append(parser, (pm_statements_node_t *) statements, statement); + pm_statements_node_body_append(parser, (pm_statements_node_t *) statements, statement, false); pm_do_loop_stack_pop(parser); context_pop(parser); end_keyword = not_provided(parser); @@ -21190,7 +21190,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_TOKEN_KEYWORD_UNTIL_MODIFIER: { parser_lex(parser); pm_statements_node_t *statements = pm_statements_node_create(parser); - pm_statements_node_body_append(parser, statements, node); + pm_statements_node_body_append(parser, statements, node, true); pm_node_t *predicate = parse_value_expression(parser, binding_power, true, PM_ERR_CONDITIONAL_UNTIL_PREDICATE); return (pm_node_t *) pm_until_node_modifier_create(parser, &token, predicate, statements, PM_NODE_TYPE_P(node, PM_BEGIN_NODE) ? PM_LOOP_FLAGS_BEGIN_MODIFIER : 0); @@ -21198,7 +21198,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_TOKEN_KEYWORD_WHILE_MODIFIER: { parser_lex(parser); pm_statements_node_t *statements = pm_statements_node_create(parser); - pm_statements_node_body_append(parser, statements, node); + pm_statements_node_body_append(parser, statements, node, true); pm_node_t *predicate = parse_value_expression(parser, binding_power, true, PM_ERR_CONDITIONAL_WHILE_PREDICATE); return (pm_node_t *) pm_while_node_modifier_create(parser, &token, predicate, statements, PM_NODE_TYPE_P(node, PM_BEGIN_NODE) ? PM_LOOP_FLAGS_BEGIN_MODIFIER : 0); @@ -21566,7 +21566,7 @@ wrap_statements(pm_parser_t *parser, pm_statements_node_t *statements) { parser, arguments, pm_parser_constant_id_constant(parser, "print", 5) - )); + ), true); } if (PM_PARSER_COMMAND_LINE_OPTION_N(parser)) { @@ -21612,7 +21612,7 @@ wrap_statements(pm_parser_t *parser, pm_statements_node_t *statements) { parser, (pm_node_t *) pm_call_node_fcall_synthesized_create(parser, arguments, pm_parser_constant_id_constant(parser, "gets", 4)), statements - )); + ), true); statements = wrapped_statements; } diff --git a/test/prism/snapshots/command_method_call.txt b/test/prism/snapshots/command_method_call.txt index 2c0f44e52b4..f0d9c6ce294 100644 --- a/test/prism/snapshots/command_method_call.txt +++ b/test/prism/snapshots/command_method_call.txt @@ -435,7 +435,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (25,10)-(25,15)) - │ │ ├── flags: newline, ignore_visibility + │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :bar diff --git a/test/prism/snapshots/endless_methods.txt b/test/prism/snapshots/endless_methods.txt index 50a0f41a676..29f701ed173 100644 --- a/test/prism/snapshots/endless_methods.txt +++ b/test/prism/snapshots/endless_methods.txt @@ -16,7 +16,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (1,10)-(1,11)) - │ │ ├── flags: newline, static_literal, decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── locals: [] │ ├── def_keyword_loc: (1,0)-(1,3) = "def" @@ -36,7 +36,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (3,10)-(3,14)) - │ │ ├── flags: newline, ignore_visibility + │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :A @@ -72,7 +72,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (5,13)-(5,22)) - │ ├── flags: newline + │ ├── flags: ∅ │ ├── receiver: │ │ @ CallNode (location: (5,13)-(5,18)) │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/methods.txt b/test/prism/snapshots/methods.txt index 0fd1a7f43aa..42f87b7532a 100644 --- a/test/prism/snapshots/methods.txt +++ b/test/prism/snapshots/methods.txt @@ -927,7 +927,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (103,10)-(103,11)) - │ │ ├── flags: newline, static_literal, decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 1 │ ├── locals: [] │ ├── def_keyword_loc: (103,0)-(103,3) = "def" @@ -947,7 +947,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (104,10)-(104,11)) - │ │ ├── flags: newline, static_literal, decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── locals: [] │ ├── def_keyword_loc: (104,0)-(104,3) = "def" @@ -979,7 +979,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (106,15)-(106,18)) - │ │ ├── flags: newline, static_literal, decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 123 │ ├── locals: [:bar] │ ├── def_keyword_loc: (106,0)-(106,3) = "def" @@ -999,7 +999,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (108,10)-(108,13)) - │ │ ├── flags: newline, static_literal, decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 123 │ ├── locals: [] │ ├── def_keyword_loc: (108,0)-(108,3) = "def" @@ -2153,7 +2153,7 @@ │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ │ └── @ LocalVariableReadNode (location: (181,30)-(181,33)) - │ │ │ │ │ │ ├── flags: newline + │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ ├── name: :bar │ │ │ │ │ │ └── depth: 0 │ │ │ │ │ ├── locals: [:bar] @@ -2178,7 +2178,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (181,41)-(181,42)) - │ │ ├── flags: newline, static_literal, decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ ├── locals: [:bar] │ ├── def_keyword_loc: (181,0)-(181,3) = "def" @@ -2234,7 +2234,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ IntegerNode (location: (183,36)-(183,37)) - │ ├── flags: newline, static_literal, decimal + │ ├── flags: static_literal, decimal │ └── value: 2 ├── locals: [:bar] ├── def_keyword_loc: (183,0)-(183,3) = "def" diff --git a/test/prism/snapshots/regex.txt b/test/prism/snapshots/regex.txt index 2f4b986d97f..17f12e1825b 100644 --- a/test/prism/snapshots/regex.txt +++ b/test/prism/snapshots/regex.txt @@ -498,7 +498,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ MatchWriteNode (location: (46,16)-(46,32)) - │ ├── flags: newline + │ ├── flags: ∅ │ ├── call: │ │ @ CallNode (location: (46,16)-(46,32)) │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/rescue.txt b/test/prism/snapshots/rescue.txt index 53a49fbb470..705758c507f 100644 --- a/test/prism/snapshots/rescue.txt +++ b/test/prism/snapshots/rescue.txt @@ -376,7 +376,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (26,18)-(26,44)) - │ │ ├── flags: newline + │ │ ├── flags: ∅ │ │ ├── expression: │ │ │ @ CallNode (location: (26,18)-(26,33)) │ │ │ ├── flags: ignore_visibility diff --git a/test/prism/snapshots/seattlerb/defn_endless_command.txt b/test/prism/snapshots/seattlerb/defn_endless_command.txt index e951ee2e45f..12149a821cb 100644 --- a/test/prism/snapshots/seattlerb/defn_endless_command.txt +++ b/test/prism/snapshots/seattlerb/defn_endless_command.txt @@ -16,7 +16,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,18)-(1,33)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :other_method diff --git a/test/prism/snapshots/seattlerb/defn_endless_command_rescue.txt b/test/prism/snapshots/seattlerb/defn_endless_command_rescue.txt index 7efd02cd062..99194a5ce94 100644 --- a/test/prism/snapshots/seattlerb/defn_endless_command_rescue.txt +++ b/test/prism/snapshots/seattlerb/defn_endless_command_rescue.txt @@ -16,7 +16,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (1,18)-(1,43)) - │ ├── flags: newline + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (1,18)-(1,33)) │ │ ├── flags: ignore_visibility diff --git a/test/prism/snapshots/seattlerb/defn_oneliner.txt b/test/prism/snapshots/seattlerb/defn_oneliner.txt index efa53f09d58..81ca22f010e 100644 --- a/test/prism/snapshots/seattlerb/defn_oneliner.txt +++ b/test/prism/snapshots/seattlerb/defn_oneliner.txt @@ -28,7 +28,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,16)-(1,27)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :system diff --git a/test/prism/snapshots/seattlerb/defn_oneliner_eq2.txt b/test/prism/snapshots/seattlerb/defn_oneliner_eq2.txt index 8d9f6a2267c..414ecff4edd 100644 --- a/test/prism/snapshots/seattlerb/defn_oneliner_eq2.txt +++ b/test/prism/snapshots/seattlerb/defn_oneliner_eq2.txt @@ -42,7 +42,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (2,14)-(2,16)) - │ │ ├── flags: newline, static_literal, decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ ├── locals: [:o] │ ├── def_keyword_loc: (2,2)-(2,5) = "def" diff --git a/test/prism/snapshots/seattlerb/defn_oneliner_noargs.txt b/test/prism/snapshots/seattlerb/defn_oneliner_noargs.txt index a7bc11ae6b4..5928f64179f 100644 --- a/test/prism/snapshots/seattlerb/defn_oneliner_noargs.txt +++ b/test/prism/snapshots/seattlerb/defn_oneliner_noargs.txt @@ -16,7 +16,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,11)-(1,17)) - │ ├── flags: newline, variable_call, ignore_visibility + │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :system diff --git a/test/prism/snapshots/seattlerb/defn_oneliner_noargs_parentheses.txt b/test/prism/snapshots/seattlerb/defn_oneliner_noargs_parentheses.txt index 174c49d1e11..d0cd777039e 100644 --- a/test/prism/snapshots/seattlerb/defn_oneliner_noargs_parentheses.txt +++ b/test/prism/snapshots/seattlerb/defn_oneliner_noargs_parentheses.txt @@ -16,7 +16,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,13)-(1,19)) - │ ├── flags: newline, variable_call, ignore_visibility + │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :system diff --git a/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt b/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt index 5e9c7ccef77..cc3856aad33 100644 --- a/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt +++ b/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt @@ -148,7 +148,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (13,16)-(13,38)) - │ ├── flags: newline + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (13,16)-(13,27)) │ │ ├── flags: ignore_visibility diff --git a/test/prism/snapshots/seattlerb/defs_endless_command.txt b/test/prism/snapshots/seattlerb/defs_endless_command.txt index b1b542296c8..f34d667901c 100644 --- a/test/prism/snapshots/seattlerb/defs_endless_command.txt +++ b/test/prism/snapshots/seattlerb/defs_endless_command.txt @@ -26,7 +26,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,20)-(1,35)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :other_method diff --git a/test/prism/snapshots/seattlerb/defs_endless_command_rescue.txt b/test/prism/snapshots/seattlerb/defs_endless_command_rescue.txt index e8a7703de3d..fe859369400 100644 --- a/test/prism/snapshots/seattlerb/defs_endless_command_rescue.txt +++ b/test/prism/snapshots/seattlerb/defs_endless_command_rescue.txt @@ -26,7 +26,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (1,20)-(1,45)) - │ ├── flags: newline + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (1,20)-(1,35)) │ │ ├── flags: ignore_visibility diff --git a/test/prism/snapshots/seattlerb/defs_oneliner.txt b/test/prism/snapshots/seattlerb/defs_oneliner.txt index 4ddde4309d7..c99b8108440 100644 --- a/test/prism/snapshots/seattlerb/defs_oneliner.txt +++ b/test/prism/snapshots/seattlerb/defs_oneliner.txt @@ -30,7 +30,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,21)-(1,32)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :system diff --git a/test/prism/snapshots/seattlerb/defs_oneliner_eq2.txt b/test/prism/snapshots/seattlerb/defs_oneliner_eq2.txt index f51a58e37e6..328ba5d78b2 100644 --- a/test/prism/snapshots/seattlerb/defs_oneliner_eq2.txt +++ b/test/prism/snapshots/seattlerb/defs_oneliner_eq2.txt @@ -44,7 +44,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (2,19)-(2,21)) - │ │ ├── flags: newline, static_literal, decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ ├── locals: [:o] │ ├── def_keyword_loc: (2,2)-(2,5) = "def" diff --git a/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt b/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt index 13b91598944..2bf97c29175 100644 --- a/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt +++ b/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt @@ -154,7 +154,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (13,21)-(13,43)) - │ ├── flags: newline + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (13,21)-(13,32)) │ │ ├── flags: ignore_visibility diff --git a/test/prism/snapshots/while.txt b/test/prism/snapshots/while.txt index c0022eb50c2..32b22adc8da 100644 --- a/test/prism/snapshots/while.txt +++ b/test/prism/snapshots/while.txt @@ -465,7 +465,7 @@ │ │ │ ├── flags: ∅ │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (21,16)-(21,26)) - │ │ │ ├── flags: newline, ignore_visibility + │ │ │ ├── flags: ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :bar diff --git a/test/prism/snapshots/whitequark/endless_comparison_method.txt b/test/prism/snapshots/whitequark/endless_comparison_method.txt index a32a4dff523..81fd4a07c52 100644 --- a/test/prism/snapshots/whitequark/endless_comparison_method.txt +++ b/test/prism/snapshots/whitequark/endless_comparison_method.txt @@ -28,7 +28,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,16)-(1,28)) - │ │ ├── flags: newline, variable_call, ignore_visibility + │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :do_something @@ -67,7 +67,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (3,16)-(3,28)) - │ │ ├── flags: newline, variable_call, ignore_visibility + │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :do_something @@ -106,7 +106,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (5,16)-(5,28)) - │ │ ├── flags: newline, variable_call, ignore_visibility + │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :do_something @@ -145,7 +145,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (7,16)-(7,28)) - │ │ ├── flags: newline, variable_call, ignore_visibility + │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :do_something @@ -184,7 +184,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (9,17)-(9,29)) - │ │ ├── flags: newline, variable_call, ignore_visibility + │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :do_something @@ -223,7 +223,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (11,16)-(11,28)) - │ ├── flags: newline, variable_call, ignore_visibility + │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :do_something diff --git a/test/prism/snapshots/whitequark/endless_method.txt b/test/prism/snapshots/whitequark/endless_method.txt index 5b48a95ae58..3c24ab2a7dc 100644 --- a/test/prism/snapshots/whitequark/endless_method.txt +++ b/test/prism/snapshots/whitequark/endless_method.txt @@ -16,7 +16,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (1,12)-(1,14)) - │ │ ├── flags: newline, static_literal, decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ ├── locals: [] │ ├── def_keyword_loc: (1,0)-(1,3) = "def" @@ -48,7 +48,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (3,13)-(3,18)) - │ │ ├── flags: newline + │ │ ├── flags: ∅ │ │ ├── receiver: │ │ │ @ LocalVariableReadNode (location: (3,13)-(3,14)) │ │ │ ├── flags: ∅ @@ -95,7 +95,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (5,16)-(5,18)) - │ │ ├── flags: newline, static_literal, decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ ├── locals: [] │ ├── def_keyword_loc: (5,0)-(5,3) = "def" @@ -137,7 +137,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (7,17)-(7,22)) - │ ├── flags: newline + │ ├── flags: ∅ │ ├── receiver: │ │ @ LocalVariableReadNode (location: (7,17)-(7,18)) │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/whitequark/endless_method_command_syntax.txt b/test/prism/snapshots/whitequark/endless_method_command_syntax.txt index f2fa941fee2..db2c0cec6fe 100644 --- a/test/prism/snapshots/whitequark/endless_method_command_syntax.txt +++ b/test/prism/snapshots/whitequark/endless_method_command_syntax.txt @@ -16,7 +16,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,10)-(1,22)) - │ │ ├── flags: newline, ignore_visibility + │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -52,7 +52,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (3,12)-(3,24)) - │ │ ├── flags: newline, ignore_visibility + │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -100,7 +100,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (5,13)-(5,19)) - │ │ ├── flags: newline, ignore_visibility + │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -144,7 +144,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (7,14)-(7,26)) - │ │ ├── flags: newline, ignore_visibility + │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -190,7 +190,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (9,16)-(9,28)) - │ │ ├── flags: newline, ignore_visibility + │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -248,7 +248,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (11,17)-(11,23)) - │ │ ├── flags: newline, ignore_visibility + │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :puts @@ -294,7 +294,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (13,17)-(13,60)) - │ │ ├── flags: newline + │ │ ├── flags: ∅ │ │ ├── expression: │ │ │ @ CallNode (location: (13,17)-(13,37)) │ │ │ ├── flags: ignore_visibility @@ -372,7 +372,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (15,22)-(15,62)) - │ ├── flags: newline + │ ├── flags: ∅ │ ├── expression: │ │ @ CallNode (location: (15,22)-(15,42)) │ │ ├── flags: ignore_visibility diff --git a/test/prism/snapshots/whitequark/endless_method_forwarded_args_legacy.txt b/test/prism/snapshots/whitequark/endless_method_forwarded_args_legacy.txt index 67264d3b1c4..5927016b265 100644 --- a/test/prism/snapshots/whitequark/endless_method_forwarded_args_legacy.txt +++ b/test/prism/snapshots/whitequark/endless_method_forwarded_args_legacy.txt @@ -27,7 +27,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ CallNode (location: (1,15)-(1,23)) - │ ├── flags: newline, ignore_visibility + │ ├── flags: ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar diff --git a/test/prism/snapshots/whitequark/endless_method_with_rescue_mod.txt b/test/prism/snapshots/whitequark/endless_method_with_rescue_mod.txt index 54562212860..c64ba634b73 100644 --- a/test/prism/snapshots/whitequark/endless_method_with_rescue_mod.txt +++ b/test/prism/snapshots/whitequark/endless_method_with_rescue_mod.txt @@ -16,7 +16,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (1,10)-(1,20)) - │ │ ├── flags: newline + │ │ ├── flags: ∅ │ │ ├── expression: │ │ │ @ IntegerNode (location: (1,10)-(1,11)) │ │ │ ├── flags: static_literal, decimal @@ -46,7 +46,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (3,15)-(3,25)) - │ ├── flags: newline + │ ├── flags: ∅ │ ├── expression: │ │ @ IntegerNode (location: (3,15)-(3,16)) │ │ ├── flags: static_literal, decimal diff --git a/test/prism/snapshots/whitequark/endless_method_without_args.txt b/test/prism/snapshots/whitequark/endless_method_without_args.txt index 2e97f101c77..0be157df627 100644 --- a/test/prism/snapshots/whitequark/endless_method_without_args.txt +++ b/test/prism/snapshots/whitequark/endless_method_without_args.txt @@ -16,7 +16,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (1,10)-(1,12)) - │ │ ├── flags: newline, static_literal, decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ ├── locals: [] │ ├── def_keyword_loc: (1,0)-(1,3) = "def" @@ -36,7 +36,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (3,10)-(3,23)) - │ │ ├── flags: newline + │ │ ├── flags: ∅ │ │ ├── expression: │ │ │ @ IntegerNode (location: (3,10)-(3,12)) │ │ │ ├── flags: static_literal, decimal @@ -65,7 +65,7 @@ │ │ ├── flags: ∅ │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (5,15)-(5,17)) - │ │ ├── flags: newline, static_literal, decimal + │ │ ├── flags: static_literal, decimal │ │ └── value: 42 │ ├── locals: [] │ ├── def_keyword_loc: (5,0)-(5,3) = "def" @@ -87,7 +87,7 @@ │ ├── flags: ∅ │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (7,15)-(7,28)) - │ ├── flags: newline + │ ├── flags: ∅ │ ├── expression: │ │ @ IntegerNode (location: (7,15)-(7,17)) │ │ ├── flags: static_literal, decimal From 4576cb1d96b17d7a0a6e7f90b90cde49d1e81186 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 24 Jul 2024 12:13:22 -0400 Subject: [PATCH 065/109] Inherit ractor state for child scopes --- src/prism.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/prism.c b/src/prism.c index 9168c520b73..0d9d73349a0 100644 --- a/src/prism.c +++ b/src/prism.c @@ -579,7 +579,7 @@ pm_parser_scope_push(pm_parser_t *parser, bool closed) { .locals = { 0 }, .parameters = PM_SCOPE_PARAMETERS_NONE, .implicit_parameters = { 0 }, - .shareable_constant = (closed || parser->current_scope == NULL) ? PM_SCOPE_SHAREABLE_CONSTANT_NONE : parser->current_scope->shareable_constant, + .shareable_constant = parser->current_scope == NULL ? PM_SCOPE_SHAREABLE_CONSTANT_NONE : parser->current_scope->shareable_constant, .closed = closed }; From cf90fe575912c0b6762f6568933ed49a9fa8ac8d Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Wed, 24 Jul 2024 21:32:29 +0200 Subject: [PATCH 066/109] Do not serialize node_id when PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS is set * $ bundle exec rake serialized_size:topgems Before: Total sizes for top 100 gems: total source size: 90207647 total serialized size: 86284647 total serialized/total source: 0.957 Stats of ratio serialized/source per file: average: 0.952 median: 0.937 1st quartile: 0.669 3rd quartile: 1.206 min - max: 0.080 - 4.065 After: Total sizes for top 100 gems: total source size: 90207647 total serialized size: 69477115 total serialized/total source: 0.770 Stats of ratio serialized/source per file: average: 0.844 median: 0.825 1st quartile: 0.597 3rd quartile: 1.064 min - max: 0.078 - 3.792 --- templates/java/org/prism/Loader.java.erb | 1 - templates/src/serialize.c.erb | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/java/org/prism/Loader.java.erb b/templates/java/org/prism/Loader.java.erb index c22b8ed2a17..c82820e91d9 100644 --- a/templates/java/org/prism/Loader.java.erb +++ b/templates/java/org/prism/Loader.java.erb @@ -353,7 +353,6 @@ public class Loader { private Nodes.Node loadNode() { int type = buffer.get() & 0xFF; - loadVarUInt(); // skip over node_id int startOffset = loadVarUInt(); int length = loadVarUInt(); diff --git a/templates/src/serialize.c.erb b/templates/src/serialize.c.erb index f62453e6998..faf7962b741 100644 --- a/templates/src/serialize.c.erb +++ b/templates/src/serialize.c.erb @@ -74,7 +74,9 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) { size_t offset = buffer->length; + <%- unless Prism::Template::SERIALIZE_ONLY_SEMANTICS_FIELDS -%> pm_buffer_append_varuint(buffer, node->node_id); + <%- end -%> pm_serialize_location(parser, &node->location, buffer); switch (PM_NODE_TYPE(node)) { From e012072f7008f8423f5e348b6bbc0494ad5be262 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Wed, 24 Jul 2024 21:57:11 +0200 Subject: [PATCH 067/109] Do not serialize common flags when PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS is set * Note that we could shift the flags by 2 on serialize & deserialize but it does not seems worth it as it does not save serialized size in any significant amount, i.e. average was 0.799 before #2924. * $ bundle exec rake serialized_size:topgems Before: Total sizes for top 100 gems: total source size: 90207647 total serialized size: 69477115 total serialized/total source: 0.770 Stats of ratio serialized/source per file: average: 0.844 median: 0.825 1st quartile: 0.597 3rd quartile: 1.064 min - max: 0.078 - 3.792 After: Total sizes for top 100 gems: total source size: 90207647 total serialized size: 66150209 total serialized/total source: 0.733 Stats of ratio serialized/source per file: average: 0.800 median: 0.779 1st quartile: 0.568 3rd quartile: 1.007 min - max: 0.076 - 3.675 --- templates/java/org/prism/Loader.java.erb | 2 +- templates/java/org/prism/Nodes.java.erb | 14 +++++++++----- templates/src/serialize.c.erb | 2 ++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/templates/java/org/prism/Loader.java.erb b/templates/java/org/prism/Loader.java.erb index c82820e91d9..fd39f4db1cb 100644 --- a/templates/java/org/prism/Loader.java.erb +++ b/templates/java/org/prism/Loader.java.erb @@ -363,7 +363,7 @@ public class Loader { <%- params = ["startOffset", "length"] params << "buffer.getInt()" if node.needs_serialized_length? - params << "loadFlags()" + params << "loadFlags()" if node.flags params.concat node.semantic_fields.map { |field| case field when Prism::Template::NodeField then "#{field.java_cast}loadNode()" diff --git a/templates/java/org/prism/Nodes.java.erb b/templates/java/org/prism/Nodes.java.erb index 45a4aa71dd7..f2fa870ecec 100644 --- a/templates/java/org/prism/Nodes.java.erb +++ b/templates/java/org/prism/Nodes.java.erb @@ -94,13 +94,11 @@ public abstract class Nodes { public final int startOffset; public final int length; - protected final short flags; private boolean newLineFlag = false; - public Node(int startOffset, int length, short flags) { + public Node(int startOffset, int length) { this.startOffset = startOffset; this.length = length; - this.flags = flags; } public final int endOffset() { @@ -202,6 +200,9 @@ public abstract class Nodes { <%- if node.needs_serialized_length? -%> public final int serializedLength; <%- end -%> + <%- if node.flags -%> + public final short flags; + <%- end -%> <%- node.semantic_fields.each do |field| -%> <%- if field.comment -%> /** @@ -224,14 +225,17 @@ public abstract class Nodes { <%- params = ["int startOffset", "int length"] params << "int serializedLength" if node.needs_serialized_length? - params << "short flags" + params << "short flags" if node.flags params.concat(node.semantic_fields.map { |field| "#{field.java_type} #{field.name}" }) -%> public <%= node.name -%>(<%= params.join(", ") %>) { - super(startOffset, length, flags); + super(startOffset, length); <%- if node.needs_serialized_length? -%> this.serializedLength = serializedLength; <%- end -%> + <%- if node.flags -%> + this.flags = flags; + <%- end -%> <%- node.semantic_fields.each do |field| -%> this.<%= field.name %> = <%= field.name %>; <%- end -%> diff --git a/templates/src/serialize.c.erb b/templates/src/serialize.c.erb index faf7962b741..9f8f0cbd077 100644 --- a/templates/src/serialize.c.erb +++ b/templates/src/serialize.c.erb @@ -92,7 +92,9 @@ pm_serialize_node(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer) { size_t length_offset = buffer->length; pm_buffer_append_string(buffer, "\0\0\0\0", 4); /* consume 4 bytes, updated below */ <%- end -%> + <%- unless Prism::Template::SERIALIZE_ONLY_SEMANTICS_FIELDS && !node.flags -%> pm_buffer_append_varuint(buffer, (uint32_t) node->flags); + <%- end -%> <%- node.fields.each do |field| -%> <%- case field -%> <%- when Prism::Template::NodeField -%> From 280517c325ffb7006fc59735ac4d12d53b2d86d1 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Thu, 25 Jul 2024 13:17:11 -0400 Subject: [PATCH 068/109] Sync from ruby/ruby --- src/prism.c | 14 ++++++++++---- .../dont_allow_return_inside_sclass_body.txt | 3 +++ test/prism/errors_test.rb | 8 +++++--- 3 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 test/prism/errors/dont_allow_return_inside_sclass_body.txt diff --git a/src/prism.c b/src/prism.c index 0d9d73349a0..285319ca91c 100644 --- a/src/prism.c +++ b/src/prism.c @@ -15342,6 +15342,7 @@ parse_arguments_list(pm_parser_t *parser, pm_arguments_t *arguments, bool accept */ static void parse_return(pm_parser_t *parser, pm_node_t *node) { + bool in_sclass = false; for (pm_context_node_t *context_node = parser->current_context; context_node != NULL; context_node = context_node->prev) { switch (context_node->context) { case PM_CONTEXT_BEGIN_ELSE: @@ -15366,10 +15367,6 @@ parse_return(pm_parser_t *parser, pm_node_t *node) { case PM_CONTEXT_PREDICATE: case PM_CONTEXT_PREEXE: case PM_CONTEXT_RESCUE_MODIFIER: - case PM_CONTEXT_SCLASS_ELSE: - case PM_CONTEXT_SCLASS_ENSURE: - case PM_CONTEXT_SCLASS_RESCUE: - case PM_CONTEXT_SCLASS: case PM_CONTEXT_TERNARY: case PM_CONTEXT_UNLESS: case PM_CONTEXT_UNTIL: @@ -15377,6 +15374,12 @@ parse_return(pm_parser_t *parser, pm_node_t *node) { // Keep iterating up the lists of contexts, because returns can // see through these. continue; + case PM_CONTEXT_SCLASS_ELSE: + case PM_CONTEXT_SCLASS_ENSURE: + case PM_CONTEXT_SCLASS_RESCUE: + case PM_CONTEXT_SCLASS: + in_sclass = true; + continue; case PM_CONTEXT_CLASS_ELSE: case PM_CONTEXT_CLASS_ENSURE: case PM_CONTEXT_CLASS_RESCUE: @@ -15411,6 +15414,9 @@ parse_return(pm_parser_t *parser, pm_node_t *node) { break; } } + if (in_sclass) { + pm_parser_err_node(parser, node, PM_ERR_RETURN_INVALID); + } } /** diff --git a/test/prism/errors/dont_allow_return_inside_sclass_body.txt b/test/prism/errors/dont_allow_return_inside_sclass_body.txt new file mode 100644 index 00000000000..c29fe017282 --- /dev/null +++ b/test/prism/errors/dont_allow_return_inside_sclass_body.txt @@ -0,0 +1,3 @@ +class << A; return; end + ^~~~~~ Invalid return in class/module body + diff --git a/test/prism/errors_test.rb b/test/prism/errors_test.rb index 9a108ceca7c..f46cb942a20 100644 --- a/test/prism/errors_test.rb +++ b/test/prism/errors_test.rb @@ -19,9 +19,11 @@ class ErrorsTest < TestCase end if RUBY_VERSION < "3.4" - filepaths -= [ - "it_with_ordinary_parameter.txt" - ] + filepaths -= ["it_with_ordinary_parameter.txt"] + end + + if RUBY_VERSION < "3.4" || RUBY_RELEASE_DATE < "2024-07-24" + filepaths -= ["dont_allow_return_inside_sclass_body.txt"] end filepaths.each do |filepath| From 80214fc0cbd6a8b25f3dbf742627a58f7d8bbb8a Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Fri, 26 Jul 2024 10:58:39 -0400 Subject: [PATCH 069/109] Remove dsl.rbi from the repository --- .gitignore | 2 +- rbi/prism/dsl.rbi | 521 ---------------------------------------------- 2 files changed, 1 insertion(+), 522 deletions(-) delete mode 100644 rbi/prism/dsl.rbi diff --git a/.gitignore b/.gitignore index ccd0db280d4..1122263535c 100644 --- a/.gitignore +++ b/.gitignore @@ -65,7 +65,7 @@ out.svg /sig/prism/node.rbs /sig/prism/visitor.rbs /sig/prism/_private/dot_visitor.rbs -/rbi/prism/dsl.rb +/rbi/prism/dsl.rbi /rbi/prism/node.rbi /rbi/prism/visitor.rbi diff --git a/rbi/prism/dsl.rbi b/rbi/prism/dsl.rbi deleted file mode 100644 index e19087c1336..00000000000 --- a/rbi/prism/dsl.rbi +++ /dev/null @@ -1,521 +0,0 @@ -# typed: strict - -=begin -This file is generated by the templates/template.rb script and should not be -modified manually. See templates/rbi/prism/dsl.rbi.erb -if you are looking to modify the template -=end - -module Prism::DSL - sig { params(string: String).returns(Prism::Source) } - def source(string); end - - sig { params(source: Prism::Source, start_offset: Integer, length: Integer).returns(Prism::Location) } - def location(source: default_source, start_offset: 0, length: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, new_name: Prism::Node, old_name: Prism::Node, keyword_loc: Prism::Location).returns(Prism::AliasGlobalVariableNode) } - def alias_global_variable_node(source: default_source, node_id: 0, location: default_location, flags: 0, new_name: default_node(source, location), old_name: default_node(source, location), keyword_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, new_name: Prism::Node, old_name: Prism::Node, keyword_loc: Prism::Location).returns(Prism::AliasMethodNode) } - def alias_method_node(source: default_source, node_id: 0, location: default_location, flags: 0, new_name: default_node(source, location), old_name: default_node(source, location), keyword_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, left: Prism::Node, right: Prism::Node, operator_loc: Prism::Location).returns(Prism::AlternationPatternNode) } - def alternation_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: default_node(source, location), right: default_node(source, location), operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, left: Prism::Node, right: Prism::Node, operator_loc: Prism::Location).returns(Prism::AndNode) } - def and_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: default_node(source, location), right: default_node(source, location), operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, arguments: T::Array[Prism::Node]).returns(Prism::ArgumentsNode) } - def arguments_node(source: default_source, node_id: 0, location: default_location, flags: 0, arguments: []); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, elements: T::Array[Prism::Node], opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::ArrayNode) } - def array_node(source: default_source, node_id: 0, location: default_location, flags: 0, elements: [], opening_loc: nil, closing_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(Prism::Node), requireds: T::Array[Prism::Node], rest: T.nilable(Prism::Node), posts: T::Array[Prism::Node], opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::ArrayPatternNode) } - def array_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, constant: nil, requireds: [], rest: nil, posts: [], opening_loc: nil, closing_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, key: Prism::Node, value: Prism::Node, operator_loc: T.nilable(Prism::Location)).returns(Prism::AssocNode) } - def assoc_node(source: default_source, node_id: 0, location: default_location, flags: 0, key: default_node(source, location), value: default_node(source, location), operator_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: T.nilable(Prism::Node), operator_loc: Prism::Location).returns(Prism::AssocSplatNode) } - def assoc_splat_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: nil, operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::BackReferenceReadNode) } - def back_reference_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, begin_keyword_loc: T.nilable(Prism::Location), statements: T.nilable(Prism::StatementsNode), rescue_clause: T.nilable(Prism::RescueNode), else_clause: T.nilable(Prism::ElseNode), ensure_clause: T.nilable(Prism::EnsureNode), end_keyword_loc: T.nilable(Prism::Location)).returns(Prism::BeginNode) } - def begin_node(source: default_source, node_id: 0, location: default_location, flags: 0, begin_keyword_loc: nil, statements: nil, rescue_clause: nil, else_clause: nil, ensure_clause: nil, end_keyword_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, expression: T.nilable(Prism::Node), operator_loc: Prism::Location).returns(Prism::BlockArgumentNode) } - def block_argument_node(source: default_source, node_id: 0, location: default_location, flags: 0, expression: nil, operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::BlockLocalVariableNode) } - def block_local_variable_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, locals: T::Array[Symbol], parameters: T.nilable(Prism::Node), body: T.nilable(Prism::Node), opening_loc: Prism::Location, closing_loc: Prism::Location).returns(Prism::BlockNode) } - def block_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], parameters: nil, body: nil, opening_loc: location, closing_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: T.nilable(Symbol), name_loc: T.nilable(Prism::Location), operator_loc: Prism::Location).returns(Prism::BlockParameterNode) } - def block_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: nil, name_loc: nil, operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, parameters: T.nilable(Prism::ParametersNode), locals: T::Array[Prism::BlockLocalVariableNode], opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::BlockParametersNode) } - def block_parameters_node(source: default_source, node_id: 0, location: default_location, flags: 0, parameters: nil, locals: [], opening_loc: nil, closing_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, arguments: T.nilable(Prism::ArgumentsNode), keyword_loc: Prism::Location).returns(Prism::BreakNode) } - def break_node(source: default_source, node_id: 0, location: default_location, flags: 0, arguments: nil, keyword_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), message_loc: T.nilable(Prism::Location), read_name: Symbol, write_name: Symbol, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::CallAndWriteNode) } - def call_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, message_loc: nil, read_name: :"", write_name: :"", operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), name: Symbol, message_loc: T.nilable(Prism::Location), opening_loc: T.nilable(Prism::Location), arguments: T.nilable(Prism::ArgumentsNode), closing_loc: T.nilable(Prism::Location), block: T.nilable(Prism::Node)).returns(Prism::CallNode) } - def call_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, name: :"", message_loc: nil, opening_loc: nil, arguments: nil, closing_loc: nil, block: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), message_loc: T.nilable(Prism::Location), read_name: Symbol, write_name: Symbol, binary_operator: Symbol, binary_operator_loc: Prism::Location, value: Prism::Node).returns(Prism::CallOperatorWriteNode) } - def call_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, message_loc: nil, read_name: :"", write_name: :"", binary_operator: :"", binary_operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), message_loc: T.nilable(Prism::Location), read_name: Symbol, write_name: Symbol, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::CallOrWriteNode) } - def call_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, message_loc: nil, read_name: :"", write_name: :"", operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: Prism::Node, call_operator_loc: Prism::Location, name: Symbol, message_loc: Prism::Location).returns(Prism::CallTargetNode) } - def call_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: default_node(source, location), call_operator_loc: location, name: :"", message_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: Prism::Node, target: Prism::Node, operator_loc: Prism::Location).returns(Prism::CapturePatternNode) } - def capture_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: default_node(source, location), target: default_node(source, location), operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, predicate: T.nilable(Prism::Node), conditions: T::Array[Prism::Node], consequent: T.nilable(Prism::ElseNode), case_keyword_loc: Prism::Location, end_keyword_loc: Prism::Location).returns(Prism::CaseMatchNode) } - def case_match_node(source: default_source, node_id: 0, location: default_location, flags: 0, predicate: nil, conditions: [], consequent: nil, case_keyword_loc: location, end_keyword_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, predicate: T.nilable(Prism::Node), conditions: T::Array[Prism::Node], consequent: T.nilable(Prism::ElseNode), case_keyword_loc: Prism::Location, end_keyword_loc: Prism::Location).returns(Prism::CaseNode) } - def case_node(source: default_source, node_id: 0, location: default_location, flags: 0, predicate: nil, conditions: [], consequent: nil, case_keyword_loc: location, end_keyword_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, locals: T::Array[Symbol], class_keyword_loc: Prism::Location, constant_path: Prism::Node, inheritance_operator_loc: T.nilable(Prism::Location), superclass: T.nilable(Prism::Node), body: T.nilable(Prism::Node), end_keyword_loc: Prism::Location, name: Symbol).returns(Prism::ClassNode) } - def class_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], class_keyword_loc: location, constant_path: default_node(source, location), inheritance_operator_loc: nil, superclass: nil, body: nil, end_keyword_loc: location, name: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ClassVariableAndWriteNode) } - def class_variable_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, binary_operator_loc: Prism::Location, value: Prism::Node, binary_operator: Symbol).returns(Prism::ClassVariableOperatorWriteNode) } - def class_variable_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, binary_operator_loc: location, value: default_node(source, location), binary_operator: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ClassVariableOrWriteNode) } - def class_variable_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::ClassVariableReadNode) } - def class_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::ClassVariableTargetNode) } - def class_variable_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, value: Prism::Node, operator_loc: Prism::Location).returns(Prism::ClassVariableWriteNode) } - def class_variable_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location), operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ConstantAndWriteNode) } - def constant_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, binary_operator_loc: Prism::Location, value: Prism::Node, binary_operator: Symbol).returns(Prism::ConstantOperatorWriteNode) } - def constant_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, binary_operator_loc: location, value: default_node(source, location), binary_operator: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ConstantOrWriteNode) } - def constant_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, target: Prism::ConstantPathNode, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ConstantPathAndWriteNode) } - def constant_path_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, target: constant_path_node(source: source), operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, parent: T.nilable(Prism::Node), name: T.nilable(Symbol), delimiter_loc: Prism::Location, name_loc: Prism::Location).returns(Prism::ConstantPathNode) } - def constant_path_node(source: default_source, node_id: 0, location: default_location, flags: 0, parent: nil, name: nil, delimiter_loc: location, name_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, target: Prism::ConstantPathNode, binary_operator_loc: Prism::Location, value: Prism::Node, binary_operator: Symbol).returns(Prism::ConstantPathOperatorWriteNode) } - def constant_path_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, target: constant_path_node(source: source), binary_operator_loc: location, value: default_node(source, location), binary_operator: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, target: Prism::ConstantPathNode, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ConstantPathOrWriteNode) } - def constant_path_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, target: constant_path_node(source: source), operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, parent: T.nilable(Prism::Node), name: T.nilable(Symbol), delimiter_loc: Prism::Location, name_loc: Prism::Location).returns(Prism::ConstantPathTargetNode) } - def constant_path_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, parent: nil, name: nil, delimiter_loc: location, name_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, target: Prism::ConstantPathNode, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::ConstantPathWriteNode) } - def constant_path_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, target: constant_path_node(source: source), operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::ConstantReadNode) } - def constant_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::ConstantTargetNode) } - def constant_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, value: Prism::Node, operator_loc: Prism::Location).returns(Prism::ConstantWriteNode) } - def constant_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location), operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, receiver: T.nilable(Prism::Node), parameters: T.nilable(Prism::ParametersNode), body: T.nilable(Prism::Node), locals: T::Array[Symbol], def_keyword_loc: Prism::Location, operator_loc: T.nilable(Prism::Location), lparen_loc: T.nilable(Prism::Location), rparen_loc: T.nilable(Prism::Location), equal_loc: T.nilable(Prism::Location), end_keyword_loc: T.nilable(Prism::Location)).returns(Prism::DefNode) } - def def_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, receiver: nil, parameters: nil, body: nil, locals: [], def_keyword_loc: location, operator_loc: nil, lparen_loc: nil, rparen_loc: nil, equal_loc: nil, end_keyword_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, lparen_loc: T.nilable(Prism::Location), value: Prism::Node, rparen_loc: T.nilable(Prism::Location), keyword_loc: Prism::Location).returns(Prism::DefinedNode) } - def defined_node(source: default_source, node_id: 0, location: default_location, flags: 0, lparen_loc: nil, value: default_node(source, location), rparen_loc: nil, keyword_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, else_keyword_loc: Prism::Location, statements: T.nilable(Prism::StatementsNode), end_keyword_loc: T.nilable(Prism::Location)).returns(Prism::ElseNode) } - def else_node(source: default_source, node_id: 0, location: default_location, flags: 0, else_keyword_loc: location, statements: nil, end_keyword_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, statements: T.nilable(Prism::StatementsNode), closing_loc: Prism::Location).returns(Prism::EmbeddedStatementsNode) } - def embedded_statements_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, statements: nil, closing_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, operator_loc: Prism::Location, variable: Prism::Node).returns(Prism::EmbeddedVariableNode) } - def embedded_variable_node(source: default_source, node_id: 0, location: default_location, flags: 0, operator_loc: location, variable: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, ensure_keyword_loc: Prism::Location, statements: T.nilable(Prism::StatementsNode), end_keyword_loc: Prism::Location).returns(Prism::EnsureNode) } - def ensure_node(source: default_source, node_id: 0, location: default_location, flags: 0, ensure_keyword_loc: location, statements: nil, end_keyword_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::FalseNode) } - def false_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(Prism::Node), left: Prism::Node, requireds: T::Array[Prism::Node], right: Prism::Node, opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::FindPatternNode) } - def find_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, constant: nil, left: default_node(source, location), requireds: [], right: default_node(source, location), opening_loc: nil, closing_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, left: T.nilable(Prism::Node), right: T.nilable(Prism::Node), operator_loc: Prism::Location).returns(Prism::FlipFlopNode) } - def flip_flop_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: nil, right: nil, operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: Float).returns(Prism::FloatNode) } - def float_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: 0.0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, index: Prism::Node, collection: Prism::Node, statements: T.nilable(Prism::StatementsNode), for_keyword_loc: Prism::Location, in_keyword_loc: Prism::Location, do_keyword_loc: T.nilable(Prism::Location), end_keyword_loc: Prism::Location).returns(Prism::ForNode) } - def for_node(source: default_source, node_id: 0, location: default_location, flags: 0, index: default_node(source, location), collection: default_node(source, location), statements: nil, for_keyword_loc: location, in_keyword_loc: location, do_keyword_loc: nil, end_keyword_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::ForwardingArgumentsNode) } - def forwarding_arguments_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::ForwardingParameterNode) } - def forwarding_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, block: T.nilable(Prism::BlockNode)).returns(Prism::ForwardingSuperNode) } - def forwarding_super_node(source: default_source, node_id: 0, location: default_location, flags: 0, block: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::GlobalVariableAndWriteNode) } - def global_variable_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, binary_operator_loc: Prism::Location, value: Prism::Node, binary_operator: Symbol).returns(Prism::GlobalVariableOperatorWriteNode) } - def global_variable_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, binary_operator_loc: location, value: default_node(source, location), binary_operator: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::GlobalVariableOrWriteNode) } - def global_variable_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::GlobalVariableReadNode) } - def global_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::GlobalVariableTargetNode) } - def global_variable_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, value: Prism::Node, operator_loc: Prism::Location).returns(Prism::GlobalVariableWriteNode) } - def global_variable_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location), operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, elements: T::Array[T.any(Prism::AssocNode, Prism::AssocSplatNode)], closing_loc: Prism::Location).returns(Prism::HashNode) } - def hash_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, elements: [], closing_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(Prism::Node), elements: T::Array[Prism::AssocNode], rest: T.nilable(T.any(Prism::AssocSplatNode, Prism::NoKeywordsParameterNode)), opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::HashPatternNode) } - def hash_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, constant: nil, elements: [], rest: nil, opening_loc: nil, closing_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, if_keyword_loc: T.nilable(Prism::Location), predicate: Prism::Node, then_keyword_loc: T.nilable(Prism::Location), statements: T.nilable(Prism::StatementsNode), consequent: T.nilable(Prism::Node), end_keyword_loc: T.nilable(Prism::Location)).returns(Prism::IfNode) } - def if_node(source: default_source, node_id: 0, location: default_location, flags: 0, if_keyword_loc: nil, predicate: default_node(source, location), then_keyword_loc: nil, statements: nil, consequent: nil, end_keyword_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, numeric: T.any(Prism::FloatNode, Prism::IntegerNode, Prism::RationalNode)).returns(Prism::ImaginaryNode) } - def imaginary_node(source: default_source, node_id: 0, location: default_location, flags: 0, numeric: float_node(source: source)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: Prism::Node).returns(Prism::ImplicitNode) } - def implicit_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::ImplicitRestNode) } - def implicit_rest_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, pattern: Prism::Node, statements: T.nilable(Prism::StatementsNode), in_loc: Prism::Location, then_loc: T.nilable(Prism::Location)).returns(Prism::InNode) } - def in_node(source: default_source, node_id: 0, location: default_location, flags: 0, pattern: default_node(source, location), statements: nil, in_loc: location, then_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), opening_loc: Prism::Location, arguments: T.nilable(Prism::ArgumentsNode), closing_loc: Prism::Location, block: T.nilable(Prism::Node), operator_loc: Prism::Location, value: Prism::Node).returns(Prism::IndexAndWriteNode) } - def index_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, opening_loc: location, arguments: nil, closing_loc: location, block: nil, operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), opening_loc: Prism::Location, arguments: T.nilable(Prism::ArgumentsNode), closing_loc: Prism::Location, block: T.nilable(Prism::Node), binary_operator: Symbol, binary_operator_loc: Prism::Location, value: Prism::Node).returns(Prism::IndexOperatorWriteNode) } - def index_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, opening_loc: location, arguments: nil, closing_loc: location, block: nil, binary_operator: :"", binary_operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), opening_loc: Prism::Location, arguments: T.nilable(Prism::ArgumentsNode), closing_loc: Prism::Location, block: T.nilable(Prism::Node), operator_loc: Prism::Location, value: Prism::Node).returns(Prism::IndexOrWriteNode) } - def index_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, opening_loc: location, arguments: nil, closing_loc: location, block: nil, operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: Prism::Node, opening_loc: Prism::Location, arguments: T.nilable(Prism::ArgumentsNode), closing_loc: Prism::Location, block: T.nilable(Prism::Node)).returns(Prism::IndexTargetNode) } - def index_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: default_node(source, location), opening_loc: location, arguments: nil, closing_loc: location, block: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::InstanceVariableAndWriteNode) } - def instance_variable_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, binary_operator_loc: Prism::Location, value: Prism::Node, binary_operator: Symbol).returns(Prism::InstanceVariableOperatorWriteNode) } - def instance_variable_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, binary_operator_loc: location, value: default_node(source, location), binary_operator: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::InstanceVariableOrWriteNode) } - def instance_variable_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::InstanceVariableReadNode) } - def instance_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::InstanceVariableTargetNode) } - def instance_variable_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, value: Prism::Node, operator_loc: Prism::Location).returns(Prism::InstanceVariableWriteNode) } - def instance_variable_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location), operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: Integer).returns(Prism::IntegerNode) } - def integer_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode)], closing_loc: Prism::Location).returns(Prism::InterpolatedMatchLastLineNode) } - def interpolated_match_last_line_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, parts: [], closing_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode)], closing_loc: Prism::Location).returns(Prism::InterpolatedRegularExpressionNode) } - def interpolated_regular_expression_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, parts: [], closing_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode, Prism::InterpolatedStringNode)], closing_loc: T.nilable(Prism::Location)).returns(Prism::InterpolatedStringNode) } - def interpolated_string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: nil, parts: [], closing_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode)], closing_loc: T.nilable(Prism::Location)).returns(Prism::InterpolatedSymbolNode) } - def interpolated_symbol_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: nil, parts: [], closing_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode)], closing_loc: Prism::Location).returns(Prism::InterpolatedXStringNode) } - def interpolated_x_string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, parts: [], closing_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::ItLocalVariableReadNode) } - def it_local_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::ItParametersNode) } - def it_parameters_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, elements: T::Array[T.any(Prism::AssocNode, Prism::AssocSplatNode)]).returns(Prism::KeywordHashNode) } - def keyword_hash_node(source: default_source, node_id: 0, location: default_location, flags: 0, elements: []); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: T.nilable(Symbol), name_loc: T.nilable(Prism::Location), operator_loc: Prism::Location).returns(Prism::KeywordRestParameterNode) } - def keyword_rest_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: nil, name_loc: nil, operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, locals: T::Array[Symbol], operator_loc: Prism::Location, opening_loc: Prism::Location, closing_loc: Prism::Location, parameters: T.nilable(Prism::Node), body: T.nilable(Prism::Node)).returns(Prism::LambdaNode) } - def lambda_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], operator_loc: location, opening_loc: location, closing_loc: location, parameters: nil, body: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node, name: Symbol, depth: Integer).returns(Prism::LocalVariableAndWriteNode) } - def local_variable_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name_loc: location, operator_loc: location, value: default_node(source, location), name: :"", depth: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name_loc: Prism::Location, binary_operator_loc: Prism::Location, value: Prism::Node, name: Symbol, binary_operator: Symbol, depth: Integer).returns(Prism::LocalVariableOperatorWriteNode) } - def local_variable_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name_loc: location, binary_operator_loc: location, value: default_node(source, location), name: :"", binary_operator: :"", depth: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node, name: Symbol, depth: Integer).returns(Prism::LocalVariableOrWriteNode) } - def local_variable_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name_loc: location, operator_loc: location, value: default_node(source, location), name: :"", depth: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, depth: Integer).returns(Prism::LocalVariableReadNode) } - def local_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", depth: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, depth: Integer).returns(Prism::LocalVariableTargetNode) } - def local_variable_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", depth: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, depth: Integer, name_loc: Prism::Location, value: Prism::Node, operator_loc: Prism::Location).returns(Prism::LocalVariableWriteNode) } - def local_variable_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", depth: 0, name_loc: location, value: default_node(source, location), operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, content_loc: Prism::Location, closing_loc: Prism::Location, unescaped: String).returns(Prism::MatchLastLineNode) } - def match_last_line_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, content_loc: location, closing_loc: location, unescaped: ""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: Prism::Node, pattern: Prism::Node, operator_loc: Prism::Location).returns(Prism::MatchPredicateNode) } - def match_predicate_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: default_node(source, location), pattern: default_node(source, location), operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, value: Prism::Node, pattern: Prism::Node, operator_loc: Prism::Location).returns(Prism::MatchRequiredNode) } - def match_required_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: default_node(source, location), pattern: default_node(source, location), operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, call: Prism::CallNode, targets: T::Array[Prism::LocalVariableTargetNode]).returns(Prism::MatchWriteNode) } - def match_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, call: call_node(source: source), targets: []); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::MissingNode) } - def missing_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, locals: T::Array[Symbol], module_keyword_loc: Prism::Location, constant_path: Prism::Node, body: T.nilable(Prism::Node), end_keyword_loc: Prism::Location, name: Symbol).returns(Prism::ModuleNode) } - def module_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], module_keyword_loc: location, constant_path: default_node(source, location), body: nil, end_keyword_loc: location, name: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, lefts: T::Array[T.any(Prism::LocalVariableTargetNode, Prism::InstanceVariableTargetNode, Prism::ClassVariableTargetNode, Prism::GlobalVariableTargetNode, Prism::ConstantTargetNode, Prism::ConstantPathTargetNode, Prism::CallTargetNode, Prism::IndexTargetNode, Prism::MultiTargetNode, Prism::RequiredParameterNode, Prism::BackReferenceReadNode, Prism::NumberedReferenceReadNode)], rest: T.nilable(T.any(Prism::ImplicitRestNode, Prism::SplatNode)), rights: T::Array[T.any(Prism::LocalVariableTargetNode, Prism::InstanceVariableTargetNode, Prism::ClassVariableTargetNode, Prism::GlobalVariableTargetNode, Prism::ConstantTargetNode, Prism::ConstantPathTargetNode, Prism::CallTargetNode, Prism::IndexTargetNode, Prism::MultiTargetNode, Prism::RequiredParameterNode, Prism::BackReferenceReadNode)], lparen_loc: T.nilable(Prism::Location), rparen_loc: T.nilable(Prism::Location)).returns(Prism::MultiTargetNode) } - def multi_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, lefts: [], rest: nil, rights: [], lparen_loc: nil, rparen_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, lefts: T::Array[T.any(Prism::LocalVariableTargetNode, Prism::InstanceVariableTargetNode, Prism::ClassVariableTargetNode, Prism::GlobalVariableTargetNode, Prism::ConstantTargetNode, Prism::ConstantPathTargetNode, Prism::CallTargetNode, Prism::IndexTargetNode, Prism::MultiTargetNode)], rest: T.nilable(T.any(Prism::ImplicitRestNode, Prism::SplatNode)), rights: T::Array[T.any(Prism::LocalVariableTargetNode, Prism::InstanceVariableTargetNode, Prism::ClassVariableTargetNode, Prism::GlobalVariableTargetNode, Prism::ConstantTargetNode, Prism::ConstantPathTargetNode, Prism::CallTargetNode, Prism::IndexTargetNode, Prism::MultiTargetNode)], lparen_loc: T.nilable(Prism::Location), rparen_loc: T.nilable(Prism::Location), operator_loc: Prism::Location, value: Prism::Node).returns(Prism::MultiWriteNode) } - def multi_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, lefts: [], rest: nil, rights: [], lparen_loc: nil, rparen_loc: nil, operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, arguments: T.nilable(Prism::ArgumentsNode), keyword_loc: Prism::Location).returns(Prism::NextNode) } - def next_node(source: default_source, node_id: 0, location: default_location, flags: 0, arguments: nil, keyword_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::NilNode) } - def nil_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, operator_loc: Prism::Location, keyword_loc: Prism::Location).returns(Prism::NoKeywordsParameterNode) } - def no_keywords_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, operator_loc: location, keyword_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, maximum: Integer).returns(Prism::NumberedParametersNode) } - def numbered_parameters_node(source: default_source, node_id: 0, location: default_location, flags: 0, maximum: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, number: Integer).returns(Prism::NumberedReferenceReadNode) } - def numbered_reference_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, number: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, value: Prism::Node).returns(Prism::OptionalKeywordParameterNode) } - def optional_keyword_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::OptionalParameterNode) } - def optional_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, left: Prism::Node, right: Prism::Node, operator_loc: Prism::Location).returns(Prism::OrNode) } - def or_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: default_node(source, location), right: default_node(source, location), operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, requireds: T::Array[T.any(Prism::RequiredParameterNode, Prism::MultiTargetNode)], optionals: T::Array[Prism::OptionalParameterNode], rest: T.nilable(T.any(Prism::RestParameterNode, Prism::ImplicitRestNode)), posts: T::Array[T.any(Prism::RequiredParameterNode, Prism::MultiTargetNode, Prism::KeywordRestParameterNode, Prism::NoKeywordsParameterNode, Prism::ForwardingParameterNode)], keywords: T::Array[T.any(Prism::RequiredKeywordParameterNode, Prism::OptionalKeywordParameterNode)], keyword_rest: T.nilable(T.any(Prism::KeywordRestParameterNode, Prism::ForwardingParameterNode, Prism::NoKeywordsParameterNode)), block: T.nilable(Prism::BlockParameterNode)).returns(Prism::ParametersNode) } - def parameters_node(source: default_source, node_id: 0, location: default_location, flags: 0, requireds: [], optionals: [], rest: nil, posts: [], keywords: [], keyword_rest: nil, block: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, body: T.nilable(Prism::Node), opening_loc: Prism::Location, closing_loc: Prism::Location).returns(Prism::ParenthesesNode) } - def parentheses_node(source: default_source, node_id: 0, location: default_location, flags: 0, body: nil, opening_loc: location, closing_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, expression: Prism::Node, operator_loc: Prism::Location, lparen_loc: Prism::Location, rparen_loc: Prism::Location).returns(Prism::PinnedExpressionNode) } - def pinned_expression_node(source: default_source, node_id: 0, location: default_location, flags: 0, expression: default_node(source, location), operator_loc: location, lparen_loc: location, rparen_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, variable: Prism::Node, operator_loc: Prism::Location).returns(Prism::PinnedVariableNode) } - def pinned_variable_node(source: default_source, node_id: 0, location: default_location, flags: 0, variable: default_node(source, location), operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, statements: T.nilable(Prism::StatementsNode), keyword_loc: Prism::Location, opening_loc: Prism::Location, closing_loc: Prism::Location).returns(Prism::PostExecutionNode) } - def post_execution_node(source: default_source, node_id: 0, location: default_location, flags: 0, statements: nil, keyword_loc: location, opening_loc: location, closing_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, statements: T.nilable(Prism::StatementsNode), keyword_loc: Prism::Location, opening_loc: Prism::Location, closing_loc: Prism::Location).returns(Prism::PreExecutionNode) } - def pre_execution_node(source: default_source, node_id: 0, location: default_location, flags: 0, statements: nil, keyword_loc: location, opening_loc: location, closing_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, locals: T::Array[Symbol], statements: Prism::StatementsNode).returns(Prism::ProgramNode) } - def program_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], statements: statements_node(source: source)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, left: T.nilable(Prism::Node), right: T.nilable(Prism::Node), operator_loc: Prism::Location).returns(Prism::RangeNode) } - def range_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: nil, right: nil, operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, numerator: Integer, denominator: Integer).returns(Prism::RationalNode) } - def rational_node(source: default_source, node_id: 0, location: default_location, flags: 0, numerator: 0, denominator: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::RedoNode) } - def redo_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, content_loc: Prism::Location, closing_loc: Prism::Location, unescaped: String).returns(Prism::RegularExpressionNode) } - def regular_expression_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, content_loc: location, closing_loc: location, unescaped: ""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol, name_loc: Prism::Location).returns(Prism::RequiredKeywordParameterNode) } - def required_keyword_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: Symbol).returns(Prism::RequiredParameterNode) } - def required_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, expression: Prism::Node, keyword_loc: Prism::Location, rescue_expression: Prism::Node).returns(Prism::RescueModifierNode) } - def rescue_modifier_node(source: default_source, node_id: 0, location: default_location, flags: 0, expression: default_node(source, location), keyword_loc: location, rescue_expression: default_node(source, location)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, exceptions: T::Array[Prism::Node], operator_loc: T.nilable(Prism::Location), reference: T.nilable(Prism::Node), statements: T.nilable(Prism::StatementsNode), consequent: T.nilable(Prism::RescueNode)).returns(Prism::RescueNode) } - def rescue_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, exceptions: [], operator_loc: nil, reference: nil, statements: nil, consequent: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, name: T.nilable(Symbol), name_loc: T.nilable(Prism::Location), operator_loc: Prism::Location).returns(Prism::RestParameterNode) } - def rest_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: nil, name_loc: nil, operator_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::RetryNode) } - def retry_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, arguments: T.nilable(Prism::ArgumentsNode)).returns(Prism::ReturnNode) } - def return_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, arguments: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::SelfNode) } - def self_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, write: T.any(Prism::ConstantWriteNode, Prism::ConstantAndWriteNode, Prism::ConstantOrWriteNode, Prism::ConstantOperatorWriteNode, Prism::ConstantPathWriteNode, Prism::ConstantPathAndWriteNode, Prism::ConstantPathOrWriteNode, Prism::ConstantPathOperatorWriteNode)).returns(Prism::ShareableConstantNode) } - def shareable_constant_node(source: default_source, node_id: 0, location: default_location, flags: 0, write: constant_write_node(source: source)); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, locals: T::Array[Symbol], class_keyword_loc: Prism::Location, operator_loc: Prism::Location, expression: Prism::Node, body: T.nilable(Prism::Node), end_keyword_loc: Prism::Location).returns(Prism::SingletonClassNode) } - def singleton_class_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], class_keyword_loc: location, operator_loc: location, expression: default_node(source, location), body: nil, end_keyword_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::SourceEncodingNode) } - def source_encoding_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, filepath: String).returns(Prism::SourceFileNode) } - def source_file_node(source: default_source, node_id: 0, location: default_location, flags: 0, filepath: ""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::SourceLineNode) } - def source_line_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, operator_loc: Prism::Location, expression: T.nilable(Prism::Node)).returns(Prism::SplatNode) } - def splat_node(source: default_source, node_id: 0, location: default_location, flags: 0, operator_loc: location, expression: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, body: T::Array[Prism::Node]).returns(Prism::StatementsNode) } - def statements_node(source: default_source, node_id: 0, location: default_location, flags: 0, body: []); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), content_loc: Prism::Location, closing_loc: T.nilable(Prism::Location), unescaped: String).returns(Prism::StringNode) } - def string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: nil, content_loc: location, closing_loc: nil, unescaped: ""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, lparen_loc: T.nilable(Prism::Location), arguments: T.nilable(Prism::ArgumentsNode), rparen_loc: T.nilable(Prism::Location), block: T.nilable(Prism::Node)).returns(Prism::SuperNode) } - def super_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, lparen_loc: nil, arguments: nil, rparen_loc: nil, block: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), value_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location), unescaped: String).returns(Prism::SymbolNode) } - def symbol_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: nil, value_loc: nil, closing_loc: nil, unescaped: ""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::TrueNode) } - def true_node(source: default_source, node_id: 0, location: default_location, flags: 0); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, names: T::Array[T.any(Prism::SymbolNode, Prism::InterpolatedSymbolNode)], keyword_loc: Prism::Location).returns(Prism::UndefNode) } - def undef_node(source: default_source, node_id: 0, location: default_location, flags: 0, names: [], keyword_loc: location); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, predicate: Prism::Node, then_keyword_loc: T.nilable(Prism::Location), statements: T.nilable(Prism::StatementsNode), consequent: T.nilable(Prism::ElseNode), end_keyword_loc: T.nilable(Prism::Location)).returns(Prism::UnlessNode) } - def unless_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, predicate: default_node(source, location), then_keyword_loc: nil, statements: nil, consequent: nil, end_keyword_loc: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).returns(Prism::UntilNode) } - def until_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, closing_loc: nil, predicate: default_node(source, location), statements: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, conditions: T::Array[Prism::Node], then_keyword_loc: T.nilable(Prism::Location), statements: T.nilable(Prism::StatementsNode)).returns(Prism::WhenNode) } - def when_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, conditions: [], then_keyword_loc: nil, statements: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).returns(Prism::WhileNode) } - def while_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, closing_loc: nil, predicate: default_node(source, location), statements: nil); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, content_loc: Prism::Location, closing_loc: Prism::Location, unescaped: String).returns(Prism::XStringNode) } - def x_string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, content_loc: location, closing_loc: location, unescaped: ""); end - - sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, lparen_loc: T.nilable(Prism::Location), arguments: T.nilable(Prism::ArgumentsNode), rparen_loc: T.nilable(Prism::Location)).returns(Prism::YieldNode) } - def yield_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, lparen_loc: nil, arguments: nil, rparen_loc: nil); end - - sig { params(name: Symbol).returns(Integer) } - def arguments_node_flag(name); end - - sig { params(name: Symbol).returns(Integer) } - def array_node_flag(name); end - - sig { params(name: Symbol).returns(Integer) } - def call_node_flag(name); end - - sig { params(name: Symbol).returns(Integer) } - def encoding_flag(name); end - - sig { params(name: Symbol).returns(Integer) } - def integer_base_flag(name); end - - sig { params(name: Symbol).returns(Integer) } - def interpolated_string_node_flag(name); end - - sig { params(name: Symbol).returns(Integer) } - def keyword_hash_node_flag(name); end - - sig { params(name: Symbol).returns(Integer) } - def loop_flag(name); end - - sig { params(name: Symbol).returns(Integer) } - def parameter_flag(name); end - - sig { params(name: Symbol).returns(Integer) } - def range_flag(name); end - - sig { params(name: Symbol).returns(Integer) } - def regular_expression_flag(name); end - - sig { params(name: Symbol).returns(Integer) } - def shareable_constant_node_flag(name); end - - sig { params(name: Symbol).returns(Integer) } - def string_flag(name); end - - sig { params(name: Symbol).returns(Integer) } - def symbol_flag(name); end - - private - - sig { returns(Prism::Source) } - def default_source; end - - sig { returns(Prism::Location) } - def default_location; end - - sig { params(source: Prism::Source, location: Prism::Location).returns(Prism::Node) } - def default_node(source, location); end -end From b3d9064b718bb1af410c7c196121de9ede1df9d0 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Fri, 19 Jul 2024 09:14:12 +0000 Subject: [PATCH 070/109] Fallback to pm_string_file_init on platforms without memory-mapped files > ..., and on other POSIX systems we'll use `read`. As `pm_string_mapped_init`'s doc comment says, it should fall back to `read(2)`-based implementation on platforms without memory-mapped files like WASI, but it didn't. This commit fixes it by calling `pm_string_file_init` in the fallback case. Also `defined(_POSIX_MAPPED_FILES)` check for `read(2)`-based path is unnecessary, and it prevents the fallback from being executed, so this change removes it. --- src/util/pm_string.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/util/pm_string.c b/src/util/pm_string.c index e9e597113f6..6545bce319f 100644 --- a/src/util/pm_string.c +++ b/src/util/pm_string.c @@ -143,10 +143,7 @@ pm_string_mapped_init(pm_string_t *string, const char *filepath) { *string = (pm_string_t) { .type = PM_STRING_MAPPED, .source = source, .length = size }; return true; #else - (void) string; - (void) filepath; - perror("pm_string_mapped_init is not implemented for this platform"); - return false; + return pm_string_file_init(string, filepath); #endif } @@ -205,7 +202,7 @@ pm_string_file_init(pm_string_t *string, const char *filepath) { CloseHandle(file); *string = (pm_string_t) { .type = PM_STRING_OWNED, .source = source, .length = (size_t) file_size }; return true; -#elif defined(_POSIX_MAPPED_FILES) +#else FILE *file = fopen(filepath, "rb"); if (file == NULL) { return false; @@ -244,11 +241,6 @@ pm_string_file_init(pm_string_t *string, const char *filepath) { *string = (pm_string_t) { .type = PM_STRING_OWNED, .source = source, .length = length }; return true; -#else - (void) string; - (void) filepath; - perror("pm_string_file_init is not implemented for this platform"); - return false; #endif } From 89c22f0e6cbe7aac81c789ca35786a9a97afcb57 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Sat, 20 Jul 2024 02:59:39 +0000 Subject: [PATCH 071/109] Add explicit check for PRISM_HAS_NO_FILESYSTEM --- include/prism/defines.h | 9 +++++++++ src/util/pm_string.c | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/prism/defines.h b/include/prism/defines.h index 849ca6d0516..a4246e67c8a 100644 --- a/include/prism/defines.h +++ b/include/prism/defines.h @@ -118,6 +118,15 @@ # endif #endif +/** + * If PRISM_HAS_NO_FILESYSTEM is defined, then we want to exclude all filesystem + * related code from the library. All filesystem related code should be guarded + * by PRISM_HAS_FILESYSTEM. + */ +#ifndef PRISM_HAS_NO_FILESYSTEM +# define PRISM_HAS_FILESYSTEM +#endif + /** * isinf on Windows is defined as accepting a float, but on POSIX systems it * accepts a float, a double, or a long double. We want to mirror this behavior diff --git a/src/util/pm_string.c b/src/util/pm_string.c index 6545bce319f..0a67accd866 100644 --- a/src/util/pm_string.c +++ b/src/util/pm_string.c @@ -202,7 +202,7 @@ pm_string_file_init(pm_string_t *string, const char *filepath) { CloseHandle(file); *string = (pm_string_t) { .type = PM_STRING_OWNED, .source = source, .length = (size_t) file_size }; return true; -#else +#elif defined(PRISM_HAS_FILESYSTEM) FILE *file = fopen(filepath, "rb"); if (file == NULL) { return false; @@ -241,6 +241,11 @@ pm_string_file_init(pm_string_t *string, const char *filepath) { *string = (pm_string_t) { .type = PM_STRING_OWNED, .source = source, .length = length }; return true; +#else + (void) string; + (void) filepath; + perror("pm_string_file_init is not implemented for this platform"); + return false; #endif } From 0846fdb33e8bcd7c14054d39fbd541615cb98681 Mon Sep 17 00:00:00 2001 From: Cameron Dutro Date: Sun, 28 Jul 2024 14:47:17 -0700 Subject: [PATCH 072/109] Avoid introducing new type --- config.yml | 12 +++++----- rust/ruby-prism/build.rs | 7 ++---- templates/javascript/src/nodes.js.erb | 7 +++--- templates/template.rb | 32 ++++++++++++--------------- 4 files changed, 25 insertions(+), 33 deletions(-) diff --git a/config.yml b/config.yml index 815d02264a3..879b1158a34 100644 --- a/config.yml +++ b/config.yml @@ -2833,7 +2833,7 @@ nodes: - name: closing_loc type: location - name: unescaped - type: encodedstring + type: string comment: | Represents a regular expression literal used in the predicate of a conditional to implicitly match against the last line read by an IO object. @@ -3413,7 +3413,7 @@ nodes: - name: closing_loc type: location - name: unescaped - type: encodedstring + type: string comment: | Represents a regular expression literal with no interpolation. @@ -3585,7 +3585,7 @@ nodes: type: flags kind: StringFlags - name: filepath - type: encodedstring + type: string comment: Represents the file path being parsed. This corresponds directly to the `filepath` option given to the various `Prism::parse*` APIs. comment: | Represents the use of the `__FILE__` keyword. @@ -3630,7 +3630,7 @@ nodes: - name: closing_loc type: location? - name: unescaped - type: encodedstring + type: string comment: | Represents a string literal, a string contained within a `%w` list, or plain string content within an interpolated string. @@ -3675,7 +3675,7 @@ nodes: - name: closing_loc type: location? - name: unescaped - type: encodedstring + type: string comment: | Represents a symbol literal or a symbol contained within a `%i` list. @@ -3842,7 +3842,7 @@ nodes: - name: closing_loc type: location - name: unescaped - type: encodedstring + type: string comment: | Represents an xstring literal with no interpolation. diff --git a/rust/ruby-prism/build.rs b/rust/ruby-prism/build.rs index 6039c7a63b3..958b658191c 100644 --- a/rust/ruby-prism/build.rs +++ b/rust/ruby-prism/build.rs @@ -19,9 +19,6 @@ enum NodeFieldType { #[serde(rename = "string")] String, - #[serde(rename = "encodedstring")] - EncodedString, - #[serde(rename = "constant")] Constant, @@ -285,7 +282,7 @@ fn write_node(file: &mut File, flags: &[Flags], node: &Node) -> Result<(), Box { + NodeFieldType::String => { writeln!(file, " pub const fn {}(&self) -> &str {{", field.name)?; writeln!(file, " \"\"")?; writeln!(file, " }}")?; @@ -761,7 +758,7 @@ impl TryInto for Integer<'_> {{ let length = unsafe {{ (*self.pointer).length }}; if length == 0 {{ - i32::try_from(unsafe {{ (*self.pointer).value }}).map_or(Err(()), |value| + i32::try_from(unsafe {{ (*self.pointer).value }}).map_or(Err(()), |value| if negative {{ Ok(-value) }} else {{ diff --git a/templates/javascript/src/nodes.js.erb b/templates/javascript/src/nodes.js.erb index 3a4b1350c42..d2d5f1deb4f 100644 --- a/templates/javascript/src/nodes.js.erb +++ b/templates/javascript/src/nodes.js.erb @@ -13,8 +13,7 @@ def jstype(field) when Prism::Template::NodeField then field.ruby_type when Prism::Template::OptionalNodeField then "#{field.ruby_type} | null" when Prism::Template::NodeListField then "Node[]" - when Prism::Template::EncodedStringField then "EncodedString" - when Prism::Template::StringField then "string" + when Prism::Template::StringField then "RubyString" when Prism::Template::ConstantField then "string" when Prism::Template::OptionalConstantField then "string | null" when Prism::Template::ConstantListField then "string[]" @@ -46,9 +45,9 @@ const <%= flag.name %> = { */ /** - * A string with associated encoding information. + * An encoded Ruby string. * - * @typedef {{ encoding: string, validEncoding: boolean, value: string }} EncodedString + * @typedef {{ value: string, encoding: string, validEncoding: boolean }} RubyString */ /** diff --git a/templates/template.rb b/templates/template.rb index 9f3d1be8d43..7a330f5e27c 100755 --- a/templates/template.rb +++ b/templates/template.rb @@ -289,9 +289,6 @@ def java_type end end - class EncodedStringField < StringField - end - # This represents a field on a node that is a location. class LocationField < Field def semantic_field? @@ -466,21 +463,20 @@ def needs_serialized_length? def field_type_for(name) case name - when "node" then NodeField - when "node?" then OptionalNodeField - when "node[]" then NodeListField - when "string" then StringField - when "encodedstring" then EncodedStringField - when "constant" then ConstantField - when "constant?" then OptionalConstantField - when "constant[]" then ConstantListField - when "location" then LocationField - when "location?" then OptionalLocationField - when "uint8" then UInt8Field - when "uint32" then UInt32Field - when "flags" then FlagsField - when "integer" then IntegerField - when "double" then DoubleField + when "node" then NodeField + when "node?" then OptionalNodeField + when "node[]" then NodeListField + when "string" then StringField + when "constant" then ConstantField + when "constant?" then OptionalConstantField + when "constant[]" then ConstantListField + when "location" then LocationField + when "location?" then OptionalLocationField + when "uint8" then UInt8Field + when "uint32" then UInt32Field + when "flags" then FlagsField + when "integer" then IntegerField + when "double" then DoubleField else raise("Unknown field type: #{name.inspect}") end end From 2d202fb71f52bfe7b8737730ba77cfc09747cb36 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 16:23:03 +0000 Subject: [PATCH 073/109] Bump parser from 3.3.3.0 to 3.3.4.0 in /gemfiles/3.1 Bumps [parser](https://github.com/whitequark/parser) from 3.3.3.0 to 3.3.4.0. - [Changelog](https://github.com/whitequark/parser/blob/master/CHANGELOG.md) - [Commits](https://github.com/whitequark/parser/compare/v3.3.3.0...v3.3.4.0) --- updated-dependencies: - dependency-name: parser dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/3.1/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/3.1/Gemfile.lock b/gemfiles/3.1/Gemfile.lock index 2d95653fa93..bc5d5458279 100644 --- a/gemfiles/3.1/Gemfile.lock +++ b/gemfiles/3.1/Gemfile.lock @@ -14,7 +14,7 @@ GEM mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) - parser (3.3.3.0) + parser (3.3.4.0) ast (~> 2.4.1) racc power_assert (2.0.3) From e0825d09996b43f27fd928381a9a98e7f0ab4bb3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 16:23:16 +0000 Subject: [PATCH 074/109] Bump rbs from 3.5.1 to 3.5.2 in /gemfiles/3.2 Bumps [rbs](https://github.com/ruby/rbs) from 3.5.1 to 3.5.2. - [Release notes](https://github.com/ruby/rbs/releases) - [Changelog](https://github.com/ruby/rbs/blob/master/CHANGELOG.md) - [Commits](https://github.com/ruby/rbs/compare/v3.5.1...v3.5.2) --- updated-dependencies: - dependency-name: rbs dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/3.2/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/3.2/Gemfile.lock b/gemfiles/3.2/Gemfile.lock index b36ca16a164..d605c5409d4 100644 --- a/gemfiles/3.2/Gemfile.lock +++ b/gemfiles/3.2/Gemfile.lock @@ -22,7 +22,7 @@ GEM rake (13.2.1) rake-compiler (1.2.7) rake - rbs (3.5.1) + rbs (3.5.2) logger ruby_memcheck (3.0.0) nokogiri From e354549fc3e9db2df47fafcbde33513a9ef3f215 Mon Sep 17 00:00:00 2001 From: Cameron Dutro Date: Sat, 3 Aug 2024 15:11:21 -0700 Subject: [PATCH 075/109] Get tests to pass --- templates/javascript/src/deserialize.js.erb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/templates/javascript/src/deserialize.js.erb b/templates/javascript/src/deserialize.js.erb index f2917a22489..e993324604a 100644 --- a/templates/javascript/src/deserialize.js.erb +++ b/templates/javascript/src/deserialize.js.erb @@ -22,8 +22,8 @@ const LITTLE_ENDIAN = (() => { })(); class SerializationBuffer { - FORCED_UTF8_ENCODING_FLAG = 1; - FORCED_BINARY_ENCODING_FLAG = 2; + FORCED_UTF8_ENCODING_FLAG = 1 << 2; + FORCED_BINARY_ENCODING_FLAG = 1 << 3; DECODER_MAP = new Map([ ["ascii-8bit", "ascii"] @@ -134,7 +134,10 @@ class SerializationBuffer { } decodeString(bytes, flags) { - if (flags & this.FORCED_BINARY_ENCODING_FLAG) { + const forcedBin = (flags & this.FORCED_BINARY_ENCODING_FLAG) !== 0; + const forcedUtf8 = (flags & this.FORCED_UTF8_ENCODING_FLAG) !== 0; + + if (forcedBin) { // just use raw bytes return { encoding: "ascii", @@ -142,7 +145,7 @@ class SerializationBuffer { value: this.asciiDecoder.decode(bytes) }; } else { - const encoding = flags & this.FORCED_UTF8_ENCODING_FLAG ? "utf-8" : this.fileEncoding.toLowerCase(); + const encoding = forcedUtf8 ? "utf-8" : this.fileEncoding.toLowerCase(); const decoder = this.getDecoder(encoding); try { From f453b91139580f1d9aae9b1a6e7abfb595ec4529 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2024 16:26:52 +0000 Subject: [PATCH 076/109] Bump steep from 1.8.0.dev.1 to 1.8.0.dev.2 in /gemfiles/typecheck Bumps [steep](https://github.com/soutaro/steep) from 1.8.0.dev.1 to 1.8.0.dev.2. - [Release notes](https://github.com/soutaro/steep/releases) - [Changelog](https://github.com/soutaro/steep/blob/master/CHANGELOG.md) - [Commits](https://github.com/soutaro/steep/compare/v1.8.0.dev.1...v1.8.0.dev.2) --- updated-dependencies: - dependency-name: steep dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/typecheck/Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index b2386c27021..0bf6c7ae634 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -39,7 +39,7 @@ GEM racc power_assert (2.0.3) prism (0.30.0) - racc (1.8.0) + racc (1.8.1) rainbow (3.1.1) rake (13.2.1) rake-compiler (1.2.7) @@ -70,7 +70,7 @@ GEM prism (>= 0.28.0) sorbet-static-and-runtime (>= 0.5.10187) thor (>= 0.19.2) - steep (1.8.0.dev.1) + steep (1.8.0.dev.2) activesupport (>= 5.1) concurrent-ruby (>= 1.1.10) csv (>= 3.0.9) From ee331941c03aef01f6740df8f07e83261fe6d3bc Mon Sep 17 00:00:00 2001 From: Koichi ITO Date: Tue, 30 Jul 2024 14:52:48 +0900 Subject: [PATCH 077/109] [Doc] Tweak the docs for lex APIs `Prism.lex` and `Prism.lex_file` return `ParseLexResult` instead of `Array`. `Prism::parse_lex` and `Prism::parse_lex_file` return `ParseLexResult` instead of `ParseResult`. This PR updates the documentation to reflect these return values. --- ext/prism/extension.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ext/prism/extension.c b/ext/prism/extension.c index 64affd40013..00a0ce49574 100644 --- a/ext/prism/extension.c +++ b/ext/prism/extension.c @@ -653,9 +653,9 @@ parse_lex_input(pm_string_t *input, const pm_options_t *options, bool return_nod /** * call-seq: - * Prism::lex(source, **options) -> Array + * Prism::lex(source, **options) -> ParseLexResult * - * Return an array of Token instances corresponding to the given string. For + * Return a ParseLexResult instance that contains an array of Token instances corresponding to the given string. For * supported options, see Prism::parse. */ static VALUE @@ -673,9 +673,9 @@ lex(int argc, VALUE *argv, VALUE self) { /** * call-seq: - * Prism::lex_file(filepath, **options) -> Array + * Prism::lex_file(filepath, **options) -> ParseLexResult * - * Return an array of Token instances corresponding to the given file. For + * Return a ParseLexResult instance that contains an array of Token instances corresponding to the given file. For * supported options, see Prism::parse. */ static VALUE @@ -961,9 +961,9 @@ parse_file_comments(int argc, VALUE *argv, VALUE self) { /** * call-seq: - * Prism::parse_lex(source, **options) -> ParseResult + * Prism::parse_lex(source, **options) -> ParseLexResult * - * Parse the given string and return a ParseResult instance that contains a + * Parse the given string and return a ParseLexResult instance that contains a * 2-element array, where the first element is the AST and the second element is * an array of Token instances. * @@ -988,9 +988,9 @@ parse_lex(int argc, VALUE *argv, VALUE self) { /** * call-seq: - * Prism::parse_lex_file(filepath, **options) -> ParseResult + * Prism::parse_lex_file(filepath, **options) -> ParseLexResult * - * Parse the given file and return a ParseResult instance that contains a + * Parse the given file and return a ParseLexResult instance that contains a * 2-element array, where the first element is the AST and the second element is * an array of Token instances. * From cca59dff313b4cc082c1d1f33812d83be59220ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2024 16:26:43 +0000 Subject: [PATCH 078/109] Bump sorbet from 0.5.11491 to 0.5.11506 in /gemfiles/typecheck Bumps [sorbet](https://github.com/sorbet/sorbet) from 0.5.11491 to 0.5.11506. - [Release notes](https://github.com/sorbet/sorbet/releases) - [Commits](https://github.com/sorbet/sorbet/commits) --- updated-dependencies: - dependency-name: sorbet dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/typecheck/Gemfile.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index b2386c27021..def84c581af 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -57,14 +57,14 @@ GEM sexp_processor (~> 4.16) securerandom (0.3.1) sexp_processor (4.17.2) - sorbet (0.5.11491) - sorbet-static (= 0.5.11491) - sorbet-runtime (0.5.11491) - sorbet-static (0.5.11491-universal-darwin) - sorbet-static (0.5.11491-x86_64-linux) - sorbet-static-and-runtime (0.5.11491) - sorbet (= 0.5.11491) - sorbet-runtime (= 0.5.11491) + sorbet (0.5.11506) + sorbet-static (= 0.5.11506) + sorbet-runtime (0.5.11506) + sorbet-static (0.5.11506-universal-darwin) + sorbet-static (0.5.11506-x86_64-linux) + sorbet-static-and-runtime (0.5.11506) + sorbet (= 0.5.11506) + sorbet-runtime (= 0.5.11506) spoom (1.3.3) erubi (>= 1.10.0) prism (>= 0.28.0) From 7c9ca47ac58dcce11e90ccb57ca4dcac2c768514 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Mon, 12 Aug 2024 14:22:21 -0400 Subject: [PATCH 079/109] Add sample for generating tags --- sample/prism/make_tags.rb | 302 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 302 insertions(+) create mode 100644 sample/prism/make_tags.rb diff --git a/sample/prism/make_tags.rb b/sample/prism/make_tags.rb new file mode 100644 index 00000000000..dc770ab1b08 --- /dev/null +++ b/sample/prism/make_tags.rb @@ -0,0 +1,302 @@ +# This script generates a tags file using Prism to parse the Ruby files. + +require "prism" + +# This visitor is responsible for visiting the nodes in the AST and generating +# the appropriate tags. The tags are stored in the entries array as strings. +class TagsVisitor < Prism::Visitor + # This represents an entry in the tags file, which is a tab-separated line. It + # houses the logic for how an entry is constructed. + class Entry + attr_reader :parts + + def initialize(name, filepath, pattern, type) + @parts = [name, filepath, pattern, type] + end + + def attribute(key, value) + parts << "#{key}:#{value}" + end + + def attribute_class(nesting, names) + return if nesting.empty? && names.length == 1 + attribute("class", [*nesting, names].flatten.tap(&:pop).join(".")) + end + + def attribute_inherits(names) + attribute("inherits", names.join(".")) if names + end + + def to_line + parts.join("\t") + end + end + + private_constant :Entry + + attr_reader :entries, :filepath, :lines, :nesting, :singleton + + # Initialize the visitor with the given parameters. The first three parameters + # are constant throughout the visit, while the last two are controlled by the + # visitor as it traverses the AST. These are treated as immutable by virtue of + # the visit methods constructing new visitors when they need to change. + def initialize(entries, filepath, lines, nesting = [], singleton = false) + @entries = entries + @filepath = filepath + @lines = lines + @nesting = nesting + @singleton = singleton + end + + # Visit a method alias node and generate the appropriate tags. + # + # alias m2 m1 + # + def visit_alias_method_node(node) + enter(node.new_name.unescaped.to_sym, node, "a") do |entry| + entry.attribute_class(nesting, [nil]) + end + + super + end + + # Visit a method call to attr_reader, attr_writer, or attr_accessor without a + # receiver and generate the appropriate tags. Note that this ignores the fact + # that these methods could be overridden, which is a limitation of this + # script. + # + # attr_accessor :m1 + # + def visit_call_node(node) + if !node.receiver && %i[attr_reader attr_writer attr_accessor].include?(name = node.name) + (node.arguments&.arguments || []).grep(Prism::SymbolNode).each do |argument| + if name != :attr_writer + enter(:"#{argument.unescaped}", argument, singleton ? "F" : "f") do |entry| + entry.attribute_class(nesting, [nil]) + end + end + + if name != :attr_reader + enter(:"#{argument.unescaped}=", argument, singleton ? "F" : "f") do |entry| + entry.attribute_class(nesting, [nil]) + end + end + end + end + + super + end + + # Visit a class node and generate the appropriate tags. + # + # class C1 + # end + # + def visit_class_node(node) + if (names = names_for(node.constant_path)) + enter(names.last, node, "c") do |entry| + entry.attribute_class(nesting, names) + entry.attribute_inherits(names_for(node.superclass)) + end + + node.body&.accept(copy_visitor([*nesting, names], singleton)) + end + end + + # Visit a constant path write node and generate the appropriate tags. + # + # C1::C2 = 1 + # + def visit_constant_path_write_node(node) + if (names = names_for(node.target)) + enter(names.last, node, "C") do |entry| + entry.attribute_class(nesting, names) + end + end + + super + end + + # Visit a constant write node and generate the appropriate tags. + # + # C1 = 1 + # + def visit_constant_write_node(node) + enter(node.name, node, "C") do |entry| + entry.attribute_class(nesting, [nil]) + end + + super + end + + # Visit a method definition node and generate the appropriate tags. + # + # def m1; end + # + def visit_def_node(node) + enter(node.name, node, (node.receiver || singleton) ? "F" : "f") do |entry| + entry.attribute_class(nesting, [nil]) + end + + super + end + + # Visit a module node and generate the appropriate tags. + # + # module M1 + # end + # + def visit_module_node(node) + if (names = names_for(node.constant_path)) + enter(names.last, node, "m") do |entry| + entry.attribute_class(nesting, names) + end + + node.body&.accept(copy_visitor([*nesting, names], singleton)) + end + end + + # Visit a singleton class node and generate the appropriate tags. + # + # class << self + # end + # + def visit_singleton_class_node(node) + case node.expression + when Prism::SelfNode + node.body&.accept(copy_visitor(nesting, true)) + when Prism::ConstantReadNode, Prism::ConstantPathNode + if (names = names_for(node.expression)) + node.body&.accept(copy_visitor([*nesting, names], true)) + end + else + node.body&.accept(copy_visitor([*nesting, nil], true)) + end + end + + private + + # Generate a new visitor with the given dynamic options. The static options + # are copied over automatically. + def copy_visitor(nesting, singleton) + TagsVisitor.new(entries, filepath, lines, nesting, singleton) + end + + # Generate a new entry for the given name, node, and type and add it into the + # list of entries. The block is used to add additional attributes to the + # entry. + def enter(name, node, type) + line = lines[node.location.start_line - 1].chomp + pattern = "/^#{line.gsub("\\", "\\\\\\\\").gsub("/", "\\/")}$/;\"" + + entry = Entry.new(name, filepath, pattern, type) + yield entry + + entries << entry.to_line + end + + # Retrieve the names for the given node. This is used to construct the class + # attribute for the tags. + def names_for(node) + case node + when Prism::ConstantPathNode + names = names_for(node.parent) + return unless names + + names << node.name + when Prism::ConstantReadNode + [node.name] + when Prism::SelfNode + [:self] + else + # dynamic + end + end +end + +# Parse the Ruby file and visit all of the nodes in the resulting AST. Once all +# of the nodes have been visited, the entries array should be populated with the +# tags. +result = Prism.parse_stream(DATA) +result.value.accept(TagsVisitor.new(entries = [], __FILE__, result.source.lines)) + +# Print the tags to STDOUT. +puts "!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;\" to lines/" +puts "!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/" +puts entries.sort + +# => +# !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +# !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ +# C1 sample/prism/make_tags.rb /^ class C1$/;" c class:M1.M2 +# C2 sample/prism/make_tags.rb /^ class C2 < Object$/;" c class:M1.M2.C1 inherits:Object +# C6 sample/prism/make_tags.rb /^ C6 = 1$/;" C class:M1 +# C7 sample/prism/make_tags.rb /^ C7 = 2$/;" C class:M1 +# C9 sample/prism/make_tags.rb /^ C8::C9 = 3$/;" C class:M1.C8 +# M1 sample/prism/make_tags.rb /^module M1$/;" m +# M2 sample/prism/make_tags.rb /^ module M2$/;" m class:M1 +# M4 sample/prism/make_tags.rb /^ module M3::M4$/;" m class:M1.M3 +# M5 sample/prism/make_tags.rb /^ module self::M5$/;" m class:M1.self +# m1 sample/prism/make_tags.rb /^ def m1; end$/;" f class:M1.M2.C1.C2 +# m10 sample/prism/make_tags.rb /^ attr_accessor :m10, :m11$/;" f class:M1.M3.M4 +# m10= sample/prism/make_tags.rb /^ attr_accessor :m10, :m11$/;" f class:M1.M3.M4 +# m11 sample/prism/make_tags.rb /^ attr_accessor :m10, :m11$/;" f class:M1.M3.M4 +# m11= sample/prism/make_tags.rb /^ attr_accessor :m10, :m11$/;" f class:M1.M3.M4 +# m12 sample/prism/make_tags.rb /^ attr_reader :m12, :m13, :m14$/;" f class:M1.M3.M4 +# m13 sample/prism/make_tags.rb /^ attr_reader :m12, :m13, :m14$/;" f class:M1.M3.M4 +# m14 sample/prism/make_tags.rb /^ attr_reader :m12, :m13, :m14$/;" f class:M1.M3.M4 +# m15= sample/prism/make_tags.rb /^ attr_writer :m15$/;" f class:M1.M3.M4 +# m2 sample/prism/make_tags.rb /^ def m2; end$/;" f class:M1.M2.C1.C2 +# m3 sample/prism/make_tags.rb /^ alias m3 m1$/;" a class:M1.M2.C1.C2 +# m4 sample/prism/make_tags.rb /^ alias :m4 :m2$/;" a class:M1.M2.C1.C2 +# m5 sample/prism/make_tags.rb /^ def self.m5; end$/;" F class:M1.M2.C1.C2 +# m6 sample/prism/make_tags.rb /^ def m6; end$/;" F class:M1.M2.C1.C2 +# m7 sample/prism/make_tags.rb /^ def m7; end$/;" F class:M1.M2.C1.C2.C3 +# m8 sample/prism/make_tags.rb /^ def m8; end$/;" F class:M1.M2.C1.C2.C4.C5 +# m9 sample/prism/make_tags.rb /^ def m9; end$/;" F class:M1.M2.C1.C2. + +__END__ +module M1 + module M2 + class C1 + class C2 < Object + def m1; end + def m2; end + + alias m3 m1 + alias :m4 :m2 + + def self.m5; end + + class << self + def m6; end + end + + class << C3 + def m7; end + end + + class << C4::C5 + def m8; end + end + + class << c + def m9; end + end + end + end + end + + module M3::M4 + attr_accessor :m10, :m11 + attr_reader :m12, :m13, :m14 + attr_writer :m15 + end + + module self::M5 + end + + C6 = 1 + C7 = 2 + C8::C9 = 3 +end From 69c21aae3e6d8610e03d0189e3eca7635b2c1cc0 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Mon, 12 Aug 2024 15:02:04 -0400 Subject: [PATCH 080/109] Bump parser dep --- gemfiles/2.7/Gemfile.lock | 4 ++-- gemfiles/3.0/Gemfile.lock | 4 ++-- gemfiles/3.1/Gemfile.lock | 4 ++-- gemfiles/3.2/Gemfile.lock | 4 ++-- gemfiles/3.3/Gemfile.lock | 4 ++-- gemfiles/3.4/Gemfile.lock | 4 ++-- gemfiles/jruby/Gemfile.lock | 4 ++-- gemfiles/truffleruby/Gemfile.lock | 4 ++-- gemfiles/typecheck/Gemfile.lock | 5 ++--- 9 files changed, 18 insertions(+), 19 deletions(-) diff --git a/gemfiles/2.7/Gemfile.lock b/gemfiles/2.7/Gemfile.lock index 91129100158..1cd717bfb61 100644 --- a/gemfiles/2.7/Gemfile.lock +++ b/gemfiles/2.7/Gemfile.lock @@ -9,11 +9,11 @@ GEM ast (2.4.2) ffi (1.16.3) onigmo (0.1.0) - parser (3.3.4.0) + parser (3.3.4.2) ast (~> 2.4.1) racc power_assert (2.0.3) - racc (1.8.0) + racc (1.8.1) rake (13.2.1) rake-compiler (1.2.7) rake diff --git a/gemfiles/3.0/Gemfile.lock b/gemfiles/3.0/Gemfile.lock index 82163ef0edf..ac04f9d10bd 100644 --- a/gemfiles/3.0/Gemfile.lock +++ b/gemfiles/3.0/Gemfile.lock @@ -14,11 +14,11 @@ GEM mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) - parser (3.3.4.0) + parser (3.3.4.2) ast (~> 2.4.1) racc power_assert (2.0.3) - racc (1.8.0) + racc (1.8.1) rake (13.2.1) rake-compiler (1.2.7) rake diff --git a/gemfiles/3.1/Gemfile.lock b/gemfiles/3.1/Gemfile.lock index bc5d5458279..617d0ddc939 100644 --- a/gemfiles/3.1/Gemfile.lock +++ b/gemfiles/3.1/Gemfile.lock @@ -14,11 +14,11 @@ GEM mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) - parser (3.3.4.0) + parser (3.3.4.2) ast (~> 2.4.1) racc power_assert (2.0.3) - racc (1.8.0) + racc (1.8.1) rake (13.2.1) rake-compiler (1.2.7) rake diff --git a/gemfiles/3.2/Gemfile.lock b/gemfiles/3.2/Gemfile.lock index d605c5409d4..e1f89edf38d 100644 --- a/gemfiles/3.2/Gemfile.lock +++ b/gemfiles/3.2/Gemfile.lock @@ -14,11 +14,11 @@ GEM mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) - parser (3.3.3.0) + parser (3.3.4.2) ast (~> 2.4.1) racc power_assert (2.0.3) - racc (1.8.0) + racc (1.8.1) rake (13.2.1) rake-compiler (1.2.7) rake diff --git a/gemfiles/3.3/Gemfile.lock b/gemfiles/3.3/Gemfile.lock index efc68554809..cb4fb41f342 100644 --- a/gemfiles/3.3/Gemfile.lock +++ b/gemfiles/3.3/Gemfile.lock @@ -14,11 +14,11 @@ GEM mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) - parser (3.3.3.0) + parser (3.3.4.2) ast (~> 2.4.1) racc power_assert (2.0.3) - racc (1.8.0) + racc (1.8.1) rake (13.2.1) rake-compiler (1.2.7) rake diff --git a/gemfiles/3.4/Gemfile.lock b/gemfiles/3.4/Gemfile.lock index 332d0f9dda2..8c605fc9ae9 100644 --- a/gemfiles/3.4/Gemfile.lock +++ b/gemfiles/3.4/Gemfile.lock @@ -14,11 +14,11 @@ GEM mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) - parser (3.3.3.0) + parser (3.3.4.2) ast (~> 2.4.1) racc power_assert (2.0.3) - racc (1.8.0) + racc (1.8.1) rake (13.2.1) rake-compiler (1.2.7) rake diff --git a/gemfiles/jruby/Gemfile.lock b/gemfiles/jruby/Gemfile.lock index 4e52d73994d..38e2d05bf6b 100644 --- a/gemfiles/jruby/Gemfile.lock +++ b/gemfiles/jruby/Gemfile.lock @@ -7,11 +7,11 @@ GEM remote: https://rubygems.org/ specs: ast (2.4.2) - parser (3.3.3.0) + parser (3.3.4.2) ast (~> 2.4.1) racc power_assert (2.0.3) - racc (1.8.0-java) + racc (1.8.1-java) rake (13.2.1) rake-compiler (1.2.7) rake diff --git a/gemfiles/truffleruby/Gemfile.lock b/gemfiles/truffleruby/Gemfile.lock index b87abd5cf25..1fe04864c5a 100644 --- a/gemfiles/truffleruby/Gemfile.lock +++ b/gemfiles/truffleruby/Gemfile.lock @@ -7,11 +7,11 @@ GEM remote: https://rubygems.org/ specs: ast (2.4.2) - parser (3.3.3.0) + parser (3.3.4.2) ast (~> 2.4.1) racc power_assert (2.0.3) - racc (1.8.0) + racc (1.8.1) rake (13.2.1) rake-compiler (1.2.7) rake diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index 3dd0089a81d..7bce0c74781 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -19,8 +19,7 @@ GEM csv (3.3.0) drb (2.2.1) erubi (1.13.0) - ffi (1.17.0-arm64-darwin) - ffi (1.17.0-x86_64-linux-gnu) + ffi (1.17.0) fileutils (1.7.2) i18n (1.14.5) concurrent-ruby (~> 1.0) @@ -34,7 +33,7 @@ GEM mutex_m (0.2.0) netrc (0.11.0) parallel (1.25.1) - parser (3.3.4.0) + parser (3.3.4.2) ast (~> 2.4.1) racc power_assert (2.0.3) From af3946e2a948ac6118d1febe546a81c16eb11265 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Mon, 12 Aug 2024 16:00:35 -0400 Subject: [PATCH 081/109] Bump deps for rbs --- gemfiles/3.3/Gemfile.lock | 2 +- gemfiles/3.4/Gemfile.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gemfiles/3.3/Gemfile.lock b/gemfiles/3.3/Gemfile.lock index cb4fb41f342..f43c22ef3be 100644 --- a/gemfiles/3.3/Gemfile.lock +++ b/gemfiles/3.3/Gemfile.lock @@ -22,7 +22,7 @@ GEM rake (13.2.1) rake-compiler (1.2.7) rake - rbs (3.5.1) + rbs (3.5.2) logger ruby_memcheck (3.0.0) nokogiri diff --git a/gemfiles/3.4/Gemfile.lock b/gemfiles/3.4/Gemfile.lock index 8c605fc9ae9..5e06a79655e 100644 --- a/gemfiles/3.4/Gemfile.lock +++ b/gemfiles/3.4/Gemfile.lock @@ -22,7 +22,7 @@ GEM rake (13.2.1) rake-compiler (1.2.7) rake - rbs (3.5.1) + rbs (3.5.2) logger ruby_memcheck (3.0.0) nokogiri From 50d79b734b4f1913ef4132b4b7c38974e04be3f6 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 13 Aug 2024 08:41:00 -0400 Subject: [PATCH 082/109] Fix up spacing in generated node.rb --- templates/lib/prism/node.rb.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/lib/prism/node.rb.erb b/templates/lib/prism/node.rb.erb index 1cd0ce0ba07..06a7212f61a 100644 --- a/templates/lib/prism/node.rb.erb +++ b/templates/lib/prism/node.rb.erb @@ -331,7 +331,7 @@ module Prism end end <%- else -%> - attr_reader :<%= field.name -%> + attr_reader :<%= field.name %> <%- end -%> <%- end -%> <%- node.fields.each do |field| -%> From e7421ce1c500c26ebefb06fe3ac64e31660290dd Mon Sep 17 00:00:00 2001 From: Koichi ITO Date: Wed, 14 Aug 2024 11:46:59 +0900 Subject: [PATCH 083/109] Tweak inspect representation of `Prism::Location` This PR tweaks inspect representation of `Prism::Location`. ## Before During debugging, the meaning of `@location=21474836481` was unclear: ```console $ ruby -Ilib -rprism -e 'p Prism.lex("puts :hi").value.map(&:first)[1]' #, @type=:SYMBOL_BEGIN, @value=":", @location=21474836481> ``` ## After This PR clarifies the contents of the location object, aligning with what I think user expects: ```console $ ruby -Ilib -rprism -e 'p Prism.lex("puts :hi").value.map(&:first)[1]' #, @type=:SYMBOL_BEGIN, @value=":", @location=#> ``` Although it is uncertain whether Prism will accept this change in the inspect representation, it is submitted here as a suggestion. --- lib/prism/parse_result.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/prism/parse_result.rb b/lib/prism/parse_result.rb index df1d66f44cb..c3b4bc88875 100644 --- a/lib/prism/parse_result.rb +++ b/lib/prism/parse_result.rb @@ -711,5 +711,11 @@ def ==(other) other.type == type && other.value == value end + + # Returns a string representation of this token. + def inspect + location + super + end end end From afc50003317ef28d205ea4130e1f31ede8835d92 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 14 Aug 2024 13:26:00 -0400 Subject: [PATCH 084/109] Callback on shebang switches Add the ability to receive a callback when the parser encounters a shebang that contains additional switches after the Ruby engine. This is necessary because some command-line flags may be present there that will alter the parse. --- include/prism/options.h | 41 ++++++++++++++++++++++++++++++++++++++++- src/options.c | 9 +++++++++ src/prism.c | 41 ++++++++++++++++++++++++++++++++++++++--- 3 files changed, 87 insertions(+), 4 deletions(-) diff --git a/include/prism/options.h b/include/prism/options.h index 784769f8802..52b5380965a 100644 --- a/include/prism/options.h +++ b/include/prism/options.h @@ -40,6 +40,23 @@ typedef struct pm_options_scope { pm_string_t *locals; } pm_options_scope_t; +// Forward declaration needed by the callback typedef. +struct pm_options; + +/** + * The callback called when additional switches are found in a shebang comment + * that need to be processed by the runtime. + * + * @param options The options struct that may be updated by this callback. + * Certain fields will be checked for changes, specifically encoding, + * command_line, and frozen_string_literal. + * @param source The source of the shebang comment. + * @param length The length of the source. + * @param shebang_callback_data Any additional data that should be passed along + * to the callback. + */ +typedef void (*pm_options_shebang_callback_t)(struct pm_options *options, const uint8_t *source, size_t length, void *shebang_callback_data); + /** * The version of Ruby syntax that we should be parsing with. This is used to * allow consumers to specify which behavior they want in case they need to @@ -56,7 +73,19 @@ typedef enum { /** * The options that can be passed to the parser. */ -typedef struct { +typedef struct pm_options { + /** + * The callback to call when additional switches are found in a shebang + * comment. + */ + pm_options_shebang_callback_t shebang_callback; + + /** + * Any additional data that should be passed along to the shebang callback + * if one was set. + */ + void *shebang_callback_data; + /** The name of the file that is currently being parsed. */ pm_string_t filepath; @@ -149,6 +178,16 @@ static const uint8_t PM_OPTIONS_COMMAND_LINE_P = 0x10; */ static const uint8_t PM_OPTIONS_COMMAND_LINE_X = 0x20; +/** + * Set the shebang callback option on the given options struct. + * + * @param options The options struct to set the shebang callback on. + * @param shebang_callback The shebang callback to set. + * @param shebang_callback_data Any additional data that should be passed along + * to the callback. + */ +PRISM_EXPORTED_FUNCTION void pm_options_shebang_callback_set(pm_options_t *options, pm_options_shebang_callback_t shebang_callback, void *shebang_callback_data); + /** * Set the filepath option on the given options struct. * diff --git a/src/options.c b/src/options.c index 2ab2f260fdc..643de9d95a3 100644 --- a/src/options.c +++ b/src/options.c @@ -1,5 +1,14 @@ #include "prism/options.h" +/** + * Set the shebang callback option on the given options struct. + */ +PRISM_EXPORTED_FUNCTION void +pm_options_shebang_callback_set(pm_options_t *options, pm_options_shebang_callback_t shebang_callback, void *shebang_callback_data) { + options->shebang_callback = shebang_callback; + options->shebang_callback_data = shebang_callback_data; +} + /** * Set the filepath option on the given options struct. */ diff --git a/src/prism.c b/src/prism.c index 285319ca91c..30fb1ad2986 100644 --- a/src/prism.c +++ b/src/prism.c @@ -21713,6 +21713,33 @@ pm_parser_warn_shebang_carriage_return(pm_parser_t *parser, const uint8_t *start } } +/** + * Process the shebang when initializing the parser. This function assumes that + * the shebang_callback option has already been checked for nullability. + */ +static void +pm_parser_init_shebang(pm_parser_t *parser, const pm_options_t *options, const char *engine, size_t length) { + const char *switches = pm_strnstr(engine, " -", length); + if (switches == NULL) return; + + pm_options_t next_options = *options; + options->shebang_callback( + &next_options, + (const uint8_t *) (switches + 1), + length - ((size_t) (switches - engine)) - 1, + options->shebang_callback_data + ); + + size_t encoding_length; + if ((encoding_length = pm_string_length(&next_options.encoding)) > 0) { + const uint8_t *encoding_source = pm_string_source(&next_options.encoding); + parser_lex_magic_comment_encoding_value(parser, encoding_source, encoding_source + encoding_length); + } + + parser->command_line = next_options.command_line; + parser->frozen_string_literal = next_options.frozen_string_literal; +} + /** * Initialize a parser with the given start and end pointers. */ @@ -21872,9 +21899,13 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm const uint8_t *newline = next_newline(parser->start, parser->end - parser->start); size_t length = (size_t) ((newline != NULL ? newline : parser->end) - parser->start); - if (pm_strnstr((const char *) parser->start, "ruby", length) != NULL) { + const char *engine; + if ((engine = pm_strnstr((const char *) parser->start, "ruby", length)) != NULL) { pm_parser_warn_shebang_carriage_return(parser, parser->start, length); if (newline != NULL) parser->encoding_comment_start = newline + 1; + if (options != NULL && options->shebang_callback != NULL) { + pm_parser_init_shebang(parser, options, engine, length - ((size_t) (engine - (const char *) parser->start))); + } search_shebang = false; } else if (!parser->parsing_eval) { search_shebang = true; @@ -21908,9 +21939,13 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm pm_parser_warn_shebang_carriage_return(parser, cursor, length); } - if (pm_strnstr((const char *) cursor, "ruby", length) != NULL) { + const char *engine; + if ((engine = pm_strnstr((const char *) cursor, "ruby", length)) != NULL) { found_shebang = true; - parser->encoding_comment_start = newline + 1; + if (newline != NULL) parser->encoding_comment_start = newline + 1; + if (options != NULL && options->shebang_callback != NULL) { + pm_parser_init_shebang(parser, options, engine, length - ((size_t) (engine - (const char *) cursor))); + } break; } } From 9f1f7d08bdc1e86deb224d027a91b5126df4622d Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Thu, 15 Aug 2024 12:24:49 -0400 Subject: [PATCH 085/109] Special error for too short unicode errors --- config.yml | 1 + src/prism.c | 5 ++++- templates/src/diagnostic.c.erb | 1 + test/prism/errors/regexp_unicode_too_short.txt | 3 +++ 4 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 test/prism/errors/regexp_unicode_too_short.txt diff --git a/config.yml b/config.yml index fed82651732..6ead7a9d954 100644 --- a/config.yml +++ b/config.yml @@ -83,6 +83,7 @@ errors: - ESCAPE_INVALID_UNICODE_CM_FLAGS - ESCAPE_INVALID_UNICODE_LITERAL - ESCAPE_INVALID_UNICODE_LONG + - ESCAPE_INVALID_UNICODE_SHORT - ESCAPE_INVALID_UNICODE_TERM - EXPECT_ARGUMENT - EXPECT_EOL_AFTER_STATEMENT diff --git a/src/prism.c b/src/prism.c index 30fb1ad2986..a706881e3e8 100644 --- a/src/prism.c +++ b/src/prism.c @@ -9771,7 +9771,10 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre } else { size_t length = pm_strspn_hexadecimal_digit(parser->current.end, MIN(parser->end - parser->current.end, 4)); - if (length == 4) { + if (length == 0) { + const uint8_t *start = parser->current.end - 2; + PM_PARSER_ERR_FORMAT(parser, start, parser->current.end, PM_ERR_ESCAPE_INVALID_UNICODE_SHORT, 2, start); + } else if (length == 4) { uint32_t value = escape_unicode(parser, parser->current.end, 4); if (flags & PM_ESCAPE_FLAG_REGEXP) { diff --git a/templates/src/diagnostic.c.erb b/templates/src/diagnostic.c.erb index 5e6858ac616..d3fabb84494 100644 --- a/templates/src/diagnostic.c.erb +++ b/templates/src/diagnostic.c.erb @@ -167,6 +167,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_ERR_ESCAPE_INVALID_UNICODE_CM_FLAGS] = { "invalid Unicode escape sequence; Unicode cannot be combined with control or meta flags", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ESCAPE_INVALID_UNICODE_LITERAL] = { "invalid Unicode escape sequence; Multiple codepoints at single character literal are disallowed", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ESCAPE_INVALID_UNICODE_LONG] = { "invalid Unicode escape sequence; maximum length is 6 digits", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_ESCAPE_INVALID_UNICODE_SHORT] = { "too short escape sequence: %.*s", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ESCAPE_INVALID_UNICODE_TERM] = { "unterminated Unicode escape", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_ARGUMENT] = { "expected an argument", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_EOL_AFTER_STATEMENT] = { "unexpected %s, expecting end-of-input", PM_ERROR_LEVEL_SYNTAX }, diff --git a/test/prism/errors/regexp_unicode_too_short.txt b/test/prism/errors/regexp_unicode_too_short.txt new file mode 100644 index 00000000000..a7638b27125 --- /dev/null +++ b/test/prism/errors/regexp_unicode_too_short.txt @@ -0,0 +1,3 @@ +/\u/ + ^~ too short escape sequence: \u + From 084baca4635c7c79f507e1455ad321512b994396 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Thu, 15 Aug 2024 12:39:19 -0400 Subject: [PATCH 086/109] Fix up lex result constants --- ext/prism/extension.c | 22 ++++++++++++---------- test/prism/api/lex_test.rb | 23 +++++++++++++++++++++++ test/prism/api/parse_test.rb | 8 ++++++++ 3 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 test/prism/api/lex_test.rb diff --git a/ext/prism/extension.c b/ext/prism/extension.c index 00a0ce49574..8fb7fb1a94d 100644 --- a/ext/prism/extension.c +++ b/ext/prism/extension.c @@ -21,6 +21,7 @@ VALUE rb_cPrismParseError; VALUE rb_cPrismParseWarning; VALUE rb_cPrismResult; VALUE rb_cPrismParseResult; +VALUE rb_cPrismLexResult; VALUE rb_cPrismParseLexResult; VALUE rb_cPrismDebugEncoding; @@ -635,16 +636,16 @@ parse_lex_input(pm_string_t *input, const pm_options_t *options, bool return_nod rb_ary_push(offsets, ULONG2NUM(parser.newline_list.offsets[index])); } - VALUE value; + VALUE result; if (return_nodes) { - value = rb_ary_new_capa(2); + VALUE value = rb_ary_new_capa(2); rb_ary_push(value, pm_ast_new(&parser, node, parse_lex_data.encoding, source)); rb_ary_push(value, parse_lex_data.tokens); + result = parse_result_create(rb_cPrismParseLexResult, &parser, value, parse_lex_data.encoding, source); } else { - value = parse_lex_data.tokens; + result = parse_result_create(rb_cPrismLexResult, &parser, parse_lex_data.tokens, parse_lex_data.encoding, source); } - VALUE result = parse_result_create(rb_cPrismParseLexResult, &parser, value, parse_lex_data.encoding, source); pm_node_destroy(&parser, node); pm_parser_free(&parser); @@ -653,10 +654,10 @@ parse_lex_input(pm_string_t *input, const pm_options_t *options, bool return_nod /** * call-seq: - * Prism::lex(source, **options) -> ParseLexResult + * Prism::lex(source, **options) -> LexResult * - * Return a ParseLexResult instance that contains an array of Token instances corresponding to the given string. For - * supported options, see Prism::parse. + * Return a LexResult instance that contains an array of Token instances + * corresponding to the given string. For supported options, see Prism::parse. */ static VALUE lex(int argc, VALUE *argv, VALUE self) { @@ -673,10 +674,10 @@ lex(int argc, VALUE *argv, VALUE self) { /** * call-seq: - * Prism::lex_file(filepath, **options) -> ParseLexResult + * Prism::lex_file(filepath, **options) -> LexResult * - * Return a ParseLexResult instance that contains an array of Token instances corresponding to the given file. For - * supported options, see Prism::parse. + * Return a LexResult instance that contains an array of Token instances + * corresponding to the given file. For supported options, see Prism::parse. */ static VALUE lex_file(int argc, VALUE *argv, VALUE self) { @@ -1131,6 +1132,7 @@ Init_prism(void) { rb_cPrismParseWarning = rb_define_class_under(rb_cPrism, "ParseWarning", rb_cObject); rb_cPrismResult = rb_define_class_under(rb_cPrism, "Result", rb_cObject); rb_cPrismParseResult = rb_define_class_under(rb_cPrism, "ParseResult", rb_cPrismResult); + rb_cPrismLexResult = rb_define_class_under(rb_cPrism, "LexResult", rb_cPrismResult); rb_cPrismParseLexResult = rb_define_class_under(rb_cPrism, "ParseLexResult", rb_cPrismResult); // Intern all of the IDs eagerly that we support so that we don't have to do diff --git a/test/prism/api/lex_test.rb b/test/prism/api/lex_test.rb new file mode 100644 index 00000000000..0b675b215f3 --- /dev/null +++ b/test/prism/api/lex_test.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require_relative "../test_helper" + +module Prism + class LexTest < TestCase + def test_lex_result + result = Prism.lex("") + assert_kind_of LexResult, result + + result = Prism.lex_file(__FILE__) + assert_kind_of LexResult, result + end + + def test_parse_lex_result + result = Prism.parse_lex("") + assert_kind_of ParseLexResult, result + + result = Prism.parse_lex_file(__FILE__) + assert_kind_of ParseLexResult, result + end + end +end diff --git a/test/prism/api/parse_test.rb b/test/prism/api/parse_test.rb index 864d38461ad..dda0d6959ce 100644 --- a/test/prism/api/parse_test.rb +++ b/test/prism/api/parse_test.rb @@ -4,6 +4,14 @@ module Prism class ParseTest < TestCase + def test_parse_result + result = Prism.parse("") + assert_kind_of ParseResult, result + + result = Prism.parse_file(__FILE__) + assert_kind_of ParseResult, result + end + def test_parse_empty_string result = Prism.parse("") assert_equal [], result.value.statements.body From b17c3241d33b7792d00398cc672992c2ed509160 Mon Sep 17 00:00:00 2001 From: Alexander Momchilov Date: Thu, 15 Aug 2024 13:31:51 -0400 Subject: [PATCH 087/109] Render node comments into their `ast.h` --- templates/include/prism/ast.h.erb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/templates/include/prism/ast.h.erb b/templates/include/prism/ast.h.erb index 54da751bd51..e5926c112c9 100644 --- a/templates/include/prism/ast.h.erb +++ b/templates/include/prism/ast.h.erb @@ -151,10 +151,12 @@ typedef struct pm_node { <%- nodes.each do |node| -%> /** - * <%= node.name %> - * - * Type: <%= node.type %> +<%- node.each_comment_line do |line| -%> + *<%= line %> +<%- end -%> + * <%= node.name %> (type: <%= node.type %>) <%- if (node_flags = node.flags) -%> + * * Flags: <%- node_flags.values.each do |value| -%> * PM_<%= node_flags.human.upcase %>_<%= value.name %> From 496edf4793d66dc6f956e12c8fd046235b75dc5b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 16:30:31 +0000 Subject: [PATCH 088/109] Bump minitest from 5.24.1 to 5.25.1 in /gemfiles/typecheck Bumps [minitest](https://github.com/minitest/minitest) from 5.24.1 to 5.25.1. - [Changelog](https://github.com/minitest/minitest/blob/master/History.rdoc) - [Commits](https://github.com/minitest/minitest/compare/v5.24.1...v5.25.1) --- updated-dependencies: - dependency-name: minitest dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- gemfiles/typecheck/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index 7bce0c74781..b7ffb469b08 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -29,7 +29,7 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) logger (1.6.0) - minitest (5.24.1) + minitest (5.25.1) mutex_m (0.2.0) netrc (0.11.0) parallel (1.25.1) From d081152227c1649a1057ff6826107a652534490b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 16:30:55 +0000 Subject: [PATCH 089/109] Bump sorbet from 0.5.11506 to 0.5.11528 in /gemfiles/typecheck Bumps [sorbet](https://github.com/sorbet/sorbet) from 0.5.11506 to 0.5.11528. - [Release notes](https://github.com/sorbet/sorbet/releases) - [Commits](https://github.com/sorbet/sorbet/commits) --- updated-dependencies: - dependency-name: sorbet dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gemfiles/typecheck/Gemfile.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index 7bce0c74781..9454cfc0d8d 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -56,14 +56,14 @@ GEM sexp_processor (~> 4.16) securerandom (0.3.1) sexp_processor (4.17.2) - sorbet (0.5.11506) - sorbet-static (= 0.5.11506) - sorbet-runtime (0.5.11506) - sorbet-static (0.5.11506-universal-darwin) - sorbet-static (0.5.11506-x86_64-linux) - sorbet-static-and-runtime (0.5.11506) - sorbet (= 0.5.11506) - sorbet-runtime (= 0.5.11506) + sorbet (0.5.11528) + sorbet-static (= 0.5.11528) + sorbet-runtime (0.5.11528) + sorbet-static (0.5.11528-universal-darwin) + sorbet-static (0.5.11528-x86_64-linux) + sorbet-static-and-runtime (0.5.11528) + sorbet (= 0.5.11528) + sorbet-runtime (= 0.5.11528) spoom (1.3.3) erubi (>= 1.10.0) prism (>= 0.28.0) From 652be773fc7ec7d14b73c5bf0c1bed9a760e67d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 17:04:07 +0000 Subject: [PATCH 090/109] Bump org.junit.jupiter:junit-jupiter-engine in /java-wasm Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.10.3 to 5.11.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.3...r5.11.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-wasm/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index b1c14cbd82f..9a596bda64c 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -15,7 +15,7 @@ 11 11 - 5.10.3 + 5.11.0 From 0d3ba83f1999e3bc6241a64db30a01dd5b5d9823 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 17:04:10 +0000 Subject: [PATCH 091/109] Bump org.apache.maven.plugins:maven-surefire-plugin in /java-wasm Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.3.1 to 3.4.0. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.3.1...surefire-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-wasm/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index b1c14cbd82f..7166eabf251 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -37,7 +37,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.3.1 + 3.4.0 From 5d6d319e89f8453df38642dfa15901f434c73a73 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 20 Aug 2024 14:41:15 -0400 Subject: [PATCH 092/109] Bump Ruby dependencies --- gemfiles/3.0/Gemfile.lock | 2 +- gemfiles/3.1/Gemfile.lock | 2 +- gemfiles/3.2/Gemfile.lock | 2 +- gemfiles/3.3/Gemfile.lock | 2 +- gemfiles/3.4/Gemfile.lock | 2 +- gemfiles/typecheck/Gemfile.lock | 38 ++++++++++++++++----------------- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/gemfiles/3.0/Gemfile.lock b/gemfiles/3.0/Gemfile.lock index ac04f9d10bd..50ad1a2d317 100644 --- a/gemfiles/3.0/Gemfile.lock +++ b/gemfiles/3.0/Gemfile.lock @@ -10,7 +10,7 @@ GEM ffi (1.17.0) logger (1.6.0) mini_portile2 (2.8.7) - nokogiri (1.16.6) + nokogiri (1.16.7) mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) diff --git a/gemfiles/3.1/Gemfile.lock b/gemfiles/3.1/Gemfile.lock index 617d0ddc939..3ffa01f87fb 100644 --- a/gemfiles/3.1/Gemfile.lock +++ b/gemfiles/3.1/Gemfile.lock @@ -10,7 +10,7 @@ GEM ffi (1.17.0) logger (1.6.0) mini_portile2 (2.8.7) - nokogiri (1.16.6) + nokogiri (1.16.7) mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) diff --git a/gemfiles/3.2/Gemfile.lock b/gemfiles/3.2/Gemfile.lock index e1f89edf38d..100bf6923b1 100644 --- a/gemfiles/3.2/Gemfile.lock +++ b/gemfiles/3.2/Gemfile.lock @@ -10,7 +10,7 @@ GEM ffi (1.17.0) logger (1.6.0) mini_portile2 (2.8.7) - nokogiri (1.16.6) + nokogiri (1.16.7) mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) diff --git a/gemfiles/3.3/Gemfile.lock b/gemfiles/3.3/Gemfile.lock index f43c22ef3be..d03b41242bc 100644 --- a/gemfiles/3.3/Gemfile.lock +++ b/gemfiles/3.3/Gemfile.lock @@ -10,7 +10,7 @@ GEM ffi (1.17.0) logger (1.6.0) mini_portile2 (2.8.7) - nokogiri (1.16.6) + nokogiri (1.16.7) mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) diff --git a/gemfiles/3.4/Gemfile.lock b/gemfiles/3.4/Gemfile.lock index 5e06a79655e..7ad5f493285 100644 --- a/gemfiles/3.4/Gemfile.lock +++ b/gemfiles/3.4/Gemfile.lock @@ -10,7 +10,7 @@ GEM ffi (1.17.0) logger (1.6.0) mini_portile2 (2.8.7) - nokogiri (1.16.6) + nokogiri (1.16.7) mini_portile2 (~> 2.8.2) racc (~> 1.4) onigmo (0.1.0) diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index f64ae65e8c4..68474325fa2 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -1,20 +1,21 @@ GEM remote: https://rubygems.org/ specs: - activesupport (7.1.3.4) + activesupport (7.2.0) base64 bigdecimal - concurrent-ruby (~> 1.0, >= 1.0.2) + concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) - mutex_m - tzinfo (~> 2.0) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) ast (2.4.2) base64 (0.2.0) bigdecimal (3.1.8) - concurrent-ruby (1.3.3) + concurrent-ruby (1.3.4) connection_pool (2.4.1) csv (3.3.0) drb (2.2.1) @@ -30,9 +31,8 @@ GEM rb-inotify (~> 0.9, >= 0.9.10) logger (1.6.0) minitest (5.25.1) - mutex_m (0.2.0) netrc (0.11.0) - parallel (1.25.1) + parallel (1.26.3) parser (3.3.4.2) ast (~> 2.4.1) racc @@ -46,7 +46,7 @@ GEM rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) - rbi (0.1.13) + rbi (0.1.14) prism (>= 0.18.0, < 1.0.0) sorbet-runtime (>= 0.5.9204) rbs (3.5.2) @@ -56,15 +56,15 @@ GEM sexp_processor (~> 4.16) securerandom (0.3.1) sexp_processor (4.17.2) - sorbet (0.5.11528) - sorbet-static (= 0.5.11528) - sorbet-runtime (0.5.11528) - sorbet-static (0.5.11528-universal-darwin) - sorbet-static (0.5.11528-x86_64-linux) - sorbet-static-and-runtime (0.5.11528) - sorbet (= 0.5.11528) - sorbet-runtime (= 0.5.11528) - spoom (1.3.3) + sorbet (0.5.11531) + sorbet-static (= 0.5.11531) + sorbet-runtime (0.5.11531) + sorbet-static (0.5.11531-universal-darwin) + sorbet-static (0.5.11531-x86_64-linux) + sorbet-static-and-runtime (0.5.11531) + sorbet (= 0.5.11531) + sorbet-runtime (= 0.5.11531) + spoom (1.4.2) erubi (>= 1.10.0) prism (>= 0.28.0) sorbet-static-and-runtime (>= 0.5.10187) @@ -85,11 +85,11 @@ GEM strscan (>= 1.0.0) terminal-table (>= 2, < 4) strscan (3.1.0) - tapioca (0.15.1) + tapioca (0.16.1) bundler (>= 2.2.25) netrc (>= 0.11.0) parallel (>= 1.21.0) - rbi (>= 0.1.4, < 0.2) + rbi (>= 0.1.14, < 0.2) sorbet-static-and-runtime (>= 0.5.11087) spoom (>= 1.2.0) thor (>= 1.2.0) From b2dc6a8871266ac163234ca7f952fe7693c08431 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Thu, 22 Aug 2024 10:55:04 +0200 Subject: [PATCH 093/109] Allow failures for arm64/ppc64le/s390x due to infra errors. Allow failures for arm64 due to jobs not starting. Allow failures for ppc64le/s390x due to the following infra errors. https://app.travis-ci.com/github/ruby/prism/builds/271968231 > No output has been received in the last 10m0s, this potentially indicates > a stalled build or something wrong with the build itself. --- .travis.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.travis.yml b/.travis.yml index 51e30a630da..0ea99eb724b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,15 @@ matrix: - arch: arm64 - arch: ppc64le - arch: s390x + allow_failures: + # Allow failures due to the following infra errors. + # The jobs are not starting. + - arch: arm64 + # No output has been received in the last 10m0s, this potentially indicates + # a stalled build or something wrong with the build itself. + # https://app.travis-ci.com/github/ruby/prism/builds/271968231 + - arch: ppc64le + - arch: s390x fast_finish: true before_install: From 7f7620b6d52f710857acec46b11013e31999e0e0 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Thu, 22 Aug 2024 09:31:19 -0400 Subject: [PATCH 094/109] Update templates/include/prism/ast.h.erb --- templates/include/prism/ast.h.erb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/templates/include/prism/ast.h.erb b/templates/include/prism/ast.h.erb index e5926c112c9..088a99323f8 100644 --- a/templates/include/prism/ast.h.erb +++ b/templates/include/prism/ast.h.erb @@ -151,12 +151,14 @@ typedef struct pm_node { <%- nodes.each do |node| -%> /** + * <%= node.name %> + * <%- node.each_comment_line do |line| -%> *<%= line %> <%- end -%> - * <%= node.name %> (type: <%= node.type %>) -<%- if (node_flags = node.flags) -%> * + * Type: <%= node.type %> +<%- if (node_flags = node.flags) -%> * Flags: <%- node_flags.values.each do |value| -%> * PM_<%= node_flags.human.upcase %>_<%= value.name %> From 098b3f08bc91a66af8b7f8cc6d332cc88b066296 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Thu, 22 Aug 2024 10:22:51 -0400 Subject: [PATCH 095/109] Turn off extended mode when parsing extended group --- src/regexp.c | 30 +++++-- test/prism/fixtures/regex.txt | 2 + test/prism/snapshots/regex.txt | 138 +++++++++++++++++---------------- 3 files changed, 97 insertions(+), 73 deletions(-) diff --git a/src/regexp.c b/src/regexp.c index 9c24e952e8f..e4bf74c1423 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -427,11 +427,11 @@ pm_regexp_options_remove(pm_regexp_options_t *options, uint8_t key) { /** * True if the given key is set in the options. */ -static bool -pm_regexp_options_added_p(pm_regexp_options_t *options, uint8_t key) { +static uint8_t +pm_regexp_options_state(pm_regexp_options_t *options, uint8_t key) { if (key >= PRISM_REGEXP_OPTION_STATE_SLOT_MINIMUM && key <= PRISM_REGEXP_OPTION_STATE_SLOT_MAXIMUM) { key = (uint8_t) (key - PRISM_REGEXP_OPTION_STATE_SLOT_MINIMUM); - return options->values[key] == PM_REGEXP_OPTION_STATE_ADDED; + return options->values[key]; } return false; @@ -583,7 +583,10 @@ pm_regexp_parse_group(pm_regexp_parser_t *parser, uint16_t depth) { // subexpression, then we are going to be setting the options // for the parent group. In this case we are safe to return now. if (*parser->cursor == ')') { - if (pm_regexp_options_added_p(&options, 'x')) parser->extended_mode = true; + if (pm_regexp_options_state(&options, 'x') == PM_REGEXP_OPTION_STATE_ADDED) { + parser->extended_mode = true; + } + parser->cursor++; return true; } @@ -610,7 +613,15 @@ pm_regexp_parse_group(pm_regexp_parser_t *parser, uint16_t depth) { // subexpression, then we are going to be setting the options // for the parent group. In this case we are safe to return now. if (*parser->cursor == ')') { - if (pm_regexp_options_added_p(&options, 'x')) parser->extended_mode = true; + switch (pm_regexp_options_state(&options, 'x')) { + case PM_REGEXP_OPTION_STATE_ADDED: + parser->extended_mode = true; + break; + case PM_REGEXP_OPTION_STATE_REMOVED: + parser->extended_mode = false; + break; + } + parser->cursor++; return true; } @@ -624,8 +635,13 @@ pm_regexp_parse_group(pm_regexp_parser_t *parser, uint16_t depth) { } bool extended_mode = parser->extended_mode; - if (pm_regexp_options_added_p(&options, 'x')) { - parser->extended_mode = true; + switch (pm_regexp_options_state(&options, 'x')) { + case PM_REGEXP_OPTION_STATE_ADDED: + parser->extended_mode = true; + break; + case PM_REGEXP_OPTION_STATE_REMOVED: + parser->extended_mode = false; + break; } // Now, parse the expressions within this group. diff --git a/test/prism/fixtures/regex.txt b/test/prism/fixtures/regex.txt index 84b5ca0600f..4623733f589 100644 --- a/test/prism/fixtures/regex.txt +++ b/test/prism/fixtures/regex.txt @@ -44,3 +44,5 @@ tap { /(?)/ =~ to_s } /(?)/ =~ "" def foo(nil:) = /(?)/ =~ "" + +/(?-x:#)/x diff --git a/test/prism/snapshots/regex.txt b/test/prism/snapshots/regex.txt index 17f12e1825b..c90e6897607 100644 --- a/test/prism/snapshots/regex.txt +++ b/test/prism/snapshots/regex.txt @@ -1,10 +1,10 @@ -@ ProgramNode (location: (1,0)-(46,32)) +@ ProgramNode (location: (1,0)-(48,10)) ├── flags: ∅ ├── locals: [:foo, :ab, :abc, :a] └── statements: - @ StatementsNode (location: (1,0)-(46,32)) + @ StatementsNode (location: (1,0)-(48,10)) ├── flags: ∅ - └── body: (length: 25) + └── body: (length: 26) ├── @ CallNode (location: (1,0)-(1,9)) │ ├── flags: newline, ignore_visibility │ ├── receiver: ∅ @@ -474,66 +474,72 @@ │ │ └── unescaped: "" │ ├── closing_loc: ∅ │ └── block: ∅ - └── @ DefNode (location: (46,0)-(46,32)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (46,4)-(46,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (46,8)-(46,12)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 1) - │ │ └── @ RequiredKeywordParameterNode (location: (46,8)-(46,12)) - │ │ ├── flags: ∅ - │ │ ├── name: :nil - │ │ └── name_loc: (46,8)-(46,12) = "nil:" - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (46,16)-(46,32)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ MatchWriteNode (location: (46,16)-(46,32)) - │ ├── flags: ∅ - │ ├── call: - │ │ @ CallNode (location: (46,16)-(46,32)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ RegularExpressionNode (location: (46,16)-(46,26)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (46,16)-(46,17) = "/" - │ │ │ ├── content_loc: (46,17)-(46,25) = "(?)" - │ │ │ ├── closing_loc: (46,25)-(46,26) = "/" - │ │ │ └── unescaped: "(?)" - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :=~ - │ │ ├── message_loc: (46,27)-(46,29) = "=~" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (46,30)-(46,32)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (46,30)-(46,32)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (46,30)-(46,31) = "\"" - │ │ │ ├── content_loc: (46,31)-(46,31) = "" - │ │ │ ├── closing_loc: (46,31)-(46,32) = "\"" - │ │ │ └── unescaped: "" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── targets: (length: 1) - │ └── @ LocalVariableTargetNode (location: (46,20)-(46,23)) - │ ├── flags: ∅ - │ ├── name: :nil - │ └── depth: 0 - ├── locals: [:nil] - ├── def_keyword_loc: (46,0)-(46,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (46,7)-(46,8) = "(" - ├── rparen_loc: (46,12)-(46,13) = ")" - ├── equal_loc: (46,14)-(46,15) = "=" - └── end_keyword_loc: ∅ + ├── @ DefNode (location: (46,0)-(46,32)) + │ ├── flags: newline + │ ├── name: :foo + │ ├── name_loc: (46,4)-(46,7) = "foo" + │ ├── receiver: ∅ + │ ├── parameters: + │ │ @ ParametersNode (location: (46,8)-(46,12)) + │ │ ├── flags: ∅ + │ │ ├── requireds: (length: 0) + │ │ ├── optionals: (length: 0) + │ │ ├── rest: ∅ + │ │ ├── posts: (length: 0) + │ │ ├── keywords: (length: 1) + │ │ │ └── @ RequiredKeywordParameterNode (location: (46,8)-(46,12)) + │ │ │ ├── flags: ∅ + │ │ │ ├── name: :nil + │ │ │ └── name_loc: (46,8)-(46,12) = "nil:" + │ │ ├── keyword_rest: ∅ + │ │ └── block: ∅ + │ ├── body: + │ │ @ StatementsNode (location: (46,16)-(46,32)) + │ │ ├── flags: ∅ + │ │ └── body: (length: 1) + │ │ └── @ MatchWriteNode (location: (46,16)-(46,32)) + │ │ ├── flags: ∅ + │ │ ├── call: + │ │ │ @ CallNode (location: (46,16)-(46,32)) + │ │ │ ├── flags: ∅ + │ │ │ ├── receiver: + │ │ │ │ @ RegularExpressionNode (location: (46,16)-(46,26)) + │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding + │ │ │ │ ├── opening_loc: (46,16)-(46,17) = "/" + │ │ │ │ ├── content_loc: (46,17)-(46,25) = "(?)" + │ │ │ │ ├── closing_loc: (46,25)-(46,26) = "/" + │ │ │ │ └── unescaped: "(?)" + │ │ │ ├── call_operator_loc: ∅ + │ │ │ ├── name: :=~ + │ │ │ ├── message_loc: (46,27)-(46,29) = "=~" + │ │ │ ├── opening_loc: ∅ + │ │ │ ├── arguments: + │ │ │ │ @ ArgumentsNode (location: (46,30)-(46,32)) + │ │ │ │ ├── flags: ∅ + │ │ │ │ └── arguments: (length: 1) + │ │ │ │ └── @ StringNode (location: (46,30)-(46,32)) + │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── opening_loc: (46,30)-(46,31) = "\"" + │ │ │ │ ├── content_loc: (46,31)-(46,31) = "" + │ │ │ │ ├── closing_loc: (46,31)-(46,32) = "\"" + │ │ │ │ └── unescaped: "" + │ │ │ ├── closing_loc: ∅ + │ │ │ └── block: ∅ + │ │ └── targets: (length: 1) + │ │ └── @ LocalVariableTargetNode (location: (46,20)-(46,23)) + │ │ ├── flags: ∅ + │ │ ├── name: :nil + │ │ └── depth: 0 + │ ├── locals: [:nil] + │ ├── def_keyword_loc: (46,0)-(46,3) = "def" + │ ├── operator_loc: ∅ + │ ├── lparen_loc: (46,7)-(46,8) = "(" + │ ├── rparen_loc: (46,12)-(46,13) = ")" + │ ├── equal_loc: (46,14)-(46,15) = "=" + │ └── end_keyword_loc: ∅ + └── @ RegularExpressionNode (location: (48,0)-(48,10)) + ├── flags: newline, static_literal, extended, forced_us_ascii_encoding + ├── opening_loc: (48,0)-(48,1) = "/" + ├── content_loc: (48,1)-(48,8) = "(?-x:#)" + ├── closing_loc: (48,8)-(48,10) = "/x" + └── unescaped: "(?-x:#)" From fb98034806c72f5c571babe8faed6f8987ec8a8c Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Fri, 23 Aug 2024 15:03:39 -0400 Subject: [PATCH 096/109] Pass Unicode escapes on to onigmo When we encounter an invalid unicode escape within a regular expression, we now pass that error on to Onigmo as if it didn't exist in the parser (which matches the upstream parser's behavior). We do this because there are tests that specify that you are allowed to have invalid Unicode escapes if they are within the context of a regular expression comment for a regular expression in extended mode. That looks like: /# \u /x Note that this _only_ applies to Unicode escapes (as opposed to applying to hex or meta/control escapes as well). Importantly it also only applies if the regular expression is terminated. An unterminated regular expression will still get error handling done in the parser. That would look like: /# \u that would result in the same error handling we have today. --- config.yml | 1 + src/prism.c | 66 ++++++++++++++++--- templates/src/diagnostic.c.erb | 1 + .../prism/errors/regexp_unicode_too_short.txt | 3 +- ...code_brackets_should_be_a_syntax_error.txt | 2 +- test/prism/unescape_test.rb | 5 ++ 6 files changed, 66 insertions(+), 12 deletions(-) diff --git a/config.yml b/config.yml index 6ead7a9d954..d26af5c66be 100644 --- a/config.yml +++ b/config.yml @@ -81,6 +81,7 @@ errors: - ESCAPE_INVALID_META_REPEAT - ESCAPE_INVALID_UNICODE - ESCAPE_INVALID_UNICODE_CM_FLAGS + - ESCAPE_INVALID_UNICODE_LIST - ESCAPE_INVALID_UNICODE_LITERAL - ESCAPE_INVALID_UNICODE_LONG - ESCAPE_INVALID_UNICODE_SHORT diff --git a/src/prism.c b/src/prism.c index a706881e3e8..fa153333bf6 100644 --- a/src/prism.c +++ b/src/prism.c @@ -9718,11 +9718,27 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre const uint8_t *start = parser->current.end - 1; parser->current.end++; - if (peek(parser) == '{') { + if (parser->current.end == parser->end) { + const uint8_t *start = parser->current.end - 2; + PM_PARSER_ERR_FORMAT(parser, start, parser->current.end, PM_ERR_ESCAPE_INVALID_UNICODE_SHORT, 2, start); + } else if (peek(parser) == '{') { const uint8_t *unicode_codepoints_start = parser->current.end - 2; - parser->current.end++; - parser->current.end += pm_strspn_whitespace(parser->current.end, parser->end - parser->current.end); + + size_t whitespace; + while (true) { + if ((whitespace = pm_strspn_whitespace(parser->current.end, parser->end - parser->current.end)) > 0) { + parser->current.end += whitespace; + } else if (peek(parser) == '\\' && peek_offset(parser, 1) == 'n') { + // This is super hacky, but it gets us nicer error + // messages because we can still pass it off to the + // regular expression engine even if we hit an + // unterminated regular expression. + parser->current.end += 2; + } else { + break; + } + } const uint8_t *extra_codepoints_start = NULL; int codepoints_count = 0; @@ -9736,8 +9752,17 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre pm_parser_err(parser, unicode_start, unicode_start + hexadecimal_length, PM_ERR_ESCAPE_INVALID_UNICODE_LONG); } else if (hexadecimal_length == 0) { // there are not hexadecimal characters - pm_parser_err(parser, parser->current.end, parser->current.end, PM_ERR_ESCAPE_INVALID_UNICODE); - pm_parser_err(parser, parser->current.end, parser->current.end, PM_ERR_ESCAPE_INVALID_UNICODE_TERM); + + if (flags & PM_ESCAPE_FLAG_REGEXP) { + // If this is a regular expression, we are going to + // let the regular expression engine handle this + // error instead of us. + pm_buffer_append_bytes(regular_expression_buffer, start, (size_t) (parser->current.end - start)); + } else { + pm_parser_err(parser, parser->current.end, parser->current.end, PM_ERR_ESCAPE_INVALID_UNICODE); + pm_parser_err(parser, parser->current.end, parser->current.end, PM_ERR_ESCAPE_INVALID_UNICODE_TERM); + } + return; } @@ -9759,10 +9784,19 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre pm_parser_err(parser, extra_codepoints_start, parser->current.end - 1, PM_ERR_ESCAPE_INVALID_UNICODE_LITERAL); } - if (peek(parser) == '}') { + if (parser->current.end == parser->end) { + PM_PARSER_ERR_FORMAT(parser, start, parser->current.end, PM_ERR_ESCAPE_INVALID_UNICODE_LIST, (int) (parser->current.end - start), start); + } else if (peek(parser) == '}') { parser->current.end++; } else { - pm_parser_err(parser, unicode_codepoints_start, parser->current.end, PM_ERR_ESCAPE_INVALID_UNICODE_TERM); + if (flags & PM_ESCAPE_FLAG_REGEXP) { + // If this is a regular expression, we are going to let + // the regular expression engine handle this error + // instead of us. + pm_buffer_append_bytes(regular_expression_buffer, start, (size_t) (parser->current.end - start)); + } else { + pm_parser_err(parser, unicode_codepoints_start, parser->current.end, PM_ERR_ESCAPE_INVALID_UNICODE_TERM); + } } if (flags & PM_ESCAPE_FLAG_REGEXP) { @@ -9772,8 +9806,12 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre size_t length = pm_strspn_hexadecimal_digit(parser->current.end, MIN(parser->end - parser->current.end, 4)); if (length == 0) { - const uint8_t *start = parser->current.end - 2; - PM_PARSER_ERR_FORMAT(parser, start, parser->current.end, PM_ERR_ESCAPE_INVALID_UNICODE_SHORT, 2, start); + if (flags & PM_ESCAPE_FLAG_REGEXP) { + pm_buffer_append_bytes(regular_expression_buffer, start, (size_t) (parser->current.end - start)); + } else { + const uint8_t *start = parser->current.end - 2; + PM_PARSER_ERR_FORMAT(parser, start, parser->current.end, PM_ERR_ESCAPE_INVALID_UNICODE_SHORT, 2, start); + } } else if (length == 4) { uint32_t value = escape_unicode(parser, parser->current.end, 4); @@ -9785,7 +9823,15 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre parser->current.end += 4; } else { parser->current.end += length; - pm_parser_err_current(parser, PM_ERR_ESCAPE_INVALID_UNICODE); + + if (flags & PM_ESCAPE_FLAG_REGEXP) { + // If this is a regular expression, we are going to let + // the regular expression engine handle this error + // instead of us. + pm_buffer_append_bytes(regular_expression_buffer, start, (size_t) (parser->current.end - start)); + } else { + pm_parser_err_current(parser, PM_ERR_ESCAPE_INVALID_UNICODE); + } } } diff --git a/templates/src/diagnostic.c.erb b/templates/src/diagnostic.c.erb index d3fabb84494..7b63d2dd0f6 100644 --- a/templates/src/diagnostic.c.erb +++ b/templates/src/diagnostic.c.erb @@ -165,6 +165,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_ERR_ESCAPE_INVALID_META_REPEAT] = { "invalid meta escape sequence; meta cannot be repeated", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ESCAPE_INVALID_UNICODE] = { "invalid Unicode escape sequence", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ESCAPE_INVALID_UNICODE_CM_FLAGS] = { "invalid Unicode escape sequence; Unicode cannot be combined with control or meta flags", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_ESCAPE_INVALID_UNICODE_LIST] = { "invalid Unicode list: %.*s", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ESCAPE_INVALID_UNICODE_LITERAL] = { "invalid Unicode escape sequence; Multiple codepoints at single character literal are disallowed", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ESCAPE_INVALID_UNICODE_LONG] = { "invalid Unicode escape sequence; maximum length is 6 digits", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ESCAPE_INVALID_UNICODE_SHORT] = { "too short escape sequence: %.*s", PM_ERROR_LEVEL_SYNTAX }, diff --git a/test/prism/errors/regexp_unicode_too_short.txt b/test/prism/errors/regexp_unicode_too_short.txt index a7638b27125..b6504ec9f9e 100644 --- a/test/prism/errors/regexp_unicode_too_short.txt +++ b/test/prism/errors/regexp_unicode_too_short.txt @@ -1,3 +1,4 @@ -/\u/ +/\u ^~ too short escape sequence: \u +^ unterminated regexp meets end of file; expected a closing delimiter diff --git a/test/prism/errors/unterminated_unicode_brackets_should_be_a_syntax_error.txt b/test/prism/errors/unterminated_unicode_brackets_should_be_a_syntax_error.txt index 1a65c6149ac..f3ac9f29ab9 100644 --- a/test/prism/errors/unterminated_unicode_brackets_should_be_a_syntax_error.txt +++ b/test/prism/errors/unterminated_unicode_brackets_should_be_a_syntax_error.txt @@ -1,3 +1,3 @@ ?\u{3 - ^~~~ unterminated Unicode escape + ^~~~ invalid Unicode list: \u{3 diff --git a/test/prism/unescape_test.rb b/test/prism/unescape_test.rb index 24a9e3f6bc9..f9e5a60e45a 100644 --- a/test/prism/unescape_test.rb +++ b/test/prism/unescape_test.rb @@ -159,6 +159,11 @@ def assert_context(context) # to validate backreferences so these are all going to fail. next if (context.name == "//" || context.name.start_with?("%r")) && ord.chr.start_with?(/\d/) + # \u is passed directly on to the regular expression engine and it is + # responsible for handling syntax errors. In this case we do not check + # it because it would require going through the compiler. + next if context.is_a?(Context::RegExp) && ord.chr == "u" + # \a \b \c ... assert_unescape(context, ord.chr) end From 8ead36677db7298da91bbeeab0e7670b16db410b Mon Sep 17 00:00:00 2001 From: Alexander Momchilov Date: Fri, 23 Aug 2024 16:13:04 -0400 Subject: [PATCH 097/109] =?UTF-8?q?Shrink=20`pm=5Finteger=5Ft`=20(32=20byt?= =?UTF-8?q?es=20=E2=86=92=2024)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/prism/util/pm_integer.h | 12 ++++++------ src/util/pm_integer.c | 28 ++++++++++++++-------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/include/prism/util/pm_integer.h b/include/prism/util/pm_integer.h index 91b28ad2f34..a9e29667034 100644 --- a/include/prism/util/pm_integer.h +++ b/include/prism/util/pm_integer.h @@ -18,12 +18,6 @@ * A structure represents an arbitrary-sized integer. */ typedef struct { - /** - * Embedded value for small integer. This value is set to 0 if the value - * does not fit into uint32_t. - */ - uint32_t value; - /** * The number of allocated values. length is set to 0 if the integer fits * into uint32_t. @@ -35,6 +29,12 @@ typedef struct { */ uint32_t *values; + /** + * Embedded value for small integer. This value is set to 0 if the value + * does not fit into uint32_t. + */ + uint32_t value; + /** * Whether or not the integer is negative. It is stored this way so that a * zeroed pm_integer_t is always positive zero. diff --git a/src/util/pm_integer.c b/src/util/pm_integer.c index 5b0f34465c5..4170ecc58db 100644 --- a/src/util/pm_integer.c +++ b/src/util/pm_integer.c @@ -43,7 +43,7 @@ big_add(pm_integer_t *destination, pm_integer_t *left, pm_integer_t *right, uint length++; } - *destination = (pm_integer_t) { 0, length, values, false }; + *destination = (pm_integer_t) { length, values, 0, false }; } /** @@ -87,7 +87,7 @@ big_sub2(pm_integer_t *destination, pm_integer_t *a, pm_integer_t *b, pm_integer } while (a_length > 1 && values[a_length - 1] == 0) a_length--; - *destination = (pm_integer_t) { 0, a_length, values, false }; + *destination = (pm_integer_t) { a_length, values, 0, false }; } /** @@ -130,7 +130,7 @@ karatsuba_multiply(pm_integer_t *destination, pm_integer_t *left, pm_integer_t * } while (length > 1 && values[length - 1] == 0) length--; - *destination = (pm_integer_t) { 0, length, values, false }; + *destination = (pm_integer_t) { length, values, 0, false }; return; } @@ -142,16 +142,16 @@ karatsuba_multiply(pm_integer_t *destination, pm_integer_t *left, pm_integer_t * if (end_offset > right_length) end_offset = right_length; pm_integer_t sliced_left = { - .value = 0, .length = left_length, .values = left_values, + .value = 0, .negative = false }; pm_integer_t sliced_right = { - .value = 0, .length = end_offset - start_offset, .values = right_values + start_offset, + .value = 0, .negative = false }; @@ -169,15 +169,15 @@ karatsuba_multiply(pm_integer_t *destination, pm_integer_t *left, pm_integer_t * pm_integer_free(&product); } - *destination = (pm_integer_t) { 0, left_length + right_length, values, false }; + *destination = (pm_integer_t) { left_length + right_length, values, 0, false }; return; } size_t half = left_length / 2; - pm_integer_t x0 = { 0, half, left_values, false }; - pm_integer_t x1 = { 0, left_length - half, left_values + half, false }; - pm_integer_t y0 = { 0, half, right_values, false }; - pm_integer_t y1 = { 0, right_length - half, right_values + half, false }; + pm_integer_t x0 = { half, left_values, 0, false }; + pm_integer_t x1 = { left_length - half, left_values + half, 0, false }; + pm_integer_t y0 = { half, right_values, 0, false }; + pm_integer_t y1 = { right_length - half, right_values + half, 0, false }; pm_integer_t z0 = { 0 }; karatsuba_multiply(&z0, &x0, &y0, base); @@ -229,7 +229,7 @@ karatsuba_multiply(pm_integer_t *destination, pm_integer_t *left, pm_integer_t * pm_integer_free(&y01); pm_integer_free(&xy); - *destination = (pm_integer_t) { 0, length, values, false }; + *destination = (pm_integer_t) { length, values, 0, false }; } /** @@ -323,7 +323,7 @@ pm_integer_normalize(pm_integer_t *integer) { bool negative = integer->negative && value != 0; pm_integer_free(integer); - *integer = (pm_integer_t) { .value = value, .length = 0, .values = NULL, .negative = negative }; + *integer = (pm_integer_t) { .values = NULL, .value = value, .length = 0, .negative = negative }; } /** @@ -412,7 +412,7 @@ pm_integer_parse_powof2(pm_integer_t *integer, uint32_t base, const uint8_t *dig } while (length > 1 && values[length - 1] == 0) length--; - *integer = (pm_integer_t) { .value = 0, .length = length, .values = values, .negative = false }; + *integer = (pm_integer_t) { .length = length, .values = values, .value = 0, .negative = false }; pm_integer_normalize(integer); } @@ -438,7 +438,7 @@ pm_integer_parse_decimal(pm_integer_t *integer, const uint8_t *digits, size_t di } // Convert base from 10**9 to 1<<32. - pm_integer_convert_base(integer, &((pm_integer_t) { .value = 0, .length = length, .values = values, .negative = false }), 1000000000, ((uint64_t) 1 << 32)); + pm_integer_convert_base(integer, &((pm_integer_t) { .length = length, .values = values, .value = 0, .negative = false }), 1000000000, ((uint64_t) 1 << 32)); xfree(values); } From 920ede0352f1faef26d70f6e70457bc3aea658c5 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Mon, 26 Aug 2024 13:29:56 -0400 Subject: [PATCH 098/109] Bump RBS dependency --- gemfiles/3.0/Gemfile.lock | 2 +- gemfiles/3.1/Gemfile.lock | 2 +- gemfiles/3.2/Gemfile.lock | 2 +- gemfiles/3.3/Gemfile.lock | 2 +- gemfiles/3.4/Gemfile.lock | 2 +- gemfiles/typecheck/Gemfile.lock | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gemfiles/3.0/Gemfile.lock b/gemfiles/3.0/Gemfile.lock index 50ad1a2d317..48a338b6945 100644 --- a/gemfiles/3.0/Gemfile.lock +++ b/gemfiles/3.0/Gemfile.lock @@ -22,7 +22,7 @@ GEM rake (13.2.1) rake-compiler (1.2.7) rake - rbs (3.5.2) + rbs (3.5.3) logger ruby_memcheck (3.0.0) nokogiri diff --git a/gemfiles/3.1/Gemfile.lock b/gemfiles/3.1/Gemfile.lock index 3ffa01f87fb..aaffba48f39 100644 --- a/gemfiles/3.1/Gemfile.lock +++ b/gemfiles/3.1/Gemfile.lock @@ -22,7 +22,7 @@ GEM rake (13.2.1) rake-compiler (1.2.7) rake - rbs (3.5.2) + rbs (3.5.3) logger ruby_memcheck (3.0.0) nokogiri diff --git a/gemfiles/3.2/Gemfile.lock b/gemfiles/3.2/Gemfile.lock index 100bf6923b1..6f506c55ebf 100644 --- a/gemfiles/3.2/Gemfile.lock +++ b/gemfiles/3.2/Gemfile.lock @@ -22,7 +22,7 @@ GEM rake (13.2.1) rake-compiler (1.2.7) rake - rbs (3.5.2) + rbs (3.5.3) logger ruby_memcheck (3.0.0) nokogiri diff --git a/gemfiles/3.3/Gemfile.lock b/gemfiles/3.3/Gemfile.lock index d03b41242bc..1a47d35bc8f 100644 --- a/gemfiles/3.3/Gemfile.lock +++ b/gemfiles/3.3/Gemfile.lock @@ -22,7 +22,7 @@ GEM rake (13.2.1) rake-compiler (1.2.7) rake - rbs (3.5.2) + rbs (3.5.3) logger ruby_memcheck (3.0.0) nokogiri diff --git a/gemfiles/3.4/Gemfile.lock b/gemfiles/3.4/Gemfile.lock index 7ad5f493285..598cb3264a7 100644 --- a/gemfiles/3.4/Gemfile.lock +++ b/gemfiles/3.4/Gemfile.lock @@ -22,7 +22,7 @@ GEM rake (13.2.1) rake-compiler (1.2.7) rake - rbs (3.5.2) + rbs (3.5.3) logger ruby_memcheck (3.0.0) nokogiri diff --git a/gemfiles/typecheck/Gemfile.lock b/gemfiles/typecheck/Gemfile.lock index 68474325fa2..6e456da6d09 100644 --- a/gemfiles/typecheck/Gemfile.lock +++ b/gemfiles/typecheck/Gemfile.lock @@ -49,7 +49,7 @@ GEM rbi (0.1.14) prism (>= 0.18.0, < 1.0.0) sorbet-runtime (>= 0.5.9204) - rbs (3.5.2) + rbs (3.5.3) logger ruby_parser (3.21.1) racc (~> 1.5) From d42eb89b278c4ee7fdc5e8b2ce371145be55fc7d Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Mon, 26 Aug 2024 13:31:13 -0400 Subject: [PATCH 099/109] Include minifyrb in the README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 04f12bca998..666d52a8919 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,7 @@ Prism has been integrated into the majority of Ruby runtimes, many libraries, an ### Libraries * [dispersion](https://github.com/joeldrapper/dispersion) +* [minifyrb](https://github.com/koic/minifyrb) * [packwerk](https://github.com/Shopify/packwerk/pull/388) (via parser translator) * [rbi](https://github.com/Shopify/rbi) * [rails](https://github.com/rails/rails) From 596d379eb11a58ed8eaa138109e2a3cf0daec8cf Mon Sep 17 00:00:00 2001 From: Alexander Momchilov Date: Tue, 27 Aug 2024 12:06:53 -0400 Subject: [PATCH 100/109] Optimize Array allocations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … by allocating them with the correct capacity. --- ext/prism/extension.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/ext/prism/extension.c b/ext/prism/extension.c index 8fb7fb1a94d..cd5165f41a1 100644 --- a/ext/prism/extension.c +++ b/ext/prism/extension.c @@ -372,7 +372,7 @@ dump_file(int argc, VALUE *argv, VALUE self) { */ static VALUE parser_comments(pm_parser_t *parser, VALUE source) { - VALUE comments = rb_ary_new(); + VALUE comments = rb_ary_new_capa(parser->comment_list.size); for (pm_comment_t *comment = (pm_comment_t *) parser->comment_list.head; comment != NULL; comment = (pm_comment_t *) comment->node.next) { VALUE location_argv[] = { @@ -394,7 +394,7 @@ parser_comments(pm_parser_t *parser, VALUE source) { */ static VALUE parser_magic_comments(pm_parser_t *parser, VALUE source) { - VALUE magic_comments = rb_ary_new(); + VALUE magic_comments = rb_ary_new_capa(parser->magic_comment_list.size); for (pm_magic_comment_t *magic_comment = (pm_magic_comment_t *) parser->magic_comment_list.head; magic_comment != NULL; magic_comment = (pm_magic_comment_t *) magic_comment->node.next) { VALUE key_loc_argv[] = { @@ -444,7 +444,7 @@ parser_data_loc(const pm_parser_t *parser, VALUE source) { */ static VALUE parser_errors(pm_parser_t *parser, rb_encoding *encoding, VALUE source) { - VALUE errors = rb_ary_new(); + VALUE errors = rb_ary_new_capa(parser->error_list.size); pm_diagnostic_t *error; for (error = (pm_diagnostic_t *) parser->error_list.head; error != NULL; error = (pm_diagnostic_t *) error->node.next) { @@ -487,7 +487,7 @@ parser_errors(pm_parser_t *parser, rb_encoding *encoding, VALUE source) { */ static VALUE parser_warnings(pm_parser_t *parser, rb_encoding *encoding, VALUE source) { - VALUE warnings = rb_ary_new(); + VALUE warnings = rb_ary_new_capa(parser->warning_list.size); pm_diagnostic_t *warning; for (warning = (pm_diagnostic_t *) parser->warning_list.head; warning != NULL; warning = (pm_diagnostic_t *) warning->node.next) { @@ -564,9 +564,10 @@ static void parse_lex_token(void *data, pm_parser_t *parser, pm_token_t *token) { parse_lex_data_t *parse_lex_data = (parse_lex_data_t *) parser->lex_callback->data; - VALUE yields = rb_ary_new_capa(2); - rb_ary_push(yields, pm_token_new(parser, token, parse_lex_data->encoding, parse_lex_data->source)); - rb_ary_push(yields, INT2FIX(parser->lex_state)); + VALUE yields = rb_assoc_new( + pm_token_new(parser, token, parse_lex_data->encoding, parse_lex_data->source), + INT2FIX(parser->lex_state) + ); rb_ary_push(parse_lex_data->tokens, yields); } @@ -607,7 +608,7 @@ parse_lex_input(pm_string_t *input, const pm_options_t *options, bool return_nod pm_parser_register_encoding_changed_callback(&parser, parse_lex_encoding_changed_callback); VALUE source_string = rb_str_new((const char *) pm_string_source(input), pm_string_length(input)); - VALUE offsets = rb_ary_new(); + VALUE offsets = rb_ary_new_capa(parser.newline_list.size); VALUE source = rb_funcall(rb_cPrismSource, rb_id_source_for, 3, source_string, LONG2NUM(parser.start_line), offsets); parse_lex_data_t parse_lex_data = { From 5753fb62607e686ada8b8303c673c078c005f17c Mon Sep 17 00:00:00 2001 From: Alexander Momchilov Date: Thu, 22 Aug 2024 18:30:59 -0400 Subject: [PATCH 101/109] Fix warning when `#!` ends with carriage return --- src/prism.c | 25 ++++++++++++------ test/prism/result/warnings_test.rb | 42 ++++++++++++++++++++++++++++-- 2 files changed, 57 insertions(+), 10 deletions(-) diff --git a/src/prism.c b/src/prism.c index a706881e3e8..228366778ca 100644 --- a/src/prism.c +++ b/src/prism.c @@ -21711,7 +21711,7 @@ pm_strnstr(const char *big, const char *little, size_t big_length) { */ static void pm_parser_warn_shebang_carriage_return(pm_parser_t *parser, const uint8_t *start, size_t length) { - if (length > 2 && start[length - 1] == '\n' && start[length - 2] == '\r') { + if (length > 2 && start[length - 2] == '\r' && start[length - 1] == '\n') { pm_parser_warn(parser, start, start + length, PM_WARN_SHEBANG_CARRIAGE_RETURN); } } @@ -21904,11 +21904,17 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm const char *engine; if ((engine = pm_strnstr((const char *) parser->start, "ruby", length)) != NULL) { - pm_parser_warn_shebang_carriage_return(parser, parser->start, length); - if (newline != NULL) parser->encoding_comment_start = newline + 1; + if (newline != NULL) { + size_t length_including_newline = length + 1; + pm_parser_warn_shebang_carriage_return(parser, parser->start, length_including_newline); + + parser->encoding_comment_start = newline + 1; + } + if (options != NULL && options->shebang_callback != NULL) { pm_parser_init_shebang(parser, options, engine, length - ((size_t) (engine - (const char *) parser->start))); } + search_shebang = false; } else if (!parser->parsing_eval) { search_shebang = true; @@ -21938,17 +21944,20 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm size_t length = (size_t) ((newline != NULL ? newline : parser->end) - cursor); if (length > 2 && cursor[0] == '#' && cursor[1] == '!') { - if (parser->newline_list.size == 1) { - pm_parser_warn_shebang_carriage_return(parser, cursor, length); - } - const char *engine; if ((engine = pm_strnstr((const char *) cursor, "ruby", length)) != NULL) { found_shebang = true; - if (newline != NULL) parser->encoding_comment_start = newline + 1; + if (newline != NULL) { + size_t length_including_newline = length + 1; + pm_parser_warn_shebang_carriage_return(parser, cursor, length_including_newline); + + parser->encoding_comment_start = newline + 1; + } + if (options != NULL && options->shebang_callback != NULL) { pm_parser_init_shebang(parser, options, engine, length - ((size_t) (engine - (const char *) cursor))); } + break; } } diff --git a/test/prism/result/warnings_test.rb b/test/prism/result/warnings_test.rb index 8ccaec74ed6..aeac7f80e64 100644 --- a/test/prism/result/warnings_test.rb +++ b/test/prism/result/warnings_test.rb @@ -321,6 +321,44 @@ def test_unreachable_statement assert_warning("tap { redo; foo }", "statement not reached") end + def test_shebang_ending_with_carriage_return + msg = "shebang line ending with \\r may cause problems" + + assert_warning(<<~RUBY, msg, compare: false) + #!ruby\r + p(123) + RUBY + + assert_warning(<<~RUBY, msg, compare: false) + #!ruby \r + p(123) + RUBY + + assert_warning(<<~RUBY, msg, compare: false) + #!ruby -Eutf-8\r + p(123) + RUBY + + # Used with the `-x` object, to ignore the script up until the first shebang that mentioned "ruby". + assert_warning(<<~SCRIPT, msg, compare: false) + #!/usr/bin/env bash + # Some initial shell script or other content + # that Ruby should ignore + echo "This is shell script part" + exit 0 + + #! /usr/bin/env ruby -Eutf-8\r + # Ruby script starts here + puts "Hello from Ruby!" + SCRIPT + + refute_warning("#ruby not_a_shebang\r\n", compare: false) + + # CRuby doesn't emit the warning if a malformed file only has `\r` and not `\n`. + # https://bugs.ruby-lang.org/issues/20700 + refute_warning("#!ruby\r", compare: false) + end + def test_warnings_verbosity warning = Prism.parse("def foo; END { }; end").warnings.first assert_equal "END in method; use at_exit", warning.message @@ -333,7 +371,7 @@ def test_warnings_verbosity private - def assert_warning(source, *messages) + def assert_warning(source, *messages, compare: true) warnings = Prism.parse(source).warnings assert_equal messages.length, warnings.length, "Expected #{messages.length} warning(s) in #{source.inspect}, got #{warnings.map(&:message).inspect}" @@ -341,7 +379,7 @@ def assert_warning(source, *messages) assert_include warning.message, message end - if defined?(RubyVM::AbstractSyntaxTree) + if compare && defined?(RubyVM::AbstractSyntaxTree) stderr = capture_stderr { RubyVM::AbstractSyntaxTree.parse(source) } messages.each { |message| assert_include stderr, message } end From 5be97a75c8e28b61a74fd9705965aeb0ff12a6ea Mon Sep 17 00:00:00 2001 From: eileencodes Date: Tue, 27 Aug 2024 16:40:48 -0400 Subject: [PATCH 102/109] Add `contains_splat` flag If we have a splat, add a flag for it named `contains_splat`. --- config.yml | 2 ++ src/prism.c | 4 ++++ test/prism/snapshots/arrays.txt | 16 +++++++-------- test/prism/snapshots/constants.txt | 4 ++-- test/prism/snapshots/method_calls.txt | 6 +++--- test/prism/snapshots/methods.txt | 2 +- test/prism/snapshots/return.txt | 2 +- .../unparser/corpus/literal/assignment.txt | 4 ++-- .../unparser/corpus/literal/send.txt | 20 +++++++++---------- .../unparser/corpus/literal/since/32.txt | 2 +- .../snapshots/whitequark/args_args_star.txt | 4 ++-- test/prism/snapshots/whitequark/args_star.txt | 4 ++-- .../forwarded_argument_with_restarg.txt | 2 +- .../whitequark/forwarded_restarg.txt | 2 +- 14 files changed, 40 insertions(+), 34 deletions(-) diff --git a/config.yml b/config.yml index d26af5c66be..88fccce4d14 100644 --- a/config.yml +++ b/config.yml @@ -651,6 +651,8 @@ flags: comment: "if arguments contain keywords" - name: CONTAINS_KEYWORD_SPLAT comment: "if arguments contain keyword splat" + - name: CONTAINS_SPLAT + comment: "if arguments contain splat" comment: Flags for arguments nodes. - name: ArrayNodeFlags values: diff --git a/src/prism.c b/src/prism.c index 5b8e256a078..eca764bc267 100644 --- a/src/prism.c +++ b/src/prism.c @@ -2062,6 +2062,10 @@ pm_arguments_node_arguments_append(pm_arguments_node_t *node, pm_node_t *argumen node->base.location.end = argument->location.end; pm_node_list_append(&node->arguments, argument); + + if (PM_NODE_TYPE_P(argument, PM_SPLAT_NODE)) { + pm_node_flag_set((pm_node_t *) node, PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT); + } } /** diff --git a/test/prism/snapshots/arrays.txt b/test/prism/snapshots/arrays.txt index a73c56ac808..73154943ae7 100644 --- a/test/prism/snapshots/arrays.txt +++ b/test/prism/snapshots/arrays.txt @@ -1418,7 +1418,7 @@ │ │ ├── opening_loc: (108,11)-(108,12) = "[" │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (108,12)-(108,13)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: contains_splat │ │ │ └── arguments: (length: 1) │ │ │ └── @ SplatNode (location: (108,12)-(108,13)) │ │ │ ├── flags: ∅ @@ -1476,7 +1476,7 @@ │ │ ├── opening_loc: (110,11)-(110,12) = "[" │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (110,12)-(110,16)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: contains_splat │ │ │ └── arguments: (length: 2) │ │ │ ├── @ IntegerNode (location: (110,12)-(110,13)) │ │ │ │ ├── flags: static_literal, decimal @@ -1537,7 +1537,7 @@ │ │ ├── opening_loc: (112,11)-(112,12) = "[" │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (112,12)-(112,18)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: contains_splat │ │ │ └── arguments: (length: 2) │ │ │ ├── @ SplatNode (location: (112,12)-(112,13)) │ │ │ │ ├── flags: ∅ @@ -1598,7 +1598,7 @@ │ │ ├── opening_loc: (114,11)-(114,12) = "[" │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (114,12)-(114,21)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: contains_splat │ │ │ └── arguments: (length: 3) │ │ │ ├── @ IntegerNode (location: (114,12)-(114,13)) │ │ │ │ ├── flags: static_literal, decimal @@ -1660,7 +1660,7 @@ │ │ ├── opening_loc: (116,11)-(116,12) = "[" │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (116,12)-(116,13)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: contains_splat │ │ │ └── arguments: (length: 1) │ │ │ └── @ SplatNode (location: (116,12)-(116,13)) │ │ │ ├── flags: ∅ @@ -1722,7 +1722,7 @@ │ │ ├── opening_loc: (118,11)-(118,12) = "[" │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (118,12)-(118,16)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: contains_splat │ │ │ └── arguments: (length: 2) │ │ │ ├── @ IntegerNode (location: (118,12)-(118,13)) │ │ │ │ ├── flags: static_literal, decimal @@ -1793,7 +1793,7 @@ │ │ │ │ ├── opening_loc: (120,21)-(120,22) = "[" │ │ │ │ ├── arguments: │ │ │ │ │ @ ArgumentsNode (location: (120,22)-(120,23)) - │ │ │ │ │ ├── flags: ∅ + │ │ │ │ │ ├── flags: contains_splat │ │ │ │ │ └── arguments: (length: 1) │ │ │ │ │ └── @ SplatNode (location: (120,22)-(120,23)) │ │ │ │ │ ├── flags: ∅ @@ -1861,7 +1861,7 @@ │ │ │ ├── opening_loc: (122,21)-(122,22) = "[" │ │ │ ├── arguments: │ │ │ │ @ ArgumentsNode (location: (122,22)-(122,26)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: contains_splat │ │ │ │ └── arguments: (length: 2) │ │ │ │ ├── @ IntegerNode (location: (122,22)-(122,23)) │ │ │ │ │ ├── flags: static_literal, decimal diff --git a/test/prism/snapshots/constants.txt b/test/prism/snapshots/constants.txt index 3246ff80c33..e1aada8e96f 100644 --- a/test/prism/snapshots/constants.txt +++ b/test/prism/snapshots/constants.txt @@ -99,7 +99,7 @@ │ ├── opening_loc: ∅ │ ├── arguments: │ │ @ ArgumentsNode (location: (15,4)-(15,8)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (15,4)-(15,8)) │ │ ├── flags: ∅ @@ -183,7 +183,7 @@ │ ├── opening_loc: ∅ │ ├── arguments: │ │ @ ArgumentsNode (location: (21,9)-(21,13)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (21,9)-(21,13)) │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/method_calls.txt b/test/prism/snapshots/method_calls.txt index 4bf8f3c710b..0d1b39b254a 100644 --- a/test/prism/snapshots/method_calls.txt +++ b/test/prism/snapshots/method_calls.txt @@ -414,7 +414,7 @@ │ ├── opening_loc: (35,1)-(35,2) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (35,2)-(35,7)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (35,2)-(35,7)) │ │ ├── flags: ∅ @@ -763,7 +763,7 @@ │ ├── opening_loc: (58,3)-(58,4) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (58,4)-(58,9)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (58,4)-(58,9)) │ │ ├── flags: ∅ @@ -2453,7 +2453,7 @@ │ │ ├── opening_loc: ∅ │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (149,12)-(149,13)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: contains_splat │ │ │ └── arguments: (length: 1) │ │ │ └── @ SplatNode (location: (149,12)-(149,13)) │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/methods.txt b/test/prism/snapshots/methods.txt index 42f87b7532a..e3fcfe0a94b 100644 --- a/test/prism/snapshots/methods.txt +++ b/test/prism/snapshots/methods.txt @@ -1041,7 +1041,7 @@ │ │ ├── opening_loc: (110,11)-(110,12) = "(" │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (110,12)-(110,13)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: contains_splat │ │ │ └── arguments: (length: 1) │ │ │ └── @ SplatNode (location: (110,12)-(110,13)) │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/return.txt b/test/prism/snapshots/return.txt index 8c01ee438cd..fc2bd70fbc5 100644 --- a/test/prism/snapshots/return.txt +++ b/test/prism/snapshots/return.txt @@ -54,7 +54,7 @@ │ ├── keyword_loc: (5,0)-(5,6) = "return" │ └── arguments: │ @ ArgumentsNode (location: (5,7)-(5,9)) - │ ├── flags: ∅ + │ ├── flags: contains_splat │ └── arguments: (length: 1) │ └── @ SplatNode (location: (5,7)-(5,9)) │ ├── flags: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/assignment.txt b/test/prism/snapshots/unparser/corpus/literal/assignment.txt index aa1d1037af9..4e4ed86e7b6 100644 --- a/test/prism/snapshots/unparser/corpus/literal/assignment.txt +++ b/test/prism/snapshots/unparser/corpus/literal/assignment.txt @@ -399,7 +399,7 @@ │ │ │ ├── opening_loc: (15,2)-(15,3) = "[" │ │ │ ├── arguments: │ │ │ │ @ ArgumentsNode (location: (15,3)-(15,7)) - │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── flags: contains_splat │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ SplatNode (location: (15,3)-(15,7)) │ │ │ │ ├── flags: ∅ @@ -723,7 +723,7 @@ │ ├── opening_loc: (29,3)-(29,4) = "[" │ ├── arguments: │ │ @ ArgumentsNode (location: (29,4)-(29,19)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 2) │ │ ├── @ SplatNode (location: (29,4)-(29,10)) │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/send.txt b/test/prism/snapshots/unparser/corpus/literal/send.txt index 56d13740294..dc4d2be786b 100644 --- a/test/prism/snapshots/unparser/corpus/literal/send.txt +++ b/test/prism/snapshots/unparser/corpus/literal/send.txt @@ -890,7 +890,7 @@ │ ├── opening_loc: (52,3)-(52,4) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (52,4)-(52,9)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (52,4)-(52,9)) │ │ ├── flags: ∅ @@ -931,7 +931,7 @@ │ ├── opening_loc: (53,3)-(53,4) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (53,4)-(53,14)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (53,4)-(53,14)) │ │ ├── flags: ∅ @@ -1000,7 +1000,7 @@ │ ├── opening_loc: (56,3)-(56,4) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (56,4)-(56,14)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 2) │ │ ├── @ CallNode (location: (56,4)-(56,7)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -1123,7 +1123,7 @@ │ ├── opening_loc: (59,7)-(59,8) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (59,8)-(59,25)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 3) │ │ ├── @ SplatNode (location: (59,8)-(59,13)) │ │ │ ├── flags: ∅ @@ -1184,7 +1184,7 @@ │ ├── opening_loc: (60,7)-(60,8) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (60,8)-(60,13)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (60,8)-(60,13)) │ │ ├── flags: ∅ @@ -1221,7 +1221,7 @@ │ ├── opening_loc: (61,7)-(61,8) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (61,8)-(61,18)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 2) │ │ ├── @ SplatNode (location: (61,8)-(61,13)) │ │ │ ├── flags: ∅ @@ -1415,7 +1415,7 @@ │ ├── opening_loc: (65,7)-(65,8) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (65,8)-(65,18)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 2) │ │ ├── @ CallNode (location: (65,8)-(65,11)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -1462,7 +1462,7 @@ │ ├── opening_loc: (66,7)-(66,8) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (66,8)-(66,18)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 2) │ │ ├── @ CallNode (location: (66,8)-(66,11)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -1773,7 +1773,7 @@ │ ├── opening_loc: (73,3)-(73,4) = "[" │ ├── arguments: │ │ @ ArgumentsNode (location: (73,4)-(73,8)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (73,4)-(73,8)) │ │ ├── flags: ∅ @@ -2136,7 +2136,7 @@ │ │ ├── opening_loc: (80,13)-(80,14) = "(" │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (80,14)-(80,16)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: contains_splat │ │ │ └── arguments: (length: 1) │ │ │ └── @ SplatNode (location: (80,14)-(80,16)) │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/since/32.txt b/test/prism/snapshots/unparser/corpus/literal/since/32.txt index efd01196785..2b126a0cc55 100644 --- a/test/prism/snapshots/unparser/corpus/literal/since/32.txt +++ b/test/prism/snapshots/unparser/corpus/literal/since/32.txt @@ -99,7 +99,7 @@ │ │ ├── opening_loc: (6,5)-(6,6) = "(" │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (6,6)-(6,17)) - │ │ │ ├── flags: ∅ + │ │ │ ├── flags: contains_splat │ │ │ └── arguments: (length: 2) │ │ │ ├── @ LocalVariableReadNode (location: (6,6)-(6,14)) │ │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/whitequark/args_args_star.txt b/test/prism/snapshots/whitequark/args_args_star.txt index 85830e7fa2f..32f8b6bafb6 100644 --- a/test/prism/snapshots/whitequark/args_args_star.txt +++ b/test/prism/snapshots/whitequark/args_args_star.txt @@ -14,7 +14,7 @@ │ ├── opening_loc: (1,3)-(1,4) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (1,4)-(1,13)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 2) │ │ ├── @ CallNode (location: (1,4)-(1,7)) │ │ │ ├── flags: variable_call, ignore_visibility @@ -51,7 +51,7 @@ ├── opening_loc: (3,3)-(3,4) = "(" ├── arguments: │ @ ArgumentsNode (location: (3,4)-(3,13)) - │ ├── flags: ∅ + │ ├── flags: contains_splat │ └── arguments: (length: 2) │ ├── @ CallNode (location: (3,4)-(3,7)) │ │ ├── flags: variable_call, ignore_visibility diff --git a/test/prism/snapshots/whitequark/args_star.txt b/test/prism/snapshots/whitequark/args_star.txt index fc04bacc762..488b113dff2 100644 --- a/test/prism/snapshots/whitequark/args_star.txt +++ b/test/prism/snapshots/whitequark/args_star.txt @@ -14,7 +14,7 @@ │ ├── opening_loc: (1,3)-(1,4) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (1,4)-(1,8)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (1,4)-(1,8)) │ │ ├── flags: ∅ @@ -41,7 +41,7 @@ ├── opening_loc: (3,3)-(3,4) = "(" ├── arguments: │ @ ArgumentsNode (location: (3,4)-(3,8)) - │ ├── flags: ∅ + │ ├── flags: contains_splat │ └── arguments: (length: 1) │ └── @ SplatNode (location: (3,4)-(3,8)) │ ├── flags: ∅ diff --git a/test/prism/snapshots/whitequark/forwarded_argument_with_restarg.txt b/test/prism/snapshots/whitequark/forwarded_argument_with_restarg.txt index 3607930b728..2dd95c6cae1 100644 --- a/test/prism/snapshots/whitequark/forwarded_argument_with_restarg.txt +++ b/test/prism/snapshots/whitequark/forwarded_argument_with_restarg.txt @@ -41,7 +41,7 @@ │ ├── opening_loc: (1,25)-(1,26) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (1,26)-(1,37)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 2) │ │ ├── @ LocalVariableReadNode (location: (1,26)-(1,34)) │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/whitequark/forwarded_restarg.txt b/test/prism/snapshots/whitequark/forwarded_restarg.txt index c0bdd05a36e..3e26b2b60ee 100644 --- a/test/prism/snapshots/whitequark/forwarded_restarg.txt +++ b/test/prism/snapshots/whitequark/forwarded_restarg.txt @@ -38,7 +38,7 @@ │ ├── opening_loc: (1,15)-(1,16) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (1,16)-(1,17)) - │ │ ├── flags: ∅ + │ │ ├── flags: contains_splat │ │ └── arguments: (length: 1) │ │ └── @ SplatNode (location: (1,16)-(1,17)) │ │ ├── flags: ∅ From fb1735d5bf13eaa03354cabaaa122a79774bbe85 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 28 Aug 2024 09:53:24 -0400 Subject: [PATCH 103/109] Reverse sync from ruby/ruby --- src/prism.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/prism.c b/src/prism.c index eca764bc267..9ab45f1cc3e 100644 --- a/src/prism.c +++ b/src/prism.c @@ -1304,9 +1304,10 @@ pm_void_statement_check(pm_parser_t *parser, const pm_node_t *node) { * a "void" statement. */ static void -pm_void_statements_check(pm_parser_t *parser, const pm_statements_node_t *node) { +pm_void_statements_check(pm_parser_t *parser, const pm_statements_node_t *node, bool last_value) { assert(node->body.size > 0); - for (size_t index = 0; index < node->body.size - 1; index++) { + const size_t size = node->body.size - (last_value ? 1 : 0); + for (size_t index = 0; index < size; index++) { pm_void_statement_check(parser, node->body.nodes[index]); } } @@ -2286,7 +2287,10 @@ pm_assoc_node_create(pm_parser_t *parser, pm_node_t *key, const pm_token_t *oper // If the key and value of this assoc node are both static literals, then // we can mark this node as a static literal. pm_node_flags_t flags = 0; - if (value && !PM_NODE_TYPE_P(value, PM_ARRAY_NODE) && !PM_NODE_TYPE_P(value, PM_HASH_NODE) && !PM_NODE_TYPE_P(value, PM_RANGE_NODE)) { + if (value && + !PM_NODE_TYPE_P(key, PM_ARRAY_NODE) && !PM_NODE_TYPE_P(key, PM_HASH_NODE) && !PM_NODE_TYPE_P(key, PM_RANGE_NODE) && + !PM_NODE_TYPE_P(value, PM_ARRAY_NODE) && !PM_NODE_TYPE_P(value, PM_HASH_NODE) && !PM_NODE_TYPE_P(value, PM_RANGE_NODE) + ) { flags = key->flags & value->flags & PM_NODE_FLAG_STATIC_LITERAL; } @@ -5242,7 +5246,7 @@ pm_interpolated_string_node_append(pm_interpolated_string_node_t *node, pm_node_ switch (PM_NODE_TYPE(part)) { case PM_STRING_NODE: - pm_node_flag_set(part, PM_NODE_FLAG_STATIC_LITERAL | PM_STRING_FLAGS_FROZEN); + part->flags = (pm_node_flags_t) ((part->flags | PM_NODE_FLAG_STATIC_LITERAL | PM_STRING_FLAGS_FROZEN) & ~PM_STRING_FLAGS_MUTABLE); break; case PM_INTERPOLATED_STRING_NODE: if (PM_NODE_FLAG_P(part, PM_NODE_FLAG_STATIC_LITERAL)) { @@ -5266,7 +5270,7 @@ pm_interpolated_string_node_append(pm_interpolated_string_node_t *node, pm_node_ // If the embedded statement is a string, then we can make that // string as frozen and static literal, and not touch the static // literal status of this string. - pm_node_flag_set(embedded, PM_NODE_FLAG_STATIC_LITERAL | PM_STRING_FLAGS_FROZEN); + embedded->flags = (pm_node_flags_t) ((embedded->flags | PM_NODE_FLAG_STATIC_LITERAL | PM_STRING_FLAGS_FROZEN) & ~PM_STRING_FLAGS_MUTABLE); if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) { MUTABLE_FLAGS(node); @@ -13862,7 +13866,16 @@ parse_statements(pm_parser_t *parser, pm_context_t context) { } context_pop(parser); - pm_void_statements_check(parser, statements); + bool last_value = true; + switch (context) { + case PM_CONTEXT_BEGIN_ENSURE: + case PM_CONTEXT_DEF_ENSURE: + last_value = false; + break; + default: + break; + } + pm_void_statements_check(parser, statements, last_value); return statements; } @@ -18056,7 +18069,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pop_block_exits(parser, previous_block_exits); pm_node_list_free(¤t_block_exits); - pm_void_statements_check(parser, statements); + pm_void_statements_check(parser, statements, true); return (pm_node_t *) pm_parentheses_node_create(parser, &opening, (pm_node_t *) statements, &parser->previous); } case PM_TOKEN_BRACE_LEFT: { From d213a4602e5286daae48348cb9f09cba2f11ca6c Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 28 Aug 2024 11:33:48 -0400 Subject: [PATCH 104/109] Reverse-sync from ruby/ruby --- src/prism.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/prism.c b/src/prism.c index 9ab45f1cc3e..ff5d5c2cccf 100644 --- a/src/prism.c +++ b/src/prism.c @@ -21961,10 +21961,10 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm // If the first two bytes of the source are a shebang, then we'll indicate // that the encoding comment is at the end of the shebang. - if (peek(parser) == '#' && peek_offset(parser, 1) == '!') { - const uint8_t *newline = next_newline(parser->start, parser->end - parser->start); - size_t length = (size_t) ((newline != NULL ? newline : parser->end) - parser->start); + const uint8_t *newline = next_newline(parser->start, parser->end - parser->start); + size_t length = (size_t) ((newline != NULL ? newline : parser->end) - parser->start); + if (length > 2 && parser->current.end[0] == '#' && parser->current.end[1] == '!') { const char *engine; if ((engine = pm_strnstr((const char *) parser->start, "ruby", length)) != NULL) { if (newline != NULL) { From ec181a3b68f790ffa01ebbb2be0acc4e2578b819 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 28 Aug 2024 11:35:14 -0400 Subject: [PATCH 105/109] Swap around order of predicates for assoc static literal --- src/prism.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/prism.c b/src/prism.c index ff5d5c2cccf..b506f710dd4 100644 --- a/src/prism.c +++ b/src/prism.c @@ -2287,10 +2287,10 @@ pm_assoc_node_create(pm_parser_t *parser, pm_node_t *key, const pm_token_t *oper // If the key and value of this assoc node are both static literals, then // we can mark this node as a static literal. pm_node_flags_t flags = 0; - if (value && - !PM_NODE_TYPE_P(key, PM_ARRAY_NODE) && !PM_NODE_TYPE_P(key, PM_HASH_NODE) && !PM_NODE_TYPE_P(key, PM_RANGE_NODE) && - !PM_NODE_TYPE_P(value, PM_ARRAY_NODE) && !PM_NODE_TYPE_P(value, PM_HASH_NODE) && !PM_NODE_TYPE_P(value, PM_RANGE_NODE) - ) { + if ( + !PM_NODE_TYPE_P(key, PM_ARRAY_NODE) && !PM_NODE_TYPE_P(key, PM_HASH_NODE) && !PM_NODE_TYPE_P(key, PM_RANGE_NODE) && + value && !PM_NODE_TYPE_P(value, PM_ARRAY_NODE) && !PM_NODE_TYPE_P(value, PM_HASH_NODE) && !PM_NODE_TYPE_P(value, PM_RANGE_NODE) + ) { flags = key->flags & value->flags & PM_NODE_FLAG_STATIC_LITERAL; } From d43333539e08ae814260bbb6d4cd21599d9c12ba Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Thu, 25 Jul 2024 22:49:42 +0200 Subject: [PATCH 106/109] Review config.yml: documentation, types and field names --- config.yml | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/config.yml b/config.yml index 88fccce4d14..abe411a04b5 100644 --- a/config.yml +++ b/config.yml @@ -774,15 +774,25 @@ nodes: fields: - name: new_name type: node + kind: + - GlobalVariableReadNode + - BackReferenceReadNode + - NumberedReferenceReadNode comment: | - Represents the new name of the global variable that can be used after aliasing. This can be either a global variable, a back reference, or a numbered reference. + Represents the new name of the global variable that can be used after aliasing. alias $foo $bar ^^^^ - name: old_name type: node + kind: + - GlobalVariableReadNode + - BackReferenceReadNode + - NumberedReferenceReadNode + - SymbolNode # On parsing error of `alias $a b` + - MissingNode # On parsing error of `alias $a 42` comment: | - Represents the old name of the global variable that could be used before aliasing. This can be either a global variable, a back reference, or a numbered reference. + Represents the old name of the global variable that can be used before aliasing. alias $foo $bar ^^^^ @@ -802,8 +812,16 @@ nodes: fields: - name: new_name type: node + kind: + - SymbolNode + - InterpolatedSymbolNode - name: old_name type: node + kind: + - SymbolNode + - InterpolatedSymbolNode + - GlobalVariableReadNode # On parsing error of `alias a $b` + - MissingNode # On parsing error of `alias a 42` - name: keyword_loc type: location comment: | @@ -1034,7 +1052,7 @@ nodes: - name: operator_loc type: location comment: | - Represents block method arguments. + Represents a block argument using `&`. bar(&args) ^^^^^^^^^^ @@ -1054,8 +1072,15 @@ nodes: type: constant[] - name: parameters type: node? + kind: + - BlockParametersNode + - NumberedParametersNode + - ItParametersNode - name: body type: node? + kind: + - StatementsNode + - BeginNode - name: opening_loc type: location - name: closing_loc @@ -1075,7 +1100,7 @@ nodes: - name: operator_loc type: location comment: | - Represents a block parameter to a method, block, or lambda definition. + Represents a block parameter of a method, block, or lambda definition. def a(&b) ^^ @@ -2164,6 +2189,9 @@ nodes: end - name: consequent type: node? + kind: + - ElseNode + - IfNode comment: | Represents an `ElseNode` or an `IfNode` when there is an `else` or an `elsif` in the `if` statement. From bc21c9f3ee0890fa490efb515dc51ce0dc5e2f41 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 28 Aug 2024 15:07:09 -0400 Subject: [PATCH 107/109] Reverse-sync ruby/ruby and deprecate old fields --- config.yml | 10 +- lib/prism/desugar_compiler.rb | 2 +- lib/prism/node_ext.rb | 45 +++++ lib/prism/translation/parser/compiler.rb | 36 ++-- lib/prism/translation/ripper.rb | 28 +-- lib/prism/translation/ruby_parser.rb | 10 +- src/prism.c | 72 ++++---- test/prism/result/source_location_test.rb | 10 +- test/prism/snapshots/arrays.txt | 4 +- test/prism/snapshots/begin_rescue.txt | 30 ++-- test/prism/snapshots/blocks.txt | 2 +- test/prism/snapshots/case.txt | 32 ++-- test/prism/snapshots/classes.txt | 4 +- test/prism/snapshots/command_method_call.txt | 4 +- .../endless_range_in_conditional.txt | 6 +- test/prism/snapshots/if.txt | 36 ++-- test/prism/snapshots/keywords.txt | 2 +- test/prism/snapshots/method_calls.txt | 4 +- test/prism/snapshots/methods.txt | 4 +- test/prism/snapshots/modules.txt | 2 +- test/prism/snapshots/patterns.txt | 162 +++++++++--------- test/prism/snapshots/procs.txt | 2 +- test/prism/snapshots/rescue.txt | 10 +- .../begin_rescue_else_ensure_bodies.txt | 2 +- .../begin_rescue_else_ensure_no_bodies.txt | 2 +- .../begin_rescue_ensure_no_bodies.txt | 2 +- test/prism/snapshots/seattlerb/bug191.txt | 4 +- .../seattlerb/bug_case_when_regexp.txt | 2 +- test/prism/snapshots/seattlerb/bug_comma.txt | 2 +- .../snapshots/seattlerb/bug_cond_pct.txt | 2 +- .../seattlerb/call_assoc_new_if_multiline.txt | 2 +- test/prism/snapshots/seattlerb/case_in.txt | 56 +++--- test/prism/snapshots/seattlerb/case_in_31.txt | 2 +- test/prism/snapshots/seattlerb/case_in_37.txt | 2 +- test/prism/snapshots/seattlerb/case_in_42.txt | 2 +- .../snapshots/seattlerb/case_in_42_2.txt | 2 +- test/prism/snapshots/seattlerb/case_in_47.txt | 2 +- test/prism/snapshots/seattlerb/case_in_67.txt | 2 +- test/prism/snapshots/seattlerb/case_in_86.txt | 2 +- .../snapshots/seattlerb/case_in_86_2.txt | 2 +- .../seattlerb/case_in_array_pat_const.txt | 2 +- .../seattlerb/case_in_array_pat_const2.txt | 2 +- .../case_in_array_pat_paren_assign.txt | 2 +- .../snapshots/seattlerb/case_in_const.txt | 2 +- .../snapshots/seattlerb/case_in_else.txt | 2 +- .../snapshots/seattlerb/case_in_find.txt | 2 +- .../seattlerb/case_in_find_array.txt | 2 +- .../snapshots/seattlerb/case_in_hash_pat.txt | 2 +- .../seattlerb/case_in_hash_pat_assign.txt | 2 +- .../case_in_hash_pat_paren_assign.txt | 2 +- .../seattlerb/case_in_hash_pat_paren_true.txt | 2 +- .../seattlerb/case_in_hash_pat_rest.txt | 2 +- .../seattlerb/case_in_hash_pat_rest_solo.txt | 2 +- .../seattlerb/case_in_if_unless_post_mod.txt | 6 +- .../snapshots/seattlerb/case_in_multiple.txt | 2 +- test/prism/snapshots/seattlerb/case_in_or.txt | 2 +- .../snapshots/seattlerb/cond_unary_minus.txt | 2 +- .../seattlerb/defn_oneliner_rescue.txt | 2 +- .../seattlerb/defs_oneliner_rescue.txt | 2 +- .../seattlerb/difficult1_line_numbers.txt | 2 +- .../seattlerb/difficult1_line_numbers2.txt | 2 +- .../prism/snapshots/seattlerb/difficult2_.txt | 2 +- .../snapshots/seattlerb/difficult3_4.txt | 2 +- .../prism/snapshots/seattlerb/difficult7_.txt | 2 +- .../snapshots/seattlerb/flip2_env_lvar.txt | 2 +- .../seattlerb/float_with_if_modifier.txt | 2 +- test/prism/snapshots/seattlerb/if_elsif.txt | 4 +- test/prism/snapshots/seattlerb/if_symbol.txt | 2 +- .../seattlerb/integer_with_if_modifier.txt | 2 +- .../seattlerb/parse_if_not_canonical.txt | 2 +- .../seattlerb/parse_if_not_noncanonical.txt | 2 +- .../snapshots/seattlerb/parse_line_rescue.txt | 4 +- .../snapshots/seattlerb/parse_line_return.txt | 2 +- .../snapshots/seattlerb/parse_pattern_019.txt | 2 +- .../snapshots/seattlerb/parse_pattern_044.txt | 2 +- .../snapshots/seattlerb/parse_pattern_051.txt | 2 +- .../snapshots/seattlerb/parse_pattern_058.txt | 2 +- .../seattlerb/parse_pattern_058_2.txt | 2 +- .../snapshots/seattlerb/parse_pattern_069.txt | 2 +- .../snapshots/seattlerb/parse_pattern_076.txt | 2 +- .../seattlerb/rescue_do_end_no_raise.txt | 2 +- .../seattlerb/rescue_do_end_rescued.txt | 2 +- .../snapshots/seattlerb/rescue_in_block.txt | 2 +- .../seattlerb/str_interp_ternary_or_label.txt | 2 +- test/prism/snapshots/seattlerb/when_splat.txt | 2 +- test/prism/snapshots/ternary_operator.txt | 16 +- test/prism/snapshots/unless.txt | 14 +- .../unparser/corpus/literal/block.txt | 18 +- .../unparser/corpus/literal/case.txt | 16 +- .../snapshots/unparser/corpus/literal/def.txt | 8 +- .../unparser/corpus/literal/dstr.txt | 6 +- .../unparser/corpus/literal/flipflop.txt | 8 +- .../snapshots/unparser/corpus/literal/if.txt | 20 +-- .../unparser/corpus/literal/kwbegin.txt | 26 +-- .../unparser/corpus/literal/pattern.txt | 8 +- .../unparser/corpus/literal/send.txt | 8 +- .../unparser/corpus/semantic/and.txt | 4 +- .../unparser/corpus/semantic/block.txt | 2 +- .../unparser/corpus/semantic/dstr.txt | 8 +- .../unparser/corpus/semantic/kwbegin.txt | 16 +- ...iuous_quoted_label_in_ternary_operator.txt | 2 +- .../whitequark/bug_rescue_empty_else.txt | 2 +- test/prism/snapshots/whitequark/case_cond.txt | 2 +- .../snapshots/whitequark/case_cond_else.txt | 2 +- test/prism/snapshots/whitequark/case_expr.txt | 2 +- .../snapshots/whitequark/case_expr_else.txt | 2 +- .../prism/snapshots/whitequark/cond_begin.txt | 2 +- .../snapshots/whitequark/cond_begin_masgn.txt | 2 +- .../snapshots/whitequark/cond_eflipflop.txt | 2 +- .../cond_eflipflop_with_beginless_range.txt | 2 +- .../cond_eflipflop_with_endless_range.txt | 2 +- .../snapshots/whitequark/cond_iflipflop.txt | 2 +- .../cond_iflipflop_with_beginless_range.txt | 2 +- .../cond_iflipflop_with_endless_range.txt | 2 +- .../whitequark/cond_match_current_line.txt | 2 +- .../snapshots/whitequark/hash_label_end.txt | 2 +- test/prism/snapshots/whitequark/if.txt | 4 +- test/prism/snapshots/whitequark/if_else.txt | 4 +- test/prism/snapshots/whitequark/if_elsif.txt | 4 +- .../snapshots/whitequark/if_masgn__24.txt | 2 +- test/prism/snapshots/whitequark/if_mod.txt | 2 +- .../prism/snapshots/whitequark/if_nl_then.txt | 2 +- .../whitequark/newline_in_hash_argument.txt | 2 +- .../pattern_matching__FILE__LINE_literals.txt | 2 +- .../pattern_matching_blank_else.txt | 2 +- .../whitequark/pattern_matching_else.txt | 2 +- .../snapshots/whitequark/resbody_list.txt | 2 +- .../whitequark/resbody_list_mrhs.txt | 2 +- .../snapshots/whitequark/resbody_list_var.txt | 2 +- .../snapshots/whitequark/resbody_var.txt | 4 +- test/prism/snapshots/whitequark/rescue.txt | 2 +- .../snapshots/whitequark/rescue_else.txt | 2 +- .../whitequark/rescue_else_ensure.txt | 2 +- .../snapshots/whitequark/rescue_ensure.txt | 2 +- .../whitequark/rescue_in_lambda_block.txt | 2 +- .../whitequark/rescue_without_begin_end.txt | 2 +- .../snapshots/whitequark/ruby_bug_10279.txt | 2 +- .../snapshots/whitequark/ruby_bug_10653.txt | 6 +- test/prism/snapshots/whitequark/ternary.txt | 2 +- .../whitequark/ternary_ambiguous_symbol.txt | 2 +- test/prism/snapshots/whitequark/unless.txt | 4 +- .../snapshots/whitequark/unless_else.txt | 4 +- .../prism/snapshots/whitequark/unless_mod.txt | 2 +- .../prism/snapshots/whitequark/when_multi.txt | 2 +- .../prism/snapshots/whitequark/when_splat.txt | 2 +- test/prism/snapshots/whitequark/when_then.txt | 2 +- 146 files changed, 518 insertions(+), 473 deletions(-) diff --git a/config.yml b/config.yml index abe411a04b5..dc19295c3e7 100644 --- a/config.yml +++ b/config.yml @@ -1310,7 +1310,7 @@ nodes: type: node? - name: conditions type: node[] - - name: consequent + - name: else_clause type: node? kind: ElseNode - name: case_keyword_loc @@ -1330,7 +1330,7 @@ nodes: type: node? - name: conditions type: node[] - - name: consequent + - name: else_clause type: node? kind: ElseNode - name: case_keyword_loc @@ -2187,7 +2187,7 @@ nodes: baz ^^^ end - - name: consequent + - name: subsequent type: node? kind: - ElseNode @@ -3448,7 +3448,7 @@ nodes: - name: statements type: node? kind: StatementsNode - - name: consequent + - name: subsequent type: node? kind: RescueNode comment: | @@ -3703,7 +3703,7 @@ nodes: unless cond then bar end ^^^ - - name: consequent + - name: else_clause type: node? kind: ElseNode comment: | diff --git a/lib/prism/desugar_compiler.rb b/lib/prism/desugar_compiler.rb index c51bdd2b1cf..e3b15fc3b06 100644 --- a/lib/prism/desugar_compiler.rb +++ b/lib/prism/desugar_compiler.rb @@ -60,7 +60,7 @@ def compile location: node.location, body: [public_send(read_class, location: node.name_loc, **arguments)] ), - consequent: else_node( + subsequent: else_node( location: node.location, else_keyword_loc: node.operator_loc, statements: statements_node( diff --git a/lib/prism/node_ext.rb b/lib/prism/node_ext.rb index 354bfdb2058..4dfcebd638b 100644 --- a/lib/prism/node_ext.rb +++ b/lib/prism/node_ext.rb @@ -460,4 +460,49 @@ def operator_loc binary_operator_loc end end + + class CaseMatchNode < Node + # Returns the else clause of the case match node. This method is deprecated + # in favor of #else_clause. + def consequent + deprecated("else_clause") + else_clause + end + end + + class CaseNode < Node + # Returns the else clause of the case node. This method is deprecated in + # favor of #else_clause. + def consequent + deprecated("else_clause") + else_clause + end + end + + class IfNode < Node + # Returns the subsequent if/elsif/else clause of the if node. This method is + # deprecated in favor of #subsequent. + def consequent + deprecated("subsequent") + subsequent + end + end + + class RescueNode < Node + # Returns the subsequent rescue clause of the rescue node. This method is + # deprecated in favor of #subsequent. + def consequent + deprecated("subsequent") + subsequent + end + end + + class UnlessNode < Node + # Returns the else clause of the unless node. This method is deprecated in + # favor of #else_clause. + def consequent + deprecated("else_clause") + else_clause + end + end end diff --git a/lib/prism/translation/parser/compiler.rb b/lib/prism/translation/parser/compiler.rb index 48f3d4db5cb..d57b5757d71 100644 --- a/lib/prism/translation/parser/compiler.rb +++ b/lib/prism/translation/parser/compiler.rb @@ -181,7 +181,7 @@ def visit_begin_node(node) if (rescue_clause = node.rescue_clause) begin find_start_offset = (rescue_clause.reference&.location || rescue_clause.exceptions.last&.location || rescue_clause.keyword_loc).end_offset - find_end_offset = (rescue_clause.statements&.location&.start_offset || rescue_clause.consequent&.location&.start_offset || (find_start_offset + 1)) + find_end_offset = (rescue_clause.statements&.location&.start_offset || rescue_clause.subsequent&.location&.start_offset || (find_start_offset + 1)) rescue_bodies << builder.rescue_body( token(rescue_clause.keyword_loc), @@ -191,7 +191,7 @@ def visit_begin_node(node) srange_find(find_start_offset, find_end_offset, [";"]), visit(rescue_clause.statements) ) - end until (rescue_clause = rescue_clause.consequent).nil? + end until (rescue_clause = rescue_clause.subsequent).nil? end begin_body = @@ -410,8 +410,8 @@ def visit_case_node(node) token(node.case_keyword_loc), visit(node.predicate), visit_all(node.conditions), - token(node.consequent&.else_keyword_loc), - visit(node.consequent), + token(node.else_clause&.else_keyword_loc), + visit(node.else_clause), token(node.end_keyword_loc) ) end @@ -423,8 +423,8 @@ def visit_case_match_node(node) token(node.case_keyword_loc), visit(node.predicate), visit_all(node.conditions), - token(node.consequent&.else_keyword_loc), - visit(node.consequent), + token(node.else_clause&.else_keyword_loc), + visit(node.else_clause), token(node.end_keyword_loc) ) end @@ -858,8 +858,8 @@ def visit_if_node(node) visit(node.predicate), token(node.then_keyword_loc), visit(node.statements), - token(node.consequent.else_keyword_loc), - visit(node.consequent) + token(node.subsequent.else_keyword_loc), + visit(node.subsequent) ) elsif node.if_keyword_loc.start_offset == node.location.start_offset builder.condition( @@ -868,16 +868,16 @@ def visit_if_node(node) if node.then_keyword_loc token(node.then_keyword_loc) else - srange_find(node.predicate.location.end_offset, (node.statements&.location || node.consequent&.location || node.end_keyword_loc).start_offset, [";"]) + srange_find(node.predicate.location.end_offset, (node.statements&.location || node.subsequent&.location || node.end_keyword_loc).start_offset, [";"]) end, visit(node.statements), - case node.consequent + case node.subsequent when IfNode - token(node.consequent.if_keyword_loc) + token(node.subsequent.if_keyword_loc) when ElseNode - token(node.consequent.else_keyword_loc) + token(node.subsequent.else_keyword_loc) end, - visit(node.consequent), + visit(node.subsequent), if node.if_keyword != "elsif" token(node.end_keyword_loc) end @@ -885,7 +885,7 @@ def visit_if_node(node) else builder.condition_mod( visit(node.statements), - visit(node.consequent), + visit(node.subsequent), token(node.if_keyword_loc), visit(node.predicate) ) @@ -1784,16 +1784,16 @@ def visit_unless_node(node) if node.then_keyword_loc token(node.then_keyword_loc) else - srange_find(node.predicate.location.end_offset, (node.statements&.location || node.consequent&.location || node.end_keyword_loc).start_offset, [";"]) + srange_find(node.predicate.location.end_offset, (node.statements&.location || node.else_clause&.location || node.end_keyword_loc).start_offset, [";"]) end, - visit(node.consequent), - token(node.consequent&.else_keyword_loc), + visit(node.else_clause), + token(node.else_clause&.else_keyword_loc), visit(node.statements), token(node.end_keyword_loc) ) else builder.condition_mod( - visit(node.consequent), + visit(node.else_clause), visit(node.statements), token(node.keyword_loc), visit(node.predicate) diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb index 79ba0e7ab33..cafe8c3f633 100644 --- a/lib/prism/translation/ripper.rb +++ b/lib/prism/translation/ripper.rb @@ -1273,8 +1273,8 @@ def visit_capture_pattern_node(node) def visit_case_node(node) predicate = visit(node.predicate) clauses = - node.conditions.reverse_each.inject(visit(node.consequent)) do |consequent, condition| - on_when(*visit(condition), consequent) + node.conditions.reverse_each.inject(visit(node.else_clause)) do |current, condition| + on_when(*visit(condition), current) end bounds(node.location) @@ -1286,8 +1286,8 @@ def visit_case_node(node) def visit_case_match_node(node) predicate = visit(node.predicate) clauses = - node.conditions.reverse_each.inject(visit(node.consequent)) do |consequent, condition| - on_in(*visit(condition), consequent) + node.conditions.reverse_each.inject(visit(node.else_clause)) do |current, condition| + on_in(*visit(condition), current) end bounds(node.location) @@ -1908,7 +1908,7 @@ def visit_if_node(node) if node.then_keyword == "?" predicate = visit(node.predicate) truthy = visit(node.statements.body.first) - falsy = visit(node.consequent.statements.body.first) + falsy = visit(node.subsequent.statements.body.first) bounds(node.location) on_ifop(predicate, truthy, falsy) @@ -1921,13 +1921,13 @@ def visit_if_node(node) else visit(node.statements) end - consequent = visit(node.consequent) + subsequent = visit(node.subsequent) bounds(node.location) if node.if_keyword == "if" - on_if(predicate, statements, consequent) + on_if(predicate, statements, subsequent) else - on_elsif(predicate, statements, consequent) + on_elsif(predicate, statements, subsequent) end else statements = visit(node.statements.body.first) @@ -1960,7 +1960,7 @@ def visit_implicit_rest_node(node) # ^^^^^^^^^^^^^^^^^^^^^ def visit_in_node(node) # This is a special case where we're not going to call on_in directly - # because we don't have access to the consequent. Instead, we'll return + # because we don't have access to the subsequent. Instead, we'll return # the component parts and let the parent node handle it. pattern = visit_pattern_node(node.pattern) statements = @@ -2808,10 +2808,10 @@ def visit_rescue_node(node) visit(node.statements) end - consequent = visit(node.consequent) + subsequent = visit(node.subsequent) bounds(node.location) - on_rescue(exceptions, reference, statements, consequent) + on_rescue(exceptions, reference, statements, subsequent) end # def foo(*bar); end @@ -3132,10 +3132,10 @@ def visit_unless_node(node) else visit(node.statements) end - consequent = visit(node.consequent) + else_clause = visit(node.else_clause) bounds(node.location) - on_unless(predicate, statements, consequent) + on_unless(predicate, statements, else_clause) else statements = visit(node.statements.body.first) predicate = visit(node.predicate) @@ -3176,7 +3176,7 @@ def visit_until_node(node) # ^^^^^^^^^^^^^ def visit_when_node(node) # This is a special case where we're not going to call on_when directly - # because we don't have access to the consequent. Instead, we'll return + # because we don't have access to the subsequent. Instead, we'll return # the component parts and let the parent node handle it. conditions = visit_arguments(node.conditions) statements = diff --git a/lib/prism/translation/ruby_parser.rb b/lib/prism/translation/ruby_parser.rb index 45b9c4690b3..9cd39075ecb 100644 --- a/lib/prism/translation/ruby_parser.rb +++ b/lib/prism/translation/ruby_parser.rb @@ -147,7 +147,7 @@ def visit_begin_node(node) end current = node.rescue_clause - until (current = current.consequent).nil? + until (current = current.subsequent).nil? result << visit(current) end end @@ -347,13 +347,13 @@ def visit_capture_pattern_node(node) # case foo; when bar; end # ^^^^^^^^^^^^^^^^^^^^^^^ def visit_case_node(node) - s(node, :case, visit(node.predicate)).concat(visit_all(node.conditions)) << visit(node.consequent) + s(node, :case, visit(node.predicate)).concat(visit_all(node.conditions)) << visit(node.else_clause) end # case foo; in bar; end # ^^^^^^^^^^^^^^^^^^^^^ def visit_case_match_node(node) - s(node, :case, visit(node.predicate)).concat(visit_all(node.conditions)) << visit(node.consequent) + s(node, :case, visit(node.predicate)).concat(visit_all(node.conditions)) << visit(node.else_clause) end # class Foo; end @@ -700,7 +700,7 @@ def visit_hash_pattern_node(node) # foo ? bar : baz # ^^^^^^^^^^^^^^^ def visit_if_node(node) - s(node, :if, visit(node.predicate), visit(node.statements), visit(node.consequent)) + s(node, :if, visit(node.predicate), visit(node.statements), visit(node.subsequent)) end # 1i @@ -1470,7 +1470,7 @@ def visit_undef_node(node) # bar unless foo # ^^^^^^^^^^^^^^ def visit_unless_node(node) - s(node, :if, visit(node.predicate), visit(node.consequent), visit(node.statements)) + s(node, :if, visit(node.predicate), visit(node.else_clause), visit(node.statements)) end # until foo; bar end diff --git a/src/prism.c b/src/prism.c index b506f710dd4..28bd8d0d439 100644 --- a/src/prism.c +++ b/src/prism.c @@ -1093,7 +1093,7 @@ pm_check_value_expression(pm_parser_t *parser, pm_node_t *node) { } case PM_IF_NODE: { pm_if_node_t *cast = (pm_if_node_t *) node; - if (cast->statements == NULL || cast->consequent == NULL) { + if (cast->statements == NULL || cast->subsequent == NULL) { return NULL; } pm_node_t *vn = pm_check_value_expression(parser, (pm_node_t *) cast->statements); @@ -1103,12 +1103,12 @@ pm_check_value_expression(pm_parser_t *parser, pm_node_t *node) { if (void_node == NULL) { void_node = vn; } - node = cast->consequent; + node = cast->subsequent; break; } case PM_UNLESS_NODE: { pm_unless_node_t *cast = (pm_unless_node_t *) node; - if (cast->statements == NULL || cast->consequent == NULL) { + if (cast->statements == NULL || cast->else_clause == NULL) { return NULL; } pm_node_t *vn = pm_check_value_expression(parser, (pm_node_t *) cast->statements); @@ -1118,7 +1118,7 @@ pm_check_value_expression(pm_parser_t *parser, pm_node_t *node) { if (void_node == NULL) { void_node = vn; } - node = (pm_node_t *) cast->consequent; + node = (pm_node_t *) cast->else_clause; break; } case PM_ELSE_NODE: { @@ -3268,7 +3268,7 @@ pm_case_node_create(pm_parser_t *parser, const pm_token_t *case_keyword, pm_node }, }, .predicate = predicate, - .consequent = NULL, + .else_clause = NULL, .case_keyword_loc = PM_LOCATION_TOKEN_VALUE(case_keyword), .end_keyword_loc = PM_LOCATION_TOKEN_VALUE(end_keyword), .conditions = { 0 } @@ -3289,12 +3289,12 @@ pm_case_node_condition_append(pm_case_node_t *node, pm_node_t *condition) { } /** - * Set the consequent of a CaseNode node. + * Set the else clause of a CaseNode node. */ static void -pm_case_node_consequent_set(pm_case_node_t *node, pm_else_node_t *consequent) { - node->consequent = consequent; - node->base.location.end = consequent->base.location.end; +pm_case_node_else_clause_set(pm_case_node_t *node, pm_else_node_t *else_clause) { + node->else_clause = else_clause; + node->base.location.end = else_clause->base.location.end; } /** @@ -3323,7 +3323,7 @@ pm_case_match_node_create(pm_parser_t *parser, const pm_token_t *case_keyword, p }, }, .predicate = predicate, - .consequent = NULL, + .else_clause = NULL, .case_keyword_loc = PM_LOCATION_TOKEN_VALUE(case_keyword), .end_keyword_loc = PM_LOCATION_TOKEN_VALUE(end_keyword), .conditions = { 0 } @@ -3344,12 +3344,12 @@ pm_case_match_node_condition_append(pm_case_match_node_t *node, pm_node_t *condi } /** - * Set the consequent of a CaseMatchNode node. + * Set the else clause of a CaseMatchNode node. */ static void -pm_case_match_node_consequent_set(pm_case_match_node_t *node, pm_else_node_t *consequent) { - node->consequent = consequent; - node->base.location.end = consequent->base.location.end; +pm_case_match_node_else_clause_set(pm_case_match_node_t *node, pm_else_node_t *else_clause) { + node->else_clause = else_clause; + node->base.location.end = else_clause->base.location.end; } /** @@ -4682,7 +4682,7 @@ pm_if_node_create(pm_parser_t *parser, pm_node_t *predicate, const pm_token_t *then_keyword, pm_statements_node_t *statements, - pm_node_t *consequent, + pm_node_t *subsequent, const pm_token_t *end_keyword ) { pm_conditional_predicate(parser, predicate, PM_CONDITIONAL_PREDICATE_TYPE_CONDITIONAL); @@ -4691,8 +4691,8 @@ pm_if_node_create(pm_parser_t *parser, const uint8_t *end; if (end_keyword->type != PM_TOKEN_NOT_PROVIDED) { end = end_keyword->end; - } else if (consequent != NULL) { - end = consequent->location.end; + } else if (subsequent != NULL) { + end = subsequent->location.end; } else if (pm_statements_node_body_length(statements) != 0) { end = statements->base.location.end; } else { @@ -4713,7 +4713,7 @@ pm_if_node_create(pm_parser_t *parser, .predicate = predicate, .then_keyword_loc = PM_OPTIONAL_LOCATION_TOKEN_VALUE(then_keyword), .statements = statements, - .consequent = consequent, + .subsequent = subsequent, .end_keyword_loc = PM_OPTIONAL_LOCATION_TOKEN_VALUE(end_keyword) }; @@ -4745,7 +4745,7 @@ pm_if_node_modifier_create(pm_parser_t *parser, pm_node_t *statement, const pm_t .predicate = predicate, .then_keyword_loc = PM_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE, .statements = statements, - .consequent = NULL, + .subsequent = NULL, .end_keyword_loc = PM_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE }; @@ -4785,7 +4785,7 @@ pm_if_node_ternary_create(pm_parser_t *parser, pm_node_t *predicate, const pm_to .predicate = predicate, .then_keyword_loc = PM_LOCATION_TOKEN_VALUE(qmark), .statements = if_statements, - .consequent = (pm_node_t *)else_node, + .subsequent = (pm_node_t *) else_node, .end_keyword_loc = PM_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE }; @@ -6644,7 +6644,7 @@ pm_rescue_node_create(pm_parser_t *parser, const pm_token_t *keyword) { .operator_loc = PM_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE, .reference = NULL, .statements = NULL, - .consequent = NULL, + .subsequent = NULL, .exceptions = { 0 } }; @@ -6677,12 +6677,12 @@ pm_rescue_node_statements_set(pm_rescue_node_t *node, pm_statements_node_t *stat } /** - * Set the consequent of a rescue node, and update the location. + * Set the subsequent of a rescue node, and update the location. */ static void -pm_rescue_node_consequent_set(pm_rescue_node_t *node, pm_rescue_node_t *consequent) { - node->consequent = consequent; - node->base.location.end = consequent->base.location.end; +pm_rescue_node_subsequent_set(pm_rescue_node_t *node, pm_rescue_node_t *subsequent) { + node->subsequent = subsequent; + node->base.location.end = subsequent->base.location.end; } /** @@ -7589,7 +7589,7 @@ pm_unless_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t .predicate = predicate, .then_keyword_loc = PM_OPTIONAL_LOCATION_TOKEN_VALUE(then_keyword), .statements = statements, - .consequent = NULL, + .else_clause = NULL, .end_keyword_loc = PM_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE }; @@ -7621,7 +7621,7 @@ pm_unless_node_modifier_create(pm_parser_t *parser, pm_node_t *statement, const .predicate = predicate, .then_keyword_loc = PM_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE, .statements = statements, - .consequent = NULL, + .else_clause = NULL, .end_keyword_loc = PM_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE }; @@ -14971,14 +14971,14 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_ if (current == NULL) { pm_begin_node_rescue_clause_set(parent_node, rescue); } else { - pm_rescue_node_consequent_set(current, rescue); + pm_rescue_node_subsequent_set(current, rescue); } current = rescue; } // The end node locations on rescue nodes will not be set correctly - // since we won't know the end until we've found all consequent + // since we won't know the end until we've found all subsequent // clauses. This sets the end location on all rescues once we know it. if (current != NULL) { const uint8_t *end_to_set = current->base.location.end; @@ -14986,7 +14986,7 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_ while (clause != NULL) { clause->base.location.end = end_to_set; - clause = clause->consequent; + clause = clause->subsequent; } } @@ -15710,7 +15710,7 @@ parse_conditional(pm_parser_t *parser, pm_context_t context, size_t opening_newl accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); pm_node_t *elsif = (pm_node_t *) pm_if_node_create(parser, &elsif_keyword, predicate, &then_keyword, statements, NULL, &end_keyword); - ((pm_if_node_t *) current)->consequent = elsif; + ((pm_if_node_t *) current)->subsequent = elsif; current = elsif; } } @@ -15734,10 +15734,10 @@ parse_conditional(pm_parser_t *parser, pm_context_t context, size_t opening_newl switch (context) { case PM_CONTEXT_IF: - ((pm_if_node_t *) current)->consequent = (pm_node_t *) else_node; + ((pm_if_node_t *) current)->subsequent = (pm_node_t *) else_node; break; case PM_CONTEXT_UNLESS: - ((pm_unless_node_t *) parent)->consequent = else_node; + ((pm_unless_node_t *) parent)->else_clause = else_node; break; default: assert(false && "unreachable"); @@ -15758,7 +15758,7 @@ parse_conditional(pm_parser_t *parser, pm_context_t context, size_t opening_newl switch (PM_NODE_TYPE(current)) { case PM_IF_NODE: pm_if_node_end_keyword_loc_set((pm_if_node_t *) current, &parser->previous); - current = ((pm_if_node_t *) current)->consequent; + current = ((pm_if_node_t *) current)->subsequent; recursing = current != NULL; break; case PM_ELSE_NODE: @@ -18711,9 +18711,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } if (PM_NODE_TYPE_P(node, PM_CASE_NODE)) { - pm_case_node_consequent_set((pm_case_node_t *) node, else_node); + pm_case_node_else_clause_set((pm_case_node_t *) node, else_node); } else { - pm_case_match_node_consequent_set((pm_case_match_node_t *) node, else_node); + pm_case_match_node_else_clause_set((pm_case_match_node_t *) node, else_node); } } diff --git a/test/prism/result/source_location_test.rb b/test/prism/result/source_location_test.rb index ca74b36e6f8..7bdc707658e 100644 --- a/test/prism/result/source_location_test.rb +++ b/test/prism/result/source_location_test.rb @@ -315,8 +315,8 @@ def test_DefinedNode end def test_ElseNode - assert_location(ElseNode, "if foo; bar; else; baz; end", 13...27, &:consequent) - assert_location(ElseNode, "foo ? bar : baz", 10...15, &:consequent) + assert_location(ElseNode, "if foo; bar; else; baz; end", 13...27, &:subsequent) + assert_location(ElseNode, "foo ? bar : baz", 10...15, &:subsequent) end def test_EmbeddedStatementsNode @@ -758,7 +758,7 @@ def test_RescueNode end RUBY assert_location(RescueNode, code, 13...50) { |node| node.rescue_clause } - assert_location(RescueNode, code, 30...50) { |node| node.rescue_clause.consequent } + assert_location(RescueNode, code, 30...50) { |node| node.rescue_clause.subsequent } end def test_RescueModifierNode @@ -827,8 +827,8 @@ def test_StatementsNode assert_location(StatementsNode, "if foo; bar; end", 8...11, &:statements) assert_location(StatementsNode, "foo if bar", 0...3, &:statements) - assert_location(StatementsNode, "if foo; foo; elsif bar; bar; end", 24...27) { |node| node.consequent.statements } - assert_location(StatementsNode, "if foo; foo; else; bar; end", 19...22) { |node| node.consequent.statements } + assert_location(StatementsNode, "if foo; foo; elsif bar; bar; end", 24...27) { |node| node.subsequent.statements } + assert_location(StatementsNode, "if foo; foo; else; bar; end", 19...22) { |node| node.subsequent.statements } assert_location(StatementsNode, "unless foo; bar; end", 12...15, &:statements) assert_location(StatementsNode, "foo unless bar", 0...3, &:statements) diff --git a/test/prism/snapshots/arrays.txt b/test/prism/snapshots/arrays.txt index 73154943ae7..f34ee1395c4 100644 --- a/test/prism/snapshots/arrays.txt +++ b/test/prism/snapshots/arrays.txt @@ -1802,7 +1802,7 @@ │ │ │ │ ├── closing_loc: (120,23)-(120,24) = "]" │ │ │ │ └── block: ∅ │ │ │ ├── statements: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (120,26)-(120,29) = "end" @@ -1873,7 +1873,7 @@ │ │ │ ├── closing_loc: (122,26)-(122,27) = "]" │ │ │ └── block: ∅ │ │ ├── statements: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (122,29)-(122,32) = "end" diff --git a/test/prism/snapshots/begin_rescue.txt b/test/prism/snapshots/begin_rescue.txt index 087d7409e71..a3f78ec5f74 100644 --- a/test/prism/snapshots/begin_rescue.txt +++ b/test/prism/snapshots/begin_rescue.txt @@ -43,7 +43,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: │ │ @ ElseNode (location: (1,21)-(1,33)) │ │ ├── flags: ∅ @@ -103,7 +103,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: │ │ @ ElseNode (location: (3,21)-(3,36)) │ │ ├── flags: ∅ @@ -265,7 +265,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: + │ │ └── subsequent: │ │ @ RescueNode (location: (20,0)-(23,1)) │ │ ├── flags: ∅ │ │ ├── keyword_loc: (20,0)-(20,6) = "rescue" @@ -286,7 +286,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: + │ │ └── subsequent: │ │ @ RescueNode (location: (22,0)-(23,1)) │ │ ├── flags: ∅ │ │ ├── keyword_loc: (22,0)-(22,6) = "rescue" @@ -307,7 +307,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (24,0)-(24,3) = "end" @@ -356,7 +356,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: + │ │ └── subsequent: │ │ @ RescueNode (location: (30,0)-(31,3)) │ │ ├── flags: ∅ │ │ ├── keyword_loc: (30,0)-(30,6) = "rescue" @@ -387,7 +387,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (32,0)-(32,3) = "end" @@ -436,7 +436,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (38,0)-(40,3)) @@ -502,7 +502,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (48,0)-(48,3) = "end" @@ -544,7 +544,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (50,17)-(50,20) = "end" @@ -586,7 +586,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (54,2)-(54,5) = "end" @@ -631,7 +631,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (60,0)-(60,3) = "end" @@ -679,7 +679,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (66,0)-(66,3) = "end" @@ -731,7 +731,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (72,0)-(72,3) = "end" @@ -780,7 +780,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: ∅ ├── ensure_clause: ∅ └── end_keyword_loc: (78,0)-(78,3) = "end" diff --git a/test/prism/snapshots/blocks.txt b/test/prism/snapshots/blocks.txt index 933de3e7be2..761e3bb0515 100644 --- a/test/prism/snapshots/blocks.txt +++ b/test/prism/snapshots/blocks.txt @@ -409,7 +409,7 @@ │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (22,0)-(22,3) = "end" diff --git a/test/prism/snapshots/case.txt b/test/prism/snapshots/case.txt index 14a2f79e45f..3afc25826c8 100644 --- a/test/prism/snapshots/case.txt +++ b/test/prism/snapshots/case.txt @@ -27,7 +27,7 @@ │ │ │ └── unescaped: "hi" │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (1,0)-(1,4) = "case" │ └── end_keyword_loc: (3,0)-(3,3) = "end" ├── @ CaseNode (location: (5,0)-(5,58)) @@ -96,7 +96,7 @@ │ │ │ └── unescaped: "bye" │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (5,0)-(5,4) = "case" │ └── end_keyword_loc: (5,55)-(5,58) = "end" ├── @ CaseNode (location: (7,0)-(7,20)) @@ -123,7 +123,7 @@ │ │ │ └── block: ∅ │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (7,0)-(7,4) = "case" │ └── end_keyword_loc: (7,17)-(7,20) = "end" ├── @ CaseNode (location: (9,0)-(13,3)) @@ -148,7 +148,7 @@ │ │ │ └── unescaped: "hi" │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ - │ ├── consequent: + │ ├── else_clause: │ │ @ ElseNode (location: (11,0)-(13,3)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (11,0)-(11,4) = "else" @@ -191,7 +191,7 @@ │ │ │ └── name: :BazBonk │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (15,0)-(15,4) = "case" │ └── end_keyword_loc: (15,33)-(15,36) = "end" ├── @ CaseNode (location: (17,0)-(19,3)) @@ -237,7 +237,7 @@ │ │ │ └── block: ∅ │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (17,0)-(17,4) = "case" │ └── end_keyword_loc: (19,0)-(19,3) = "end" ├── @ CaseNode (location: (21,0)-(25,3)) @@ -260,7 +260,7 @@ │ │ │ └── block: ∅ │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ - │ ├── consequent: + │ ├── else_clause: │ │ @ ElseNode (location: (23,0)-(25,3)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (23,0)-(23,4) = "else" @@ -294,7 +294,7 @@ │ │ │ └── unescaped: "b" │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ - │ ├── consequent: + │ ├── else_clause: │ │ @ ElseNode (location: (29,5)-(30,6)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (29,5)-(29,9) = "else" @@ -315,7 +315,7 @@ │ │ │ └── value: 1 │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (32,0)-(32,4) = "case" │ └── end_keyword_loc: (32,22)-(32,25) = "end" ├── @ CaseNode (location: (34,0)-(36,3)) @@ -342,7 +342,7 @@ │ │ │ └── value: 3 │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (34,0)-(34,4) = "case" │ └── end_keyword_loc: (36,0)-(36,3) = "end" ├── @ CaseNode (location: (38,0)-(38,24)) @@ -369,7 +369,7 @@ │ │ │ └── value: 3 │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (38,0)-(38,4) = "case" │ └── end_keyword_loc: (38,21)-(38,24) = "end" ├── @ CaseMatchNode (location: (40,0)-(42,3)) @@ -396,7 +396,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (41,0)-(41,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (40,0)-(40,4) = "case" │ └── end_keyword_loc: (42,0)-(42,3) = "end" ├── @ CaseMatchNode (location: (44,0)-(44,22)) @@ -423,7 +423,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (44,13)-(44,15) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (44,0)-(44,4) = "case" │ └── end_keyword_loc: (44,19)-(44,22) = "end" ├── @ CaseMatchNode (location: (46,0)-(49,3)) @@ -481,7 +481,7 @@ │ │ │ │ ├── flags: newline │ │ │ │ ├── name: :b │ │ │ │ └── depth: 0 - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (48,2)-(48,3)) @@ -499,7 +499,7 @@ │ │ │ └── block: ∅ │ │ ├── in_loc: (47,0)-(47,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (46,0)-(46,4) = "case" │ └── end_keyword_loc: (49,0)-(49,3) = "end" └── @ CallNode (location: (51,0)-(55,3)) @@ -547,7 +547,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (53,2)-(53,4) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (52,2)-(52,6) = "case" │ └── end_keyword_loc: (54,2)-(54,5) = "end" ├── opening_loc: (51,7)-(51,9) = "do" diff --git a/test/prism/snapshots/classes.txt b/test/prism/snapshots/classes.txt index 6e30ba03898..11ba921df5e 100644 --- a/test/prism/snapshots/classes.txt +++ b/test/prism/snapshots/classes.txt @@ -80,7 +80,7 @@ │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: │ │ │ @ ElseNode (location: (5,17)-(5,29)) │ │ │ ├── flags: ∅ @@ -227,7 +227,7 @@ │ │ │ │ ├── operator_loc: ∅ │ │ │ │ ├── reference: ∅ │ │ │ │ ├── statements: ∅ - │ │ │ │ └── consequent: ∅ + │ │ │ │ └── subsequent: ∅ │ │ │ ├── else_clause: │ │ │ │ @ ElseNode (location: (16,32)-(16,44)) │ │ │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/command_method_call.txt b/test/prism/snapshots/command_method_call.txt index f0d9c6ce294..ab48ee480e2 100644 --- a/test/prism/snapshots/command_method_call.txt +++ b/test/prism/snapshots/command_method_call.txt @@ -91,7 +91,7 @@ │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: ∅ ├── @ UnlessNode (location: (7,0)-(7,18)) │ ├── flags: newline @@ -134,7 +134,7 @@ │ │ │ └── value: 1 │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ └── end_keyword_loc: ∅ ├── @ WhileNode (location: (9,0)-(9,17)) │ ├── flags: newline diff --git a/test/prism/snapshots/endless_range_in_conditional.txt b/test/prism/snapshots/endless_range_in_conditional.txt index 518e96ed531..e3b0df74080 100644 --- a/test/prism/snapshots/endless_range_in_conditional.txt +++ b/test/prism/snapshots/endless_range_in_conditional.txt @@ -22,7 +22,7 @@ │ │ └── operator_loc: (1,4)-(1,6) = ".." │ ├── then_keyword_loc: ∅ │ ├── statements: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (1,10)-(1,13) = "end" ├── @ IfNode (location: (2,0)-(2,12)) │ ├── flags: newline @@ -38,7 +38,7 @@ │ │ └── operator_loc: (2,3)-(2,5) = ".." │ ├── then_keyword_loc: ∅ │ ├── statements: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (2,9)-(2,12) = "end" └── @ IfNode (location: (3,0)-(3,12)) ├── flags: newline @@ -54,5 +54,5 @@ │ └── operator_loc: (3,4)-(3,6) = ".." ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (3,9)-(3,12) = "end" diff --git a/test/prism/snapshots/if.txt b/test/prism/snapshots/if.txt index bf756959e74..ca39adf412d 100644 --- a/test/prism/snapshots/if.txt +++ b/test/prism/snapshots/if.txt @@ -19,7 +19,7 @@ │ │ └── @ IntegerNode (location: (1,9)-(1,10)) │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (1,12)-(1,15) = "end" ├── @ IfNode (location: (3,0)-(4,12)) │ ├── flags: newline @@ -35,7 +35,7 @@ │ │ └── @ IntegerNode (location: (4,0)-(4,1)) │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (4,2)-(4,12)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (4,2)-(4,6) = "else" @@ -61,7 +61,7 @@ │ │ └── body: (length: 1) │ │ └── @ TrueNode (location: (6,13)-(6,17)) │ │ └── flags: newline, static_literal - │ ├── consequent: + │ ├── subsequent: │ │ @ IfNode (location: (6,18)-(6,73)) │ │ ├── flags: newline │ │ ├── if_keyword_loc: (6,18)-(6,23) = "elsif" @@ -75,7 +75,7 @@ │ │ │ └── body: (length: 1) │ │ │ └── @ FalseNode (location: (6,35)-(6,40)) │ │ │ └── flags: newline, static_literal - │ │ ├── consequent: + │ │ ├── subsequent: │ │ │ @ IfNode (location: (6,41)-(6,73)) │ │ │ ├── flags: newline │ │ │ ├── if_keyword_loc: (6,41)-(6,46) = "elsif" @@ -89,7 +89,7 @@ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ NilNode (location: (6,56)-(6,59)) │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── consequent: + │ │ │ ├── subsequent: │ │ │ │ @ ElseNode (location: (6,60)-(6,73)) │ │ │ │ ├── flags: ∅ │ │ │ │ ├── else_keyword_loc: (6,60)-(6,64) = "else" @@ -117,7 +117,7 @@ │ │ └── @ IntegerNode (location: (8,0)-(8,1)) │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: ∅ ├── @ CallNode (location: (10,0)-(10,21)) │ ├── flags: newline, ignore_visibility @@ -152,7 +152,7 @@ │ │ │ ├── flags: newline │ │ │ ├── arguments: ∅ │ │ │ └── keyword_loc: (10,6)-(10,11) = "break" - │ │ ├── consequent: ∅ + │ │ ├── subsequent: ∅ │ │ └── end_keyword_loc: ∅ │ ├── opening_loc: (10,4)-(10,5) = "{" │ └── closing_loc: (10,20)-(10,21) = "}" @@ -189,7 +189,7 @@ │ │ │ ├── flags: newline │ │ │ ├── arguments: ∅ │ │ │ └── keyword_loc: (12,6)-(12,10) = "next" - │ │ ├── consequent: ∅ + │ │ ├── subsequent: ∅ │ │ └── end_keyword_loc: ∅ │ ├── opening_loc: (12,4)-(12,5) = "{" │ └── closing_loc: (12,19)-(12,20) = "}" @@ -208,7 +208,7 @@ │ │ ├── flags: newline │ │ ├── keyword_loc: (14,0)-(14,6) = "return" │ │ └── arguments: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: ∅ ├── @ CallNode (location: (16,0)-(16,38)) │ ├── flags: newline, ignore_visibility @@ -257,7 +257,7 @@ │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 42 │ │ │ └── keyword_loc: (16,24)-(16,29) = "break" - │ │ ├── consequent: ∅ + │ │ ├── subsequent: ∅ │ │ └── end_keyword_loc: (16,33)-(16,36) = "end" │ ├── opening_loc: (16,4)-(16,5) = "{" │ └── closing_loc: (16,37)-(16,38) = "}" @@ -290,7 +290,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (20,0)-(20,3) = "end" ├── @ IfNode (location: (22,0)-(22,11)) │ ├── flags: newline @@ -340,9 +340,9 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ ├── consequent: ∅ + │ │ ├── subsequent: ∅ │ │ └── end_keyword_loc: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: ∅ ├── @ IfNode (location: (24,0)-(27,3)) │ ├── flags: newline @@ -395,7 +395,7 @@ │ │ │ └── operator_loc: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (26,0)-(27,3)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (26,0)-(26,4) = "else" @@ -426,7 +426,7 @@ │ │ └── operator_loc: (29,8)-(29,10) = "in" │ ├── then_keyword_loc: ∅ │ ├── statements: ∅ - │ ├── consequent: + │ ├── subsequent: │ │ @ IfNode (location: (30,0)-(31,3)) │ │ ├── flags: newline │ │ ├── if_keyword_loc: (30,0)-(30,5) = "elsif" @@ -451,7 +451,7 @@ │ │ │ └── operator_loc: (30,11)-(30,13) = "in" │ │ ├── then_keyword_loc: ∅ │ │ ├── statements: ∅ - │ │ ├── consequent: ∅ + │ │ ├── subsequent: ∅ │ │ └── end_keyword_loc: (31,0)-(31,3) = "end" │ └── end_keyword_loc: (31,0)-(31,3) = "end" └── @ IfNode (location: (33,0)-(42,3)) @@ -508,7 +508,7 @@ │ ├── body: ∅ │ ├── opening_loc: (34,9)-(34,11) = "do" │ └── closing_loc: (35,2)-(35,5) = "end" - ├── consequent: + ├── subsequent: │ @ IfNode (location: (36,0)-(42,3)) │ ├── flags: newline │ ├── if_keyword_loc: (36,0)-(36,5) = "elsif" @@ -563,7 +563,7 @@ │ │ ├── body: ∅ │ │ ├── opening_loc: (37,9)-(37,11) = "do" │ │ └── closing_loc: (38,2)-(38,5) = "end" - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (39,0)-(42,3)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (39,0)-(39,4) = "else" diff --git a/test/prism/snapshots/keywords.txt b/test/prism/snapshots/keywords.txt index afe1bad4835..f7f0b8df09b 100644 --- a/test/prism/snapshots/keywords.txt +++ b/test/prism/snapshots/keywords.txt @@ -44,7 +44,7 @@ │ │ │ └── body: (length: 1) │ │ │ └── @ RetryNode (location: (3,15)-(3,20)) │ │ │ └── flags: newline - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (3,22)-(3,25) = "end" diff --git a/test/prism/snapshots/method_calls.txt b/test/prism/snapshots/method_calls.txt index 0d1b39b254a..dbd8c3172fd 100644 --- a/test/prism/snapshots/method_calls.txt +++ b/test/prism/snapshots/method_calls.txt @@ -727,7 +727,7 @@ │ │ │ └── unescaped: "b" │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: ∅ ├── @ CallNode (location: (53,0)-(56,1)) │ ├── flags: newline, ignore_visibility @@ -2047,7 +2047,7 @@ │ │ │ │ └── depth: 0 │ │ │ ├── opening_loc: (121,8)-(121,10) = "do" │ │ │ └── closing_loc: (123,4)-(123,7) = "end" - │ │ ├── consequent: ∅ + │ │ ├── subsequent: ∅ │ │ └── end_keyword_loc: (124,2)-(124,5) = "end" │ ├── closing_loc: ∅ │ └── block: ∅ diff --git a/test/prism/snapshots/methods.txt b/test/prism/snapshots/methods.txt index e3fcfe0a94b..af2defcb974 100644 --- a/test/prism/snapshots/methods.txt +++ b/test/prism/snapshots/methods.txt @@ -717,7 +717,7 @@ │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: │ │ │ @ ElseNode (location: (77,15)-(77,27)) │ │ │ ├── flags: ∅ @@ -901,7 +901,7 @@ │ │ │ │ ├── value_loc: (99,8)-(99,10) = "hi" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "hi" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ └── @ SymbolNode (location: (100,0)-(100,4)) │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding diff --git a/test/prism/snapshots/modules.txt b/test/prism/snapshots/modules.txt index d889d855af4..5e001229014 100644 --- a/test/prism/snapshots/modules.txt +++ b/test/prism/snapshots/modules.txt @@ -122,7 +122,7 @@ │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (9,16)-(9,19) = "end" diff --git a/test/prism/snapshots/patterns.txt b/test/prism/snapshots/patterns.txt index 72209345855..1857bcd21c3 100644 --- a/test/prism/snapshots/patterns.txt +++ b/test/prism/snapshots/patterns.txt @@ -3226,7 +3226,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (135,10)-(135,12) = "in" │ │ └── then_loc: (135,17)-(135,21) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (135,0)-(135,4) = "case" │ └── end_keyword_loc: (135,22)-(135,25) = "end" ├── @ CaseMatchNode (location: (136,0)-(136,23)) @@ -3252,7 +3252,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (136,10)-(136,12) = "in" │ │ └── then_loc: (136,15)-(136,19) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (136,0)-(136,4) = "case" │ └── end_keyword_loc: (136,20)-(136,23) = "end" ├── @ CaseMatchNode (location: (137,0)-(137,25)) @@ -3278,7 +3278,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (137,10)-(137,12) = "in" │ │ └── then_loc: (137,17)-(137,21) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (137,0)-(137,4) = "case" │ └── end_keyword_loc: (137,22)-(137,25) = "end" ├── @ CaseMatchNode (location: (138,0)-(138,24)) @@ -3307,7 +3307,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (138,10)-(138,12) = "in" │ │ └── then_loc: (138,16)-(138,20) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (138,0)-(138,4) = "case" │ └── end_keyword_loc: (138,21)-(138,24) = "end" ├── @ CaseMatchNode (location: (139,0)-(139,24)) @@ -3334,7 +3334,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (139,10)-(139,12) = "in" │ │ └── then_loc: (139,16)-(139,20) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (139,0)-(139,4) = "case" │ └── end_keyword_loc: (139,21)-(139,24) = "end" ├── @ CaseMatchNode (location: (140,0)-(140,26)) @@ -3363,7 +3363,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (140,10)-(140,12) = "in" │ │ └── then_loc: (140,18)-(140,22) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (140,0)-(140,4) = "case" │ └── end_keyword_loc: (140,23)-(140,26) = "end" ├── @ CaseMatchNode (location: (141,0)-(141,29)) @@ -3392,7 +3392,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (141,10)-(141,12) = "in" │ │ └── then_loc: (141,21)-(141,25) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (141,0)-(141,4) = "case" │ └── end_keyword_loc: (141,26)-(141,29) = "end" ├── @ CaseMatchNode (location: (142,0)-(142,28)) @@ -3421,7 +3421,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (142,10)-(142,12) = "in" │ │ └── then_loc: (142,20)-(142,24) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (142,0)-(142,4) = "case" │ └── end_keyword_loc: (142,25)-(142,28) = "end" ├── @ CaseMatchNode (location: (143,0)-(143,27)) @@ -3450,7 +3450,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (143,10)-(143,12) = "in" │ │ └── then_loc: (143,19)-(143,23) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (143,0)-(143,4) = "case" │ └── end_keyword_loc: (143,24)-(143,27) = "end" ├── @ CaseMatchNode (location: (144,0)-(144,27)) @@ -3479,7 +3479,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (144,10)-(144,12) = "in" │ │ └── then_loc: (144,19)-(144,23) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (144,0)-(144,4) = "case" │ └── end_keyword_loc: (144,24)-(144,27) = "end" ├── @ CaseMatchNode (location: (145,0)-(145,29)) @@ -3508,7 +3508,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (145,10)-(145,12) = "in" │ │ └── then_loc: (145,21)-(145,25) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (145,0)-(145,4) = "case" │ └── end_keyword_loc: (145,26)-(145,29) = "end" ├── @ CaseMatchNode (location: (146,0)-(146,29)) @@ -3542,7 +3542,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (146,10)-(146,12) = "in" │ │ └── then_loc: (146,21)-(146,25) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (146,0)-(146,4) = "case" │ └── end_keyword_loc: (146,26)-(146,29) = "end" ├── @ CaseMatchNode (location: (147,0)-(147,29)) @@ -3576,7 +3576,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (147,10)-(147,12) = "in" │ │ └── then_loc: (147,21)-(147,25) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (147,0)-(147,4) = "case" │ └── end_keyword_loc: (147,26)-(147,29) = "end" ├── @ CaseMatchNode (location: (148,0)-(148,29)) @@ -3610,7 +3610,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (148,10)-(148,12) = "in" │ │ └── then_loc: (148,21)-(148,25) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (148,0)-(148,4) = "case" │ └── end_keyword_loc: (148,26)-(148,29) = "end" ├── @ CaseMatchNode (location: (149,0)-(149,29)) @@ -3644,7 +3644,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (149,10)-(149,12) = "in" │ │ └── then_loc: (149,21)-(149,25) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (149,0)-(149,4) = "case" │ └── end_keyword_loc: (149,26)-(149,29) = "end" ├── @ CaseMatchNode (location: (150,0)-(150,29)) @@ -3673,7 +3673,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (150,10)-(150,12) = "in" │ │ └── then_loc: (150,21)-(150,25) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (150,0)-(150,4) = "case" │ └── end_keyword_loc: (150,26)-(150,29) = "end" ├── @ CaseMatchNode (location: (151,0)-(151,29)) @@ -3702,7 +3702,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (151,10)-(151,12) = "in" │ │ └── then_loc: (151,21)-(151,25) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (151,0)-(151,4) = "case" │ └── end_keyword_loc: (151,26)-(151,29) = "end" ├── @ CaseMatchNode (location: (152,0)-(152,27)) @@ -3731,7 +3731,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (152,10)-(152,12) = "in" │ │ └── then_loc: (152,19)-(152,23) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (152,0)-(152,4) = "case" │ └── end_keyword_loc: (152,24)-(152,27) = "end" ├── @ CaseMatchNode (location: (153,0)-(153,25)) @@ -3756,7 +3756,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (153,10)-(153,12) = "in" │ │ └── then_loc: (153,17)-(153,21) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (153,0)-(153,4) = "case" │ └── end_keyword_loc: (153,22)-(153,25) = "end" ├── @ CaseMatchNode (location: (154,0)-(154,26)) @@ -3781,7 +3781,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (154,10)-(154,12) = "in" │ │ └── then_loc: (154,18)-(154,22) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (154,0)-(154,4) = "case" │ └── end_keyword_loc: (154,23)-(154,26) = "end" ├── @ CaseMatchNode (location: (155,0)-(155,26)) @@ -3806,7 +3806,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (155,10)-(155,12) = "in" │ │ └── then_loc: (155,18)-(155,22) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (155,0)-(155,4) = "case" │ └── end_keyword_loc: (155,23)-(155,26) = "end" ├── @ CaseMatchNode (location: (156,0)-(156,27)) @@ -3831,7 +3831,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (156,10)-(156,12) = "in" │ │ └── then_loc: (156,19)-(156,23) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (156,0)-(156,4) = "case" │ └── end_keyword_loc: (156,24)-(156,27) = "end" ├── @ CaseMatchNode (location: (157,0)-(157,30)) @@ -3857,7 +3857,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (157,10)-(157,12) = "in" │ │ └── then_loc: (157,22)-(157,26) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (157,0)-(157,4) = "case" │ └── end_keyword_loc: (157,27)-(157,30) = "end" ├── @ CaseMatchNode (location: (158,0)-(158,30)) @@ -3882,7 +3882,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (158,10)-(158,12) = "in" │ │ └── then_loc: (158,22)-(158,26) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (158,0)-(158,4) = "case" │ └── end_keyword_loc: (158,27)-(158,30) = "end" ├── @ CaseMatchNode (location: (159,0)-(159,34)) @@ -3907,7 +3907,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (159,10)-(159,12) = "in" │ │ └── then_loc: (159,26)-(159,30) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (159,0)-(159,4) = "case" │ └── end_keyword_loc: (159,31)-(159,34) = "end" ├── @ CaseMatchNode (location: (160,0)-(160,32)) @@ -3945,7 +3945,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (160,10)-(160,12) = "in" │ │ └── then_loc: (160,24)-(160,28) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (160,0)-(160,4) = "case" │ └── end_keyword_loc: (160,29)-(160,32) = "end" ├── @ CaseMatchNode (location: (162,0)-(162,32)) @@ -3982,12 +3982,12 @@ │ │ │ │ ├── flags: newline │ │ │ │ ├── name: :bar │ │ │ │ └── depth: 0 - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (162,10)-(162,12) = "in" │ │ └── then_loc: (162,24)-(162,28) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (162,0)-(162,4) = "case" │ └── end_keyword_loc: (162,29)-(162,32) = "end" ├── @ CaseMatchNode (location: (163,0)-(163,30)) @@ -4023,12 +4023,12 @@ │ │ │ │ └── @ IntegerNode (location: (163,13)-(163,14)) │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ └── value: 1 - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (163,10)-(163,12) = "in" │ │ └── then_loc: (163,22)-(163,26) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (163,0)-(163,4) = "case" │ └── end_keyword_loc: (163,27)-(163,30) = "end" ├── @ CaseMatchNode (location: (164,0)-(164,32)) @@ -4064,12 +4064,12 @@ │ │ │ │ └── @ FloatNode (location: (164,13)-(164,16)) │ │ │ │ ├── flags: newline, static_literal │ │ │ │ └── value: 1.0 - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (164,10)-(164,12) = "in" │ │ └── then_loc: (164,24)-(164,28) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (164,0)-(164,4) = "case" │ └── end_keyword_loc: (164,29)-(164,32) = "end" ├── @ CaseMatchNode (location: (165,0)-(165,31)) @@ -4108,12 +4108,12 @@ │ │ │ │ @ IntegerNode (location: (165,13)-(165,14)) │ │ │ │ ├── flags: static_literal, decimal │ │ │ │ └── value: 1 - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (165,10)-(165,12) = "in" │ │ └── then_loc: (165,23)-(165,27) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (165,0)-(165,4) = "case" │ └── end_keyword_loc: (165,28)-(165,31) = "end" ├── @ CaseMatchNode (location: (166,0)-(166,31)) @@ -4150,12 +4150,12 @@ │ │ │ │ ├── flags: newline, static_literal, decimal │ │ │ │ ├── numerator: 1 │ │ │ │ └── denominator: 1 - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (166,10)-(166,12) = "in" │ │ └── then_loc: (166,23)-(166,27) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (166,0)-(166,4) = "case" │ └── end_keyword_loc: (166,28)-(166,31) = "end" ├── @ CaseMatchNode (location: (167,0)-(167,33)) @@ -4194,12 +4194,12 @@ │ │ │ │ ├── value_loc: (167,14)-(167,17) = "foo" │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── unescaped: "foo" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (167,10)-(167,12) = "in" │ │ └── then_loc: (167,25)-(167,29) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (167,0)-(167,4) = "case" │ └── end_keyword_loc: (167,30)-(167,33) = "end" ├── @ CaseMatchNode (location: (168,0)-(168,36)) @@ -4238,12 +4238,12 @@ │ │ │ │ ├── value_loc: (168,16)-(168,19) = "foo" │ │ │ │ ├── closing_loc: (168,19)-(168,20) = "]" │ │ │ │ └── unescaped: "foo" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (168,10)-(168,12) = "in" │ │ └── then_loc: (168,28)-(168,32) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (168,0)-(168,4) = "case" │ └── end_keyword_loc: (168,33)-(168,36) = "end" ├── @ CaseMatchNode (location: (169,0)-(169,35)) @@ -4282,12 +4282,12 @@ │ │ │ │ ├── value_loc: (169,15)-(169,18) = "foo" │ │ │ │ ├── closing_loc: (169,18)-(169,19) = "\"" │ │ │ │ └── unescaped: "foo" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (169,10)-(169,12) = "in" │ │ └── then_loc: (169,27)-(169,31) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (169,0)-(169,4) = "case" │ └── end_keyword_loc: (169,32)-(169,35) = "end" ├── @ CaseMatchNode (location: (170,0)-(170,34)) @@ -4326,12 +4326,12 @@ │ │ │ │ ├── content_loc: (170,14)-(170,17) = "foo" │ │ │ │ ├── closing_loc: (170,17)-(170,18) = "/" │ │ │ │ └── unescaped: "foo" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (170,10)-(170,12) = "in" │ │ └── then_loc: (170,26)-(170,30) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (170,0)-(170,4) = "case" │ └── end_keyword_loc: (170,31)-(170,34) = "end" ├── @ CaseMatchNode (location: (171,0)-(171,34)) @@ -4370,12 +4370,12 @@ │ │ │ │ ├── content_loc: (171,14)-(171,17) = "foo" │ │ │ │ ├── closing_loc: (171,17)-(171,18) = "`" │ │ │ │ └── unescaped: "foo" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (171,10)-(171,12) = "in" │ │ └── then_loc: (171,26)-(171,30) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (171,0)-(171,4) = "case" │ └── end_keyword_loc: (171,31)-(171,34) = "end" ├── @ CaseMatchNode (location: (172,0)-(172,36)) @@ -4414,12 +4414,12 @@ │ │ │ │ ├── content_loc: (172,16)-(172,19) = "foo" │ │ │ │ ├── closing_loc: (172,19)-(172,20) = "]" │ │ │ │ └── unescaped: "foo" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (172,10)-(172,12) = "in" │ │ └── then_loc: (172,28)-(172,32) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (172,0)-(172,4) = "case" │ └── end_keyword_loc: (172,33)-(172,36) = "end" ├── @ CaseMatchNode (location: (173,0)-(173,36)) @@ -4463,12 +4463,12 @@ │ │ │ │ │ └── unescaped: "foo" │ │ │ │ ├── opening_loc: (173,13)-(173,16) = "%i[" │ │ │ │ └── closing_loc: (173,19)-(173,20) = "]" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (173,10)-(173,12) = "in" │ │ └── then_loc: (173,28)-(173,32) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (173,0)-(173,4) = "case" │ └── end_keyword_loc: (173,33)-(173,36) = "end" ├── @ CaseMatchNode (location: (174,0)-(174,36)) @@ -4512,12 +4512,12 @@ │ │ │ │ │ └── unescaped: "foo" │ │ │ │ ├── opening_loc: (174,13)-(174,16) = "%I[" │ │ │ │ └── closing_loc: (174,19)-(174,20) = "]" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (174,10)-(174,12) = "in" │ │ └── then_loc: (174,28)-(174,32) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (174,0)-(174,4) = "case" │ └── end_keyword_loc: (174,33)-(174,36) = "end" ├── @ CaseMatchNode (location: (175,0)-(175,36)) @@ -4561,12 +4561,12 @@ │ │ │ │ │ └── unescaped: "foo" │ │ │ │ ├── opening_loc: (175,13)-(175,16) = "%w[" │ │ │ │ └── closing_loc: (175,19)-(175,20) = "]" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (175,10)-(175,12) = "in" │ │ └── then_loc: (175,28)-(175,32) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (175,0)-(175,4) = "case" │ └── end_keyword_loc: (175,33)-(175,36) = "end" ├── @ CaseMatchNode (location: (176,0)-(176,36)) @@ -4610,12 +4610,12 @@ │ │ │ │ │ └── unescaped: "foo" │ │ │ │ ├── opening_loc: (176,13)-(176,16) = "%W[" │ │ │ │ └── closing_loc: (176,19)-(176,20) = "]" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (176,10)-(176,12) = "in" │ │ └── then_loc: (176,28)-(176,32) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (176,0)-(176,4) = "case" │ └── end_keyword_loc: (176,33)-(176,36) = "end" ├── @ CaseMatchNode (location: (177,0)-(177,36)) @@ -4654,12 +4654,12 @@ │ │ │ │ ├── content_loc: (177,16)-(177,19) = "foo" │ │ │ │ ├── closing_loc: (177,19)-(177,20) = "]" │ │ │ │ └── unescaped: "foo" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (177,10)-(177,12) = "in" │ │ └── then_loc: (177,28)-(177,32) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (177,0)-(177,4) = "case" │ └── end_keyword_loc: (177,33)-(177,36) = "end" ├── @ CaseMatchNode (location: (178,0)-(178,36)) @@ -4698,12 +4698,12 @@ │ │ │ │ ├── content_loc: (178,16)-(178,19) = "foo" │ │ │ │ ├── closing_loc: (178,19)-(178,20) = "]" │ │ │ │ └── unescaped: "foo" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (178,10)-(178,12) = "in" │ │ └── then_loc: (178,28)-(178,32) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (178,0)-(178,4) = "case" │ └── end_keyword_loc: (178,33)-(178,36) = "end" ├── @ CaseMatchNode (location: (179,0)-(179,34)) @@ -4742,12 +4742,12 @@ │ │ │ │ ├── content_loc: (179,14)-(179,17) = "foo" │ │ │ │ ├── closing_loc: (179,17)-(179,18) = "\"" │ │ │ │ └── unescaped: "foo" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (179,10)-(179,12) = "in" │ │ └── then_loc: (179,26)-(179,30) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (179,0)-(179,4) = "case" │ └── end_keyword_loc: (179,31)-(179,34) = "end" ├── @ CaseMatchNode (location: (180,0)-(180,32)) @@ -4782,12 +4782,12 @@ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ NilNode (location: (180,13)-(180,16)) │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (180,10)-(180,12) = "in" │ │ └── then_loc: (180,24)-(180,28) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (180,0)-(180,4) = "case" │ └── end_keyword_loc: (180,29)-(180,32) = "end" ├── @ CaseMatchNode (location: (181,0)-(181,33)) @@ -4822,12 +4822,12 @@ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ SelfNode (location: (181,13)-(181,17)) │ │ │ │ └── flags: newline - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (181,10)-(181,12) = "in" │ │ └── then_loc: (181,25)-(181,29) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (181,0)-(181,4) = "case" │ └── end_keyword_loc: (181,30)-(181,33) = "end" ├── @ CaseMatchNode (location: (182,0)-(182,33)) @@ -4862,12 +4862,12 @@ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ TrueNode (location: (182,13)-(182,17)) │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (182,10)-(182,12) = "in" │ │ └── then_loc: (182,25)-(182,29) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (182,0)-(182,4) = "case" │ └── end_keyword_loc: (182,30)-(182,33) = "end" ├── @ CaseMatchNode (location: (183,0)-(183,34)) @@ -4902,12 +4902,12 @@ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ FalseNode (location: (183,13)-(183,18)) │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (183,10)-(183,12) = "in" │ │ └── then_loc: (183,26)-(183,30) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (183,0)-(183,4) = "case" │ └── end_keyword_loc: (183,31)-(183,34) = "end" ├── @ CaseMatchNode (location: (184,0)-(184,37)) @@ -4943,12 +4943,12 @@ │ │ │ │ └── @ SourceFileNode (location: (184,13)-(184,21)) │ │ │ │ ├── flags: newline │ │ │ │ └── filepath: "patterns.txt" - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (184,10)-(184,12) = "in" │ │ └── then_loc: (184,29)-(184,33) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (184,0)-(184,4) = "case" │ └── end_keyword_loc: (184,34)-(184,37) = "end" ├── @ CaseMatchNode (location: (185,0)-(185,37)) @@ -4983,12 +4983,12 @@ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ SourceLineNode (location: (185,13)-(185,21)) │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (185,10)-(185,12) = "in" │ │ └── then_loc: (185,29)-(185,33) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (185,0)-(185,4) = "case" │ └── end_keyword_loc: (185,34)-(185,37) = "end" ├── @ CaseMatchNode (location: (186,0)-(186,41)) @@ -5023,12 +5023,12 @@ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ SourceEncodingNode (location: (186,13)-(186,25)) │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (186,10)-(186,12) = "in" │ │ └── then_loc: (186,33)-(186,37) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (186,0)-(186,4) = "case" │ └── end_keyword_loc: (186,38)-(186,41) = "end" ├── @ CaseMatchNode (location: (187,0)-(187,39)) @@ -5076,12 +5076,12 @@ │ │ │ │ ├── flags: newline │ │ │ │ ├── name: :bar │ │ │ │ └── depth: 1 - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: ∅ │ │ ├── in_loc: (187,10)-(187,12) = "in" │ │ └── then_loc: (187,31)-(187,35) = "then" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (187,0)-(187,4) = "case" │ └── end_keyword_loc: (187,36)-(187,39) = "end" ├── @ IfNode (location: (189,0)-(190,3)) @@ -5113,7 +5113,7 @@ │ │ └── operator_loc: (189,5)-(189,7) = "in" │ ├── then_keyword_loc: ∅ │ ├── statements: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (190,0)-(190,3) = "end" ├── @ MatchRequiredNode (location: (192,0)-(194,1)) │ ├── flags: newline @@ -5497,7 +5497,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (219,9)-(219,11) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (219,0)-(219,4) = "case" │ └── end_keyword_loc: (219,22)-(219,25) = "end" └── @ CaseMatchNode (location: (220,0)-(220,31)) @@ -5565,6 +5565,6 @@ │ ├── statements: ∅ │ ├── in_loc: (220,9)-(220,11) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (220,0)-(220,4) = "case" └── end_keyword_loc: (220,28)-(220,31) = "end" diff --git a/test/prism/snapshots/procs.txt b/test/prism/snapshots/procs.txt index a7602165144..91a53e98f66 100644 --- a/test/prism/snapshots/procs.txt +++ b/test/prism/snapshots/procs.txt @@ -88,7 +88,7 @@ │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: │ │ @ ElseNode (location: (9,0)-(10,6)) │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/rescue.txt b/test/prism/snapshots/rescue.txt index 705758c507f..38f692bbeda 100644 --- a/test/prism/snapshots/rescue.txt +++ b/test/prism/snapshots/rescue.txt @@ -166,7 +166,7 @@ │ │ └── @ IntegerNode (location: (14,17)-(14,18)) │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (14,19)-(14,22)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (14,19)-(14,20) = ":" @@ -218,7 +218,7 @@ │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (16,21)-(16,24) = "end" @@ -363,7 +363,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (24,0)-(24,3) = "end" ├── @ DefNode (location: (26,0)-(26,44)) │ ├── flags: newline @@ -467,7 +467,7 @@ │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (31,0)-(31,3) = "end" @@ -510,7 +510,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ ├── consequent: ∅ + │ │ ├── subsequent: ∅ │ │ └── end_keyword_loc: ∅ │ ├── keyword_loc: (33,11)-(33,17) = "rescue" │ └── rescue_expression: diff --git a/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_bodies.txt b/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_bodies.txt index 61a62d311eb..9fda6c10e60 100644 --- a/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_bodies.txt +++ b/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_bodies.txt @@ -29,7 +29,7 @@ │ │ └── @ IntegerNode (location: (4,2)-(4,3)) │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 2 - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: │ @ ElseNode (location: (5,0)-(7,6)) │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_no_bodies.txt b/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_no_bodies.txt index 3353a414847..356d1ea9ab1 100644 --- a/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_no_bodies.txt +++ b/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_no_bodies.txt @@ -17,7 +17,7 @@ │ ├── operator_loc: ∅ │ ├── reference: ∅ │ ├── statements: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: │ @ ElseNode (location: (5,0)-(7,6)) │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/begin_rescue_ensure_no_bodies.txt b/test/prism/snapshots/seattlerb/begin_rescue_ensure_no_bodies.txt index e84fc706508..aa744870e79 100644 --- a/test/prism/snapshots/seattlerb/begin_rescue_ensure_no_bodies.txt +++ b/test/prism/snapshots/seattlerb/begin_rescue_ensure_no_bodies.txt @@ -17,7 +17,7 @@ │ ├── operator_loc: ∅ │ ├── reference: ∅ │ ├── statements: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: ∅ ├── ensure_clause: │ @ EnsureNode (location: (3,0)-(4,3)) diff --git a/test/prism/snapshots/seattlerb/bug191.txt b/test/prism/snapshots/seattlerb/bug191.txt index 3977eb95195..27b7f97f450 100644 --- a/test/prism/snapshots/seattlerb/bug191.txt +++ b/test/prism/snapshots/seattlerb/bug191.txt @@ -30,7 +30,7 @@ │ │ ├── content_loc: (1,5)-(1,5) = "" │ │ ├── closing_loc: (1,5)-(1,6) = "\"" │ │ └── unescaped: "" - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (1,6)-(1,9)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (1,6)-(1,7) = ":" @@ -75,7 +75,7 @@ │ ├── content_loc: (3,5)-(3,5) = "" │ ├── closing_loc: (3,5)-(3,6) = "'" │ └── unescaped: "" - ├── consequent: + ├── subsequent: │ @ ElseNode (location: (3,6)-(3,9)) │ ├── flags: ∅ │ ├── else_keyword_loc: (3,6)-(3,7) = ":" diff --git a/test/prism/snapshots/seattlerb/bug_case_when_regexp.txt b/test/prism/snapshots/seattlerb/bug_case_when_regexp.txt index f0d3c3d23c8..e24a170ad4f 100644 --- a/test/prism/snapshots/seattlerb/bug_case_when_regexp.txt +++ b/test/prism/snapshots/seattlerb/bug_case_when_regexp.txt @@ -27,6 +27,6 @@ │ │ └── unescaped: "x" │ ├── then_keyword_loc: (1,18)-(1,22) = "then" │ └── statements: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (1,23)-(1,26) = "end" diff --git a/test/prism/snapshots/seattlerb/bug_comma.txt b/test/prism/snapshots/seattlerb/bug_comma.txt index 0d65d2805a5..d370ea0ac0e 100644 --- a/test/prism/snapshots/seattlerb/bug_comma.txt +++ b/test/prism/snapshots/seattlerb/bug_comma.txt @@ -40,5 +40,5 @@ │ └── block: ∅ ├── then_keyword_loc: (1,16)-(1,20) = "then" ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (1,21)-(1,24) = "end" diff --git a/test/prism/snapshots/seattlerb/bug_cond_pct.txt b/test/prism/snapshots/seattlerb/bug_cond_pct.txt index 69d9b7e1755..0b96c5c44e4 100644 --- a/test/prism/snapshots/seattlerb/bug_cond_pct.txt +++ b/test/prism/snapshots/seattlerb/bug_cond_pct.txt @@ -21,6 +21,6 @@ │ │ └── unescaped: "blahblah" │ ├── then_keyword_loc: ∅ │ └── statements: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (1,25)-(1,28) = "end" diff --git a/test/prism/snapshots/seattlerb/call_assoc_new_if_multiline.txt b/test/prism/snapshots/seattlerb/call_assoc_new_if_multiline.txt index e0236f3974f..a258b734a30 100644 --- a/test/prism/snapshots/seattlerb/call_assoc_new_if_multiline.txt +++ b/test/prism/snapshots/seattlerb/call_assoc_new_if_multiline.txt @@ -47,7 +47,7 @@ │ │ │ └── @ IntegerNode (location: (2,0)-(2,1)) │ │ │ ├── flags: newline, static_literal, decimal │ │ │ └── value: 1 - │ │ ├── consequent: + │ │ ├── subsequent: │ │ │ @ ElseNode (location: (3,0)-(5,3)) │ │ │ ├── flags: ∅ │ │ │ ├── else_keyword_loc: (3,0)-(3,4) = "else" diff --git a/test/prism/snapshots/seattlerb/case_in.txt b/test/prism/snapshots/seattlerb/case_in.txt index 6df3b407a68..929cca0d382 100644 --- a/test/prism/snapshots/seattlerb/case_in.txt +++ b/test/prism/snapshots/seattlerb/case_in.txt @@ -46,7 +46,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (2,0)-(2,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (1,0)-(1,4) = "case" │ └── end_keyword_loc: (3,0)-(3,3) = "end" ├── @ CaseMatchNode (location: (5,0)-(7,3)) @@ -82,7 +82,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (6,0)-(6,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (5,0)-(5,4) = "case" │ └── end_keyword_loc: (7,0)-(7,3) = "end" ├── @ CaseMatchNode (location: (9,0)-(11,3)) @@ -118,7 +118,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (10,0)-(10,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (9,0)-(9,4) = "case" │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ CaseMatchNode (location: (13,0)-(15,3)) @@ -154,7 +154,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (14,0)-(14,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (13,0)-(13,4) = "case" │ └── end_keyword_loc: (15,0)-(15,3) = "end" ├── @ CaseMatchNode (location: (17,0)-(19,3)) @@ -190,7 +190,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (18,0)-(18,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (17,0)-(17,4) = "case" │ └── end_keyword_loc: (19,0)-(19,3) = "end" ├── @ CaseMatchNode (location: (21,0)-(23,3)) @@ -222,7 +222,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (22,0)-(22,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (21,0)-(21,4) = "case" │ └── end_keyword_loc: (23,0)-(23,3) = "end" ├── @ CaseMatchNode (location: (25,0)-(27,3)) @@ -254,7 +254,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (26,0)-(26,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (25,0)-(25,4) = "case" │ └── end_keyword_loc: (27,0)-(27,3) = "end" ├── @ CaseMatchNode (location: (29,0)-(31,3)) @@ -286,7 +286,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (30,0)-(30,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (29,0)-(29,4) = "case" │ └── end_keyword_loc: (31,0)-(31,3) = "end" ├── @ CaseMatchNode (location: (33,0)-(35,3)) @@ -321,7 +321,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (34,0)-(34,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (33,0)-(33,4) = "case" │ └── end_keyword_loc: (35,0)-(35,3) = "end" ├── @ CaseMatchNode (location: (37,0)-(39,3)) @@ -348,7 +348,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (38,0)-(38,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (37,0)-(37,4) = "case" │ └── end_keyword_loc: (39,0)-(39,3) = "end" ├── @ CaseMatchNode (location: (41,0)-(43,3)) @@ -378,7 +378,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (42,0)-(42,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (41,0)-(41,4) = "case" │ └── end_keyword_loc: (43,0)-(43,3) = "end" ├── @ CaseMatchNode (location: (45,0)-(47,3)) @@ -403,7 +403,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (46,0)-(46,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (45,0)-(45,4) = "case" │ └── end_keyword_loc: (47,0)-(47,3) = "end" ├── @ CaseMatchNode (location: (49,0)-(51,3)) @@ -450,7 +450,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (50,0)-(50,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (49,0)-(49,4) = "case" │ └── end_keyword_loc: (51,0)-(51,3) = "end" ├── @ CaseMatchNode (location: (53,0)-(55,3)) @@ -497,7 +497,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (54,0)-(54,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (53,0)-(53,4) = "case" │ └── end_keyword_loc: (55,0)-(55,3) = "end" ├── @ CaseMatchNode (location: (57,0)-(59,3)) @@ -527,7 +527,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (58,0)-(58,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (57,0)-(57,4) = "case" │ └── end_keyword_loc: (59,0)-(59,3) = "end" ├── @ CaseMatchNode (location: (61,0)-(63,3)) @@ -577,7 +577,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (62,0)-(62,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (61,0)-(61,4) = "case" │ └── end_keyword_loc: (63,0)-(63,3) = "end" ├── @ CaseMatchNode (location: (65,0)-(67,3)) @@ -627,7 +627,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (66,0)-(66,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (65,0)-(65,4) = "case" │ └── end_keyword_loc: (67,0)-(67,3) = "end" ├── @ CaseMatchNode (location: (69,0)-(71,3)) @@ -689,7 +689,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (70,0)-(70,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (69,0)-(69,4) = "case" │ └── end_keyword_loc: (71,0)-(71,3) = "end" ├── @ CaseMatchNode (location: (73,0)-(75,3)) @@ -754,7 +754,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (74,0)-(74,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (73,0)-(73,4) = "case" │ └── end_keyword_loc: (75,0)-(75,3) = "end" ├── @ CaseMatchNode (location: (77,0)-(79,3)) @@ -791,7 +791,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (78,0)-(78,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (77,0)-(77,4) = "case" │ └── end_keyword_loc: (79,0)-(79,3) = "end" ├── @ CaseMatchNode (location: (81,0)-(83,3)) @@ -858,7 +858,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (82,0)-(82,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (81,0)-(81,4) = "case" │ └── end_keyword_loc: (83,0)-(83,3) = "end" ├── @ CaseMatchNode (location: (85,0)-(87,3)) @@ -885,7 +885,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (86,0)-(86,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (85,0)-(85,4) = "case" │ └── end_keyword_loc: (87,0)-(87,3) = "end" ├── @ CaseMatchNode (location: (89,0)-(91,3)) @@ -928,7 +928,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (90,0)-(90,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (89,0)-(89,4) = "case" │ └── end_keyword_loc: (91,0)-(91,3) = "end" ├── @ CaseMatchNode (location: (93,0)-(95,3)) @@ -976,7 +976,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (94,0)-(94,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (93,0)-(93,4) = "case" │ └── end_keyword_loc: (95,0)-(95,3) = "end" ├── @ CaseMatchNode (location: (97,0)-(99,3)) @@ -1001,7 +1001,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (98,0)-(98,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (97,0)-(97,4) = "case" │ └── end_keyword_loc: (99,0)-(99,3) = "end" ├── @ CaseMatchNode (location: (101,0)-(103,3)) @@ -1034,7 +1034,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (102,0)-(102,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (101,0)-(101,4) = "case" │ └── end_keyword_loc: (103,0)-(103,3) = "end" ├── @ CaseMatchNode (location: (105,0)-(107,3)) @@ -1078,7 +1078,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (106,0)-(106,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (105,0)-(105,4) = "case" │ └── end_keyword_loc: (107,0)-(107,3) = "end" └── @ CaseMatchNode (location: (109,0)-(111,3)) @@ -1104,6 +1104,6 @@ │ ├── statements: ∅ │ ├── in_loc: (110,0)-(110,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (109,0)-(109,4) = "case" └── end_keyword_loc: (111,0)-(111,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_31.txt b/test/prism/snapshots/seattlerb/case_in_31.txt index f2bb9dac287..4abddbcdced 100644 --- a/test/prism/snapshots/seattlerb/case_in_31.txt +++ b/test/prism/snapshots/seattlerb/case_in_31.txt @@ -52,6 +52,6 @@ │ │ └── unescaped: "d" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_37.txt b/test/prism/snapshots/seattlerb/case_in_37.txt index 9083ac2d419..5ef6d916af5 100644 --- a/test/prism/snapshots/seattlerb/case_in_37.txt +++ b/test/prism/snapshots/seattlerb/case_in_37.txt @@ -63,6 +63,6 @@ │ │ └── unescaped: "c" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_42.txt b/test/prism/snapshots/seattlerb/case_in_42.txt index a498fa63b02..9c6d21c68ef 100644 --- a/test/prism/snapshots/seattlerb/case_in_42.txt +++ b/test/prism/snapshots/seattlerb/case_in_42.txt @@ -48,6 +48,6 @@ │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,10)-(2,14) = "then" - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_42_2.txt b/test/prism/snapshots/seattlerb/case_in_42_2.txt index 909874bc0c5..e16df21fa27 100644 --- a/test/prism/snapshots/seattlerb/case_in_42_2.txt +++ b/test/prism/snapshots/seattlerb/case_in_42_2.txt @@ -45,6 +45,6 @@ │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,12)-(2,16) = "then" - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_47.txt b/test/prism/snapshots/seattlerb/case_in_47.txt index fdc31f3bba2..ee11204f615 100644 --- a/test/prism/snapshots/seattlerb/case_in_47.txt +++ b/test/prism/snapshots/seattlerb/case_in_47.txt @@ -54,6 +54,6 @@ │ │ └── unescaped: "d" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_67.txt b/test/prism/snapshots/seattlerb/case_in_67.txt index 372b8fe221a..103277a39d9 100644 --- a/test/prism/snapshots/seattlerb/case_in_67.txt +++ b/test/prism/snapshots/seattlerb/case_in_67.txt @@ -34,6 +34,6 @@ │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,7)-(2,11) = "then" - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_86.txt b/test/prism/snapshots/seattlerb/case_in_86.txt index 2cb5dd6867c..b163ae64e4f 100644 --- a/test/prism/snapshots/seattlerb/case_in_86.txt +++ b/test/prism/snapshots/seattlerb/case_in_86.txt @@ -55,6 +55,6 @@ │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,17)-(2,21) = "then" - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_86_2.txt b/test/prism/snapshots/seattlerb/case_in_86_2.txt index f02387c52d3..bf6b2ff53da 100644 --- a/test/prism/snapshots/seattlerb/case_in_86_2.txt +++ b/test/prism/snapshots/seattlerb/case_in_86_2.txt @@ -55,6 +55,6 @@ │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,17)-(2,21) = "then" - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_array_pat_const.txt b/test/prism/snapshots/seattlerb/case_in_array_pat_const.txt index 64684df2035..c0aae6a723b 100644 --- a/test/prism/snapshots/seattlerb/case_in_array_pat_const.txt +++ b/test/prism/snapshots/seattlerb/case_in_array_pat_const.txt @@ -45,6 +45,6 @@ │ │ └── unescaped: "d" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_array_pat_const2.txt b/test/prism/snapshots/seattlerb/case_in_array_pat_const2.txt index 6a14e0271a6..7739dde6287 100644 --- a/test/prism/snapshots/seattlerb/case_in_array_pat_const2.txt +++ b/test/prism/snapshots/seattlerb/case_in_array_pat_const2.txt @@ -51,6 +51,6 @@ │ │ └── unescaped: "e" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_array_pat_paren_assign.txt b/test/prism/snapshots/seattlerb/case_in_array_pat_paren_assign.txt index 9d617078fda..e34cac73c4e 100644 --- a/test/prism/snapshots/seattlerb/case_in_array_pat_paren_assign.txt +++ b/test/prism/snapshots/seattlerb/case_in_array_pat_paren_assign.txt @@ -53,6 +53,6 @@ │ │ └── unescaped: "d" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_const.txt b/test/prism/snapshots/seattlerb/case_in_const.txt index 73f681c7dcd..49097d26dfd 100644 --- a/test/prism/snapshots/seattlerb/case_in_const.txt +++ b/test/prism/snapshots/seattlerb/case_in_const.txt @@ -30,6 +30,6 @@ │ │ └── unescaped: "b" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_else.txt b/test/prism/snapshots/seattlerb/case_in_else.txt index 0ad3935ce8d..e0cdf5125c0 100644 --- a/test/prism/snapshots/seattlerb/case_in_else.txt +++ b/test/prism/snapshots/seattlerb/case_in_else.txt @@ -30,7 +30,7 @@ │ │ └── unescaped: "b" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: + ├── else_clause: │ @ ElseNode (location: (4,0)-(6,3)) │ ├── flags: ∅ │ ├── else_keyword_loc: (4,0)-(4,4) = "else" diff --git a/test/prism/snapshots/seattlerb/case_in_find.txt b/test/prism/snapshots/seattlerb/case_in_find.txt index 79d737afa7e..c6337d7c850 100644 --- a/test/prism/snapshots/seattlerb/case_in_find.txt +++ b/test/prism/snapshots/seattlerb/case_in_find.txt @@ -51,6 +51,6 @@ │ ├── statements: ∅ │ ├── in_loc: (2,2)-(2,4) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_find_array.txt b/test/prism/snapshots/seattlerb/case_in_find_array.txt index b874867062d..986925904f4 100644 --- a/test/prism/snapshots/seattlerb/case_in_find_array.txt +++ b/test/prism/snapshots/seattlerb/case_in_find_array.txt @@ -47,6 +47,6 @@ │ ├── statements: ∅ │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat.txt index 3a106e973a8..e3f62d026e7 100644 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat.txt +++ b/test/prism/snapshots/seattlerb/case_in_hash_pat.txt @@ -71,6 +71,6 @@ │ │ └── unescaped: "f" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,22)-(2,26) = "then" - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_assign.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_assign.txt index 8494b710254..483c9326809 100644 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_assign.txt +++ b/test/prism/snapshots/seattlerb/case_in_hash_pat_assign.txt @@ -95,6 +95,6 @@ │ │ └── unescaped: "g" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,35)-(2,39) = "then" - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_assign.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_assign.txt index c2995013dd5..b6e809326a1 100644 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_assign.txt +++ b/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_assign.txt @@ -54,6 +54,6 @@ │ │ └── unescaped: "d" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_true.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_true.txt index 07f1d543395..a5440210308 100644 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_true.txt +++ b/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_true.txt @@ -50,6 +50,6 @@ │ │ └── unescaped: "c" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,11)-(2,15) = "then" - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_rest.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_rest.txt index 42e6b3f2a5e..71f7e126bc1 100644 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_rest.txt +++ b/test/prism/snapshots/seattlerb/case_in_hash_pat_rest.txt @@ -60,6 +60,6 @@ │ │ └── unescaped: "d" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,16)-(2,20) = "then" - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_rest_solo.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_rest_solo.txt index d69ff63b9d4..01b324e086c 100644 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_rest_solo.txt +++ b/test/prism/snapshots/seattlerb/case_in_hash_pat_rest_solo.txt @@ -45,6 +45,6 @@ │ │ └── unescaped: "d" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: (2,10)-(2,14) = "then" - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_if_unless_post_mod.txt b/test/prism/snapshots/seattlerb/case_in_if_unless_post_mod.txt index 14ac0267907..3da03ffbc3f 100644 --- a/test/prism/snapshots/seattlerb/case_in_if_unless_post_mod.txt +++ b/test/prism/snapshots/seattlerb/case_in_if_unless_post_mod.txt @@ -32,7 +32,7 @@ │ │ │ │ └── @ ConstantReadNode (location: (2,3)-(2,4)) │ │ │ │ ├── flags: newline │ │ │ │ └── name: :A - │ │ │ ├── consequent: ∅ + │ │ │ ├── subsequent: ∅ │ │ │ └── end_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (3,2)-(3,4)) @@ -63,7 +63,7 @@ │ │ │ └── @ ConstantReadNode (location: (4,3)-(4,4)) │ │ │ ├── flags: newline │ │ │ └── name: :D - │ │ ├── consequent: ∅ + │ │ ├── else_clause: ∅ │ │ └── end_keyword_loc: ∅ │ ├── statements: │ │ @ StatementsNode (location: (5,2)-(5,4)) @@ -77,6 +77,6 @@ │ │ └── unescaped: "E" │ ├── in_loc: (4,0)-(4,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (6,0)-(6,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_multiple.txt b/test/prism/snapshots/seattlerb/case_in_multiple.txt index d0d790bdb54..173136fc6fb 100644 --- a/test/prism/snapshots/seattlerb/case_in_multiple.txt +++ b/test/prism/snapshots/seattlerb/case_in_multiple.txt @@ -63,6 +63,6 @@ │ │ └── unescaped: "F" │ ├── in_loc: (4,0)-(4,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (6,0)-(6,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_or.txt b/test/prism/snapshots/seattlerb/case_in_or.txt index 9787f5c1ed4..7bcf50293d1 100644 --- a/test/prism/snapshots/seattlerb/case_in_or.txt +++ b/test/prism/snapshots/seattlerb/case_in_or.txt @@ -41,6 +41,6 @@ │ │ └── unescaped: "d" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/cond_unary_minus.txt b/test/prism/snapshots/seattlerb/cond_unary_minus.txt index bf82ac46967..69a998475e5 100644 --- a/test/prism/snapshots/seattlerb/cond_unary_minus.txt +++ b/test/prism/snapshots/seattlerb/cond_unary_minus.txt @@ -14,5 +14,5 @@ │ └── value: -1 ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (1,7)-(1,10) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt b/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt index cc3856aad33..d6cfba773d6 100644 --- a/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt +++ b/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt @@ -61,7 +61,7 @@ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ NilNode (location: (4,2)-(4,5)) │ │ │ │ └── flags: newline, static_literal - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (5,0)-(5,3) = "end" diff --git a/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt b/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt index 2bf97c29175..985744d45e9 100644 --- a/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt +++ b/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt @@ -63,7 +63,7 @@ │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ NilNode (location: (4,2)-(4,5)) │ │ │ │ └── flags: newline, static_literal - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (5,0)-(5,3) = "end" diff --git a/test/prism/snapshots/seattlerb/difficult1_line_numbers.txt b/test/prism/snapshots/seattlerb/difficult1_line_numbers.txt index daf2f413bf1..c34579e6ac8 100644 --- a/test/prism/snapshots/seattlerb/difficult1_line_numbers.txt +++ b/test/prism/snapshots/seattlerb/difficult1_line_numbers.txt @@ -268,5 +268,5 @@ │ │ └── value: 7 │ ├── closing_loc: (11,10)-(11,11) = ")" │ └── block: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (12,0)-(12,3) = "end" diff --git a/test/prism/snapshots/seattlerb/difficult1_line_numbers2.txt b/test/prism/snapshots/seattlerb/difficult1_line_numbers2.txt index 480e51c2591..ae710f997f3 100644 --- a/test/prism/snapshots/seattlerb/difficult1_line_numbers2.txt +++ b/test/prism/snapshots/seattlerb/difficult1_line_numbers2.txt @@ -72,7 +72,7 @@ │ │ │ ├── flags: static_literal, decimal │ │ │ └── value: 1 │ │ └── operator_loc: (5,4)-(5,5) = "=" - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (6,0)-(6,3) = "end" └── @ CallNode (location: (7,0)-(7,1)) ├── flags: newline, variable_call, ignore_visibility diff --git a/test/prism/snapshots/seattlerb/difficult2_.txt b/test/prism/snapshots/seattlerb/difficult2_.txt index 2ffeda15260..2a7e8e49d0f 100644 --- a/test/prism/snapshots/seattlerb/difficult2_.txt +++ b/test/prism/snapshots/seattlerb/difficult2_.txt @@ -36,7 +36,7 @@ │ │ │ └── unescaped: "" │ │ ├── closing_loc: (1,8)-(1,9) = ")" │ │ └── block: ∅ - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (1,10)-(1,13)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (1,10)-(1,11) = ":" diff --git a/test/prism/snapshots/seattlerb/difficult3_4.txt b/test/prism/snapshots/seattlerb/difficult3_4.txt index 8d84f2d4c3d..b733c42265e 100644 --- a/test/prism/snapshots/seattlerb/difficult3_4.txt +++ b/test/prism/snapshots/seattlerb/difficult3_4.txt @@ -32,7 +32,7 @@ │ │ └── body: (length: 1) │ │ └── @ TrueNode (location: (1,6)-(1,10)) │ │ └── flags: newline, static_literal - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (1,10)-(1,17)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (1,10)-(1,11) = ":" diff --git a/test/prism/snapshots/seattlerb/difficult7_.txt b/test/prism/snapshots/seattlerb/difficult7_.txt index 06357988484..2cf03ce57e6 100644 --- a/test/prism/snapshots/seattlerb/difficult7_.txt +++ b/test/prism/snapshots/seattlerb/difficult7_.txt @@ -66,7 +66,7 @@ │ │ │ │ │ ├── arguments: ∅ │ │ │ │ │ ├── closing_loc: (2,26)-(2,27) = ")" │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── consequent: + │ │ │ │ ├── subsequent: │ │ │ │ │ @ ElseNode (location: (2,28)-(2,31)) │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ ├── else_keyword_loc: (2,28)-(2,29) = ":" diff --git a/test/prism/snapshots/seattlerb/flip2_env_lvar.txt b/test/prism/snapshots/seattlerb/flip2_env_lvar.txt index 8950bbf0876..def6ffaf3a7 100644 --- a/test/prism/snapshots/seattlerb/flip2_env_lvar.txt +++ b/test/prism/snapshots/seattlerb/flip2_env_lvar.txt @@ -36,5 +36,5 @@ │ └── operator_loc: (1,4)-(1,6) = ".." ├── then_keyword_loc: (1,8)-(1,12) = "then" ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (1,13)-(1,16) = "end" diff --git a/test/prism/snapshots/seattlerb/float_with_if_modifier.txt b/test/prism/snapshots/seattlerb/float_with_if_modifier.txt index aab855944c0..400c90b17cb 100644 --- a/test/prism/snapshots/seattlerb/float_with_if_modifier.txt +++ b/test/prism/snapshots/seattlerb/float_with_if_modifier.txt @@ -19,5 +19,5 @@ │ └── @ FloatNode (location: (1,0)-(1,3)) │ ├── flags: newline, static_literal │ └── value: 1.0 - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/if_elsif.txt b/test/prism/snapshots/seattlerb/if_elsif.txt index a3febd97a53..2ac975a5483 100644 --- a/test/prism/snapshots/seattlerb/if_elsif.txt +++ b/test/prism/snapshots/seattlerb/if_elsif.txt @@ -14,7 +14,7 @@ │ └── value: 1 ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: + ├── subsequent: │ @ IfNode (location: (1,6)-(1,18)) │ ├── flags: newline │ ├── if_keyword_loc: (1,6)-(1,11) = "elsif" @@ -24,6 +24,6 @@ │ │ └── value: 2 │ ├── then_keyword_loc: ∅ │ ├── statements: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (1,15)-(1,18) = "end" └── end_keyword_loc: (1,15)-(1,18) = "end" diff --git a/test/prism/snapshots/seattlerb/if_symbol.txt b/test/prism/snapshots/seattlerb/if_symbol.txt index 1a0be527e55..d1680869f1a 100644 --- a/test/prism/snapshots/seattlerb/if_symbol.txt +++ b/test/prism/snapshots/seattlerb/if_symbol.txt @@ -30,5 +30,5 @@ │ └── block: ∅ ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (1,9)-(1,12) = "end" diff --git a/test/prism/snapshots/seattlerb/integer_with_if_modifier.txt b/test/prism/snapshots/seattlerb/integer_with_if_modifier.txt index 18a607cd103..3034a9ad0fa 100644 --- a/test/prism/snapshots/seattlerb/integer_with_if_modifier.txt +++ b/test/prism/snapshots/seattlerb/integer_with_if_modifier.txt @@ -19,5 +19,5 @@ │ └── @ IntegerNode (location: (1,0)-(1,5)) │ ├── flags: newline, static_literal, decimal │ └── value: 1234 - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/parse_if_not_canonical.txt b/test/prism/snapshots/seattlerb/parse_if_not_canonical.txt index bc078210905..23cc1f79299 100644 --- a/test/prism/snapshots/seattlerb/parse_if_not_canonical.txt +++ b/test/prism/snapshots/seattlerb/parse_if_not_canonical.txt @@ -50,7 +50,7 @@ │ ├── content_loc: (1,22)-(1,25) = "foo" │ ├── closing_loc: (1,25)-(1,26) = "'" │ └── unescaped: "foo" - ├── consequent: + ├── subsequent: │ @ ElseNode (location: (1,27)-(2,3)) │ ├── flags: ∅ │ ├── else_keyword_loc: (1,27)-(1,31) = "else" diff --git a/test/prism/snapshots/seattlerb/parse_if_not_noncanonical.txt b/test/prism/snapshots/seattlerb/parse_if_not_noncanonical.txt index bc078210905..23cc1f79299 100644 --- a/test/prism/snapshots/seattlerb/parse_if_not_noncanonical.txt +++ b/test/prism/snapshots/seattlerb/parse_if_not_noncanonical.txt @@ -50,7 +50,7 @@ │ ├── content_loc: (1,22)-(1,25) = "foo" │ ├── closing_loc: (1,25)-(1,26) = "'" │ └── unescaped: "foo" - ├── consequent: + ├── subsequent: │ @ ElseNode (location: (1,27)-(2,3)) │ ├── flags: ∅ │ ├── else_keyword_loc: (1,27)-(1,31) = "else" diff --git a/test/prism/snapshots/seattlerb/parse_line_rescue.txt b/test/prism/snapshots/seattlerb/parse_line_rescue.txt index ba988f98dc1..5e296f179df 100644 --- a/test/prism/snapshots/seattlerb/parse_line_rescue.txt +++ b/test/prism/snapshots/seattlerb/parse_line_rescue.txt @@ -43,7 +43,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ └── consequent: + │ └── subsequent: │ @ RescueNode (location: (5,0)-(6,3)) │ ├── flags: ∅ │ ├── keyword_loc: (5,0)-(5,6) = "rescue" @@ -64,7 +64,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: ∅ ├── ensure_clause: ∅ └── end_keyword_loc: (7,0)-(7,3) = "end" diff --git a/test/prism/snapshots/seattlerb/parse_line_return.txt b/test/prism/snapshots/seattlerb/parse_line_return.txt index 14d18e71d3c..e0c0dffc88b 100644 --- a/test/prism/snapshots/seattlerb/parse_line_return.txt +++ b/test/prism/snapshots/seattlerb/parse_line_return.txt @@ -36,7 +36,7 @@ │ │ └── @ IntegerNode (location: (3,17)-(3,19)) │ │ ├── flags: static_literal, decimal │ │ └── value: 42 - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (4,8)-(4,11) = "end" ├── locals: [] ├── def_keyword_loc: (1,6)-(1,9) = "def" diff --git a/test/prism/snapshots/seattlerb/parse_pattern_019.txt b/test/prism/snapshots/seattlerb/parse_pattern_019.txt index 1c289f46f5c..2c491f5b08e 100644 --- a/test/prism/snapshots/seattlerb/parse_pattern_019.txt +++ b/test/prism/snapshots/seattlerb/parse_pattern_019.txt @@ -34,6 +34,6 @@ │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/parse_pattern_044.txt b/test/prism/snapshots/seattlerb/parse_pattern_044.txt index 543b1de572c..0aca275aa01 100644 --- a/test/prism/snapshots/seattlerb/parse_pattern_044.txt +++ b/test/prism/snapshots/seattlerb/parse_pattern_044.txt @@ -41,6 +41,6 @@ │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/parse_pattern_051.txt b/test/prism/snapshots/seattlerb/parse_pattern_051.txt index b6dd2bc6b25..4bf6a890e73 100644 --- a/test/prism/snapshots/seattlerb/parse_pattern_051.txt +++ b/test/prism/snapshots/seattlerb/parse_pattern_051.txt @@ -50,6 +50,6 @@ │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/parse_pattern_058.txt b/test/prism/snapshots/seattlerb/parse_pattern_058.txt index e297033baa4..9ca66d88f63 100644 --- a/test/prism/snapshots/seattlerb/parse_pattern_058.txt +++ b/test/prism/snapshots/seattlerb/parse_pattern_058.txt @@ -83,6 +83,6 @@ │ │ └── closing_loc: (3,10)-(3,11) = "]" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/parse_pattern_058_2.txt b/test/prism/snapshots/seattlerb/parse_pattern_058_2.txt index 73c211e623b..b72cefb0967 100644 --- a/test/prism/snapshots/seattlerb/parse_pattern_058_2.txt +++ b/test/prism/snapshots/seattlerb/parse_pattern_058_2.txt @@ -75,6 +75,6 @@ │ │ └── closing_loc: (3,4)-(3,5) = "]" │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/parse_pattern_069.txt b/test/prism/snapshots/seattlerb/parse_pattern_069.txt index b11d05f81b4..fee569a90b1 100644 --- a/test/prism/snapshots/seattlerb/parse_pattern_069.txt +++ b/test/prism/snapshots/seattlerb/parse_pattern_069.txt @@ -51,6 +51,6 @@ │ │ └── value: 1 │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/parse_pattern_076.txt b/test/prism/snapshots/seattlerb/parse_pattern_076.txt index 4bb810e7db0..368bb94f367 100644 --- a/test/prism/snapshots/seattlerb/parse_pattern_076.txt +++ b/test/prism/snapshots/seattlerb/parse_pattern_076.txt @@ -64,6 +64,6 @@ │ │ └── flags: newline, static_literal │ ├── in_loc: (2,0)-(2,2) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/rescue_do_end_no_raise.txt b/test/prism/snapshots/seattlerb/rescue_do_end_no_raise.txt index 8264ba6dcba..769ee2536c4 100644 --- a/test/prism/snapshots/seattlerb/rescue_do_end_no_raise.txt +++ b/test/prism/snapshots/seattlerb/rescue_do_end_no_raise.txt @@ -50,7 +50,7 @@ │ │ │ ├── value_loc: (4,3)-(4,9) = "rescue" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "rescue" - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: │ │ @ ElseNode (location: (5,0)-(7,6)) │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/rescue_do_end_rescued.txt b/test/prism/snapshots/seattlerb/rescue_do_end_rescued.txt index d08c4dfe3cc..86554b49306 100644 --- a/test/prism/snapshots/seattlerb/rescue_do_end_rescued.txt +++ b/test/prism/snapshots/seattlerb/rescue_do_end_rescued.txt @@ -54,7 +54,7 @@ │ │ │ ├── value_loc: (4,3)-(4,9) = "rescue" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "rescue" - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: │ │ @ ElseNode (location: (5,0)-(7,6)) │ │ ├── flags: ∅ diff --git a/test/prism/snapshots/seattlerb/rescue_in_block.txt b/test/prism/snapshots/seattlerb/rescue_in_block.txt index 0ee5868878c..5ec6a6ae7ac 100644 --- a/test/prism/snapshots/seattlerb/rescue_in_block.txt +++ b/test/prism/snapshots/seattlerb/rescue_in_block.txt @@ -45,7 +45,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/str_interp_ternary_or_label.txt b/test/prism/snapshots/seattlerb/str_interp_ternary_or_label.txt index af2fd616441..8161109337c 100644 --- a/test/prism/snapshots/seattlerb/str_interp_ternary_or_label.txt +++ b/test/prism/snapshots/seattlerb/str_interp_ternary_or_label.txt @@ -93,7 +93,7 @@ │ │ │ │ └── unescaped: "" │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ ├── consequent: + │ │ ├── subsequent: │ │ │ @ ElseNode (location: (1,17)-(1,21)) │ │ │ ├── flags: ∅ │ │ │ ├── else_keyword_loc: (1,17)-(1,18) = ":" diff --git a/test/prism/snapshots/seattlerb/when_splat.txt b/test/prism/snapshots/seattlerb/when_splat.txt index 60b504dedbd..6df6e773977 100644 --- a/test/prism/snapshots/seattlerb/when_splat.txt +++ b/test/prism/snapshots/seattlerb/when_splat.txt @@ -39,6 +39,6 @@ │ │ └── block: ∅ │ ├── then_keyword_loc: (1,16)-(1,20) = "then" │ └── statements: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (1,22)-(1,25) = "end" diff --git a/test/prism/snapshots/ternary_operator.txt b/test/prism/snapshots/ternary_operator.txt index 76debe3fa74..4d6a7423f92 100644 --- a/test/prism/snapshots/ternary_operator.txt +++ b/test/prism/snapshots/ternary_operator.txt @@ -34,7 +34,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (1,6)-(1,9)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (1,6)-(1,7) = ":" @@ -89,7 +89,7 @@ │ │ │ └── block: ∅ │ │ ├── rparen_loc: ∅ │ │ └── keyword_loc: (3,4)-(3,12) = "defined?" - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (3,15)-(3,27)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (3,15)-(3,16) = ":" @@ -136,7 +136,7 @@ │ │ └── body: (length: 1) │ │ └── @ TrueNode (location: (5,7)-(5,11)) │ │ └── flags: newline, static_literal - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (5,11)-(5,15)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (5,11)-(5,12) = ":" @@ -169,7 +169,7 @@ │ │ └── body: (length: 1) │ │ └── @ FalseNode (location: (7,7)-(7,12)) │ │ └── flags: newline, static_literal - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (7,12)-(7,16)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (7,12)-(7,13) = ":" @@ -202,7 +202,7 @@ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (9,7)-(9,10)) │ │ └── flags: newline, static_literal - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (9,10)-(9,14)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (9,10)-(9,11) = ":" @@ -235,7 +235,7 @@ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (11,3)-(11,6)) │ │ └── flags: newline, static_literal - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (11,6)-(11,10)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (11,6)-(11,7) = ":" @@ -276,7 +276,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (13,8)-(13,14)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (13,8)-(13,9) = ":" @@ -325,7 +325,7 @@ │ │ ├── flags: static_literal, decimal │ │ └── value: 2 │ └── operator_loc: (15,8)-(15,9) = "=" - ├── consequent: + ├── subsequent: │ @ ElseNode (location: (15,10)-(15,12)) │ ├── flags: ∅ │ ├── else_keyword_loc: (15,10)-(15,11) = ":" diff --git a/test/prism/snapshots/unless.txt b/test/prism/snapshots/unless.txt index 130c0bb2b86..9e62b0c0a96 100644 --- a/test/prism/snapshots/unless.txt +++ b/test/prism/snapshots/unless.txt @@ -19,7 +19,7 @@ │ │ └── @ IntegerNode (location: (1,13)-(1,14)) │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ └── end_keyword_loc: (1,16)-(1,19) = "end" ├── @ UnlessNode (location: (3,0)-(4,12)) │ ├── flags: newline @@ -35,7 +35,7 @@ │ │ └── @ IntegerNode (location: (4,0)-(4,1)) │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 - │ ├── consequent: + │ ├── else_clause: │ │ @ ElseNode (location: (4,2)-(4,12)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (4,2)-(4,6) = "else" @@ -62,7 +62,7 @@ │ │ └── @ IntegerNode (location: (6,0)-(6,1)) │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ └── end_keyword_loc: ∅ ├── @ CallNode (location: (8,0)-(8,25)) │ ├── flags: newline, ignore_visibility @@ -97,7 +97,7 @@ │ │ │ ├── flags: newline │ │ │ ├── arguments: ∅ │ │ │ └── keyword_loc: (8,6)-(8,11) = "break" - │ │ ├── consequent: ∅ + │ │ ├── else_clause: ∅ │ │ └── end_keyword_loc: ∅ │ ├── opening_loc: (8,4)-(8,5) = "{" │ └── closing_loc: (8,24)-(8,25) = "}" @@ -134,7 +134,7 @@ │ │ │ ├── flags: newline │ │ │ ├── arguments: ∅ │ │ │ └── keyword_loc: (10,6)-(10,10) = "next" - │ │ ├── consequent: ∅ + │ │ ├── else_clause: ∅ │ │ └── end_keyword_loc: ∅ │ ├── opening_loc: (10,4)-(10,5) = "{" │ └── closing_loc: (10,23)-(10,24) = "}" @@ -153,7 +153,7 @@ │ │ ├── flags: newline │ │ ├── keyword_loc: (12,0)-(12,6) = "return" │ │ └── arguments: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ └── end_keyword_loc: ∅ └── @ UnlessNode (location: (14,0)-(14,22)) ├── flags: newline @@ -199,5 +199,5 @@ │ │ └── unescaped: "b" │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/block.txt b/test/prism/snapshots/unparser/corpus/literal/block.txt index 63cd76d683c..4320ede87b6 100644 --- a/test/prism/snapshots/unparser/corpus/literal/block.txt +++ b/test/prism/snapshots/unparser/corpus/literal/block.txt @@ -942,7 +942,7 @@ │ │ │ │ ├── name: :e │ │ │ │ └── depth: 0 │ │ │ ├── statements: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (51,0)-(51,3) = "end" @@ -1002,7 +1002,7 @@ │ │ │ │ ├── flags: newline │ │ │ │ ├── name: :bar │ │ │ │ └── depth: 0 - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (56,0)-(56,3) = "end" @@ -1078,7 +1078,7 @@ │ │ │ │ ├── arguments: ∅ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (61,0)-(61,3) = "end" @@ -1158,7 +1158,7 @@ │ │ │ │ ├── arguments: ∅ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (66,0)-(66,3) = "end" @@ -1231,7 +1231,7 @@ │ │ │ │ ├── arguments: ∅ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (71,0)-(71,3) = "end" @@ -1280,7 +1280,7 @@ │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (75,0)-(75,3) = "end" @@ -1326,7 +1326,7 @@ │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: │ │ │ @ ElseNode (location: (79,0)-(81,3)) │ │ │ ├── flags: ∅ @@ -1421,7 +1421,7 @@ │ │ │ │ ├── arguments: ∅ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (86,0)-(86,3) = "end" @@ -1484,7 +1484,7 @@ │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: │ │ │ @ EnsureNode (location: (92,0)-(93,3)) diff --git a/test/prism/snapshots/unparser/corpus/literal/case.txt b/test/prism/snapshots/unparser/corpus/literal/case.txt index f7b279dffcf..5e831cc6c3a 100644 --- a/test/prism/snapshots/unparser/corpus/literal/case.txt +++ b/test/prism/snapshots/unparser/corpus/literal/case.txt @@ -67,7 +67,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (1,0)-(1,4) = "case" │ └── end_keyword_loc: (6,0)-(6,3) = "end" ├── @ CaseNode (location: (7,0)-(11,3)) @@ -129,7 +129,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (7,0)-(7,4) = "case" │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ CaseNode (location: (12,0)-(17,3)) @@ -204,7 +204,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (12,0)-(12,4) = "case" │ └── end_keyword_loc: (17,0)-(17,3) = "end" ├── @ CaseNode (location: (18,0)-(21,3)) @@ -256,7 +256,7 @@ │ │ ├── value_loc: (20,3)-(20,8) = "other" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "other" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (18,0)-(18,4) = "case" │ └── end_keyword_loc: (21,0)-(21,3) = "end" ├── @ CaseNode (location: (22,0)-(25,3)) @@ -302,7 +302,7 @@ │ │ ├── value_loc: (24,3)-(24,8) = "value" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "value" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (22,0)-(22,4) = "case" │ └── end_keyword_loc: (25,0)-(25,3) = "end" ├── @ CaseNode (location: (26,0)-(31,3)) @@ -348,7 +348,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: + │ ├── else_clause: │ │ @ ElseNode (location: (29,0)-(31,3)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (29,0)-(29,4) = "else" @@ -422,7 +422,7 @@ │ │ │ └── block: ∅ │ │ ├── then_keyword_loc: ∅ │ │ └── statements: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (32,0)-(32,4) = "case" │ └── end_keyword_loc: (34,0)-(34,3) = "end" └── @ CaseNode (location: (35,0)-(37,3)) @@ -475,6 +475,6 @@ │ │ └── block: ∅ │ ├── then_keyword_loc: ∅ │ └── statements: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (35,0)-(35,4) = "case" └── end_keyword_loc: (37,0)-(37,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/def.txt b/test/prism/snapshots/unparser/corpus/literal/def.txt index 405c4f3fb84..d27977cbde6 100644 --- a/test/prism/snapshots/unparser/corpus/literal/def.txt +++ b/test/prism/snapshots/unparser/corpus/literal/def.txt @@ -50,7 +50,7 @@ │ │ │ │ ├── arguments: ∅ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: │ │ │ @ ElseNode (location: (5,0)-(7,6)) │ │ │ ├── flags: ∅ @@ -157,7 +157,7 @@ │ │ │ │ ├── arguments: ∅ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: │ │ │ @ ElseNode (location: (15,0)-(17,6)) │ │ │ ├── flags: ∅ @@ -321,7 +321,7 @@ │ │ │ │ ├── arguments: ∅ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: │ │ │ @ EnsureNode (location: (35,0)-(37,3)) @@ -448,7 +448,7 @@ │ │ │ │ ├── arguments: ∅ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (49,0)-(49,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/dstr.txt b/test/prism/snapshots/unparser/corpus/literal/dstr.txt index 3092360608f..64cb3ff1b20 100644 --- a/test/prism/snapshots/unparser/corpus/literal/dstr.txt +++ b/test/prism/snapshots/unparser/corpus/literal/dstr.txt @@ -32,7 +32,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a" │ │ └── closing_loc: (2,7)-(2,8) = "\"" - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" ├── @ IfNode (location: (4,0)-(11,3)) │ ├── flags: newline @@ -77,7 +77,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ InterpolatedStringNode (location: (12,0)-(12,10)) │ ├── flags: newline @@ -264,7 +264,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\n" │ │ └── closing_loc: (29,0)-(30,0) = " HEREDOC\n" - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (30,0)-(30,3) = "end" ├── @ CallNode (location: (31,0)-(31,15)) │ ├── flags: newline, ignore_visibility diff --git a/test/prism/snapshots/unparser/corpus/literal/flipflop.txt b/test/prism/snapshots/unparser/corpus/literal/flipflop.txt index 4c21f6c305d..418aa242cbe 100644 --- a/test/prism/snapshots/unparser/corpus/literal/flipflop.txt +++ b/test/prism/snapshots/unparser/corpus/literal/flipflop.txt @@ -105,7 +105,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" ├── @ IfNode (location: (4,0)-(6,3)) │ ├── flags: newline @@ -207,7 +207,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (6,0)-(6,3) = "end" ├── @ IfNode (location: (7,0)-(8,3)) │ ├── flags: newline @@ -230,7 +230,7 @@ │ │ └── operator_loc: (7,3)-(7,5) = ".." │ ├── then_keyword_loc: ∅ │ ├── statements: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (8,0)-(8,3) = "end" └── @ IfNode (location: (9,0)-(10,3)) ├── flags: newline @@ -253,5 +253,5 @@ │ └── operator_loc: (9,6)-(9,8) = ".." ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (10,0)-(10,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/if.txt b/test/prism/snapshots/unparser/corpus/literal/if.txt index f4a18c0c120..10240962c59 100644 --- a/test/prism/snapshots/unparser/corpus/literal/if.txt +++ b/test/prism/snapshots/unparser/corpus/literal/if.txt @@ -30,7 +30,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" ├── @ IfNode (location: (4,0)-(6,3)) │ ├── flags: newline @@ -47,7 +47,7 @@ │ │ └── @ IntegerNode (location: (5,2)-(5,3)) │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 9 - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (6,0)-(6,3) = "end" ├── @ IfNode (location: (7,0)-(11,3)) │ ├── flags: newline @@ -64,7 +64,7 @@ │ │ └── @ IntegerNode (location: (8,2)-(8,3)) │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 5 - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (9,0)-(11,3)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (9,0)-(9,4) = "else" @@ -91,7 +91,7 @@ │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (13,2)-(13,5)) │ │ └── flags: newline, static_literal - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ └── end_keyword_loc: (14,0)-(14,3) = "end" ├── @ UnlessNode (location: (15,0)-(17,3)) │ ├── flags: newline @@ -108,7 +108,7 @@ │ │ └── @ IntegerNode (location: (16,2)-(16,3)) │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 9 - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ └── end_keyword_loc: (17,0)-(17,3) = "end" ├── @ IfNode (location: (18,0)-(19,3)) │ ├── flags: newline @@ -126,7 +126,7 @@ │ │ └── block: ∅ │ ├── then_keyword_loc: ∅ │ ├── statements: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (19,0)-(19,3) = "end" ├── @ ModuleNode (location: (21,0)-(23,3)) │ ├── flags: newline @@ -170,7 +170,7 @@ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: ∅ │ │ │ └── operator_loc: (22,6)-(22,7) = "=" - │ │ ├── consequent: ∅ + │ │ ├── subsequent: ∅ │ │ └── end_keyword_loc: ∅ │ ├── end_keyword_loc: (23,0)-(23,3) = "end" │ └── name: :A @@ -216,7 +216,7 @@ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: ∅ │ │ │ └── operator_loc: (26,6)-(26,7) = "=" - │ │ ├── consequent: ∅ + │ │ ├── else_clause: ∅ │ │ └── end_keyword_loc: ∅ │ ├── end_keyword_loc: (27,0)-(27,3) = "end" │ └── name: :B @@ -256,7 +256,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── operator_loc: (29,6)-(29,7) = "=" - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ └── end_keyword_loc: (30,0)-(30,3) = "end" └── @ IfNode (location: (31,0)-(36,3)) ├── flags: newline @@ -326,5 +326,5 @@ │ ├── flags: newline │ ├── name: :foo │ └── depth: 0 - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (36,0)-(36,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/kwbegin.txt b/test/prism/snapshots/unparser/corpus/literal/kwbegin.txt index 068e20ad989..9c7febe206b 100644 --- a/test/prism/snapshots/unparser/corpus/literal/kwbegin.txt +++ b/test/prism/snapshots/unparser/corpus/literal/kwbegin.txt @@ -17,7 +17,7 @@ │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" @@ -93,7 +93,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (17,0)-(17,3) = "end" @@ -145,7 +145,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (24,0)-(24,3) = "end" @@ -164,7 +164,7 @@ │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (28,0)-(28,3) = "end" @@ -187,7 +187,7 @@ │ │ │ ├── name: :foo │ │ │ └── depth: 0 │ │ ├── statements: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (32,0)-(32,3) = "end" @@ -232,7 +232,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: + │ │ └── subsequent: │ │ @ RescueNode (location: (38,0)-(39,3)) │ │ ├── flags: ∅ │ │ ├── keyword_loc: (38,0)-(38,6) = "rescue" @@ -256,7 +256,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (40,0)-(42,3)) @@ -314,7 +314,7 @@ │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (49,2)-(49,5) = "end" @@ -349,7 +349,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (53,0)-(53,3) = "end" @@ -409,7 +409,7 @@ │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (58,0)-(58,3) = "end" @@ -443,7 +443,7 @@ │ │ │ ├── flags: newline │ │ │ ├── name: :bar │ │ │ └── depth: 0 - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (64,0)-(64,3) = "end" @@ -483,7 +483,7 @@ │ │ │ ├── flags: newline │ │ │ ├── name: :bar │ │ │ └── depth: 0 - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (70,0)-(70,3) = "end" @@ -534,7 +534,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (76,0)-(76,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/pattern.txt b/test/prism/snapshots/unparser/corpus/literal/pattern.txt index 7a542b26cf9..200837c4503 100644 --- a/test/prism/snapshots/unparser/corpus/literal/pattern.txt +++ b/test/prism/snapshots/unparser/corpus/literal/pattern.txt @@ -179,7 +179,7 @@ │ │ │ │ │ ├── rest: ∅ │ │ │ │ │ ├── opening_loc: (10,3)-(10,4) = "{" │ │ │ │ │ └── closing_loc: (10,4)-(10,5) = "}" - │ │ │ │ ├── consequent: ∅ + │ │ │ │ ├── subsequent: ∅ │ │ │ │ └── end_keyword_loc: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (11,2)-(11,6)) @@ -425,7 +425,7 @@ │ │ │ └── flags: newline, static_literal │ │ ├── in_loc: (29,0)-(29,2) = "in" │ │ └── then_loc: (29,5)-(29,9) = "then" - │ ├── consequent: + │ ├── else_clause: │ │ @ ElseNode (location: (31,0)-(33,3)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (31,0)-(31,4) = "else" @@ -486,7 +486,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (35,0)-(35,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (34,0)-(34,4) = "case" │ └── end_keyword_loc: (36,0)-(36,3) = "end" ├── @ CaseMatchNode (location: (37,0)-(40,3)) @@ -512,7 +512,7 @@ │ │ ├── statements: ∅ │ │ ├── in_loc: (38,0)-(38,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: + │ ├── else_clause: │ │ @ ElseNode (location: (39,0)-(40,3)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (39,0)-(39,4) = "else" diff --git a/test/prism/snapshots/unparser/corpus/literal/send.txt b/test/prism/snapshots/unparser/corpus/literal/send.txt index dc4d2be786b..9f9eeb13eee 100644 --- a/test/prism/snapshots/unparser/corpus/literal/send.txt +++ b/test/prism/snapshots/unparser/corpus/literal/send.txt @@ -158,7 +158,7 @@ │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (15,0)-(15,3) = "end" @@ -220,7 +220,7 @@ │ │ │ │ └── block: ∅ │ │ │ ├── then_keyword_loc: ∅ │ │ │ └── statements: ∅ - │ │ ├── consequent: ∅ + │ │ ├── else_clause: ∅ │ │ ├── case_keyword_loc: (16,0)-(16,4) = "case" │ │ └── end_keyword_loc: (19,0)-(19,3) = "end" │ ├── call_operator_loc: (19,3)-(19,4) = "." @@ -263,7 +263,7 @@ │ │ │ │ └── block: ∅ │ │ │ ├── then_keyword_loc: ∅ │ │ │ └── statements: ∅ - │ │ ├── consequent: ∅ + │ │ ├── else_clause: ∅ │ │ ├── case_keyword_loc: (20,0)-(20,4) = "case" │ │ └── end_keyword_loc: (22,0)-(22,3) = "end" │ ├── call_operator_loc: (22,3)-(22,4) = "." @@ -441,7 +441,7 @@ │ │ │ └── block: ∅ │ │ ├── then_keyword_loc: ∅ │ │ ├── statements: ∅ - │ │ ├── consequent: ∅ + │ │ ├── subsequent: ∅ │ │ └── end_keyword_loc: (36,0)-(36,3) = "end" │ ├── call_operator_loc: (36,3)-(36,4) = "." │ ├── name: :baz diff --git a/test/prism/snapshots/unparser/corpus/semantic/and.txt b/test/prism/snapshots/unparser/corpus/semantic/and.txt index 2a6fdcf2bc1..ad2b6397773 100644 --- a/test/prism/snapshots/unparser/corpus/semantic/and.txt +++ b/test/prism/snapshots/unparser/corpus/semantic/and.txt @@ -176,7 +176,7 @@ │ │ └── operator_loc: (4,9)-(4,11) = "or" │ ├── then_keyword_loc: ∅ │ ├── statements: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (5,0)-(5,3) = "end" └── @ IfNode (location: (7,0)-(8,3)) ├── flags: newline @@ -239,5 +239,5 @@ │ └── operator_loc: (7,9)-(7,12) = "and" ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (8,0)-(8,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/semantic/block.txt b/test/prism/snapshots/unparser/corpus/semantic/block.txt index c3b27b194ee..ea87b101ec0 100644 --- a/test/prism/snapshots/unparser/corpus/semantic/block.txt +++ b/test/prism/snapshots/unparser/corpus/semantic/block.txt @@ -49,7 +49,7 @@ │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: ∅ - │ │ │ └── consequent: ∅ + │ │ │ └── subsequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (6,0)-(6,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/semantic/dstr.txt b/test/prism/snapshots/unparser/corpus/semantic/dstr.txt index e1b647c744b..b1bfbefc8ba 100644 --- a/test/prism/snapshots/unparser/corpus/semantic/dstr.txt +++ b/test/prism/snapshots/unparser/corpus/semantic/dstr.txt @@ -262,7 +262,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\n" │ │ └── closing_loc: (80,0)-(81,0) = " DOC\n" - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (81,0)-(81,3) = "end" ├── @ IfNode (location: (83,0)-(87,3)) │ ├── flags: newline @@ -297,7 +297,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "\n" │ │ └── closing_loc: (86,0)-(87,0) = " DOC\n" - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (87,0)-(87,3) = "end" ├── @ IfNode (location: (89,0)-(93,3)) │ ├── flags: newline @@ -326,7 +326,7 @@ │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "a\n" │ │ └── closing_loc: (92,0)-(93,0) = " DOC\n" - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (93,0)-(93,3) = "end" ├── @ IfNode (location: (95,0)-(101,3)) │ ├── flags: newline @@ -345,7 +345,7 @@ │ │ ├── content_loc: (97,0)-(100,0) = " a\n\n b\n" │ │ ├── closing_loc: (100,0)-(101,0) = " DOC\n" │ │ └── unescaped: " a\n\n b\n" - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (101,0)-(101,3) = "end" ├── @ InterpolatedStringNode (location: (103,0)-(103,6)) │ ├── flags: newline diff --git a/test/prism/snapshots/unparser/corpus/semantic/kwbegin.txt b/test/prism/snapshots/unparser/corpus/semantic/kwbegin.txt index 93c2a9ace5f..bdd74f2ed52 100644 --- a/test/prism/snapshots/unparser/corpus/semantic/kwbegin.txt +++ b/test/prism/snapshots/unparser/corpus/semantic/kwbegin.txt @@ -17,7 +17,7 @@ │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (3,0)-(3,3) = "end" @@ -33,7 +33,7 @@ │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: │ │ @ ElseNode (location: (7,0)-(8,3)) │ │ ├── flags: ∅ @@ -101,7 +101,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (18,0)-(18,3) = "end" @@ -153,7 +153,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (25,0)-(25,3) = "end" @@ -172,7 +172,7 @@ │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: │ │ @ ElseNode (location: (29,0)-(30,3)) │ │ ├── flags: ∅ @@ -196,7 +196,7 @@ │ │ ├── operator_loc: ∅ │ │ ├── reference: ∅ │ │ ├── statements: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: │ │ @ ElseNode (location: (32,17)-(32,26)) │ │ ├── flags: ∅ @@ -246,7 +246,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ └── consequent: + │ └── subsequent: │ @ RescueNode (location: (38,0)-(39,3)) │ ├── flags: ∅ │ ├── keyword_loc: (38,0)-(38,6) = "rescue" @@ -270,7 +270,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: ∅ ├── ensure_clause: │ @ EnsureNode (location: (40,0)-(42,3)) diff --git a/test/prism/snapshots/whitequark/ambiuous_quoted_label_in_ternary_operator.txt b/test/prism/snapshots/whitequark/ambiuous_quoted_label_in_ternary_operator.txt index 5406a2d2f18..7c2f8a2d964 100644 --- a/test/prism/snapshots/whitequark/ambiuous_quoted_label_in_ternary_operator.txt +++ b/test/prism/snapshots/whitequark/ambiuous_quoted_label_in_ternary_operator.txt @@ -53,7 +53,7 @@ │ │ └── unescaped: "" │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: + ├── subsequent: │ @ ElseNode (location: (1,10)-(1,15)) │ ├── flags: ∅ │ ├── else_keyword_loc: (1,10)-(1,11) = ":" diff --git a/test/prism/snapshots/whitequark/bug_rescue_empty_else.txt b/test/prism/snapshots/whitequark/bug_rescue_empty_else.txt index acf6e006b6a..05800005682 100644 --- a/test/prism/snapshots/whitequark/bug_rescue_empty_else.txt +++ b/test/prism/snapshots/whitequark/bug_rescue_empty_else.txt @@ -20,7 +20,7 @@ │ ├── operator_loc: ∅ │ ├── reference: ∅ │ ├── statements: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: │ @ ElseNode (location: (1,25)-(1,34)) │ ├── flags: ∅ diff --git a/test/prism/snapshots/whitequark/case_cond.txt b/test/prism/snapshots/whitequark/case_cond.txt index 38dcf68b134..2d9572b88bd 100644 --- a/test/prism/snapshots/whitequark/case_cond.txt +++ b/test/prism/snapshots/whitequark/case_cond.txt @@ -34,6 +34,6 @@ │ ├── content_loc: (1,17)-(1,20) = "foo" │ ├── closing_loc: (1,20)-(1,21) = "'" │ └── unescaped: "foo" - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (1,23)-(1,26) = "end" diff --git a/test/prism/snapshots/whitequark/case_cond_else.txt b/test/prism/snapshots/whitequark/case_cond_else.txt index 58a7bc55a3a..c2ed1fe4b72 100644 --- a/test/prism/snapshots/whitequark/case_cond_else.txt +++ b/test/prism/snapshots/whitequark/case_cond_else.txt @@ -34,7 +34,7 @@ │ ├── content_loc: (1,17)-(1,20) = "foo" │ ├── closing_loc: (1,20)-(1,21) = "'" │ └── unescaped: "foo" - ├── consequent: + ├── else_clause: │ @ ElseNode (location: (1,23)-(1,38)) │ ├── flags: ∅ │ ├── else_keyword_loc: (1,23)-(1,27) = "else" diff --git a/test/prism/snapshots/whitequark/case_expr.txt b/test/prism/snapshots/whitequark/case_expr.txt index b7a2fa0106c..60ab69444f1 100644 --- a/test/prism/snapshots/whitequark/case_expr.txt +++ b/test/prism/snapshots/whitequark/case_expr.txt @@ -44,6 +44,6 @@ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (1,27)-(1,30) = "end" diff --git a/test/prism/snapshots/whitequark/case_expr_else.txt b/test/prism/snapshots/whitequark/case_expr_else.txt index 8a61e076a3f..fe687a10311 100644 --- a/test/prism/snapshots/whitequark/case_expr_else.txt +++ b/test/prism/snapshots/whitequark/case_expr_else.txt @@ -44,7 +44,7 @@ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: + ├── else_clause: │ @ ElseNode (location: (1,27)-(1,40)) │ ├── flags: ∅ │ ├── else_keyword_loc: (1,27)-(1,31) = "else" diff --git a/test/prism/snapshots/whitequark/cond_begin.txt b/test/prism/snapshots/whitequark/cond_begin.txt index 692e4aba469..a25e62a1dc9 100644 --- a/test/prism/snapshots/whitequark/cond_begin.txt +++ b/test/prism/snapshots/whitequark/cond_begin.txt @@ -42,5 +42,5 @@ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (1,15)-(1,18) = "end" diff --git a/test/prism/snapshots/whitequark/cond_begin_masgn.txt b/test/prism/snapshots/whitequark/cond_begin_masgn.txt index fa81cd977f6..fa939e61a5a 100644 --- a/test/prism/snapshots/whitequark/cond_begin_masgn.txt +++ b/test/prism/snapshots/whitequark/cond_begin_masgn.txt @@ -56,5 +56,5 @@ │ └── closing_loc: (1,19)-(1,20) = ")" ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (1,22)-(1,25) = "end" diff --git a/test/prism/snapshots/whitequark/cond_eflipflop.txt b/test/prism/snapshots/whitequark/cond_eflipflop.txt index fb06302afb9..7474993f0b8 100644 --- a/test/prism/snapshots/whitequark/cond_eflipflop.txt +++ b/test/prism/snapshots/whitequark/cond_eflipflop.txt @@ -79,5 +79,5 @@ │ └── operator_loc: (3,6)-(3,9) = "..." ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (3,14)-(3,17) = "end" diff --git a/test/prism/snapshots/whitequark/cond_eflipflop_with_beginless_range.txt b/test/prism/snapshots/whitequark/cond_eflipflop_with_beginless_range.txt index 533752b6afb..f7ecd1aa6a1 100644 --- a/test/prism/snapshots/whitequark/cond_eflipflop_with_beginless_range.txt +++ b/test/prism/snapshots/whitequark/cond_eflipflop_with_beginless_range.txt @@ -26,5 +26,5 @@ │ └── operator_loc: (1,3)-(1,6) = "..." ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (1,11)-(1,14) = "end" diff --git a/test/prism/snapshots/whitequark/cond_eflipflop_with_endless_range.txt b/test/prism/snapshots/whitequark/cond_eflipflop_with_endless_range.txt index d850ce137ba..f94785895e3 100644 --- a/test/prism/snapshots/whitequark/cond_eflipflop_with_endless_range.txt +++ b/test/prism/snapshots/whitequark/cond_eflipflop_with_endless_range.txt @@ -26,5 +26,5 @@ │ └── operator_loc: (1,6)-(1,9) = "..." ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (1,11)-(1,14) = "end" diff --git a/test/prism/snapshots/whitequark/cond_iflipflop.txt b/test/prism/snapshots/whitequark/cond_iflipflop.txt index 19dbdf7dd4a..7f11d52d774 100644 --- a/test/prism/snapshots/whitequark/cond_iflipflop.txt +++ b/test/prism/snapshots/whitequark/cond_iflipflop.txt @@ -79,5 +79,5 @@ │ └── operator_loc: (3,6)-(3,8) = ".." ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (3,13)-(3,16) = "end" diff --git a/test/prism/snapshots/whitequark/cond_iflipflop_with_beginless_range.txt b/test/prism/snapshots/whitequark/cond_iflipflop_with_beginless_range.txt index 84f5a4b0b16..f0c949755a5 100644 --- a/test/prism/snapshots/whitequark/cond_iflipflop_with_beginless_range.txt +++ b/test/prism/snapshots/whitequark/cond_iflipflop_with_beginless_range.txt @@ -26,5 +26,5 @@ │ └── operator_loc: (1,3)-(1,5) = ".." ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (1,10)-(1,13) = "end" diff --git a/test/prism/snapshots/whitequark/cond_iflipflop_with_endless_range.txt b/test/prism/snapshots/whitequark/cond_iflipflop_with_endless_range.txt index 62e2564556e..11b0f89083b 100644 --- a/test/prism/snapshots/whitequark/cond_iflipflop_with_endless_range.txt +++ b/test/prism/snapshots/whitequark/cond_iflipflop_with_endless_range.txt @@ -26,5 +26,5 @@ │ └── operator_loc: (1,6)-(1,8) = ".." ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (1,10)-(1,13) = "end" diff --git a/test/prism/snapshots/whitequark/cond_match_current_line.txt b/test/prism/snapshots/whitequark/cond_match_current_line.txt index aa9f826a0cc..6694d733ce1 100644 --- a/test/prism/snapshots/whitequark/cond_match_current_line.txt +++ b/test/prism/snapshots/whitequark/cond_match_current_line.txt @@ -33,5 +33,5 @@ │ └── unescaped: "wat" ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (3,10)-(3,13) = "end" diff --git a/test/prism/snapshots/whitequark/hash_label_end.txt b/test/prism/snapshots/whitequark/hash_label_end.txt index 7714021dbb4..9e4accee004 100644 --- a/test/prism/snapshots/whitequark/hash_label_end.txt +++ b/test/prism/snapshots/whitequark/hash_label_end.txt @@ -41,7 +41,7 @@ │ │ │ ├── content_loc: (1,7)-(1,8) = "a" │ │ │ ├── closing_loc: (1,8)-(1,9) = "\"" │ │ │ └── unescaped: "a" - │ │ ├── consequent: + │ │ ├── subsequent: │ │ │ @ ElseNode (location: (1,9)-(1,11)) │ │ │ ├── flags: ∅ │ │ │ ├── else_keyword_loc: (1,9)-(1,10) = ":" diff --git a/test/prism/snapshots/whitequark/if.txt b/test/prism/snapshots/whitequark/if.txt index 69daec96f88..e381b29fb44 100644 --- a/test/prism/snapshots/whitequark/if.txt +++ b/test/prism/snapshots/whitequark/if.txt @@ -34,7 +34,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── subsequent: ∅ │ └── end_keyword_loc: (1,17)-(1,20) = "end" └── @ IfNode (location: (3,0)-(3,16)) ├── flags: newline @@ -65,5 +65,5 @@ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (3,13)-(3,16) = "end" diff --git a/test/prism/snapshots/whitequark/if_else.txt b/test/prism/snapshots/whitequark/if_else.txt index f40fd25ff40..efabd768aeb 100644 --- a/test/prism/snapshots/whitequark/if_else.txt +++ b/test/prism/snapshots/whitequark/if_else.txt @@ -34,7 +34,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (1,17)-(1,30)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (1,17)-(1,21) = "else" @@ -83,7 +83,7 @@ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: + ├── subsequent: │ @ ElseNode (location: (3,13)-(3,26)) │ ├── flags: ∅ │ ├── else_keyword_loc: (3,13)-(3,17) = "else" diff --git a/test/prism/snapshots/whitequark/if_elsif.txt b/test/prism/snapshots/whitequark/if_elsif.txt index 6cc88a87272..6edd4e920f9 100644 --- a/test/prism/snapshots/whitequark/if_elsif.txt +++ b/test/prism/snapshots/whitequark/if_elsif.txt @@ -34,7 +34,7 @@ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: + ├── subsequent: │ @ IfNode (location: (1,13)-(1,38)) │ ├── flags: newline │ ├── if_keyword_loc: (1,13)-(1,18) = "elsif" @@ -57,7 +57,7 @@ │ │ └── @ IntegerNode (location: (1,24)-(1,25)) │ │ ├── flags: newline, static_literal, decimal │ │ └── value: 1 - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (1,27)-(1,38)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (1,27)-(1,31) = "else" diff --git a/test/prism/snapshots/whitequark/if_masgn__24.txt b/test/prism/snapshots/whitequark/if_masgn__24.txt index 885c2b6eec9..5d8ed5808d3 100644 --- a/test/prism/snapshots/whitequark/if_masgn__24.txt +++ b/test/prism/snapshots/whitequark/if_masgn__24.txt @@ -46,5 +46,5 @@ │ └── closing_loc: (1,14)-(1,15) = ")" ├── then_keyword_loc: ∅ ├── statements: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (1,17)-(1,20) = "end" diff --git a/test/prism/snapshots/whitequark/if_mod.txt b/test/prism/snapshots/whitequark/if_mod.txt index a97438ba282..d2597fec669 100644 --- a/test/prism/snapshots/whitequark/if_mod.txt +++ b/test/prism/snapshots/whitequark/if_mod.txt @@ -34,5 +34,5 @@ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/whitequark/if_nl_then.txt b/test/prism/snapshots/whitequark/if_nl_then.txt index 7a6140bcc89..c6a424bbd9f 100644 --- a/test/prism/snapshots/whitequark/if_nl_then.txt +++ b/test/prism/snapshots/whitequark/if_nl_then.txt @@ -34,5 +34,5 @@ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: ∅ + ├── subsequent: ∅ └── end_keyword_loc: (2,9)-(2,12) = "end" diff --git a/test/prism/snapshots/whitequark/newline_in_hash_argument.txt b/test/prism/snapshots/whitequark/newline_in_hash_argument.txt index f43739ba12a..2a7d06102d9 100644 --- a/test/prism/snapshots/whitequark/newline_in_hash_argument.txt +++ b/test/prism/snapshots/whitequark/newline_in_hash_argument.txt @@ -97,7 +97,7 @@ │ │ │ └── flags: newline, static_literal │ │ ├── in_loc: (5,0)-(5,2) = "in" │ │ └── then_loc: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ ├── case_keyword_loc: (1,0)-(1,4) = "case" │ └── end_keyword_loc: (8,0)-(8,3) = "end" ├── @ CallNode (location: (10,0)-(11,1)) diff --git a/test/prism/snapshots/whitequark/pattern_matching__FILE__LINE_literals.txt b/test/prism/snapshots/whitequark/pattern_matching__FILE__LINE_literals.txt index e999ae406e4..77b6f0b1eae 100644 --- a/test/prism/snapshots/whitequark/pattern_matching__FILE__LINE_literals.txt +++ b/test/prism/snapshots/whitequark/pattern_matching__FILE__LINE_literals.txt @@ -58,6 +58,6 @@ │ ├── statements: ∅ │ ├── in_loc: (2,10)-(2,12) = "in" │ └── then_loc: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,8)-(1,12) = "case" └── end_keyword_loc: (3,8)-(3,11) = "end" diff --git a/test/prism/snapshots/whitequark/pattern_matching_blank_else.txt b/test/prism/snapshots/whitequark/pattern_matching_blank_else.txt index be8c5979ef9..af14e7b5a67 100644 --- a/test/prism/snapshots/whitequark/pattern_matching_blank_else.txt +++ b/test/prism/snapshots/whitequark/pattern_matching_blank_else.txt @@ -27,7 +27,7 @@ │ │ └── value: 3 │ ├── in_loc: (1,8)-(1,10) = "in" │ └── then_loc: ∅ - ├── consequent: + ├── else_clause: │ @ ElseNode (location: (1,17)-(1,26)) │ ├── flags: ∅ │ ├── else_keyword_loc: (1,17)-(1,21) = "else" diff --git a/test/prism/snapshots/whitequark/pattern_matching_else.txt b/test/prism/snapshots/whitequark/pattern_matching_else.txt index 62881bc33aa..010f0027168 100644 --- a/test/prism/snapshots/whitequark/pattern_matching_else.txt +++ b/test/prism/snapshots/whitequark/pattern_matching_else.txt @@ -27,7 +27,7 @@ │ │ └── value: 3 │ ├── in_loc: (1,8)-(1,10) = "in" │ └── then_loc: ∅ - ├── consequent: + ├── else_clause: │ @ ElseNode (location: (1,17)-(1,29)) │ ├── flags: ∅ │ ├── else_keyword_loc: (1,17)-(1,21) = "else" diff --git a/test/prism/snapshots/whitequark/resbody_list.txt b/test/prism/snapshots/whitequark/resbody_list.txt index b7d1292a499..3fa753b4349 100644 --- a/test/prism/snapshots/whitequark/resbody_list.txt +++ b/test/prism/snapshots/whitequark/resbody_list.txt @@ -46,7 +46,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: ∅ ├── ensure_clause: ∅ └── end_keyword_loc: (1,36)-(1,39) = "end" diff --git a/test/prism/snapshots/whitequark/resbody_list_mrhs.txt b/test/prism/snapshots/whitequark/resbody_list_mrhs.txt index ba1e3387000..d8889d36e84 100644 --- a/test/prism/snapshots/whitequark/resbody_list_mrhs.txt +++ b/test/prism/snapshots/whitequark/resbody_list_mrhs.txt @@ -56,7 +56,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: ∅ ├── ensure_clause: ∅ └── end_keyword_loc: (1,41)-(1,44) = "end" diff --git a/test/prism/snapshots/whitequark/resbody_list_var.txt b/test/prism/snapshots/whitequark/resbody_list_var.txt index 1c9f03c0cf6..0fe73828347 100644 --- a/test/prism/snapshots/whitequark/resbody_list_var.txt +++ b/test/prism/snapshots/whitequark/resbody_list_var.txt @@ -57,7 +57,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: ∅ ├── ensure_clause: ∅ └── end_keyword_loc: (1,36)-(1,39) = "end" diff --git a/test/prism/snapshots/whitequark/resbody_var.txt b/test/prism/snapshots/whitequark/resbody_var.txt index 114064ecce0..ce5237a01bd 100644 --- a/test/prism/snapshots/whitequark/resbody_var.txt +++ b/test/prism/snapshots/whitequark/resbody_var.txt @@ -46,7 +46,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (1,33)-(1,36) = "end" @@ -92,7 +92,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: ∅ ├── ensure_clause: ∅ └── end_keyword_loc: (3,32)-(3,35) = "end" diff --git a/test/prism/snapshots/whitequark/rescue.txt b/test/prism/snapshots/whitequark/rescue.txt index 388d6212f54..fa421b902c8 100644 --- a/test/prism/snapshots/whitequark/rescue.txt +++ b/test/prism/snapshots/whitequark/rescue.txt @@ -43,7 +43,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: ∅ ├── ensure_clause: ∅ └── end_keyword_loc: (1,26)-(1,29) = "end" diff --git a/test/prism/snapshots/whitequark/rescue_else.txt b/test/prism/snapshots/whitequark/rescue_else.txt index cbb68160e72..31a4deab9f7 100644 --- a/test/prism/snapshots/whitequark/rescue_else.txt +++ b/test/prism/snapshots/whitequark/rescue_else.txt @@ -43,7 +43,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: │ @ ElseNode (location: (1,26)-(1,40)) │ ├── flags: ∅ diff --git a/test/prism/snapshots/whitequark/rescue_else_ensure.txt b/test/prism/snapshots/whitequark/rescue_else_ensure.txt index 5b9f0e210b3..a300a253b87 100644 --- a/test/prism/snapshots/whitequark/rescue_else_ensure.txt +++ b/test/prism/snapshots/whitequark/rescue_else_ensure.txt @@ -43,7 +43,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: │ @ ElseNode (location: (1,26)-(1,42)) │ ├── flags: ∅ diff --git a/test/prism/snapshots/whitequark/rescue_ensure.txt b/test/prism/snapshots/whitequark/rescue_ensure.txt index e0f02cba9aa..ac345e440ae 100644 --- a/test/prism/snapshots/whitequark/rescue_ensure.txt +++ b/test/prism/snapshots/whitequark/rescue_ensure.txt @@ -43,7 +43,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: ∅ ├── ensure_clause: │ @ EnsureNode (location: (1,26)-(1,42)) diff --git a/test/prism/snapshots/whitequark/rescue_in_lambda_block.txt b/test/prism/snapshots/whitequark/rescue_in_lambda_block.txt index ae6285af3ae..790202d61f2 100644 --- a/test/prism/snapshots/whitequark/rescue_in_lambda_block.txt +++ b/test/prism/snapshots/whitequark/rescue_in_lambda_block.txt @@ -25,7 +25,7 @@ │ ├── operator_loc: ∅ │ ├── reference: ∅ │ ├── statements: ∅ - │ └── consequent: ∅ + │ └── subsequent: ∅ ├── else_clause: ∅ ├── ensure_clause: ∅ └── end_keyword_loc: (1,14)-(1,17) = "end" diff --git a/test/prism/snapshots/whitequark/rescue_without_begin_end.txt b/test/prism/snapshots/whitequark/rescue_without_begin_end.txt index e6ec38d27d9..318ecc79e60 100644 --- a/test/prism/snapshots/whitequark/rescue_without_begin_end.txt +++ b/test/prism/snapshots/whitequark/rescue_without_begin_end.txt @@ -58,7 +58,7 @@ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ - │ │ └── consequent: ∅ + │ │ └── subsequent: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (1,27)-(1,30) = "end" diff --git a/test/prism/snapshots/whitequark/ruby_bug_10279.txt b/test/prism/snapshots/whitequark/ruby_bug_10279.txt index 6e5adfd4a62..0076c954a5c 100644 --- a/test/prism/snapshots/whitequark/ruby_bug_10279.txt +++ b/test/prism/snapshots/whitequark/ruby_bug_10279.txt @@ -33,7 +33,7 @@ │ │ │ └── @ IntegerNode (location: (1,17)-(1,19)) │ │ │ ├── flags: newline, static_literal, decimal │ │ │ └── value: 42 - │ │ ├── consequent: ∅ + │ │ ├── subsequent: ∅ │ │ └── end_keyword_loc: (1,20)-(1,23) = "end" │ └── operator_loc: ∅ └── closing_loc: (1,23)-(1,24) = "}" diff --git a/test/prism/snapshots/whitequark/ruby_bug_10653.txt b/test/prism/snapshots/whitequark/ruby_bug_10653.txt index 37e19ccca66..3a562d8b1f5 100644 --- a/test/prism/snapshots/whitequark/ruby_bug_10653.txt +++ b/test/prism/snapshots/whitequark/ruby_bug_10653.txt @@ -33,7 +33,7 @@ │ │ ├── body: ∅ │ │ ├── opening_loc: (1,14)-(1,16) = "do" │ │ └── closing_loc: (1,17)-(1,20) = "end" - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (1,21)-(1,33)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (1,21)-(1,22) = ":" @@ -88,7 +88,7 @@ │ │ ├── body: ∅ │ │ ├── opening_loc: (3,14)-(3,15) = "{" │ │ └── closing_loc: (3,15)-(3,16) = "}" - │ ├── consequent: + │ ├── subsequent: │ │ @ ElseNode (location: (3,17)-(3,25)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (3,17)-(3,18) = ":" @@ -184,7 +184,7 @@ │ │ └── block: ∅ │ ├── opening_loc: (5,13)-(5,15) = "do" │ └── closing_loc: (5,24)-(5,27) = "end" - ├── consequent: + ├── subsequent: │ @ ElseNode (location: (5,28)-(5,31)) │ ├── flags: ∅ │ ├── else_keyword_loc: (5,28)-(5,29) = ":" diff --git a/test/prism/snapshots/whitequark/ternary.txt b/test/prism/snapshots/whitequark/ternary.txt index 411ba972f53..4aa79916751 100644 --- a/test/prism/snapshots/whitequark/ternary.txt +++ b/test/prism/snapshots/whitequark/ternary.txt @@ -27,7 +27,7 @@ │ └── @ IntegerNode (location: (1,6)-(1,7)) │ ├── flags: newline, static_literal, decimal │ └── value: 1 - ├── consequent: + ├── subsequent: │ @ ElseNode (location: (1,8)-(1,11)) │ ├── flags: ∅ │ ├── else_keyword_loc: (1,8)-(1,9) = ":" diff --git a/test/prism/snapshots/whitequark/ternary_ambiguous_symbol.txt b/test/prism/snapshots/whitequark/ternary_ambiguous_symbol.txt index 04dfce8d859..4d1900fc5f7 100644 --- a/test/prism/snapshots/whitequark/ternary_ambiguous_symbol.txt +++ b/test/prism/snapshots/whitequark/ternary_ambiguous_symbol.txt @@ -46,7 +46,7 @@ │ ├── flags: newline │ ├── name: :t │ └── depth: 0 - ├── consequent: + ├── subsequent: │ @ ElseNode (location: (1,11)-(1,13)) │ ├── flags: ∅ │ ├── else_keyword_loc: (1,11)-(1,12) = ":" diff --git a/test/prism/snapshots/whitequark/unless.txt b/test/prism/snapshots/whitequark/unless.txt index 4aa47f99a53..3d417e355d4 100644 --- a/test/prism/snapshots/whitequark/unless.txt +++ b/test/prism/snapshots/whitequark/unless.txt @@ -34,7 +34,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: ∅ + │ ├── else_clause: ∅ │ └── end_keyword_loc: (1,21)-(1,24) = "end" └── @ UnlessNode (location: (3,0)-(3,20)) ├── flags: newline @@ -65,5 +65,5 @@ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ └── end_keyword_loc: (3,17)-(3,20) = "end" diff --git a/test/prism/snapshots/whitequark/unless_else.txt b/test/prism/snapshots/whitequark/unless_else.txt index 15610855856..ffdb2156924 100644 --- a/test/prism/snapshots/whitequark/unless_else.txt +++ b/test/prism/snapshots/whitequark/unless_else.txt @@ -34,7 +34,7 @@ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ - │ ├── consequent: + │ ├── else_clause: │ │ @ ElseNode (location: (1,21)-(1,34)) │ │ ├── flags: ∅ │ │ ├── else_keyword_loc: (1,21)-(1,25) = "else" @@ -83,7 +83,7 @@ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: + ├── else_clause: │ @ ElseNode (location: (3,17)-(3,30)) │ ├── flags: ∅ │ ├── else_keyword_loc: (3,17)-(3,21) = "else" diff --git a/test/prism/snapshots/whitequark/unless_mod.txt b/test/prism/snapshots/whitequark/unless_mod.txt index 7bdc0446b29..5dd1c2d25d4 100644 --- a/test/prism/snapshots/whitequark/unless_mod.txt +++ b/test/prism/snapshots/whitequark/unless_mod.txt @@ -34,5 +34,5 @@ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/whitequark/when_multi.txt b/test/prism/snapshots/whitequark/when_multi.txt index a4cd447b8cb..b4038b74a81 100644 --- a/test/prism/snapshots/whitequark/when_multi.txt +++ b/test/prism/snapshots/whitequark/when_multi.txt @@ -50,6 +50,6 @@ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (1,34)-(1,37) = "end" diff --git a/test/prism/snapshots/whitequark/when_splat.txt b/test/prism/snapshots/whitequark/when_splat.txt index 9f1d6953627..f5d9080539a 100644 --- a/test/prism/snapshots/whitequark/when_splat.txt +++ b/test/prism/snapshots/whitequark/when_splat.txt @@ -75,6 +75,6 @@ │ │ └── block: ∅ │ ├── then_keyword_loc: ∅ │ └── statements: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (1,40)-(1,43) = "end" diff --git a/test/prism/snapshots/whitequark/when_then.txt b/test/prism/snapshots/whitequark/when_then.txt index c7af419fbe1..cb964cfb53e 100644 --- a/test/prism/snapshots/whitequark/when_then.txt +++ b/test/prism/snapshots/whitequark/when_then.txt @@ -44,6 +44,6 @@ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ - ├── consequent: ∅ + ├── else_clause: ∅ ├── case_keyword_loc: (1,0)-(1,4) = "case" └── end_keyword_loc: (1,31)-(1,34) = "end" From 1d9e66ad1b923b5345ebc96199f27108d9f31eb0 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 28 Aug 2024 15:11:10 -0400 Subject: [PATCH 108/109] Bump to v1.0.0 --- CHANGELOG.md | 32 ++++++++++++++++++++- Gemfile.lock | 2 +- ext/prism/extension.h | 2 +- gemfiles/2.7/Gemfile.lock | 2 +- gemfiles/3.0/Gemfile.lock | 2 +- gemfiles/3.1/Gemfile.lock | 2 +- gemfiles/3.2/Gemfile.lock | 2 +- gemfiles/3.3/Gemfile.lock | 2 +- gemfiles/3.4/Gemfile.lock | 2 +- gemfiles/jruby/Gemfile.lock | 2 +- gemfiles/truffleruby/Gemfile.lock | 2 +- include/prism/version.h | 6 ++-- javascript/package.json | 2 +- prism.gemspec | 2 +- rust/Cargo.lock | 4 +-- rust/ruby-prism-sys/Cargo.toml | 2 +- rust/ruby-prism-sys/tests/utils_tests.rs | 2 +- rust/ruby-prism/Cargo.toml | 4 +-- templates/java/org/prism/Loader.java.erb | 4 +-- templates/javascript/src/deserialize.js.erb | 4 +-- templates/lib/prism/serialize.rb.erb | 4 +-- 21 files changed, 58 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d02a14cbed..9cff5e896ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,35 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a ## [Unreleased] +## [1.0.0] - 2024-08-28 + +### Added + +- Add `Node#breadth_first_search`. +- Add `Node#node_id`. +- Add `ArgumentsNode#contains_splat?`. +- Passing the special value `false` for the `encoding` option tells Prism to ignore magic encoding comments. +- Expose flags on every node type (allows checking static literal and newline). +- Implement mismatched indentation warning. +- Add C API for receiving a callback when parsing shebangs with additional flags. + +### Changed + +- **BREAKING**: Some fields are renamed that had illogical names. The previous names all now emit deprecation warnings. + - `CaseMatchNode#consequent` was renamed to `CaseMatchNode#else_clause` + - `CaseNode#consequent` was renamed to `CaseNode#else_clause` + - `IfNode#consequent` was renamed to `IfNode#subsequent` + - `RescueNode#consequent` was renamed to `RescueNode#subsequent` + - `UnlessNode#consequent` was renamed to `UnlessNode#else_clause` +- Block exits are now allowed in loop predicates (e.g., `while _ && break do end`). +- Multi-writes are now disallowed when not at the statement level. +- Ensure that range operators are non-associative. +- (JavaScript) Correctly deserialize encoded strings. +- Properly support parsing regular expressions in extended mode. +- Use gmake on FreeBSD. +- Parsing streams now handles NUL bytes in the middle of the stream. +- Properly detect invalid returns. + ## [0.30.0] - 2024-06-07 ### Added @@ -538,7 +567,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a - 🎉 Initial release! 🎉 -[unreleased]: https://github.com/ruby/prism/compare/v0.30.0...HEAD +[unreleased]: https://github.com/ruby/prism/compare/v1.0.0...HEAD +[1.0.0]: https://github.com/ruby/prism/compare/v0.30.0...v1.0.0 [0.30.0]: https://github.com/ruby/prism/compare/v0.29.0...v0.30.0 [0.29.0]: https://github.com/ruby/prism/compare/v0.28.0...v0.29.0 [0.28.0]: https://github.com/ruby/prism/compare/v0.27.0...v0.28.0 diff --git a/Gemfile.lock b/Gemfile.lock index 63676222c57..3b0ab6d2fb5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - prism (0.30.0) + prism (1.0.0) GEM remote: https://rubygems.org/ diff --git a/ext/prism/extension.h b/ext/prism/extension.h index d49e4f3b9e9..d7ee0b70424 100644 --- a/ext/prism/extension.h +++ b/ext/prism/extension.h @@ -1,7 +1,7 @@ #ifndef PRISM_EXT_NODE_H #define PRISM_EXT_NODE_H -#define EXPECTED_PRISM_VERSION "0.30.0" +#define EXPECTED_PRISM_VERSION "1.0.0" #include #include diff --git a/gemfiles/2.7/Gemfile.lock b/gemfiles/2.7/Gemfile.lock index 1cd717bfb61..c866a8ad33f 100644 --- a/gemfiles/2.7/Gemfile.lock +++ b/gemfiles/2.7/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: ../.. specs: - prism (0.30.0) + prism (1.0.0) GEM remote: https://rubygems.org/ diff --git a/gemfiles/3.0/Gemfile.lock b/gemfiles/3.0/Gemfile.lock index 48a338b6945..8c36198ffb2 100644 --- a/gemfiles/3.0/Gemfile.lock +++ b/gemfiles/3.0/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: ../.. specs: - prism (0.30.0) + prism (1.0.0) GEM remote: https://rubygems.org/ diff --git a/gemfiles/3.1/Gemfile.lock b/gemfiles/3.1/Gemfile.lock index aaffba48f39..13fc1f948f1 100644 --- a/gemfiles/3.1/Gemfile.lock +++ b/gemfiles/3.1/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: ../.. specs: - prism (0.30.0) + prism (1.0.0) GEM remote: https://rubygems.org/ diff --git a/gemfiles/3.2/Gemfile.lock b/gemfiles/3.2/Gemfile.lock index 6f506c55ebf..d3067c4b086 100644 --- a/gemfiles/3.2/Gemfile.lock +++ b/gemfiles/3.2/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: ../.. specs: - prism (0.30.0) + prism (1.0.0) GEM remote: https://rubygems.org/ diff --git a/gemfiles/3.3/Gemfile.lock b/gemfiles/3.3/Gemfile.lock index 1a47d35bc8f..5d221a65421 100644 --- a/gemfiles/3.3/Gemfile.lock +++ b/gemfiles/3.3/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: ../.. specs: - prism (0.30.0) + prism (1.0.0) GEM remote: https://rubygems.org/ diff --git a/gemfiles/3.4/Gemfile.lock b/gemfiles/3.4/Gemfile.lock index 598cb3264a7..a261b6ca5c9 100644 --- a/gemfiles/3.4/Gemfile.lock +++ b/gemfiles/3.4/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: ../.. specs: - prism (0.30.0) + prism (1.0.0) GEM remote: https://rubygems.org/ diff --git a/gemfiles/jruby/Gemfile.lock b/gemfiles/jruby/Gemfile.lock index 38e2d05bf6b..03bdcb8b845 100644 --- a/gemfiles/jruby/Gemfile.lock +++ b/gemfiles/jruby/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: ../.. specs: - prism (0.30.0) + prism (1.0.0) GEM remote: https://rubygems.org/ diff --git a/gemfiles/truffleruby/Gemfile.lock b/gemfiles/truffleruby/Gemfile.lock index 1fe04864c5a..f45413c1551 100644 --- a/gemfiles/truffleruby/Gemfile.lock +++ b/gemfiles/truffleruby/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: ../.. specs: - prism (0.30.0) + prism (1.0.0) GEM remote: https://rubygems.org/ diff --git a/include/prism/version.h b/include/prism/version.h index d5b8a860185..3cca6489966 100644 --- a/include/prism/version.h +++ b/include/prism/version.h @@ -9,12 +9,12 @@ /** * The major version of the Prism library as an int. */ -#define PRISM_VERSION_MAJOR 0 +#define PRISM_VERSION_MAJOR 1 /** * The minor version of the Prism library as an int. */ -#define PRISM_VERSION_MINOR 30 +#define PRISM_VERSION_MINOR 0 /** * The patch version of the Prism library as an int. @@ -24,6 +24,6 @@ /** * The version of the Prism library as a constant string. */ -#define PRISM_VERSION "0.30.0" +#define PRISM_VERSION "1.0.0" #endif diff --git a/javascript/package.json b/javascript/package.json index c3bfa0d403d..b508da26ca6 100644 --- a/javascript/package.json +++ b/javascript/package.json @@ -1,6 +1,6 @@ { "name": "@ruby/prism", - "version": "0.30.0", + "version": "1.0.0", "description": "Prism Ruby parser", "type": "module", "main": "src/index.js", diff --git a/prism.gemspec b/prism.gemspec index 08212318bc1..97a9648ac79 100644 --- a/prism.gemspec +++ b/prism.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |spec| spec.name = "prism" - spec.version = "0.30.0" + spec.version = "1.0.0" spec.authors = ["Shopify"] spec.email = ["ruby@shopify.com"] diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 0f9eab3061f..d63a9962f33 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -267,7 +267,7 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "ruby-prism" -version = "0.30.0" +version = "1.0.0" dependencies = [ "ruby-prism-sys", "serde", @@ -276,7 +276,7 @@ dependencies = [ [[package]] name = "ruby-prism-sys" -version = "0.30.0" +version = "1.0.0" dependencies = [ "bindgen", "cc", diff --git a/rust/ruby-prism-sys/Cargo.toml b/rust/ruby-prism-sys/Cargo.toml index 1ad7d55408a..a4ac32d9fa6 100644 --- a/rust/ruby-prism-sys/Cargo.toml +++ b/rust/ruby-prism-sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ruby-prism-sys" -version = "0.30.0" +version = "1.0.0" edition = "2021" license-file = "../../LICENSE.md" repository = "https://github.com/ruby/prism" diff --git a/rust/ruby-prism-sys/tests/utils_tests.rs b/rust/ruby-prism-sys/tests/utils_tests.rs index 9eac96c02f6..425231e0690 100644 --- a/rust/ruby-prism-sys/tests/utils_tests.rs +++ b/rust/ruby-prism-sys/tests/utils_tests.rs @@ -12,7 +12,7 @@ fn version_test() { CStr::from_ptr(version) }; - assert_eq!(&cstring.to_string_lossy(), "0.30.0"); + assert_eq!(&cstring.to_string_lossy(), "1.0.0"); } #[test] diff --git a/rust/ruby-prism/Cargo.toml b/rust/ruby-prism/Cargo.toml index 13a0ee3f7dc..9693e83ab24 100644 --- a/rust/ruby-prism/Cargo.toml +++ b/rust/ruby-prism/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ruby-prism" -version = "0.30.0" +version = "1.0.0" edition = "2021" license-file = "../../LICENSE.md" repository = "https://github.com/ruby/prism" @@ -26,7 +26,7 @@ serde = { version = "1.0", features = ["derive"] } serde_yaml = "0.9" [dependencies] -ruby-prism-sys = { version = "0.30.0", path = "../ruby-prism-sys" } +ruby-prism-sys = { version = "1.0.0", path = "../ruby-prism-sys" } [features] default = ["vendored"] diff --git a/templates/java/org/prism/Loader.java.erb b/templates/java/org/prism/Loader.java.erb index fd39f4db1cb..bb978ab2c5e 100644 --- a/templates/java/org/prism/Loader.java.erb +++ b/templates/java/org/prism/Loader.java.erb @@ -100,8 +100,8 @@ public class Loader { expect((byte) 'S', "incorrect prism header"); expect((byte) 'M', "incorrect prism header"); - expect((byte) 0, "prism major version does not match"); - expect((byte) 30, "prism minor version does not match"); + expect((byte) 1, "prism major version does not match"); + expect((byte) 0, "prism minor version does not match"); expect((byte) 0, "prism patch version does not match"); expect((byte) 1, "Loader.java requires no location fields in the serialized output"); diff --git a/templates/javascript/src/deserialize.js.erb b/templates/javascript/src/deserialize.js.erb index e993324604a..31df7203052 100644 --- a/templates/javascript/src/deserialize.js.erb +++ b/templates/javascript/src/deserialize.js.erb @@ -1,7 +1,7 @@ import * as nodes from "./nodes.js"; -const MAJOR_VERSION = 0; -const MINOR_VERSION = 30; +const MAJOR_VERSION = 1; +const MINOR_VERSION = 0; const PATCH_VERSION = 0; // The DataView getFloat64 function takes an optional second argument that diff --git a/templates/lib/prism/serialize.rb.erb b/templates/lib/prism/serialize.rb.erb index 7469f3683d1..62108ec28a3 100644 --- a/templates/lib/prism/serialize.rb.erb +++ b/templates/lib/prism/serialize.rb.erb @@ -6,11 +6,11 @@ module Prism module Serialize # The major version of prism that we are expecting to find in the serialized # strings. - MAJOR_VERSION = 0 + MAJOR_VERSION = 1 # The minor version of prism that we are expecting to find in the serialized # strings. - MINOR_VERSION = 30 + MINOR_VERSION = 0 # The patch version of prism that we are expecting to find in the serialized # strings. From 21cb9b78aee842eb65b8d4890f1ff6bd57b54e33 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Wed, 28 Aug 2024 16:56:05 -0400 Subject: [PATCH 109/109] Multi-splat flag for arguments --- config.yml | 2 ++ src/prism.c | 6 +++++- test/prism/snapshots/unparser/corpus/literal/send.txt | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/config.yml b/config.yml index dc19295c3e7..b7c673813b4 100644 --- a/config.yml +++ b/config.yml @@ -653,6 +653,8 @@ flags: comment: "if arguments contain keyword splat" - name: CONTAINS_SPLAT comment: "if arguments contain splat" + - name: CONTAINS_MULTIPLE_SPLATS + comment: "if arguments contain multiple splats" comment: Flags for arguments nodes. - name: ArrayNodeFlags values: diff --git a/src/prism.c b/src/prism.c index 28bd8d0d439..4edb57adc06 100644 --- a/src/prism.c +++ b/src/prism.c @@ -2065,7 +2065,11 @@ pm_arguments_node_arguments_append(pm_arguments_node_t *node, pm_node_t *argumen pm_node_list_append(&node->arguments, argument); if (PM_NODE_TYPE_P(argument, PM_SPLAT_NODE)) { - pm_node_flag_set((pm_node_t *) node, PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT); + if (PM_NODE_FLAG_P(node, PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT)) { + pm_node_flag_set((pm_node_t *) node, PM_ARGUMENTS_NODE_FLAGS_CONTAINS_MULTIPLE_SPLATS); + } else { + pm_node_flag_set((pm_node_t *) node, PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT); + } } } diff --git a/test/prism/snapshots/unparser/corpus/literal/send.txt b/test/prism/snapshots/unparser/corpus/literal/send.txt index 9f9eeb13eee..4800b4e2e65 100644 --- a/test/prism/snapshots/unparser/corpus/literal/send.txt +++ b/test/prism/snapshots/unparser/corpus/literal/send.txt @@ -1123,7 +1123,7 @@ │ ├── opening_loc: (59,7)-(59,8) = "(" │ ├── arguments: │ │ @ ArgumentsNode (location: (59,8)-(59,25)) - │ │ ├── flags: contains_splat + │ │ ├── flags: contains_splat, contains_multiple_splats │ │ └── arguments: (length: 3) │ │ ├── @ SplatNode (location: (59,8)-(59,13)) │ │ │ ├── flags: ∅