prism 0.28.0 → 0.30.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 +41 -1
- data/CONTRIBUTING.md +0 -4
- data/README.md +1 -0
- data/config.yml +95 -26
- data/docs/fuzzing.md +1 -1
- data/docs/ripper_translation.md +22 -0
- data/ext/prism/api_node.c +70 -52
- data/ext/prism/extconf.rb +27 -23
- data/ext/prism/extension.c +107 -372
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +170 -102
- data/include/prism/diagnostic.h +18 -3
- data/include/prism/node.h +0 -21
- data/include/prism/parser.h +23 -25
- data/include/prism/regexp.h +17 -8
- data/include/prism/static_literals.h +3 -2
- data/include/prism/util/pm_char.h +1 -2
- data/include/prism/util/pm_constant_pool.h +0 -8
- data/include/prism/util/pm_integer.h +16 -9
- data/include/prism/util/pm_string.h +0 -8
- data/include/prism/version.h +2 -2
- data/include/prism.h +0 -11
- data/lib/prism/compiler.rb +3 -0
- data/lib/prism/desugar_compiler.rb +4 -4
- data/lib/prism/dispatcher.rb +14 -0
- data/lib/prism/dot_visitor.rb +54 -35
- data/lib/prism/dsl.rb +23 -18
- data/lib/prism/ffi.rb +25 -4
- data/lib/prism/inspect_visitor.rb +26 -24
- data/lib/prism/mutation_compiler.rb +6 -1
- data/lib/prism/node.rb +314 -389
- data/lib/prism/node_ext.rb +175 -17
- data/lib/prism/parse_result/comments.rb +1 -8
- data/lib/prism/parse_result/newlines.rb +102 -12
- data/lib/prism/parse_result.rb +17 -0
- data/lib/prism/reflection.rb +11 -9
- data/lib/prism/serialize.rb +91 -68
- data/lib/prism/translation/parser/compiler.rb +288 -138
- data/lib/prism/translation/parser.rb +7 -2
- data/lib/prism/translation/ripper.rb +24 -22
- data/lib/prism/translation/ruby_parser.rb +32 -14
- data/lib/prism/visitor.rb +3 -0
- data/lib/prism.rb +0 -4
- data/prism.gemspec +2 -4
- data/rbi/prism/node.rbi +114 -57
- data/rbi/prism/node_ext.rbi +5 -0
- data/rbi/prism/parse_result.rbi +1 -1
- data/rbi/prism/visitor.rbi +3 -0
- data/rbi/prism.rbi +6 -0
- data/sig/prism/dsl.rbs +13 -10
- data/sig/prism/lex_compat.rbs +10 -0
- data/sig/prism/mutation_compiler.rbs +1 -0
- data/sig/prism/node.rbs +72 -48
- data/sig/prism/node_ext.rbs +4 -0
- data/sig/prism/visitor.rbs +1 -0
- data/sig/prism.rbs +21 -0
- data/src/diagnostic.c +56 -27
- data/src/node.c +432 -1690
- data/src/prettyprint.c +97 -54
- data/src/prism.c +1286 -1196
- data/src/regexp.c +133 -68
- data/src/serialize.c +22 -17
- data/src/static_literals.c +63 -84
- data/src/token_type.c +4 -4
- data/src/util/pm_constant_pool.c +0 -8
- data/src/util/pm_integer.c +39 -11
- data/src/util/pm_string.c +0 -12
- data/src/util/pm_strpbrk.c +32 -6
- metadata +3 -5
- data/include/prism/util/pm_string_list.h +0 -44
- data/lib/prism/debug.rb +0 -249
- data/src/util/pm_string_list.c +0 -28
    
        data/lib/prism/node.rb
    CHANGED
    
    | @@ -36,18 +36,6 @@ module Prism | |
| 36 36 | 
             
                  location.is_a?(Location) ? location.end_offset : ((location >> 32) + (location & 0xFFFFFFFF))
         | 
| 37 37 | 
             
                end
         | 
| 38 38 |  | 
| 39 | 
            -
                def newline? # :nodoc:
         | 
| 40 | 
            -
                  @newline ? true : false
         | 
| 41 | 
            -
                end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                def set_newline_flag(newline_marked) # :nodoc:
         | 
| 44 | 
            -
                  line = location.start_line
         | 
| 45 | 
            -
                  unless newline_marked[line]
         | 
| 46 | 
            -
                    newline_marked[line] = true
         | 
| 47 | 
            -
                    @newline = true
         | 
| 48 | 
            -
                  end
         | 
| 49 | 
            -
                end
         | 
| 50 | 
            -
             | 
| 51 39 | 
             
                # Returns all of the lines of the source code associated with this node.
         | 
| 52 40 | 
             
                def source_lines
         | 
| 53 41 | 
             
                  location.source_lines
         | 
| @@ -189,7 +177,6 @@ module Prism | |
| 189 177 | 
             
                # def initialize: (Prism::node new_name, Prism::node old_name, Location keyword_loc, Location location) -> void
         | 
| 190 178 | 
             
                def initialize(source, new_name, old_name, keyword_loc, location)
         | 
| 191 179 | 
             
                  @source = source
         | 
| 192 | 
            -
                  @newline = false
         | 
| 193 180 | 
             
                  @location = location
         | 
| 194 181 | 
             
                  @new_name = new_name
         | 
| 195 182 | 
             
                  @old_name = old_name
         | 
| @@ -307,7 +294,6 @@ module Prism | |
| 307 294 | 
             
                # def initialize: (Prism::node new_name, Prism::node old_name, Location keyword_loc, Location location) -> void
         | 
| 308 295 | 
             
                def initialize(source, new_name, old_name, keyword_loc, location)
         | 
| 309 296 | 
             
                  @source = source
         | 
| 310 | 
            -
                  @newline = false
         | 
| 311 297 | 
             
                  @location = location
         | 
| 312 298 | 
             
                  @new_name = new_name
         | 
| 313 299 | 
             
                  @old_name = old_name
         | 
| @@ -416,7 +402,6 @@ module Prism | |
| 416 402 | 
             
                # def initialize: (Prism::node left, Prism::node right, Location operator_loc, Location location) -> void
         | 
| 417 403 | 
             
                def initialize(source, left, right, operator_loc, location)
         | 
| 418 404 | 
             
                  @source = source
         | 
| 419 | 
            -
                  @newline = false
         | 
| 420 405 | 
             
                  @location = location
         | 
| 421 406 | 
             
                  @left = left
         | 
| 422 407 | 
             
                  @right = right
         | 
| @@ -525,7 +510,6 @@ module Prism | |
| 525 510 | 
             
                # def initialize: (Prism::node left, Prism::node right, Location operator_loc, Location location) -> void
         | 
| 526 511 | 
             
                def initialize(source, left, right, operator_loc, location)
         | 
| 527 512 | 
             
                  @source = source
         | 
| 528 | 
            -
                  @newline = false
         | 
| 529 513 | 
             
                  @location = location
         | 
| 530 514 | 
             
                  @left = left
         | 
| 531 515 | 
             
                  @right = right
         | 
| @@ -649,7 +633,6 @@ module Prism | |
| 649 633 | 
             
                # def initialize: (Integer flags, Array[Prism::node] arguments, Location location) -> void
         | 
| 650 634 | 
             
                def initialize(source, flags, arguments, location)
         | 
| 651 635 | 
             
                  @source = source
         | 
| 652 | 
            -
                  @newline = false
         | 
| 653 636 | 
             
                  @location = location
         | 
| 654 637 | 
             
                  @flags = flags
         | 
| 655 638 | 
             
                  @arguments = arguments
         | 
| @@ -756,7 +739,6 @@ module Prism | |
| 756 739 | 
             
                # def initialize: (Integer flags, Array[Prism::node] elements, Location? opening_loc, Location? closing_loc, Location location) -> void
         | 
| 757 740 | 
             
                def initialize(source, flags, elements, opening_loc, closing_loc, location)
         | 
| 758 741 | 
             
                  @source = source
         | 
| 759 | 
            -
                  @newline = false
         | 
| 760 742 | 
             
                  @location = location
         | 
| 761 743 | 
             
                  @flags = flags
         | 
| 762 744 | 
             
                  @elements = elements
         | 
| @@ -920,7 +902,6 @@ module Prism | |
| 920 902 | 
             
                # def initialize: (Prism::node? constant, Array[Prism::node] requireds, Prism::node? rest, Array[Prism::node] posts, Location? opening_loc, Location? closing_loc, Location location) -> void
         | 
| 921 903 | 
             
                def initialize(source, constant, requireds, rest, posts, opening_loc, closing_loc, location)
         | 
| 922 904 | 
             
                  @source = source
         | 
| 923 | 
            -
                  @newline = false
         | 
| 924 905 | 
             
                  @location = location
         | 
| 925 906 | 
             
                  @constant = constant
         | 
| 926 907 | 
             
                  @requireds = requireds
         | 
| @@ -1072,7 +1053,6 @@ module Prism | |
| 1072 1053 | 
             
                # def initialize: (Prism::node key, Prism::node value, Location? operator_loc, Location location) -> void
         | 
| 1073 1054 | 
             
                def initialize(source, key, value, operator_loc, location)
         | 
| 1074 1055 | 
             
                  @source = source
         | 
| 1075 | 
            -
                  @newline = false
         | 
| 1076 1056 | 
             
                  @location = location
         | 
| 1077 1057 | 
             
                  @key = key
         | 
| 1078 1058 | 
             
                  @value = value
         | 
| @@ -1205,7 +1185,6 @@ module Prism | |
| 1205 1185 | 
             
                # def initialize: (Prism::node? value, Location operator_loc, Location location) -> void
         | 
| 1206 1186 | 
             
                def initialize(source, value, operator_loc, location)
         | 
| 1207 1187 | 
             
                  @source = source
         | 
| 1208 | 
            -
                  @newline = false
         | 
| 1209 1188 | 
             
                  @location = location
         | 
| 1210 1189 | 
             
                  @value = value
         | 
| 1211 1190 | 
             
                  @operator_loc = operator_loc
         | 
| @@ -1317,7 +1296,6 @@ module Prism | |
| 1317 1296 | 
             
                # def initialize: (Symbol name, Location location) -> void
         | 
| 1318 1297 | 
             
                def initialize(source, name, location)
         | 
| 1319 1298 | 
             
                  @source = source
         | 
| 1320 | 
            -
                  @newline = false
         | 
| 1321 1299 | 
             
                  @location = location
         | 
| 1322 1300 | 
             
                  @name = name
         | 
| 1323 1301 | 
             
                end
         | 
| @@ -1413,7 +1391,6 @@ module Prism | |
| 1413 1391 | 
             
                # def initialize: (Location? begin_keyword_loc, StatementsNode? statements, RescueNode? rescue_clause, ElseNode? else_clause, EnsureNode? ensure_clause, Location? end_keyword_loc, Location location) -> void
         | 
| 1414 1392 | 
             
                def initialize(source, begin_keyword_loc, statements, rescue_clause, else_clause, ensure_clause, end_keyword_loc, location)
         | 
| 1415 1393 | 
             
                  @source = source
         | 
| 1416 | 
            -
                  @newline = false
         | 
| 1417 1394 | 
             
                  @location = location
         | 
| 1418 1395 | 
             
                  @begin_keyword_loc = begin_keyword_loc
         | 
| 1419 1396 | 
             
                  @statements = statements
         | 
| @@ -1428,10 +1405,6 @@ module Prism | |
| 1428 1405 | 
             
                  visitor.visit_begin_node(self)
         | 
| 1429 1406 | 
             
                end
         | 
| 1430 1407 |  | 
| 1431 | 
            -
                def set_newline_flag(newline_marked) # :nodoc:
         | 
| 1432 | 
            -
                  # Never mark BeginNode with a newline flag, mark children instead
         | 
| 1433 | 
            -
                end
         | 
| 1434 | 
            -
             | 
| 1435 1408 | 
             
                # def child_nodes: () -> Array[nil | Node]
         | 
| 1436 1409 | 
             
                def child_nodes
         | 
| 1437 1410 | 
             
                  [statements, rescue_clause, else_clause, ensure_clause]
         | 
| @@ -1567,7 +1540,6 @@ module Prism | |
| 1567 1540 | 
             
                # def initialize: (Prism::node? expression, Location operator_loc, Location location) -> void
         | 
| 1568 1541 | 
             
                def initialize(source, expression, operator_loc, location)
         | 
| 1569 1542 | 
             
                  @source = source
         | 
| 1570 | 
            -
                  @newline = false
         | 
| 1571 1543 | 
             
                  @location = location
         | 
| 1572 1544 | 
             
                  @expression = expression
         | 
| 1573 1545 | 
             
                  @operator_loc = operator_loc
         | 
| @@ -1673,7 +1645,6 @@ module Prism | |
| 1673 1645 | 
             
                # def initialize: (Integer flags, Symbol name, Location location) -> void
         | 
| 1674 1646 | 
             
                def initialize(source, flags, name, location)
         | 
| 1675 1647 | 
             
                  @source = source
         | 
| 1676 | 
            -
                  @newline = false
         | 
| 1677 1648 | 
             
                  @location = location
         | 
| 1678 1649 | 
             
                  @flags = flags
         | 
| 1679 1650 | 
             
                  @name = name
         | 
| @@ -1774,7 +1745,6 @@ module Prism | |
| 1774 1745 | 
             
                # def initialize: (Array[Symbol] locals, Prism::node? parameters, Prism::node? body, Location opening_loc, Location closing_loc, Location location) -> void
         | 
| 1775 1746 | 
             
                def initialize(source, locals, parameters, body, opening_loc, closing_loc, location)
         | 
| 1776 1747 | 
             
                  @source = source
         | 
| 1777 | 
            -
                  @newline = false
         | 
| 1778 1748 | 
             
                  @location = location
         | 
| 1779 1749 | 
             
                  @locals = locals
         | 
| 1780 1750 | 
             
                  @parameters = parameters
         | 
| @@ -1907,7 +1877,6 @@ module Prism | |
| 1907 1877 | 
             
                # def initialize: (Integer flags, Symbol? name, Location? name_loc, Location operator_loc, Location location) -> void
         | 
| 1908 1878 | 
             
                def initialize(source, flags, name, name_loc, operator_loc, location)
         | 
| 1909 1879 | 
             
                  @source = source
         | 
| 1910 | 
            -
                  @newline = false
         | 
| 1911 1880 | 
             
                  @location = location
         | 
| 1912 1881 | 
             
                  @flags = flags
         | 
| 1913 1882 | 
             
                  @name = name
         | 
| @@ -2041,7 +2010,6 @@ module Prism | |
| 2041 2010 | 
             
                # def initialize: (ParametersNode? parameters, Array[BlockLocalVariableNode] locals, Location? opening_loc, Location? closing_loc, Location location) -> void
         | 
| 2042 2011 | 
             
                def initialize(source, parameters, locals, opening_loc, closing_loc, location)
         | 
| 2043 2012 | 
             
                  @source = source
         | 
| 2044 | 
            -
                  @newline = false
         | 
| 2045 2013 | 
             
                  @location = location
         | 
| 2046 2014 | 
             
                  @parameters = parameters
         | 
| 2047 2015 | 
             
                  @locals = locals
         | 
| @@ -2180,7 +2148,6 @@ module Prism | |
| 2180 2148 | 
             
                # def initialize: (ArgumentsNode? arguments, Location keyword_loc, Location location) -> void
         | 
| 2181 2149 | 
             
                def initialize(source, arguments, keyword_loc, location)
         | 
| 2182 2150 | 
             
                  @source = source
         | 
| 2183 | 
            -
                  @newline = false
         | 
| 2184 2151 | 
             
                  @location = location
         | 
| 2185 2152 | 
             
                  @arguments = arguments
         | 
| 2186 2153 | 
             
                  @keyword_loc = keyword_loc
         | 
| @@ -2292,7 +2259,6 @@ module Prism | |
| 2292 2259 | 
             
                # def initialize: (Integer flags, Prism::node? receiver, Location? call_operator_loc, Location? message_loc, Symbol read_name, Symbol write_name, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 2293 2260 | 
             
                def initialize(source, flags, receiver, call_operator_loc, message_loc, read_name, write_name, operator_loc, value, location)
         | 
| 2294 2261 | 
             
                  @source = source
         | 
| 2295 | 
            -
                  @newline = false
         | 
| 2296 2262 | 
             
                  @location = location
         | 
| 2297 2263 | 
             
                  @flags = flags
         | 
| 2298 2264 | 
             
                  @receiver = receiver
         | 
| @@ -2495,7 +2461,6 @@ module Prism | |
| 2495 2461 | 
             
                # def initialize: (Integer flags, Prism::node? receiver, Location? call_operator_loc, Symbol name, Location? message_loc, Location? opening_loc, ArgumentsNode? arguments, Location? closing_loc, Prism::node? block, Location location) -> void
         | 
| 2496 2462 | 
             
                def initialize(source, flags, receiver, call_operator_loc, name, message_loc, opening_loc, arguments, closing_loc, block, location)
         | 
| 2497 2463 | 
             
                  @source = source
         | 
| 2498 | 
            -
                  @newline = false
         | 
| 2499 2464 | 
             
                  @location = location
         | 
| 2500 2465 | 
             
                  @flags = flags
         | 
| 2501 2466 | 
             
                  @receiver = receiver
         | 
| @@ -2716,10 +2681,9 @@ module Prism | |
| 2716 2681 | 
             
              #     foo.bar += baz
         | 
| 2717 2682 | 
             
              #     ^^^^^^^^^^^^^^
         | 
| 2718 2683 | 
             
              class CallOperatorWriteNode < Node
         | 
| 2719 | 
            -
                # def initialize: (Integer flags, Prism::node? receiver, Location? call_operator_loc, Location? message_loc, Symbol read_name, Symbol write_name, Symbol  | 
