prism 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -1
- data/README.md +1 -0
- data/config.yml +257 -20
- data/docs/parsing_rules.md +4 -1
- data/ext/prism/extension.c +63 -26
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +559 -327
- data/include/prism/defines.h +27 -0
- data/include/prism/diagnostic.h +5 -1
- data/include/prism/options.h +39 -2
- data/include/prism/parser.h +7 -0
- data/include/prism/util/pm_string.h +27 -4
- data/include/prism/version.h +2 -2
- data/lib/prism/dot_visitor.rb +2 -0
- data/lib/prism/dsl.rb +10 -8
- data/lib/prism/ffi.rb +37 -3
- data/lib/prism/inspect_visitor.rb +1 -1
- data/lib/prism/lex_compat.rb +1 -1
- data/lib/prism/node.rb +132 -89
- data/lib/prism/parse_result.rb +1 -1
- data/lib/prism/reflection.rb +1 -1
- data/lib/prism/serialize.rb +6 -2
- data/lib/prism/translation/parser/lexer.rb +25 -3
- data/lib/prism/translation/ruby_parser.rb +7 -1
- data/prism.gemspec +1 -2
- data/rbi/prism/dsl.rbi +32 -32
- data/rbi/prism/node.rbi +69 -59
- data/rbi/prism.rbi +34 -34
- data/sig/prism/dsl.rbs +24 -24
- data/sig/prism/node.rbs +113 -105
- data/sig/prism.rbs +90 -72
- data/src/diagnostic.c +15 -7
- data/src/node.c +10 -0
- data/src/options.c +58 -27
- data/src/prettyprint.c +10 -0
- data/src/prism.c +588 -385
- data/src/util/pm_string.c +123 -65
- metadata +2 -3
- data/lib/prism/translation/parser/rubocop.rb +0 -73
    
        data/config.yml
    CHANGED
    
    | @@ -15,7 +15,6 @@ errors: | |
| 15 15 | 
             
              - ARGUMENT_FORMAL_GLOBAL
         | 
| 16 16 | 
             
              - ARGUMENT_FORMAL_IVAR
         | 
| 17 17 | 
             
              - ARGUMENT_FORWARDING_UNBOUND
         | 
| 18 | 
            -
              - ARGUMENT_IN
         | 
| 19 18 | 
             
              - ARGUMENT_NO_FORWARDING_AMPERSAND
         | 
| 20 19 | 
             
              - ARGUMENT_NO_FORWARDING_ELLIPSES
         | 
| 21 20 | 
             
              - ARGUMENT_NO_FORWARDING_STAR
         | 
| @@ -99,6 +98,7 @@ errors: | |
| 99 98 | 
             
              - EXPECT_EXPRESSION_AFTER_SPLAT
         | 
| 100 99 | 
             
              - EXPECT_EXPRESSION_AFTER_SPLAT_HASH
         | 
| 101 100 | 
             
              - EXPECT_EXPRESSION_AFTER_STAR
         | 
| 101 | 
            +
              - EXPECT_FOR_DELIMITER
         | 
| 102 102 | 
             
              - EXPECT_IDENT_REQ_PARAMETER
         | 
| 103 103 | 
             
              - EXPECT_IN_DELIMITER
         | 
| 104 104 | 
             
              - EXPECT_LPAREN_REQ_PARAMETER
         | 
| @@ -107,6 +107,7 @@ errors: | |
| 107 107 | 
             
              - EXPECT_RPAREN
         | 
| 108 108 | 
             
              - EXPECT_RPAREN_AFTER_MULTI
         | 
| 109 109 | 
             
              - EXPECT_RPAREN_REQ_PARAMETER
         | 
| 110 | 
            +
              - EXPECT_SINGLETON_CLASS_DELIMITER
         | 
| 110 111 | 
             
              - EXPECT_STRING_CONTENT
         | 
| 111 112 | 
             
              - EXPECT_WHEN_DELIMITER
         | 
| 112 113 | 
             
              - EXPRESSION_BARE_HASH
         | 
| @@ -185,7 +186,9 @@ errors: | |
| 185 186 | 
             
              - MODULE_TERM
         | 
| 186 187 | 
             
              - MULTI_ASSIGN_MULTI_SPLATS
         | 
| 187 188 | 
             
              - MULTI_ASSIGN_UNEXPECTED_REST
         | 
| 189 | 
            +
              - NESTING_TOO_DEEP
         | 
| 188 190 | 
             
              - NO_LOCAL_VARIABLE
         | 
| 191 | 
            +
              - NON_ASSOCIATIVE_OPERATOR
         | 
| 189 192 | 
             
              - NOT_EXPRESSION
         | 
| 190 193 | 
             
              - NUMBER_LITERAL_UNDERSCORE
         | 
| 191 194 | 
             
              - NUMBERED_PARAMETER_INNER_BLOCK
         | 
| @@ -271,6 +274,7 @@ errors: | |
| 271 274 | 
             
              - UNEXPECTED_BLOCK_ARGUMENT
         | 
| 272 275 | 
             
              - UNEXPECTED_INDEX_BLOCK
         | 
| 273 276 | 
             
              - UNEXPECTED_INDEX_KEYWORDS
         | 
| 277 | 
            +
              - UNEXPECTED_LABEL
         | 
| 274 278 | 
             
              - UNEXPECTED_MULTI_WRITE
         | 
| 275 279 | 
             
              - UNEXPECTED_RANGE_OPERATOR
         | 
| 276 280 | 
             
              - UNEXPECTED_SAFE_NAVIGATION
         | 
| @@ -647,12 +651,16 @@ tokens: | |
| 647 651 | 
             
            flags:
         | 
| 648 652 | 
             
              - name: ArgumentsNodeFlags
         | 
| 649 653 | 
             
                values:
         | 
| 654 | 
            +
                  - name: CONTAINS_FORWARDING
         | 
| 655 | 
            +
                    comment: "if the arguments contain forwarding"
         | 
| 650 656 | 
             
                  - name: CONTAINS_KEYWORDS
         | 
| 651 | 
            -
                    comment: "if arguments contain keywords"
         | 
| 657 | 
            +
                    comment: "if the arguments contain keywords"
         | 
| 652 658 | 
             
                  - name: CONTAINS_KEYWORD_SPLAT
         | 
| 653 | 
            -
                    comment: "if arguments contain keyword splat"
         | 
| 659 | 
            +
                    comment: "if the arguments contain a keyword splat"
         | 
| 654 660 | 
             
                  - name: CONTAINS_SPLAT
         | 
| 655 | 
            -
                    comment: "if arguments contain splat"
         | 
| 661 | 
            +
                    comment: "if the arguments contain a splat"
         | 
| 662 | 
            +
                  - name: CONTAINS_MULTIPLE_SPLATS
         | 
| 663 | 
            +
                    comment: "if the arguments contain multiple splats"
         | 
| 656 664 | 
             
                comment: Flags for arguments nodes.
         | 
| 657 665 | 
             
              - name: ArrayNodeFlags
         | 
| 658 666 | 
             
                values:
         | 
| @@ -789,8 +797,8 @@ nodes: | |
| 789 797 | 
             
                      - GlobalVariableReadNode
         | 
| 790 798 | 
             
                      - BackReferenceReadNode
         | 
| 791 799 | 
             
                      - NumberedReferenceReadNode
         | 
| 792 | 
            -
                      - SymbolNode #  | 
| 793 | 
            -
                      - MissingNode #  | 
| 800 | 
            +
                      - on error: SymbolNode # alias $a b
         | 
| 801 | 
            +
                      - on error: MissingNode # alias $a 42
         | 
| 794 802 | 
             
                    comment: |
         | 
| 795 803 | 
             
                      Represents the old name of the global variable that can be used before aliasing.
         | 
| 796 804 |  | 
| @@ -815,13 +823,35 @@ nodes: | |
| 815 823 | 
             
                    kind:
         | 
| 816 824 | 
             
                      - SymbolNode
         | 
| 817 825 | 
             
                      - InterpolatedSymbolNode
         | 
| 826 | 
            +
                    comment: |
         | 
| 827 | 
            +
                      Represents the new name of the method that will be aliased.
         | 
| 828 | 
            +
             | 
| 829 | 
            +
                          alias foo bar
         | 
| 830 | 
            +
                                ^^^
         | 
| 831 | 
            +
             | 
| 832 | 
            +
                          alias :foo :bar
         | 
| 833 | 
            +
                                ^^^^
         | 
| 834 | 
            +
             | 
| 835 | 
            +
                          alias :"#{foo}" :"#{bar}"
         | 
| 836 | 
            +
                                ^^^^^^^^^
         | 
| 818 837 | 
             
                  - name: old_name
         | 
| 819 838 | 
             
                    type: node
         | 
| 820 839 | 
             
                    kind:
         | 
| 821 840 | 
             
                      - SymbolNode
         | 
| 822 841 | 
             
                      - InterpolatedSymbolNode
         | 
| 823 | 
            -
                      - GlobalVariableReadNode #  | 
| 824 | 
            -
                      - MissingNode #  | 
