prism 0.25.0 → 0.26.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 +20 -1
 - data/Makefile +17 -14
 - data/config.yml +12 -1
 - data/docs/configuration.md +1 -0
 - data/docs/releasing.md +7 -9
 - data/ext/prism/extconf.rb +8 -3
 - data/ext/prism/extension.c +28 -2
 - data/ext/prism/extension.h +1 -1
 - data/include/prism/diagnostic.h +12 -1
 - data/include/prism/parser.h +5 -1
 - data/include/prism/version.h +2 -2
 - data/lib/prism/desugar_compiler.rb +4 -2
 - data/lib/prism/ffi.rb +10 -0
 - data/lib/prism/node.rb +16 -0
 - data/lib/prism/parse_result.rb +5 -0
 - data/lib/prism/reflection.rb +421 -0
 - data/lib/prism/serialize.rb +13 -2
 - data/lib/prism/translation/parser/compiler.rb +48 -11
 - data/lib/prism.rb +1 -16
 - data/prism.gemspec +7 -3
 - data/rbi/prism/node.rbi +453 -0
 - data/rbi/prism/parse_result.rbi +3 -0
 - data/rbi/prism/reflection.rbi +64 -0
 - data/rbi/prism/translation/parser.rbi +11 -0
 - data/rbi/prism/translation/parser33.rbi +6 -0
 - data/rbi/prism/translation/parser34.rbi +6 -0
 - data/rbi/prism.rbi +33 -33
 - data/sig/prism/node.rbs +10 -1
 - data/sig/prism/parse_result.rbs +1 -0
 - data/sig/prism/reflection.rbs +56 -0
 - data/sig/prism.rbs +2 -2
 - data/src/diagnostic.c +30 -8
 - data/src/options.c +30 -19
 - data/src/prism.c +404 -67
 - data/src/token_type.c +3 -3
 - data/src/util/pm_integer.c +14 -8
 - metadata +8 -4
 - data/include/prism/util/pm_state_stack.h +0 -42
 - data/src/util/pm_state_stack.c +0 -25
 
| 
         @@ -0,0 +1,421 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            =begin
         
     | 
| 
      
 4 
     | 
    
         
            +
            This file is generated by the templates/template.rb script and should not be
         
     | 
| 
      
 5 
     | 
    
         
            +
            modified manually. See templates/lib/prism/reflection.rb.erb
         
     | 
| 
      
 6 
     | 
    
         
            +
            if you are looking to modify the template
         
     | 
| 
      
 7 
     | 
    
         
            +
            =end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            module Prism
         
     | 
| 
      
 10 
     | 
    
         
            +
              # The Reflection module provides the ability to reflect on the structure of
         
     | 
| 
      
 11 
     | 
    
         
            +
              # the syntax tree itself, as opposed to looking at a single syntax tree. This
         
     | 
| 
      
 12 
     | 
    
         
            +
              # is useful in metaprogramming contexts.
         
     | 
| 
      
 13 
     | 
    
         
            +
              module Reflection
         
     | 
| 
      
 14 
     | 
    
         
            +
                # A field represents a single piece of data on a node. It is the base class
         
     | 
| 
      
 15 
     | 
    
         
            +
                # for all other field types.
         
     | 
| 
      
 16 
     | 
    
         
            +
                class Field
         
     | 
| 
      
 17 
     | 
    
         
            +
                  # The name of the field.
         
     | 
| 
      
 18 
     | 
    
         
            +
                  attr_reader :name
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  # Initializes the field with the given name.
         
     | 
| 
      
 21 
     | 
    
         
            +
                  def initialize(name)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @name = name
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                # A node field represents a single child node in the syntax tree. It
         
     | 
| 
      
 27 
     | 
    
         
            +
                # resolves to a Prism::Node in Ruby.
         
     | 
| 
      
 28 
     | 
    
         
            +
                class NodeField < Field
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                # An optional node field represents a single child node in the syntax tree
         
     | 
| 
      
 32 
     | 
    
         
            +
                # that may or may not be present. It resolves to either a Prism::Node or nil
         
     | 
| 
      
 33 
     | 
    
         
            +
                # in Ruby.
         
     | 
| 
      
 34 
     | 
    
         
            +
                class OptionalNodeField < Field
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                # A node list field represents a list of child nodes in the syntax tree. It
         
     | 
| 
      
 38 
     | 
    
         
            +
                # resolves to an array of Prism::Node instances in Ruby.
         
     | 
| 
      
 39 
     | 
    
         
            +
                class NodeListField < Field
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                # A constant field represents a constant value on a node. Effectively, it
         
     | 
| 
      
 43 
     | 
    
         
            +
                # represents an identifier found within the source. It resolves to a symbol
         
     | 
| 
      
 44 
     | 
    
         
            +
                # in Ruby.
         
     | 
| 
      
 45 
     | 
    
         
            +
                class ConstantField < Field
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                # An optional constant field represents a constant value on a node that may
         
     | 
| 
      
 49 
     | 
    
         
            +
                # or may not be present. It resolves to either a symbol or nil in Ruby.
         
     | 
| 
      
 50 
     | 
    
         
            +
                class OptionalConstantField < Field
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                # A constant list field represents a list of constant values on a node. It
         
     | 
| 
      
 54 
     | 
    
         
            +
                # resolves to an array of symbols in Ruby.
         
     | 
| 
      
 55 
     | 
    
         
            +
                class ConstantListField < Field
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                # A string field represents a string value on a node. It almost always
         
     | 
| 
      
 59 
     | 
    
         
            +
                # represents the unescaped value of a string-like literal. It resolves to a
         
     | 
| 
      
 60 
     | 
    
         
            +
                # string in Ruby.
         
     | 
| 
      
 61 
     | 
    
         
            +
                class StringField < Field
         
     | 
| 
      
 62 
     | 
    
         
            +
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                # A location field represents the location of some part of the node in the
         
     | 
| 
      
 65 
     | 
    
         
            +
                # source code. For example, the location of a keyword or an operator. It
         
     | 
| 
      
 66 
     | 
    
         
            +
                # resolves to a Prism::Location in Ruby.
         
     | 
| 
      
 67 
     | 
    
         
            +
                class LocationField < Field
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                # An optional location field represents the location of some part of the
         
     | 
| 
      
 71 
     | 
    
         
            +
                # node in the source code that may or may not be present. It resolves to
         
     | 
| 
      
 72 
     | 
    
         
            +
                # either a Prism::Location or nil in Ruby.
         
     | 
| 
      
 73 
     | 
    
         
            +
                class OptionalLocationField < Field
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                # A uint8 field represents an unsigned 8-bit integer value on a node. It
         
     | 
| 
      
 77 
     | 
    
         
            +
                # resolves to an Integer in Ruby.
         
     | 
| 
      
 78 
     | 
    
         
            +
                class UInt8Field < Field
         
     | 
| 
      
 79 
     | 
    
         
            +
                end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                # A uint32 field represents an unsigned 32-bit integer value on a node. It
         
     | 
| 
      
 82 
     | 
    
         
            +
                # resolves to an Integer in Ruby.
         
     | 
| 
      
 83 
     | 
    
         
            +
                class UInt32Field < Field
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                # A flags field represents a bitset of flags on a node. It resolves to an
         
     | 
| 
      
 87 
     | 
    
         
            +
                # integer in Ruby. Note that the flags cannot be accessed directly on the
         
     | 
| 
      
 88 
     | 
    
         
            +
                # node because the integer is kept private. Instead, the various flags in
         
     | 
| 
      
 89 
     | 
    
         
            +
                # the bitset should be accessed through their query methods.
         
     | 
| 
      
 90 
     | 
    
         
            +
                class FlagsField < Field
         
     | 
| 
      
 91 
     | 
    
         
            +
                  # The names of the flags in the bitset.
         
     | 
| 
      
 92 
     | 
    
         
            +
                  attr_reader :flags
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                  # Initializes the flags field with the given name and flags.
         
     | 
| 
      
 95 
     | 
    
         
            +
                  def initialize(name, flags)
         
     | 
| 
      
 96 
     | 
    
         
            +
                    super(name)
         
     | 
| 
      
 97 
     | 
    
         
            +
                    @flags = flags
         
     | 
| 
      
 98 
     | 
    
         
            +
                  end
         
     | 
| 
      
 99 
     | 
    
         
            +
                end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                # An integer field represents an arbitrarily-sized integer value. It is used
         
     | 
| 
      
 102 
     | 
    
         
            +
                # exclusively to represent the value of an integer literal. It resolves to
         
     | 
