ed-precompiled_prism 1.5.2-arm64-darwin

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.
Files changed (159) hide show
  1. checksums.yaml +7 -0
  2. data/BSDmakefile +58 -0
  3. data/CHANGELOG.md +723 -0
  4. data/CODE_OF_CONDUCT.md +76 -0
  5. data/CONTRIBUTING.md +58 -0
  6. data/LICENSE.md +7 -0
  7. data/Makefile +110 -0
  8. data/README.md +143 -0
  9. data/config.yml +4714 -0
  10. data/docs/build_system.md +119 -0
  11. data/docs/configuration.md +68 -0
  12. data/docs/cruby_compilation.md +27 -0
  13. data/docs/design.md +53 -0
  14. data/docs/encoding.md +121 -0
  15. data/docs/fuzzing.md +88 -0
  16. data/docs/heredocs.md +36 -0
  17. data/docs/javascript.md +118 -0
  18. data/docs/local_variable_depth.md +229 -0
  19. data/docs/mapping.md +117 -0
  20. data/docs/parser_translation.md +24 -0
  21. data/docs/parsing_rules.md +22 -0
  22. data/docs/releasing.md +98 -0
  23. data/docs/relocation.md +34 -0
  24. data/docs/ripper_translation.md +72 -0
  25. data/docs/ruby_api.md +44 -0
  26. data/docs/ruby_parser_translation.md +19 -0
  27. data/docs/serialization.md +233 -0
  28. data/docs/testing.md +55 -0
  29. data/ext/prism/api_node.c +6941 -0
  30. data/ext/prism/api_pack.c +276 -0
  31. data/ext/prism/extconf.rb +127 -0
  32. data/ext/prism/extension.c +1419 -0
  33. data/ext/prism/extension.h +19 -0
  34. data/include/prism/ast.h +8220 -0
  35. data/include/prism/defines.h +260 -0
  36. data/include/prism/diagnostic.h +456 -0
  37. data/include/prism/encoding.h +283 -0
  38. data/include/prism/node.h +129 -0
  39. data/include/prism/options.h +482 -0
  40. data/include/prism/pack.h +163 -0
  41. data/include/prism/parser.h +933 -0
  42. data/include/prism/prettyprint.h +34 -0
  43. data/include/prism/regexp.h +43 -0
  44. data/include/prism/static_literals.h +121 -0
  45. data/include/prism/util/pm_buffer.h +236 -0
  46. data/include/prism/util/pm_char.h +204 -0
  47. data/include/prism/util/pm_constant_pool.h +218 -0
  48. data/include/prism/util/pm_integer.h +130 -0
  49. data/include/prism/util/pm_list.h +103 -0
  50. data/include/prism/util/pm_memchr.h +29 -0
  51. data/include/prism/util/pm_newline_list.h +113 -0
  52. data/include/prism/util/pm_string.h +200 -0
  53. data/include/prism/util/pm_strncasecmp.h +32 -0
  54. data/include/prism/util/pm_strpbrk.h +46 -0
  55. data/include/prism/version.h +29 -0
  56. data/include/prism.h +408 -0
  57. data/lib/prism/3.0/prism.bundle +0 -0
  58. data/lib/prism/3.1/prism.bundle +0 -0
  59. data/lib/prism/3.2/prism.bundle +0 -0
  60. data/lib/prism/3.3/prism.bundle +0 -0
  61. data/lib/prism/3.4/prism.bundle +0 -0
  62. data/lib/prism/compiler.rb +801 -0
  63. data/lib/prism/desugar_compiler.rb +392 -0
  64. data/lib/prism/dispatcher.rb +2210 -0
  65. data/lib/prism/dot_visitor.rb +4762 -0
  66. data/lib/prism/dsl.rb +1003 -0
  67. data/lib/prism/ffi.rb +570 -0
  68. data/lib/prism/inspect_visitor.rb +2392 -0
  69. data/lib/prism/lex_compat.rb +928 -0
  70. data/lib/prism/mutation_compiler.rb +772 -0
  71. data/lib/prism/node.rb +18816 -0
  72. data/lib/prism/node_ext.rb +511 -0
  73. data/lib/prism/pack.rb +230 -0
  74. data/lib/prism/parse_result/comments.rb +188 -0
  75. data/lib/prism/parse_result/errors.rb +66 -0
  76. data/lib/prism/parse_result/newlines.rb +155 -0
  77. data/lib/prism/parse_result.rb +911 -0
  78. data/lib/prism/pattern.rb +269 -0
  79. data/lib/prism/polyfill/append_as_bytes.rb +15 -0
  80. data/lib/prism/polyfill/byteindex.rb +13 -0
  81. data/lib/prism/polyfill/scan_byte.rb +14 -0
  82. data/lib/prism/polyfill/unpack1.rb +14 -0
  83. data/lib/prism/polyfill/warn.rb +36 -0
  84. data/lib/prism/reflection.rb +416 -0
  85. data/lib/prism/relocation.rb +505 -0
  86. data/lib/prism/serialize.rb +2398 -0
  87. data/lib/prism/string_query.rb +31 -0
  88. data/lib/prism/translation/parser/builder.rb +62 -0
  89. data/lib/prism/translation/parser/compiler.rb +2234 -0
  90. data/lib/prism/translation/parser/lexer.rb +820 -0
  91. data/lib/prism/translation/parser.rb +374 -0
  92. data/lib/prism/translation/parser33.rb +13 -0
  93. data/lib/prism/translation/parser34.rb +13 -0
  94. data/lib/prism/translation/parser35.rb +13 -0
  95. data/lib/prism/translation/parser_current.rb +24 -0
  96. data/lib/prism/translation/ripper/sexp.rb +126 -0
  97. data/lib/prism/translation/ripper/shim.rb +5 -0
  98. data/lib/prism/translation/ripper.rb +3474 -0
  99. data/lib/prism/translation/ruby_parser.rb +1929 -0
  100. data/lib/prism/translation.rb +16 -0
  101. data/lib/prism/visitor.rb +813 -0
  102. data/lib/prism.rb +97 -0
  103. data/prism.gemspec +174 -0
  104. data/rbi/prism/compiler.rbi +12 -0
  105. data/rbi/prism/dsl.rbi +524 -0
  106. data/rbi/prism/inspect_visitor.rbi +12 -0
  107. data/rbi/prism/node.rbi +8734 -0
  108. data/rbi/prism/node_ext.rbi +107 -0
  109. data/rbi/prism/parse_result.rbi +404 -0
  110. data/rbi/prism/reflection.rbi +58 -0
  111. data/rbi/prism/string_query.rbi +12 -0
  112. data/rbi/prism/translation/parser.rbi +11 -0
  113. data/rbi/prism/translation/parser33.rbi +6 -0
  114. data/rbi/prism/translation/parser34.rbi +6 -0
  115. data/rbi/prism/translation/parser35.rbi +6 -0
  116. data/rbi/prism/translation/ripper.rbi +15 -0
  117. data/rbi/prism/visitor.rbi +473 -0
  118. data/rbi/prism.rbi +66 -0
  119. data/sig/prism/compiler.rbs +9 -0
  120. data/sig/prism/dispatcher.rbs +19 -0
  121. data/sig/prism/dot_visitor.rbs +6 -0
  122. data/sig/prism/dsl.rbs +351 -0
  123. data/sig/prism/inspect_visitor.rbs +22 -0
  124. data/sig/prism/lex_compat.rbs +10 -0
  125. data/sig/prism/mutation_compiler.rbs +159 -0
  126. data/sig/prism/node.rbs +4028 -0
  127. data/sig/prism/node_ext.rbs +149 -0
  128. data/sig/prism/pack.rbs +43 -0
  129. data/sig/prism/parse_result/comments.rbs +38 -0
  130. data/sig/prism/parse_result.rbs +196 -0
  131. data/sig/prism/pattern.rbs +13 -0
  132. data/sig/prism/reflection.rbs +50 -0
  133. data/sig/prism/relocation.rbs +185 -0
  134. data/sig/prism/serialize.rbs +8 -0
  135. data/sig/prism/string_query.rbs +11 -0
  136. data/sig/prism/visitor.rbs +169 -0
  137. data/sig/prism.rbs +254 -0
  138. data/src/diagnostic.c +850 -0
  139. data/src/encoding.c +5235 -0
  140. data/src/node.c +8676 -0
  141. data/src/options.c +328 -0
  142. data/src/pack.c +509 -0
  143. data/src/prettyprint.c +8941 -0
  144. data/src/prism.c +23361 -0
  145. data/src/regexp.c +790 -0
  146. data/src/serialize.c +2268 -0
  147. data/src/static_literals.c +617 -0
  148. data/src/token_type.c +703 -0
  149. data/src/util/pm_buffer.c +357 -0
  150. data/src/util/pm_char.c +318 -0
  151. data/src/util/pm_constant_pool.c +342 -0
  152. data/src/util/pm_integer.c +670 -0
  153. data/src/util/pm_list.c +49 -0
  154. data/src/util/pm_memchr.c +35 -0
  155. data/src/util/pm_newline_list.c +125 -0
  156. data/src/util/pm_string.c +381 -0
  157. data/src/util/pm_strncasecmp.c +36 -0
  158. data/src/util/pm_strpbrk.c +206 -0
  159. metadata +202 -0