| 842 | 
            +
                      - on error: GlobalVariableReadNode # alias a $b
         | 
| 843 | 
            +
                      - on error: MissingNode # alias a 42
         | 
| 844 | 
            +
                    comment: |
         | 
| 845 | 
            +
                      Represents the old name of the method that will be aliased.
         | 
| 846 | 
            +
             | 
| 847 | 
            +
                          alias foo bar
         | 
| 848 | 
            +
                                    ^^^
         | 
| 849 | 
            +
             | 
| 850 | 
            +
                          alias :foo :bar
         | 
| 851 | 
            +
                                     ^^^^
         | 
| 852 | 
            +
             | 
| 853 | 
            +
                          alias :"#{foo}" :"#{bar}"
         | 
| 854 | 
            +
                                          ^^^^^^^^^
         | 
| 825 855 | 
             
                  - name: keyword_loc
         | 
| 826 856 | 
             
                    type: location
         | 
| 827 857 | 
             
                comment: |
         | 
| @@ -833,10 +863,27 @@ nodes: | |
| 833 863 | 
             
                fields:
         | 
| 834 864 | 
             
                  - name: left
         | 
| 835 865 | 
             
                    type: node
         | 
| 866 | 
            +
                    kind: pattern expression
         | 
| 867 | 
            +
                    comment: |
         | 
| 868 | 
            +
                      Represents the left side of the expression.
         | 
| 869 | 
            +
             | 
| 870 | 
            +
                          foo => bar | baz
         | 
| 871 | 
            +
                                 ^^^
         | 
| 836 872 | 
             
                  - name: right
         | 
| 837 873 | 
             
                    type: node
         | 
| 874 | 
            +
                    kind: pattern expression
         | 
| 875 | 
            +
                    comment: |
         | 
| 876 | 
            +
                      Represents the right side of the expression.
         | 
| 877 | 
            +
             | 
| 878 | 
            +
                          foo => bar | baz
         | 
| 879 | 
            +
                                       ^^^
         | 
| 838 880 | 
             
                  - name: operator_loc
         | 
| 839 881 | 
             
                    type: location
         | 
| 882 | 
            +
                    comment: |
         | 
| 883 | 
            +
                      Represents the alternation operator location.
         | 
| 884 | 
            +
             | 
| 885 | 
            +
                          foo => bar | baz
         | 
| 886 | 
            +
                                     ^
         | 
| 840 887 | 
             
                comment: |
         | 
| 841 888 | 
             
                  Represents an alternation pattern in pattern matching.
         | 
| 842 889 |  | 
| @@ -846,6 +893,7 @@ nodes: | |
| 846 893 | 
             
                fields:
         | 
| 847 894 | 
             
                  - name: left
         | 
| 848 895 | 
             
                    type: node
         | 
| 896 | 
            +
                    kind: non-void expression
         | 
| 849 897 | 
             
                    comment: |
         | 
| 850 898 | 
             
                      Represents the left side of the expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 851 899 |  | 
| @@ -856,8 +904,9 @@ nodes: | |
| 856 904 | 
             
                          ^
         | 
| 857 905 | 
             
                  - name: right
         | 
| 858 906 | 
             
                    type: node
         | 
| 907 | 
            +
                    kind: Node
         | 
| 859 908 | 
             
                    comment: |
         | 
| 860 | 
            -
                      Represents the right side of the expression. | 
| 909 | 
            +
                      Represents the right side of the expression.
         | 
| 861 910 |  | 
| 862 911 | 
             
                          left && right
         | 
| 863 912 | 
             
                                  ^^^^^
         | 
| @@ -881,6 +930,7 @@ nodes: | |
| 881 930 | 
             
                fields:
         | 
| 882 931 | 
             
                  - name: arguments
         | 
| 883 932 | 
             
                    type: node[]
         | 
| 933 | 
            +
                    kind: non-void expression
         | 
| 884 934 | 
             
                comment: |
         | 
| 885 935 | 
             
                  Represents a set of arguments to a method or a keyword.
         | 
| 886 936 |  | 
| @@ -891,6 +941,7 @@ nodes: | |
| 891 941 | 
             
                fields:
         | 
| 892 942 | 
             
                  - name: elements
         | 
| 893 943 | 
             
                    type: node[]
         | 
| 944 | 
            +
                    kind: non-void expression
         | 
| 894 945 | 
             
                    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.
         | 
| 895 946 | 
             
                  - name: opening_loc
         | 
| 896 947 | 
             
                    type: location?
         | 
| @@ -919,12 +970,18 @@ nodes: | |
| 919 970 | 
             
                fields:
         | 
| 920 971 | 
             
                  - name: constant
         | 
| 921 972 | 
             
                    type: node?
         | 
| 973 | 
            +
                    kind:
         | 
| 974 | 
            +
                      - ConstantReadNode
         | 
| 975 | 
            +
                      - ConstantPathNode
         | 
| 922 976 | 
             
                  - name: requireds
         | 
| 923 977 | 
             
                    type: node[]
         | 
| 978 | 
            +
                    kind: pattern expression
         | 
| 924 979 | 
             
                  - name: rest
         | 
| 925 980 | 
             
                    type: node?
         | 
| 981 | 
            +
                    kind: pattern expression
         | 
| 926 982 | 
             
                  - name: posts
         | 
| 927 983 | 
             
                    type: node[]
         | 
| 984 | 
            +
                    kind: pattern expression
         | 
| 928 985 | 
             
                  - name: opening_loc
         | 
| 929 986 | 
             
                    type: location?
         | 
| 930 987 | 
             
                  - name: closing_loc
         | 
| @@ -950,6 +1007,7 @@ nodes: | |
| 950 1007 | 
             
                fields:
         | 
| 951 1008 | 
             
                  - name: key
         | 
| 952 1009 | 
             
                    type: node
         | 
| 1010 | 
            +
                    kind: non-void expression
         | 
| 953 1011 | 
             
                    comment: |
         | 
| 954 1012 | 
             
                      The key of the association. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 955 1013 |  | 
| @@ -963,6 +1021,7 @@ nodes: | |
| 963 1021 | 
             
                            ^^^^^^^^^^
         | 
| 964 1022 | 
             
                  - name: value
         | 
| 965 1023 | 
             
                    type: node
         | 
| 1024 | 
            +
                    kind: non-void expression
         | 
| 966 1025 | 
             
                    comment: |
         | 
| 967 1026 | 
             
                      The value of the association, if present. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 968 1027 |  | 
| @@ -987,6 +1046,7 @@ nodes: | |
| 987 1046 | 
             
                fields:
         | 
| 988 1047 | 
             
                  - name: value
         | 
| 989 1048 | 
             
                    type: node?
         | 
| 1049 | 
            +
                    kind: non-void expression
         | 
| 990 1050 | 
             
                    comment: |
         | 
| 991 1051 | 
             
                      The value to be splatted, if present. Will be missing when keyword rest argument forwarding is used.
         | 
| 992 1052 |  | 
| @@ -1049,6 +1109,7 @@ nodes: | |
| 1049 1109 | 
             
                fields:
         | 
| 1050 1110 | 
             
                  - name: expression
         | 
| 1051 1111 | 
             
                    type: node?
         | 
| 1112 | 
            +
                    kind: non-void expression
         | 
| 1052 1113 | 
             
                  - name: operator_loc
         | 
| 1053 1114 | 
             
                    type: location
         | 
| 1054 1115 | 
             
                comment: |
         | 
| @@ -1153,6 +1214,7 @@ nodes: | |
| 1153 1214 | 
             
                fields:
         | 
| 1154 1215 | 
             
                  - name: receiver
         | 
| 1155 1216 | 
             
                    type: node?
         | 
| 1217 | 
            +
                    kind: non-void expression
         | 
| 1156 1218 | 
             
                  - name: call_operator_loc
         | 
| 1157 1219 | 
             
                    type: location?
         | 
| 1158 1220 | 
             
                  - name: message_loc
         | 
| @@ -1165,6 +1227,7 @@ nodes: | |
| 1165 1227 | 
             
                    type: location
         | 
| 1166 1228 | 
             
                  - name: value
         | 
| 1167 1229 | 
             
                    type: node
         | 
| 1230 | 
            +
                    kind: non-void expression
         | 
| 1168 1231 | 
             
                comment: |
         | 
| 1169 1232 | 
             
                  Represents the use of the `&&=` operator on a call.
         | 
| 1170 1233 |  | 
| @@ -1175,6 +1238,7 @@ nodes: | |
| 1175 1238 | 
             
                fields:
         | 
| 1176 1239 | 
             
                  - name: receiver
         | 
| 1177 1240 | 
             
                    type: node?
         | 
| 1241 | 
            +
                    kind: non-void expression
         | 
| 1178 1242 | 
             
                    comment: |
         | 
| 1179 1243 | 
             
                      The object that the method is being called on. This can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 1180 1244 |  | 
| @@ -1201,6 +1265,9 @@ nodes: | |
| 1201 1265 | 
             
                    type: location?
         | 
| 1202 1266 | 
             
                  - name: block
         | 
| 1203 1267 | 
             
                    type: node?
         | 