| 
      
 103 
     | 
    
         
            +
                # an Integer in Ruby.
         
     | 
| 
      
 104 
     | 
    
         
            +
                class IntegerField < Field
         
     | 
| 
      
 105 
     | 
    
         
            +
                end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                # A double field represents a double-precision floating point value. It is
         
     | 
| 
      
 108 
     | 
    
         
            +
                # used exclusively to represent the value of a floating point literal. It
         
     | 
| 
      
 109 
     | 
    
         
            +
                # resolves to a Float in Ruby.
         
     | 
| 
      
 110 
     | 
    
         
            +
                class DoubleField < Field
         
     | 
| 
      
 111 
     | 
    
         
            +
                end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                # Returns the fields for the given node.
         
     | 
| 
      
 114 
     | 
    
         
            +
                def self.fields_for(node)
         
     | 
| 
      
 115 
     | 
    
         
            +
                  case node.type
         
     | 
| 
      
 116 
     | 
    
         
            +
                  when :alias_global_variable_node
         
     | 
| 
      
 117 
     | 
    
         
            +
                    [NodeField.new(:new_name), NodeField.new(:old_name), LocationField.new(:keyword_loc)]
         
     | 
| 
      
 118 
     | 
    
         
            +
                  when :alias_method_node
         
     | 
| 
      
 119 
     | 
    
         
            +
                    [NodeField.new(:new_name), NodeField.new(:old_name), LocationField.new(:keyword_loc)]
         
     | 
| 
      
 120 
     | 
    
         
            +
                  when :alternation_pattern_node
         
     | 
| 
      
 121 
     | 
    
         
            +
                    [NodeField.new(:left), NodeField.new(:right), LocationField.new(:operator_loc)]
         
     | 
| 
      
 122 
     | 
    
         
            +
                  when :and_node
         
     | 
| 
      
 123 
     | 
    
         
            +
                    [NodeField.new(:left), NodeField.new(:right), LocationField.new(:operator_loc)]
         
     | 
| 
      
 124 
     | 
    
         
            +
                  when :arguments_node
         
     | 
| 
      
 125 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:contains_keyword_splat?]), NodeListField.new(:arguments)]
         
     | 
| 
      
 126 
     | 
    
         
            +
                  when :array_node
         
     | 
| 
      
 127 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:contains_splat?]), NodeListField.new(:elements), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
         
     | 
| 
      
 128 
     | 
    
         
            +
                  when :array_pattern_node
         
     | 
| 
      
 129 
     | 
    
         
            +
                    [OptionalNodeField.new(:constant), NodeListField.new(:requireds), OptionalNodeField.new(:rest), NodeListField.new(:posts), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
         
     | 
| 
      
 130 
     | 
    
         
            +
                  when :assoc_node
         
     | 
| 
      
 131 
     | 
    
         
            +
                    [NodeField.new(:key), NodeField.new(:value), OptionalLocationField.new(:operator_loc)]
         
     | 
| 
      
 132 
     | 
    
         
            +
                  when :assoc_splat_node
         
     | 
| 
      
 133 
     | 
    
         
            +
                    [OptionalNodeField.new(:value), LocationField.new(:operator_loc)]
         
     | 
| 
      
 134 
     | 
    
         
            +
                  when :back_reference_read_node
         
     | 
| 
      
 135 
     | 
    
         
            +
                    [ConstantField.new(:name)]
         
     | 
| 
      
 136 
     | 
    
         
            +
                  when :begin_node
         
     | 
| 
      
 137 
     | 
    
         
            +
                    [OptionalLocationField.new(:begin_keyword_loc), OptionalNodeField.new(:statements), OptionalNodeField.new(:rescue_clause), OptionalNodeField.new(:else_clause), OptionalNodeField.new(:ensure_clause), OptionalLocationField.new(:end_keyword_loc)]
         
     | 
| 
      
 138 
     | 
    
         
            +
                  when :block_argument_node
         
     | 
| 
      
 139 
     | 
    
         
            +
                    [OptionalNodeField.new(:expression), LocationField.new(:operator_loc)]
         
     | 
| 
      
 140 
     | 
    
         
            +
                  when :block_local_variable_node
         
     | 
| 
      
 141 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name)]
         
     | 
| 
      
 142 
     | 
    
         
            +
                  when :block_node
         
     | 
| 
      
 143 
     | 
    
         
            +
                    [ConstantListField.new(:locals), OptionalNodeField.new(:parameters), OptionalNodeField.new(:body), LocationField.new(:opening_loc), LocationField.new(:closing_loc)]
         
     | 
| 
      
 144 
     | 
    
         
            +
                  when :block_parameter_node
         
     | 
| 
      
 145 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:repeated_parameter?]), OptionalConstantField.new(:name), OptionalLocationField.new(:name_loc), LocationField.new(:operator_loc)]
         
     | 
| 
      
 146 
     | 
    
         
            +
                  when :block_parameters_node
         
     | 
| 
      
 147 
     | 
    
         
            +
                    [OptionalNodeField.new(:parameters), NodeListField.new(:locals), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
         
     | 
| 
      
 148 
     | 
    
         
            +
                  when :break_node
         
     | 
| 
      
 149 
     | 
    
         
            +
                    [OptionalNodeField.new(:arguments), LocationField.new(:keyword_loc)]
         
     | 
| 
      
 150 
     | 
    
         
            +
                  when :call_and_write_node
         
     | 
| 
      
 151 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), OptionalLocationField.new(:message_loc), ConstantField.new(:read_name), ConstantField.new(:write_name), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 152 
     | 
    
         
            +
                  when :call_node
         
     | 
| 
      
 153 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), ConstantField.new(:name), OptionalLocationField.new(:message_loc), OptionalLocationField.new(:opening_loc), OptionalNodeField.new(:arguments), OptionalLocationField.new(:closing_loc), OptionalNodeField.new(:block)]
         
     | 
| 
      
 154 
     | 
    
         
            +
                  when :call_operator_write_node
         
     | 
| 
      
 155 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), OptionalLocationField.new(:message_loc), ConstantField.new(:read_name), ConstantField.new(:write_name), ConstantField.new(:operator), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 156 
     | 
    
         
            +
                  when :call_or_write_node
         
     | 
| 
      
 157 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), OptionalLocationField.new(:message_loc), ConstantField.new(:read_name), ConstantField.new(:write_name), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 158 
     | 
    
         
            +
                  when :call_target_node
         
     | 
| 
      
 159 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), NodeField.new(:receiver), LocationField.new(:call_operator_loc), ConstantField.new(:name), LocationField.new(:message_loc)]
         
     | 
| 
      
 160 
     | 
    
         
            +
                  when :capture_pattern_node
         
     | 
| 
      
 161 
     | 
    
         
            +
                    [NodeField.new(:value), NodeField.new(:target), LocationField.new(:operator_loc)]
         
     | 
| 
      
 162 
     | 
    
         
            +
                  when :case_match_node
         
     | 
| 
      
 163 
     | 
    
         
            +
                    [OptionalNodeField.new(:predicate), NodeListField.new(:conditions), OptionalNodeField.new(:consequent), LocationField.new(:case_keyword_loc), LocationField.new(:end_keyword_loc)]
         
     | 
| 
      
 164 
     | 
    
         
            +
                  when :case_node
         
     | 
| 
      
 165 
     | 
    
         
            +
                    [OptionalNodeField.new(:predicate), NodeListField.new(:conditions), OptionalNodeField.new(:consequent), LocationField.new(:case_keyword_loc), LocationField.new(:end_keyword_loc)]
         
     | 
| 
      
 166 
     | 
    
         
            +
                  when :class_node
         
     | 
| 
      
 167 
     | 
    
         
            +
                    [ConstantListField.new(:locals), LocationField.new(:class_keyword_loc), NodeField.new(:constant_path), OptionalLocationField.new(:inheritance_operator_loc), OptionalNodeField.new(:superclass), OptionalNodeField.new(:body), LocationField.new(:end_keyword_loc), ConstantField.new(:name)]
         
     | 
| 
      
 168 
     | 
    
         
            +
                  when :class_variable_and_write_node
         
     | 
| 
      
 169 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 170 
     | 
    
         
            +
                  when :class_variable_operator_write_node
         
     | 
| 
      
 171 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value), ConstantField.new(:operator)]
         
     | 
| 
      
 172 
     | 
    
         
            +
                  when :class_variable_or_write_node
         
     | 
| 
      
 173 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 174 
     | 
    
         
            +
                  when :class_variable_read_node
         
     | 