@@ -0,0 +1,416 @@
1
+ # frozen_string_literal: true
2
+ # :markup: markdown
3
+
4
+ =begin
5
+ --
6
+ This file is generated by the templates/template.rb script and should not be
7
+ modified manually. See templates/lib/prism/reflection.rb.erb
8
+ if you are looking to modify the template
9
+ ++
10
+ =end
11
+
12
+ module Prism
13
+ # The Reflection module provides the ability to reflect on the structure of
14
+ # the syntax tree itself, as opposed to looking at a single syntax tree. This
15
+ # is useful in metaprogramming contexts.
16
+ module Reflection
17
+ # A field represents a single piece of data on a node. It is the base class
18
+ # for all other field types.
19
+ class Field
20
+ # The name of the field.
21
+ attr_reader :name
22
+
23
+ # Initializes the field with the given name.
24
+ def initialize(name)
25
+ @name = name
26
+ end
27
+ end
28
+
29
+ # A node field represents a single child node in the syntax tree. It
30
+ # resolves to a Prism::Node in Ruby.
31
+ class NodeField < Field
32
+ end
33
+
34
+ # An optional node field represents a single child node in the syntax tree
35
+ # that may or may not be present. It resolves to either a Prism::Node or nil
36
+ # in Ruby.
37
+ class OptionalNodeField < Field
38
+ end
39
+
40
+ # A node list field represents a list of child nodes in the syntax tree. It
41
+ # resolves to an array of Prism::Node instances in Ruby.
42
+ class NodeListField < Field
43
+ end
44
+
45
+ # A constant field represents a constant value on a node. Effectively, it
46
+ # represents an identifier found within the source. It resolves to a symbol
47
+ # in Ruby.
48
+ class ConstantField < Field
49
+ end
50
+
51
+ # An optional constant field represents a constant value on a node that may
52
+ # or may not be present. It resolves to either a symbol or nil in Ruby.
53
+ class OptionalConstantField < Field
54
+ end
55
+
56
+ # A constant list field represents a list of constant values on a node. It
57
+ # resolves to an array of symbols in Ruby.
58
+ class ConstantListField < Field
59
+ end
60
+
61
+ # A string field represents a string value on a node. It almost always
62
+ # represents the unescaped value of a string-like literal. It resolves to a
63
+ # string in Ruby.
64
+ class StringField < Field
65
+ end
66
+
67
+ # A location field represents the location of some part of the node in the
68
+ # source code. For example, the location of a keyword or an operator. It
69
+ # resolves to a Prism::Location in Ruby.
70
+ class LocationField < Field
71
+ end
72
+
73
+ # An optional location field represents the location of some part of the
74
+ # node in the source code that may or may not be present. It resolves to
75
+ # either a Prism::Location or nil in Ruby.
76
+ class OptionalLocationField < Field
77
+ end
78
+
79
+ # An integer field represents an integer value. It is used to represent the
80
+ # value of an integer literal, the depth of local variables, and the number
81
+ # of a numbered reference. It resolves to an Integer in Ruby.
82
+ class IntegerField < Field
83
+ end
84
+
85
+ # A float field represents a double-precision floating point value. It is
86
+ # used exclusively to represent the value of a floating point literal. It
87
+ # resolves to a Float in Ruby.
88
+ class FloatField < Field
89
+ end
90
+
91
+ # A flags field represents a bitset of flags on a node. It resolves to an
92
+ # integer in Ruby. Note that the flags cannot be accessed directly on the
93
+ # node because the integer is kept private. Instead, the various flags in
94
+ # the bitset should be accessed through their query methods.
95
+ class FlagsField < Field
96
+ # The names of the flags in the bitset.
97
+ attr_reader :flags
98
+
99
+ # Initializes the flags field with the given name and flags.
100
+ def initialize(name, flags)
101
+ super(name)
102
+ @flags = flags
103
+ end
104
+ end
105
+
106
+ # Returns the fields for the given node.
107
+ def self.fields_for(node)
108
+ case node.type
109
+ when :alias_global_variable_node
110
+ [NodeField.new(:new_name), NodeField.new(:old_name), LocationField.new(:keyword_loc)]
111
+ when :alias_method_node
112
+ [NodeField.new(:new_name), NodeField.new(:old_name), LocationField.new(:keyword_loc)]
113
+ when :alternation_pattern_node
114
+ [NodeField.new(:left), NodeField.new(:right), LocationField.new(:operator_loc)]
115
+ when :and_node
116
+ [NodeField.new(:left), NodeField.new(:right), LocationField.new(:operator_loc)]
117
+ when :arguments_node
118
+ [FlagsField.new(:flags, [:contains_forwarding?, :contains_keywords?, :contains_keyword_splat?, :contains_splat?, :contains_multiple_splats?]), NodeListField.new(:arguments)]
119
+ when :array_node
120
+ [FlagsField.new(:flags, [:contains_splat?]), NodeListField.new(:elements), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
121
+ when :array_pattern_node
122
+ [OptionalNodeField.new(:constant), NodeListField.new(:requireds), OptionalNodeField.new(:rest), NodeListField.new(:posts), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
123
+ when :assoc_node
124
+ [NodeField.new(:key), NodeField.new(:value), OptionalLocationField.new(:operator_loc)]
125
+ when :assoc_splat_node
126
+ [OptionalNodeField.new(:value), LocationField.new(:operator_loc)]
127
+ when :back_reference_read_node
128
+ [ConstantField.new(:name)]
129
+ when :begin_node
130
+ [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)]
131
+ when :block_argument_node
132
+ [OptionalNodeField.new(:expression), LocationField.new(:operator_loc)]
133
+ when :block_local_variable_node
134
+ [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name)]
135
+ when :block_node
136
+ [ConstantListField.new(:locals), OptionalNodeField.new(:parameters), OptionalNodeField.new(:body), LocationField.new(:opening_loc), LocationField.new(:closing_loc)]
137
+ when :block_parameter_node
138
+ [FlagsField.new(:flags, [:repeated_parameter?]), OptionalConstantField.new(:name), OptionalLocationField.new(:name_loc), LocationField.new(:operator_loc)]
139
+ when :block_parameters_node
140
+ [OptionalNodeField.new(:parameters), NodeListField.new(:locals), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
141
+ when :break_node
142
+ [OptionalNodeField.new(:arguments), LocationField.new(:keyword_loc)]
143
+ when :call_and_write_node
144
+ [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)]
145
+ when :call_node
146
+ [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)]
147
+ when :call_operator_write_node
148
+ [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(:binary_operator), LocationField.new(:binary_operator_loc), NodeField.new(:value)]
149
+ when :call_or_write_node
150
+ [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)]
151
+ when :call_target_node
152
+ [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)]
153
+ when :capture_pattern_node
154
+ [NodeField.new(:value), NodeField.new(:target), LocationField.new(:operator_loc)]
155
+ when :case_match_node
156
+ [OptionalNodeField.new(:predicate), NodeListField.new(:conditions), OptionalNodeField.new(:else_clause), LocationField.new(:case_keyword_loc), LocationField.new(:end_keyword_loc)]
157
+ when :case_node
158
+ [OptionalNodeField.new(:predicate), NodeListField.new(:conditions), OptionalNodeField.new(:else_clause), LocationField.new(:case_keyword_loc), LocationField.new(:end_keyword_loc)]
159
+ when :class_node
160
+ [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)]
161
+ when :class_variable_and_write_node
162
+ [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
163
+ when :class_variable_operator_write_node
164
+ [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:binary_operator_loc), NodeField.new(:value), ConstantField.new(:binary_operator)]
165
+ when :class_variable_or_write_node
166
+ [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
167
+ when :class_variable_read_node
168
+ [ConstantField.new(:name)]
169
+ when :class_variable_target_node
170
+ [ConstantField.new(:name)]
171
+ when :class_variable_write_node
172
+ [ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
173
+ when :constant_and_write_node
174
+ [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
175
+ when :constant_operator_write_node
176
+ [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:binary_operator_loc), NodeField.new(:value), ConstantField.new(:binary_operator)]
177
+ when :constant_or_write_node
178
+ [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
179
+ when :constant_path_and_write_node
180
+ [NodeField.new(:target), LocationField.new(:operator_loc), NodeField.new(:value)]
181
+ when :constant_path_node
182
+ [OptionalNodeField.new(:parent), OptionalConstantField.new(:name), LocationField.new(:delimiter_loc), LocationField.new(:name_loc)]
183
+ when :constant_path_operator_write_node
184
+ [NodeField.new(:target), LocationField.new(:binary_operator_loc), NodeField.new(:value), ConstantField.new(:binary_operator)]
185
+ when :constant_path_or_write_node
186
+ [NodeField.new(:target), LocationField.new(:operator_loc), NodeField.new(:value)]
187
+ when :constant_path_target_node
188
+ [OptionalNodeField.new(:parent), OptionalConstantField.new(:name), LocationField.new(:delimiter_loc), LocationField.new(:name_loc)]
189
+ when :constant_path_write_node
190
+ [NodeField.new(:target), LocationField.new(:operator_loc), NodeField.new(:value)]
191
+ when :constant_read_node
192
+ [ConstantField.new(:name)]
193
+ when :constant_target_node
194
+ [ConstantField.new(:name)]
195
+ when :constant_write_node
196
+ [ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
197
+ when :def_node
198
+ [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)]
199
+ when :defined_node
200
+ [OptionalLocationField.new(:lparen_loc), NodeField.new(:value), OptionalLocationField.new(:rparen_loc), LocationField.new(:keyword_loc)]
201
+ when :else_node
202
+ [LocationField.new(:else_keyword_loc), OptionalNodeField.new(:statements), OptionalLocationField.new(:end_keyword_loc)]
203
+ when :embedded_statements_node
204
+ [LocationField.new(:opening_loc), OptionalNodeField.new(:statements), LocationField.new(:closing_loc)]
205
+ when :embedded_variable_node
206
+ [LocationField.new(:operator_loc), NodeField.new(:variable)]
207
+ when :ensure_node
208
+ [LocationField.new(:ensure_keyword_loc), OptionalNodeField.new(:statements), LocationField.new(:end_keyword_loc)]
209
+ when :false_node
210
+ []
211
+ when :find_pattern_node
212
+ [OptionalNodeField.new(:constant), NodeField.new(:left), NodeListField.new(:requireds), NodeField.new(:right), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
213
+ when :flip_flop_node
214
+ [FlagsField.new(:flags, [:exclude_end?]), OptionalNodeField.new(:left), OptionalNodeField.new(:right), LocationField.new(:operator_loc)]
215
+ when :float_node
216
+ [FloatField.new(:value)]
217
+ when :for_node
218
+ [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)]
219
+ when :forwarding_arguments_node
220
+ []
221
+ when :forwarding_parameter_node
222
+ []
223
+ when :forwarding_super_node
224
+ [OptionalNodeField.new(:block)]
225
+ when :global_variable_and_write_node
226
+ [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
227
+ when :global_variable_operator_write_node
228
+ [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:binary_operator_loc), NodeField.new(:value), ConstantField.new(:binary_operator)]
229
+ when :global_variable_or_write_node
230
+ [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
231
+ when :global_variable_read_node
232
+ [ConstantField.new(:name)]
233
+ when :global_variable_target_node
234
+ [ConstantField.new(:name)]
235
+ when :global_variable_write_node
236
+ [ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
237
+ when :hash_node
238
+ [LocationField.new(:opening_loc), NodeListField.new(:elements), LocationField.new(:closing_loc)]
239
+ when :hash_pattern_node
240
+ [OptionalNodeField.new(:constant), NodeListField.new(:elements), OptionalNodeField.new(:rest), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
241
+ when :if_node
242
+ [OptionalLocationField.new(:if_keyword_loc), NodeField.new(:predicate), OptionalLocationField.new(:then_keyword_loc), OptionalNodeField.new(:statements), OptionalNodeField.new(:subsequent), OptionalLocationField.new(:end_keyword_loc)]
243
+ when :imaginary_node
244
+ [NodeField.new(:numeric)]
245
+ when :implicit_node
246
+ [NodeField.new(:value)]
247
+ when :implicit_rest_node
248
+ []
249
+ when :in_node
250
+ [NodeField.new(:pattern), OptionalNodeField.new(:statements), LocationField.new(:in_loc), OptionalLocationField.new(:then_loc)]
251
+ when :index_and_write_node
252
+ [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)]
253
+ when :index_operator_write_node
254
+ [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(:binary_operator), LocationField.new(:binary_operator_loc), NodeField.new(:value)]
255
+ when :index_or_write_node
256
+ [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)]
257
+ when :index_target_node
258
+ [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)]
259
+ when :instance_variable_and_write_node
260
+ [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
261
+ when :instance_variable_operator_write_node
262
+ [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:binary_operator_loc), NodeField.new(:value), ConstantField.new(:binary_operator)]
263
+ when :instance_variable_or_write_node
264
+ [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
265
+ when :instance_variable_read_node
266
+ [ConstantField.new(:name)]
267
+ when :instance_variable_target_node
268
+ [ConstantField.new(:name)]
269
+ when :instance_variable_write_node
270
+ [ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
271
+ when :integer_node
272
+ [FlagsField.new(:flags, [:binary?, :decimal?, :octal?, :hexadecimal?]), IntegerField.new(:value)]
273
+ when :interpolated_match_last_line_node
274
+ [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)]
275
+ when :interpolated_regular_expression_node
276
+ [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)]
277
+ when :interpolated_string_node
278
+ [FlagsField.new(:flags, [:frozen?, :mutable?]), OptionalLocationField.new(:opening_loc), NodeListField.new(:parts), OptionalLocationField.new(:closing_loc)]
279
+ when :interpolated_symbol_node
280
+ [OptionalLocationField.new(:opening_loc), NodeListField.new(:parts), OptionalLocationField.new(:closing_loc)]
281
+ when :interpolated_x_string_node
282
+ [LocationField.new(:opening_loc), NodeListField.new(:parts), LocationField.new(:closing_loc)]
283
+ when :it_local_variable_read_node
284
+ []
285
+ when :it_parameters_node
286
+ []
287
+ when :keyword_hash_node
288
+ [FlagsField.new(:flags, [:symbol_keys?]), NodeListField.new(:elements)]
289
+ when :keyword_rest_parameter_node
290
+ [FlagsField.new(:flags, [:repeated_parameter?]), OptionalConstantField.new(:name), OptionalLocationField.new(:name_loc), LocationField.new(:operator_loc)]
291
+ when :lambda_node
292
+ [ConstantListField.new(:locals), LocationField.new(:operator_loc), LocationField.new(:opening_loc), LocationField.new(:closing_loc), OptionalNodeField.new(:parameters), OptionalNodeField.new(:body)]
293
+ when :local_variable_and_write_node
294
+ [LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value), ConstantField.new(:name), IntegerField.new(:depth)]
295
+ when :local_variable_operator_write_node
296
+ [LocationField.new(:name_loc), LocationField.new(:binary_operator_loc), NodeField.new(:value), ConstantField.new(:name), ConstantField.new(:binary_operator), IntegerField.new(:depth)]
297
+ when :local_variable_or_write_node
298
+ [LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value), ConstantField.new(:name), IntegerField.new(:depth)]
299
+ when :local_variable_read_node
300
+ [ConstantField.new(:name), IntegerField.new(:depth)]
301
+ when :local_variable_target_node
302
+ [ConstantField.new(:name), IntegerField.new(:depth)]
303
+ when :local_variable_write_node
304
+ [ConstantField.new(:name), IntegerField.new(:depth), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
305
+ when :match_last_line_node
306
+ [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)]
307
+ when :match_predicate_node
308
+ [NodeField.new(:value), NodeField.new(:pattern), LocationField.new(:operator_loc)]
309
+ when :match_required_node
310
+ [NodeField.new(:value), NodeField.new(:pattern), LocationField.new(:operator_loc)]
311
+ when :match_write_node
312
+ [NodeField.new(:call), NodeListField.new(:targets)]
313
+ when :missing_node
314
+ []
315
+ when :module_node
316
+ [ConstantListField.new(:locals), LocationField.new(:module_keyword_loc), NodeField.new(:constant_path), OptionalNodeField.new(:body), LocationField.new(:end_keyword_loc), ConstantField.new(:name)]
317
+ when :multi_target_node
318
+ [NodeListField.new(:lefts), OptionalNodeField.new(:rest), NodeListField.new(:rights), OptionalLocationField.new(:lparen_loc), OptionalLocationField.new(:rparen_loc)]
319
+ when :multi_write_node
320
+ [NodeListField.new(:lefts), OptionalNodeField.new(:rest), NodeListField.new(:rights), OptionalLocationField.new(:lparen_loc), OptionalLocationField.new(:rparen_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
321
+ when :next_node
322
+ [OptionalNodeField.new(:arguments), LocationField.new(:keyword_loc)]
323
+ when :nil_node
324
+ []
325
+ when :no_keywords_parameter_node
326
+ [LocationField.new(:operator_loc), LocationField.new(:keyword_loc)]
327
+ when :numbered_parameters_node
328
+ [IntegerField.new(:maximum)]
329
+ when :numbered_reference_read_node
330
+ [IntegerField.new(:number)]
331
+ when :optional_keyword_parameter_node
332
+ [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value)]
333
+ when :optional_parameter_node
334
+ [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
335
+ when :or_node
336
+ [NodeField.new(:left), NodeField.new(:right), LocationField.new(:operator_loc)]
337
+ when :parameters_node
338
+ [NodeListField.new(:requireds), NodeListField.new(:optionals), OptionalNodeField.new(:rest), NodeListField.new(:posts), NodeListField.new(:keywords), OptionalNodeField.new(:keyword_rest), OptionalNodeField.new(:block)]
339
+ when :parentheses_node
340
+ [FlagsField.new(:flags, [:multiple_statements?]), OptionalNodeField.new(:body), LocationField.new(:opening_loc), LocationField.new(:closing_loc)]
341
+ when :pinned_expression_node
342
+ [NodeField.new(:expression), LocationField.new(:operator_loc), LocationField.new(:lparen_loc), LocationField.new(:rparen_loc)]
343
+ when :pinned_variable_node
344
+ [NodeField.new(:variable), LocationField.new(:operator_loc)]
345
+ when :post_execution_node
346
+ [OptionalNodeField.new(:statements), LocationField.new(:keyword_loc), LocationField.new(:opening_loc), LocationField.new(:closing_loc)]
347
+ when :pre_execution_node
348
+ [OptionalNodeField.new(:statements), LocationField.new(:keyword_loc), LocationField.new(:opening_loc), LocationField.new(:closing_loc)]
349
+ when :program_node
350
+ [ConstantListField.new(:locals), NodeField.new(:statements)]
351
+ when :range_node
352
+ [FlagsField.new(:flags, [:exclude_end?]), OptionalNodeField.new(:left), OptionalNodeField.new(:right), LocationField.new(:operator_loc)]
353
+ when :rational_node
354
+ [FlagsField.new(:flags, [:binary?, :decimal?, :octal?, :hexadecimal?]), IntegerField.new(:numerator), IntegerField.new(:denominator)]
355
+ when :redo_node
356
+ []
357
+ when :regular_expression_node
358
+ [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)]
359
+ when :required_keyword_parameter_node
360
+ [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name), LocationField.new(:name_loc)]
361
+ when :required_parameter_node
362
+ [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name)]
363
+ when :rescue_modifier_node
364
+ [NodeField.new(:expression), LocationField.new(:keyword_loc), NodeField.new(:rescue_expression)]
365
+ when :rescue_node
366
+ [LocationField.new(:keyword_loc), NodeListField.new(:exceptions), OptionalLocationField.new(:operator_loc), OptionalNodeField.new(:reference), OptionalLocationField.new(:then_keyword_loc), OptionalNodeField.new(:statements), OptionalNodeField.new(:subsequent)]
367
+ when :rest_parameter_node
368
+ [FlagsField.new(:flags, [:repeated_parameter?]), OptionalConstantField.new(:name), OptionalLocationField.new(:name_loc), LocationField.new(:operator_loc)]
369
+ when :retry_node
370
+ []
371
+ when :return_node
372
+ [LocationField.new(:keyword_loc), OptionalNodeField.new(:arguments)]
373
+ when :self_node
374
+ []
375
+ when :shareable_constant_node
376
+ [FlagsField.new(:flags, [:literal?, :experimental_everything?, :experimental_copy?]), NodeField.new(:write)]
377
+ when :singleton_class_node
378
+ [ConstantListField.new(:locals), LocationField.new(:class_keyword_loc), LocationField.new(:operator_loc), NodeField.new(:expression), OptionalNodeField.new(:body), LocationField.new(:end_keyword_loc)]
379
+ when :source_encoding_node
380
+ []
381
+ when :source_file_node
382
+ [FlagsField.new(:flags, [:forced_utf8_encoding?, :forced_binary_encoding?, :frozen?, :mutable?]), StringField.new(:filepath)]
383
+ when :source_line_node
384
+ []
385
+ when :splat_node
386
+ [LocationField.new(:operator_loc), OptionalNodeField.new(:expression)]
387
+ when :statements_node
388
+ [NodeListField.new(:body)]
389
+ when :string_node
390
+ [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)]
391
+ when :super_node
392
+ [LocationField.new(:keyword_loc), OptionalLocationField.new(:lparen_loc), OptionalNodeField.new(:arguments), OptionalLocationField.new(:rparen_loc), OptionalNodeField.new(:block)]
393
+ when :symbol_node
394
+ [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)]
395
+ when :true_node
396
+ []
397
+ when :undef_node
398
+ [NodeListField.new(:names), LocationField.new(:keyword_loc)]
399
+ when :unless_node
400
+ [LocationField.new(:keyword_loc), NodeField.new(:predicate), OptionalLocationField.new(:then_keyword_loc), OptionalNodeField.new(:statements), OptionalNodeField.new(:else_clause), OptionalLocationField.new(:end_keyword_loc)]
401
+ when :until_node
402
+ [FlagsField.new(:flags, [:begin_modifier?]), LocationField.new(:keyword_loc), OptionalLocationField.new(:do_keyword_loc), OptionalLocationField.new(:closing_loc), NodeField.new(:predicate), OptionalNodeField.new(:statements)]
403
+ when :when_node
404
+ [LocationField.new(:keyword_loc), NodeListField.new(:conditions), OptionalLocationField.new(:then_keyword_loc), OptionalNodeField.new(:statements)]
405
+ when :while_node
406
+ [FlagsField.new(:flags, [:begin_modifier?]), LocationField.new(:keyword_loc), OptionalLocationField.new(:do_keyword_loc), OptionalLocationField.new(:closing_loc), NodeField.new(:predicate), OptionalNodeField.new(:statements)]
407
+ when :x_string_node
408
+ [FlagsField.new(:flags, [:forced_utf8_encoding?, :forced_binary_encoding?]), LocationField.new(:opening_loc), LocationField.new(:content_loc), LocationField.new(:closing_loc), StringField.new(:unescaped)]
409
+ when :yield_node
410
+ [LocationField.new(:keyword_loc), OptionalLocationField.new(:lparen_loc), OptionalNodeField.new(:arguments), OptionalLocationField.new(:rparen_loc)]
411
+ else
412
+ raise "Unknown node type: #{node.type.inspect}"
413
+ end
414
+ end
415
+ end
416
+ end