| 1268 | 
            +
                    kind:
         | 
| 1269 | 
            +
                      - BlockNode
         | 
| 1270 | 
            +
                      - BlockArgumentNode
         | 
| 1204 1271 | 
             
                comment: |
         | 
| 1205 1272 | 
             
                  Represents a method call, in all of the various forms that can take.
         | 
| 1206 1273 |  | 
| @@ -1226,6 +1293,7 @@ nodes: | |
| 1226 1293 | 
             
                fields:
         | 
| 1227 1294 | 
             
                  - name: receiver
         | 
| 1228 1295 | 
             
                    type: node?
         | 
| 1296 | 
            +
                    kind: non-void expression
         | 
| 1229 1297 | 
             
                  - name: call_operator_loc
         | 
| 1230 1298 | 
             
                    type: location?
         | 
| 1231 1299 | 
             
                  - name: message_loc
         | 
| @@ -1240,6 +1308,7 @@ nodes: | |
| 1240 1308 | 
             
                    type: location
         | 
| 1241 1309 | 
             
                  - name: value
         | 
| 1242 1310 | 
             
                    type: node
         | 
| 1311 | 
            +
                    kind: non-void expression
         | 
| 1243 1312 | 
             
                comment: |
         | 
| 1244 1313 | 
             
                  Represents the use of an assignment operator on a call.
         | 
| 1245 1314 |  | 
| @@ -1250,6 +1319,7 @@ nodes: | |
| 1250 1319 | 
             
                fields:
         | 
| 1251 1320 | 
             
                  - name: receiver
         | 
| 1252 1321 | 
             
                    type: node?
         | 
| 1322 | 
            +
                    kind: non-void expression
         | 
| 1253 1323 | 
             
                  - name: call_operator_loc
         | 
| 1254 1324 | 
             
                    type: location?
         | 
| 1255 1325 | 
             
                  - name: message_loc
         | 
| @@ -1262,6 +1332,7 @@ nodes: | |
| 1262 1332 | 
             
                    type: location
         | 
| 1263 1333 | 
             
                  - name: value
         | 
| 1264 1334 | 
             
                    type: node
         | 
| 1335 | 
            +
                    kind: non-void expression
         | 
| 1265 1336 | 
             
                comment: |
         | 
| 1266 1337 | 
             
                  Represents the use of the `||=` operator on a call.
         | 
| 1267 1338 |  | 
| @@ -1272,6 +1343,7 @@ nodes: | |
| 1272 1343 | 
             
                fields:
         | 
| 1273 1344 | 
             
                  - name: receiver
         | 
| 1274 1345 | 
             
                    type: node
         | 
| 1346 | 
            +
                    kind: non-void expression
         | 
| 1275 1347 | 
             
                  - name: call_operator_loc
         | 
| 1276 1348 | 
             
                    type: location
         | 
| 1277 1349 | 
             
                  - name: name
         | 
| @@ -1295,8 +1367,10 @@ nodes: | |
| 1295 1367 | 
             
                fields:
         | 
| 1296 1368 | 
             
                  - name: value
         | 
| 1297 1369 | 
             
                    type: node
         | 
| 1370 | 
            +
                    kind: pattern expression
         | 
| 1298 1371 | 
             
                  - name: target
         | 
| 1299 1372 | 
             
                    type: node
         | 
| 1373 | 
            +
                    kind: LocalVariableTargetNode
         | 
| 1300 1374 | 
             
                  - name: operator_loc
         | 
| 1301 1375 | 
             
                    type: location
         | 
| 1302 1376 | 
             
                comment: |
         | 
| @@ -1308,8 +1382,10 @@ nodes: | |
| 1308 1382 | 
             
                fields:
         | 
| 1309 1383 | 
             
                  - name: predicate
         | 
| 1310 1384 | 
             
                    type: node?
         | 
| 1385 | 
            +
                    kind: non-void expression
         | 
| 1311 1386 | 
             
                  - name: conditions
         | 
| 1312 1387 | 
             
                    type: node[]
         | 
| 1388 | 
            +
                    kind: InNode
         | 
| 1313 1389 | 
             
                  - name: else_clause
         | 
| 1314 1390 | 
             
                    type: node?
         | 
| 1315 1391 | 
             
                    kind: ElseNode
         | 
| @@ -1328,8 +1404,10 @@ nodes: | |
| 1328 1404 | 
             
                fields:
         | 
| 1329 1405 | 
             
                  - name: predicate
         | 
| 1330 1406 | 
             
                    type: node?
         | 
| 1407 | 
            +
                    kind: non-void expression
         | 
| 1331 1408 | 
             
                  - name: conditions
         | 
| 1332 1409 | 
             
                    type: node[]
         | 
| 1410 | 
            +
                    kind: WhenNode
         | 
| 1333 1411 | 
             
                  - name: else_clause
         | 
| 1334 1412 | 
             
                    type: node?
         | 
| 1335 1413 | 
             
                    kind: ElseNode
         | 
| @@ -1352,12 +1430,20 @@ nodes: | |
| 1352 1430 | 
             
                    type: location
         | 
| 1353 1431 | 
             
                  - name: constant_path
         | 
| 1354 1432 | 
             
                    type: node
         | 
| 1433 | 
            +
                    kind:
         | 
| 1434 | 
            +
                      - ConstantReadNode
         | 
| 1435 | 
            +
                      - ConstantPathNode
         | 
| 1436 | 
            +
                      - on error: CallNode # class 0.X end
         | 
| 1355 1437 | 
             
                  - name: inheritance_operator_loc
         | 
| 1356 1438 | 
             
                    type: location?
         | 
| 1357 1439 | 
             
                  - name: superclass
         | 
| 1358 1440 | 
             
                    type: node?
         | 
| 1441 | 
            +
                    kind: non-void expression
         | 
| 1359 1442 | 
             
                  - name: body
         | 
| 1360 1443 | 
             
                    type: node?
         | 
| 1444 | 
            +
                    kind:
         | 
| 1445 | 
            +
                      - StatementsNode
         | 
| 1446 | 
            +
                      - BeginNode
         | 
| 1361 1447 | 
             
                  - name: end_keyword_loc
         | 
| 1362 1448 | 
             
                    type: location
         | 
| 1363 1449 | 
             
                  - name: name
         | 
| @@ -1377,6 +1463,7 @@ nodes: | |
| 1377 1463 | 
             
                    type: location
         | 
| 1378 1464 | 
             
                  - name: value
         | 
| 1379 1465 | 
             
                    type: node
         | 
| 1466 | 
            +
                    kind: non-void expression
         | 
| 1380 1467 | 
             
                comment: |
         | 
| 1381 1468 | 
             
                  Represents the use of the `&&=` operator for assignment to a class variable.
         | 
| 1382 1469 |  | 
| @@ -1392,6 +1479,7 @@ nodes: | |
| 1392 1479 | 
             
                    type: location
         | 
| 1393 1480 | 
             
                  - name: value
         | 
| 1394 1481 | 
             
                    type: node
         | 
| 1482 | 
            +
                    kind: non-void expression
         | 
| 1395 1483 | 
             
                  - name: binary_operator
         | 
| 1396 1484 | 
             
                    type: constant
         | 
| 1397 1485 | 
             
                comment: |
         | 
| @@ -1409,6 +1497,7 @@ nodes: | |
| 1409 1497 | 
             
                    type: location
         | 
| 1410 1498 | 
             
                  - name: value
         | 
| 1411 1499 | 
             
                    type: node
         | 
| 1500 | 
            +
                    kind: non-void expression
         | 
| 1412 1501 | 
             
                comment: |
         | 
| 1413 1502 | 
             
                  Represents the use of the `||=` operator for assignment to a class variable.
         | 
| 1414 1503 |  | 
| @@ -1457,6 +1546,7 @@ nodes: | |
| 1457 1546 | 
             
                          ^^^^^
         | 
| 1458 1547 | 
             
                  - name: value
         | 
| 1459 1548 | 
             
                    type: node
         | 
| 1549 | 
            +
                    kind: non-void expression
         | 
| 1460 1550 | 
             
                    comment: |
         | 
| 1461 1551 | 
             
                      The value to write to the class variable. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 1462 1552 |  | 
| @@ -1487,6 +1577,7 @@ nodes: | |
| 1487 1577 | 
             
                    type: location
         | 
| 1488 1578 | 
             
                  - name: value
         | 
| 1489 1579 | 
             
                    type: node
         | 
| 1580 | 
            +
                    kind: non-void expression
         | 
| 1490 1581 | 
             
                comment: |
         | 
| 1491 1582 | 
             
                  Represents the use of the `&&=` operator for assignment to a constant.
         | 
| 1492 1583 |  | 
| @@ -1502,6 +1593,7 @@ nodes: | |
| 1502 1593 | 
             
                    type: location
         | 
| 1503 1594 | 
             
                  - name: value
         | 
| 1504 1595 | 
             
                    type: node
         | 
| 1596 | 
            +
                    kind: non-void expression
         | 
| 1505 1597 | 
             
                  - name: binary_operator
         | 