| 
      
 175 
     | 
    
         
            +
                    [ConstantField.new(:name)]
         
     | 
| 
      
 176 
     | 
    
         
            +
                  when :class_variable_target_node
         
     | 
| 
      
 177 
     | 
    
         
            +
                    [ConstantField.new(:name)]
         
     | 
| 
      
 178 
     | 
    
         
            +
                  when :class_variable_write_node
         
     | 
| 
      
 179 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
         
     | 
| 
      
 180 
     | 
    
         
            +
                  when :constant_and_write_node
         
     | 
| 
      
 181 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 182 
     | 
    
         
            +
                  when :constant_operator_write_node
         
     | 
| 
      
 183 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value), ConstantField.new(:operator)]
         
     | 
| 
      
 184 
     | 
    
         
            +
                  when :constant_or_write_node
         
     | 
| 
      
 185 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 186 
     | 
    
         
            +
                  when :constant_path_and_write_node
         
     | 
| 
      
 187 
     | 
    
         
            +
                    [NodeField.new(:target), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 188 
     | 
    
         
            +
                  when :constant_path_node
         
     | 
| 
      
 189 
     | 
    
         
            +
                    [OptionalNodeField.new(:parent), NodeField.new(:child), LocationField.new(:delimiter_loc)]
         
     | 
| 
      
 190 
     | 
    
         
            +
                  when :constant_path_operator_write_node
         
     | 
| 
      
 191 
     | 
    
         
            +
                    [NodeField.new(:target), LocationField.new(:operator_loc), NodeField.new(:value), ConstantField.new(:operator)]
         
     | 
| 
      
 192 
     | 
    
         
            +
                  when :constant_path_or_write_node
         
     | 
| 
      
 193 
     | 
    
         
            +
                    [NodeField.new(:target), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 194 
     | 
    
         
            +
                  when :constant_path_target_node
         
     | 
| 
      
 195 
     | 
    
         
            +
                    [OptionalNodeField.new(:parent), NodeField.new(:child), LocationField.new(:delimiter_loc)]
         
     | 
| 
      
 196 
     | 
    
         
            +
                  when :constant_path_write_node
         
     | 
| 
      
 197 
     | 
    
         
            +
                    [NodeField.new(:target), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 198 
     | 
    
         
            +
                  when :constant_read_node
         
     | 
| 
      
 199 
     | 
    
         
            +
                    [ConstantField.new(:name)]
         
     | 
| 
      
 200 
     | 
    
         
            +
                  when :constant_target_node
         
     | 
| 
      
 201 
     | 
    
         
            +
                    [ConstantField.new(:name)]
         
     | 
| 
      
 202 
     | 
    
         
            +
                  when :constant_write_node
         
     | 
| 
      
 203 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
         
     | 
| 
      
 204 
     | 
    
         
            +
                  when :def_node
         
     | 
| 
      
 205 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), OptionalNodeField.new(:receiver), OptionalNodeField.new(:parameters), OptionalNodeField.new(:body), ConstantListField.new(:locals), LocationField.new(:def_keyword_loc), OptionalLocationField.new(:operator_loc), OptionalLocationField.new(:lparen_loc), OptionalLocationField.new(:rparen_loc), OptionalLocationField.new(:equal_loc), OptionalLocationField.new(:end_keyword_loc)]
         
     | 
| 
      
 206 
     | 
    
         
            +
                  when :defined_node
         
     | 
| 
      
 207 
     | 
    
         
            +
                    [OptionalLocationField.new(:lparen_loc), NodeField.new(:value), OptionalLocationField.new(:rparen_loc), LocationField.new(:keyword_loc)]
         
     | 
| 
      
 208 
     | 
    
         
            +
                  when :else_node
         
     | 
| 
      
 209 
     | 
    
         
            +
                    [LocationField.new(:else_keyword_loc), OptionalNodeField.new(:statements), OptionalLocationField.new(:end_keyword_loc)]
         
     | 
| 
      
 210 
     | 
    
         
            +
                  when :embedded_statements_node
         
     | 
| 
      
 211 
     | 
    
         
            +
                    [LocationField.new(:opening_loc), OptionalNodeField.new(:statements), LocationField.new(:closing_loc)]
         
     | 
| 
      
 212 
     | 
    
         
            +
                  when :embedded_variable_node
         
     | 
| 
      
 213 
     | 
    
         
            +
                    [LocationField.new(:operator_loc), NodeField.new(:variable)]
         
     | 
| 
      
 214 
     | 
    
         
            +
                  when :ensure_node
         
     | 
| 
      
 215 
     | 
    
         
            +
                    [LocationField.new(:ensure_keyword_loc), OptionalNodeField.new(:statements), LocationField.new(:end_keyword_loc)]
         
     | 
| 
      
 216 
     | 
    
         
            +
                  when :false_node
         
     | 
| 
      
 217 
     | 
    
         
            +
                    []
         
     | 
| 
      
 218 
     | 
    
         
            +
                  when :find_pattern_node
         
     | 
| 
      
 219 
     | 
    
         
            +
                    [OptionalNodeField.new(:constant), NodeField.new(:left), NodeListField.new(:requireds), NodeField.new(:right), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
         
     | 
| 
      
 220 
     | 
    
         
            +
                  when :flip_flop_node
         
     | 
| 
      
 221 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:exclude_end?]), OptionalNodeField.new(:left), OptionalNodeField.new(:right), LocationField.new(:operator_loc)]
         
     | 
| 
      
 222 
     | 
    
         
            +
                  when :float_node
         
     | 
| 
      
 223 
     | 
    
         
            +
                    [DoubleField.new(:value)]
         
     | 
| 
      
 224 
     | 
    
         
            +
                  when :for_node
         
     | 
| 
      
 225 
     | 
    
         
            +
                    [NodeField.new(:index), NodeField.new(:collection), OptionalNodeField.new(:statements), LocationField.new(:for_keyword_loc), LocationField.new(:in_keyword_loc), OptionalLocationField.new(:do_keyword_loc), LocationField.new(:end_keyword_loc)]
         
     | 
| 
      
 226 
     | 
    
         
            +
                  when :forwarding_arguments_node
         
     | 
| 
      
 227 
     | 
    
         
            +
                    []
         
     | 
| 
      
 228 
     | 
    
         
            +
                  when :forwarding_parameter_node
         
     | 
| 
      
 229 
     | 
    
         
            +
                    []
         
     | 
| 
      
 230 
     | 
    
         
            +
                  when :forwarding_super_node
         
     | 
| 
      
 231 
     | 
    
         
            +
                    [OptionalNodeField.new(:block)]
         
     | 
| 
      
 232 
     | 
    
         
            +
                  when :global_variable_and_write_node
         
     | 
| 
      
 233 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 234 
     | 
    
         
            +
                  when :global_variable_operator_write_node
         
     | 
| 
      
 235 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value), ConstantField.new(:operator)]
         
     | 
| 
      
 236 
     | 
    
         
            +
                  when :global_variable_or_write_node
         
     | 
| 
      
 237 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 238 
     | 
    
         
            +
                  when :global_variable_read_node
         
     | 
| 
      
 239 
     | 
    
         
            +
                    [ConstantField.new(:name)]
         
     | 
| 
      
 240 
     | 
    
         
            +
                  when :global_variable_target_node
         
     | 
| 
      
 241 
     | 
    
         
            +
                    [ConstantField.new(:name)]
         
     | 
| 
      
 242 
     | 
    
         
            +
                  when :global_variable_write_node
         
     | 
| 
      
 243 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
         
     | 
| 
      
 244 
     | 
    
         
            +
                  when :hash_node
         
     | 
| 
      
 245 
     | 
    
         
            +
                    [LocationField.new(:opening_loc), NodeListField.new(:elements), LocationField.new(:closing_loc)]
         
     | 
| 
      
 246 
     | 
    
         
            +
                  when :hash_pattern_node
         
     | 