| 2720 | 
            -
                def initialize(source, flags, receiver, call_operator_loc, message_loc, read_name, write_name,  | 
| 2684 | 
            +
                # def initialize: (Integer flags, Prism::node? receiver, Location? call_operator_loc, Location? message_loc, Symbol read_name, Symbol write_name, Symbol binary_operator, Location binary_operator_loc, Prism::node value, Location location) -> void
         | 
| 2685 | 
            +
                def initialize(source, flags, receiver, call_operator_loc, message_loc, read_name, write_name, binary_operator, binary_operator_loc, value, location)
         | 
| 2721 2686 | 
             
                  @source = source
         | 
| 2722 | 
            -
                  @newline = false
         | 
| 2723 2687 | 
             
                  @location = location
         | 
| 2724 2688 | 
             
                  @flags = flags
         | 
| 2725 2689 | 
             
                  @receiver = receiver
         | 
| @@ -2727,8 +2691,8 @@ module Prism | |
| 2727 2691 | 
             
                  @message_loc = message_loc
         | 
| 2728 2692 | 
             
                  @read_name = read_name
         | 
| 2729 2693 | 
             
                  @write_name = write_name
         | 
| 2730 | 
            -
                  @ | 
| 2731 | 
            -
                  @ | 
| 2694 | 
            +
                  @binary_operator = binary_operator
         | 
| 2695 | 
            +
                  @binary_operator_loc = binary_operator_loc
         | 
| 2732 2696 | 
             
                  @value = value
         | 
| 2733 2697 | 
             
                end
         | 
| 2734 2698 |  | 
| @@ -2752,20 +2716,20 @@ module Prism | |
| 2752 2716 |  | 
| 2753 2717 | 
             
                # def comment_targets: () -> Array[Node | Location]
         | 
| 2754 2718 | 
             
                def comment_targets
         | 
| 2755 | 
            -
                  [*receiver, *call_operator_loc, *message_loc,  | 
| 2719 | 
            +
                  [*receiver, *call_operator_loc, *message_loc, binary_operator_loc, value] #: Array[Prism::node | Location]
         | 
| 2756 2720 | 
             
                end
         | 
| 2757 2721 |  | 
| 2758 | 
            -
                # def copy: (?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?message_loc: Location?, ?read_name: Symbol, ?write_name: Symbol, ? | 
| 2759 | 
            -
                def copy(flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, message_loc: self.message_loc, read_name: self.read_name, write_name: self.write_name,  | 
| 2760 | 
            -
                  CallOperatorWriteNode.new(source, flags, receiver, call_operator_loc, message_loc, read_name, write_name,  | 
| 2722 | 
            +
                # def copy: (?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?message_loc: Location?, ?read_name: Symbol, ?write_name: Symbol, ?binary_operator: Symbol, ?binary_operator_loc: Location, ?value: Prism::node, ?location: Location) -> CallOperatorWriteNode
         | 
| 2723 | 
            +
                def copy(flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, message_loc: self.message_loc, read_name: self.read_name, write_name: self.write_name, binary_operator: self.binary_operator, binary_operator_loc: self.binary_operator_loc, value: self.value, location: self.location)
         | 
| 2724 | 
            +
                  CallOperatorWriteNode.new(source, flags, receiver, call_operator_loc, message_loc, read_name, write_name, binary_operator, binary_operator_loc, value, location)
         | 
| 2761 2725 | 
             
                end
         | 
| 2762 2726 |  | 
| 2763 2727 | 
             
                # def deconstruct: () -> Array[nil | Node]
         | 
| 2764 2728 | 
             
                alias deconstruct child_nodes
         | 
| 2765 2729 |  | 
| 2766 | 
            -
                # def deconstruct_keys: (Array[Symbol] keys) -> { flags: Integer, receiver: Prism::node?, call_operator_loc: Location?, message_loc: Location?, read_name: Symbol, write_name: Symbol,  | 
| 2730 | 
            +
                # def deconstruct_keys: (Array[Symbol] keys) -> { flags: Integer, receiver: Prism::node?, call_operator_loc: Location?, message_loc: Location?, read_name: Symbol, write_name: Symbol, binary_operator: Symbol, binary_operator_loc: Location, value: Prism::node, location: Location }
         | 
| 2767 2731 | 
             
                def deconstruct_keys(keys)
         | 
| 2768 | 
            -
                  { flags: flags, receiver: receiver, call_operator_loc: call_operator_loc, message_loc: message_loc, read_name: read_name, write_name: write_name,  | 
| 2732 | 
            +
                  { flags: flags, receiver: receiver, call_operator_loc: call_operator_loc, message_loc: message_loc, read_name: read_name, write_name: write_name, binary_operator: binary_operator, binary_operator_loc: binary_operator_loc, value: value, location: location }
         | 
| 2769 2733 | 
             
                end
         | 
| 2770 2734 |  | 
| 2771 2735 | 
             
                # protected attr_reader flags: Integer
         | 
| @@ -2807,14 +2771,14 @@ module Prism | |
| 2807 2771 | 
             
                # attr_reader write_name: Symbol
         | 
| 2808 2772 | 
             
                attr_reader :write_name
         | 
| 2809 2773 |  | 
| 2810 | 
            -
                # attr_reader  | 
| 2811 | 
            -
                attr_reader : | 
| 2774 | 
            +
                # attr_reader binary_operator: Symbol
         | 
| 2775 | 
            +
                attr_reader :binary_operator
         | 
| 2812 2776 |  | 
| 2813 | 
            -
                # attr_reader  | 
| 2814 | 
            -
                def  | 
| 2815 | 
            -
                  location = @ | 
| 2777 | 
            +
                # attr_reader binary_operator_loc: Location
         | 
| 2778 | 
            +
                def binary_operator_loc
         | 
| 2779 | 
            +
                  location = @binary_operator_loc
         | 
| 2816 2780 | 
             
                  return location if location.is_a?(Location)
         | 
| 2817 | 
            -
                  @ | 
| 2781 | 
            +
                  @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 2818 2782 | 
             
                end
         | 
| 2819 2783 |  | 
| 2820 2784 | 
             
                # attr_reader value: Prism::node
         | 
| @@ -2893,8 +2857,8 @@ module Prism | |
| 2893 2857 | 
             
                    (message_loc.nil? == other.message_loc.nil?) &&
         | 
| 2894 2858 | 
             
                    (read_name === other.read_name) &&
         | 
| 2895 2859 | 
             
                    (write_name === other.write_name) &&
         | 
| 2896 | 
            -
                    ( | 
| 2897 | 
            -
                    ( | 
| 2860 | 
            +
                    (binary_operator === other.binary_operator) &&
         | 
| 2861 | 
            +
                    (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
         | 
| 2898 2862 | 
             
                    (value === other.value)
         | 
| 2899 2863 | 
             
                end
         | 
| 2900 2864 | 
             
              end
         | 
| @@ -2907,7 +2871,6 @@ module Prism | |
| 2907 2871 | 
             
                # def initialize: (Integer flags, Prism::node? receiver, Location? call_operator_loc, Location? message_loc, Symbol read_name, Symbol write_name, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 2908 2872 | 
             
                def initialize(source, flags, receiver, call_operator_loc, message_loc, read_name, write_name, operator_loc, value, location)
         | 
| 2909 2873 | 
             
                  @source = source
         | 
| 2910 | 
            -
                  @newline = false
         | 
| 2911 2874 | 
             
                  @location = location
         | 
| 2912 2875 | 
             
                  @flags = flags
         | 
| 2913 2876 | 
             
                  @receiver = receiver
         | 
| @@ -3103,7 +3066,6 @@ module Prism | |
| 3103 3066 | 
             
                # def initialize: (Integer flags, Prism::node receiver, Location call_operator_loc, Symbol name, Location message_loc, Location location) -> void
         | 
| 3104 3067 | 
             
                def initialize(source, flags, receiver, call_operator_loc, name, message_loc, location)
         | 
| 3105 3068 | 
             
                  @source = source
         | 
| 3106 | 
            -
                  @newline = false
         | 
| 3107 3069 | 
             
                  @location = location
         | 
| 3108 3070 | 
             
                  @flags = flags
         | 
| 3109 3071 | 
             
                  @receiver = receiver
         | 
| @@ -3252,7 +3214,6 @@ module Prism | |
| 3252 3214 | 
             
                # def initialize: (Prism::node value, Prism::node target, Location operator_loc, Location location) -> void
         | 
| 3253 3215 | 
             
                def initialize(source, value, target, operator_loc, location)
         | 
| 3254 3216 | 
             
                  @source = source
         | 
| 3255 | 
            -
                  @newline = false
         | 
| 3256 3217 | 
             
                  @location = location
         | 
| 3257 3218 | 
             
                  @value = value
         | 
| 3258 3219 | 
             
                  @target = target
         | 
| @@ -3363,7 +3324,6 @@ module Prism | |
| 3363 3324 | 
             
                # def initialize: (Prism::node? predicate, Array[Prism::node] conditions, ElseNode? consequent, Location case_keyword_loc, Location end_keyword_loc, Location location) -> void
         | 
| 3364 3325 | 
             
                def initialize(source, predicate, conditions, consequent, case_keyword_loc, end_keyword_loc, location)
         | 
| 3365 3326 | 
             
                  @source = source
         | 
| 3366 | 
            -
                  @newline = false
         | 
| 3367 3327 | 
             
                  @location = location
         | 
| 3368 3328 | 
             
                  @predicate = predicate
         | 
| 3369 3329 | 
             
                  @conditions = conditions
         | 
| @@ -3498,7 +3458,6 @@ module Prism | |
| 3498 3458 | 
             
                # def initialize: (Prism::node? predicate, Array[Prism::node] conditions, ElseNode? consequent, Location case_keyword_loc, Location end_keyword_loc, Location location) -> void
         | 
| 3499 3459 | 
             
                def initialize(source, predicate, conditions, consequent, case_keyword_loc, end_keyword_loc, location)
         | 
| 3500 3460 | 
             
                  @source = source
         | 
| 3501 | 
            -
                  @newline = false
         | 
| 3502 3461 | 
             
                  @location = location
         | 
| 3503 3462 | 
             
                  @predicate = predicate
         | 
| 3504 3463 | 
             
                  @conditions = conditions
         | 
| @@ -3631,7 +3590,6 @@ module Prism | |
| 3631 3590 | 
             
                # def initialize: (Array[Symbol] locals, Location class_keyword_loc, Prism::node constant_path, Location? inheritance_operator_loc, Prism::node? superclass, Prism::node? body, Location end_keyword_loc, Symbol name, Location location) -> void
         | 
| 3632 3591 | 
             
                def initialize(source, locals, class_keyword_loc, constant_path, inheritance_operator_loc, superclass, body, end_keyword_loc, name, location)
         | 
| 3633 3592 | 
             
                  @source = source
         | 
| 3634 | 
            -
                  @newline = false
         | 
| 3635 3593 | 
             
                  @location = location
         | 
| 3636 3594 | 
             
                  @locals = locals
         | 
| 3637 3595 | 
             
                  @class_keyword_loc = class_keyword_loc
         | 
| @@ -3794,7 +3752,6 @@ module Prism | |
| 3794 3752 | 
             
                # def initialize: (Symbol name, Location name_loc, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 3795 3753 | 
             
                def initialize(source, name, name_loc, operator_loc, value, location)
         | 
| 3796 3754 | 
             
                  @source = source
         | 
| 3797 | 
            -
                  @newline = false
         | 
| 3798 3755 | 
             
                  @location = location
         | 
| 3799 3756 | 
             
                  @name = name
         | 
| 3800 3757 | 
             
                  @name_loc = name_loc
         | 
| @@ -3909,16 +3866,15 @@ module Prism | |
| 3909 3866 | 
             
              #     @@target += value
         | 
| 3910 3867 | 
             
              #     ^^^^^^^^^^^^^^^^^
         | 
| 3911 3868 | 
             
              class ClassVariableOperatorWriteNode < Node
         | 
| 3912 | 
            -
                # def initialize: (Symbol name, Location name_loc, Location  | 
| 3913 | 
            -
                def initialize(source, name, name_loc,  | 
| 3869 | 
            +
                # def initialize: (Symbol name, Location name_loc, Location binary_operator_loc, Prism::node value, Symbol binary_operator, Location location) -> void
         | 
| 3870 | 
            +
                def initialize(source, name, name_loc, binary_operator_loc, value, binary_operator, location)
         | 
| 3914 3871 | 
             
                  @source = source
         | 
| 3915 | 
            -
                  @newline = false
         | 
| 3916 3872 | 
             
                  @location = location
         | 
| 3917 3873 | 
             
                  @name = name
         | 
| 3918 3874 | 
             
                  @name_loc = name_loc
         | 
| 3919 | 
            -
                  @ | 
| 3875 | 
            +
                  @binary_operator_loc = binary_operator_loc
         | 
| 3920 3876 | 
             
                  @value = value
         | 
| 3921 | 
            -
                  @ | 
| 3877 | 
            +
                  @binary_operator = binary_operator
         | 
| 3922 3878 | 
             
                end
         | 
| 3923 3879 |  | 
| 3924 3880 | 
             
                # def accept: (Visitor visitor) -> void
         | 
| @@ -3938,20 +3894,20 @@ module Prism | |
| 3938 3894 |  | 
| 3939 3895 | 
             
                # def comment_targets: () -> Array[Node | Location]
         | 
| 3940 3896 | 
             
                def comment_targets
         | 
| 3941 | 
            -
                  [name_loc,  | 
| 3897 | 
            +
                  [name_loc, binary_operator_loc, value] #: Array[Prism::node | Location]
         | 
| 3942 3898 | 
             
                end
         | 
| 3943 3899 |  | 
| 3944 | 
            -
                # def copy: (?name: Symbol, ?name_loc: Location, ? | 
| 3945 | 
            -
                def copy(name: self.name, name_loc: self.name_loc,  | 
| 3946 | 
            -
                  ClassVariableOperatorWriteNode.new(source, name, name_loc,  | 
| 3900 | 
            +
                # def copy: (?name: Symbol, ?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol, ?location: Location) -> ClassVariableOperatorWriteNode
         | 
| 3901 | 
            +
                def copy(name: self.name, name_loc: self.name_loc, binary_operator_loc: self.binary_operator_loc, value: self.value, binary_operator: self.binary_operator, location: self.location)
         | 
| 3902 | 
            +
                  ClassVariableOperatorWriteNode.new(source, name, name_loc, binary_operator_loc, value, binary_operator, location)
         | 
| 3947 3903 | 
             
                end
         | 
| 3948 3904 |  | 
| 3949 3905 | 
             
                # def deconstruct: () -> Array[nil | Node]
         | 
| 3950 3906 | 
             
                alias deconstruct child_nodes
         | 
| 3951 3907 |  | 
| 3952 | 
            -
                # def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location,  | 
| 3908 | 
            +
                # def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol, location: Location }
         | 
| 3953 3909 | 
             
                def deconstruct_keys(keys)
         | 
| 3954 | 
            -
                  { name: name, name_loc: name_loc,  | 
| 3910 | 
            +
                  { name: name, name_loc: name_loc, binary_operator_loc: binary_operator_loc, value: value, binary_operator: binary_operator, location: location }
         | 
| 3955 3911 | 
             
                end
         | 
| 3956 3912 |  | 
| 3957 3913 | 
             
                # attr_reader name: Symbol
         | 
| @@ -3964,18 +3920,18 @@ module Prism | |
| 3964 3920 | 
             
                  @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 3965 3921 | 
             
                end
         | 
| 3966 3922 |  | 
| 3967 | 
            -
                # attr_reader  | 
| 3968 | 
            -
                def  | 
| 3969 | 
            -
                  location = @ | 
| 3923 | 
            +
                # attr_reader binary_operator_loc: Location
         | 
| 3924 | 
            +
                def binary_operator_loc
         | 
| 3925 | 
            +
                  location = @binary_operator_loc
         | 
| 3970 3926 | 
             
                  return location if location.is_a?(Location)
         | 
| 3971 | 
            -
                  @ | 
| 3927 | 
            +
                  @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 3972 3928 | 
             
                end
         | 
| 3973 3929 |  | 
| 3974 3930 | 
             
                # attr_reader value: Prism::node
         | 
| 3975 3931 | 
             
                attr_reader :value
         | 
| 3976 3932 |  | 
| 3977 | 
            -
                # attr_reader  | 
| 3978 | 
            -
                attr_reader : | 
| 3933 | 
            +
                # attr_reader binary_operator: Symbol
         | 
| 3934 | 
            +
                attr_reader :binary_operator
         | 
| 3979 3935 |  | 
| 3980 3936 | 
             
                # def inspect -> String
         | 
| 3981 3937 | 
             
                def inspect
         | 
| @@ -4016,9 +3972,9 @@ module Prism | |
| 4016 3972 | 
             
                  other.is_a?(ClassVariableOperatorWriteNode) &&
         | 
| 4017 3973 | 
             
                    (name === other.name) &&
         | 
| 4018 3974 | 
             
                    (name_loc.nil? == other.name_loc.nil?) &&
         | 
| 4019 | 
            -
                    ( | 
| 3975 | 
            +
                    (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
         | 
| 4020 3976 | 
             
                    (value === other.value) &&
         | 
| 4021 | 
            -
                    ( | 
| 3977 | 
            +
                    (binary_operator === other.binary_operator)
         | 
| 4022 3978 | 
             
                end
         | 
| 4023 3979 | 
             
              end
         | 
| 4024 3980 |  | 
| @@ -4030,7 +3986,6 @@ module Prism | |
| 4030 3986 | 
             
                # def initialize: (Symbol name, Location name_loc, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 4031 3987 | 
             
                def initialize(source, name, name_loc, operator_loc, value, location)
         | 
| 4032 3988 | 
             
                  @source = source
         | 
| 4033 | 
            -
                  @newline = false
         | 
| 4034 3989 | 
             
                  @location = location
         | 
| 4035 3990 | 
             
                  @name = name
         | 
| 4036 3991 | 
             
                  @name_loc = name_loc
         | 
| @@ -4148,7 +4103,6 @@ module Prism | |
| 4148 4103 | 
             
                # def initialize: (Symbol name, Location location) -> void
         | 
| 4149 4104 | 
             
                def initialize(source, name, location)
         | 
| 4150 4105 | 
             
                  @source = source
         | 
| 4151 | 
            -
                  @newline = false
         | 
| 4152 4106 | 
             
                  @location = location
         | 
| 4153 4107 | 
             
                  @name = name
         | 
| 4154 4108 | 
             
                end
         | 
| @@ -4242,7 +4196,6 @@ module Prism | |
| 4242 4196 | 
             
                # def initialize: (Symbol name, Location location) -> void
         | 
| 4243 4197 | 
             
                def initialize(source, name, location)
         | 
| 4244 4198 | 
             
                  @source = source
         | 
| 4245 | 
            -
                  @newline = false
         | 
| 4246 4199 | 
             
                  @location = location
         | 
| 4247 4200 | 
             
                  @name = name
         | 
| 4248 4201 | 
             
                end
         | 
| @@ -4332,7 +4285,6 @@ module Prism | |
| 4332 4285 | 
             
                # def initialize: (Symbol name, Location name_loc, Prism::node value, Location operator_loc, Location location) -> void
         | 
| 4333 4286 | 
             
                def initialize(source, name, name_loc, value, operator_loc, location)
         | 
| 4334 4287 | 
             
                  @source = source
         | 
| 4335 | 
            -
                  @newline = false
         | 
| 4336 4288 | 
             
                  @location = location
         | 
| 4337 4289 | 
             
                  @name = name
         | 
| 4338 4290 | 
             
                  @name_loc = name_loc
         | 
| @@ -4466,7 +4418,6 @@ module Prism | |
| 4466 4418 | 
             
                # def initialize: (Symbol name, Location name_loc, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 4467 4419 | 
             
                def initialize(source, name, name_loc, operator_loc, value, location)
         | 
| 4468 4420 | 
             
                  @source = source
         | 
| 4469 | 
            -
                  @newline = false
         | 
| 4470 4421 | 
             
                  @location = location
         | 
| 4471 4422 | 
             
                  @name = name
         | 
| 4472 4423 | 
             
                  @name_loc = name_loc
         | 
| @@ -4581,16 +4532,15 @@ module Prism | |
| 4581 4532 | 
             
              #     Target += value
         | 
| 4582 4533 | 
             
              #     ^^^^^^^^^^^^^^^
         | 
| 4583 4534 | 
             
              class ConstantOperatorWriteNode < Node
         | 
| 4584 | 
            -
                # def initialize: (Symbol name, Location name_loc, Location  | 
| 4585 | 
            -
                def initialize(source, name, name_loc,  | 
| 4535 | 
            +
                # def initialize: (Symbol name, Location name_loc, Location binary_operator_loc, Prism::node value, Symbol binary_operator, Location location) -> void
         | 
| 4536 | 
            +
                def initialize(source, name, name_loc, binary_operator_loc, value, binary_operator, location)
         | 
| 4586 4537 | 
             
                  @source = source
         | 
| 4587 | 
            -
                  @newline = false
         | 
| 4588 4538 | 
             
                  @location = location
         | 
| 4589 4539 | 
             
                  @name = name
         | 
| 4590 4540 | 
             
                  @name_loc = name_loc
         | 
| 4591 | 
            -
                  @ | 
| 4541 | 
            +
                  @binary_operator_loc = binary_operator_loc
         | 
| 4592 4542 | 
             
                  @value = value
         | 
| 4593 | 
            -
                  @ | 
| 4543 | 
            +
                  @binary_operator = binary_operator
         | 
| 4594 4544 | 
             
                end
         | 
| 4595 4545 |  | 
| 4596 4546 | 
             
                # def accept: (Visitor visitor) -> void
         | 
| @@ -4610,20 +4560,20 @@ module Prism | |
| 4610 4560 |  | 
| 4611 4561 | 
             
                # def comment_targets: () -> Array[Node | Location]
         | 
| 4612 4562 | 
             
                def comment_targets
         | 
| 4613 | 
            -
                  [name_loc,  | 
| 4563 | 
            +
                  [name_loc, binary_operator_loc, value] #: Array[Prism::node | Location]
         | 
| 4614 4564 | 
             
                end
         | 
| 4615 4565 |  | 
| 4616 | 
            -
                # def copy: (?name: Symbol, ?name_loc: Location, ? | 
| 4617 | 
            -
                def copy(name: self.name, name_loc: self.name_loc,  | 
| 4618 | 
            -
                  ConstantOperatorWriteNode.new(source, name, name_loc,  | 
| 4566 | 
            +
                # def copy: (?name: Symbol, ?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol, ?location: Location) -> ConstantOperatorWriteNode
         | 
| 4567 | 
            +
                def copy(name: self.name, name_loc: self.name_loc, binary_operator_loc: self.binary_operator_loc, value: self.value, binary_operator: self.binary_operator, location: self.location)
         | 
| 4568 | 
            +
                  ConstantOperatorWriteNode.new(source, name, name_loc, binary_operator_loc, value, binary_operator, location)
         | 
| 4619 4569 | 
             
                end
         | 
| 4620 4570 |  | 
| 4621 4571 | 
             
                # def deconstruct: () -> Array[nil | Node]
         | 
| 4622 4572 | 
             
                alias deconstruct child_nodes
         | 
| 4623 4573 |  | 
| 4624 | 
            -
                # def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location,  | 
| 4574 | 
            +
                # def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol, location: Location }
         | 
| 4625 4575 | 
             
                def deconstruct_keys(keys)
         | 
| 4626 | 
            -
                  { name: name, name_loc: name_loc,  | 
| 4576 | 
            +
                  { name: name, name_loc: name_loc, binary_operator_loc: binary_operator_loc, value: value, binary_operator: binary_operator, location: location }
         | 
| 4627 4577 | 
             
                end
         | 
| 4628 4578 |  | 
| 4629 4579 | 
             
                # attr_reader name: Symbol
         | 
| @@ -4636,18 +4586,18 @@ module Prism | |
| 4636 4586 | 
             
                  @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 4637 4587 | 
             
                end
         | 
| 4638 4588 |  | 
| 4639 | 
            -
                # attr_reader  | 
| 4640 | 
            -
                def  | 
| 4641 | 
            -
                  location = @ | 
| 4589 | 
            +
                # attr_reader binary_operator_loc: Location
         | 
| 4590 | 
            +
                def binary_operator_loc
         | 
| 4591 | 
            +
                  location = @binary_operator_loc
         | 
| 4642 4592 | 
             
                  return location if location.is_a?(Location)
         | 
| 4643 | 
            -
                  @ | 
| 4593 | 
            +
                  @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 4644 4594 | 
             
                end
         | 
| 4645 4595 |  | 
| 4646 4596 | 
             
                # attr_reader value: Prism::node
         | 
| 4647 4597 | 
             
                attr_reader :value
         | 
| 4648 4598 |  | 
| 4649 | 
            -
                # attr_reader  | 
| 4650 | 
            -
                attr_reader : | 
| 4599 | 
            +
                # attr_reader binary_operator: Symbol
         | 
| 4600 | 
            +
                attr_reader :binary_operator
         | 
| 4651 4601 |  | 
| 4652 4602 | 
             
                # def inspect -> String
         | 
| 4653 4603 | 
             
                def inspect
         | 
| @@ -4688,9 +4638,9 @@ module Prism | |
| 4688 4638 | 
             
                  other.is_a?(ConstantOperatorWriteNode) &&
         | 
| 4689 4639 | 
             
                    (name === other.name) &&
         | 
| 4690 4640 | 
             
                    (name_loc.nil? == other.name_loc.nil?) &&
         | 
| 4691 | 
            -
                    ( | 
| 4641 | 
            +
                    (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
         | 
| 4692 4642 | 
             
                    (value === other.value) &&
         | 
| 4693 | 
            -
                    ( | 
| 4643 | 
            +
                    (binary_operator === other.binary_operator)
         | 
| 4694 4644 | 
             
                end
         | 
| 4695 4645 | 
             
              end
         | 
| 4696 4646 |  | 
| @@ -4702,7 +4652,6 @@ module Prism | |
| 4702 4652 | 
             
                # def initialize: (Symbol name, Location name_loc, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 4703 4653 | 
             
                def initialize(source, name, name_loc, operator_loc, value, location)
         | 
| 4704 4654 | 
             
                  @source = source
         | 
| 4705 | 
            -
                  @newline = false
         | 
| 4706 4655 | 
             
                  @location = location
         | 
| 4707 4656 | 
             
                  @name = name
         | 
| 4708 4657 | 
             
                  @name_loc = name_loc
         | 
| @@ -4820,7 +4769,6 @@ module Prism | |
| 4820 4769 | 
             
                # def initialize: (ConstantPathNode target, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 4821 4770 | 
             
                def initialize(source, target, operator_loc, value, location)
         | 
| 4822 4771 | 
             
                  @source = source
         | 
| 4823 | 
            -
                  @newline = false
         | 
| 4824 4772 | 
             
                  @location = location
         | 
| 4825 4773 | 
             
                  @target = target
         | 
| 4826 4774 | 
             
                  @operator_loc = operator_loc
         | 
| @@ -4929,7 +4877,6 @@ module Prism | |
| 4929 4877 | 
             
                # def initialize: (Prism::node? parent, Symbol? name, Location delimiter_loc, Location name_loc, Location location) -> void
         | 
| 4930 4878 | 
             
                def initialize(source, parent, name, delimiter_loc, name_loc, location)
         | 
| 4931 4879 | 
             
                  @source = source
         | 
| 4932 | 
            -
                  @newline = false
         | 
| 4933 4880 | 
             
                  @location = location
         | 
| 4934 4881 | 
             
                  @parent = parent
         | 
| 4935 4882 | 
             
                  @name = name
         | 
| @@ -5067,15 +5014,14 @@ module Prism | |
| 5067 5014 | 
             
              #     Parent::Child += value
         | 
| 5068 5015 | 
             
              #     ^^^^^^^^^^^^^^^^^^^^^^
         | 
| 5069 5016 | 
             
              class ConstantPathOperatorWriteNode < Node
         | 
| 5070 | 
            -
                # def initialize: (ConstantPathNode target, Location  | 
| 5071 | 
            -
                def initialize(source, target,  | 
| 5017 | 
            +
                # def initialize: (ConstantPathNode target, Location binary_operator_loc, Prism::node value, Symbol binary_operator, Location location) -> void
         | 
| 5018 | 
            +
                def initialize(source, target, binary_operator_loc, value, binary_operator, location)
         | 
| 5072 5019 | 
             
                  @source = source
         | 
| 5073 | 
            -
                  @newline = false
         | 
| 5074 5020 | 
             
                  @location = location
         | 
| 5075 5021 | 
             
                  @target = target
         | 
| 5076 | 
            -
                  @ | 
| 5022 | 
            +
                  @binary_operator_loc = binary_operator_loc
         | 
| 5077 5023 | 
             
                  @value = value
         | 
| 5078 | 
            -
                  @ | 
| 5024 | 
            +
                  @binary_operator = binary_operator
         | 
| 5079 5025 | 
             
                end
         | 
| 5080 5026 |  | 
| 5081 5027 | 
             
                # def accept: (Visitor visitor) -> void
         | 
| @@ -5095,37 +5041,37 @@ module Prism | |
| 5095 5041 |  | 
| 5096 5042 | 
             
                # def comment_targets: () -> Array[Node | Location]
         | 
| 5097 5043 | 
             
                def comment_targets
         | 
| 5098 | 
            -
                  [target,  | 
| 5044 | 
            +
                  [target, binary_operator_loc, value] #: Array[Prism::node | Location]
         | 
| 5099 5045 | 
             
                end
         | 
| 5100 5046 |  | 
| 5101 | 
            -
                # def copy: (?target: ConstantPathNode, ? | 
| 5102 | 
            -
                def copy(target: self.target,  | 
| 5103 | 
            -
                  ConstantPathOperatorWriteNode.new(source, target,  | 
| 5047 | 
            +
                # def copy: (?target: ConstantPathNode, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol, ?location: Location) -> ConstantPathOperatorWriteNode
         | 
| 5048 | 
            +
                def copy(target: self.target, binary_operator_loc: self.binary_operator_loc, value: self.value, binary_operator: self.binary_operator, location: self.location)
         | 
| 5049 | 
            +
                  ConstantPathOperatorWriteNode.new(source, target, binary_operator_loc, value, binary_operator, location)
         | 
| 5104 5050 | 
             
                end
         | 
| 5105 5051 |  | 
| 5106 5052 | 
             
                # def deconstruct: () -> Array[nil | Node]
         | 
| 5107 5053 | 
             
                alias deconstruct child_nodes
         | 
| 5108 5054 |  | 
| 5109 | 
            -
                # def deconstruct_keys: (Array[Symbol] keys) -> { target: ConstantPathNode,  | 
| 5055 | 
            +
                # def deconstruct_keys: (Array[Symbol] keys) -> { target: ConstantPathNode, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol, location: Location }
         | 
| 5110 5056 | 
             
                def deconstruct_keys(keys)
         | 
| 5111 | 
            -
                  { target: target,  | 
| 5057 | 
            +
                  { target: target, binary_operator_loc: binary_operator_loc, value: value, binary_operator: binary_operator, location: location }
         | 
| 5112 5058 | 
             
                end
         | 
| 5113 5059 |  | 
| 5114 5060 | 
             
                # attr_reader target: ConstantPathNode
         | 
| 5115 5061 | 
             
                attr_reader :target
         | 
| 5116 5062 |  | 
| 5117 | 
            -
                # attr_reader  | 
| 5118 | 
            -
                def  | 
| 5119 | 
            -
                  location = @ | 
| 5063 | 
            +
                # attr_reader binary_operator_loc: Location
         | 
| 5064 | 
            +
                def binary_operator_loc
         | 
| 5065 | 
            +
                  location = @binary_operator_loc
         | 
| 5120 5066 | 
             
                  return location if location.is_a?(Location)
         | 
| 5121 | 
            -
                  @ | 
| 5067 | 
            +
                  @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 5122 5068 | 
             
                end
         | 
| 5123 5069 |  | 
| 5124 5070 | 
             
                # attr_reader value: Prism::node
         | 
| 5125 5071 | 
             
                attr_reader :value
         | 
| 5126 5072 |  | 
| 5127 | 
            -
                # attr_reader  | 
| 5128 | 
            -
                attr_reader : | 
| 5073 | 
            +
                # attr_reader binary_operator: Symbol
         | 
| 5074 | 
            +
                attr_reader :binary_operator
         | 
| 5129 5075 |  | 
| 5130 5076 | 
             
                # def inspect -> String
         | 
| 5131 5077 | 
             
                def inspect
         | 
| @@ -5165,9 +5111,9 @@ module Prism | |
| 5165 5111 | 
             
                def ===(other)
         | 
| 5166 5112 | 
             
                  other.is_a?(ConstantPathOperatorWriteNode) &&
         | 
| 5167 5113 | 
             
                    (target === other.target) &&
         | 
| 5168 | 
            -
                    ( | 
| 5114 | 
            +
                    (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
         | 
| 5169 5115 | 
             
                    (value === other.value) &&
         | 
| 5170 | 
            -
                    ( | 
| 5116 | 
            +
                    (binary_operator === other.binary_operator)
         | 
| 5171 5117 | 
             
                end
         | 
| 5172 5118 | 
             
              end
         | 
| 5173 5119 |  | 
| @@ -5179,7 +5125,6 @@ module Prism | |
| 5179 5125 | 
             
                # def initialize: (ConstantPathNode target, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 5180 5126 | 
             
                def initialize(source, target, operator_loc, value, location)
         | 
| 5181 5127 | 
             
                  @source = source
         | 
| 5182 | 
            -
                  @newline = false
         | 
| 5183 5128 | 
             
                  @location = location
         | 
| 5184 5129 | 
             
                  @target = target
         | 
| 5185 5130 | 
             
                  @operator_loc = operator_loc
         | 
| @@ -5288,7 +5233,6 @@ module Prism | |
| 5288 5233 | 
             
                # def initialize: (Prism::node? parent, Symbol? name, Location delimiter_loc, Location name_loc, Location location) -> void
         | 
| 5289 5234 | 
             
                def initialize(source, parent, name, delimiter_loc, name_loc, location)
         | 
| 5290 5235 | 
             
                  @source = source
         | 
| 5291 | 
            -
                  @newline = false
         | 
| 5292 5236 | 
             
                  @location = location
         | 
| 5293 5237 | 
             
                  @parent = parent
         | 
| 5294 5238 | 
             
                  @name = name
         | 
| @@ -5414,7 +5358,6 @@ module Prism | |
| 5414 5358 | 
             
                # def initialize: (ConstantPathNode target, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 5415 5359 | 
             
                def initialize(source, target, operator_loc, value, location)
         | 
| 5416 5360 | 
             
                  @source = source
         | 
| 5417 | 
            -
                  @newline = false
         | 
| 5418 5361 | 
             
                  @location = location
         | 
| 5419 5362 | 
             
                  @target = target
         | 
| 5420 5363 | 
             
                  @operator_loc = operator_loc
         | 
| @@ -5535,7 +5478,6 @@ module Prism | |
| 5535 5478 | 
             
                # def initialize: (Symbol name, Location location) -> void
         | 
| 5536 5479 | 
             
                def initialize(source, name, location)
         | 
| 5537 5480 | 
             
                  @source = source
         | 
| 5538 | 
            -
                  @newline = false
         | 
| 5539 5481 | 
             
                  @location = location
         | 
| 5540 5482 | 
             
                  @name = name
         | 
| 5541 5483 | 
             
                end
         | 
| @@ -5629,7 +5571,6 @@ module Prism | |
| 5629 5571 | 
             
                # def initialize: (Symbol name, Location location) -> void
         | 
| 5630 5572 | 
             
                def initialize(source, name, location)
         | 
| 5631 5573 | 
             
                  @source = source
         | 
| 5632 | 
            -
                  @newline = false
         | 
| 5633 5574 | 
             
                  @location = location
         | 
| 5634 5575 | 
             
                  @name = name
         | 
| 5635 5576 | 
             
                end
         | 
| @@ -5719,7 +5660,6 @@ module Prism | |
| 5719 5660 | 
             
                # def initialize: (Symbol name, Location name_loc, Prism::node value, Location operator_loc, Location location) -> void
         | 
| 5720 5661 | 
             
                def initialize(source, name, name_loc, value, operator_loc, location)
         | 
| 5721 5662 | 
             
                  @source = source
         | 
| 5722 | 
            -
                  @newline = false
         | 
| 5723 5663 | 
             
                  @location = location
         | 
| 5724 5664 | 
             
                  @name = name
         | 
| 5725 5665 | 
             
                  @name_loc = name_loc
         | 
| @@ -5854,7 +5794,6 @@ module Prism | |
| 5854 5794 | 
             
                # def initialize: (Symbol name, Location name_loc, Prism::node? receiver, ParametersNode? parameters, Prism::node? body, Array[Symbol] locals, Location def_keyword_loc, Location? operator_loc, Location? lparen_loc, Location? rparen_loc, Location? equal_loc, Location? end_keyword_loc, Location location) -> void
         | 
| 5855 5795 | 
             
                def initialize(source, name, name_loc, receiver, parameters, body, locals, def_keyword_loc, operator_loc, lparen_loc, rparen_loc, equal_loc, end_keyword_loc, location)
         | 
| 5856 5796 | 
             
                  @source = source
         | 
| 5857 | 
            -
                  @newline = false
         | 
| 5858 5797 | 
             
                  @location = location
         | 
| 5859 5798 | 
             
                  @name = name
         | 
| 5860 5799 | 
             
                  @name_loc = name_loc
         | 
| @@ -6092,7 +6031,6 @@ module Prism | |
| 6092 6031 | 
             
                # def initialize: (Location? lparen_loc, Prism::node value, Location? rparen_loc, Location keyword_loc, Location location) -> void
         | 
| 6093 6032 | 
             
                def initialize(source, lparen_loc, value, rparen_loc, keyword_loc, location)
         | 
| 6094 6033 | 
             
                  @source = source
         | 
| 6095 | 
            -
                  @newline = false
         | 
| 6096 6034 | 
             
                  @location = location
         | 
| 6097 6035 | 
             
                  @lparen_loc = lparen_loc
         | 
| 6098 6036 | 
             
                  @value = value
         | 
| @@ -6236,7 +6174,6 @@ module Prism | |
| 6236 6174 | 
             
                # def initialize: (Location else_keyword_loc, StatementsNode? statements, Location? end_keyword_loc, Location location) -> void
         | 
| 6237 6175 | 
             
                def initialize(source, else_keyword_loc, statements, end_keyword_loc, location)
         | 
| 6238 6176 | 
             
                  @source = source
         | 
| 6239 | 
            -
                  @newline = false
         | 
| 6240 6177 | 
             
                  @location = location
         | 
| 6241 6178 | 
             
                  @else_keyword_loc = else_keyword_loc
         | 
| 6242 6179 | 
             
                  @statements = statements
         | 
| @@ -6362,7 +6299,6 @@ module Prism | |
| 6362 6299 | 
             
                # def initialize: (Location opening_loc, StatementsNode? statements, Location closing_loc, Location location) -> void
         | 
| 6363 6300 | 
             
                def initialize(source, opening_loc, statements, closing_loc, location)
         | 
| 6364 6301 | 
             
                  @source = source
         | 
| 6365 | 
            -
                  @newline = false
         | 
| 6366 6302 | 
             
                  @location = location
         | 
| 6367 6303 | 
             
                  @opening_loc = opening_loc
         | 
| 6368 6304 | 
             
                  @statements = statements
         | 
| @@ -6482,7 +6418,6 @@ module Prism | |
| 6482 6418 | 
             
                # def initialize: (Location operator_loc, Prism::node variable, Location location) -> void
         | 
| 6483 6419 | 
             
                def initialize(source, operator_loc, variable, location)
         | 
| 6484 6420 | 
             
                  @source = source
         | 
| 6485 | 
            -
                  @newline = false
         | 
| 6486 6421 | 
             
                  @location = location
         | 
| 6487 6422 | 
             
                  @operator_loc = operator_loc
         | 
| 6488 6423 | 
             
                  @variable = variable
         | 
| @@ -6590,7 +6525,6 @@ module Prism | |
| 6590 6525 | 
             
                # def initialize: (Location ensure_keyword_loc, StatementsNode? statements, Location end_keyword_loc, Location location) -> void
         | 
| 6591 6526 | 
             
                def initialize(source, ensure_keyword_loc, statements, end_keyword_loc, location)
         | 
| 6592 6527 | 
             
                  @source = source
         | 
| 6593 | 
            -
                  @newline = false
         | 
| 6594 6528 | 
             
                  @location = location
         | 
| 6595 6529 | 
             
                  @ensure_keyword_loc = ensure_keyword_loc
         | 
| 6596 6530 | 
             
                  @statements = statements
         | 
| @@ -6710,7 +6644,6 @@ module Prism | |
| 6710 6644 | 
             
                # def initialize: (Location location) -> void
         | 
| 6711 6645 | 
             
                def initialize(source, location)
         | 
| 6712 6646 | 
             
                  @source = source
         | 
| 6713 | 
            -
                  @newline = false
         | 
| 6714 6647 | 
             
                  @location = location
         | 
| 6715 6648 | 
             
                end
         | 
| 6716 6649 |  | 
| @@ -6801,7 +6734,6 @@ module Prism | |
| 6801 6734 | 
             
                # def initialize: (Prism::node? constant, Prism::node left, Array[Prism::node] requireds, Prism::node right, Location? opening_loc, Location? closing_loc, Location location) -> void
         | 
| 6802 6735 | 
             
                def initialize(source, constant, left, requireds, right, opening_loc, closing_loc, location)
         | 
| 6803 6736 | 
             
                  @source = source
         | 
| 6804 | 
            -
                  @newline = false
         | 
| 6805 6737 | 
             
                  @location = location
         | 
| 6806 6738 | 
             
                  @constant = constant
         | 
| 6807 6739 | 
             
                  @left = left
         | 
| @@ -6952,7 +6884,6 @@ module Prism | |
| 6952 6884 | 
             
                # def initialize: (Integer flags, Prism::node? left, Prism::node? right, Location operator_loc, Location location) -> void
         | 
| 6953 6885 | 
             
                def initialize(source, flags, left, right, operator_loc, location)
         | 
| 6954 6886 | 
             
                  @source = source
         | 
| 6955 | 
            -
                  @newline = false
         | 
| 6956 6887 | 
             
                  @location = location
         | 
| 6957 6888 | 
             
                  @flags = flags
         | 
| 6958 6889 | 
             
                  @left = left
         | 
| @@ -7075,7 +7006,6 @@ module Prism | |
| 7075 7006 | 
             
                # def initialize: (Float value, Location location) -> void
         | 
| 7076 7007 | 
             
                def initialize(source, value, location)
         | 
| 7077 7008 | 
             
                  @source = source
         | 
| 7078 | 
            -
                  @newline = false
         | 
| 7079 7009 | 
             
                  @location = location
         | 
| 7080 7010 | 
             
                  @value = value
         | 
| 7081 7011 | 
             
                end
         | 
| @@ -7165,7 +7095,6 @@ module Prism | |
| 7165 7095 | 
             
                # def initialize: (Prism::node index, Prism::node collection, StatementsNode? statements, Location for_keyword_loc, Location in_keyword_loc, Location? do_keyword_loc, Location end_keyword_loc, Location location) -> void
         | 
| 7166 7096 | 
             
                def initialize(source, index, collection, statements, for_keyword_loc, in_keyword_loc, do_keyword_loc, end_keyword_loc, location)
         | 
| 7167 7097 | 
             
                  @source = source
         | 
| 7168 | 
            -
                  @newline = false
         | 
| 7169 7098 | 
             
                  @location = location
         | 
| 7170 7099 | 
             
                  @index = index
         | 
| 7171 7100 | 
             
                  @collection = collection
         | 
| @@ -7213,30 +7142,50 @@ module Prism | |
| 7213 7142 | 
             
                  { index: index, collection: collection, statements: statements, for_keyword_loc: for_keyword_loc, in_keyword_loc: in_keyword_loc, do_keyword_loc: do_keyword_loc, end_keyword_loc: end_keyword_loc, location: location }
         | 
| 7214 7143 | 
             
                end
         | 
| 7215 7144 |  | 
| 7216 | 
            -
                #  | 
| 7145 | 
            +
                # The index expression for `for` loops.
         | 
| 7146 | 
            +
                #
         | 
| 7147 | 
            +
                #     for i in a end
         | 
| 7148 | 
            +
                #         ^
         | 
| 7217 7149 | 
             
                attr_reader :index
         | 
| 7218 7150 |  | 
| 7219 | 
            -
                #  | 
| 7151 | 
            +
                # The collection to iterate over.
         | 
| 7152 | 
            +
                #
         | 
| 7153 | 
            +
                #     for i in a end
         | 
| 7154 | 
            +
                #              ^
         | 
| 7220 7155 | 
             
                attr_reader :collection
         | 
| 7221 7156 |  | 
| 7222 | 
            -
                #  | 
| 7157 | 
            +
                # Represents the body of statements to execute for each iteration of the loop.
         | 
| 7158 | 
            +
                #
         | 
| 7159 | 
            +
                #     for i in a
         | 
| 7160 | 
            +
                #       foo(i)
         | 
| 7161 | 
            +
                #       ^^^^^^
         | 
| 7162 | 
            +
                #     end
         | 
| 7223 7163 | 
             
                attr_reader :statements
         | 
| 7224 7164 |  | 
| 7225 | 
            -
                #  | 
| 7165 | 
            +
                # The location of the `for` keyword.
         | 
| 7166 | 
            +
                #
         | 
| 7167 | 
            +
                #     for i in a end
         | 
| 7168 | 
            +
                #     ^^^
         | 
| 7226 7169 | 
             
                def for_keyword_loc
         | 
| 7227 7170 | 
             
                  location = @for_keyword_loc
         | 
| 7228 7171 | 
             
                  return location if location.is_a?(Location)
         | 
| 7229 7172 | 
             
                  @for_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 7230 7173 | 
             
                end
         | 
| 7231 7174 |  | 
| 7232 | 
            -
                #  | 
| 7175 | 
            +
                # The location of the `in` keyword.
         | 
| 7176 | 
            +
                #
         | 
| 7177 | 
            +
                #     for i in a end
         | 
| 7178 | 
            +
                #           ^^
         | 
| 7233 7179 | 
             
                def in_keyword_loc
         | 
| 7234 7180 | 
             
                  location = @in_keyword_loc
         | 
| 7235 7181 | 
             
                  return location if location.is_a?(Location)
         | 
| 7236 7182 | 
             
                  @in_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 7237 7183 | 
             
                end
         | 
| 7238 7184 |  | 
| 7239 | 
            -
                #  | 
| 7185 | 
            +
                # The location of the `do` keyword, if present.
         | 
| 7186 | 
            +
                #
         | 
| 7187 | 
            +
                #     for i in a do end
         | 
| 7188 | 
            +
                #                ^^
         | 
| 7240 7189 | 
             
                def do_keyword_loc
         | 
| 7241 7190 | 
             
                  location = @do_keyword_loc
         | 
| 7242 7191 | 
             
                  case location
         | 
| @@ -7249,7 +7198,10 @@ module Prism | |
| 7249 7198 | 
             
                  end
         | 
| 7250 7199 | 
             
                end
         | 
| 7251 7200 |  | 
| 7252 | 
            -
                #  | 
| 7201 | 
            +
                # The location of the `end` keyword.
         | 
| 7202 | 
            +
                #
         | 
| 7203 | 
            +
                #     for i in a end
         | 
| 7204 | 
            +
                #                ^^^
         | 
| 7253 7205 | 
             
                def end_keyword_loc
         | 
| 7254 7206 | 
             
                  location = @end_keyword_loc
         | 
| 7255 7207 | 
             
                  return location if location.is_a?(Location)
         | 
| @@ -7333,7 +7285,6 @@ module Prism | |
| 7333 7285 | 
             
                # def initialize: (Location location) -> void
         | 
| 7334 7286 | 
             
                def initialize(source, location)
         | 
| 7335 7287 | 
             
                  @source = source
         | 
| 7336 | 
            -
                  @newline = false
         | 
| 7337 7288 | 
             
                  @location = location
         | 
| 7338 7289 | 
             
                end
         | 
| 7339 7290 |  | 
| @@ -7419,7 +7370,6 @@ module Prism | |
| 7419 7370 | 
             
                # def initialize: (Location location) -> void
         | 
| 7420 7371 | 
             
                def initialize(source, location)
         | 
| 7421 7372 | 
             
                  @source = source
         | 
| 7422 | 
            -
                  @newline = false
         | 
| 7423 7373 | 
             
                  @location = location
         | 
| 7424 7374 | 
             
                end
         | 
| 7425 7375 |  | 
| @@ -7504,7 +7454,6 @@ module Prism | |
| 7504 7454 | 
             
                # def initialize: (BlockNode? block, Location location) -> void
         | 
| 7505 7455 | 
             
                def initialize(source, block, location)
         | 
| 7506 7456 | 
             
                  @source = source
         | 
| 7507 | 
            -
                  @newline = false
         | 
| 7508 7457 | 
             
                  @location = location
         | 
| 7509 7458 | 
             
                  @block = block
         | 
| 7510 7459 | 
             
                end
         | 
| @@ -7596,7 +7545,6 @@ module Prism | |
| 7596 7545 | 
             
                # def initialize: (Symbol name, Location name_loc, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 7597 7546 | 
             
                def initialize(source, name, name_loc, operator_loc, value, location)
         | 
| 7598 7547 | 
             
                  @source = source
         | 
| 7599 | 
            -
                  @newline = false
         | 
| 7600 7548 | 
             
                  @location = location
         | 
| 7601 7549 | 
             
                  @name = name
         | 
| 7602 7550 | 
             
                  @name_loc = name_loc
         | 
| @@ -7711,16 +7659,15 @@ module Prism | |
| 7711 7659 | 
             
              #     $target += value
         | 
| 7712 7660 | 
             
              #     ^^^^^^^^^^^^^^^^
         | 
| 7713 7661 | 
             
              class GlobalVariableOperatorWriteNode < Node
         | 
| 7714 | 
            -
                # def initialize: (Symbol name, Location name_loc, Location  | 
| 7715 | 
            -
                def initialize(source, name, name_loc,  | 
| 7662 | 
            +
                # def initialize: (Symbol name, Location name_loc, Location binary_operator_loc, Prism::node value, Symbol binary_operator, Location location) -> void
         | 
| 7663 | 
            +
                def initialize(source, name, name_loc, binary_operator_loc, value, binary_operator, location)
         | 
| 7716 7664 | 
             
                  @source = source
         | 
| 7717 | 
            -
                  @newline = false
         | 
| 7718 7665 | 
             
                  @location = location
         | 
| 7719 7666 | 
             
                  @name = name
         | 
| 7720 7667 | 
             
                  @name_loc = name_loc
         | 
| 7721 | 
            -
                  @ | 
| 7668 | 
            +
                  @binary_operator_loc = binary_operator_loc
         | 
| 7722 7669 | 
             
                  @value = value
         | 
| 7723 | 
            -
                  @ | 
| 7670 | 
            +
                  @binary_operator = binary_operator
         | 
| 7724 7671 | 
             
                end
         | 
| 7725 7672 |  | 
| 7726 7673 | 
             
                # def accept: (Visitor visitor) -> void
         | 
| @@ -7740,20 +7687,20 @@ module Prism | |
| 7740 7687 |  | 
| 7741 7688 | 
             
                # def comment_targets: () -> Array[Node | Location]
         | 
| 7742 7689 | 
             
                def comment_targets
         | 
| 7743 | 
            -
                  [name_loc,  | 
| 7690 | 
            +
                  [name_loc, binary_operator_loc, value] #: Array[Prism::node | Location]
         | 
| 7744 7691 | 
             
                end
         | 
| 7745 7692 |  | 
| 7746 | 
            -
                # def copy: (?name: Symbol, ?name_loc: Location, ? | 
| 7747 | 
            -
                def copy(name: self.name, name_loc: self.name_loc,  | 
| 7748 | 
            -
                  GlobalVariableOperatorWriteNode.new(source, name, name_loc,  | 
| 7693 | 
            +
                # def copy: (?name: Symbol, ?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol, ?location: Location) -> GlobalVariableOperatorWriteNode
         | 
| 7694 | 
            +
                def copy(name: self.name, name_loc: self.name_loc, binary_operator_loc: self.binary_operator_loc, value: self.value, binary_operator: self.binary_operator, location: self.location)
         | 
| 7695 | 
            +
                  GlobalVariableOperatorWriteNode.new(source, name, name_loc, binary_operator_loc, value, binary_operator, location)
         | 
| 7749 7696 | 
             
                end
         | 
| 7750 7697 |  | 
| 7751 7698 | 
             
                # def deconstruct: () -> Array[nil | Node]
         | 
| 7752 7699 | 
             
                alias deconstruct child_nodes
         | 
| 7753 7700 |  | 
| 7754 | 
            -
                # def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location,  | 
| 7701 | 
            +
                # def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol, location: Location }
         | 
| 7755 7702 | 
             
                def deconstruct_keys(keys)
         | 
| 7756 | 
            -
                  { name: name, name_loc: name_loc,  | 
| 7703 | 
            +
                  { name: name, name_loc: name_loc, binary_operator_loc: binary_operator_loc, value: value, binary_operator: binary_operator, location: location }
         | 
| 7757 7704 | 
             
                end
         | 
| 7758 7705 |  | 
| 7759 7706 | 
             
                # attr_reader name: Symbol
         | 
| @@ -7766,18 +7713,18 @@ module Prism | |
| 7766 7713 | 
             
                  @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 7767 7714 | 
             
                end
         | 
| 7768 7715 |  | 
| 7769 | 
            -
                # attr_reader  | 
| 7770 | 
            -
                def  | 
| 7771 | 
            -
                  location = @ | 
| 7716 | 
            +
                # attr_reader binary_operator_loc: Location
         | 
| 7717 | 
            +
                def binary_operator_loc
         | 
| 7718 | 
            +
                  location = @binary_operator_loc
         | 
| 7772 7719 | 
             
                  return location if location.is_a?(Location)
         | 
| 7773 | 
            -
                  @ | 
| 7720 | 
            +
                  @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 7774 7721 | 
             
                end
         | 
| 7775 7722 |  | 
| 7776 7723 | 
             
                # attr_reader value: Prism::node
         | 
| 7777 7724 | 
             
                attr_reader :value
         | 
| 7778 7725 |  | 
| 7779 | 
            -
                # attr_reader  | 
| 7780 | 
            -
                attr_reader : | 
| 7726 | 
            +
                # attr_reader binary_operator: Symbol
         | 
| 7727 | 
            +
                attr_reader :binary_operator
         | 
| 7781 7728 |  | 
| 7782 7729 | 
             
                # def inspect -> String
         | 
| 7783 7730 | 
             
                def inspect
         | 
| @@ -7818,9 +7765,9 @@ module Prism | |
| 7818 7765 | 
             
                  other.is_a?(GlobalVariableOperatorWriteNode) &&
         | 
| 7819 7766 | 
             
                    (name === other.name) &&
         | 
| 7820 7767 | 
             
                    (name_loc.nil? == other.name_loc.nil?) &&
         | 
| 7821 | 
            -
                    ( | 
| 7768 | 
            +
                    (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
         | 
| 7822 7769 | 
             
                    (value === other.value) &&
         | 
| 7823 | 
            -
                    ( | 
| 7770 | 
            +
                    (binary_operator === other.binary_operator)
         | 
| 7824 7771 | 
             
                end
         | 
| 7825 7772 | 
             
              end
         | 
| 7826 7773 |  | 
| @@ -7832,7 +7779,6 @@ module Prism | |
| 7832 7779 | 
             
                # def initialize: (Symbol name, Location name_loc, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 7833 7780 | 
             
                def initialize(source, name, name_loc, operator_loc, value, location)
         | 
| 7834 7781 | 
             
                  @source = source
         | 
| 7835 | 
            -
                  @newline = false
         | 
| 7836 7782 | 
             
                  @location = location
         | 
| 7837 7783 | 
             
                  @name = name
         | 
| 7838 7784 | 
             
                  @name_loc = name_loc
         | 
| @@ -7950,7 +7896,6 @@ module Prism | |
| 7950 7896 | 
             
                # def initialize: (Symbol name, Location location) -> void
         | 
| 7951 7897 | 
             
                def initialize(source, name, location)
         | 
| 7952 7898 | 
             
                  @source = source
         | 
| 7953 | 
            -
                  @newline = false
         | 
| 7954 7899 | 
             
                  @location = location
         | 
| 7955 7900 | 
             
                  @name = name
         | 
| 7956 7901 | 
             
                end
         | 
| @@ -8044,7 +7989,6 @@ module Prism | |
| 8044 7989 | 
             
                # def initialize: (Symbol name, Location location) -> void
         | 
| 8045 7990 | 
             
                def initialize(source, name, location)
         | 
| 8046 7991 | 
             
                  @source = source
         | 
| 8047 | 
            -
                  @newline = false
         | 
| 8048 7992 | 
             
                  @location = location
         | 
| 8049 7993 | 
             
                  @name = name
         | 
| 8050 7994 | 
             
                end
         | 
| @@ -8134,7 +8078,6 @@ module Prism | |
| 8134 8078 | 
             
                # def initialize: (Symbol name, Location name_loc, Prism::node value, Location operator_loc, Location location) -> void
         | 
| 8135 8079 | 
             
                def initialize(source, name, name_loc, value, operator_loc, location)
         | 
| 8136 8080 | 
             
                  @source = source
         | 
| 8137 | 
            -
                  @newline = false
         | 
| 8138 8081 | 
             
                  @location = location
         | 
| 8139 8082 | 
             
                  @name = name
         | 
| 8140 8083 | 
             
                  @name_loc = name_loc
         | 
| @@ -8268,7 +8211,6 @@ module Prism | |
| 8268 8211 | 
             
                # def initialize: (Location opening_loc, Array[AssocNode | AssocSplatNode] elements, Location closing_loc, Location location) -> void
         | 
| 8269 8212 | 
             
                def initialize(source, opening_loc, elements, closing_loc, location)
         | 
| 8270 8213 | 
             
                  @source = source
         | 
| 8271 | 
            -
                  @newline = false
         | 
| 8272 8214 | 
             
                  @location = location
         | 
| 8273 8215 | 
             
                  @opening_loc = opening_loc
         | 
| 8274 8216 | 
             
                  @elements = elements
         | 
| @@ -8402,7 +8344,6 @@ module Prism | |
| 8402 8344 | 
             
                # def initialize: (Prism::node? constant, Array[AssocNode] elements, AssocSplatNode | NoKeywordsParameterNode | nil rest, Location? opening_loc, Location? closing_loc, Location location) -> void
         | 
| 8403 8345 | 
             
                def initialize(source, constant, elements, rest, opening_loc, closing_loc, location)
         | 
| 8404 8346 | 
             
                  @source = source
         | 
| 8405 | 
            -
                  @newline = false
         | 
| 8406 8347 | 
             
                  @location = location
         | 
| 8407 8348 | 
             
                  @constant = constant
         | 
| 8408 8349 | 
             
                  @elements = elements
         | 
| @@ -8553,7 +8494,6 @@ module Prism | |
| 8553 8494 | 
             
                # def initialize: (Location? if_keyword_loc, Prism::node predicate, Location? then_keyword_loc, StatementsNode? statements, Prism::node? consequent, Location? end_keyword_loc, Location location) -> void
         | 
| 8554 8495 | 
             
                def initialize(source, if_keyword_loc, predicate, then_keyword_loc, statements, consequent, end_keyword_loc, location)
         | 
| 8555 8496 | 
             
                  @source = source
         | 
| 8556 | 
            -
                  @newline = false
         | 
| 8557 8497 | 
             
                  @location = location
         | 
| 8558 8498 | 
             
                  @if_keyword_loc = if_keyword_loc
         | 
| 8559 8499 | 
             
                  @predicate = predicate
         | 
| @@ -8568,10 +8508,6 @@ module Prism | |
| 8568 8508 | 
             
                  visitor.visit_if_node(self)
         | 
| 8569 8509 | 
             
                end
         | 
| 8570 8510 |  | 
| 8571 | 
            -
                def set_newline_flag(newline_marked) # :nodoc:
         | 
| 8572 | 
            -
                  predicate.set_newline_flag(newline_marked)
         | 
| 8573 | 
            -
                end
         | 
| 8574 | 
            -
             | 
| 8575 8511 | 
             
                # def child_nodes: () -> Array[nil | Node]
         | 
| 8576 8512 | 
             
                def child_nodes
         | 
| 8577 8513 | 
             
                  [predicate, statements, consequent]
         | 
| @@ -8767,7 +8703,6 @@ module Prism | |
| 8767 8703 | 
             
                # def initialize: (FloatNode | IntegerNode | RationalNode numeric, Location location) -> void
         | 
| 8768 8704 | 
             
                def initialize(source, numeric, location)
         | 
| 8769 8705 | 
             
                  @source = source
         | 
| 8770 | 
            -
                  @newline = false
         | 
| 8771 8706 | 
             
                  @location = location
         | 
| 8772 8707 | 
             
                  @numeric = numeric
         | 
| 8773 8708 | 
             
                end
         | 
| @@ -8863,7 +8798,6 @@ module Prism | |
| 8863 8798 | 
             
                # def initialize: (Prism::node value, Location location) -> void
         | 
| 8864 8799 | 
             
                def initialize(source, value, location)
         | 
| 8865 8800 | 
             
                  @source = source
         | 
| 8866 | 
            -
                  @newline = false
         | 
| 8867 8801 | 
             
                  @location = location
         | 
| 8868 8802 | 
             
                  @value = value
         | 
| 8869 8803 | 
             
                end
         | 
| @@ -8962,7 +8896,6 @@ module Prism | |
| 8962 8896 | 
             
                # def initialize: (Location location) -> void
         | 
| 8963 8897 | 
             
                def initialize(source, location)
         | 
| 8964 8898 | 
             
                  @source = source
         | 
| 8965 | 
            -
                  @newline = false
         | 
| 8966 8899 | 
             
                  @location = location
         | 
| 8967 8900 | 
             
                end
         | 
| 8968 8901 |  | 
| @@ -9047,7 +8980,6 @@ module Prism | |
| 9047 8980 | 
             
                # def initialize: (Prism::node pattern, StatementsNode? statements, Location in_loc, Location? then_loc, Location location) -> void
         | 
| 9048 8981 | 
             
                def initialize(source, pattern, statements, in_loc, then_loc, location)
         | 
| 9049 8982 | 
             
                  @source = source
         | 
| 9050 | 
            -
                  @newline = false
         | 
| 9051 8983 | 
             
                  @location = location
         | 
| 9052 8984 | 
             
                  @pattern = pattern
         | 
| 9053 8985 | 
             
                  @statements = statements
         | 
| @@ -9179,7 +9111,6 @@ module Prism | |
| 9179 9111 | 
             
                # def initialize: (Integer flags, Prism::node? receiver, Location? call_operator_loc, Location opening_loc, ArgumentsNode? arguments, Location closing_loc, Prism::node? block, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 9180 9112 | 
             
                def initialize(source, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, operator_loc, value, location)
         | 
| 9181 9113 | 
             
                  @source = source
         | 
| 9182 | 
            -
                  @newline = false
         | 
| 9183 9114 | 
             
                  @location = location
         | 
| 9184 9115 | 
             
                  @flags = flags
         | 
| 9185 9116 | 
             
                  @receiver = receiver
         | 
| @@ -9374,10 +9305,9 @@ module Prism | |
| 9374 9305 | 
             
              #     foo.bar[baz] += value
         | 
| 9375 9306 | 
             
              #     ^^^^^^^^^^^^^^^^^^^^^
         | 
| 9376 9307 | 
             
              class IndexOperatorWriteNode < Node
         | 
| 9377 | 
            -
                # def initialize: (Integer flags, Prism::node? receiver, Location? call_operator_loc, Location opening_loc, ArgumentsNode? arguments, Location closing_loc, Prism::node? block, Symbol  | 
| 9378 | 
            -
                def initialize(source, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block,  | 
| 9308 | 
            +
                # def initialize: (Integer flags, Prism::node? receiver, Location? call_operator_loc, Location opening_loc, ArgumentsNode? arguments, Location closing_loc, Prism::node? block, Symbol binary_operator, Location binary_operator_loc, Prism::node value, Location location) -> void
         | 
| 9309 | 
            +
                def initialize(source, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, binary_operator, binary_operator_loc, value, location)
         | 
| 9379 9310 | 
             
                  @source = source
         | 
| 9380 | 
            -
                  @newline = false
         | 
| 9381 9311 | 
             
                  @location = location
         | 
| 9382 9312 | 
             
                  @flags = flags
         | 
| 9383 9313 | 
             
                  @receiver = receiver
         | 
| @@ -9386,8 +9316,8 @@ module Prism | |
| 9386 9316 | 
             
                  @arguments = arguments
         | 
| 9387 9317 | 
             
                  @closing_loc = closing_loc
         | 
| 9388 9318 | 
             
                  @block = block
         | 
| 9389 | 
            -
                  @ | 
| 9390 | 
            -
                  @ | 
| 9319 | 
            +
                  @binary_operator = binary_operator
         | 
| 9320 | 
            +
                  @binary_operator_loc = binary_operator_loc
         | 
| 9391 9321 | 
             
                  @value = value
         | 
| 9392 9322 | 
             
                end
         | 
| 9393 9323 |  | 
| @@ -9413,20 +9343,20 @@ module Prism | |
| 9413 9343 |  | 
| 9414 9344 | 
             
                # def comment_targets: () -> Array[Node | Location]
         | 
| 9415 9345 | 
             
                def comment_targets
         | 
| 9416 | 
            -
                  [*receiver, *call_operator_loc, opening_loc, *arguments, closing_loc, *block,  | 
| 9346 | 
            +
                  [*receiver, *call_operator_loc, opening_loc, *arguments, closing_loc, *block, binary_operator_loc, value] #: Array[Prism::node | Location]
         | 
| 9417 9347 | 
             
                end
         | 
| 9418 9348 |  | 
| 9419 | 
            -
                # def copy: (?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?opening_loc: Location, ?arguments: ArgumentsNode?, ?closing_loc: Location, ?block: Prism::node?, ? | 
| 9420 | 
            -
                def copy(flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, opening_loc: self.opening_loc, arguments: self.arguments, closing_loc: self.closing_loc, block: self.block,  | 
| 9421 | 
            -
                  IndexOperatorWriteNode.new(source, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block,  | 
| 9349 | 
            +
                # def copy: (?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?opening_loc: Location, ?arguments: ArgumentsNode?, ?closing_loc: Location, ?block: Prism::node?, ?binary_operator: Symbol, ?binary_operator_loc: Location, ?value: Prism::node, ?location: Location) -> IndexOperatorWriteNode
         | 
| 9350 | 
            +
                def copy(flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, opening_loc: self.opening_loc, arguments: self.arguments, closing_loc: self.closing_loc, block: self.block, binary_operator: self.binary_operator, binary_operator_loc: self.binary_operator_loc, value: self.value, location: self.location)
         | 
| 9351 | 
            +
                  IndexOperatorWriteNode.new(source, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, binary_operator, binary_operator_loc, value, location)
         | 
| 9422 9352 | 
             
                end
         | 
| 9423 9353 |  | 
| 9424 9354 | 
             
                # def deconstruct: () -> Array[nil | Node]
         | 
| 9425 9355 | 
             
                alias deconstruct child_nodes
         | 
| 9426 9356 |  | 
| 9427 | 
            -
                # def deconstruct_keys: (Array[Symbol] keys) -> { flags: Integer, receiver: Prism::node?, call_operator_loc: Location?, opening_loc: Location, arguments: ArgumentsNode?, closing_loc: Location, block: Prism::node?,  | 
| 9357 | 
            +
                # def deconstruct_keys: (Array[Symbol] keys) -> { flags: Integer, receiver: Prism::node?, call_operator_loc: Location?, opening_loc: Location, arguments: ArgumentsNode?, closing_loc: Location, block: Prism::node?, binary_operator: Symbol, binary_operator_loc: Location, value: Prism::node, location: Location }
         | 
| 9428 9358 | 
             
                def deconstruct_keys(keys)
         | 
| 9429 | 
            -
                  { flags: flags, receiver: receiver, call_operator_loc: call_operator_loc, opening_loc: opening_loc, arguments: arguments, closing_loc: closing_loc, block: block,  | 
| 9359 | 
            +
                  { flags: flags, receiver: receiver, call_operator_loc: call_operator_loc, opening_loc: opening_loc, arguments: arguments, closing_loc: closing_loc, block: block, binary_operator: binary_operator, binary_operator_loc: binary_operator_loc, value: value, location: location }
         | 
| 9430 9360 | 
             
                end
         | 
| 9431 9361 |  | 
| 9432 9362 | 
             
                # protected attr_reader flags: Integer
         | 
| @@ -9469,14 +9399,14 @@ module Prism | |
| 9469 9399 | 
             
                # attr_reader block: Prism::node?
         | 
| 9470 9400 | 
             
                attr_reader :block
         | 
| 9471 9401 |  | 
| 9472 | 
            -
                # attr_reader  | 
| 9473 | 
            -
                attr_reader : | 
| 9402 | 
            +
                # attr_reader binary_operator: Symbol
         | 
| 9403 | 
            +
                attr_reader :binary_operator
         | 
| 9474 9404 |  | 
| 9475 | 
            -
                # attr_reader  | 
| 9476 | 
            -
                def  | 
| 9477 | 
            -
                  location = @ | 
| 9405 | 
            +
                # attr_reader binary_operator_loc: Location
         | 
| 9406 | 
            +
                def binary_operator_loc
         | 
| 9407 | 
            +
                  location = @binary_operator_loc
         | 
| 9478 9408 | 
             
                  return location if location.is_a?(Location)
         | 
| 9479 | 
            -
                  @ | 
| 9409 | 
            +
                  @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 9480 9410 | 
             
                end
         | 
| 9481 9411 |  | 
| 9482 9412 | 
             
                # attr_reader value: Prism::node
         | 
| @@ -9561,8 +9491,8 @@ module Prism | |
| 9561 9491 | 
             
                    (arguments === other.arguments) &&
         | 
| 9562 9492 | 
             
                    (closing_loc.nil? == other.closing_loc.nil?) &&
         | 
| 9563 9493 | 
             
                    (block === other.block) &&
         | 
| 9564 | 
            -
                    ( | 
| 9565 | 
            -
                    ( | 
| 9494 | 
            +
                    (binary_operator === other.binary_operator) &&
         | 
| 9495 | 
            +
                    (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
         | 
| 9566 9496 | 
             
                    (value === other.value)
         | 
| 9567 9497 | 
             
                end
         | 
| 9568 9498 | 
             
              end
         | 
| @@ -9575,7 +9505,6 @@ module Prism | |
| 9575 9505 | 
             
                # def initialize: (Integer flags, Prism::node? receiver, Location? call_operator_loc, Location opening_loc, ArgumentsNode? arguments, Location closing_loc, Prism::node? block, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 9576 9506 | 
             
                def initialize(source, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, operator_loc, value, location)
         | 
| 9577 9507 | 
             
                  @source = source
         | 
| 9578 | 
            -
                  @newline = false
         | 
| 9579 9508 | 
             
                  @location = location
         | 
| 9580 9509 | 
             
                  @flags = flags
         | 
| 9581 9510 | 
             
                  @receiver = receiver
         | 
| @@ -9781,7 +9710,6 @@ module Prism | |
| 9781 9710 | 
             
                # def initialize: (Integer flags, Prism::node receiver, Location opening_loc, ArgumentsNode? arguments, Location closing_loc, Prism::node? block, Location location) -> void
         | 
| 9782 9711 | 
             
                def initialize(source, flags, receiver, opening_loc, arguments, closing_loc, block, location)
         | 
| 9783 9712 | 
             
                  @source = source
         | 
| 9784 | 
            -
                  @newline = false
         | 
| 9785 9713 | 
             
                  @location = location
         | 
| 9786 9714 | 
             
                  @flags = flags
         | 
| 9787 9715 | 
             
                  @receiver = receiver
         | 
| @@ -9939,7 +9867,6 @@ module Prism | |
| 9939 9867 | 
             
                # def initialize: (Symbol name, Location name_loc, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 9940 9868 | 
             
                def initialize(source, name, name_loc, operator_loc, value, location)
         | 
| 9941 9869 | 
             
                  @source = source
         | 
| 9942 | 
            -
                  @newline = false
         | 
| 9943 9870 | 
             
                  @location = location
         | 
| 9944 9871 | 
             
                  @name = name
         | 
| 9945 9872 | 
             
                  @name_loc = name_loc
         | 
| @@ -10054,16 +9981,15 @@ module Prism | |
| 10054 9981 | 
             
              #     @target += value
         | 
| 10055 9982 | 
             
              #     ^^^^^^^^^^^^^^^^
         | 
| 10056 9983 | 
             
              class InstanceVariableOperatorWriteNode < Node
         | 
| 10057 | 
            -
                # def initialize: (Symbol name, Location name_loc, Location  | 
| 10058 | 
            -
                def initialize(source, name, name_loc,  | 
| 9984 | 
            +
                # def initialize: (Symbol name, Location name_loc, Location binary_operator_loc, Prism::node value, Symbol binary_operator, Location location) -> void
         | 
| 9985 | 
            +
                def initialize(source, name, name_loc, binary_operator_loc, value, binary_operator, location)
         | 
| 10059 9986 | 
             
                  @source = source
         | 
| 10060 | 
            -
                  @newline = false
         | 
| 10061 9987 | 
             
                  @location = location
         | 
| 10062 9988 | 
             
                  @name = name
         | 
| 10063 9989 | 
             
                  @name_loc = name_loc
         | 
| 10064 | 
            -
                  @ | 
| 9990 | 
            +
                  @binary_operator_loc = binary_operator_loc
         | 
| 10065 9991 | 
             
                  @value = value
         | 
| 10066 | 
            -
                  @ | 
| 9992 | 
            +
                  @binary_operator = binary_operator
         | 
| 10067 9993 | 
             
                end
         | 
| 10068 9994 |  | 
| 10069 9995 | 
             
                # def accept: (Visitor visitor) -> void
         | 
| @@ -10083,20 +10009,20 @@ module Prism | |
| 10083 10009 |  | 
| 10084 10010 | 
             
                # def comment_targets: () -> Array[Node | Location]
         | 
| 10085 10011 | 
             
                def comment_targets
         | 
| 10086 | 
            -
                  [name_loc,  | 
| 10012 | 
            +
                  [name_loc, binary_operator_loc, value] #: Array[Prism::node | Location]
         | 
| 10087 10013 | 
             
                end
         | 
| 10088 10014 |  | 
| 10089 | 
            -
                # def copy: (?name: Symbol, ?name_loc: Location, ? | 
| 10090 | 
            -
                def copy(name: self.name, name_loc: self.name_loc,  | 
| 10091 | 
            -
                  InstanceVariableOperatorWriteNode.new(source, name, name_loc,  | 
| 10015 | 
            +
                # def copy: (?name: Symbol, ?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol, ?location: Location) -> InstanceVariableOperatorWriteNode
         | 
| 10016 | 
            +
                def copy(name: self.name, name_loc: self.name_loc, binary_operator_loc: self.binary_operator_loc, value: self.value, binary_operator: self.binary_operator, location: self.location)
         | 
| 10017 | 
            +
                  InstanceVariableOperatorWriteNode.new(source, name, name_loc, binary_operator_loc, value, binary_operator, location)
         | 
| 10092 10018 | 
             
                end
         | 
| 10093 10019 |  | 
| 10094 10020 | 
             
                # def deconstruct: () -> Array[nil | Node]
         | 
| 10095 10021 | 
             
                alias deconstruct child_nodes
         | 
| 10096 10022 |  | 
| 10097 | 
            -
                # def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location,  | 
| 10023 | 
            +
                # def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol, location: Location }
         | 
| 10098 10024 | 
             
                def deconstruct_keys(keys)
         | 
| 10099 | 
            -
                  { name: name, name_loc: name_loc,  | 
| 10025 | 
            +
                  { name: name, name_loc: name_loc, binary_operator_loc: binary_operator_loc, value: value, binary_operator: binary_operator, location: location }
         | 
| 10100 10026 | 
             
                end
         | 
| 10101 10027 |  | 
| 10102 10028 | 
             
                # attr_reader name: Symbol
         | 
| @@ -10109,18 +10035,18 @@ module Prism | |
| 10109 10035 | 
             
                  @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 10110 10036 | 
             
                end
         | 
| 10111 10037 |  | 
| 10112 | 
            -
                # attr_reader  | 
| 10113 | 
            -
                def  | 
| 10114 | 
            -
                  location = @ | 
| 10038 | 
            +
                # attr_reader binary_operator_loc: Location
         | 
| 10039 | 
            +
                def binary_operator_loc
         | 
| 10040 | 
            +
                  location = @binary_operator_loc
         | 
| 10115 10041 | 
             
                  return location if location.is_a?(Location)
         | 
| 10116 | 
            -
                  @ | 
| 10042 | 
            +
                  @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 10117 10043 | 
             
                end
         | 
| 10118 10044 |  | 
| 10119 10045 | 
             
                # attr_reader value: Prism::node
         | 
| 10120 10046 | 
             
                attr_reader :value
         | 
| 10121 10047 |  | 
| 10122 | 
            -
                # attr_reader  | 
| 10123 | 
            -
                attr_reader : | 
| 10048 | 
            +
                # attr_reader binary_operator: Symbol
         | 
| 10049 | 
            +
                attr_reader :binary_operator
         | 
| 10124 10050 |  | 
| 10125 10051 | 
             
                # def inspect -> String
         | 
| 10126 10052 | 
             
                def inspect
         | 
| @@ -10161,9 +10087,9 @@ module Prism | |
| 10161 10087 | 
             
                  other.is_a?(InstanceVariableOperatorWriteNode) &&
         | 
| 10162 10088 | 
             
                    (name === other.name) &&
         | 
| 10163 10089 | 
             
                    (name_loc.nil? == other.name_loc.nil?) &&
         | 
| 10164 | 
            -
                    ( | 
| 10090 | 
            +
                    (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
         | 
| 10165 10091 | 
             
                    (value === other.value) &&
         | 
| 10166 | 
            -
                    ( | 
| 10092 | 
            +
                    (binary_operator === other.binary_operator)
         | 
| 10167 10093 | 
             
                end
         | 
| 10168 10094 | 
             
              end
         | 
| 10169 10095 |  | 
| @@ -10175,7 +10101,6 @@ module Prism | |
| 10175 10101 | 
             
                # def initialize: (Symbol name, Location name_loc, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 10176 10102 | 
             
                def initialize(source, name, name_loc, operator_loc, value, location)
         | 
| 10177 10103 | 
             
                  @source = source
         | 
| 10178 | 
            -
                  @newline = false
         | 
| 10179 10104 | 
             
                  @location = location
         | 
| 10180 10105 | 
             
                  @name = name
         | 
| 10181 10106 | 
             
                  @name_loc = name_loc
         | 
| @@ -10293,7 +10218,6 @@ module Prism | |
| 10293 10218 | 
             
                # def initialize: (Symbol name, Location location) -> void
         | 
| 10294 10219 | 
             
                def initialize(source, name, location)
         | 
| 10295 10220 | 
             
                  @source = source
         | 
| 10296 | 
            -
                  @newline = false
         | 
| 10297 10221 | 
             
                  @location = location
         | 
| 10298 10222 | 
             
                  @name = name
         | 
| 10299 10223 | 
             
                end
         | 
| @@ -10387,7 +10311,6 @@ module Prism | |
| 10387 10311 | 
             
                # def initialize: (Symbol name, Location location) -> void
         | 
| 10388 10312 | 
             
                def initialize(source, name, location)
         | 
| 10389 10313 | 
             
                  @source = source
         | 
| 10390 | 
            -
                  @newline = false
         | 
| 10391 10314 | 
             
                  @location = location
         | 
| 10392 10315 | 
             
                  @name = name
         | 
| 10393 10316 | 
             
                end
         | 
| @@ -10477,7 +10400,6 @@ module Prism | |
| 10477 10400 | 
             
                # def initialize: (Symbol name, Location name_loc, Prism::node value, Location operator_loc, Location location) -> void
         | 
| 10478 10401 | 
             
                def initialize(source, name, name_loc, value, operator_loc, location)
         | 
| 10479 10402 | 
             
                  @source = source
         | 
| 10480 | 
            -
                  @newline = false
         | 
| 10481 10403 | 
             
                  @location = location
         | 
| 10482 10404 | 
             
                  @name = name
         | 
| 10483 10405 | 
             
                  @name_loc = name_loc
         | 
| @@ -10611,7 +10533,6 @@ module Prism | |
| 10611 10533 | 
             
                # def initialize: (Integer flags, Integer value, Location location) -> void
         | 
| 10612 10534 | 
             
                def initialize(source, flags, value, location)
         | 
| 10613 10535 | 
             
                  @source = source
         | 
| 10614 | 
            -
                  @newline = false
         | 
| 10615 10536 | 
             
                  @location = location
         | 
| 10616 10537 | 
             
                  @flags = flags
         | 
| 10617 10538 | 
             
                  @value = value
         | 
| @@ -10727,7 +10648,6 @@ module Prism | |
| 10727 10648 | 
             
                # def initialize: (Integer flags, Location opening_loc, Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode] parts, Location closing_loc, Location location) -> void
         | 
| 10728 10649 | 
             
                def initialize(source, flags, opening_loc, parts, closing_loc, location)
         | 
| 10729 10650 | 
             
                  @source = source
         | 
| 10730 | 
            -
                  @newline = false
         | 
| 10731 10651 | 
             
                  @location = location
         | 
| 10732 10652 | 
             
                  @flags = flags
         | 
| 10733 10653 | 
             
                  @opening_loc = opening_loc
         | 
| @@ -10740,11 +10660,6 @@ module Prism | |
| 10740 10660 | 
             
                  visitor.visit_interpolated_match_last_line_node(self)
         | 
| 10741 10661 | 
             
                end
         | 
| 10742 10662 |  | 
| 10743 | 
            -
                def set_newline_flag(newline_marked) # :nodoc:
         | 
| 10744 | 
            -
                  first = parts.first
         | 
| 10745 | 
            -
                  first.set_newline_flag(newline_marked) if first
         | 
| 10746 | 
            -
                end
         | 
| 10747 | 
            -
             | 
| 10748 10663 | 
             
                # def child_nodes: () -> Array[nil | Node]
         | 
| 10749 10664 | 
             
                def child_nodes
         | 
| 10750 10665 | 
             
                  [*parts]
         | 
| @@ -10912,7 +10827,6 @@ module Prism | |
| 10912 10827 | 
             
                # def initialize: (Integer flags, Location opening_loc, Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode] parts, Location closing_loc, Location location) -> void
         | 
| 10913 10828 | 
             
                def initialize(source, flags, opening_loc, parts, closing_loc, location)
         | 
| 10914 10829 | 
             
                  @source = source
         | 
| 10915 | 
            -
                  @newline = false
         | 
| 10916 10830 | 
             
                  @location = location
         | 
| 10917 10831 | 
             
                  @flags = flags
         | 
| 10918 10832 | 
             
                  @opening_loc = opening_loc
         | 
| @@ -10925,11 +10839,6 @@ module Prism | |
| 10925 10839 | 
             
                  visitor.visit_interpolated_regular_expression_node(self)
         | 
| 10926 10840 | 
             
                end
         | 
| 10927 10841 |  | 
| 10928 | 
            -
                def set_newline_flag(newline_marked) # :nodoc:
         | 
| 10929 | 
            -
                  first = parts.first
         | 
| 10930 | 
            -
                  first.set_newline_flag(newline_marked) if first
         | 
| 10931 | 
            -
                end
         | 
| 10932 | 
            -
             | 
| 10933 10842 | 
             
                # def child_nodes: () -> Array[nil | Node]
         | 
| 10934 10843 | 
             
                def child_nodes
         | 
| 10935 10844 | 
             
                  [*parts]
         | 
| @@ -11097,7 +11006,6 @@ module Prism | |
| 11097 11006 | 
             
                # def initialize: (Integer flags, Location? opening_loc, Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode] parts, Location? closing_loc, Location location) -> void
         | 
| 11098 11007 | 
             
                def initialize(source, flags, opening_loc, parts, closing_loc, location)
         | 
| 11099 11008 | 
             
                  @source = source
         | 
| 11100 | 
            -
                  @newline = false
         | 
| 11101 11009 | 
             
                  @location = location
         | 
| 11102 11010 | 
             
                  @flags = flags
         | 
| 11103 11011 | 
             
                  @opening_loc = opening_loc
         | 
| @@ -11110,11 +11018,6 @@ module Prism | |
| 11110 11018 | 
             
                  visitor.visit_interpolated_string_node(self)
         | 
| 11111 11019 | 
             
                end
         | 
| 11112 11020 |  | 
| 11113 | 
            -
                def set_newline_flag(newline_marked) # :nodoc:
         | 
| 11114 | 
            -
                  first = parts.first
         | 
| 11115 | 
            -
                  first.set_newline_flag(newline_marked) if first
         | 
| 11116 | 
            -
                end
         | 
| 11117 | 
            -
             | 
| 11118 11021 | 
             
                # def child_nodes: () -> Array[nil | Node]
         | 
| 11119 11022 | 
             
                def child_nodes
         | 
| 11120 11023 | 
             
                  [*parts]
         | 
| @@ -11249,7 +11152,6 @@ module Prism | |
| 11249 11152 | 
             
                # def initialize: (Location? opening_loc, Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode] parts, Location? closing_loc, Location location) -> void
         | 
| 11250 11153 | 
             
                def initialize(source, opening_loc, parts, closing_loc, location)
         | 
| 11251 11154 | 
             
                  @source = source
         | 
| 11252 | 
            -
                  @newline = false
         | 
| 11253 11155 | 
             
                  @location = location
         | 
| 11254 11156 | 
             
                  @opening_loc = opening_loc
         | 
| 11255 11157 | 
             
                  @parts = parts
         | 
| @@ -11261,11 +11163,6 @@ module Prism | |
| 11261 11163 | 
             
                  visitor.visit_interpolated_symbol_node(self)
         | 
| 11262 11164 | 
             
                end
         | 
| 11263 11165 |  | 
| 11264 | 
            -
                def set_newline_flag(newline_marked) # :nodoc:
         | 
| 11265 | 
            -
                  first = parts.first
         | 
| 11266 | 
            -
                  first.set_newline_flag(newline_marked) if first
         | 
| 11267 | 
            -
                end
         | 
| 11268 | 
            -
             | 
| 11269 11166 | 
             
                # def child_nodes: () -> Array[nil | Node]
         | 
| 11270 11167 | 
             
                def child_nodes
         | 
| 11271 11168 | 
             
                  [*parts]
         | 
| @@ -11385,7 +11282,6 @@ module Prism | |
| 11385 11282 | 
             
                # def initialize: (Location opening_loc, Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode] parts, Location closing_loc, Location location) -> void
         | 
| 11386 11283 | 
             
                def initialize(source, opening_loc, parts, closing_loc, location)
         | 
| 11387 11284 | 
             
                  @source = source
         | 
| 11388 | 
            -
                  @newline = false
         | 
| 11389 11285 | 
             
                  @location = location
         | 
| 11390 11286 | 
             
                  @opening_loc = opening_loc
         | 
| 11391 11287 | 
             
                  @parts = parts
         | 
| @@ -11397,11 +11293,6 @@ module Prism | |
| 11397 11293 | 
             
                  visitor.visit_interpolated_x_string_node(self)
         | 
| 11398 11294 | 
             
                end
         | 
| 11399 11295 |  | 
| 11400 | 
            -
                def set_newline_flag(newline_marked) # :nodoc:
         | 
| 11401 | 
            -
                  first = parts.first
         | 
| 11402 | 
            -
                  first.set_newline_flag(newline_marked) if first
         | 
| 11403 | 
            -
                end
         | 
| 11404 | 
            -
             | 
| 11405 11296 | 
             
                # def child_nodes: () -> Array[nil | Node]
         | 
| 11406 11297 | 
             
                def child_nodes
         | 
| 11407 11298 | 
             
                  [*parts]
         | 
| @@ -11501,6 +11392,90 @@ module Prism | |
| 11501 11392 | 
             
                end
         | 
| 11502 11393 | 
             
              end
         | 
| 11503 11394 |  | 
| 11395 | 
            +
              # Represents reading from the implicit `it` local variable.
         | 
| 11396 | 
            +
              #
         | 
| 11397 | 
            +
              #     -> { it }
         | 
| 11398 | 
            +
              #          ^^
         | 
| 11399 | 
            +
              class ItLocalVariableReadNode < Node
         | 
| 11400 | 
            +
                # def initialize: (Location location) -> void
         | 
| 11401 | 
            +
                def initialize(source, location)
         | 
| 11402 | 
            +
                  @source = source
         | 
| 11403 | 
            +
                  @location = location
         | 
| 11404 | 
            +
                end
         | 
| 11405 | 
            +
             | 
| 11406 | 
            +
                # def accept: (Visitor visitor) -> void
         | 
| 11407 | 
            +
                def accept(visitor)
         | 
| 11408 | 
            +
                  visitor.visit_it_local_variable_read_node(self)
         | 
| 11409 | 
            +
                end
         | 
| 11410 | 
            +
             | 
| 11411 | 
            +
                # def child_nodes: () -> Array[nil | Node]
         | 
| 11412 | 
            +
                def child_nodes
         | 
| 11413 | 
            +
                  []
         | 
| 11414 | 
            +
                end
         | 
| 11415 | 
            +
             | 
| 11416 | 
            +
                # def compact_child_nodes: () -> Array[Node]
         | 
| 11417 | 
            +
                def compact_child_nodes
         | 
| 11418 | 
            +
                  []
         | 
| 11419 | 
            +
                end
         | 
| 11420 | 
            +
             | 
| 11421 | 
            +
                # def comment_targets: () -> Array[Node | Location]
         | 
| 11422 | 
            +
                def comment_targets
         | 
| 11423 | 
            +
                  [] #: Array[Prism::node | Location]
         | 
| 11424 | 
            +
                end
         | 
| 11425 | 
            +
             | 
| 11426 | 
            +
                # def copy: (?location: Location) -> ItLocalVariableReadNode
         | 
| 11427 | 
            +
                def copy(location: self.location)
         | 
| 11428 | 
            +
                  ItLocalVariableReadNode.new(source, location)
         | 
| 11429 | 
            +
                end
         | 
| 11430 | 
            +
             | 
| 11431 | 
            +
                # def deconstruct: () -> Array[nil | Node]
         | 
| 11432 | 
            +
                alias deconstruct child_nodes
         | 
| 11433 | 
            +
             | 
| 11434 | 
            +
                # def deconstruct_keys: (Array[Symbol] keys) -> { location: Location }
         | 
| 11435 | 
            +
                def deconstruct_keys(keys)
         | 
| 11436 | 
            +
                  { location: location }
         | 
| 11437 | 
            +
                end
         | 
| 11438 | 
            +
             | 
| 11439 | 
            +
                # def inspect -> String
         | 
| 11440 | 
            +
                def inspect
         | 
| 11441 | 
            +
                  InspectVisitor.compose(self)
         | 
| 11442 | 
            +
                end
         | 
| 11443 | 
            +
             | 
| 11444 | 
            +
                # Sometimes you want to check an instance of a node against a list of
         | 
| 11445 | 
            +
                # classes to see what kind of behavior to perform. Usually this is done by
         | 
| 11446 | 
            +
                # calling `[cls1, cls2].include?(node.class)` or putting the node into a
         | 
| 11447 | 
            +
                # case statement and doing `case node; when cls1; when cls2; end`. Both of
         | 
| 11448 | 
            +
                # these approaches are relatively slow because of the constant lookups,
         | 
| 11449 | 
            +
                # method calls, and/or array allocations.
         | 
| 11450 | 
            +
                #
         | 
| 11451 | 
            +
                # Instead, you can call #type, which will return to you a symbol that you
         | 
| 11452 | 
            +
                # can use for comparison. This is faster than the other approaches because
         | 
| 11453 | 
            +
                # it uses a single integer comparison, but also because if you're on CRuby
         | 
| 11454 | 
            +
                # you can take advantage of the fact that case statements with all symbol
         | 
| 11455 | 
            +
                # keys will use a jump table.
         | 
| 11456 | 
            +
                #
         | 
| 11457 | 
            +
                # def type: () -> Symbol
         | 
| 11458 | 
            +
                def type
         | 
| 11459 | 
            +
                  :it_local_variable_read_node
         | 
| 11460 | 
            +
                end
         | 
| 11461 | 
            +
             | 
| 11462 | 
            +
                # Similar to #type, this method returns a symbol that you can use for
         | 
| 11463 | 
            +
                # splitting on the type of the node without having to do a long === chain.
         | 
| 11464 | 
            +
                # Note that like #type, it will still be slower than using == for a single
         | 
| 11465 | 
            +
                # class, but should be faster in a case statement or an array comparison.
         | 
| 11466 | 
            +
                #
         | 
| 11467 | 
            +
                # def self.type: () -> Symbol
         | 
| 11468 | 
            +
                def self.type
         | 
| 11469 | 
            +
                  :it_local_variable_read_node
         | 
| 11470 | 
            +
                end
         | 
| 11471 | 
            +
             | 
| 11472 | 
            +
                # Implements case-equality for the node. This is effectively == but without
         | 
| 11473 | 
            +
                # comparing the value of locations. Locations are checked only for presence.
         | 
| 11474 | 
            +
                def ===(other)
         | 
| 11475 | 
            +
                  other.is_a?(ItLocalVariableReadNode)
         | 
| 11476 | 
            +
                end
         | 
| 11477 | 
            +
              end
         | 
| 11478 | 
            +
             | 
| 11504 11479 | 
             
              # Represents an implicit set of parameters through the use of the `it` keyword within a block or lambda.
         | 
| 11505 11480 | 
             
              #
         | 
| 11506 11481 | 
             
              #     -> { it + it }
         | 
| @@ -11509,7 +11484,6 @@ module Prism | |
| 11509 11484 | 
             
                # def initialize: (Location location) -> void
         | 
| 11510 11485 | 
             
                def initialize(source, location)
         | 
| 11511 11486 | 
             
                  @source = source
         | 
| 11512 | 
            -
                  @newline = false
         | 
| 11513 11487 | 
             
                  @location = location
         | 
| 11514 11488 | 
             
                end
         | 
| 11515 11489 |  | 
| @@ -11594,7 +11568,6 @@ module Prism | |
| 11594 11568 | 
             
                # def initialize: (Integer flags, Array[AssocNode | AssocSplatNode] elements, Location location) -> void
         | 
| 11595 11569 | 
             
                def initialize(source, flags, elements, location)
         | 
| 11596 11570 | 
             
                  @source = source
         | 
| 11597 | 
            -
                  @newline = false
         | 
| 11598 11571 | 
             
                  @location = location
         | 
| 11599 11572 | 
             
                  @flags = flags
         | 
| 11600 11573 | 
             
                  @elements = elements
         | 
| @@ -11697,7 +11670,6 @@ module Prism | |
| 11697 11670 | 
             
                # def initialize: (Integer flags, Symbol? name, Location? name_loc, Location operator_loc, Location location) -> void
         | 
| 11698 11671 | 
             
                def initialize(source, flags, name, name_loc, operator_loc, location)
         | 
| 11699 11672 | 
             
                  @source = source
         | 
| 11700 | 
            -
                  @newline = false
         | 
| 11701 11673 | 
             
                  @location = location
         | 
| 11702 11674 | 
             
                  @flags = flags
         | 
| 11703 11675 | 
             
                  @name = name
         | 
| @@ -11827,7 +11799,6 @@ module Prism | |
| 11827 11799 | 
             
                # def initialize: (Array[Symbol] locals, Location operator_loc, Location opening_loc, Location closing_loc, Prism::node? parameters, Prism::node? body, Location location) -> void
         | 
| 11828 11800 | 
             
                def initialize(source, locals, operator_loc, opening_loc, closing_loc, parameters, body, location)
         | 
| 11829 11801 | 
             
                  @source = source
         | 
| 11830 | 
            -
                  @newline = false
         | 
| 11831 11802 | 
             
                  @location = location
         | 
| 11832 11803 | 
             
                  @locals = locals
         | 
| 11833 11804 | 
             
                  @operator_loc = operator_loc
         | 
| @@ -11973,7 +11944,6 @@ module Prism | |
| 11973 11944 | 
             
                # def initialize: (Location name_loc, Location operator_loc, Prism::node value, Symbol name, Integer depth, Location location) -> void
         | 
| 11974 11945 | 
             
                def initialize(source, name_loc, operator_loc, value, name, depth, location)
         | 
| 11975 11946 | 
             
                  @source = source
         | 
| 11976 | 
            -
                  @newline = false
         | 
| 11977 11947 | 
             
                  @location = location
         | 
| 11978 11948 | 
             
                  @name_loc = name_loc
         | 
| 11979 11949 | 
             
                  @operator_loc = operator_loc
         | 
| @@ -12093,16 +12063,15 @@ module Prism | |
| 12093 12063 | 
             
              #     target += value
         | 
| 12094 12064 | 
             
              #     ^^^^^^^^^^^^^^^
         | 
| 12095 12065 | 
             
              class LocalVariableOperatorWriteNode < Node
         | 
| 12096 | 
            -
                # def initialize: (Location name_loc, Location  | 
| 12097 | 
            -
                def initialize(source, name_loc,  | 
| 12066 | 
            +
                # def initialize: (Location name_loc, Location binary_operator_loc, Prism::node value, Symbol name, Symbol binary_operator, Integer depth, Location location) -> void
         | 
| 12067 | 
            +
                def initialize(source, name_loc, binary_operator_loc, value, name, binary_operator, depth, location)
         | 
| 12098 12068 | 
             
                  @source = source
         | 
| 12099 | 
            -
                  @newline = false
         | 
| 12100 12069 | 
             
                  @location = location
         | 
| 12101 12070 | 
             
                  @name_loc = name_loc
         | 
| 12102 | 
            -
                  @ | 
| 12071 | 
            +
                  @binary_operator_loc = binary_operator_loc
         | 
| 12103 12072 | 
             
                  @value = value
         | 
| 12104 12073 | 
             
                  @name = name
         | 
| 12105 | 
            -
                  @ | 
| 12074 | 
            +
                  @binary_operator = binary_operator
         | 
| 12106 12075 | 
             
                  @depth = depth
         | 
| 12107 12076 | 
             
                end
         | 
| 12108 12077 |  | 
| @@ -12123,20 +12092,20 @@ module Prism | |
| 12123 12092 |  | 
| 12124 12093 | 
             
                # def comment_targets: () -> Array[Node | Location]
         | 
| 12125 12094 | 
             
                def comment_targets
         | 
| 12126 | 
            -
                  [name_loc,  | 
| 12095 | 
            +
                  [name_loc, binary_operator_loc, value] #: Array[Prism::node | Location]
         | 
| 12127 12096 | 
             
                end
         | 
| 12128 12097 |  | 
| 12129 | 
            -
                # def copy: (?name_loc: Location, ? | 
| 12130 | 
            -
                def copy(name_loc: self.name_loc,  | 
| 12131 | 
            -
                  LocalVariableOperatorWriteNode.new(source, name_loc,  | 
| 12098 | 
            +
                # def copy: (?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?name: Symbol, ?binary_operator: Symbol, ?depth: Integer, ?location: Location) -> LocalVariableOperatorWriteNode
         | 
| 12099 | 
            +
                def copy(name_loc: self.name_loc, binary_operator_loc: self.binary_operator_loc, value: self.value, name: self.name, binary_operator: self.binary_operator, depth: self.depth, location: self.location)
         | 
| 12100 | 
            +
                  LocalVariableOperatorWriteNode.new(source, name_loc, binary_operator_loc, value, name, binary_operator, depth, location)
         | 
| 12132 12101 | 
             
                end
         | 
| 12133 12102 |  | 
| 12134 12103 | 
             
                # def deconstruct: () -> Array[nil | Node]
         | 
| 12135 12104 | 
             
                alias deconstruct child_nodes
         | 
| 12136 12105 |  | 
| 12137 | 
            -
                # def deconstruct_keys: (Array[Symbol] keys) -> { name_loc: Location,  | 
| 12106 | 
            +
                # def deconstruct_keys: (Array[Symbol] keys) -> { name_loc: Location, binary_operator_loc: Location, value: Prism::node, name: Symbol, binary_operator: Symbol, depth: Integer, location: Location }
         | 
| 12138 12107 | 
             
                def deconstruct_keys(keys)
         | 
| 12139 | 
            -
                  { name_loc: name_loc,  | 
| 12108 | 
            +
                  { name_loc: name_loc, binary_operator_loc: binary_operator_loc, value: value, name: name, binary_operator: binary_operator, depth: depth, location: location }
         | 
| 12140 12109 | 
             
                end
         | 
| 12141 12110 |  | 
| 12142 12111 | 
             
                # attr_reader name_loc: Location
         | 
| @@ -12146,11 +12115,11 @@ module Prism | |
| 12146 12115 | 
             
                  @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 12147 12116 | 
             
                end
         | 
| 12148 12117 |  | 
| 12149 | 
            -
                # attr_reader  | 
| 12150 | 
            -
                def  | 
| 12151 | 
            -
                  location = @ | 
| 12118 | 
            +
                # attr_reader binary_operator_loc: Location
         | 
| 12119 | 
            +
                def binary_operator_loc
         | 
| 12120 | 
            +
                  location = @binary_operator_loc
         | 
| 12152 12121 | 
             
                  return location if location.is_a?(Location)
         | 
| 12153 | 
            -
                  @ | 
| 12122 | 
            +
                  @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
         | 
| 12154 12123 | 
             
                end
         | 
| 12155 12124 |  | 
| 12156 12125 | 
             
                # attr_reader value: Prism::node
         | 
| @@ -12159,8 +12128,8 @@ module Prism | |
| 12159 12128 | 
             
                # attr_reader name: Symbol
         | 
| 12160 12129 | 
             
                attr_reader :name
         | 
| 12161 12130 |  | 
| 12162 | 
            -
                # attr_reader  | 
| 12163 | 
            -
                attr_reader : | 
| 12131 | 
            +
                # attr_reader binary_operator: Symbol
         | 
| 12132 | 
            +
                attr_reader :binary_operator
         | 
| 12164 12133 |  | 
| 12165 12134 | 
             
                # attr_reader depth: Integer
         | 
| 12166 12135 | 
             
                attr_reader :depth
         | 
| @@ -12203,10 +12172,10 @@ module Prism | |
| 12203 12172 | 
             
                def ===(other)
         | 
| 12204 12173 | 
             
                  other.is_a?(LocalVariableOperatorWriteNode) &&
         | 
| 12205 12174 | 
             
                    (name_loc.nil? == other.name_loc.nil?) &&
         | 
| 12206 | 
            -
                    ( | 
| 12175 | 
            +
                    (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
         | 
| 12207 12176 | 
             
                    (value === other.value) &&
         | 
| 12208 12177 | 
             
                    (name === other.name) &&
         | 
| 12209 | 
            -
                    ( | 
| 12178 | 
            +
                    (binary_operator === other.binary_operator) &&
         | 
| 12210 12179 | 
             
                    (depth === other.depth)
         | 
| 12211 12180 | 
             
                end
         | 
| 12212 12181 | 
             
              end
         | 
| @@ -12219,7 +12188,6 @@ module Prism | |
| 12219 12188 | 
             
                # def initialize: (Location name_loc, Location operator_loc, Prism::node value, Symbol name, Integer depth, Location location) -> void
         | 
| 12220 12189 | 
             
                def initialize(source, name_loc, operator_loc, value, name, depth, location)
         | 
| 12221 12190 | 
             
                  @source = source
         | 
| 12222 | 
            -
                  @newline = false
         | 
| 12223 12191 | 
             
                  @location = location
         | 
| 12224 12192 | 
             
                  @name_loc = name_loc
         | 
| 12225 12193 | 
             
                  @operator_loc = operator_loc
         | 
| @@ -12342,7 +12310,6 @@ module Prism | |
| 12342 12310 | 
             
                # def initialize: (Symbol name, Integer depth, Location location) -> void
         | 
| 12343 12311 | 
             
                def initialize(source, name, depth, location)
         | 
| 12344 12312 | 
             
                  @source = source
         | 
| 12345 | 
            -
                  @newline = false
         | 
| 12346 12313 | 
             
                  @location = location
         | 
| 12347 12314 | 
             
                  @name = name
         | 
| 12348 12315 | 
             
                  @depth = depth
         | 
| @@ -12390,10 +12357,6 @@ module Prism | |
| 12390 12357 | 
             
                # Note that this can also be an underscore followed by a number for the default block parameters.
         | 
| 12391 12358 | 
             
                #
         | 
| 12392 12359 | 
             
                #     _1     # name `:_1`
         | 
| 12393 | 
            -
                #
         | 
| 12394 | 
            -
                # Finally, for the default `it` block parameter, the name is `0it`. This is to distinguish it from an `it` local variable that is explicitly declared.
         | 
| 12395 | 
            -
                #
         | 
| 12396 | 
            -
                #     it     # name `:0it`
         | 
| 12397 12360 | 
             
                attr_reader :name
         | 
| 12398 12361 |  | 
| 12399 12362 | 
             
                # The number of visible scopes that should be searched to find the origin of this local variable.
         | 
| @@ -12455,7 +12418,6 @@ module Prism | |
| 12455 12418 | 
             
                # def initialize: (Symbol name, Integer depth, Location location) -> void
         | 
| 12456 12419 | 
             
                def initialize(source, name, depth, location)
         | 
| 12457 12420 | 
             
                  @source = source
         | 
| 12458 | 
            -
                  @newline = false
         | 
| 12459 12421 | 
             
                  @location = location
         | 
| 12460 12422 | 
             
                  @name = name
         | 
| 12461 12423 | 
             
                  @depth = depth
         | 
| @@ -12550,7 +12512,6 @@ module Prism | |
| 12550 12512 | 
             
                # def initialize: (Symbol name, Integer depth, Location name_loc, Prism::node value, Location operator_loc, Location location) -> void
         | 
| 12551 12513 | 
             
                def initialize(source, name, depth, name_loc, value, operator_loc, location)
         | 
| 12552 12514 | 
             
                  @source = source
         | 
| 12553 | 
            -
                  @newline = false
         | 
| 12554 12515 | 
             
                  @location = location
         | 
| 12555 12516 | 
             
                  @name = name
         | 
| 12556 12517 | 
             
                  @depth = depth
         | 
| @@ -12699,7 +12660,6 @@ module Prism | |
| 12699 12660 | 
             
                # def initialize: (Integer flags, Location opening_loc, Location content_loc, Location closing_loc, String unescaped, Location location) -> void
         | 
| 12700 12661 | 
             
                def initialize(source, flags, opening_loc, content_loc, closing_loc, unescaped, location)
         | 
| 12701 12662 | 
             
                  @source = source
         | 
| 12702 | 
            -
                  @newline = false
         | 
| 12703 12663 | 
             
                  @location = location
         | 
| 12704 12664 | 
             
                  @flags = flags
         | 
| 12705 12665 | 
             
                  @opening_loc = opening_loc
         | 
| @@ -12892,7 +12852,6 @@ module Prism | |
| 12892 12852 | 
             
                # def initialize: (Prism::node value, Prism::node pattern, Location operator_loc, Location location) -> void
         | 
| 12893 12853 | 
             
                def initialize(source, value, pattern, operator_loc, location)
         | 
| 12894 12854 | 
             
                  @source = source
         | 
| 12895 | 
            -
                  @newline = false
         | 
| 12896 12855 | 
             
                  @location = location
         | 
| 12897 12856 | 
             
                  @value = value
         | 
| 12898 12857 | 
             
                  @pattern = pattern
         | 
| @@ -13001,7 +12960,6 @@ module Prism | |
| 13001 12960 | 
             
                # def initialize: (Prism::node value, Prism::node pattern, Location operator_loc, Location location) -> void
         | 
| 13002 12961 | 
             
                def initialize(source, value, pattern, operator_loc, location)
         | 
| 13003 12962 | 
             
                  @source = source
         | 
| 13004 | 
            -
                  @newline = false
         | 
| 13005 12963 | 
             
                  @location = location
         | 
| 13006 12964 | 
             
                  @value = value
         | 
| 13007 12965 | 
             
                  @pattern = pattern
         | 
| @@ -13110,7 +13068,6 @@ module Prism | |
| 13110 13068 | 
             
                # def initialize: (CallNode call, Array[LocalVariableTargetNode] targets, Location location) -> void
         | 
| 13111 13069 | 
             
                def initialize(source, call, targets, location)
         | 
| 13112 13070 | 
             
                  @source = source
         | 
| 13113 | 
            -
                  @newline = false
         | 
| 13114 13071 | 
             
                  @location = location
         | 
| 13115 13072 | 
             
                  @call = call
         | 
| 13116 13073 | 
             
                  @targets = targets
         | 
| @@ -13203,7 +13160,6 @@ module Prism | |
| 13203 13160 | 
             
                # def initialize: (Location location) -> void
         | 
| 13204 13161 | 
             
                def initialize(source, location)
         | 
| 13205 13162 | 
             
                  @source = source
         | 
| 13206 | 
            -
                  @newline = false
         | 
| 13207 13163 | 
             
                  @location = location
         | 
| 13208 13164 | 
             
                end
         | 
| 13209 13165 |  | 
| @@ -13288,7 +13244,6 @@ module Prism | |
| 13288 13244 | 
             
                # def initialize: (Array[Symbol] locals, Location module_keyword_loc, Prism::node constant_path, Prism::node? body, Location end_keyword_loc, Symbol name, Location location) -> void
         | 
| 13289 13245 | 
             
                def initialize(source, locals, module_keyword_loc, constant_path, body, end_keyword_loc, name, location)
         | 
| 13290 13246 | 
             
                  @source = source
         | 
| 13291 | 
            -
                  @newline = false
         | 
| 13292 13247 | 
             
                  @location = location
         | 
| 13293 13248 | 
             
                  @locals = locals
         | 
| 13294 13249 | 
             
                  @module_keyword_loc = module_keyword_loc
         | 
| @@ -13425,7 +13380,6 @@ module Prism | |
| 13425 13380 | 
             
                # def initialize: (Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | RequiredParameterNode | BackReferenceReadNode | NumberedReferenceReadNode] lefts, Prism::node? rest, Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | RequiredParameterNode | BackReferenceReadNode] rights, Location? lparen_loc, Location? rparen_loc, Location location) -> void
         | 
| 13426 13381 | 
             
                def initialize(source, lefts, rest, rights, lparen_loc, rparen_loc, location)
         | 
| 13427 13382 | 
             
                  @source = source
         | 
| 13428 | 
            -
                  @newline = false
         | 
| 13429 13383 | 
             
                  @location = location
         | 
| 13430 13384 | 
             
                  @lefts = lefts
         | 
| 13431 13385 | 
             
                  @rest = rest
         | 
| @@ -13571,7 +13525,6 @@ module Prism | |
| 13571 13525 | 
             
                # def initialize: (Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode] lefts, Prism::node? rest, Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode] rights, Location? lparen_loc, Location? rparen_loc, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 13572 13526 | 
             
                def initialize(source, lefts, rest, rights, lparen_loc, rparen_loc, operator_loc, value, location)
         | 
| 13573 13527 | 
             
                  @source = source
         | 
| 13574 | 
            -
                  @newline = false
         | 
| 13575 13528 | 
             
                  @location = location
         | 
| 13576 13529 | 
             
                  @lefts = lefts
         | 
| 13577 13530 | 
             
                  @rest = rest
         | 
| @@ -13737,7 +13690,6 @@ module Prism | |
| 13737 13690 | 
             
                # def initialize: (ArgumentsNode? arguments, Location keyword_loc, Location location) -> void
         | 
| 13738 13691 | 
             
                def initialize(source, arguments, keyword_loc, location)
         | 
| 13739 13692 | 
             
                  @source = source
         | 
| 13740 | 
            -
                  @newline = false
         | 
| 13741 13693 | 
             
                  @location = location
         | 
| 13742 13694 | 
             
                  @arguments = arguments
         | 
| 13743 13695 | 
             
                  @keyword_loc = keyword_loc
         | 
| @@ -13843,7 +13795,6 @@ module Prism | |
| 13843 13795 | 
             
                # def initialize: (Location location) -> void
         | 
| 13844 13796 | 
             
                def initialize(source, location)
         | 
| 13845 13797 | 
             
                  @source = source
         | 
| 13846 | 
            -
                  @newline = false
         | 
| 13847 13798 | 
             
                  @location = location
         | 
| 13848 13799 | 
             
                end
         | 
| 13849 13800 |  | 
| @@ -13929,7 +13880,6 @@ module Prism | |
| 13929 13880 | 
             
                # def initialize: (Location operator_loc, Location keyword_loc, Location location) -> void
         | 
| 13930 13881 | 
             
                def initialize(source, operator_loc, keyword_loc, location)
         | 
| 13931 13882 | 
             
                  @source = source
         | 
| 13932 | 
            -
                  @newline = false
         | 
| 13933 13883 | 
             
                  @location = location
         | 
| 13934 13884 | 
             
                  @operator_loc = operator_loc
         | 
| 13935 13885 | 
             
                  @keyword_loc = keyword_loc
         | 
| @@ -14042,7 +13992,6 @@ module Prism | |
| 14042 13992 | 
             
                # def initialize: (Integer maximum, Location location) -> void
         | 
| 14043 13993 | 
             
                def initialize(source, maximum, location)
         | 
| 14044 13994 | 
             
                  @source = source
         | 
| 14045 | 
            -
                  @newline = false
         | 
| 14046 13995 | 
             
                  @location = location
         | 
| 14047 13996 | 
             
                  @maximum = maximum
         | 
| 14048 13997 | 
             
                end
         | 
| @@ -14132,7 +14081,6 @@ module Prism | |
| 14132 14081 | 
             
                # def initialize: (Integer number, Location location) -> void
         | 
| 14133 14082 | 
             
                def initialize(source, number, location)
         | 
| 14134 14083 | 
             
                  @source = source
         | 
| 14135 | 
            -
                  @newline = false
         | 
| 14136 14084 | 
             
                  @location = location
         | 
| 14137 14085 | 
             
                  @number = number
         | 
| 14138 14086 | 
             
                end
         | 
| @@ -14229,7 +14177,6 @@ module Prism | |
| 14229 14177 | 
             
                # def initialize: (Integer flags, Symbol name, Location name_loc, Prism::node value, Location location) -> void
         | 
| 14230 14178 | 
             
                def initialize(source, flags, name, name_loc, value, location)
         | 
| 14231 14179 | 
             
                  @source = source
         | 
| 14232 | 
            -
                  @newline = false
         | 
| 14233 14180 | 
             
                  @location = location
         | 
| 14234 14181 | 
             
                  @flags = flags
         | 
| 14235 14182 | 
             
                  @name = name
         | 
| @@ -14345,7 +14292,6 @@ module Prism | |
| 14345 14292 | 
             
                # def initialize: (Integer flags, Symbol name, Location name_loc, Location operator_loc, Prism::node value, Location location) -> void
         | 
| 14346 14293 | 
             
                def initialize(source, flags, name, name_loc, operator_loc, value, location)
         | 
| 14347 14294 | 
             
                  @source = source
         | 
| 14348 | 
            -
                  @newline = false
         | 
| 14349 14295 | 
             
                  @location = location
         | 
| 14350 14296 | 
             
                  @flags = flags
         | 
| 14351 14297 | 
             
                  @name = name
         | 
| @@ -14474,7 +14420,6 @@ module Prism | |
| 14474 14420 | 
             
                # def initialize: (Prism::node left, Prism::node right, Location operator_loc, Location location) -> void
         | 
| 14475 14421 | 
             
                def initialize(source, left, right, operator_loc, location)
         | 
| 14476 14422 | 
             
                  @source = source
         | 
| 14477 | 
            -
                  @newline = false
         | 
| 14478 14423 | 
             
                  @location = location
         | 
| 14479 14424 | 
             
                  @left = left
         | 
| 14480 14425 | 
             
                  @right = right
         | 
| @@ -14596,10 +14541,9 @@ module Prism | |
| 14596 14541 | 
             
              #           ^^^^^^^
         | 
| 14597 14542 | 
             
              #     end
         | 
| 14598 14543 | 
             
              class ParametersNode < Node
         | 
| 14599 | 
            -
                # def initialize: (Array[RequiredParameterNode | MultiTargetNode] requireds, Array[OptionalParameterNode] optionals, RestParameterNode | ImplicitRestNode | nil rest, Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode] posts, Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode] keywords, KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil keyword_rest, BlockParameterNode? block, Location location) -> void
         | 
| 14544 | 
            +
                # def initialize: (Array[RequiredParameterNode | MultiTargetNode] requireds, Array[OptionalParameterNode] optionals, RestParameterNode | ImplicitRestNode | nil rest, Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode | ForwardingParameterNode] posts, Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode] keywords, KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil keyword_rest, BlockParameterNode? block, Location location) -> void
         | 
| 14600 14545 | 
             
                def initialize(source, requireds, optionals, rest, posts, keywords, keyword_rest, block, location)
         | 
| 14601 14546 | 
             
                  @source = source
         | 
| 14602 | 
            -
                  @newline = false
         | 
| 14603 14547 | 
             
                  @location = location
         | 
| 14604 14548 | 
             
                  @requireds = requireds
         | 
| 14605 14549 | 
             
                  @optionals = optionals
         | 
| @@ -14638,7 +14582,7 @@ module Prism | |
| 14638 14582 | 
             
                  [*requireds, *optionals, *rest, *posts, *keywords, *keyword_rest, *block] #: Array[Prism::node | Location]
         | 
| 14639 14583 | 
             
                end
         | 
| 14640 14584 |  | 
| 14641 | 
            -
                # def copy: (?requireds: Array[RequiredParameterNode | MultiTargetNode], ?optionals: Array[OptionalParameterNode], ?rest: RestParameterNode | ImplicitRestNode | nil, ?posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode], ?keywords: Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode], ?keyword_rest: KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil, ?block: BlockParameterNode?, ?location: Location) -> ParametersNode
         | 
| 14585 | 
            +
                # def copy: (?requireds: Array[RequiredParameterNode | MultiTargetNode], ?optionals: Array[OptionalParameterNode], ?rest: RestParameterNode | ImplicitRestNode | nil, ?posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode | ForwardingParameterNode], ?keywords: Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode], ?keyword_rest: KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil, ?block: BlockParameterNode?, ?location: Location) -> ParametersNode
         | 
| 14642 14586 | 
             
                def copy(requireds: self.requireds, optionals: self.optionals, rest: self.rest, posts: self.posts, keywords: self.keywords, keyword_rest: self.keyword_rest, block: self.block, location: self.location)
         | 
| 14643 14587 | 
             
                  ParametersNode.new(source, requireds, optionals, rest, posts, keywords, keyword_rest, block, location)
         | 
| 14644 14588 | 
             
                end
         | 
| @@ -14646,7 +14590,7 @@ module Prism | |
| 14646 14590 | 
             
                # def deconstruct: () -> Array[nil | Node]
         | 
| 14647 14591 | 
             
                alias deconstruct child_nodes
         | 
| 14648 14592 |  | 
| 14649 | 
            -
                # def deconstruct_keys: (Array[Symbol] keys) -> { requireds: Array[RequiredParameterNode | MultiTargetNode], optionals: Array[OptionalParameterNode], rest: RestParameterNode | ImplicitRestNode | nil, posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode], keywords: Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode], keyword_rest: KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil, block: BlockParameterNode?, location: Location }
         | 
| 14593 | 
            +
                # def deconstruct_keys: (Array[Symbol] keys) -> { requireds: Array[RequiredParameterNode | MultiTargetNode], optionals: Array[OptionalParameterNode], rest: RestParameterNode | ImplicitRestNode | nil, posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode | ForwardingParameterNode], keywords: Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode], keyword_rest: KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil, block: BlockParameterNode?, location: Location }
         | 
| 14650 14594 | 
             
                def deconstruct_keys(keys)
         | 
| 14651 14595 | 
             
                  { requireds: requireds, optionals: optionals, rest: rest, posts: posts, keywords: keywords, keyword_rest: keyword_rest, block: block, location: location }
         | 
| 14652 14596 | 
             
                end
         | 
| @@ -14660,7 +14604,7 @@ module Prism | |
| 14660 14604 | 
             
                # attr_reader rest: RestParameterNode | ImplicitRestNode | nil
         | 
| 14661 14605 | 
             
                attr_reader :rest
         | 
| 14662 14606 |  | 
| 14663 | 
            -
                # attr_reader posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode]
         | 
| 14607 | 
            +
                # attr_reader posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode | ForwardingParameterNode]
         | 
| 14664 14608 | 
             
                attr_reader :posts
         | 
| 14665 14609 |  | 
| 14666 14610 | 
             
                # attr_reader keywords: Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode]
         | 
| @@ -14731,7 +14675,6 @@ module Prism | |
| 14731 14675 | 
             
                # def initialize: (Prism::node? body, Location opening_loc, Location closing_loc, Location location) -> void
         | 
| 14732 14676 | 
             
                def initialize(source, body, opening_loc, closing_loc, location)
         | 
| 14733 14677 | 
             
                  @source = source
         | 
| 14734 | 
            -
                  @newline = false
         | 
| 14735 14678 | 
             
                  @location = location
         | 
| 14736 14679 | 
             
                  @body = body
         | 
| 14737 14680 | 
             
                  @opening_loc = opening_loc
         | 
| @@ -14743,10 +14686,6 @@ module Prism | |
| 14743 14686 | 
             
                  visitor.visit_parentheses_node(self)
         | 
| 14744 14687 | 
             
                end
         | 
| 14745 14688 |  | 
| 14746 | 
            -
                def set_newline_flag(newline_marked) # :nodoc:
         | 
| 14747 | 
            -
                  # Never mark ParenthesesNode with a newline flag, mark children instead
         | 
| 14748 | 
            -
                end
         | 
| 14749 | 
            -
             | 
| 14750 14689 | 
             
                # def child_nodes: () -> Array[nil | Node]
         | 
| 14751 14690 | 
             
                def child_nodes
         | 
| 14752 14691 | 
             
                  [body]
         | 
| @@ -14855,7 +14794,6 @@ module Prism | |
| 14855 14794 | 
             
                # def initialize: (Prism::node expression, Location operator_loc, Location lparen_loc, Location rparen_loc, Location location) -> void
         | 
| 14856 14795 | 
             
                def initialize(source, expression, operator_loc, lparen_loc, rparen_loc, location)
         | 
| 14857 14796 | 
             
                  @source = source
         | 
| 14858 | 
            -
                  @newline = false
         | 
| 14859 14797 | 
             
                  @location = location
         | 
| 14860 14798 | 
             
                  @expression = expression
         | 
| 14861 14799 | 
             
                  @operator_loc = operator_loc
         | 
| @@ -14987,7 +14925,6 @@ module Prism | |
| 14987 14925 | 
             
                # def initialize: (Prism::node variable, Location operator_loc, Location location) -> void
         | 
| 14988 14926 | 
             
                def initialize(source, variable, operator_loc, location)
         | 
| 14989 14927 | 
             
                  @source = source
         | 
| 14990 | 
            -
                  @newline = false
         | 
| 14991 14928 | 
             
                  @location = location
         | 
| 14992 14929 | 
             
                  @variable = variable
         | 
| 14993 14930 | 
             
                  @operator_loc = operator_loc
         | 
| @@ -15091,7 +15028,6 @@ module Prism | |
| 15091 15028 | 
             
                # def initialize: (StatementsNode? statements, Location keyword_loc, Location opening_loc, Location closing_loc, Location location) -> void
         | 
| 15092 15029 | 
             
                def initialize(source, statements, keyword_loc, opening_loc, closing_loc, location)
         | 
| 15093 15030 | 
             
                  @source = source
         | 
| 15094 | 
            -
                  @newline = false
         | 
| 15095 15031 | 
             
                  @location = location
         | 
| 15096 15032 | 
             
                  @statements = statements
         | 
| 15097 15033 | 
             
                  @keyword_loc = keyword_loc
         | 
| @@ -15225,7 +15161,6 @@ module Prism | |
| 15225 15161 | 
             
                # def initialize: (StatementsNode? statements, Location keyword_loc, Location opening_loc, Location closing_loc, Location location) -> void
         | 
| 15226 15162 | 
             
                def initialize(source, statements, keyword_loc, opening_loc, closing_loc, location)
         | 
| 15227 15163 | 
             
                  @source = source
         | 
| 15228 | 
            -
                  @newline = false
         | 
| 15229 15164 | 
             
                  @location = location
         | 
| 15230 15165 | 
             
                  @statements = statements
         | 
| 15231 15166 | 
             
                  @keyword_loc = keyword_loc
         | 
| @@ -15356,7 +15291,6 @@ module Prism | |
| 15356 15291 | 
             
                # def initialize: (Array[Symbol] locals, StatementsNode statements, Location location) -> void
         | 
| 15357 15292 | 
             
                def initialize(source, locals, statements, location)
         | 
| 15358 15293 | 
             
                  @source = source
         | 
| 15359 | 
            -
                  @newline = false
         | 
| 15360 15294 | 
             
                  @location = location
         | 
| 15361 15295 | 
             
                  @locals = locals
         | 
| 15362 15296 | 
             
                  @statements = statements
         | 
| @@ -15455,7 +15389,6 @@ module Prism | |
| 15455 15389 | 
             
                # def initialize: (Integer flags, Prism::node? left, Prism::node? right, Location operator_loc, Location location) -> void
         | 
| 15456 15390 | 
             
                def initialize(source, flags, left, right, operator_loc, location)
         | 
| 15457 15391 | 
             
                  @source = source
         | 
| 15458 | 
            -
                  @newline = false
         | 
| 15459 15392 | 
             
                  @location = location
         | 
| 15460 15393 | 
             
                  @flags = flags
         | 
| 15461 15394 | 
             
                  @left = left
         | 
| @@ -15588,12 +15521,13 @@ module Prism | |
| 15588 15521 | 
             
              #     1.0r
         | 
| 15589 15522 | 
             
              #     ^^^^
         | 
| 15590 15523 | 
             
              class RationalNode < Node
         | 
| 15591 | 
            -
                # def initialize: ( | 
| 15592 | 
            -
                def initialize(source,  | 
| 15524 | 
            +
                # def initialize: (Integer flags, Integer numerator, Integer denominator, Location location) -> void
         | 
| 15525 | 
            +
                def initialize(source, flags, numerator, denominator, location)
         | 
| 15593 15526 | 
             
                  @source = source
         | 
| 15594 | 
            -
                  @newline = false
         | 
| 15595 15527 | 
             
                  @location = location
         | 
| 15596 | 
            -
                  @ | 
| 15528 | 
            +
                  @flags = flags
         | 
| 15529 | 
            +
                  @numerator = numerator
         | 
| 15530 | 
            +
                  @denominator = denominator
         | 
| 15597 15531 | 
             
                end
         | 
| 15598 15532 |  | 
| 15599 15533 | 
             
                # def accept: (Visitor visitor) -> void
         | 
| @@ -15603,34 +15537,65 @@ module Prism | |
| 15603 15537 |  | 
| 15604 15538 | 
             
                # def child_nodes: () -> Array[nil | Node]
         | 
| 15605 15539 | 
             
                def child_nodes
         | 
| 15606 | 
            -
                  [ | 
| 15540 | 
            +
                  []
         | 
| 15607 15541 | 
             
                end
         | 
| 15608 15542 |  | 
| 15609 15543 | 
             
                # def compact_child_nodes: () -> Array[Node]
         | 
| 15610 15544 | 
             
                def compact_child_nodes
         | 
| 15611 | 
            -
                  [ | 
| 15545 | 
            +
                  []
         | 
| 15612 15546 | 
             
                end
         | 
| 15613 15547 |  | 
| 15614 15548 | 
             
                # def comment_targets: () -> Array[Node | Location]
         | 
| 15615 15549 | 
             
                def comment_targets
         | 
| 15616 | 
            -
                  [ | 
| 15550 | 
            +
                  [] #: Array[Prism::node | Location]
         | 
| 15617 15551 | 
             
                end
         | 
| 15618 15552 |  | 
| 15619 | 
            -
                # def copy: (? | 
| 15620 | 
            -
                def copy( | 
| 15621 | 
            -
                  RationalNode.new(source,  | 
| 15553 | 
            +
                # def copy: (?flags: Integer, ?numerator: Integer, ?denominator: Integer, ?location: Location) -> RationalNode
         | 
| 15554 | 
            +
                def copy(flags: self.flags, numerator: self.numerator, denominator: self.denominator, location: self.location)
         | 
| 15555 | 
            +
                  RationalNode.new(source, flags, numerator, denominator, location)
         | 
| 15622 15556 | 
             
                end
         | 
| 15623 15557 |  | 
| 15624 15558 | 
             
                # def deconstruct: () -> Array[nil | Node]
         | 
| 15625 15559 | 
             
                alias deconstruct child_nodes
         | 
| 15626 15560 |  | 
| 15627 | 
            -
                # def deconstruct_keys: (Array[Symbol] keys) -> {  | 
| 15561 | 
            +
                # def deconstruct_keys: (Array[Symbol] keys) -> { flags: Integer, numerator: Integer, denominator: Integer, location: Location }
         | 
| 15628 15562 | 
             
                def deconstruct_keys(keys)
         | 
| 15629 | 
            -
                  {  | 
| 15563 | 
            +
                  { flags: flags, numerator: numerator, denominator: denominator, location: location }
         | 
| 15630 15564 | 
             
                end
         | 
| 15631 15565 |  | 
| 15632 | 
            -
                # attr_reader  | 
| 15633 | 
            -
                attr_reader : | 
| 15566 | 
            +
                # protected attr_reader flags: Integer
         | 
| 15567 | 
            +
                attr_reader :flags
         | 
| 15568 | 
            +
                protected :flags
         | 
| 15569 | 
            +
             | 
| 15570 | 
            +
                # The numerator of the rational number.
         | 
| 15571 | 
            +
                #
         | 
| 15572 | 
            +
                #     1.5r # numerator 3
         | 
| 15573 | 
            +
                attr_reader :numerator
         | 
| 15574 | 
            +
             | 
| 15575 | 
            +
                # The denominator of the rational number.
         | 
| 15576 | 
            +
                #
         | 
| 15577 | 
            +
                #     1.5r # denominator 2
         | 
| 15578 | 
            +
                attr_reader :denominator
         | 
| 15579 | 
            +
             | 
| 15580 | 
            +
                # def binary?: () -> bool
         | 
| 15581 | 
            +
                def binary?
         | 
| 15582 | 
            +
                  flags.anybits?(IntegerBaseFlags::BINARY)
         | 
| 15583 | 
            +
                end
         | 
| 15584 | 
            +
             | 
| 15585 | 
            +
                # def decimal?: () -> bool
         | 
| 15586 | 
            +
                def decimal?
         | 
| 15587 | 
            +
                  flags.anybits?(IntegerBaseFlags::DECIMAL)
         | 
| 15588 | 
            +
                end
         | 
| 15589 | 
            +
             | 
| 15590 | 
            +
                # def octal?: () -> bool
         | 
| 15591 | 
            +
                def octal?
         | 
| 15592 | 
            +
                  flags.anybits?(IntegerBaseFlags::OCTAL)
         | 
| 15593 | 
            +
                end
         | 
| 15594 | 
            +
             | 
| 15595 | 
            +
                # def hexadecimal?: () -> bool
         | 
| 15596 | 
            +
                def hexadecimal?
         | 
| 15597 | 
            +
                  flags.anybits?(IntegerBaseFlags::HEXADECIMAL)
         | 
| 15598 | 
            +
                end
         | 
| 15634 15599 |  | 
| 15635 15600 | 
             
                # def inspect -> String
         | 
| 15636 15601 | 
             
                def inspect
         | 
| @@ -15669,7 +15634,9 @@ module Prism | |
| 15669 15634 | 
             
                # comparing the value of locations. Locations are checked only for presence.
         | 
| 15670 15635 | 
             
                def ===(other)
         | 
| 15671 15636 | 
             
                  other.is_a?(RationalNode) &&
         | 
| 15672 | 
            -
                    ( | 
| 15637 | 
            +
                    (flags === other.flags) &&
         | 
| 15638 | 
            +
                    (numerator === other.numerator) &&
         | 
| 15639 | 
            +
                    (denominator === other.denominator)
         | 
| 15673 15640 | 
             
                end
         | 
| 15674 15641 | 
             
              end
         | 
| 15675 15642 |  | 
| @@ -15681,7 +15648,6 @@ module Prism | |
| 15681 15648 | 
             
                # def initialize: (Location location) -> void
         | 
| 15682 15649 | 
             
                def initialize(source, location)
         | 
| 15683 15650 | 
             
                  @source = source
         | 
| 15684 | 
            -
                  @newline = false
         | 
| 15685 15651 | 
             
                  @location = location
         | 
| 15686 15652 | 
             
                end
         | 
| 15687 15653 |  | 
| @@ -15766,7 +15732,6 @@ module Prism | |
| 15766 15732 | 
             
                # def initialize: (Integer flags, Location opening_loc, Location content_loc, Location closing_loc, String unescaped, Location location) -> void
         | 
| 15767 15733 | 
             
                def initialize(source, flags, opening_loc, content_loc, closing_loc, unescaped, location)
         | 
| 15768 15734 | 
             
                  @source = source
         | 
| 15769 | 
            -
                  @newline = false
         | 
| 15770 15735 | 
             
                  @location = location
         | 
| 15771 15736 | 
             
                  @flags = flags
         | 
| 15772 15737 | 
             
                  @opening_loc = opening_loc
         | 
| @@ -15960,7 +15925,6 @@ module Prism | |
| 15960 15925 | 
             
                # def initialize: (Integer flags, Symbol name, Location name_loc, Location location) -> void
         | 
| 15961 15926 | 
             
                def initialize(source, flags, name, name_loc, location)
         | 
| 15962 15927 | 
             
                  @source = source
         | 
| 15963 | 
            -
                  @newline = false
         | 
| 15964 15928 | 
             
                  @location = location
         | 
| 15965 15929 | 
             
                  @flags = flags
         | 
| 15966 15930 | 
             
                  @name = name
         | 
| @@ -16071,7 +16035,6 @@ module Prism | |
| 16071 16035 | 
             
                # def initialize: (Integer flags, Symbol name, Location location) -> void
         | 
| 16072 16036 | 
             
                def initialize(source, flags, name, location)
         | 
| 16073 16037 | 
             
                  @source = source
         | 
| 16074 | 
            -
                  @newline = false
         | 
| 16075 16038 | 
             
                  @location = location
         | 
| 16076 16039 | 
             
                  @flags = flags
         | 
| 16077 16040 | 
             
                  @name = name
         | 
| @@ -16172,7 +16135,6 @@ module Prism | |
| 16172 16135 | 
             
                # def initialize: (Prism::node expression, Location keyword_loc, Prism::node rescue_expression, Location location) -> void
         | 
| 16173 16136 | 
             
                def initialize(source, expression, keyword_loc, rescue_expression, location)
         | 
| 16174 16137 | 
             
                  @source = source
         | 
| 16175 | 
            -
                  @newline = false
         | 
| 16176 16138 | 
             
                  @location = location
         | 
| 16177 16139 | 
             
                  @expression = expression
         | 
| 16178 16140 | 
             
                  @keyword_loc = keyword_loc
         | 
| @@ -16184,10 +16146,6 @@ module Prism | |
| 16184 16146 | 
             
                  visitor.visit_rescue_modifier_node(self)
         | 
| 16185 16147 | 
             
                end
         | 
| 16186 16148 |  | 
| 16187 | 
            -
                def set_newline_flag(newline_marked) # :nodoc:
         | 
| 16188 | 
            -
                  expression.set_newline_flag(newline_marked)
         | 
| 16189 | 
            -
                end
         | 
| 16190 | 
            -
             | 
| 16191 16149 | 
             
                # def child_nodes: () -> Array[nil | Node]
         | 
| 16192 16150 | 
             
                def child_nodes
         | 
| 16193 16151 | 
             
                  [expression, rescue_expression]
         | 
| @@ -16290,7 +16248,6 @@ module Prism | |
| 16290 16248 | 
             
                # def initialize: (Location keyword_loc, Array[Prism::node] exceptions, Location? operator_loc, Prism::node? reference, StatementsNode? statements, RescueNode? consequent, Location location) -> void
         | 
| 16291 16249 | 
             
                def initialize(source, keyword_loc, exceptions, operator_loc, reference, statements, consequent, location)
         | 
| 16292 16250 | 
             
                  @source = source
         | 
| 16293 | 
            -
                  @newline = false
         | 
| 16294 16251 | 
             
                  @location = location
         | 
| 16295 16252 | 
             
                  @keyword_loc = keyword_loc
         | 
| 16296 16253 | 
             
                  @exceptions = exceptions
         | 
| @@ -16436,7 +16393,6 @@ module Prism | |
| 16436 16393 | 
             
                # def initialize: (Integer flags, Symbol? name, Location? name_loc, Location operator_loc, Location location) -> void
         | 
| 16437 16394 | 
             
                def initialize(source, flags, name, name_loc, operator_loc, location)
         | 
| 16438 16395 | 
             
                  @source = source
         | 
| 16439 | 
            -
                  @newline = false
         | 
| 16440 16396 | 
             
                  @location = location
         | 
| 16441 16397 | 
             
                  @flags = flags
         | 
| 16442 16398 | 
             
                  @name = name
         | 
| @@ -16566,7 +16522,6 @@ module Prism | |
| 16566 16522 | 
             
                # def initialize: (Location location) -> void
         | 
| 16567 16523 | 
             
                def initialize(source, location)
         | 
| 16568 16524 | 
             
                  @source = source
         | 
| 16569 | 
            -
                  @newline = false
         | 
| 16570 16525 | 
             
                  @location = location
         | 
| 16571 16526 | 
             
                end
         | 
| 16572 16527 |  | 
| @@ -16651,7 +16606,6 @@ module Prism | |
| 16651 16606 | 
             
                # def initialize: (Integer flags, Location keyword_loc, ArgumentsNode? arguments, Location location) -> void
         | 
| 16652 16607 | 
             
                def initialize(source, flags, keyword_loc, arguments, location)
         | 
| 16653 16608 | 
             
                  @source = source
         | 
| 16654 | 
            -
                  @newline = false
         | 
| 16655 16609 | 
             
                  @location = location
         | 
| 16656 16610 | 
             
                  @flags = flags
         | 
| 16657 16611 | 
             
                  @keyword_loc = keyword_loc
         | 
| @@ -16768,7 +16722,6 @@ module Prism | |
| 16768 16722 | 
             
                # def initialize: (Location location) -> void
         | 
| 16769 16723 | 
             
                def initialize(source, location)
         | 
| 16770 16724 | 
             
                  @source = source
         | 
| 16771 | 
            -
                  @newline = false
         | 
| 16772 16725 | 
             
                  @location = location
         | 
| 16773 16726 | 
             
                end
         | 
| 16774 16727 |  | 
| @@ -16854,7 +16807,6 @@ module Prism | |
| 16854 16807 | 
             
                # def initialize: (Integer flags, ConstantWriteNode | ConstantAndWriteNode | ConstantOrWriteNode | ConstantOperatorWriteNode | ConstantPathWriteNode | ConstantPathAndWriteNode | ConstantPathOrWriteNode | ConstantPathOperatorWriteNode write, Location location) -> void
         | 
| 16855 16808 | 
             
                def initialize(source, flags, write, location)
         | 
| 16856 16809 | 
             
                  @source = source
         | 
| 16857 | 
            -
                  @newline = false
         | 
| 16858 16810 | 
             
                  @location = location
         | 
| 16859 16811 | 
             
                  @flags = flags
         | 
| 16860 16812 | 
             
                  @write = write
         | 
| @@ -16965,7 +16917,6 @@ module Prism | |
| 16965 16917 | 
             
                # def initialize: (Array[Symbol] locals, Location class_keyword_loc, Location operator_loc, Prism::node expression, Prism::node? body, Location end_keyword_loc, Location location) -> void
         | 
| 16966 16918 | 
             
                def initialize(source, locals, class_keyword_loc, operator_loc, expression, body, end_keyword_loc, location)
         | 
| 16967 16919 | 
             
                  @source = source
         | 
| 16968 | 
            -
                  @newline = false
         | 
| 16969 16920 | 
             
                  @location = location
         | 
| 16970 16921 | 
             
                  @locals = locals
         | 
| 16971 16922 | 
             
                  @class_keyword_loc = class_keyword_loc
         | 
| @@ -17111,7 +17062,6 @@ module Prism | |
| 17111 17062 | 
             
                # def initialize: (Location location) -> void
         | 
| 17112 17063 | 
             
                def initialize(source, location)
         | 
| 17113 17064 | 
             
                  @source = source
         | 
| 17114 | 
            -
                  @newline = false
         | 
| 17115 17065 | 
             
                  @location = location
         | 
| 17116 17066 | 
             
                end
         | 
| 17117 17067 |  | 
| @@ -17196,7 +17146,6 @@ module Prism | |
| 17196 17146 | 
             
                # def initialize: (Integer flags, String filepath, Location location) -> void
         | 
| 17197 17147 | 
             
                def initialize(source, flags, filepath, location)
         | 
| 17198 17148 | 
             
                  @source = source
         | 
| 17199 | 
            -
                  @newline = false
         | 
| 17200 17149 | 
             
                  @location = location
         | 
| 17201 17150 | 
             
                  @flags = flags
         | 
| 17202 17151 | 
             
                  @filepath = filepath
         | 
| @@ -17312,7 +17261,6 @@ module Prism | |
| 17312 17261 | 
             
                # def initialize: (Location location) -> void
         | 
| 17313 17262 | 
             
                def initialize(source, location)
         | 
| 17314 17263 | 
             
                  @source = source
         | 
| 17315 | 
            -
                  @newline = false
         | 
| 17316 17264 | 
             
                  @location = location
         | 
| 17317 17265 | 
             
                end
         | 
| 17318 17266 |  | 
| @@ -17397,7 +17345,6 @@ module Prism | |
| 17397 17345 | 
             
                # def initialize: (Location operator_loc, Prism::node? expression, Location location) -> void
         | 
| 17398 17346 | 
             
                def initialize(source, operator_loc, expression, location)
         | 
| 17399 17347 | 
             
                  @source = source
         | 
| 17400 | 
            -
                  @newline = false
         | 
| 17401 17348 | 
             
                  @location = location
         | 
| 17402 17349 | 
             
                  @operator_loc = operator_loc
         | 
| 17403 17350 | 
             
                  @expression = expression
         | 
| @@ -17503,7 +17450,6 @@ module Prism | |
| 17503 17450 | 
             
                # def initialize: (Array[Prism::node] body, Location location) -> void
         | 
| 17504 17451 | 
             
                def initialize(source, body, location)
         | 
| 17505 17452 | 
             
                  @source = source
         | 
| 17506 | 
            -
                  @newline = false
         | 
| 17507 17453 | 
             
                  @location = location
         | 
| 17508 17454 | 
             
                  @body = body
         | 
| 17509 17455 | 
             
                end
         | 
| @@ -17600,7 +17546,6 @@ module Prism | |
| 17600 17546 | 
             
                # def initialize: (Integer flags, Location? opening_loc, Location content_loc, Location? closing_loc, String unescaped, Location location) -> void
         | 
| 17601 17547 | 
             
                def initialize(source, flags, opening_loc, content_loc, closing_loc, unescaped, location)
         | 
| 17602 17548 | 
             
                  @source = source
         | 
| 17603 | 
            -
                  @newline = false
         | 
| 17604 17549 | 
             
                  @location = location
         | 
| 17605 17550 | 
             
                  @flags = flags
         | 
| 17606 17551 | 
             
                  @opening_loc = opening_loc
         | 
| @@ -17773,7 +17718,6 @@ module Prism | |
| 17773 17718 | 
             
                # def initialize: (Location keyword_loc, Location? lparen_loc, ArgumentsNode? arguments, Location? rparen_loc, Prism::node? block, Location location) -> void
         | 
| 17774 17719 | 
             
                def initialize(source, keyword_loc, lparen_loc, arguments, rparen_loc, block, location)
         | 
| 17775 17720 | 
             
                  @source = source
         | 
| 17776 | 
            -
                  @newline = false
         | 
| 17777 17721 | 
             
                  @location = location
         | 
| 17778 17722 | 
             
                  @keyword_loc = keyword_loc
         | 
| 17779 17723 | 
             
                  @lparen_loc = lparen_loc
         | 
| @@ -17928,7 +17872,6 @@ module Prism | |
| 17928 17872 | 
             
                # def initialize: (Integer flags, Location? opening_loc, Location? value_loc, Location? closing_loc, String unescaped, Location location) -> void
         | 
| 17929 17873 | 
             
                def initialize(source, flags, opening_loc, value_loc, closing_loc, unescaped, location)
         | 
| 17930 17874 | 
             
                  @source = source
         | 
| 17931 | 
            -
                  @newline = false
         | 
| 17932 17875 | 
             
                  @location = location
         | 
| 17933 17876 | 
             
                  @flags = flags
         | 
| 17934 17877 | 
             
                  @opening_loc = opening_loc
         | 
| @@ -18099,7 +18042,6 @@ module Prism | |
| 18099 18042 | 
             
                # def initialize: (Location location) -> void
         | 
| 18100 18043 | 
             
                def initialize(source, location)
         | 
| 18101 18044 | 
             
                  @source = source
         | 
| 18102 | 
            -
                  @newline = false
         | 
| 18103 18045 | 
             
                  @location = location
         | 
| 18104 18046 | 
             
                end
         | 
| 18105 18047 |  | 
| @@ -18184,7 +18126,6 @@ module Prism | |
| 18184 18126 | 
             
                # def initialize: (Array[SymbolNode | InterpolatedSymbolNode] names, Location keyword_loc, Location location) -> void
         | 
| 18185 18127 | 
             
                def initialize(source, names, keyword_loc, location)
         | 
| 18186 18128 | 
             
                  @source = source
         | 
| 18187 | 
            -
                  @newline = false
         | 
| 18188 18129 | 
             
                  @location = location
         | 
| 18189 18130 | 
             
                  @names = names
         | 
| 18190 18131 | 
             
                  @keyword_loc = keyword_loc
         | 
| @@ -18292,7 +18233,6 @@ module Prism | |
| 18292 18233 | 
             
                # def initialize: (Location keyword_loc, Prism::node predicate, Location? then_keyword_loc, StatementsNode? statements, ElseNode? consequent, Location? end_keyword_loc, Location location) -> void
         | 
| 18293 18234 | 
             
                def initialize(source, keyword_loc, predicate, then_keyword_loc, statements, consequent, end_keyword_loc, location)
         | 
| 18294 18235 | 
             
                  @source = source
         | 
| 18295 | 
            -
                  @newline = false
         | 
| 18296 18236 | 
             
                  @location = location
         | 
| 18297 18237 | 
             
                  @keyword_loc = keyword_loc
         | 
| 18298 18238 | 
             
                  @predicate = predicate
         | 
| @@ -18307,10 +18247,6 @@ module Prism | |
| 18307 18247 | 
             
                  visitor.visit_unless_node(self)
         | 
| 18308 18248 | 
             
                end
         | 
| 18309 18249 |  | 
| 18310 | 
            -
                def set_newline_flag(newline_marked) # :nodoc:
         | 
| 18311 | 
            -
                  predicate.set_newline_flag(newline_marked)
         | 
| 18312 | 
            -
                end
         | 
| 18313 | 
            -
             | 
| 18314 18250 | 
             
                # def child_nodes: () -> Array[nil | Node]
         | 
| 18315 18251 | 
             
                def child_nodes
         | 
| 18316 18252 | 
             
                  [predicate, statements, consequent]
         | 
| @@ -18366,7 +18302,9 @@ module Prism | |
| 18366 18302 | 
             
                attr_reader :predicate
         | 
| 18367 18303 |  | 
| 18368 18304 | 
             
                # The location of the `then` keyword, if present.
         | 
| 18369 | 
            -
                # | 
| 18305 | 
            +
                #
         | 
| 18306 | 
            +
                #     unless cond then bar end
         | 
| 18307 | 
            +
                #                 ^^^^
         | 
| 18370 18308 | 
             
                def then_keyword_loc
         | 
| 18371 18309 | 
             
                  location = @then_keyword_loc
         | 
| 18372 18310 | 
             
                  case location
         | 
| @@ -18480,7 +18418,6 @@ module Prism | |
| 18480 18418 | 
             
                # def initialize: (Integer flags, Location keyword_loc, Location? closing_loc, Prism::node predicate, StatementsNode? statements, Location location) -> void
         | 
| 18481 18419 | 
             
                def initialize(source, flags, keyword_loc, closing_loc, predicate, statements, location)
         | 
| 18482 18420 | 
             
                  @source = source
         | 
| 18483 | 
            -
                  @newline = false
         | 
| 18484 18421 | 
             
                  @location = location
         | 
| 18485 18422 | 
             
                  @flags = flags
         | 
| 18486 18423 | 
             
                  @keyword_loc = keyword_loc
         | 
| @@ -18494,10 +18431,6 @@ module Prism | |
| 18494 18431 | 
             
                  visitor.visit_until_node(self)
         | 
| 18495 18432 | 
             
                end
         | 
| 18496 18433 |  | 
| 18497 | 
            -
                def set_newline_flag(newline_marked) # :nodoc:
         | 
| 18498 | 
            -
                  predicate.set_newline_flag(newline_marked)
         | 
| 18499 | 
            -
                end
         | 
| 18500 | 
            -
             | 
| 18501 18434 | 
             
                # def child_nodes: () -> Array[nil | Node]
         | 
| 18502 18435 | 
             
                def child_nodes
         | 
| 18503 18436 | 
             
                  [predicate, statements]
         | 
| @@ -18629,7 +18562,6 @@ module Prism | |
| 18629 18562 | 
             
                # def initialize: (Location keyword_loc, Array[Prism::node] conditions, Location? then_keyword_loc, StatementsNode? statements, Location location) -> void
         | 
| 18630 18563 | 
             
                def initialize(source, keyword_loc, conditions, then_keyword_loc, statements, location)
         | 
| 18631 18564 | 
             
                  @source = source
         | 
| 18632 | 
            -
                  @newline = false
         | 
| 18633 18565 | 
             
                  @location = location
         | 
| 18634 18566 | 
             
                  @keyword_loc = keyword_loc
         | 
| 18635 18567 | 
             
                  @conditions = conditions
         | 
| @@ -18765,7 +18697,6 @@ module Prism | |
| 18765 18697 | 
             
                # def initialize: (Integer flags, Location keyword_loc, Location? closing_loc, Prism::node predicate, StatementsNode? statements, Location location) -> void
         | 
| 18766 18698 | 
             
                def initialize(source, flags, keyword_loc, closing_loc, predicate, statements, location)
         | 
| 18767 18699 | 
             
                  @source = source
         | 
| 18768 | 
            -
                  @newline = false
         | 
| 18769 18700 | 
             
                  @location = location
         | 
| 18770 18701 | 
             
                  @flags = flags
         | 
| 18771 18702 | 
             
                  @keyword_loc = keyword_loc
         | 
| @@ -18779,10 +18710,6 @@ module Prism | |
| 18779 18710 | 
             
                  visitor.visit_while_node(self)
         | 
| 18780 18711 | 
             
                end
         | 
| 18781 18712 |  | 
| 18782 | 
            -
                def set_newline_flag(newline_marked) # :nodoc:
         | 
| 18783 | 
            -
                  predicate.set_newline_flag(newline_marked)
         | 
| 18784 | 
            -
                end
         | 
| 18785 | 
            -
             | 
| 18786 18713 | 
             
                # def child_nodes: () -> Array[nil | Node]
         | 
| 18787 18714 | 
             
                def child_nodes
         | 
| 18788 18715 | 
             
                  [predicate, statements]
         | 
| @@ -18912,7 +18839,6 @@ module Prism | |
| 18912 18839 | 
             
                # def initialize: (Integer flags, Location opening_loc, Location content_loc, Location closing_loc, String unescaped, Location location) -> void
         | 
| 18913 18840 | 
             
                def initialize(source, flags, opening_loc, content_loc, closing_loc, unescaped, location)
         | 
| 18914 18841 | 
             
                  @source = source
         | 
| 18915 | 
            -
                  @newline = false
         | 
| 18916 18842 | 
             
                  @location = location
         | 
| 18917 18843 | 
             
                  @flags = flags
         | 
| 18918 18844 | 
             
                  @opening_loc = opening_loc
         | 
| @@ -19060,7 +18986,6 @@ module Prism | |
| 19060 18986 | 
             
                # def initialize: (Location keyword_loc, Location? lparen_loc, ArgumentsNode? arguments, Location? rparen_loc, Location location) -> void
         | 
| 19061 18987 | 
             
                def initialize(source, keyword_loc, lparen_loc, arguments, rparen_loc, location)
         | 
| 19062 18988 | 
             
                  @source = source
         | 
| 19063 | 
            -
                  @newline = false
         | 
| 19064 18989 | 
             
                  @location = location
         | 
| 19065 18990 | 
             
                  @keyword_loc = keyword_loc
         | 
| 19066 18991 | 
             
                  @lparen_loc = lparen_loc
         |