| 1506 1598 | 
             
                    type: constant
         | 
| 1507 1599 | 
             
                comment: |
         | 
| @@ -1519,6 +1611,7 @@ nodes: | |
| 1519 1611 | 
             
                    type: location
         | 
| 1520 1612 | 
             
                  - name: value
         | 
| 1521 1613 | 
             
                    type: node
         | 
| 1614 | 
            +
                    kind: non-void expression
         | 
| 1522 1615 | 
             
                comment: |
         | 
| 1523 1616 | 
             
                  Represents the use of the `||=` operator for assignment to a constant.
         | 
| 1524 1617 |  | 
| @@ -1533,6 +1626,7 @@ nodes: | |
| 1533 1626 | 
             
                    type: location
         | 
| 1534 1627 | 
             
                  - name: value
         | 
| 1535 1628 | 
             
                    type: node
         | 
| 1629 | 
            +
                    kind: non-void expression
         | 
| 1536 1630 | 
             
                comment: |
         | 
| 1537 1631 | 
             
                  Represents the use of the `&&=` operator for assignment to a constant path.
         | 
| 1538 1632 |  | 
| @@ -1542,6 +1636,7 @@ nodes: | |
| 1542 1636 | 
             
                fields:
         | 
| 1543 1637 | 
             
                  - name: parent
         | 
| 1544 1638 | 
             
                    type: node?
         | 
| 1639 | 
            +
                    kind: non-void expression
         | 
| 1545 1640 | 
             
                    comment: |
         | 