| 
      
 247 
     | 
    
         
            +
                    [OptionalNodeField.new(:constant), NodeListField.new(:elements), OptionalNodeField.new(:rest), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
         
     | 
| 
      
 248 
     | 
    
         
            +
                  when :if_node
         
     | 
| 
      
 249 
     | 
    
         
            +
                    [OptionalLocationField.new(:if_keyword_loc), NodeField.new(:predicate), OptionalLocationField.new(:then_keyword_loc), OptionalNodeField.new(:statements), OptionalNodeField.new(:consequent), OptionalLocationField.new(:end_keyword_loc)]
         
     | 
| 
      
 250 
     | 
    
         
            +
                  when :imaginary_node
         
     | 
| 
      
 251 
     | 
    
         
            +
                    [NodeField.new(:numeric)]
         
     | 
| 
      
 252 
     | 
    
         
            +
                  when :implicit_node
         
     | 
| 
      
 253 
     | 
    
         
            +
                    [NodeField.new(:value)]
         
     | 
| 
      
 254 
     | 
    
         
            +
                  when :implicit_rest_node
         
     | 
| 
      
 255 
     | 
    
         
            +
                    []
         
     | 
| 
      
 256 
     | 
    
         
            +
                  when :in_node
         
     | 
| 
      
 257 
     | 
    
         
            +
                    [NodeField.new(:pattern), OptionalNodeField.new(:statements), LocationField.new(:in_loc), OptionalLocationField.new(:then_loc)]
         
     | 
| 
      
 258 
     | 
    
         
            +
                  when :index_and_write_node
         
     | 
| 
      
 259 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), LocationField.new(:opening_loc), OptionalNodeField.new(:arguments), LocationField.new(:closing_loc), OptionalNodeField.new(:block), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 260 
     | 
    
         
            +
                  when :index_operator_write_node
         
     | 
| 
      
 261 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), LocationField.new(:opening_loc), OptionalNodeField.new(:arguments), LocationField.new(:closing_loc), OptionalNodeField.new(:block), ConstantField.new(:operator), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 262 
     | 
    
         
            +
                  when :index_or_write_node
         
     | 
| 
      
 263 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), LocationField.new(:opening_loc), OptionalNodeField.new(:arguments), LocationField.new(:closing_loc), OptionalNodeField.new(:block), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 264 
     | 
    
         
            +
                  when :index_target_node
         
     | 
| 
      
 265 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), NodeField.new(:receiver), LocationField.new(:opening_loc), OptionalNodeField.new(:arguments), LocationField.new(:closing_loc), OptionalNodeField.new(:block)]
         
     | 
| 
      
 266 
     | 
    
         
            +
                  when :instance_variable_and_write_node
         
     | 
| 
      
 267 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 268 
     | 
    
         
            +
                  when :instance_variable_operator_write_node
         
     | 
| 
      
 269 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value), ConstantField.new(:operator)]
         
     | 
| 
      
 270 
     | 
    
         
            +
                  when :instance_variable_or_write_node
         
     | 
| 
      
 271 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 272 
     | 
    
         
            +
                  when :instance_variable_read_node
         
     | 
| 
      
 273 
     | 
    
         
            +
                    [ConstantField.new(:name)]
         
     | 
| 
      
 274 
     | 
    
         
            +
                  when :instance_variable_target_node
         
     | 
| 
      
 275 
     | 
    
         
            +
                    [ConstantField.new(:name)]
         
     | 
| 
      
 276 
     | 
    
         
            +
                  when :instance_variable_write_node
         
     | 
| 
      
 277 
     | 
    
         
            +
                    [ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
         
     | 
| 
      
 278 
     | 
    
         
            +
                  when :integer_node
         
     | 
| 
      
 279 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:binary?, :decimal?, :octal?, :hexadecimal?]), IntegerField.new(:value)]
         
     | 
| 
      
 280 
     | 
    
         
            +
                  when :interpolated_match_last_line_node
         
     | 
| 
      
 281 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:ignore_case?, :extended?, :multi_line?, :once?, :euc_jp?, :ascii_8bit?, :windows_31j?, :utf_8?, :forced_utf8_encoding?, :forced_binary_encoding?, :forced_us_ascii_encoding?]), LocationField.new(:opening_loc), NodeListField.new(:parts), LocationField.new(:closing_loc)]
         
     | 
| 
      
 282 
     | 
    
         
            +
                  when :interpolated_regular_expression_node
         
     | 
| 
      
 283 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:ignore_case?, :extended?, :multi_line?, :once?, :euc_jp?, :ascii_8bit?, :windows_31j?, :utf_8?, :forced_utf8_encoding?, :forced_binary_encoding?, :forced_us_ascii_encoding?]), LocationField.new(:opening_loc), NodeListField.new(:parts), LocationField.new(:closing_loc)]
         
     | 
| 
      
 284 
     | 
    
         
            +
                  when :interpolated_string_node
         
     | 
| 
      
 285 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:frozen?, :mutable?]), OptionalLocationField.new(:opening_loc), NodeListField.new(:parts), OptionalLocationField.new(:closing_loc)]
         
     | 
| 
      
 286 
     | 
    
         
            +
                  when :interpolated_symbol_node
         
     | 
| 
      
 287 
     | 
    
         
            +
                    [OptionalLocationField.new(:opening_loc), NodeListField.new(:parts), OptionalLocationField.new(:closing_loc)]
         
     | 
| 
      
 288 
     | 
    
         
            +
                  when :interpolated_x_string_node
         
     | 
| 
      
 289 
     | 
    
         
            +
                    [LocationField.new(:opening_loc), NodeListField.new(:parts), LocationField.new(:closing_loc)]
         
     | 
| 
      
 290 
     | 
    
         
            +
                  when :it_parameters_node
         
     | 
| 
      
 291 
     | 
    
         
            +
                    []
         
     | 
| 
      
 292 
     | 
    
         
            +
                  when :keyword_hash_node
         
     | 
| 
      
 293 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:symbol_keys?]), NodeListField.new(:elements)]
         
     | 
| 
      
 294 
     | 
    
         
            +
                  when :keyword_rest_parameter_node
         
     | 
| 
      
 295 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:repeated_parameter?]), OptionalConstantField.new(:name), OptionalLocationField.new(:name_loc), LocationField.new(:operator_loc)]
         
     | 
| 
      
 296 
     | 
    
         
            +
                  when :lambda_node
         
     | 
| 
      
 297 
     | 
    
         
            +
                    [ConstantListField.new(:locals), LocationField.new(:operator_loc), LocationField.new(:opening_loc), LocationField.new(:closing_loc), OptionalNodeField.new(:parameters), OptionalNodeField.new(:body)]
         
     | 
| 
      
 298 
     | 
    
         
            +
                  when :local_variable_and_write_node
         
     | 
| 
      
 299 
     | 
    
         
            +
                    [LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value), ConstantField.new(:name), UInt32Field.new(:depth)]
         
     | 
| 
      
 300 
     | 
    
         
            +
                  when :local_variable_operator_write_node
         
     | 
| 
      
 301 
     | 
    
         
            +
                    [LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value), ConstantField.new(:name), ConstantField.new(:operator), UInt32Field.new(:depth)]
         
     | 
| 
      
 302 
     | 
    
         
            +
                  when :local_variable_or_write_node
         
     | 
| 
      
 303 
     | 
    
         
            +
                    [LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value), ConstantField.new(:name), UInt32Field.new(:depth)]
         
     | 
| 
      
 304 
     | 
    
         
            +
                  when :local_variable_read_node
         
     | 
| 
      
 305 
     | 
    
         
            +
                    [ConstantField.new(:name), UInt32Field.new(:depth)]
         
     | 
| 
      
 306 
     | 
    
         
            +
                  when :local_variable_target_node
         
     | 
| 
      
 307 
     | 
    
         
            +
                    [ConstantField.new(:name), UInt32Field.new(:depth)]
         
     | 
| 
      
 308 
     | 
    
         
            +
                  when :local_variable_write_node
         
     | 
| 
      
 309 
     | 
    
         
            +
                    [ConstantField.new(:name), UInt32Field.new(:depth), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
         
     | 
| 
      
 310 
     | 
    
         
            +
                  when :match_last_line_node
         
     | 
| 
      
 311 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:ignore_case?, :extended?, :multi_line?, :once?, :euc_jp?, :ascii_8bit?, :windows_31j?, :utf_8?, :forced_utf8_encoding?, :forced_binary_encoding?, :forced_us_ascii_encoding?]), LocationField.new(:opening_loc), LocationField.new(:content_loc), LocationField.new(:closing_loc), StringField.new(:unescaped)]
         
     | 
| 
      
 312 
     | 
    
         
            +
                  when :match_predicate_node
         
     | 
| 
      
 313 
     | 
    
         
            +
                    [NodeField.new(:value), NodeField.new(:pattern), LocationField.new(:operator_loc)]
         
     | 
| 
      
 314 
     | 
    
         
            +
                  when :match_required_node
         
     | 
| 
      
 315 
     | 
    
         
            +
                    [NodeField.new(:value), NodeField.new(:pattern), LocationField.new(:operator_loc)]
         
     | 