| 1546 1641 | 
             
                      The left-hand node of the path, if present. It can be `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). It will be `nil` when the constant lookup is at the root of the module tree.
         | 
| 1547 1642 |  | 
| @@ -1590,6 +1685,7 @@ nodes: | |
| 1590 1685 | 
             
                    type: location
         | 
| 1591 1686 | 
             
                  - name: value
         | 
| 1592 1687 | 
             
                    type: node
         | 
| 1688 | 
            +
                    kind: non-void expression
         | 
| 1593 1689 | 
             
                  - name: binary_operator
         | 
| 1594 1690 | 
             
                    type: constant
         | 
| 1595 1691 | 
             
                comment: |
         | 
| @@ -1606,6 +1702,7 @@ nodes: | |
| 1606 1702 | 
             
                    type: location
         | 
| 1607 1703 | 
             
                  - name: value
         | 
| 1608 1704 | 
             
                    type: node
         | 
| 1705 | 
            +
                    kind: non-void expression
         | 
| 1609 1706 | 
             
                comment: |
         | 
| 1610 1707 | 
             
                  Represents the use of the `||=` operator for assignment to a constant path.
         | 
| 1611 1708 |  | 
| @@ -1615,6 +1712,7 @@ nodes: | |
| 1615 1712 | 
             
                fields:
         | 
| 1616 1713 | 
             
                  - name: parent
         | 
| 1617 1714 | 
             
                    type: node?
         | 
| 1715 | 
            +
                    kind: non-void expression
         | 
| 1618 1716 | 
             
                  - name: name
         | 
| 1619 1717 | 
             
                    type: constant?
         | 
| 1620 1718 | 
             
                  - name: delimiter_loc
         | 
| @@ -1648,6 +1746,7 @@ nodes: | |
| 1648 1746 | 
             
                                ^
         | 
| 1649 1747 | 
             
                  - name: value
         | 
| 1650 1748 | 
             
                    type: node
         | 
| 1749 | 
            +
                    kind: non-void expression
         | 
| 1651 1750 | 
             
                    comment: |
         | 
| 1652 1751 | 
             
                      The value to write to the constant path. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 1653 1752 |  | 
| @@ -1707,6 +1806,7 @@ nodes: | |
| 1707 1806 | 
             
                          ^^^
         | 
| 1708 1807 | 
             
                  - name: value
         | 
| 1709 1808 | 
             
                    type: node
         | 
| 1809 | 
            +
                    kind: non-void expression
         | 
| 1710 1810 | 
             
                    comment: |
         | 
| 1711 1811 | 
             
                      The value to write to the constant. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 1712 1812 |  | 
| @@ -1735,11 +1835,15 @@ nodes: | |
| 1735 1835 | 
             
                    type: location
         | 
| 1736 1836 | 
             
                  - name: receiver
         | 
| 1737 1837 | 
             
                    type: node?
         | 
| 1838 | 
            +
                    kind: non-void expression
         | 
| 1738 1839 | 
             
                  - name: parameters
         | 
| 1739 1840 | 
             
                    type: node?
         | 
| 1740 1841 | 
             
                    kind: ParametersNode
         | 
| 1741 1842 | 
             
                  - name: body
         | 
| 1742 1843 | 
             
                    type: node?
         | 
| 1844 | 
            +
                    kind:
         | 
| 1845 | 
            +
                      - StatementsNode
         | 
| 1846 | 
            +
                      - BeginNode
         | 
| 1743 1847 | 
             
                  - name: locals
         | 
| 1744 1848 | 
             
                    type: constant[]
         | 
| 1745 1849 | 
             
                  - name: def_keyword_loc
         | 
| @@ -1766,6 +1870,7 @@ nodes: | |
| 1766 1870 | 
             
                    type: location?
         | 
| 1767 1871 | 
             
                  - name: value
         | 
| 1768 1872 | 
             
                    type: node
         | 
| 1873 | 
            +
                    kind: Node # More than non-void expression as defined?(return) is allowed, yet defined?(BEGIN{}) is SyntaxError
         | 
| 1769 1874 | 
             
                  - name: rparen_loc
         | 
| 1770 1875 | 
             
                    type: location?
         | 
| 1771 1876 | 
             
                  - name: keyword_loc
         | 
| @@ -1809,6 +1914,12 @@ nodes: | |
| 1809 1914 | 
             
                    type: location
         | 
| 1810 1915 | 
             
                  - name: variable
         | 
| 1811 1916 | 
             
                    type: node
         | 
| 1917 | 
            +
                    kind:
         | 
| 1918 | 
            +
                      - InstanceVariableReadNode
         | 
| 1919 | 
            +
                      - ClassVariableReadNode
         | 
| 1920 | 
            +
                      - GlobalVariableReadNode
         | 
| 1921 | 
            +
                      - BackReferenceReadNode
         | 
| 1922 | 
            +
                      - NumberedReferenceReadNode
         | 
| 1812 1923 | 
             
                comment: |
         | 
| 1813 1924 | 
             
                  Represents an interpolated variable.
         | 
| 1814 1925 |  | 
| @@ -1842,12 +1953,20 @@ nodes: | |
| 1842 1953 | 
             
                fields:
         | 
| 1843 1954 | 
             
                  - name: constant
         | 
| 1844 1955 | 
             
                    type: node?
         | 
| 1956 | 
            +
                    kind:
         | 
| 1957 | 
            +
                      - ConstantReadNode
         | 
| 1958 | 
            +
                      - ConstantPathNode
         | 
| 1845 1959 | 
             
                  - name: left
         | 
| 1846 1960 | 
             
                    type: node
         | 
| 1961 | 
            +
                    kind: SplatNode
         | 
| 1847 1962 | 
             
                  - name: requireds
         | 
| 1848 1963 | 
             
                    type: node[]
         | 
| 1964 | 
            +
                    kind: pattern expression
         | 
| 1849 1965 | 
             
                  - name: right
         | 
| 1850 1966 | 
             
                    type: node
         | 
| 1967 | 
            +
                    kind:
         | 
| 1968 | 
            +
                      - SplatNode
         | 
| 1969 | 
            +
                      - on error: MissingNode
         | 
| 1851 1970 | 
             
                  - name: opening_loc
         | 
| 1852 1971 | 
             
                    type: location?
         | 
| 1853 1972 | 
             
                  - name: closing_loc
         | 
| @@ -1868,8 +1987,10 @@ nodes: | |
| 1868 1987 | 
             
                fields:
         | 
| 1869 1988 | 
             
                  - name: left
         | 
| 1870 1989 | 
             
                    type: node?
         | 
| 1990 | 
            +
                    kind: non-void expression
         | 
| 1871 1991 | 
             
                  - name: right
         | 
| 1872 1992 | 
             
                    type: node?
         | 
| 1993 | 
            +
                    kind: non-void expression
         | 
| 1873 1994 | 
             
                  - name: operator_loc
         | 
| 1874 1995 | 
             
                    type: location
         | 
| 1875 1996 | 
             
                comment: |
         | 
| @@ -1891,6 +2012,19 @@ nodes: | |
| 1891 2012 | 
             
                fields:
         | 
| 1892 2013 | 
             
                  - name: index
         | 
| 1893 2014 | 
             
                    type: node
         | 
| 2015 | 
            +
                    kind:
         | 
| 2016 | 
            +
                      - LocalVariableTargetNode
         | 
| 2017 | 
            +
                      - InstanceVariableTargetNode
         | 
| 2018 | 
            +
                      - ClassVariableTargetNode
         | 
| 2019 | 
            +
                      - GlobalVariableTargetNode
         | 
| 2020 | 
            +
                      - ConstantTargetNode
         | 
| 2021 | 
            +
                      - ConstantPathTargetNode
         | 
| 2022 | 
            +
                      - CallTargetNode
         | 
| 2023 | 
            +
                      - IndexTargetNode
         | 
| 2024 | 
            +
                      - MultiTargetNode
         | 
| 2025 | 
            +
                      - on error: BackReferenceReadNode # for $& in a end
         | 
| 2026 | 
            +
                      - on error: NumberedReferenceReadNode # for $1 in a end
         | 
| 2027 | 
            +
                      - on error: MissingNode # for in 1..10; end
         | 
| 1894 2028 | 
             
                    comment: |
         | 
| 1895 2029 | 
             
                      The index expression for `for` loops.
         | 
| 1896 2030 |  | 
| @@ -1898,6 +2032,7 @@ nodes: | |
| 1898 2032 | 
             
                              ^
         | 
| 1899 2033 | 
             
                  - name: collection
         | 
| 1900 2034 | 
             
                    type: node
         | 
| 2035 | 
            +
                    kind: non-void expression
         | 
| 1901 2036 | 
             
                    comment: |
         | 
| 1902 2037 | 
             
                      The collection to iterate over.
         | 
| 1903 2038 |  | 
| @@ -1981,6 +2116,7 @@ nodes: | |
| 1981 2116 | 
             
                    type: location
         | 
| 1982 2117 | 
             
                  - name: value
         | 
| 1983 2118 | 
             
                    type: node
         | 
| 2119 | 
            +
                    kind: non-void expression
         | 
| 1984 2120 | 
             
                comment: |
         | 
| 1985 2121 | 
             
                  Represents the use of the `&&=` operator for assignment to a global variable.
         | 
| 1986 2122 |  | 
| @@ -1996,6 +2132,7 @@ nodes: | |
| 1996 2132 | 
             
                    type: location
         | 
| 1997 2133 | 
             
                  - name: value
         | 
| 1998 2134 | 
             
                    type: node
         | 
| 2135 | 
            +
                    kind: non-void expression
         | 
| 1999 2136 | 
             
                  - name: binary_operator
         | 
| 2000 2137 | 
             
                    type: constant
         | 
| 2001 2138 | 
             
                comment: |
         | 
| @@ -2013,6 +2150,7 @@ nodes: | |
| 2013 2150 | 
             
                    type: location
         | 
| 2014 2151 | 
             
                  - name: value
         | 
| 2015 2152 | 
             
                    type: node
         | 
| 2153 | 
            +
                    kind: non-void expression
         | 
| 2016 2154 | 
             
                comment: |
         | 
| 2017 2155 | 
             
                  Represents the use of the `||=` operator for assignment to a global variable.
         | 
| 2018 2156 |  | 
| @@ -2061,6 +2199,7 @@ nodes: | |
| 2061 2199 | 
             
                          ^^^^
         | 
| 2062 2200 | 
             
                  - name: value
         | 
| 2063 2201 | 
             
                    type: node
         | 
| 2202 | 
            +
                    kind: non-void expression
         | 
| 2064 2203 | 
             
                    comment: |
         | 
| 2065 2204 | 
             
                      The value to write to the global variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 2066 2205 |  | 
| @@ -2119,6 +2258,9 @@ nodes: | |
| 2119 2258 | 
             
                fields:
         | 
| 2120 2259 | 
             
                  - name: constant
         | 
| 2121 2260 | 
             
                    type: node?
         | 
| 2261 | 
            +
                    kind:
         | 
| 2262 | 
            +
                      - ConstantReadNode
         | 
| 2263 | 
            +
                      - ConstantPathNode
         | 
| 2122 2264 | 
             
                  - name: elements
         | 
| 2123 2265 | 
             
                    type: node[]
         | 
| 2124 2266 | 
             
                    kind: AssocNode
         | 
| @@ -2152,6 +2294,7 @@ nodes: | |
| 2152 2294 | 
             
                      The `if_keyword_loc` field will be `nil` when the `IfNode` represents a ternary expression.
         | 
| 2153 2295 | 
             
                  - name: predicate
         | 
| 2154 2296 | 
             
                    type: node
         | 
| 2297 | 
            +
                    kind: non-void expression
         | 
| 2155 2298 | 
             
                    comment: |
         | 
| 2156 2299 | 
             
                      The node for the condition the `IfNode` is testing.
         | 
| 2157 2300 |  | 
| @@ -2244,6 +2387,11 @@ nodes: | |
| 2244 2387 | 
             
                fields:
         | 
| 2245 2388 | 
             
                  - name: value
         | 
| 2246 2389 | 
             
                    type: node
         | 
| 2390 | 
            +
                    kind:
         | 
| 2391 | 
            +
                      - LocalVariableReadNode
         | 
| 2392 | 
            +
                      - CallNode
         | 
| 2393 | 
            +
                      - ConstantReadNode
         | 
| 2394 | 
            +
                      - LocalVariableTargetNode
         | 
| 2247 2395 | 
             
                comment: |
         | 
| 2248 2396 | 
             
                  Represents a node that is implicitly being added to the tree but doesn't correspond directly to a node in the source.
         | 
| 2249 2397 |  | 
| @@ -2274,6 +2422,7 @@ nodes: | |
| 2274 2422 | 
             
                fields:
         | 
| 2275 2423 | 
             
                  - name: pattern
         | 
| 2276 2424 | 
             
                    type: node
         | 
| 2425 | 
            +
                    kind: pattern expression
         | 
| 2277 2426 | 
             
                  - name: statements
         | 
| 2278 2427 | 
             
                    type: node?
         | 
| 2279 2428 | 
             
                    kind: StatementsNode
         | 
| @@ -2291,6 +2440,7 @@ nodes: | |
| 2291 2440 | 
             
                fields:
         | 
| 2292 2441 | 
             
                  - name: receiver
         | 
| 2293 2442 | 
             
                    type: node?
         | 
| 2443 | 
            +
                    kind: non-void expression
         | 
| 2294 2444 | 
             
                  - name: call_operator_loc
         | 
| 2295 2445 | 
             
                    type: location?
         | 
| 2296 2446 | 
             
                  - name: opening_loc
         | 
| @@ -2302,10 +2452,12 @@ nodes: | |
| 2302 2452 | 
             
                    type: location
         | 
| 2303 2453 | 
             
                  - name: block
         | 
| 2304 2454 | 
             
                    type: node?
         | 
| 2455 | 
            +
                    kind: BlockArgumentNode # foo[&b] &&= value, only valid on Ruby < 3.4
         | 
| 2305 2456 | 
             
                  - name: operator_loc
         | 
| 2306 2457 | 
             
                    type: location
         | 
| 2307 2458 | 
             
                  - name: value
         | 
| 2308 2459 | 
             
                    type: node
         | 
| 2460 | 
            +
                    kind: non-void expression
         | 
| 2309 2461 | 
             
                comment: |
         | 
| 2310 2462 | 
             
                  Represents the use of the `&&=` operator on a call to the `[]` method.
         | 
| 2311 2463 |  | 
| @@ -2316,6 +2468,7 @@ nodes: | |
| 2316 2468 | 
             
                fields:
         | 
| 2317 2469 | 
             
                  - name: receiver
         | 
| 2318 2470 | 
             
                    type: node?
         | 
| 2471 | 
            +
                    kind: non-void expression
         | 
| 2319 2472 | 
             
                  - name: call_operator_loc
         | 
| 2320 2473 | 
             
                    type: location?
         | 
| 2321 2474 | 
             
                  - name: opening_loc
         | 
| @@ -2327,12 +2480,14 @@ nodes: | |
| 2327 2480 | 
             
                    type: location
         | 
| 2328 2481 | 
             
                  - name: block
         | 
| 2329 2482 | 
             
                    type: node?
         | 
| 2483 | 
            +
                    kind: BlockArgumentNode # foo[&b] += value, only valid on Ruby < 3.4
         | 
| 2330 2484 | 
             
                  - name: binary_operator
         | 
| 2331 2485 | 
             
                    type: constant
         | 
| 2332 2486 | 
             
                  - name: binary_operator_loc
         | 
| 2333 2487 | 
             
                    type: location
         | 
| 2334 2488 | 
             
                  - name: value
         | 
| 2335 2489 | 
             
                    type: node
         | 
| 2490 | 
            +
                    kind: non-void expression
         | 
| 2336 2491 | 
             
                comment: |
         | 
| 2337 2492 | 
             
                  Represents the use of an assignment operator on a call to `[]`.
         | 
| 2338 2493 |  | 
| @@ -2343,6 +2498,7 @@ nodes: | |
| 2343 2498 | 
             
                fields:
         | 
| 2344 2499 | 
             
                  - name: receiver
         | 
| 2345 2500 | 
             
                    type: node?
         | 
| 2501 | 
            +
                    kind: non-void expression
         | 
| 2346 2502 | 
             
                  - name: call_operator_loc
         | 
| 2347 2503 | 
             
                    type: location?
         | 
| 2348 2504 | 
             
                  - name: opening_loc
         | 
| @@ -2354,10 +2510,12 @@ nodes: | |
| 2354 2510 | 
             
                    type: location
         | 
| 2355 2511 | 
             
                  - name: block
         | 
| 2356 2512 | 
             
                    type: node?
         | 
| 2513 | 
            +
                    kind: BlockArgumentNode # foo[&b] ||= value, only valid on Ruby < 3.4
         | 
| 2357 2514 | 
             
                  - name: operator_loc
         | 
| 2358 2515 | 
             
                    type: location
         | 
| 2359 2516 | 
             
                  - name: value
         | 
| 2360 2517 | 
             
                    type: node
         | 
| 2518 | 
            +
                    kind: non-void expression
         | 
| 2361 2519 | 
             
                comment: |
         | 
| 2362 2520 | 
             
                  Represents the use of the `||=` operator on a call to `[]`.
         | 
| 2363 2521 |  | 
| @@ -2368,6 +2526,7 @@ nodes: | |
| 2368 2526 | 
             
                fields:
         | 
| 2369 2527 | 
             
                  - name: receiver
         | 
| 2370 2528 | 
             
                    type: node
         | 
| 2529 | 
            +
                    kind: non-void expression
         | 
| 2371 2530 | 
             
                  - name: opening_loc
         | 
| 2372 2531 | 
             
                    type: location
         | 
| 2373 2532 | 
             
                  - name: arguments
         | 
| @@ -2377,6 +2536,7 @@ nodes: | |
| 2377 2536 | 
             
                    type: location
         | 
| 2378 2537 | 
             
                  - name: block
         | 
| 2379 2538 | 
             
                    type: node?
         | 
| 2539 | 
            +
                    kind: BlockArgumentNode # foo[&b], = 1, only valid on Ruby < 3.4
         | 
| 2380 2540 | 
             
                comment: |
         | 
| 2381 2541 | 
             
                  Represents assigning to an index.
         | 
| 2382 2542 |  | 
| @@ -2400,6 +2560,7 @@ nodes: | |
| 2400 2560 | 
             
                    type: location
         | 
| 2401 2561 | 
             
                  - name: value
         | 
| 2402 2562 | 
             
                    type: node
         | 
| 2563 | 
            +
                    kind: non-void expression
         | 
| 2403 2564 | 
             
                comment: |
         | 
| 2404 2565 | 
             
                  Represents the use of the `&&=` operator for assignment to an instance variable.
         | 
| 2405 2566 |  | 
| @@ -2415,6 +2576,7 @@ nodes: | |
| 2415 2576 | 
             
                    type: location
         | 
| 2416 2577 | 
             
                  - name: value
         | 
| 2417 2578 | 
             
                    type: node
         | 
| 2579 | 
            +
                    kind: non-void expression
         | 
| 2418 2580 | 
             
                  - name: binary_operator
         | 
| 2419 2581 | 
             
                    type: constant
         | 
| 2420 2582 | 
             
                comment: |
         | 
| @@ -2432,6 +2594,7 @@ nodes: | |
| 2432 2594 | 
             
                    type: location
         | 
| 2433 2595 | 
             
                  - name: value
         | 
| 2434 2596 | 
             
                    type: node
         | 
| 2597 | 
            +
                    kind: non-void expression
         | 
| 2435 2598 | 
             
                comment: |
         | 
| 2436 2599 | 
             
                  Represents the use of the `||=` operator for assignment to an instance variable.
         | 
| 2437 2600 |  | 
| @@ -2480,6 +2643,7 @@ nodes: | |
| 2480 2643 | 
             
                          ^^^
         | 
| 2481 2644 | 
             
                  - name: value
         | 
| 2482 2645 | 
             
                    type: node
         | 
| 2646 | 
            +
                    kind: non-void expression
         | 
| 2483 2647 | 
             
                    comment: |
         | 
| 2484 2648 | 
             
                      The value to write to the instance variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 2485 2649 |  | 
| @@ -2657,8 +2821,15 @@ nodes: | |
| 2657 2821 | 
             
                    type: location
         | 
| 2658 2822 | 
             
                  - name: parameters
         | 
| 2659 2823 | 
             
                    type: node?
         | 
| 2824 | 
            +
                    kind:
         | 
| 2825 | 
            +
                      - BlockParametersNode
         | 
| 2826 | 
            +
                      - NumberedParametersNode
         | 
| 2827 | 
            +
                      - ItParametersNode
         | 
| 2660 2828 | 
             
                  - name: body
         | 
| 2661 2829 | 
             
                    type: node?
         | 
| 2830 | 
            +
                    kind:
         | 
| 2831 | 
            +
                      - StatementsNode
         | 
| 2832 | 
            +
                      - BeginNode
         | 
| 2662 2833 | 
             
                comment: |
         | 
| 2663 2834 | 
             
                  Represents using a lambda literal (not the lambda method call).
         | 
| 2664 2835 |  | 
| @@ -2672,6 +2843,7 @@ nodes: | |
| 2672 2843 | 
             
                    type: location
         | 
| 2673 2844 | 
             
                  - name: value
         | 
| 2674 2845 | 
             
                    type: node
         | 
| 2846 | 
            +
                    kind: non-void expression
         | 
| 2675 2847 | 
             
                  - name: name
         | 
| 2676 2848 | 
             
                    type: constant
         | 
| 2677 2849 | 
             
                  - name: depth
         | 
| @@ -2689,6 +2861,7 @@ nodes: | |
| 2689 2861 | 
             
                    type: location
         | 
| 2690 2862 | 
             
                  - name: value
         | 
| 2691 2863 | 
             
                    type: node
         | 
| 2864 | 
            +
                    kind: non-void expression
         | 
| 2692 2865 | 
             
                  - name: name
         | 
| 2693 2866 | 
             
                    type: constant
         | 
| 2694 2867 | 
             
                  - name: binary_operator
         | 
| @@ -2708,6 +2881,7 @@ nodes: | |
| 2708 2881 | 
             
                    type: location
         | 
| 2709 2882 | 
             
                  - name: value
         | 
| 2710 2883 | 
             
                    type: node
         | 
| 2884 | 
            +
                    kind: non-void expression
         | 
| 2711 2885 | 
             
                  - name: name
         | 
| 2712 2886 | 
             
                    type: constant
         | 
| 2713 2887 | 
             
                  - name: depth
         | 
| @@ -2787,6 +2961,7 @@ nodes: | |
| 2787 2961 | 
             
                          ^^^
         | 
| 2788 2962 | 
             
                  - name: value
         | 
| 2789 2963 | 
             
                    type: node
         | 
| 2964 | 
            +
                    kind: non-void expression
         | 
| 2790 2965 | 
             
                    comment: |
         | 
| 2791 2966 | 
             
                      The value to write to the local variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 2792 2967 |  | 
| @@ -2831,8 +3006,10 @@ nodes: | |
| 2831 3006 | 
             
                fields:
         | 
| 2832 3007 | 
             
                  - name: value
         | 
| 2833 3008 | 
             
                    type: node
         | 
| 3009 | 
            +
                    kind: non-void expression
         | 
| 2834 3010 | 
             
                  - name: pattern
         | 
| 2835 3011 | 
             
                    type: node
         | 
| 3012 | 
            +
                    kind: pattern expression
         | 
| 2836 3013 | 
             
                  - name: operator_loc
         | 
| 2837 3014 | 
             
                    type: location
         | 
| 2838 3015 | 
             
                comment: |
         | 
| @@ -2844,8 +3021,10 @@ nodes: | |
| 2844 3021 | 
             
                fields:
         | 
| 2845 3022 | 
             
                  - name: value
         | 
| 2846 3023 | 
             
                    type: node
         | 
| 3024 | 
            +
                    kind: non-void expression
         | 
| 2847 3025 | 
             
                  - name: pattern
         | 
| 2848 3026 | 
             
                    type: node
         | 
| 3027 | 
            +
                    kind: pattern expression
         | 
| 2849 3028 | 
             
                  - name: operator_loc
         | 
| 2850 3029 | 
             
                    type: location
         | 
| 2851 3030 | 
             
                comment: |
         | 
| @@ -2877,8 +3056,15 @@ nodes: | |
| 2877 3056 | 
             
                    type: location
         | 
| 2878 3057 | 
             
                  - name: constant_path
         | 
| 2879 3058 | 
             
                    type: node
         | 
| 3059 | 
            +
                    kind:
         | 
| 3060 | 
            +
                      - ConstantReadNode
         | 
| 3061 | 
            +
                      - ConstantPathNode
         | 
| 3062 | 
            +
                      - on error: MissingNode # module Parent module end
         | 
| 2880 3063 | 
             
                  - name: body
         | 
| 2881 3064 | 
             
                    type: node?
         | 
| 3065 | 
            +
                    kind:
         | 
| 3066 | 
            +
                      - StatementsNode
         | 
| 3067 | 
            +
                      - BeginNode
         | 
| 2882 3068 | 
             
                  - name: end_keyword_loc
         | 
| 2883 3069 | 
             
                    type: location
         | 
| 2884 3070 | 
             
                  - name: name
         | 
| @@ -2902,9 +3088,9 @@ nodes: | |
| 2902 3088 | 
             
                      - CallTargetNode
         | 
| 2903 3089 | 
             
                      - IndexTargetNode
         | 
| 2904 3090 | 
             
                      - MultiTargetNode
         | 
| 2905 | 
            -
                      - RequiredParameterNode
         | 
| 2906 | 
            -
                      - BackReferenceReadNode #  | 
| 2907 | 
            -
                      - NumberedReferenceReadNode #  | 
| 3091 | 
            +
                      - RequiredParameterNode # def m((a,b)); end
         | 
| 3092 | 
            +
                      - on error: BackReferenceReadNode # a, (b, $&) = z
         | 
| 3093 | 
            +
                      - on error: NumberedReferenceReadNode # a, (b, $1) = z
         | 
| 2908 3094 | 
             
                    comment: |
         | 
| 2909 3095 | 
             
                      Represents the targets expressions before a splat node.
         | 
| 2910 3096 |  | 
| @@ -2931,7 +3117,7 @@ nodes: | |
| 2931 3117 | 
             
                          a, (b, *) = 1, 2, 3, 4
         | 
| 2932 3118 | 
             
                                 ^
         | 
| 2933 3119 |  | 
| 2934 | 
            -
                      If the `*` is omitted,  | 
| 3120 | 
            +
                      If the `*` is omitted, this field will contain an `ImplicitRestNode`
         | 
| 2935 3121 |  | 
| 2936 3122 | 
             
                          a, (b,) = 1, 2, 3, 4
         | 
| 2937 3123 | 
             
                               ^
         | 
| @@ -2947,8 +3133,9 @@ nodes: | |
| 2947 3133 | 
             
                      - CallTargetNode
         | 
| 2948 3134 | 
             
                      - IndexTargetNode
         | 
| 2949 3135 | 
             
                      - MultiTargetNode
         | 
| 2950 | 
            -
                      - RequiredParameterNode
         | 
| 2951 | 
            -
                      - BackReferenceReadNode #  | 
| 3136 | 
            +
                      - RequiredParameterNode # def m((*,b)); end
         | 
| 3137 | 
            +
                      - on error: BackReferenceReadNode # a, (*, $&) = z
         | 
| 3138 | 
            +
                      - on error: NumberedReferenceReadNode # a, (*, $1) = z
         | 
| 2952 3139 | 
             
                    comment: |
         | 
| 2953 3140 | 
             
                      Represents the targets expressions after a splat node.
         | 
| 2954 3141 |  | 
| @@ -2992,6 +3179,8 @@ nodes: | |
| 2992 3179 | 
             
                      - CallTargetNode
         | 
| 2993 3180 | 
             
                      - IndexTargetNode
         | 
| 2994 3181 | 
             
                      - MultiTargetNode
         | 
| 3182 | 
            +
                      - on error: BackReferenceReadNode # $&, = z
         | 
| 3183 | 
            +
                      - on error: NumberedReferenceReadNode # $1, = z
         | 
| 2995 3184 | 
             
                    comment: |
         | 
| 2996 3185 | 
             
                      Represents the targets expressions before a splat node.
         | 
| 2997 3186 |  | 
| @@ -3018,7 +3207,7 @@ nodes: | |
| 3018 3207 | 
             
                          a, b, * = 1, 2, 3, 4
         | 
| 3019 3208 | 
             
                                ^
         | 
| 3020 3209 |  | 
| 3021 | 
            -
                      If the `*` is omitted,  | 
| 3210 | 
            +
                      If the `*` is omitted, this field will contain an `ImplicitRestNode`
         | 
| 3022 3211 |  | 
| 3023 3212 | 
             
                          a, b, = 1, 2, 3, 4
         | 
| 3024 3213 | 
             
                              ^
         | 
| @@ -3034,6 +3223,8 @@ nodes: | |
| 3034 3223 | 
             
                      - CallTargetNode
         | 
| 3035 3224 | 
             
                      - IndexTargetNode
         | 
| 3036 3225 | 
             
                      - MultiTargetNode
         | 
| 3226 | 
            +
                      - on error: BackReferenceReadNode # *, $& = z
         | 
| 3227 | 
            +
                      - on error: NumberedReferenceReadNode # *, $1 = z
         | 
| 3037 3228 | 
             
                    comment: |
         | 
| 3038 3229 | 
             
                      Represents the targets expressions after a splat node.
         | 
| 3039 3230 |  | 
| @@ -3062,6 +3253,7 @@ nodes: | |
| 3062 3253 | 
             
                                  ^
         | 
| 3063 3254 | 
             
                  - name: value
         | 
| 3064 3255 | 
             
                    type: node
         | 
| 3256 | 
            +
                    kind: non-void expression
         | 
| 3065 3257 | 
             
                    comment: |
         | 
| 3066 3258 | 
             
                      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).
         | 
| 3067 3259 |  | 
| @@ -3137,6 +3329,7 @@ nodes: | |
| 3137 3329 | 
             
                    type: location
         | 
| 3138 3330 | 
             
                  - name: value
         | 
| 3139 3331 | 
             
                    type: node
         | 
| 3332 | 
            +
                    kind: non-void expression
         | 
| 3140 3333 | 
             
                comment: |
         | 
| 3141 3334 | 
             
                  Represents an optional keyword parameter to a method, block, or lambda definition.
         | 
| 3142 3335 |  | 
| @@ -3154,6 +3347,7 @@ nodes: | |
| 3154 3347 | 
             
                    type: location
         | 
| 3155 3348 | 
             
                  - name: value
         | 
| 3156 3349 | 
             
                    type: node
         | 
| 3350 | 
            +
                    kind: non-void expression
         | 
| 3157 3351 | 
             
                comment: |
         | 
| 3158 3352 | 
             
                  Represents an optional parameter to a method, block, or lambda definition.
         | 
| 3159 3353 |  | 
| @@ -3164,6 +3358,7 @@ nodes: | |
| 3164 3358 | 
             
                fields:
         | 
| 3165 3359 | 
             
                  - name: left
         | 
| 3166 3360 | 
             
                    type: node
         | 
| 3361 | 
            +
                    kind: non-void expression
         | 
| 3167 3362 | 
             
                    comment: |
         | 
| 3168 3363 | 
             
                      Represents the left side of the expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 3169 3364 |  | 
| @@ -3174,8 +3369,9 @@ nodes: | |
| 3174 3369 | 
             
                          ^
         | 
| 3175 3370 | 
             
                  - name: right
         | 
| 3176 3371 | 
             
                    type: node
         | 
| 3372 | 
            +
                    kind: Node
         | 
| 3177 3373 | 
             
                    comment: |
         | 
| 3178 | 
            -
                      Represents the right side of the expression. | 
| 3374 | 
            +
                      Represents the right side of the expression.
         | 
| 3179 3375 |  | 
| 3180 3376 | 
             
                          left || right
         | 
| 3181 3377 | 
             
                                  ^^^^^
         | 
| @@ -3215,10 +3411,10 @@ nodes: | |
| 3215 3411 | 
             
                      - RequiredParameterNode
         | 
| 3216 3412 | 
             
                      - MultiTargetNode
         | 
| 3217 3413 | 
             
                      # On parsing error of `f(**kwargs, ...)` or `f(**nil, ...)`, the keyword_rest value is moved here:
         | 
| 3218 | 
            -
                      - KeywordRestParameterNode
         | 
| 3219 | 
            -
                      - NoKeywordsParameterNode
         | 
| 3414 | 
            +
                      - on error: KeywordRestParameterNode
         | 
| 3415 | 
            +
                      - on error: NoKeywordsParameterNode
         | 
| 3220 3416 | 
             
                      # On parsing error of `f(..., ...)`, the first forwarding parameter is moved here:
         | 
| 3221 | 
            -
                      - ForwardingParameterNode
         | 
| 3417 | 
            +
                      - on error: ForwardingParameterNode
         | 
| 3222 3418 | 
             
                  - name: keywords
         | 
| 3223 3419 | 
             
                    type: node[]
         | 
| 3224 3420 | 
             
                    kind:
         | 
| @@ -3243,6 +3439,7 @@ nodes: | |
| 3243 3439 | 
             
                fields:
         | 
| 3244 3440 | 
             
                  - name: body
         | 
| 3245 3441 | 
             
                    type: node?
         | 
| 3442 | 
            +
                    kind: non-void expression # Usually a StatementsNode but not always e.g. `1 in (..10)`
         | 
| 3246 3443 | 
             
                  - name: opening_loc
         | 
| 3247 3444 | 
             
                    type: location
         | 
| 3248 3445 | 
             
                  - name: closing_loc
         | 
| @@ -3257,6 +3454,7 @@ nodes: | |
| 3257 3454 | 
             
                fields:
         | 
| 3258 3455 | 
             
                  - name: expression
         | 
| 3259 3456 | 
             
                    type: node
         | 
| 3457 | 
            +
                    kind: non-void expression
         | 
| 3260 3458 | 
             
                  - name: operator_loc
         | 
| 3261 3459 | 
             
                    type: location
         | 
| 3262 3460 | 
             
                  - name: lparen_loc
         | 
| @@ -3272,6 +3470,15 @@ nodes: | |
| 3272 3470 | 
             
                fields:
         | 
| 3273 3471 | 
             
                  - name: variable
         | 
| 3274 3472 | 
             
                    type: node
         | 
| 3473 | 
            +
                    kind:
         | 
| 3474 | 
            +
                      - LocalVariableReadNode
         | 
| 3475 | 
            +
                      - InstanceVariableReadNode
         | 
| 3476 | 
            +
                      - ClassVariableReadNode
         | 
| 3477 | 
            +
                      - GlobalVariableReadNode # foo in ^$a
         | 
| 3478 | 
            +
                      - BackReferenceReadNode # foo in ^$&
         | 
| 3479 | 
            +
                      - NumberedReferenceReadNode # foo in ^$1
         | 
| 3480 | 
            +
                      - ItLocalVariableReadNode # proc { 1 in ^it }
         | 
| 3481 | 
            +
                      - on error: MissingNode # foo in ^Bar
         | 
| 3275 3482 | 
             
                  - name: operator_loc
         | 
| 3276 3483 | 
             
                    type: location
         | 
| 3277 3484 | 
             
                comment: |
         | 
| @@ -3324,6 +3531,7 @@ nodes: | |
| 3324 3531 | 
             
                fields:
         | 
| 3325 3532 | 
             
                  - name: left
         | 
| 3326 3533 | 
             
                    type: node?
         | 
| 3534 | 
            +
                    kind: non-void expression
         | 
| 3327 3535 | 
             
                    comment: |
         | 
| 3328 3536 | 
             
                      The left-hand side of the range, if present. It can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 3329 3537 |  | 
| @@ -3334,6 +3542,7 @@ nodes: | |
| 3334 3542 | 
             
                          ^^^^^
         | 
| 3335 3543 | 
             
                  - name: right
         | 
| 3336 3544 | 
             
                    type: node?
         | 
| 3545 | 
            +
                    kind: non-void expression
         | 
| 3337 3546 | 
             
                    comment: |
         | 
| 3338 3547 | 
             
                      The right-hand side of the range, if present. It can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 3339 3548 |  | 
| @@ -3425,10 +3634,12 @@ nodes: | |
| 3425 3634 | 
             
                fields:
         | 
| 3426 3635 | 
             
                  - name: expression
         | 
| 3427 3636 | 
             
                    type: node
         | 
| 3637 | 
            +
                    kind: Node
         | 
| 3428 3638 | 
             
                  - name: keyword_loc
         | 
| 3429 3639 | 
             
                    type: location
         | 
| 3430 3640 | 
             
                  - name: rescue_expression
         | 
| 3431 3641 | 
             
                    type: node
         | 
| 3642 | 
            +
                    kind: Node
         | 
| 3432 3643 | 
             
                newline: expression
         | 
| 3433 3644 | 
             
                comment: |
         | 
| 3434 3645 | 
             
                  Represents an expression modified with a rescue.
         | 
| @@ -3441,10 +3652,23 @@ nodes: | |
| 3441 3652 | 
             
                    type: location
         | 
| 3442 3653 | 
             
                  - name: exceptions
         | 
| 3443 3654 | 
             
                    type: node[]
         | 
| 3655 | 
            +
                    kind: non-void expression
         | 
| 3444 3656 | 
             
                  - name: operator_loc
         | 
| 3445 3657 | 
             
                    type: location?
         | 
| 3446 3658 | 
             
                  - name: reference
         | 
| 3447 3659 | 
             
                    type: node?
         | 
| 3660 | 
            +
                    kind:
         | 
| 3661 | 
            +
                      - LocalVariableTargetNode
         | 
| 3662 | 
            +
                      - InstanceVariableTargetNode
         | 
| 3663 | 
            +
                      - ClassVariableTargetNode
         | 
| 3664 | 
            +
                      - GlobalVariableTargetNode
         | 
| 3665 | 
            +
                      - ConstantTargetNode
         | 
| 3666 | 
            +
                      - ConstantPathTargetNode
         | 
| 3667 | 
            +
                      - CallTargetNode
         | 
| 3668 | 
            +
                      - IndexTargetNode
         | 
| 3669 | 
            +
                      - on error: BackReferenceReadNode # => begin; rescue => $&; end
         | 
| 3670 | 
            +
                      - on error: NumberedReferenceReadNode # => begin; rescue => $1; end
         | 
| 3671 | 
            +
                      - on error: MissingNode # begin; rescue =>; end
         | 
| 3448 3672 | 
             
                  - name: statements
         | 
| 3449 3673 | 
             
                    type: node?
         | 
| 3450 3674 | 
             
                    kind: StatementsNode
         | 
| @@ -3531,8 +3755,12 @@ nodes: | |
| 3531 3755 | 
             
                    type: location
         | 
| 3532 3756 | 
             
                  - name: expression
         | 
| 3533 3757 | 
             
                    type: node
         | 
| 3758 | 
            +
                    kind: non-void expression
         | 
| 3534 3759 | 
             
                  - name: body
         | 
| 3535 3760 | 
             
                    type: node?
         | 
| 3761 | 
            +
                    kind:
         | 
| 3762 | 
            +
                      - StatementsNode
         | 
| 3763 | 
            +
                      - BeginNode
         | 
| 3536 3764 | 
             
                  - name: end_keyword_loc
         | 
| 3537 3765 | 
             
                    type: location
         | 
| 3538 3766 | 
             
                comment: |
         | 
| @@ -3569,6 +3797,7 @@ nodes: | |
| 3569 3797 | 
             
                    type: location
         | 
| 3570 3798 | 
             
                  - name: expression
         | 
| 3571 3799 | 
             
                    type: node?
         | 
| 3800 | 
            +
                    kind: non-void expression
         | 
| 3572 3801 | 
             
                comment: |
         | 
| 3573 3802 | 
             
                  Represents the use of the splat operator.
         | 
| 3574 3803 |  | 
| @@ -3578,6 +3807,7 @@ nodes: | |
| 3578 3807 | 
             
                fields:
         | 
| 3579 3808 | 
             
                  - name: body
         | 
| 3580 3809 | 
             
                    type: node[]
         | 
| 3810 | 
            +
                    kind: Node
         | 
| 3581 3811 | 
             
                comment: |
         | 
| 3582 3812 | 
             
                  Represents a set of statements contained within some scope.
         | 
| 3583 3813 |  | 
| @@ -3618,6 +3848,9 @@ nodes: | |
| 3618 3848 | 
             
                    type: location?
         | 
| 3619 3849 | 
             
                  - name: block
         | 
| 3620 3850 | 
             
                    type: node?
         | 
| 3851 | 
            +
                    kind:
         | 
| 3852 | 
            +
                      - BlockNode
         | 
| 3853 | 
            +
                      - BlockArgumentNode
         | 
| 3621 3854 | 
             
                comment: |
         | 
| 3622 3855 | 
             
                  Represents the use of the `super` keyword with parentheses or arguments.
         | 
| 3623 3856 |  | 
| @@ -3679,6 +3912,7 @@ nodes: | |
| 3679 3912 | 
             
                              ^^^^^^
         | 
| 3680 3913 | 
             
                  - name: predicate
         | 
| 3681 3914 | 
             
                    type: node
         | 
| 3915 | 
            +
                    kind: non-void expression
         | 
| 3682 3916 | 
             
                    comment: |
         | 
| 3683 3917 | 
             
                      The condition to be evaluated for the unless expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
         | 
| 3684 3918 |  | 
| @@ -3736,6 +3970,7 @@ nodes: | |
| 3736 3970 | 
             
                    type: location?
         | 
| 3737 3971 | 
             
                  - name: predicate
         | 
| 3738 3972 | 
             
                    type: node
         | 
| 3973 | 
            +
                    kind: non-void expression
         | 
| 3739 3974 | 
             
                  - name: statements
         | 
| 3740 3975 | 
             
                    type: node?
         | 
| 3741 3976 | 
             
                    kind: StatementsNode
         | 
| @@ -3754,6 +3989,7 @@ nodes: | |
| 3754 3989 | 
             
                    type: location
         | 
| 3755 3990 | 
             
                  - name: conditions
         | 
| 3756 3991 | 
             
                    type: node[]
         | 
| 3992 | 
            +
                    kind: non-void expression
         | 
| 3757 3993 | 
             
                  - name: then_keyword_loc
         | 
| 3758 3994 | 
             
                    type: location?
         | 
| 3759 3995 | 
             
                  - name: statements
         | 
| @@ -3775,6 +4011,7 @@ nodes: | |
| 3775 4011 | 
             
                    type: location?
         | 
| 3776 4012 | 
             
                  - name: predicate
         | 
| 3777 4013 | 
             
                    type: node
         | 
| 4014 | 
            +
                    kind: non-void expression
         | 
| 3778 4015 | 
             
                  - name: statements
         | 
| 3779 4016 | 
             
                    type: node?
         | 
| 3780 4017 | 
             
                    kind: StatementsNode
         |