| 
      
 316 
     | 
    
         
            +
                  when :match_write_node
         
     | 
| 
      
 317 
     | 
    
         
            +
                    [NodeField.new(:call), NodeListField.new(:targets)]
         
     | 
| 
      
 318 
     | 
    
         
            +
                  when :missing_node
         
     | 
| 
      
 319 
     | 
    
         
            +
                    []
         
     | 
| 
      
 320 
     | 
    
         
            +
                  when :module_node
         
     | 
| 
      
 321 
     | 
    
         
            +
                    [ConstantListField.new(:locals), LocationField.new(:module_keyword_loc), NodeField.new(:constant_path), OptionalNodeField.new(:body), LocationField.new(:end_keyword_loc), ConstantField.new(:name)]
         
     | 
| 
      
 322 
     | 
    
         
            +
                  when :multi_target_node
         
     | 
| 
      
 323 
     | 
    
         
            +
                    [NodeListField.new(:lefts), OptionalNodeField.new(:rest), NodeListField.new(:rights), OptionalLocationField.new(:lparen_loc), OptionalLocationField.new(:rparen_loc)]
         
     | 
| 
      
 324 
     | 
    
         
            +
                  when :multi_write_node
         
     | 
| 
      
 325 
     | 
    
         
            +
                    [NodeListField.new(:lefts), OptionalNodeField.new(:rest), NodeListField.new(:rights), OptionalLocationField.new(:lparen_loc), OptionalLocationField.new(:rparen_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 326 
     | 
    
         
            +
                  when :next_node
         
     | 
| 
      
 327 
     | 
    
         
            +
                    [OptionalNodeField.new(:arguments), LocationField.new(:keyword_loc)]
         
     | 
| 
      
 328 
     | 
    
         
            +
                  when :nil_node
         
     | 
| 
      
 329 
     | 
    
         
            +
                    []
         
     | 
| 
      
 330 
     | 
    
         
            +
                  when :no_keywords_parameter_node
         
     | 
| 
      
 331 
     | 
    
         
            +
                    [LocationField.new(:operator_loc), LocationField.new(:keyword_loc)]
         
     | 
| 
      
 332 
     | 
    
         
            +
                  when :numbered_parameters_node
         
     | 
| 
      
 333 
     | 
    
         
            +
                    [UInt8Field.new(:maximum)]
         
     | 
| 
      
 334 
     | 
    
         
            +
                  when :numbered_reference_read_node
         
     | 
| 
      
 335 
     | 
    
         
            +
                    [UInt32Field.new(:number)]
         
     | 
| 
      
 336 
     | 
    
         
            +
                  when :optional_keyword_parameter_node
         
     | 
| 
      
 337 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value)]
         
     | 
| 
      
 338 
     | 
    
         
            +
                  when :optional_parameter_node
         
     | 
| 
      
 339 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
         
     | 
| 
      
 340 
     | 
    
         
            +
                  when :or_node
         
     | 
| 
      
 341 
     | 
    
         
            +
                    [NodeField.new(:left), NodeField.new(:right), LocationField.new(:operator_loc)]
         
     | 
| 
      
 342 
     | 
    
         
            +
                  when :parameters_node
         
     | 
| 
      
 343 
     | 
    
         
            +
                    [NodeListField.new(:requireds), NodeListField.new(:optionals), OptionalNodeField.new(:rest), NodeListField.new(:posts), NodeListField.new(:keywords), OptionalNodeField.new(:keyword_rest), OptionalNodeField.new(:block)]
         
     | 
| 
      
 344 
     | 
    
         
            +
                  when :parentheses_node
         
     | 
| 
      
 345 
     | 
    
         
            +
                    [OptionalNodeField.new(:body), LocationField.new(:opening_loc), LocationField.new(:closing_loc)]
         
     | 
| 
      
 346 
     | 
    
         
            +
                  when :pinned_expression_node
         
     | 
| 
      
 347 
     | 
    
         
            +
                    [NodeField.new(:expression), LocationField.new(:operator_loc), LocationField.new(:lparen_loc), LocationField.new(:rparen_loc)]
         
     | 
| 
      
 348 
     | 
    
         
            +
                  when :pinned_variable_node
         
     | 
| 
      
 349 
     | 
    
         
            +
                    [NodeField.new(:variable), LocationField.new(:operator_loc)]
         
     | 
| 
      
 350 
     | 
    
         
            +
                  when :post_execution_node
         
     | 
| 
      
 351 
     | 
    
         
            +
                    [OptionalNodeField.new(:statements), LocationField.new(:keyword_loc), LocationField.new(:opening_loc), LocationField.new(:closing_loc)]
         
     | 
| 
      
 352 
     | 
    
         
            +
                  when :pre_execution_node
         
     | 
| 
      
 353 
     | 
    
         
            +
                    [OptionalNodeField.new(:statements), LocationField.new(:keyword_loc), LocationField.new(:opening_loc), LocationField.new(:closing_loc)]
         
     | 
| 
      
 354 
     | 
    
         
            +
                  when :program_node
         
     | 
| 
      
 355 
     | 
    
         
            +
                    [ConstantListField.new(:locals), NodeField.new(:statements)]
         
     | 
| 
      
 356 
     | 
    
         
            +
                  when :range_node
         
     | 
| 
      
 357 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:exclude_end?]), OptionalNodeField.new(:left), OptionalNodeField.new(:right), LocationField.new(:operator_loc)]
         
     | 
| 
      
 358 
     | 
    
         
            +
                  when :rational_node
         
     | 
| 
      
 359 
     | 
    
         
            +
                    [NodeField.new(:numeric)]
         
     | 
| 
      
 360 
     | 
    
         
            +
                  when :redo_node
         
     | 
| 
      
 361 
     | 
    
         
            +
                    []
         
     | 
| 
      
 362 
     | 
    
         
            +
                  when :regular_expression_node
         
     | 
| 
      
 363 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:ignore_case?, :extended?, :multi_line?, :once?, :euc_jp?, :ascii_8bit?, :windows_31j?, :utf_8?, :forced_utf8_encoding?, :forced_binary_encoding?, :forced_us_ascii_encoding?]), LocationField.new(:opening_loc), LocationField.new(:content_loc), LocationField.new(:closing_loc), StringField.new(:unescaped)]
         
     | 
| 
      
 364 
     | 
    
         
            +
                  when :required_keyword_parameter_node
         
     | 
| 
      
 365 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name), LocationField.new(:name_loc)]
         
     | 
| 
      
 366 
     | 
    
         
            +
                  when :required_parameter_node
         
     | 
| 
      
 367 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name)]
         
     | 
| 
      
 368 
     | 
    
         
            +
                  when :rescue_modifier_node
         
     | 
| 
      
 369 
     | 
    
         
            +
                    [NodeField.new(:expression), LocationField.new(:keyword_loc), NodeField.new(:rescue_expression)]
         
     | 
| 
      
 370 
     | 
    
         
            +
                  when :rescue_node
         
     | 
| 
      
 371 
     | 
    
         
            +
                    [LocationField.new(:keyword_loc), NodeListField.new(:exceptions), OptionalLocationField.new(:operator_loc), OptionalNodeField.new(:reference), OptionalNodeField.new(:statements), OptionalNodeField.new(:consequent)]
         
     | 
| 
      
 372 
     | 
    
         
            +
                  when :rest_parameter_node
         
     | 
| 
      
 373 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:repeated_parameter?]), OptionalConstantField.new(:name), OptionalLocationField.new(:name_loc), LocationField.new(:operator_loc)]
         
     | 
| 
      
 374 
     | 
    
         
            +
                  when :retry_node
         
     | 
| 
      
 375 
     | 
    
         
            +
                    []
         
     | 
| 
      
 376 
     | 
    
         
            +
                  when :return_node
         
     | 
| 
      
 377 
     | 
    
         
            +
                    [LocationField.new(:keyword_loc), OptionalNodeField.new(:arguments)]
         
     | 
| 
      
 378 
     | 
    
         
            +
                  when :self_node
         
     | 
| 
      
 379 
     | 
    
         
            +
                    []
         
     | 
| 
      
 380 
     | 
    
         
            +
                  when :shareable_constant_node
         
     | 
| 
      
 381 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:literal?, :experimental_everything?, :experimental_copy?]), NodeField.new(:write)]
         
     | 
| 
      
 382 
     | 
    
         
            +
                  when :singleton_class_node
         
     | 
| 
      
 383 
     | 
    
         
            +
                    [ConstantListField.new(:locals), LocationField.new(:class_keyword_loc), LocationField.new(:operator_loc), NodeField.new(:expression), OptionalNodeField.new(:body), LocationField.new(:end_keyword_loc)]
         
     | 
| 
      
 384 
     | 
    
         
            +
                  when :source_encoding_node
         
     | 
| 
      
 385 
     | 
    
         
            +
                    []
         
     | 
| 
      
 386 
     | 
    
         
            +
                  when :source_file_node
         
     | 
| 
      
 387 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:forced_utf8_encoding?, :forced_binary_encoding?, :frozen?, :mutable?]), StringField.new(:filepath)]
         
     | 
| 
      
 388 
     | 
    
         
            +
                  when :source_line_node
         
     | 
| 
      
 389 
     | 
    
         
            +
                    []
         
     | 
| 
      
 390 
     | 
    
         
            +
                  when :splat_node
         
     | 
| 
      
 391 
     | 
    
         
            +
                    [LocationField.new(:operator_loc), OptionalNodeField.new(:expression)]
         
     | 
| 
      
 392 
     | 
    
         
            +
                  when :statements_node
         
     | 
| 
      
 393 
     | 
    
         
            +
                    [NodeListField.new(:body)]
         
     | 
| 
      
 394 
     | 
    
         
            +
                  when :string_node
         
     | 
| 
      
 395 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:forced_utf8_encoding?, :forced_binary_encoding?, :frozen?, :mutable?]), OptionalLocationField.new(:opening_loc), LocationField.new(:content_loc), OptionalLocationField.new(:closing_loc), StringField.new(:unescaped)]
         
     | 
| 
      
 396 
     | 
    
         
            +
                  when :super_node
         
     | 
| 
      
 397 
     | 
    
         
            +
                    [LocationField.new(:keyword_loc), OptionalLocationField.new(:lparen_loc), OptionalNodeField.new(:arguments), OptionalLocationField.new(:rparen_loc), OptionalNodeField.new(:block)]
         
     | 
| 
      
 398 
     | 
    
         
            +
                  when :symbol_node
         
     | 
| 
      
 399 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:forced_utf8_encoding?, :forced_binary_encoding?, :forced_us_ascii_encoding?]), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:value_loc), OptionalLocationField.new(:closing_loc), StringField.new(:unescaped)]
         
     | 
| 
      
 400 
     | 
    
         
            +
                  when :true_node
         
     | 
| 
      
 401 
     | 
    
         
            +
                    []
         
     | 
| 
      
 402 
     | 
    
         
            +
                  when :undef_node
         
     | 
| 
      
 403 
     | 
    
         
            +
                    [NodeListField.new(:names), LocationField.new(:keyword_loc)]
         
     | 
| 
      
 404 
     | 
    
         
            +
                  when :unless_node
         
     | 
| 
      
 405 
     | 
    
         
            +
                    [LocationField.new(:keyword_loc), NodeField.new(:predicate), OptionalLocationField.new(:then_keyword_loc), OptionalNodeField.new(:statements), OptionalNodeField.new(:consequent), OptionalLocationField.new(:end_keyword_loc)]
         
     | 
| 
      
 406 
     | 
    
         
            +
                  when :until_node
         
     | 
| 
      
 407 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:begin_modifier?]), LocationField.new(:keyword_loc), OptionalLocationField.new(:closing_loc), NodeField.new(:predicate), OptionalNodeField.new(:statements)]
         
     | 
| 
      
 408 
     | 
    
         
            +
                  when :when_node
         
     | 
| 
      
 409 
     | 
    
         
            +
                    [LocationField.new(:keyword_loc), NodeListField.new(:conditions), OptionalLocationField.new(:then_keyword_loc), OptionalNodeField.new(:statements)]
         
     | 
| 
      
 410 
     | 
    
         
            +
                  when :while_node
         
     | 
| 
      
 411 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:begin_modifier?]), LocationField.new(:keyword_loc), OptionalLocationField.new(:closing_loc), NodeField.new(:predicate), OptionalNodeField.new(:statements)]
         
     | 
| 
      
 412 
     | 
    
         
            +
                  when :x_string_node
         
     | 
| 
      
 413 
     | 
    
         
            +
                    [FlagsField.new(:flags, [:forced_utf8_encoding?, :forced_binary_encoding?]), LocationField.new(:opening_loc), LocationField.new(:content_loc), LocationField.new(:closing_loc), StringField.new(:unescaped)]
         
     | 
| 
      
 414 
     | 
    
         
            +
                  when :yield_node
         
     | 
| 
      
 415 
     | 
    
         
            +
                    [LocationField.new(:keyword_loc), OptionalLocationField.new(:lparen_loc), OptionalNodeField.new(:arguments), OptionalLocationField.new(:rparen_loc)]
         
     | 
| 
      
 416 
     | 
    
         
            +
                  else
         
     | 
| 
      
 417 
     | 
    
         
            +
                    raise "Unknown node type: #{node.type.inspect}"
         
     | 
| 
      
 418 
     | 
    
         
            +
                  end
         
     | 
| 
      
 419 
     | 
    
         
            +
                end
         
     | 
| 
      
 420 
     | 
    
         
            +
              end
         
     | 
| 
      
 421 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/prism/serialize.rb
    CHANGED
    
    | 
         @@ -18,7 +18,7 @@ module Prism 
     | 
|
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                # The minor version of prism that we are expecting to find in the serialized
         
     | 
| 
       20 
20 
     | 
    
         
             
                # strings.
         
     | 
| 
       21 
     | 
    
         
            -
                MINOR_VERSION =  
     | 
| 
      
 21 
     | 
    
         
            +
                MINOR_VERSION = 26
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                # The patch version of prism that we are expecting to find in the serialized
         
     | 
| 
       24 
24 
     | 
    
         
             
                # strings.
         
     | 
| 
         @@ -186,7 +186,6 @@ module Prism 
     | 
|
| 
       186 
186 
     | 
    
         
             
                    :def_endless,
         
     | 
| 
       187 
187 
     | 
    
         
             
                    :def_endless_setter,
         
     | 
| 
       188 
188 
     | 
    
         
             
                    :def_name,
         
     | 
| 
       189 
     | 
    
         
            -
                    :def_name_after_receiver,
         
     | 
| 
       190 
189 
     | 
    
         
             
                    :def_params_term,
         
     | 
| 
       191 
190 
     | 
    
         
             
                    :def_params_term_paren,
         
     | 
| 
       192 
191 
     | 
    
         
             
                    :def_receiver,
         
     | 
| 
         @@ -223,6 +222,7 @@ module Prism 
     | 
|
| 
       223 
222 
     | 
    
         
             
                    :expect_expression_after_star,
         
     | 
| 
       224 
223 
     | 
    
         
             
                    :expect_ident_req_parameter,
         
     | 
| 
       225 
224 
     | 
    
         
             
                    :expect_lparen_req_parameter,
         
     | 
| 
      
 225 
     | 
    
         
            +
                    :expect_message,
         
     | 
| 
       226 
226 
     | 
    
         
             
                    :expect_rbracket,
         
     | 
| 
       227 
227 
     | 
    
         
             
                    :expect_rparen,
         
     | 
| 
       228 
228 
     | 
    
         
             
                    :expect_rparen_after_multi,
         
     | 
| 
         @@ -230,6 +230,14 @@ module Prism 
     | 
|
| 
       230 
230 
     | 
    
         
             
                    :expect_string_content,
         
     | 
| 
       231 
231 
     | 
    
         
             
                    :expect_when_delimiter,
         
     | 
| 
       232 
232 
     | 
    
         
             
                    :expression_bare_hash,
         
     | 
| 
      
 233 
     | 
    
         
            +
                    :expression_not_writable,
         
     | 
| 
      
 234 
     | 
    
         
            +
                    :expression_not_writable_encoding,
         
     | 
| 
      
 235 
     | 
    
         
            +
                    :expression_not_writable_false,
         
     | 
| 
      
 236 
     | 
    
         
            +
                    :expression_not_writable_file,
         
     | 
| 
      
 237 
     | 
    
         
            +
                    :expression_not_writable_line,
         
     | 
| 
      
 238 
     | 
    
         
            +
                    :expression_not_writable_nil,
         
     | 
| 
      
 239 
     | 
    
         
            +
                    :expression_not_writable_self,
         
     | 
| 
      
 240 
     | 
    
         
            +
                    :expression_not_writable_true,
         
     | 
| 
       233 
241 
     | 
    
         
             
                    :float_parse,
         
     | 
| 
       234 
242 
     | 
    
         
             
                    :for_collection,
         
     | 
| 
       235 
243 
     | 
    
         
             
                    :for_in,
         
     | 
| 
         @@ -361,6 +369,7 @@ module Prism 
     | 
|
| 
       361 
369 
     | 
    
         
             
                    :ternary_expression_true,
         
     | 
| 
       362 
370 
     | 
    
         
             
                    :unary_receiver,
         
     | 
| 
       363 
371 
     | 
    
         
             
                    :undef_argument,
         
     | 
| 
      
 372 
     | 
    
         
            +
                    :unexpected_block_argument,
         
     | 
| 
       364 
373 
     | 
    
         
             
                    :unexpected_token_close_context,
         
     | 
| 
       365 
374 
     | 
    
         
             
                    :unexpected_token_ignore,
         
     | 
| 
       366 
375 
     | 
    
         
             
                    :until_term,
         
     | 
| 
         @@ -394,7 +403,9 @@ module Prism 
     | 
|
| 
       394 
403 
     | 
    
         
             
                    :literal_in_condition_verbose,
         
     | 
| 
       395 
404 
     | 
    
         
             
                    :shebang_carriage_return,
         
     | 
| 
       396 
405 
     | 
    
         
             
                    :unexpected_carriage_return,
         
     | 
| 
      
 406 
     | 
    
         
            +
                    :unreachable_statement,
         
     | 
| 
       397 
407 
     | 
    
         
             
                    :unused_local_variable,
         
     | 
| 
      
 408 
     | 
    
         
            +
                    :void_statement,
         
     | 
| 
       398 
409 
     | 
    
         
             
                  ].freeze
         
     | 
| 
       399 
410 
     | 
    
         | 
| 
       400 
411 
     | 
    
         
             
                  private_constant :DIAGNOSTIC_TYPES
         
     | 
| 
         @@ -947,8 +947,35 @@ module Prism 
     | 
|
| 
       947 
947 
     | 
    
         
             
                    def visit_interpolated_string_node(node)
         
     | 
| 
       948 
948 
     | 
    
         
             
                      if node.heredoc?
         
     | 
| 
       949 
949 
     | 
    
         
             
                        children, closing = visit_heredoc(node)
         
     | 
| 
      
 950 
     | 
    
         
            +
                        opening = token(node.opening_loc)
         
     | 
| 
      
 951 
     | 
    
         
            +
             
     | 
| 
      
 952 
     | 
    
         
            +
                        start_offset = node.opening_loc.end_offset + 1
         
     | 
| 
      
 953 
     | 
    
         
            +
                        end_offset = node.parts.first.location.start_offset
         
     | 
| 
      
 954 
     | 
    
         
            +
             
     | 
| 
      
 955 
     | 
    
         
            +
                        # In the below case, the offsets should be the same:
         
     | 
| 
      
 956 
     | 
    
         
            +
                        #
         
     | 
| 
      
 957 
     | 
    
         
            +
                        # <<~HEREDOC
         
     | 
| 
      
 958 
     | 
    
         
            +
                        #   a #{b}
         
     | 
| 
      
 959 
     | 
    
         
            +
                        # HEREDOC
         
     | 
| 
      
 960 
     | 
    
         
            +
                        #
         
     | 
| 
      
 961 
     | 
    
         
            +
                        # But in this case, the end_offset would be greater than the start_offset:
         
     | 
| 
      
 962 
     | 
    
         
            +
                        #
         
     | 
| 
      
 963 
     | 
    
         
            +
                        # <<~HEREDOC
         
     | 
| 
      
 964 
     | 
    
         
            +
                        #   #{b}
         
     | 
| 
      
 965 
     | 
    
         
            +
                        # HEREDOC
         
     | 
| 
      
 966 
     | 
    
         
            +
                        #
         
     | 
| 
      
 967 
     | 
    
         
            +
                        # So we need to make sure the result node's heredoc range is correct, without updating the children
         
     | 
| 
      
 968 
     | 
    
         
            +
                        result = if start_offset < end_offset
         
     | 
| 
      
 969 
     | 
    
         
            +
                          # We need to add a padding string to ensure that the heredoc has correct range for its body
         
     | 
| 
      
 970 
     | 
    
         
            +
                          padding_string_node = builder.string_internal(["", srange_offsets(start_offset, end_offset)])
         
     | 
| 
      
 971 
     | 
    
         
            +
                          node_with_correct_location = builder.string_compose(opening, [padding_string_node, *children], closing)
         
     | 
| 
      
 972 
     | 
    
         
            +
                          # But the padding string should not be included in the final AST, so we need to update the result's children
         
     | 
| 
      
 973 
     | 
    
         
            +
                          node_with_correct_location.updated(:dstr, children)
         
     | 
| 
      
 974 
     | 
    
         
            +
                        else
         
     | 
| 
      
 975 
     | 
    
         
            +
                          builder.string_compose(opening, children, closing)
         
     | 
| 
      
 976 
     | 
    
         
            +
                        end
         
     | 
| 
       950 
977 
     | 
    
         | 
| 
       951 
     | 
    
         
            -
                        return  
     | 
| 
      
 978 
     | 
    
         
            +
                        return result
         
     | 
| 
       952 
979 
     | 
    
         
             
                      end
         
     | 
| 
       953 
980 
     | 
    
         | 
| 
       954 
981 
     | 
    
         
             
                      parts = if node.parts.one? { |part| part.type == :string_node }
         
     | 
| 
         @@ -1508,19 +1535,29 @@ module Prism 
     | 
|
| 
       1508 
1535 
     | 
    
         
             
                      elsif node.opening == "?"
         
     | 
| 
       1509 
1536 
     | 
    
         
             
                        builder.character([node.unescaped, srange(node.location)])
         
     | 
| 
       1510 
1537 
     | 
    
         
             
                      else
         
     | 
| 
       1511 
     | 
    
         
            -
                         
     | 
| 
       1512 
     | 
    
         
            -
             
     | 
| 
       1513 
     | 
    
         
            -
                        else
         
     | 
| 
       1514 
     | 
    
         
            -
                          start_offset = node.content_loc.start_offset
         
     | 
| 
      
 1538 
     | 
    
         
            +
                        content_lines = node.content.lines
         
     | 
| 
      
 1539 
     | 
    
         
            +
                        unescaped_lines = node.unescaped.lines
         
     | 
| 
       1515 
1540 
     | 
    
         | 
| 
       1516 
     | 
    
         
            -
             
     | 
| 
       1517 
     | 
    
         
            -
             
     | 
| 
       1518 
     | 
    
         
            -
                             
     | 
| 
       1519 
     | 
    
         
            -
             
     | 
| 
      
 1541 
     | 
    
         
            +
                        parts =
         
     | 
| 
      
 1542 
     | 
    
         
            +
                          if content_lines.length <= 1 || unescaped_lines.length <= 1
         
     | 
| 
      
 1543 
     | 
    
         
            +
                            [builder.string_internal([node.unescaped, srange(node.content_loc)])]
         
     | 
| 
      
 1544 
     | 
    
         
            +
                          elsif content_lines.length != unescaped_lines.length
         
     | 
| 
      
 1545 
     | 
    
         
            +
                            # This occurs when we have line continuations in the string. We
         
     | 
| 
      
 1546 
     | 
    
         
            +
                            # need to come back and fix this, but for now this stops the
         
     | 
| 
      
 1547 
     | 
    
         
            +
                            # code from breaking when we encounter it because of trying to
         
     | 
| 
      
 1548 
     | 
    
         
            +
                            # transpose arrays of different lengths.
         
     | 
| 
      
 1549 
     | 
    
         
            +
                            [builder.string_internal([node.unescaped, srange(node.content_loc)])]
         
     | 
| 
      
 1550 
     | 
    
         
            +
                          else
         
     | 
| 
      
 1551 
     | 
    
         
            +
                            start_offset = node.content_loc.start_offset
         
     | 
| 
       1520 
1552 
     | 
    
         | 
| 
       1521 
     | 
    
         
            -
                             
     | 
| 
      
 1553 
     | 
    
         
            +
                            [content_lines, unescaped_lines].transpose.map do |content_line, unescaped_line|
         
     | 
| 
      
 1554 
     | 
    
         
            +
                              end_offset = start_offset + content_line.length
         
     | 
| 
      
 1555 
     | 
    
         
            +
                              offsets = srange_offsets(start_offset, end_offset)
         
     | 
| 
      
 1556 
     | 
    
         
            +
                              start_offset = end_offset
         
     | 
| 
      
 1557 
     | 
    
         
            +
             
     | 
| 
      
 1558 
     | 
    
         
            +
                              builder.string_internal([unescaped_line, offsets])
         
     | 
| 
      
 1559 
     | 
    
         
            +
                            end
         
     | 
| 
       1522 
1560 
     | 
    
         
             
                          end
         
     | 
| 
       1523 
     | 
    
         
            -
                        end
         
     | 
| 
       1524 
1561 
     | 
    
         | 
| 
       1525 
1562 
     | 
    
         
             
                        builder.string_compose(
         
     | 
| 
       1526 
1563 
     | 
    
         
             
                          token(node.opening_loc),
         
     | 
    
        data/lib/prism.rb
    CHANGED
    
    | 
         @@ -24,6 +24,7 @@ module Prism 
     | 
|
| 
       24 
24 
     | 
    
         
             
              autoload :NodeInspector, "prism/node_inspector"
         
     | 
| 
       25 
25 
     | 
    
         
             
              autoload :Pack, "prism/pack"
         
     | 
| 
       26 
26 
     | 
    
         
             
              autoload :Pattern, "prism/pattern"
         
     | 
| 
      
 27 
     | 
    
         
            +
              autoload :Reflection, "prism/reflection"
         
     | 
| 
       27 
28 
     | 
    
         
             
              autoload :Serialize, "prism/serialize"
         
     | 
| 
       28 
29 
     | 
    
         
             
              autoload :Translation, "prism/translation"
         
     | 
| 
       29 
30 
     | 
    
         
             
              autoload :Visitor, "prism/visitor"
         
     | 
| 
         @@ -64,22 +65,6 @@ module Prism 
     | 
|
| 
       64 
65 
     | 
    
         
             
              def self.load(source, serialized)
         
     | 
| 
       65 
66 
     | 
    
         
             
                Serialize.load(source, serialized)
         
     | 
| 
       66 
67 
     | 
    
         
             
              end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
              # :call-seq:
         
     | 
| 
       69 
     | 
    
         
            -
              #   Prism::parse_failure?(source, **options) -> bool
         
     | 
| 
       70 
     | 
    
         
            -
              #
         
     | 
| 
       71 
     | 
    
         
            -
              # Returns true if the source parses with errors.
         
     | 
| 
       72 
     | 
    
         
            -
              def self.parse_failure?(source, **options)
         
     | 
| 
       73 
     | 
    
         
            -
                !parse_success?(source, **options)
         
     | 
| 
       74 
     | 
    
         
            -
              end
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
              # :call-seq:
         
     | 
| 
       77 
     | 
    
         
            -
              #   Prism::parse_file_failure?(filepath, **options) -> bool
         
     | 
| 
       78 
     | 
    
         
            -
              #
         
     | 
| 
       79 
     | 
    
         
            -
              # Returns true if the file at filepath parses with errors.
         
     | 
| 
       80 
     | 
    
         
            -
              def self.parse_file_failure?(filepath, **options)
         
     | 
| 
       81 
     | 
    
         
            -
                !parse_file_success?(filepath, **options)
         
     | 
| 
       82 
     | 
    
         
            -
              end
         
     | 
| 
       83 
68 
     | 
    
         
             
            end
         
     | 
| 
       84 
69 
     | 
    
         | 
| 
       85 
70 
     | 
    
         
             
            require_relative "prism/node"
         
     | 
    
        data/prism.gemspec
    CHANGED
    
    | 
         @@ -2,7 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            Gem::Specification.new do |spec|
         
     | 
| 
       4 
4 
     | 
    
         
             
              spec.name = "prism"
         
     | 
| 
       5 
     | 
    
         
            -
              spec.version = "0. 
     | 
| 
      
 5 
     | 
    
         
            +
              spec.version = "0.26.0"
         
     | 
| 
       6 
6 
     | 
    
         
             
              spec.authors = ["Shopify"]
         
     | 
| 
       7 
7 
     | 
    
         
             
              spec.email = ["ruby@shopify.com"]
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
         @@ -63,7 +63,6 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       63 
63 
     | 
    
         
             
                "include/prism/util/pm_list.h",
         
     | 
| 
       64 
64 
     | 
    
         
             
                "include/prism/util/pm_memchr.h",
         
     | 
| 
       65 
65 
     | 
    
         
             
                "include/prism/util/pm_newline_list.h",
         
     | 
| 
       66 
     | 
    
         
            -
                "include/prism/util/pm_state_stack.h",
         
     | 
| 
       67 
66 
     | 
    
         
             
                "include/prism/util/pm_strncasecmp.h",
         
     | 
| 
       68 
67 
     | 
    
         
             
                "include/prism/util/pm_string.h",
         
     | 
| 
       69 
68 
     | 
    
         
             
                "include/prism/util/pm_string_list.h",
         
     | 
| 
         @@ -88,6 +87,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       88 
87 
     | 
    
         
             
                "lib/prism/parse_result/newlines.rb",
         
     | 
| 
       89 
88 
     | 
    
         
             
                "lib/prism/pattern.rb",
         
     | 
| 
       90 
89 
     | 
    
         
             
                "lib/prism/polyfill/string.rb",
         
     | 
| 
      
 90 
     | 
    
         
            +
                "lib/prism/reflection.rb",
         
     | 
| 
       91 
91 
     | 
    
         
             
                "lib/prism/serialize.rb",
         
     | 
| 
       92 
92 
     | 
    
         
             
                "lib/prism/translation.rb",
         
     | 
| 
       93 
93 
     | 
    
         
             
                "lib/prism/translation/parser.rb",
         
     | 
| 
         @@ -117,7 +117,6 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       117 
117 
     | 
    
         
             
                "src/util/pm_list.c",
         
     | 
| 
       118 
118 
     | 
    
         
             
                "src/util/pm_memchr.c",
         
     | 
| 
       119 
119 
     | 
    
         
             
                "src/util/pm_newline_list.c",
         
     | 
| 
       120 
     | 
    
         
            -
                "src/util/pm_state_stack.c",
         
     | 
| 
       121 
120 
     | 
    
         
             
                "src/util/pm_string.c",
         
     | 
| 
       122 
121 
     | 
    
         
             
                "src/util/pm_string_list.c",
         
     | 
| 
       123 
122 
     | 
    
         
             
                "src/util/pm_strncasecmp.c",
         
     | 
| 
         @@ -136,6 +135,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       136 
135 
     | 
    
         
             
                "sig/prism/pack.rbs",
         
     | 
| 
       137 
136 
     | 
    
         
             
                "sig/prism/parse_result.rbs",
         
     | 
| 
       138 
137 
     | 
    
         
             
                "sig/prism/pattern.rbs",
         
     | 
| 
      
 138 
     | 
    
         
            +
                "sig/prism/reflection.rbs",
         
     | 
| 
       139 
139 
     | 
    
         
             
                "sig/prism/serialize.rbs",
         
     | 
| 
       140 
140 
     | 
    
         
             
                "sig/prism/visitor.rbs",
         
     | 
| 
       141 
141 
     | 
    
         
             
                "rbi/prism.rbi",
         
     | 
| 
         @@ -145,7 +145,11 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       145 
145 
     | 
    
         
             
                "rbi/prism/node_ext.rbi",
         
     | 
| 
       146 
146 
     | 
    
         
             
                "rbi/prism/node.rbi",
         
     | 
| 
       147 
147 
     | 
    
         
             
                "rbi/prism/parse_result.rbi",
         
     | 
| 
      
 148 
     | 
    
         
            +
                "rbi/prism/reflection.rbi",
         
     | 
| 
      
 149 
     | 
    
         
            +
                "rbi/prism/translation/parser.rbi",
         
     | 
| 
       148 
150 
     | 
    
         
             
                "rbi/prism/translation/parser/compiler.rbi",
         
     | 
| 
      
 151 
     | 
    
         
            +
                "rbi/prism/translation/parser33.rbi",
         
     | 
| 
      
 152 
     | 
    
         
            +
                "rbi/prism/translation/parser34.rbi",
         
     | 
| 
       149 
153 
     | 
    
         
             
                "rbi/prism/translation/ripper.rbi",
         
     | 
| 
       150 
154 
     | 
    
         
             
                "rbi/prism/translation/ripper/ripper_compiler.rbi",
         
     | 
| 
       151 
155 
     | 
    
         
             
                "rbi/prism/translation/ruby_parser.rbi",
         
     |