jruby-prism-parser 0.23.0.pre.SNAPSHOT-java

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 (110) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +401 -0
  3. data/CODE_OF_CONDUCT.md +76 -0
  4. data/CONTRIBUTING.md +62 -0
  5. data/LICENSE.md +7 -0
  6. data/Makefile +101 -0
  7. data/README.md +98 -0
  8. data/config.yml +2902 -0
  9. data/docs/build_system.md +91 -0
  10. data/docs/configuration.md +64 -0
  11. data/docs/cruby_compilation.md +27 -0
  12. data/docs/design.md +53 -0
  13. data/docs/encoding.md +121 -0
  14. data/docs/fuzzing.md +88 -0
  15. data/docs/heredocs.md +36 -0
  16. data/docs/javascript.md +118 -0
  17. data/docs/local_variable_depth.md +229 -0
  18. data/docs/mapping.md +117 -0
  19. data/docs/parser_translation.md +34 -0
  20. data/docs/parsing_rules.md +19 -0
  21. data/docs/releasing.md +98 -0
  22. data/docs/ripper.md +36 -0
  23. data/docs/ruby_api.md +43 -0
  24. data/docs/ruby_parser_translation.md +19 -0
  25. data/docs/serialization.md +209 -0
  26. data/docs/testing.md +55 -0
  27. data/ext/prism/api_node.c +5098 -0
  28. data/ext/prism/api_pack.c +267 -0
  29. data/ext/prism/extconf.rb +110 -0
  30. data/ext/prism/extension.c +1155 -0
  31. data/ext/prism/extension.h +18 -0
  32. data/include/prism/ast.h +5807 -0
  33. data/include/prism/defines.h +102 -0
  34. data/include/prism/diagnostic.h +339 -0
  35. data/include/prism/encoding.h +265 -0
  36. data/include/prism/node.h +57 -0
  37. data/include/prism/options.h +230 -0
  38. data/include/prism/pack.h +152 -0
  39. data/include/prism/parser.h +732 -0
  40. data/include/prism/prettyprint.h +26 -0
  41. data/include/prism/regexp.h +33 -0
  42. data/include/prism/util/pm_buffer.h +155 -0
  43. data/include/prism/util/pm_char.h +205 -0
  44. data/include/prism/util/pm_constant_pool.h +209 -0
  45. data/include/prism/util/pm_list.h +97 -0
  46. data/include/prism/util/pm_memchr.h +29 -0
  47. data/include/prism/util/pm_newline_list.h +93 -0
  48. data/include/prism/util/pm_state_stack.h +42 -0
  49. data/include/prism/util/pm_string.h +150 -0
  50. data/include/prism/util/pm_string_list.h +44 -0
  51. data/include/prism/util/pm_strncasecmp.h +32 -0
  52. data/include/prism/util/pm_strpbrk.h +46 -0
  53. data/include/prism/version.h +29 -0
  54. data/include/prism.h +289 -0
  55. data/jruby-prism.jar +0 -0
  56. data/lib/prism/compiler.rb +486 -0
  57. data/lib/prism/debug.rb +206 -0
  58. data/lib/prism/desugar_compiler.rb +207 -0
  59. data/lib/prism/dispatcher.rb +2150 -0
  60. data/lib/prism/dot_visitor.rb +4634 -0
  61. data/lib/prism/dsl.rb +785 -0
  62. data/lib/prism/ffi.rb +346 -0
  63. data/lib/prism/lex_compat.rb +908 -0
  64. data/lib/prism/mutation_compiler.rb +753 -0
  65. data/lib/prism/node.rb +17864 -0
  66. data/lib/prism/node_ext.rb +212 -0
  67. data/lib/prism/node_inspector.rb +68 -0
  68. data/lib/prism/pack.rb +224 -0
  69. data/lib/prism/parse_result/comments.rb +177 -0
  70. data/lib/prism/parse_result/newlines.rb +64 -0
  71. data/lib/prism/parse_result.rb +498 -0
  72. data/lib/prism/pattern.rb +250 -0
  73. data/lib/prism/serialize.rb +1354 -0
  74. data/lib/prism/translation/parser/compiler.rb +1838 -0
  75. data/lib/prism/translation/parser/lexer.rb +335 -0
  76. data/lib/prism/translation/parser/rubocop.rb +37 -0
  77. data/lib/prism/translation/parser.rb +178 -0
  78. data/lib/prism/translation/ripper.rb +577 -0
  79. data/lib/prism/translation/ruby_parser.rb +1521 -0
  80. data/lib/prism/translation.rb +11 -0
  81. data/lib/prism/version.rb +3 -0
  82. data/lib/prism/visitor.rb +495 -0
  83. data/lib/prism.rb +99 -0
  84. data/prism.gemspec +135 -0
  85. data/rbi/prism.rbi +7767 -0
  86. data/rbi/prism_static.rbi +207 -0
  87. data/sig/prism.rbs +4773 -0
  88. data/sig/prism_static.rbs +201 -0
  89. data/src/diagnostic.c +400 -0
  90. data/src/encoding.c +5132 -0
  91. data/src/node.c +2786 -0
  92. data/src/options.c +213 -0
  93. data/src/pack.c +493 -0
  94. data/src/prettyprint.c +8881 -0
  95. data/src/prism.c +18406 -0
  96. data/src/regexp.c +638 -0
  97. data/src/serialize.c +1554 -0
  98. data/src/token_type.c +700 -0
  99. data/src/util/pm_buffer.c +190 -0
  100. data/src/util/pm_char.c +318 -0
  101. data/src/util/pm_constant_pool.c +322 -0
  102. data/src/util/pm_list.c +49 -0
  103. data/src/util/pm_memchr.c +35 -0
  104. data/src/util/pm_newline_list.c +84 -0
  105. data/src/util/pm_state_stack.c +25 -0
  106. data/src/util/pm_string.c +203 -0
  107. data/src/util/pm_string_list.c +28 -0
  108. data/src/util/pm_strncasecmp.c +24 -0
  109. data/src/util/pm_strpbrk.c +180 -0
  110. metadata +156 -0
@@ -0,0 +1,2150 @@
1
+ # frozen_string_literal: true
2
+ =begin
3
+ This file is generated by the templates/template.rb script and should not be
4
+ modified manually. See templates/lib/prism/dispatcher.rb.erb
5
+ if you are looking to modify the template
6
+ =end
7
+
8
+ module Prism
9
+ # The dispatcher class fires events for nodes that are found while walking an
10
+ # AST to all registered listeners. It's useful for performing different types
11
+ # of analysis on the AST while only having to walk the tree once.
12
+ #
13
+ # To use the dispatcher, you would first instantiate it and register listeners
14
+ # for the events you're interested in:
15
+ #
16
+ # class OctalListener
17
+ # def on_integer_node_enter(node)
18
+ # if node.octal? && !node.slice.start_with?("0o")
19
+ # warn("Octal integers should be written with the 0o prefix")
20
+ # end
21
+ # end
22
+ # end
23
+ #
24
+ # dispatcher = Dispatcher.new
25
+ # dispatcher.register(listener, :on_integer_node_enter)
26
+ #
27
+ # Then, you can walk any number of trees and dispatch events to the listeners:
28
+ #
29
+ # result = Prism.parse("001 + 002 + 003")
30
+ # dispatcher.dispatch(result.value)
31
+ #
32
+ # Optionally, you can also use `#dispatch_once` to dispatch enter and leave
33
+ # events for a single node without recursing further down the tree. This can
34
+ # be useful in circumstances where you want to reuse the listeners you already
35
+ # have registers but want to stop walking the tree at a certain point.
36
+ #
37
+ # integer = result.value.statements.body.first.receiver.receiver
38
+ # dispatcher.dispatch_once(integer)
39
+ #
40
+ class Dispatcher < Visitor
41
+ # attr_reader listeners: Hash[Symbol, Array[Listener]]
42
+ attr_reader :listeners
43
+
44
+ # Initialize a new dispatcher.
45
+ def initialize
46
+ @listeners = {}
47
+ end
48
+
49
+ # Register a listener for one or more events.
50
+ #
51
+ # def register: (Listener, *Symbol) -> void
52
+ def register(listener, *events)
53
+ events.each { |event| (listeners[event] ||= []) << listener }
54
+ end
55
+
56
+ # Walks `root` dispatching events to all registered listeners.
57
+ #
58
+ # def dispatch: (Node) -> void
59
+ alias dispatch visit
60
+
61
+ # Dispatches a single event for `node` to all registered listeners.
62
+ #
63
+ # def dispatch_once: (Node) -> void
64
+ def dispatch_once(node)
65
+ node.accept(DispatchOnce.new(listeners))
66
+ end
67
+
68
+ # Dispatch enter and leave events for AliasGlobalVariableNode nodes and continue
69
+ # walking the tree.
70
+ def visit_alias_global_variable_node(node)
71
+ listeners[:on_alias_global_variable_node_enter]&.each { |listener| listener.on_alias_global_variable_node_enter(node) }
72
+ super
73
+ listeners[:on_alias_global_variable_node_leave]&.each { |listener| listener.on_alias_global_variable_node_leave(node) }
74
+ end
75
+
76
+ # Dispatch enter and leave events for AliasMethodNode nodes and continue
77
+ # walking the tree.
78
+ def visit_alias_method_node(node)
79
+ listeners[:on_alias_method_node_enter]&.each { |listener| listener.on_alias_method_node_enter(node) }
80
+ super
81
+ listeners[:on_alias_method_node_leave]&.each { |listener| listener.on_alias_method_node_leave(node) }
82
+ end
83
+
84
+ # Dispatch enter and leave events for AlternationPatternNode nodes and continue
85
+ # walking the tree.
86
+ def visit_alternation_pattern_node(node)
87
+ listeners[:on_alternation_pattern_node_enter]&.each { |listener| listener.on_alternation_pattern_node_enter(node) }
88
+ super
89
+ listeners[:on_alternation_pattern_node_leave]&.each { |listener| listener.on_alternation_pattern_node_leave(node) }
90
+ end
91
+
92
+ # Dispatch enter and leave events for AndNode nodes and continue
93
+ # walking the tree.
94
+ def visit_and_node(node)
95
+ listeners[:on_and_node_enter]&.each { |listener| listener.on_and_node_enter(node) }
96
+ super
97
+ listeners[:on_and_node_leave]&.each { |listener| listener.on_and_node_leave(node) }
98
+ end
99
+
100
+ # Dispatch enter and leave events for ArgumentsNode nodes and continue
101
+ # walking the tree.
102
+ def visit_arguments_node(node)
103
+ listeners[:on_arguments_node_enter]&.each { |listener| listener.on_arguments_node_enter(node) }
104
+ super
105
+ listeners[:on_arguments_node_leave]&.each { |listener| listener.on_arguments_node_leave(node) }
106
+ end
107
+
108
+ # Dispatch enter and leave events for ArrayNode nodes and continue
109
+ # walking the tree.
110
+ def visit_array_node(node)
111
+ listeners[:on_array_node_enter]&.each { |listener| listener.on_array_node_enter(node) }
112
+ super
113
+ listeners[:on_array_node_leave]&.each { |listener| listener.on_array_node_leave(node) }
114
+ end
115
+
116
+ # Dispatch enter and leave events for ArrayPatternNode nodes and continue
117
+ # walking the tree.
118
+ def visit_array_pattern_node(node)
119
+ listeners[:on_array_pattern_node_enter]&.each { |listener| listener.on_array_pattern_node_enter(node) }
120
+ super
121
+ listeners[:on_array_pattern_node_leave]&.each { |listener| listener.on_array_pattern_node_leave(node) }
122
+ end
123
+
124
+ # Dispatch enter and leave events for AssocNode nodes and continue
125
+ # walking the tree.
126
+ def visit_assoc_node(node)
127
+ listeners[:on_assoc_node_enter]&.each { |listener| listener.on_assoc_node_enter(node) }
128
+ super
129
+ listeners[:on_assoc_node_leave]&.each { |listener| listener.on_assoc_node_leave(node) }
130
+ end
131
+
132
+ # Dispatch enter and leave events for AssocSplatNode nodes and continue
133
+ # walking the tree.
134
+ def visit_assoc_splat_node(node)
135
+ listeners[:on_assoc_splat_node_enter]&.each { |listener| listener.on_assoc_splat_node_enter(node) }
136
+ super
137
+ listeners[:on_assoc_splat_node_leave]&.each { |listener| listener.on_assoc_splat_node_leave(node) }
138
+ end
139
+
140
+ # Dispatch enter and leave events for BackReferenceReadNode nodes and continue
141
+ # walking the tree.
142
+ def visit_back_reference_read_node(node)
143
+ listeners[:on_back_reference_read_node_enter]&.each { |listener| listener.on_back_reference_read_node_enter(node) }
144
+ super
145
+ listeners[:on_back_reference_read_node_leave]&.each { |listener| listener.on_back_reference_read_node_leave(node) }
146
+ end
147
+
148
+ # Dispatch enter and leave events for BeginNode nodes and continue
149
+ # walking the tree.
150
+ def visit_begin_node(node)
151
+ listeners[:on_begin_node_enter]&.each { |listener| listener.on_begin_node_enter(node) }
152
+ super
153
+ listeners[:on_begin_node_leave]&.each { |listener| listener.on_begin_node_leave(node) }
154
+ end
155
+
156
+ # Dispatch enter and leave events for BlockArgumentNode nodes and continue
157
+ # walking the tree.
158
+ def visit_block_argument_node(node)
159
+ listeners[:on_block_argument_node_enter]&.each { |listener| listener.on_block_argument_node_enter(node) }
160
+ super
161
+ listeners[:on_block_argument_node_leave]&.each { |listener| listener.on_block_argument_node_leave(node) }
162
+ end
163
+
164
+ # Dispatch enter and leave events for BlockLocalVariableNode nodes and continue
165
+ # walking the tree.
166
+ def visit_block_local_variable_node(node)
167
+ listeners[:on_block_local_variable_node_enter]&.each { |listener| listener.on_block_local_variable_node_enter(node) }
168
+ super
169
+ listeners[:on_block_local_variable_node_leave]&.each { |listener| listener.on_block_local_variable_node_leave(node) }
170
+ end
171
+
172
+ # Dispatch enter and leave events for BlockNode nodes and continue
173
+ # walking the tree.
174
+ def visit_block_node(node)
175
+ listeners[:on_block_node_enter]&.each { |listener| listener.on_block_node_enter(node) }
176
+ super
177
+ listeners[:on_block_node_leave]&.each { |listener| listener.on_block_node_leave(node) }
178
+ end
179
+
180
+ # Dispatch enter and leave events for BlockParameterNode nodes and continue
181
+ # walking the tree.
182
+ def visit_block_parameter_node(node)
183
+ listeners[:on_block_parameter_node_enter]&.each { |listener| listener.on_block_parameter_node_enter(node) }
184
+ super
185
+ listeners[:on_block_parameter_node_leave]&.each { |listener| listener.on_block_parameter_node_leave(node) }
186
+ end
187
+
188
+ # Dispatch enter and leave events for BlockParametersNode nodes and continue
189
+ # walking the tree.
190
+ def visit_block_parameters_node(node)
191
+ listeners[:on_block_parameters_node_enter]&.each { |listener| listener.on_block_parameters_node_enter(node) }
192
+ super
193
+ listeners[:on_block_parameters_node_leave]&.each { |listener| listener.on_block_parameters_node_leave(node) }
194
+ end
195
+
196
+ # Dispatch enter and leave events for BreakNode nodes and continue
197
+ # walking the tree.
198
+ def visit_break_node(node)
199
+ listeners[:on_break_node_enter]&.each { |listener| listener.on_break_node_enter(node) }
200
+ super
201
+ listeners[:on_break_node_leave]&.each { |listener| listener.on_break_node_leave(node) }
202
+ end
203
+
204
+ # Dispatch enter and leave events for CallAndWriteNode nodes and continue
205
+ # walking the tree.
206
+ def visit_call_and_write_node(node)
207
+ listeners[:on_call_and_write_node_enter]&.each { |listener| listener.on_call_and_write_node_enter(node) }
208
+ super
209
+ listeners[:on_call_and_write_node_leave]&.each { |listener| listener.on_call_and_write_node_leave(node) }
210
+ end
211
+
212
+ # Dispatch enter and leave events for CallNode nodes and continue
213
+ # walking the tree.
214
+ def visit_call_node(node)
215
+ listeners[:on_call_node_enter]&.each { |listener| listener.on_call_node_enter(node) }
216
+ super
217
+ listeners[:on_call_node_leave]&.each { |listener| listener.on_call_node_leave(node) }
218
+ end
219
+
220
+ # Dispatch enter and leave events for CallOperatorWriteNode nodes and continue
221
+ # walking the tree.
222
+ def visit_call_operator_write_node(node)
223
+ listeners[:on_call_operator_write_node_enter]&.each { |listener| listener.on_call_operator_write_node_enter(node) }
224
+ super
225
+ listeners[:on_call_operator_write_node_leave]&.each { |listener| listener.on_call_operator_write_node_leave(node) }
226
+ end
227
+
228
+ # Dispatch enter and leave events for CallOrWriteNode nodes and continue
229
+ # walking the tree.
230
+ def visit_call_or_write_node(node)
231
+ listeners[:on_call_or_write_node_enter]&.each { |listener| listener.on_call_or_write_node_enter(node) }
232
+ super
233
+ listeners[:on_call_or_write_node_leave]&.each { |listener| listener.on_call_or_write_node_leave(node) }
234
+ end
235
+
236
+ # Dispatch enter and leave events for CallTargetNode nodes and continue
237
+ # walking the tree.
238
+ def visit_call_target_node(node)
239
+ listeners[:on_call_target_node_enter]&.each { |listener| listener.on_call_target_node_enter(node) }
240
+ super
241
+ listeners[:on_call_target_node_leave]&.each { |listener| listener.on_call_target_node_leave(node) }
242
+ end
243
+
244
+ # Dispatch enter and leave events for CapturePatternNode nodes and continue
245
+ # walking the tree.
246
+ def visit_capture_pattern_node(node)
247
+ listeners[:on_capture_pattern_node_enter]&.each { |listener| listener.on_capture_pattern_node_enter(node) }
248
+ super
249
+ listeners[:on_capture_pattern_node_leave]&.each { |listener| listener.on_capture_pattern_node_leave(node) }
250
+ end
251
+
252
+ # Dispatch enter and leave events for CaseMatchNode nodes and continue
253
+ # walking the tree.
254
+ def visit_case_match_node(node)
255
+ listeners[:on_case_match_node_enter]&.each { |listener| listener.on_case_match_node_enter(node) }
256
+ super
257
+ listeners[:on_case_match_node_leave]&.each { |listener| listener.on_case_match_node_leave(node) }
258
+ end
259
+
260
+ # Dispatch enter and leave events for CaseNode nodes and continue
261
+ # walking the tree.
262
+ def visit_case_node(node)
263
+ listeners[:on_case_node_enter]&.each { |listener| listener.on_case_node_enter(node) }
264
+ super
265
+ listeners[:on_case_node_leave]&.each { |listener| listener.on_case_node_leave(node) }
266
+ end
267
+
268
+ # Dispatch enter and leave events for ClassNode nodes and continue
269
+ # walking the tree.
270
+ def visit_class_node(node)
271
+ listeners[:on_class_node_enter]&.each { |listener| listener.on_class_node_enter(node) }
272
+ super
273
+ listeners[:on_class_node_leave]&.each { |listener| listener.on_class_node_leave(node) }
274
+ end
275
+
276
+ # Dispatch enter and leave events for ClassVariableAndWriteNode nodes and continue
277
+ # walking the tree.
278
+ def visit_class_variable_and_write_node(node)
279
+ listeners[:on_class_variable_and_write_node_enter]&.each { |listener| listener.on_class_variable_and_write_node_enter(node) }
280
+ super
281
+ listeners[:on_class_variable_and_write_node_leave]&.each { |listener| listener.on_class_variable_and_write_node_leave(node) }
282
+ end
283
+
284
+ # Dispatch enter and leave events for ClassVariableOperatorWriteNode nodes and continue
285
+ # walking the tree.
286
+ def visit_class_variable_operator_write_node(node)
287
+ listeners[:on_class_variable_operator_write_node_enter]&.each { |listener| listener.on_class_variable_operator_write_node_enter(node) }
288
+ super
289
+ listeners[:on_class_variable_operator_write_node_leave]&.each { |listener| listener.on_class_variable_operator_write_node_leave(node) }
290
+ end
291
+
292
+ # Dispatch enter and leave events for ClassVariableOrWriteNode nodes and continue
293
+ # walking the tree.
294
+ def visit_class_variable_or_write_node(node)
295
+ listeners[:on_class_variable_or_write_node_enter]&.each { |listener| listener.on_class_variable_or_write_node_enter(node) }
296
+ super
297
+ listeners[:on_class_variable_or_write_node_leave]&.each { |listener| listener.on_class_variable_or_write_node_leave(node) }
298
+ end
299
+
300
+ # Dispatch enter and leave events for ClassVariableReadNode nodes and continue
301
+ # walking the tree.
302
+ def visit_class_variable_read_node(node)
303
+ listeners[:on_class_variable_read_node_enter]&.each { |listener| listener.on_class_variable_read_node_enter(node) }
304
+ super
305
+ listeners[:on_class_variable_read_node_leave]&.each { |listener| listener.on_class_variable_read_node_leave(node) }
306
+ end
307
+
308
+ # Dispatch enter and leave events for ClassVariableTargetNode nodes and continue
309
+ # walking the tree.
310
+ def visit_class_variable_target_node(node)
311
+ listeners[:on_class_variable_target_node_enter]&.each { |listener| listener.on_class_variable_target_node_enter(node) }
312
+ super
313
+ listeners[:on_class_variable_target_node_leave]&.each { |listener| listener.on_class_variable_target_node_leave(node) }
314
+ end
315
+
316
+ # Dispatch enter and leave events for ClassVariableWriteNode nodes and continue
317
+ # walking the tree.
318
+ def visit_class_variable_write_node(node)
319
+ listeners[:on_class_variable_write_node_enter]&.each { |listener| listener.on_class_variable_write_node_enter(node) }
320
+ super
321
+ listeners[:on_class_variable_write_node_leave]&.each { |listener| listener.on_class_variable_write_node_leave(node) }
322
+ end
323
+
324
+ # Dispatch enter and leave events for ConstantAndWriteNode nodes and continue
325
+ # walking the tree.
326
+ def visit_constant_and_write_node(node)
327
+ listeners[:on_constant_and_write_node_enter]&.each { |listener| listener.on_constant_and_write_node_enter(node) }
328
+ super
329
+ listeners[:on_constant_and_write_node_leave]&.each { |listener| listener.on_constant_and_write_node_leave(node) }
330
+ end
331
+
332
+ # Dispatch enter and leave events for ConstantOperatorWriteNode nodes and continue
333
+ # walking the tree.
334
+ def visit_constant_operator_write_node(node)
335
+ listeners[:on_constant_operator_write_node_enter]&.each { |listener| listener.on_constant_operator_write_node_enter(node) }
336
+ super
337
+ listeners[:on_constant_operator_write_node_leave]&.each { |listener| listener.on_constant_operator_write_node_leave(node) }
338
+ end
339
+
340
+ # Dispatch enter and leave events for ConstantOrWriteNode nodes and continue
341
+ # walking the tree.
342
+ def visit_constant_or_write_node(node)
343
+ listeners[:on_constant_or_write_node_enter]&.each { |listener| listener.on_constant_or_write_node_enter(node) }
344
+ super
345
+ listeners[:on_constant_or_write_node_leave]&.each { |listener| listener.on_constant_or_write_node_leave(node) }
346
+ end
347
+
348
+ # Dispatch enter and leave events for ConstantPathAndWriteNode nodes and continue
349
+ # walking the tree.
350
+ def visit_constant_path_and_write_node(node)
351
+ listeners[:on_constant_path_and_write_node_enter]&.each { |listener| listener.on_constant_path_and_write_node_enter(node) }
352
+ super
353
+ listeners[:on_constant_path_and_write_node_leave]&.each { |listener| listener.on_constant_path_and_write_node_leave(node) }
354
+ end
355
+
356
+ # Dispatch enter and leave events for ConstantPathNode nodes and continue
357
+ # walking the tree.
358
+ def visit_constant_path_node(node)
359
+ listeners[:on_constant_path_node_enter]&.each { |listener| listener.on_constant_path_node_enter(node) }
360
+ super
361
+ listeners[:on_constant_path_node_leave]&.each { |listener| listener.on_constant_path_node_leave(node) }
362
+ end
363
+
364
+ # Dispatch enter and leave events for ConstantPathOperatorWriteNode nodes and continue
365
+ # walking the tree.
366
+ def visit_constant_path_operator_write_node(node)
367
+ listeners[:on_constant_path_operator_write_node_enter]&.each { |listener| listener.on_constant_path_operator_write_node_enter(node) }
368
+ super
369
+ listeners[:on_constant_path_operator_write_node_leave]&.each { |listener| listener.on_constant_path_operator_write_node_leave(node) }
370
+ end
371
+
372
+ # Dispatch enter and leave events for ConstantPathOrWriteNode nodes and continue
373
+ # walking the tree.
374
+ def visit_constant_path_or_write_node(node)
375
+ listeners[:on_constant_path_or_write_node_enter]&.each { |listener| listener.on_constant_path_or_write_node_enter(node) }
376
+ super
377
+ listeners[:on_constant_path_or_write_node_leave]&.each { |listener| listener.on_constant_path_or_write_node_leave(node) }
378
+ end
379
+
380
+ # Dispatch enter and leave events for ConstantPathTargetNode nodes and continue
381
+ # walking the tree.
382
+ def visit_constant_path_target_node(node)
383
+ listeners[:on_constant_path_target_node_enter]&.each { |listener| listener.on_constant_path_target_node_enter(node) }
384
+ super
385
+ listeners[:on_constant_path_target_node_leave]&.each { |listener| listener.on_constant_path_target_node_leave(node) }
386
+ end
387
+
388
+ # Dispatch enter and leave events for ConstantPathWriteNode nodes and continue
389
+ # walking the tree.
390
+ def visit_constant_path_write_node(node)
391
+ listeners[:on_constant_path_write_node_enter]&.each { |listener| listener.on_constant_path_write_node_enter(node) }
392
+ super
393
+ listeners[:on_constant_path_write_node_leave]&.each { |listener| listener.on_constant_path_write_node_leave(node) }
394
+ end
395
+
396
+ # Dispatch enter and leave events for ConstantReadNode nodes and continue
397
+ # walking the tree.
398
+ def visit_constant_read_node(node)
399
+ listeners[:on_constant_read_node_enter]&.each { |listener| listener.on_constant_read_node_enter(node) }
400
+ super
401
+ listeners[:on_constant_read_node_leave]&.each { |listener| listener.on_constant_read_node_leave(node) }
402
+ end
403
+
404
+ # Dispatch enter and leave events for ConstantTargetNode nodes and continue
405
+ # walking the tree.
406
+ def visit_constant_target_node(node)
407
+ listeners[:on_constant_target_node_enter]&.each { |listener| listener.on_constant_target_node_enter(node) }
408
+ super
409
+ listeners[:on_constant_target_node_leave]&.each { |listener| listener.on_constant_target_node_leave(node) }
410
+ end
411
+
412
+ # Dispatch enter and leave events for ConstantWriteNode nodes and continue
413
+ # walking the tree.
414
+ def visit_constant_write_node(node)
415
+ listeners[:on_constant_write_node_enter]&.each { |listener| listener.on_constant_write_node_enter(node) }
416
+ super
417
+ listeners[:on_constant_write_node_leave]&.each { |listener| listener.on_constant_write_node_leave(node) }
418
+ end
419
+
420
+ # Dispatch enter and leave events for DefNode nodes and continue
421
+ # walking the tree.
422
+ def visit_def_node(node)
423
+ listeners[:on_def_node_enter]&.each { |listener| listener.on_def_node_enter(node) }
424
+ super
425
+ listeners[:on_def_node_leave]&.each { |listener| listener.on_def_node_leave(node) }
426
+ end
427
+
428
+ # Dispatch enter and leave events for DefinedNode nodes and continue
429
+ # walking the tree.
430
+ def visit_defined_node(node)
431
+ listeners[:on_defined_node_enter]&.each { |listener| listener.on_defined_node_enter(node) }
432
+ super
433
+ listeners[:on_defined_node_leave]&.each { |listener| listener.on_defined_node_leave(node) }
434
+ end
435
+
436
+ # Dispatch enter and leave events for ElseNode nodes and continue
437
+ # walking the tree.
438
+ def visit_else_node(node)
439
+ listeners[:on_else_node_enter]&.each { |listener| listener.on_else_node_enter(node) }
440
+ super
441
+ listeners[:on_else_node_leave]&.each { |listener| listener.on_else_node_leave(node) }
442
+ end
443
+
444
+ # Dispatch enter and leave events for EmbeddedStatementsNode nodes and continue
445
+ # walking the tree.
446
+ def visit_embedded_statements_node(node)
447
+ listeners[:on_embedded_statements_node_enter]&.each { |listener| listener.on_embedded_statements_node_enter(node) }
448
+ super
449
+ listeners[:on_embedded_statements_node_leave]&.each { |listener| listener.on_embedded_statements_node_leave(node) }
450
+ end
451
+
452
+ # Dispatch enter and leave events for EmbeddedVariableNode nodes and continue
453
+ # walking the tree.
454
+ def visit_embedded_variable_node(node)
455
+ listeners[:on_embedded_variable_node_enter]&.each { |listener| listener.on_embedded_variable_node_enter(node) }
456
+ super
457
+ listeners[:on_embedded_variable_node_leave]&.each { |listener| listener.on_embedded_variable_node_leave(node) }
458
+ end
459
+
460
+ # Dispatch enter and leave events for EnsureNode nodes and continue
461
+ # walking the tree.
462
+ def visit_ensure_node(node)
463
+ listeners[:on_ensure_node_enter]&.each { |listener| listener.on_ensure_node_enter(node) }
464
+ super
465
+ listeners[:on_ensure_node_leave]&.each { |listener| listener.on_ensure_node_leave(node) }
466
+ end
467
+
468
+ # Dispatch enter and leave events for FalseNode nodes and continue
469
+ # walking the tree.
470
+ def visit_false_node(node)
471
+ listeners[:on_false_node_enter]&.each { |listener| listener.on_false_node_enter(node) }
472
+ super
473
+ listeners[:on_false_node_leave]&.each { |listener| listener.on_false_node_leave(node) }
474
+ end
475
+
476
+ # Dispatch enter and leave events for FindPatternNode nodes and continue
477
+ # walking the tree.
478
+ def visit_find_pattern_node(node)
479
+ listeners[:on_find_pattern_node_enter]&.each { |listener| listener.on_find_pattern_node_enter(node) }
480
+ super
481
+ listeners[:on_find_pattern_node_leave]&.each { |listener| listener.on_find_pattern_node_leave(node) }
482
+ end
483
+
484
+ # Dispatch enter and leave events for FlipFlopNode nodes and continue
485
+ # walking the tree.
486
+ def visit_flip_flop_node(node)
487
+ listeners[:on_flip_flop_node_enter]&.each { |listener| listener.on_flip_flop_node_enter(node) }
488
+ super
489
+ listeners[:on_flip_flop_node_leave]&.each { |listener| listener.on_flip_flop_node_leave(node) }
490
+ end
491
+
492
+ # Dispatch enter and leave events for FloatNode nodes and continue
493
+ # walking the tree.
494
+ def visit_float_node(node)
495
+ listeners[:on_float_node_enter]&.each { |listener| listener.on_float_node_enter(node) }
496
+ super
497
+ listeners[:on_float_node_leave]&.each { |listener| listener.on_float_node_leave(node) }
498
+ end
499
+
500
+ # Dispatch enter and leave events for ForNode nodes and continue
501
+ # walking the tree.
502
+ def visit_for_node(node)
503
+ listeners[:on_for_node_enter]&.each { |listener| listener.on_for_node_enter(node) }
504
+ super
505
+ listeners[:on_for_node_leave]&.each { |listener| listener.on_for_node_leave(node) }
506
+ end
507
+
508
+ # Dispatch enter and leave events for ForwardingArgumentsNode nodes and continue
509
+ # walking the tree.
510
+ def visit_forwarding_arguments_node(node)
511
+ listeners[:on_forwarding_arguments_node_enter]&.each { |listener| listener.on_forwarding_arguments_node_enter(node) }
512
+ super
513
+ listeners[:on_forwarding_arguments_node_leave]&.each { |listener| listener.on_forwarding_arguments_node_leave(node) }
514
+ end
515
+
516
+ # Dispatch enter and leave events for ForwardingParameterNode nodes and continue
517
+ # walking the tree.
518
+ def visit_forwarding_parameter_node(node)
519
+ listeners[:on_forwarding_parameter_node_enter]&.each { |listener| listener.on_forwarding_parameter_node_enter(node) }
520
+ super
521
+ listeners[:on_forwarding_parameter_node_leave]&.each { |listener| listener.on_forwarding_parameter_node_leave(node) }
522
+ end
523
+
524
+ # Dispatch enter and leave events for ForwardingSuperNode nodes and continue
525
+ # walking the tree.
526
+ def visit_forwarding_super_node(node)
527
+ listeners[:on_forwarding_super_node_enter]&.each { |listener| listener.on_forwarding_super_node_enter(node) }
528
+ super
529
+ listeners[:on_forwarding_super_node_leave]&.each { |listener| listener.on_forwarding_super_node_leave(node) }
530
+ end
531
+
532
+ # Dispatch enter and leave events for GlobalVariableAndWriteNode nodes and continue
533
+ # walking the tree.
534
+ def visit_global_variable_and_write_node(node)
535
+ listeners[:on_global_variable_and_write_node_enter]&.each { |listener| listener.on_global_variable_and_write_node_enter(node) }
536
+ super
537
+ listeners[:on_global_variable_and_write_node_leave]&.each { |listener| listener.on_global_variable_and_write_node_leave(node) }
538
+ end
539
+
540
+ # Dispatch enter and leave events for GlobalVariableOperatorWriteNode nodes and continue
541
+ # walking the tree.
542
+ def visit_global_variable_operator_write_node(node)
543
+ listeners[:on_global_variable_operator_write_node_enter]&.each { |listener| listener.on_global_variable_operator_write_node_enter(node) }
544
+ super
545
+ listeners[:on_global_variable_operator_write_node_leave]&.each { |listener| listener.on_global_variable_operator_write_node_leave(node) }
546
+ end
547
+
548
+ # Dispatch enter and leave events for GlobalVariableOrWriteNode nodes and continue
549
+ # walking the tree.
550
+ def visit_global_variable_or_write_node(node)
551
+ listeners[:on_global_variable_or_write_node_enter]&.each { |listener| listener.on_global_variable_or_write_node_enter(node) }
552
+ super
553
+ listeners[:on_global_variable_or_write_node_leave]&.each { |listener| listener.on_global_variable_or_write_node_leave(node) }
554
+ end
555
+
556
+ # Dispatch enter and leave events for GlobalVariableReadNode nodes and continue
557
+ # walking the tree.
558
+ def visit_global_variable_read_node(node)
559
+ listeners[:on_global_variable_read_node_enter]&.each { |listener| listener.on_global_variable_read_node_enter(node) }
560
+ super
561
+ listeners[:on_global_variable_read_node_leave]&.each { |listener| listener.on_global_variable_read_node_leave(node) }
562
+ end
563
+
564
+ # Dispatch enter and leave events for GlobalVariableTargetNode nodes and continue
565
+ # walking the tree.
566
+ def visit_global_variable_target_node(node)
567
+ listeners[:on_global_variable_target_node_enter]&.each { |listener| listener.on_global_variable_target_node_enter(node) }
568
+ super
569
+ listeners[:on_global_variable_target_node_leave]&.each { |listener| listener.on_global_variable_target_node_leave(node) }
570
+ end
571
+
572
+ # Dispatch enter and leave events for GlobalVariableWriteNode nodes and continue
573
+ # walking the tree.
574
+ def visit_global_variable_write_node(node)
575
+ listeners[:on_global_variable_write_node_enter]&.each { |listener| listener.on_global_variable_write_node_enter(node) }
576
+ super
577
+ listeners[:on_global_variable_write_node_leave]&.each { |listener| listener.on_global_variable_write_node_leave(node) }
578
+ end
579
+
580
+ # Dispatch enter and leave events for HashNode nodes and continue
581
+ # walking the tree.
582
+ def visit_hash_node(node)
583
+ listeners[:on_hash_node_enter]&.each { |listener| listener.on_hash_node_enter(node) }
584
+ super
585
+ listeners[:on_hash_node_leave]&.each { |listener| listener.on_hash_node_leave(node) }
586
+ end
587
+
588
+ # Dispatch enter and leave events for HashPatternNode nodes and continue
589
+ # walking the tree.
590
+ def visit_hash_pattern_node(node)
591
+ listeners[:on_hash_pattern_node_enter]&.each { |listener| listener.on_hash_pattern_node_enter(node) }
592
+ super
593
+ listeners[:on_hash_pattern_node_leave]&.each { |listener| listener.on_hash_pattern_node_leave(node) }
594
+ end
595
+
596
+ # Dispatch enter and leave events for IfNode nodes and continue
597
+ # walking the tree.
598
+ def visit_if_node(node)
599
+ listeners[:on_if_node_enter]&.each { |listener| listener.on_if_node_enter(node) }
600
+ super
601
+ listeners[:on_if_node_leave]&.each { |listener| listener.on_if_node_leave(node) }
602
+ end
603
+
604
+ # Dispatch enter and leave events for ImaginaryNode nodes and continue
605
+ # walking the tree.
606
+ def visit_imaginary_node(node)
607
+ listeners[:on_imaginary_node_enter]&.each { |listener| listener.on_imaginary_node_enter(node) }
608
+ super
609
+ listeners[:on_imaginary_node_leave]&.each { |listener| listener.on_imaginary_node_leave(node) }
610
+ end
611
+
612
+ # Dispatch enter and leave events for ImplicitNode nodes and continue
613
+ # walking the tree.
614
+ def visit_implicit_node(node)
615
+ listeners[:on_implicit_node_enter]&.each { |listener| listener.on_implicit_node_enter(node) }
616
+ super
617
+ listeners[:on_implicit_node_leave]&.each { |listener| listener.on_implicit_node_leave(node) }
618
+ end
619
+
620
+ # Dispatch enter and leave events for ImplicitRestNode nodes and continue
621
+ # walking the tree.
622
+ def visit_implicit_rest_node(node)
623
+ listeners[:on_implicit_rest_node_enter]&.each { |listener| listener.on_implicit_rest_node_enter(node) }
624
+ super
625
+ listeners[:on_implicit_rest_node_leave]&.each { |listener| listener.on_implicit_rest_node_leave(node) }
626
+ end
627
+
628
+ # Dispatch enter and leave events for InNode nodes and continue
629
+ # walking the tree.
630
+ def visit_in_node(node)
631
+ listeners[:on_in_node_enter]&.each { |listener| listener.on_in_node_enter(node) }
632
+ super
633
+ listeners[:on_in_node_leave]&.each { |listener| listener.on_in_node_leave(node) }
634
+ end
635
+
636
+ # Dispatch enter and leave events for IndexAndWriteNode nodes and continue
637
+ # walking the tree.
638
+ def visit_index_and_write_node(node)
639
+ listeners[:on_index_and_write_node_enter]&.each { |listener| listener.on_index_and_write_node_enter(node) }
640
+ super
641
+ listeners[:on_index_and_write_node_leave]&.each { |listener| listener.on_index_and_write_node_leave(node) }
642
+ end
643
+
644
+ # Dispatch enter and leave events for IndexOperatorWriteNode nodes and continue
645
+ # walking the tree.
646
+ def visit_index_operator_write_node(node)
647
+ listeners[:on_index_operator_write_node_enter]&.each { |listener| listener.on_index_operator_write_node_enter(node) }
648
+ super
649
+ listeners[:on_index_operator_write_node_leave]&.each { |listener| listener.on_index_operator_write_node_leave(node) }
650
+ end
651
+
652
+ # Dispatch enter and leave events for IndexOrWriteNode nodes and continue
653
+ # walking the tree.
654
+ def visit_index_or_write_node(node)
655
+ listeners[:on_index_or_write_node_enter]&.each { |listener| listener.on_index_or_write_node_enter(node) }
656
+ super
657
+ listeners[:on_index_or_write_node_leave]&.each { |listener| listener.on_index_or_write_node_leave(node) }
658
+ end
659
+
660
+ # Dispatch enter and leave events for IndexTargetNode nodes and continue
661
+ # walking the tree.
662
+ def visit_index_target_node(node)
663
+ listeners[:on_index_target_node_enter]&.each { |listener| listener.on_index_target_node_enter(node) }
664
+ super
665
+ listeners[:on_index_target_node_leave]&.each { |listener| listener.on_index_target_node_leave(node) }
666
+ end
667
+
668
+ # Dispatch enter and leave events for InstanceVariableAndWriteNode nodes and continue
669
+ # walking the tree.
670
+ def visit_instance_variable_and_write_node(node)
671
+ listeners[:on_instance_variable_and_write_node_enter]&.each { |listener| listener.on_instance_variable_and_write_node_enter(node) }
672
+ super
673
+ listeners[:on_instance_variable_and_write_node_leave]&.each { |listener| listener.on_instance_variable_and_write_node_leave(node) }
674
+ end
675
+
676
+ # Dispatch enter and leave events for InstanceVariableOperatorWriteNode nodes and continue
677
+ # walking the tree.
678
+ def visit_instance_variable_operator_write_node(node)
679
+ listeners[:on_instance_variable_operator_write_node_enter]&.each { |listener| listener.on_instance_variable_operator_write_node_enter(node) }
680
+ super
681
+ listeners[:on_instance_variable_operator_write_node_leave]&.each { |listener| listener.on_instance_variable_operator_write_node_leave(node) }
682
+ end
683
+
684
+ # Dispatch enter and leave events for InstanceVariableOrWriteNode nodes and continue
685
+ # walking the tree.
686
+ def visit_instance_variable_or_write_node(node)
687
+ listeners[:on_instance_variable_or_write_node_enter]&.each { |listener| listener.on_instance_variable_or_write_node_enter(node) }
688
+ super
689
+ listeners[:on_instance_variable_or_write_node_leave]&.each { |listener| listener.on_instance_variable_or_write_node_leave(node) }
690
+ end
691
+
692
+ # Dispatch enter and leave events for InstanceVariableReadNode nodes and continue
693
+ # walking the tree.
694
+ def visit_instance_variable_read_node(node)
695
+ listeners[:on_instance_variable_read_node_enter]&.each { |listener| listener.on_instance_variable_read_node_enter(node) }
696
+ super
697
+ listeners[:on_instance_variable_read_node_leave]&.each { |listener| listener.on_instance_variable_read_node_leave(node) }
698
+ end
699
+
700
+ # Dispatch enter and leave events for InstanceVariableTargetNode nodes and continue
701
+ # walking the tree.
702
+ def visit_instance_variable_target_node(node)
703
+ listeners[:on_instance_variable_target_node_enter]&.each { |listener| listener.on_instance_variable_target_node_enter(node) }
704
+ super
705
+ listeners[:on_instance_variable_target_node_leave]&.each { |listener| listener.on_instance_variable_target_node_leave(node) }
706
+ end
707
+
708
+ # Dispatch enter and leave events for InstanceVariableWriteNode nodes and continue
709
+ # walking the tree.
710
+ def visit_instance_variable_write_node(node)
711
+ listeners[:on_instance_variable_write_node_enter]&.each { |listener| listener.on_instance_variable_write_node_enter(node) }
712
+ super
713
+ listeners[:on_instance_variable_write_node_leave]&.each { |listener| listener.on_instance_variable_write_node_leave(node) }
714
+ end
715
+
716
+ # Dispatch enter and leave events for IntegerNode nodes and continue
717
+ # walking the tree.
718
+ def visit_integer_node(node)
719
+ listeners[:on_integer_node_enter]&.each { |listener| listener.on_integer_node_enter(node) }
720
+ super
721
+ listeners[:on_integer_node_leave]&.each { |listener| listener.on_integer_node_leave(node) }
722
+ end
723
+
724
+ # Dispatch enter and leave events for InterpolatedMatchLastLineNode nodes and continue
725
+ # walking the tree.
726
+ def visit_interpolated_match_last_line_node(node)
727
+ listeners[:on_interpolated_match_last_line_node_enter]&.each { |listener| listener.on_interpolated_match_last_line_node_enter(node) }
728
+ super
729
+ listeners[:on_interpolated_match_last_line_node_leave]&.each { |listener| listener.on_interpolated_match_last_line_node_leave(node) }
730
+ end
731
+
732
+ # Dispatch enter and leave events for InterpolatedRegularExpressionNode nodes and continue
733
+ # walking the tree.
734
+ def visit_interpolated_regular_expression_node(node)
735
+ listeners[:on_interpolated_regular_expression_node_enter]&.each { |listener| listener.on_interpolated_regular_expression_node_enter(node) }
736
+ super
737
+ listeners[:on_interpolated_regular_expression_node_leave]&.each { |listener| listener.on_interpolated_regular_expression_node_leave(node) }
738
+ end
739
+
740
+ # Dispatch enter and leave events for InterpolatedStringNode nodes and continue
741
+ # walking the tree.
742
+ def visit_interpolated_string_node(node)
743
+ listeners[:on_interpolated_string_node_enter]&.each { |listener| listener.on_interpolated_string_node_enter(node) }
744
+ super
745
+ listeners[:on_interpolated_string_node_leave]&.each { |listener| listener.on_interpolated_string_node_leave(node) }
746
+ end
747
+
748
+ # Dispatch enter and leave events for InterpolatedSymbolNode nodes and continue
749
+ # walking the tree.
750
+ def visit_interpolated_symbol_node(node)
751
+ listeners[:on_interpolated_symbol_node_enter]&.each { |listener| listener.on_interpolated_symbol_node_enter(node) }
752
+ super
753
+ listeners[:on_interpolated_symbol_node_leave]&.each { |listener| listener.on_interpolated_symbol_node_leave(node) }
754
+ end
755
+
756
+ # Dispatch enter and leave events for InterpolatedXStringNode nodes and continue
757
+ # walking the tree.
758
+ def visit_interpolated_x_string_node(node)
759
+ listeners[:on_interpolated_x_string_node_enter]&.each { |listener| listener.on_interpolated_x_string_node_enter(node) }
760
+ super
761
+ listeners[:on_interpolated_x_string_node_leave]&.each { |listener| listener.on_interpolated_x_string_node_leave(node) }
762
+ end
763
+
764
+ # Dispatch enter and leave events for KeywordHashNode nodes and continue
765
+ # walking the tree.
766
+ def visit_keyword_hash_node(node)
767
+ listeners[:on_keyword_hash_node_enter]&.each { |listener| listener.on_keyword_hash_node_enter(node) }
768
+ super
769
+ listeners[:on_keyword_hash_node_leave]&.each { |listener| listener.on_keyword_hash_node_leave(node) }
770
+ end
771
+
772
+ # Dispatch enter and leave events for KeywordRestParameterNode nodes and continue
773
+ # walking the tree.
774
+ def visit_keyword_rest_parameter_node(node)
775
+ listeners[:on_keyword_rest_parameter_node_enter]&.each { |listener| listener.on_keyword_rest_parameter_node_enter(node) }
776
+ super
777
+ listeners[:on_keyword_rest_parameter_node_leave]&.each { |listener| listener.on_keyword_rest_parameter_node_leave(node) }
778
+ end
779
+
780
+ # Dispatch enter and leave events for LambdaNode nodes and continue
781
+ # walking the tree.
782
+ def visit_lambda_node(node)
783
+ listeners[:on_lambda_node_enter]&.each { |listener| listener.on_lambda_node_enter(node) }
784
+ super
785
+ listeners[:on_lambda_node_leave]&.each { |listener| listener.on_lambda_node_leave(node) }
786
+ end
787
+
788
+ # Dispatch enter and leave events for LocalVariableAndWriteNode nodes and continue
789
+ # walking the tree.
790
+ def visit_local_variable_and_write_node(node)
791
+ listeners[:on_local_variable_and_write_node_enter]&.each { |listener| listener.on_local_variable_and_write_node_enter(node) }
792
+ super
793
+ listeners[:on_local_variable_and_write_node_leave]&.each { |listener| listener.on_local_variable_and_write_node_leave(node) }
794
+ end
795
+
796
+ # Dispatch enter and leave events for LocalVariableOperatorWriteNode nodes and continue
797
+ # walking the tree.
798
+ def visit_local_variable_operator_write_node(node)
799
+ listeners[:on_local_variable_operator_write_node_enter]&.each { |listener| listener.on_local_variable_operator_write_node_enter(node) }
800
+ super
801
+ listeners[:on_local_variable_operator_write_node_leave]&.each { |listener| listener.on_local_variable_operator_write_node_leave(node) }
802
+ end
803
+
804
+ # Dispatch enter and leave events for LocalVariableOrWriteNode nodes and continue
805
+ # walking the tree.
806
+ def visit_local_variable_or_write_node(node)
807
+ listeners[:on_local_variable_or_write_node_enter]&.each { |listener| listener.on_local_variable_or_write_node_enter(node) }
808
+ super
809
+ listeners[:on_local_variable_or_write_node_leave]&.each { |listener| listener.on_local_variable_or_write_node_leave(node) }
810
+ end
811
+
812
+ # Dispatch enter and leave events for LocalVariableReadNode nodes and continue
813
+ # walking the tree.
814
+ def visit_local_variable_read_node(node)
815
+ listeners[:on_local_variable_read_node_enter]&.each { |listener| listener.on_local_variable_read_node_enter(node) }
816
+ super
817
+ listeners[:on_local_variable_read_node_leave]&.each { |listener| listener.on_local_variable_read_node_leave(node) }
818
+ end
819
+
820
+ # Dispatch enter and leave events for LocalVariableTargetNode nodes and continue
821
+ # walking the tree.
822
+ def visit_local_variable_target_node(node)
823
+ listeners[:on_local_variable_target_node_enter]&.each { |listener| listener.on_local_variable_target_node_enter(node) }
824
+ super
825
+ listeners[:on_local_variable_target_node_leave]&.each { |listener| listener.on_local_variable_target_node_leave(node) }
826
+ end
827
+
828
+ # Dispatch enter and leave events for LocalVariableWriteNode nodes and continue
829
+ # walking the tree.
830
+ def visit_local_variable_write_node(node)
831
+ listeners[:on_local_variable_write_node_enter]&.each { |listener| listener.on_local_variable_write_node_enter(node) }
832
+ super
833
+ listeners[:on_local_variable_write_node_leave]&.each { |listener| listener.on_local_variable_write_node_leave(node) }
834
+ end
835
+
836
+ # Dispatch enter and leave events for MatchLastLineNode nodes and continue
837
+ # walking the tree.
838
+ def visit_match_last_line_node(node)
839
+ listeners[:on_match_last_line_node_enter]&.each { |listener| listener.on_match_last_line_node_enter(node) }
840
+ super
841
+ listeners[:on_match_last_line_node_leave]&.each { |listener| listener.on_match_last_line_node_leave(node) }
842
+ end
843
+
844
+ # Dispatch enter and leave events for MatchPredicateNode nodes and continue
845
+ # walking the tree.
846
+ def visit_match_predicate_node(node)
847
+ listeners[:on_match_predicate_node_enter]&.each { |listener| listener.on_match_predicate_node_enter(node) }
848
+ super
849
+ listeners[:on_match_predicate_node_leave]&.each { |listener| listener.on_match_predicate_node_leave(node) }
850
+ end
851
+
852
+ # Dispatch enter and leave events for MatchRequiredNode nodes and continue
853
+ # walking the tree.
854
+ def visit_match_required_node(node)
855
+ listeners[:on_match_required_node_enter]&.each { |listener| listener.on_match_required_node_enter(node) }
856
+ super
857
+ listeners[:on_match_required_node_leave]&.each { |listener| listener.on_match_required_node_leave(node) }
858
+ end
859
+
860
+ # Dispatch enter and leave events for MatchWriteNode nodes and continue
861
+ # walking the tree.
862
+ def visit_match_write_node(node)
863
+ listeners[:on_match_write_node_enter]&.each { |listener| listener.on_match_write_node_enter(node) }
864
+ super
865
+ listeners[:on_match_write_node_leave]&.each { |listener| listener.on_match_write_node_leave(node) }
866
+ end
867
+
868
+ # Dispatch enter and leave events for MissingNode nodes and continue
869
+ # walking the tree.
870
+ def visit_missing_node(node)
871
+ listeners[:on_missing_node_enter]&.each { |listener| listener.on_missing_node_enter(node) }
872
+ super
873
+ listeners[:on_missing_node_leave]&.each { |listener| listener.on_missing_node_leave(node) }
874
+ end
875
+
876
+ # Dispatch enter and leave events for ModuleNode nodes and continue
877
+ # walking the tree.
878
+ def visit_module_node(node)
879
+ listeners[:on_module_node_enter]&.each { |listener| listener.on_module_node_enter(node) }
880
+ super
881
+ listeners[:on_module_node_leave]&.each { |listener| listener.on_module_node_leave(node) }
882
+ end
883
+
884
+ # Dispatch enter and leave events for MultiTargetNode nodes and continue
885
+ # walking the tree.
886
+ def visit_multi_target_node(node)
887
+ listeners[:on_multi_target_node_enter]&.each { |listener| listener.on_multi_target_node_enter(node) }
888
+ super
889
+ listeners[:on_multi_target_node_leave]&.each { |listener| listener.on_multi_target_node_leave(node) }
890
+ end
891
+
892
+ # Dispatch enter and leave events for MultiWriteNode nodes and continue
893
+ # walking the tree.
894
+ def visit_multi_write_node(node)
895
+ listeners[:on_multi_write_node_enter]&.each { |listener| listener.on_multi_write_node_enter(node) }
896
+ super
897
+ listeners[:on_multi_write_node_leave]&.each { |listener| listener.on_multi_write_node_leave(node) }
898
+ end
899
+
900
+ # Dispatch enter and leave events for NextNode nodes and continue
901
+ # walking the tree.
902
+ def visit_next_node(node)
903
+ listeners[:on_next_node_enter]&.each { |listener| listener.on_next_node_enter(node) }
904
+ super
905
+ listeners[:on_next_node_leave]&.each { |listener| listener.on_next_node_leave(node) }
906
+ end
907
+
908
+ # Dispatch enter and leave events for NilNode nodes and continue
909
+ # walking the tree.
910
+ def visit_nil_node(node)
911
+ listeners[:on_nil_node_enter]&.each { |listener| listener.on_nil_node_enter(node) }
912
+ super
913
+ listeners[:on_nil_node_leave]&.each { |listener| listener.on_nil_node_leave(node) }
914
+ end
915
+
916
+ # Dispatch enter and leave events for NoKeywordsParameterNode nodes and continue
917
+ # walking the tree.
918
+ def visit_no_keywords_parameter_node(node)
919
+ listeners[:on_no_keywords_parameter_node_enter]&.each { |listener| listener.on_no_keywords_parameter_node_enter(node) }
920
+ super
921
+ listeners[:on_no_keywords_parameter_node_leave]&.each { |listener| listener.on_no_keywords_parameter_node_leave(node) }
922
+ end
923
+
924
+ # Dispatch enter and leave events for NumberedParametersNode nodes and continue
925
+ # walking the tree.
926
+ def visit_numbered_parameters_node(node)
927
+ listeners[:on_numbered_parameters_node_enter]&.each { |listener| listener.on_numbered_parameters_node_enter(node) }
928
+ super
929
+ listeners[:on_numbered_parameters_node_leave]&.each { |listener| listener.on_numbered_parameters_node_leave(node) }
930
+ end
931
+
932
+ # Dispatch enter and leave events for NumberedReferenceReadNode nodes and continue
933
+ # walking the tree.
934
+ def visit_numbered_reference_read_node(node)
935
+ listeners[:on_numbered_reference_read_node_enter]&.each { |listener| listener.on_numbered_reference_read_node_enter(node) }
936
+ super
937
+ listeners[:on_numbered_reference_read_node_leave]&.each { |listener| listener.on_numbered_reference_read_node_leave(node) }
938
+ end
939
+
940
+ # Dispatch enter and leave events for OptionalKeywordParameterNode nodes and continue
941
+ # walking the tree.
942
+ def visit_optional_keyword_parameter_node(node)
943
+ listeners[:on_optional_keyword_parameter_node_enter]&.each { |listener| listener.on_optional_keyword_parameter_node_enter(node) }
944
+ super
945
+ listeners[:on_optional_keyword_parameter_node_leave]&.each { |listener| listener.on_optional_keyword_parameter_node_leave(node) }
946
+ end
947
+
948
+ # Dispatch enter and leave events for OptionalParameterNode nodes and continue
949
+ # walking the tree.
950
+ def visit_optional_parameter_node(node)
951
+ listeners[:on_optional_parameter_node_enter]&.each { |listener| listener.on_optional_parameter_node_enter(node) }
952
+ super
953
+ listeners[:on_optional_parameter_node_leave]&.each { |listener| listener.on_optional_parameter_node_leave(node) }
954
+ end
955
+
956
+ # Dispatch enter and leave events for OrNode nodes and continue
957
+ # walking the tree.
958
+ def visit_or_node(node)
959
+ listeners[:on_or_node_enter]&.each { |listener| listener.on_or_node_enter(node) }
960
+ super
961
+ listeners[:on_or_node_leave]&.each { |listener| listener.on_or_node_leave(node) }
962
+ end
963
+
964
+ # Dispatch enter and leave events for ParametersNode nodes and continue
965
+ # walking the tree.
966
+ def visit_parameters_node(node)
967
+ listeners[:on_parameters_node_enter]&.each { |listener| listener.on_parameters_node_enter(node) }
968
+ super
969
+ listeners[:on_parameters_node_leave]&.each { |listener| listener.on_parameters_node_leave(node) }
970
+ end
971
+
972
+ # Dispatch enter and leave events for ParenthesesNode nodes and continue
973
+ # walking the tree.
974
+ def visit_parentheses_node(node)
975
+ listeners[:on_parentheses_node_enter]&.each { |listener| listener.on_parentheses_node_enter(node) }
976
+ super
977
+ listeners[:on_parentheses_node_leave]&.each { |listener| listener.on_parentheses_node_leave(node) }
978
+ end
979
+
980
+ # Dispatch enter and leave events for PinnedExpressionNode nodes and continue
981
+ # walking the tree.
982
+ def visit_pinned_expression_node(node)
983
+ listeners[:on_pinned_expression_node_enter]&.each { |listener| listener.on_pinned_expression_node_enter(node) }
984
+ super
985
+ listeners[:on_pinned_expression_node_leave]&.each { |listener| listener.on_pinned_expression_node_leave(node) }
986
+ end
987
+
988
+ # Dispatch enter and leave events for PinnedVariableNode nodes and continue
989
+ # walking the tree.
990
+ def visit_pinned_variable_node(node)
991
+ listeners[:on_pinned_variable_node_enter]&.each { |listener| listener.on_pinned_variable_node_enter(node) }
992
+ super
993
+ listeners[:on_pinned_variable_node_leave]&.each { |listener| listener.on_pinned_variable_node_leave(node) }
994
+ end
995
+
996
+ # Dispatch enter and leave events for PostExecutionNode nodes and continue
997
+ # walking the tree.
998
+ def visit_post_execution_node(node)
999
+ listeners[:on_post_execution_node_enter]&.each { |listener| listener.on_post_execution_node_enter(node) }
1000
+ super
1001
+ listeners[:on_post_execution_node_leave]&.each { |listener| listener.on_post_execution_node_leave(node) }
1002
+ end
1003
+
1004
+ # Dispatch enter and leave events for PreExecutionNode nodes and continue
1005
+ # walking the tree.
1006
+ def visit_pre_execution_node(node)
1007
+ listeners[:on_pre_execution_node_enter]&.each { |listener| listener.on_pre_execution_node_enter(node) }
1008
+ super
1009
+ listeners[:on_pre_execution_node_leave]&.each { |listener| listener.on_pre_execution_node_leave(node) }
1010
+ end
1011
+
1012
+ # Dispatch enter and leave events for ProgramNode nodes and continue
1013
+ # walking the tree.
1014
+ def visit_program_node(node)
1015
+ listeners[:on_program_node_enter]&.each { |listener| listener.on_program_node_enter(node) }
1016
+ super
1017
+ listeners[:on_program_node_leave]&.each { |listener| listener.on_program_node_leave(node) }
1018
+ end
1019
+
1020
+ # Dispatch enter and leave events for RangeNode nodes and continue
1021
+ # walking the tree.
1022
+ def visit_range_node(node)
1023
+ listeners[:on_range_node_enter]&.each { |listener| listener.on_range_node_enter(node) }
1024
+ super
1025
+ listeners[:on_range_node_leave]&.each { |listener| listener.on_range_node_leave(node) }
1026
+ end
1027
+
1028
+ # Dispatch enter and leave events for RationalNode nodes and continue
1029
+ # walking the tree.
1030
+ def visit_rational_node(node)
1031
+ listeners[:on_rational_node_enter]&.each { |listener| listener.on_rational_node_enter(node) }
1032
+ super
1033
+ listeners[:on_rational_node_leave]&.each { |listener| listener.on_rational_node_leave(node) }
1034
+ end
1035
+
1036
+ # Dispatch enter and leave events for RedoNode nodes and continue
1037
+ # walking the tree.
1038
+ def visit_redo_node(node)
1039
+ listeners[:on_redo_node_enter]&.each { |listener| listener.on_redo_node_enter(node) }
1040
+ super
1041
+ listeners[:on_redo_node_leave]&.each { |listener| listener.on_redo_node_leave(node) }
1042
+ end
1043
+
1044
+ # Dispatch enter and leave events for RegularExpressionNode nodes and continue
1045
+ # walking the tree.
1046
+ def visit_regular_expression_node(node)
1047
+ listeners[:on_regular_expression_node_enter]&.each { |listener| listener.on_regular_expression_node_enter(node) }
1048
+ super
1049
+ listeners[:on_regular_expression_node_leave]&.each { |listener| listener.on_regular_expression_node_leave(node) }
1050
+ end
1051
+
1052
+ # Dispatch enter and leave events for RequiredKeywordParameterNode nodes and continue
1053
+ # walking the tree.
1054
+ def visit_required_keyword_parameter_node(node)
1055
+ listeners[:on_required_keyword_parameter_node_enter]&.each { |listener| listener.on_required_keyword_parameter_node_enter(node) }
1056
+ super
1057
+ listeners[:on_required_keyword_parameter_node_leave]&.each { |listener| listener.on_required_keyword_parameter_node_leave(node) }
1058
+ end
1059
+
1060
+ # Dispatch enter and leave events for RequiredParameterNode nodes and continue
1061
+ # walking the tree.
1062
+ def visit_required_parameter_node(node)
1063
+ listeners[:on_required_parameter_node_enter]&.each { |listener| listener.on_required_parameter_node_enter(node) }
1064
+ super
1065
+ listeners[:on_required_parameter_node_leave]&.each { |listener| listener.on_required_parameter_node_leave(node) }
1066
+ end
1067
+
1068
+ # Dispatch enter and leave events for RescueModifierNode nodes and continue
1069
+ # walking the tree.
1070
+ def visit_rescue_modifier_node(node)
1071
+ listeners[:on_rescue_modifier_node_enter]&.each { |listener| listener.on_rescue_modifier_node_enter(node) }
1072
+ super
1073
+ listeners[:on_rescue_modifier_node_leave]&.each { |listener| listener.on_rescue_modifier_node_leave(node) }
1074
+ end
1075
+
1076
+ # Dispatch enter and leave events for RescueNode nodes and continue
1077
+ # walking the tree.
1078
+ def visit_rescue_node(node)
1079
+ listeners[:on_rescue_node_enter]&.each { |listener| listener.on_rescue_node_enter(node) }
1080
+ super
1081
+ listeners[:on_rescue_node_leave]&.each { |listener| listener.on_rescue_node_leave(node) }
1082
+ end
1083
+
1084
+ # Dispatch enter and leave events for RestParameterNode nodes and continue
1085
+ # walking the tree.
1086
+ def visit_rest_parameter_node(node)
1087
+ listeners[:on_rest_parameter_node_enter]&.each { |listener| listener.on_rest_parameter_node_enter(node) }
1088
+ super
1089
+ listeners[:on_rest_parameter_node_leave]&.each { |listener| listener.on_rest_parameter_node_leave(node) }
1090
+ end
1091
+
1092
+ # Dispatch enter and leave events for RetryNode nodes and continue
1093
+ # walking the tree.
1094
+ def visit_retry_node(node)
1095
+ listeners[:on_retry_node_enter]&.each { |listener| listener.on_retry_node_enter(node) }
1096
+ super
1097
+ listeners[:on_retry_node_leave]&.each { |listener| listener.on_retry_node_leave(node) }
1098
+ end
1099
+
1100
+ # Dispatch enter and leave events for ReturnNode nodes and continue
1101
+ # walking the tree.
1102
+ def visit_return_node(node)
1103
+ listeners[:on_return_node_enter]&.each { |listener| listener.on_return_node_enter(node) }
1104
+ super
1105
+ listeners[:on_return_node_leave]&.each { |listener| listener.on_return_node_leave(node) }
1106
+ end
1107
+
1108
+ # Dispatch enter and leave events for SelfNode nodes and continue
1109
+ # walking the tree.
1110
+ def visit_self_node(node)
1111
+ listeners[:on_self_node_enter]&.each { |listener| listener.on_self_node_enter(node) }
1112
+ super
1113
+ listeners[:on_self_node_leave]&.each { |listener| listener.on_self_node_leave(node) }
1114
+ end
1115
+
1116
+ # Dispatch enter and leave events for SingletonClassNode nodes and continue
1117
+ # walking the tree.
1118
+ def visit_singleton_class_node(node)
1119
+ listeners[:on_singleton_class_node_enter]&.each { |listener| listener.on_singleton_class_node_enter(node) }
1120
+ super
1121
+ listeners[:on_singleton_class_node_leave]&.each { |listener| listener.on_singleton_class_node_leave(node) }
1122
+ end
1123
+
1124
+ # Dispatch enter and leave events for SourceEncodingNode nodes and continue
1125
+ # walking the tree.
1126
+ def visit_source_encoding_node(node)
1127
+ listeners[:on_source_encoding_node_enter]&.each { |listener| listener.on_source_encoding_node_enter(node) }
1128
+ super
1129
+ listeners[:on_source_encoding_node_leave]&.each { |listener| listener.on_source_encoding_node_leave(node) }
1130
+ end
1131
+
1132
+ # Dispatch enter and leave events for SourceFileNode nodes and continue
1133
+ # walking the tree.
1134
+ def visit_source_file_node(node)
1135
+ listeners[:on_source_file_node_enter]&.each { |listener| listener.on_source_file_node_enter(node) }
1136
+ super
1137
+ listeners[:on_source_file_node_leave]&.each { |listener| listener.on_source_file_node_leave(node) }
1138
+ end
1139
+
1140
+ # Dispatch enter and leave events for SourceLineNode nodes and continue
1141
+ # walking the tree.
1142
+ def visit_source_line_node(node)
1143
+ listeners[:on_source_line_node_enter]&.each { |listener| listener.on_source_line_node_enter(node) }
1144
+ super
1145
+ listeners[:on_source_line_node_leave]&.each { |listener| listener.on_source_line_node_leave(node) }
1146
+ end
1147
+
1148
+ # Dispatch enter and leave events for SplatNode nodes and continue
1149
+ # walking the tree.
1150
+ def visit_splat_node(node)
1151
+ listeners[:on_splat_node_enter]&.each { |listener| listener.on_splat_node_enter(node) }
1152
+ super
1153
+ listeners[:on_splat_node_leave]&.each { |listener| listener.on_splat_node_leave(node) }
1154
+ end
1155
+
1156
+ # Dispatch enter and leave events for StatementsNode nodes and continue
1157
+ # walking the tree.
1158
+ def visit_statements_node(node)
1159
+ listeners[:on_statements_node_enter]&.each { |listener| listener.on_statements_node_enter(node) }
1160
+ super
1161
+ listeners[:on_statements_node_leave]&.each { |listener| listener.on_statements_node_leave(node) }
1162
+ end
1163
+
1164
+ # Dispatch enter and leave events for StringNode nodes and continue
1165
+ # walking the tree.
1166
+ def visit_string_node(node)
1167
+ listeners[:on_string_node_enter]&.each { |listener| listener.on_string_node_enter(node) }
1168
+ super
1169
+ listeners[:on_string_node_leave]&.each { |listener| listener.on_string_node_leave(node) }
1170
+ end
1171
+
1172
+ # Dispatch enter and leave events for SuperNode nodes and continue
1173
+ # walking the tree.
1174
+ def visit_super_node(node)
1175
+ listeners[:on_super_node_enter]&.each { |listener| listener.on_super_node_enter(node) }
1176
+ super
1177
+ listeners[:on_super_node_leave]&.each { |listener| listener.on_super_node_leave(node) }
1178
+ end
1179
+
1180
+ # Dispatch enter and leave events for SymbolNode nodes and continue
1181
+ # walking the tree.
1182
+ def visit_symbol_node(node)
1183
+ listeners[:on_symbol_node_enter]&.each { |listener| listener.on_symbol_node_enter(node) }
1184
+ super
1185
+ listeners[:on_symbol_node_leave]&.each { |listener| listener.on_symbol_node_leave(node) }
1186
+ end
1187
+
1188
+ # Dispatch enter and leave events for TrueNode nodes and continue
1189
+ # walking the tree.
1190
+ def visit_true_node(node)
1191
+ listeners[:on_true_node_enter]&.each { |listener| listener.on_true_node_enter(node) }
1192
+ super
1193
+ listeners[:on_true_node_leave]&.each { |listener| listener.on_true_node_leave(node) }
1194
+ end
1195
+
1196
+ # Dispatch enter and leave events for UndefNode nodes and continue
1197
+ # walking the tree.
1198
+ def visit_undef_node(node)
1199
+ listeners[:on_undef_node_enter]&.each { |listener| listener.on_undef_node_enter(node) }
1200
+ super
1201
+ listeners[:on_undef_node_leave]&.each { |listener| listener.on_undef_node_leave(node) }
1202
+ end
1203
+
1204
+ # Dispatch enter and leave events for UnlessNode nodes and continue
1205
+ # walking the tree.
1206
+ def visit_unless_node(node)
1207
+ listeners[:on_unless_node_enter]&.each { |listener| listener.on_unless_node_enter(node) }
1208
+ super
1209
+ listeners[:on_unless_node_leave]&.each { |listener| listener.on_unless_node_leave(node) }
1210
+ end
1211
+
1212
+ # Dispatch enter and leave events for UntilNode nodes and continue
1213
+ # walking the tree.
1214
+ def visit_until_node(node)
1215
+ listeners[:on_until_node_enter]&.each { |listener| listener.on_until_node_enter(node) }
1216
+ super
1217
+ listeners[:on_until_node_leave]&.each { |listener| listener.on_until_node_leave(node) }
1218
+ end
1219
+
1220
+ # Dispatch enter and leave events for WhenNode nodes and continue
1221
+ # walking the tree.
1222
+ def visit_when_node(node)
1223
+ listeners[:on_when_node_enter]&.each { |listener| listener.on_when_node_enter(node) }
1224
+ super
1225
+ listeners[:on_when_node_leave]&.each { |listener| listener.on_when_node_leave(node) }
1226
+ end
1227
+
1228
+ # Dispatch enter and leave events for WhileNode nodes and continue
1229
+ # walking the tree.
1230
+ def visit_while_node(node)
1231
+ listeners[:on_while_node_enter]&.each { |listener| listener.on_while_node_enter(node) }
1232
+ super
1233
+ listeners[:on_while_node_leave]&.each { |listener| listener.on_while_node_leave(node) }
1234
+ end
1235
+
1236
+ # Dispatch enter and leave events for XStringNode nodes and continue
1237
+ # walking the tree.
1238
+ def visit_x_string_node(node)
1239
+ listeners[:on_x_string_node_enter]&.each { |listener| listener.on_x_string_node_enter(node) }
1240
+ super
1241
+ listeners[:on_x_string_node_leave]&.each { |listener| listener.on_x_string_node_leave(node) }
1242
+ end
1243
+
1244
+ # Dispatch enter and leave events for YieldNode nodes and continue
1245
+ # walking the tree.
1246
+ def visit_yield_node(node)
1247
+ listeners[:on_yield_node_enter]&.each { |listener| listener.on_yield_node_enter(node) }
1248
+ super
1249
+ listeners[:on_yield_node_leave]&.each { |listener| listener.on_yield_node_leave(node) }
1250
+ end
1251
+
1252
+ class DispatchOnce < Visitor # :nodoc:
1253
+ attr_reader :listeners
1254
+
1255
+ def initialize(listeners)
1256
+ @listeners = listeners
1257
+ end
1258
+
1259
+ # Dispatch enter and leave events for AliasGlobalVariableNode nodes.
1260
+ def visit_alias_global_variable_node(node)
1261
+ listeners[:on_alias_global_variable_node_enter]&.each { |listener| listener.on_alias_global_variable_node_enter(node) }
1262
+ listeners[:on_alias_global_variable_node_leave]&.each { |listener| listener.on_alias_global_variable_node_leave(node) }
1263
+ end
1264
+
1265
+ # Dispatch enter and leave events for AliasMethodNode nodes.
1266
+ def visit_alias_method_node(node)
1267
+ listeners[:on_alias_method_node_enter]&.each { |listener| listener.on_alias_method_node_enter(node) }
1268
+ listeners[:on_alias_method_node_leave]&.each { |listener| listener.on_alias_method_node_leave(node) }
1269
+ end
1270
+
1271
+ # Dispatch enter and leave events for AlternationPatternNode nodes.
1272
+ def visit_alternation_pattern_node(node)
1273
+ listeners[:on_alternation_pattern_node_enter]&.each { |listener| listener.on_alternation_pattern_node_enter(node) }
1274
+ listeners[:on_alternation_pattern_node_leave]&.each { |listener| listener.on_alternation_pattern_node_leave(node) }
1275
+ end
1276
+
1277
+ # Dispatch enter and leave events for AndNode nodes.
1278
+ def visit_and_node(node)
1279
+ listeners[:on_and_node_enter]&.each { |listener| listener.on_and_node_enter(node) }
1280
+ listeners[:on_and_node_leave]&.each { |listener| listener.on_and_node_leave(node) }
1281
+ end
1282
+
1283
+ # Dispatch enter and leave events for ArgumentsNode nodes.
1284
+ def visit_arguments_node(node)
1285
+ listeners[:on_arguments_node_enter]&.each { |listener| listener.on_arguments_node_enter(node) }
1286
+ listeners[:on_arguments_node_leave]&.each { |listener| listener.on_arguments_node_leave(node) }
1287
+ end
1288
+
1289
+ # Dispatch enter and leave events for ArrayNode nodes.
1290
+ def visit_array_node(node)
1291
+ listeners[:on_array_node_enter]&.each { |listener| listener.on_array_node_enter(node) }
1292
+ listeners[:on_array_node_leave]&.each { |listener| listener.on_array_node_leave(node) }
1293
+ end
1294
+
1295
+ # Dispatch enter and leave events for ArrayPatternNode nodes.
1296
+ def visit_array_pattern_node(node)
1297
+ listeners[:on_array_pattern_node_enter]&.each { |listener| listener.on_array_pattern_node_enter(node) }
1298
+ listeners[:on_array_pattern_node_leave]&.each { |listener| listener.on_array_pattern_node_leave(node) }
1299
+ end
1300
+
1301
+ # Dispatch enter and leave events for AssocNode nodes.
1302
+ def visit_assoc_node(node)
1303
+ listeners[:on_assoc_node_enter]&.each { |listener| listener.on_assoc_node_enter(node) }
1304
+ listeners[:on_assoc_node_leave]&.each { |listener| listener.on_assoc_node_leave(node) }
1305
+ end
1306
+
1307
+ # Dispatch enter and leave events for AssocSplatNode nodes.
1308
+ def visit_assoc_splat_node(node)
1309
+ listeners[:on_assoc_splat_node_enter]&.each { |listener| listener.on_assoc_splat_node_enter(node) }
1310
+ listeners[:on_assoc_splat_node_leave]&.each { |listener| listener.on_assoc_splat_node_leave(node) }
1311
+ end
1312
+
1313
+ # Dispatch enter and leave events for BackReferenceReadNode nodes.
1314
+ def visit_back_reference_read_node(node)
1315
+ listeners[:on_back_reference_read_node_enter]&.each { |listener| listener.on_back_reference_read_node_enter(node) }
1316
+ listeners[:on_back_reference_read_node_leave]&.each { |listener| listener.on_back_reference_read_node_leave(node) }
1317
+ end
1318
+
1319
+ # Dispatch enter and leave events for BeginNode nodes.
1320
+ def visit_begin_node(node)
1321
+ listeners[:on_begin_node_enter]&.each { |listener| listener.on_begin_node_enter(node) }
1322
+ listeners[:on_begin_node_leave]&.each { |listener| listener.on_begin_node_leave(node) }
1323
+ end
1324
+
1325
+ # Dispatch enter and leave events for BlockArgumentNode nodes.
1326
+ def visit_block_argument_node(node)
1327
+ listeners[:on_block_argument_node_enter]&.each { |listener| listener.on_block_argument_node_enter(node) }
1328
+ listeners[:on_block_argument_node_leave]&.each { |listener| listener.on_block_argument_node_leave(node) }
1329
+ end
1330
+
1331
+ # Dispatch enter and leave events for BlockLocalVariableNode nodes.
1332
+ def visit_block_local_variable_node(node)
1333
+ listeners[:on_block_local_variable_node_enter]&.each { |listener| listener.on_block_local_variable_node_enter(node) }
1334
+ listeners[:on_block_local_variable_node_leave]&.each { |listener| listener.on_block_local_variable_node_leave(node) }
1335
+ end
1336
+
1337
+ # Dispatch enter and leave events for BlockNode nodes.
1338
+ def visit_block_node(node)
1339
+ listeners[:on_block_node_enter]&.each { |listener| listener.on_block_node_enter(node) }
1340
+ listeners[:on_block_node_leave]&.each { |listener| listener.on_block_node_leave(node) }
1341
+ end
1342
+
1343
+ # Dispatch enter and leave events for BlockParameterNode nodes.
1344
+ def visit_block_parameter_node(node)
1345
+ listeners[:on_block_parameter_node_enter]&.each { |listener| listener.on_block_parameter_node_enter(node) }
1346
+ listeners[:on_block_parameter_node_leave]&.each { |listener| listener.on_block_parameter_node_leave(node) }
1347
+ end
1348
+
1349
+ # Dispatch enter and leave events for BlockParametersNode nodes.
1350
+ def visit_block_parameters_node(node)
1351
+ listeners[:on_block_parameters_node_enter]&.each { |listener| listener.on_block_parameters_node_enter(node) }
1352
+ listeners[:on_block_parameters_node_leave]&.each { |listener| listener.on_block_parameters_node_leave(node) }
1353
+ end
1354
+
1355
+ # Dispatch enter and leave events for BreakNode nodes.
1356
+ def visit_break_node(node)
1357
+ listeners[:on_break_node_enter]&.each { |listener| listener.on_break_node_enter(node) }
1358
+ listeners[:on_break_node_leave]&.each { |listener| listener.on_break_node_leave(node) }
1359
+ end
1360
+
1361
+ # Dispatch enter and leave events for CallAndWriteNode nodes.
1362
+ def visit_call_and_write_node(node)
1363
+ listeners[:on_call_and_write_node_enter]&.each { |listener| listener.on_call_and_write_node_enter(node) }
1364
+ listeners[:on_call_and_write_node_leave]&.each { |listener| listener.on_call_and_write_node_leave(node) }
1365
+ end
1366
+
1367
+ # Dispatch enter and leave events for CallNode nodes.
1368
+ def visit_call_node(node)
1369
+ listeners[:on_call_node_enter]&.each { |listener| listener.on_call_node_enter(node) }
1370
+ listeners[:on_call_node_leave]&.each { |listener| listener.on_call_node_leave(node) }
1371
+ end
1372
+
1373
+ # Dispatch enter and leave events for CallOperatorWriteNode nodes.
1374
+ def visit_call_operator_write_node(node)
1375
+ listeners[:on_call_operator_write_node_enter]&.each { |listener| listener.on_call_operator_write_node_enter(node) }
1376
+ listeners[:on_call_operator_write_node_leave]&.each { |listener| listener.on_call_operator_write_node_leave(node) }
1377
+ end
1378
+
1379
+ # Dispatch enter and leave events for CallOrWriteNode nodes.
1380
+ def visit_call_or_write_node(node)
1381
+ listeners[:on_call_or_write_node_enter]&.each { |listener| listener.on_call_or_write_node_enter(node) }
1382
+ listeners[:on_call_or_write_node_leave]&.each { |listener| listener.on_call_or_write_node_leave(node) }
1383
+ end
1384
+
1385
+ # Dispatch enter and leave events for CallTargetNode nodes.
1386
+ def visit_call_target_node(node)
1387
+ listeners[:on_call_target_node_enter]&.each { |listener| listener.on_call_target_node_enter(node) }
1388
+ listeners[:on_call_target_node_leave]&.each { |listener| listener.on_call_target_node_leave(node) }
1389
+ end
1390
+
1391
+ # Dispatch enter and leave events for CapturePatternNode nodes.
1392
+ def visit_capture_pattern_node(node)
1393
+ listeners[:on_capture_pattern_node_enter]&.each { |listener| listener.on_capture_pattern_node_enter(node) }
1394
+ listeners[:on_capture_pattern_node_leave]&.each { |listener| listener.on_capture_pattern_node_leave(node) }
1395
+ end
1396
+
1397
+ # Dispatch enter and leave events for CaseMatchNode nodes.
1398
+ def visit_case_match_node(node)
1399
+ listeners[:on_case_match_node_enter]&.each { |listener| listener.on_case_match_node_enter(node) }
1400
+ listeners[:on_case_match_node_leave]&.each { |listener| listener.on_case_match_node_leave(node) }
1401
+ end
1402
+
1403
+ # Dispatch enter and leave events for CaseNode nodes.
1404
+ def visit_case_node(node)
1405
+ listeners[:on_case_node_enter]&.each { |listener| listener.on_case_node_enter(node) }
1406
+ listeners[:on_case_node_leave]&.each { |listener| listener.on_case_node_leave(node) }
1407
+ end
1408
+
1409
+ # Dispatch enter and leave events for ClassNode nodes.
1410
+ def visit_class_node(node)
1411
+ listeners[:on_class_node_enter]&.each { |listener| listener.on_class_node_enter(node) }
1412
+ listeners[:on_class_node_leave]&.each { |listener| listener.on_class_node_leave(node) }
1413
+ end
1414
+
1415
+ # Dispatch enter and leave events for ClassVariableAndWriteNode nodes.
1416
+ def visit_class_variable_and_write_node(node)
1417
+ listeners[:on_class_variable_and_write_node_enter]&.each { |listener| listener.on_class_variable_and_write_node_enter(node) }
1418
+ listeners[:on_class_variable_and_write_node_leave]&.each { |listener| listener.on_class_variable_and_write_node_leave(node) }
1419
+ end
1420
+
1421
+ # Dispatch enter and leave events for ClassVariableOperatorWriteNode nodes.
1422
+ def visit_class_variable_operator_write_node(node)
1423
+ listeners[:on_class_variable_operator_write_node_enter]&.each { |listener| listener.on_class_variable_operator_write_node_enter(node) }
1424
+ listeners[:on_class_variable_operator_write_node_leave]&.each { |listener| listener.on_class_variable_operator_write_node_leave(node) }
1425
+ end
1426
+
1427
+ # Dispatch enter and leave events for ClassVariableOrWriteNode nodes.
1428
+ def visit_class_variable_or_write_node(node)
1429
+ listeners[:on_class_variable_or_write_node_enter]&.each { |listener| listener.on_class_variable_or_write_node_enter(node) }
1430
+ listeners[:on_class_variable_or_write_node_leave]&.each { |listener| listener.on_class_variable_or_write_node_leave(node) }
1431
+ end
1432
+
1433
+ # Dispatch enter and leave events for ClassVariableReadNode nodes.
1434
+ def visit_class_variable_read_node(node)
1435
+ listeners[:on_class_variable_read_node_enter]&.each { |listener| listener.on_class_variable_read_node_enter(node) }
1436
+ listeners[:on_class_variable_read_node_leave]&.each { |listener| listener.on_class_variable_read_node_leave(node) }
1437
+ end
1438
+
1439
+ # Dispatch enter and leave events for ClassVariableTargetNode nodes.
1440
+ def visit_class_variable_target_node(node)
1441
+ listeners[:on_class_variable_target_node_enter]&.each { |listener| listener.on_class_variable_target_node_enter(node) }
1442
+ listeners[:on_class_variable_target_node_leave]&.each { |listener| listener.on_class_variable_target_node_leave(node) }
1443
+ end
1444
+
1445
+ # Dispatch enter and leave events for ClassVariableWriteNode nodes.
1446
+ def visit_class_variable_write_node(node)
1447
+ listeners[:on_class_variable_write_node_enter]&.each { |listener| listener.on_class_variable_write_node_enter(node) }
1448
+ listeners[:on_class_variable_write_node_leave]&.each { |listener| listener.on_class_variable_write_node_leave(node) }
1449
+ end
1450
+
1451
+ # Dispatch enter and leave events for ConstantAndWriteNode nodes.
1452
+ def visit_constant_and_write_node(node)
1453
+ listeners[:on_constant_and_write_node_enter]&.each { |listener| listener.on_constant_and_write_node_enter(node) }
1454
+ listeners[:on_constant_and_write_node_leave]&.each { |listener| listener.on_constant_and_write_node_leave(node) }
1455
+ end
1456
+
1457
+ # Dispatch enter and leave events for ConstantOperatorWriteNode nodes.
1458
+ def visit_constant_operator_write_node(node)
1459
+ listeners[:on_constant_operator_write_node_enter]&.each { |listener| listener.on_constant_operator_write_node_enter(node) }
1460
+ listeners[:on_constant_operator_write_node_leave]&.each { |listener| listener.on_constant_operator_write_node_leave(node) }
1461
+ end
1462
+
1463
+ # Dispatch enter and leave events for ConstantOrWriteNode nodes.
1464
+ def visit_constant_or_write_node(node)
1465
+ listeners[:on_constant_or_write_node_enter]&.each { |listener| listener.on_constant_or_write_node_enter(node) }
1466
+ listeners[:on_constant_or_write_node_leave]&.each { |listener| listener.on_constant_or_write_node_leave(node) }
1467
+ end
1468
+
1469
+ # Dispatch enter and leave events for ConstantPathAndWriteNode nodes.
1470
+ def visit_constant_path_and_write_node(node)
1471
+ listeners[:on_constant_path_and_write_node_enter]&.each { |listener| listener.on_constant_path_and_write_node_enter(node) }
1472
+ listeners[:on_constant_path_and_write_node_leave]&.each { |listener| listener.on_constant_path_and_write_node_leave(node) }
1473
+ end
1474
+
1475
+ # Dispatch enter and leave events for ConstantPathNode nodes.
1476
+ def visit_constant_path_node(node)
1477
+ listeners[:on_constant_path_node_enter]&.each { |listener| listener.on_constant_path_node_enter(node) }
1478
+ listeners[:on_constant_path_node_leave]&.each { |listener| listener.on_constant_path_node_leave(node) }
1479
+ end
1480
+
1481
+ # Dispatch enter and leave events for ConstantPathOperatorWriteNode nodes.
1482
+ def visit_constant_path_operator_write_node(node)
1483
+ listeners[:on_constant_path_operator_write_node_enter]&.each { |listener| listener.on_constant_path_operator_write_node_enter(node) }
1484
+ listeners[:on_constant_path_operator_write_node_leave]&.each { |listener| listener.on_constant_path_operator_write_node_leave(node) }
1485
+ end
1486
+
1487
+ # Dispatch enter and leave events for ConstantPathOrWriteNode nodes.
1488
+ def visit_constant_path_or_write_node(node)
1489
+ listeners[:on_constant_path_or_write_node_enter]&.each { |listener| listener.on_constant_path_or_write_node_enter(node) }
1490
+ listeners[:on_constant_path_or_write_node_leave]&.each { |listener| listener.on_constant_path_or_write_node_leave(node) }
1491
+ end
1492
+
1493
+ # Dispatch enter and leave events for ConstantPathTargetNode nodes.
1494
+ def visit_constant_path_target_node(node)
1495
+ listeners[:on_constant_path_target_node_enter]&.each { |listener| listener.on_constant_path_target_node_enter(node) }
1496
+ listeners[:on_constant_path_target_node_leave]&.each { |listener| listener.on_constant_path_target_node_leave(node) }
1497
+ end
1498
+
1499
+ # Dispatch enter and leave events for ConstantPathWriteNode nodes.
1500
+ def visit_constant_path_write_node(node)
1501
+ listeners[:on_constant_path_write_node_enter]&.each { |listener| listener.on_constant_path_write_node_enter(node) }
1502
+ listeners[:on_constant_path_write_node_leave]&.each { |listener| listener.on_constant_path_write_node_leave(node) }
1503
+ end
1504
+
1505
+ # Dispatch enter and leave events for ConstantReadNode nodes.
1506
+ def visit_constant_read_node(node)
1507
+ listeners[:on_constant_read_node_enter]&.each { |listener| listener.on_constant_read_node_enter(node) }
1508
+ listeners[:on_constant_read_node_leave]&.each { |listener| listener.on_constant_read_node_leave(node) }
1509
+ end
1510
+
1511
+ # Dispatch enter and leave events for ConstantTargetNode nodes.
1512
+ def visit_constant_target_node(node)
1513
+ listeners[:on_constant_target_node_enter]&.each { |listener| listener.on_constant_target_node_enter(node) }
1514
+ listeners[:on_constant_target_node_leave]&.each { |listener| listener.on_constant_target_node_leave(node) }
1515
+ end
1516
+
1517
+ # Dispatch enter and leave events for ConstantWriteNode nodes.
1518
+ def visit_constant_write_node(node)
1519
+ listeners[:on_constant_write_node_enter]&.each { |listener| listener.on_constant_write_node_enter(node) }
1520
+ listeners[:on_constant_write_node_leave]&.each { |listener| listener.on_constant_write_node_leave(node) }
1521
+ end
1522
+
1523
+ # Dispatch enter and leave events for DefNode nodes.
1524
+ def visit_def_node(node)
1525
+ listeners[:on_def_node_enter]&.each { |listener| listener.on_def_node_enter(node) }
1526
+ listeners[:on_def_node_leave]&.each { |listener| listener.on_def_node_leave(node) }
1527
+ end
1528
+
1529
+ # Dispatch enter and leave events for DefinedNode nodes.
1530
+ def visit_defined_node(node)
1531
+ listeners[:on_defined_node_enter]&.each { |listener| listener.on_defined_node_enter(node) }
1532
+ listeners[:on_defined_node_leave]&.each { |listener| listener.on_defined_node_leave(node) }
1533
+ end
1534
+
1535
+ # Dispatch enter and leave events for ElseNode nodes.
1536
+ def visit_else_node(node)
1537
+ listeners[:on_else_node_enter]&.each { |listener| listener.on_else_node_enter(node) }
1538
+ listeners[:on_else_node_leave]&.each { |listener| listener.on_else_node_leave(node) }
1539
+ end
1540
+
1541
+ # Dispatch enter and leave events for EmbeddedStatementsNode nodes.
1542
+ def visit_embedded_statements_node(node)
1543
+ listeners[:on_embedded_statements_node_enter]&.each { |listener| listener.on_embedded_statements_node_enter(node) }
1544
+ listeners[:on_embedded_statements_node_leave]&.each { |listener| listener.on_embedded_statements_node_leave(node) }
1545
+ end
1546
+
1547
+ # Dispatch enter and leave events for EmbeddedVariableNode nodes.
1548
+ def visit_embedded_variable_node(node)
1549
+ listeners[:on_embedded_variable_node_enter]&.each { |listener| listener.on_embedded_variable_node_enter(node) }
1550
+ listeners[:on_embedded_variable_node_leave]&.each { |listener| listener.on_embedded_variable_node_leave(node) }
1551
+ end
1552
+
1553
+ # Dispatch enter and leave events for EnsureNode nodes.
1554
+ def visit_ensure_node(node)
1555
+ listeners[:on_ensure_node_enter]&.each { |listener| listener.on_ensure_node_enter(node) }
1556
+ listeners[:on_ensure_node_leave]&.each { |listener| listener.on_ensure_node_leave(node) }
1557
+ end
1558
+
1559
+ # Dispatch enter and leave events for FalseNode nodes.
1560
+ def visit_false_node(node)
1561
+ listeners[:on_false_node_enter]&.each { |listener| listener.on_false_node_enter(node) }
1562
+ listeners[:on_false_node_leave]&.each { |listener| listener.on_false_node_leave(node) }
1563
+ end
1564
+
1565
+ # Dispatch enter and leave events for FindPatternNode nodes.
1566
+ def visit_find_pattern_node(node)
1567
+ listeners[:on_find_pattern_node_enter]&.each { |listener| listener.on_find_pattern_node_enter(node) }
1568
+ listeners[:on_find_pattern_node_leave]&.each { |listener| listener.on_find_pattern_node_leave(node) }
1569
+ end
1570
+
1571
+ # Dispatch enter and leave events for FlipFlopNode nodes.
1572
+ def visit_flip_flop_node(node)
1573
+ listeners[:on_flip_flop_node_enter]&.each { |listener| listener.on_flip_flop_node_enter(node) }
1574
+ listeners[:on_flip_flop_node_leave]&.each { |listener| listener.on_flip_flop_node_leave(node) }
1575
+ end
1576
+
1577
+ # Dispatch enter and leave events for FloatNode nodes.
1578
+ def visit_float_node(node)
1579
+ listeners[:on_float_node_enter]&.each { |listener| listener.on_float_node_enter(node) }
1580
+ listeners[:on_float_node_leave]&.each { |listener| listener.on_float_node_leave(node) }
1581
+ end
1582
+
1583
+ # Dispatch enter and leave events for ForNode nodes.
1584
+ def visit_for_node(node)
1585
+ listeners[:on_for_node_enter]&.each { |listener| listener.on_for_node_enter(node) }
1586
+ listeners[:on_for_node_leave]&.each { |listener| listener.on_for_node_leave(node) }
1587
+ end
1588
+
1589
+ # Dispatch enter and leave events for ForwardingArgumentsNode nodes.
1590
+ def visit_forwarding_arguments_node(node)
1591
+ listeners[:on_forwarding_arguments_node_enter]&.each { |listener| listener.on_forwarding_arguments_node_enter(node) }
1592
+ listeners[:on_forwarding_arguments_node_leave]&.each { |listener| listener.on_forwarding_arguments_node_leave(node) }
1593
+ end
1594
+
1595
+ # Dispatch enter and leave events for ForwardingParameterNode nodes.
1596
+ def visit_forwarding_parameter_node(node)
1597
+ listeners[:on_forwarding_parameter_node_enter]&.each { |listener| listener.on_forwarding_parameter_node_enter(node) }
1598
+ listeners[:on_forwarding_parameter_node_leave]&.each { |listener| listener.on_forwarding_parameter_node_leave(node) }
1599
+ end
1600
+
1601
+ # Dispatch enter and leave events for ForwardingSuperNode nodes.
1602
+ def visit_forwarding_super_node(node)
1603
+ listeners[:on_forwarding_super_node_enter]&.each { |listener| listener.on_forwarding_super_node_enter(node) }
1604
+ listeners[:on_forwarding_super_node_leave]&.each { |listener| listener.on_forwarding_super_node_leave(node) }
1605
+ end
1606
+
1607
+ # Dispatch enter and leave events for GlobalVariableAndWriteNode nodes.
1608
+ def visit_global_variable_and_write_node(node)
1609
+ listeners[:on_global_variable_and_write_node_enter]&.each { |listener| listener.on_global_variable_and_write_node_enter(node) }
1610
+ listeners[:on_global_variable_and_write_node_leave]&.each { |listener| listener.on_global_variable_and_write_node_leave(node) }
1611
+ end
1612
+
1613
+ # Dispatch enter and leave events for GlobalVariableOperatorWriteNode nodes.
1614
+ def visit_global_variable_operator_write_node(node)
1615
+ listeners[:on_global_variable_operator_write_node_enter]&.each { |listener| listener.on_global_variable_operator_write_node_enter(node) }
1616
+ listeners[:on_global_variable_operator_write_node_leave]&.each { |listener| listener.on_global_variable_operator_write_node_leave(node) }
1617
+ end
1618
+
1619
+ # Dispatch enter and leave events for GlobalVariableOrWriteNode nodes.
1620
+ def visit_global_variable_or_write_node(node)
1621
+ listeners[:on_global_variable_or_write_node_enter]&.each { |listener| listener.on_global_variable_or_write_node_enter(node) }
1622
+ listeners[:on_global_variable_or_write_node_leave]&.each { |listener| listener.on_global_variable_or_write_node_leave(node) }
1623
+ end
1624
+
1625
+ # Dispatch enter and leave events for GlobalVariableReadNode nodes.
1626
+ def visit_global_variable_read_node(node)
1627
+ listeners[:on_global_variable_read_node_enter]&.each { |listener| listener.on_global_variable_read_node_enter(node) }
1628
+ listeners[:on_global_variable_read_node_leave]&.each { |listener| listener.on_global_variable_read_node_leave(node) }
1629
+ end
1630
+
1631
+ # Dispatch enter and leave events for GlobalVariableTargetNode nodes.
1632
+ def visit_global_variable_target_node(node)
1633
+ listeners[:on_global_variable_target_node_enter]&.each { |listener| listener.on_global_variable_target_node_enter(node) }
1634
+ listeners[:on_global_variable_target_node_leave]&.each { |listener| listener.on_global_variable_target_node_leave(node) }
1635
+ end
1636
+
1637
+ # Dispatch enter and leave events for GlobalVariableWriteNode nodes.
1638
+ def visit_global_variable_write_node(node)
1639
+ listeners[:on_global_variable_write_node_enter]&.each { |listener| listener.on_global_variable_write_node_enter(node) }
1640
+ listeners[:on_global_variable_write_node_leave]&.each { |listener| listener.on_global_variable_write_node_leave(node) }
1641
+ end
1642
+
1643
+ # Dispatch enter and leave events for HashNode nodes.
1644
+ def visit_hash_node(node)
1645
+ listeners[:on_hash_node_enter]&.each { |listener| listener.on_hash_node_enter(node) }
1646
+ listeners[:on_hash_node_leave]&.each { |listener| listener.on_hash_node_leave(node) }
1647
+ end
1648
+
1649
+ # Dispatch enter and leave events for HashPatternNode nodes.
1650
+ def visit_hash_pattern_node(node)
1651
+ listeners[:on_hash_pattern_node_enter]&.each { |listener| listener.on_hash_pattern_node_enter(node) }
1652
+ listeners[:on_hash_pattern_node_leave]&.each { |listener| listener.on_hash_pattern_node_leave(node) }
1653
+ end
1654
+
1655
+ # Dispatch enter and leave events for IfNode nodes.
1656
+ def visit_if_node(node)
1657
+ listeners[:on_if_node_enter]&.each { |listener| listener.on_if_node_enter(node) }
1658
+ listeners[:on_if_node_leave]&.each { |listener| listener.on_if_node_leave(node) }
1659
+ end
1660
+
1661
+ # Dispatch enter and leave events for ImaginaryNode nodes.
1662
+ def visit_imaginary_node(node)
1663
+ listeners[:on_imaginary_node_enter]&.each { |listener| listener.on_imaginary_node_enter(node) }
1664
+ listeners[:on_imaginary_node_leave]&.each { |listener| listener.on_imaginary_node_leave(node) }
1665
+ end
1666
+
1667
+ # Dispatch enter and leave events for ImplicitNode nodes.
1668
+ def visit_implicit_node(node)
1669
+ listeners[:on_implicit_node_enter]&.each { |listener| listener.on_implicit_node_enter(node) }
1670
+ listeners[:on_implicit_node_leave]&.each { |listener| listener.on_implicit_node_leave(node) }
1671
+ end
1672
+
1673
+ # Dispatch enter and leave events for ImplicitRestNode nodes.
1674
+ def visit_implicit_rest_node(node)
1675
+ listeners[:on_implicit_rest_node_enter]&.each { |listener| listener.on_implicit_rest_node_enter(node) }
1676
+ listeners[:on_implicit_rest_node_leave]&.each { |listener| listener.on_implicit_rest_node_leave(node) }
1677
+ end
1678
+
1679
+ # Dispatch enter and leave events for InNode nodes.
1680
+ def visit_in_node(node)
1681
+ listeners[:on_in_node_enter]&.each { |listener| listener.on_in_node_enter(node) }
1682
+ listeners[:on_in_node_leave]&.each { |listener| listener.on_in_node_leave(node) }
1683
+ end
1684
+
1685
+ # Dispatch enter and leave events for IndexAndWriteNode nodes.
1686
+ def visit_index_and_write_node(node)
1687
+ listeners[:on_index_and_write_node_enter]&.each { |listener| listener.on_index_and_write_node_enter(node) }
1688
+ listeners[:on_index_and_write_node_leave]&.each { |listener| listener.on_index_and_write_node_leave(node) }
1689
+ end
1690
+
1691
+ # Dispatch enter and leave events for IndexOperatorWriteNode nodes.
1692
+ def visit_index_operator_write_node(node)
1693
+ listeners[:on_index_operator_write_node_enter]&.each { |listener| listener.on_index_operator_write_node_enter(node) }
1694
+ listeners[:on_index_operator_write_node_leave]&.each { |listener| listener.on_index_operator_write_node_leave(node) }
1695
+ end
1696
+
1697
+ # Dispatch enter and leave events for IndexOrWriteNode nodes.
1698
+ def visit_index_or_write_node(node)
1699
+ listeners[:on_index_or_write_node_enter]&.each { |listener| listener.on_index_or_write_node_enter(node) }
1700
+ listeners[:on_index_or_write_node_leave]&.each { |listener| listener.on_index_or_write_node_leave(node) }
1701
+ end
1702
+
1703
+ # Dispatch enter and leave events for IndexTargetNode nodes.
1704
+ def visit_index_target_node(node)
1705
+ listeners[:on_index_target_node_enter]&.each { |listener| listener.on_index_target_node_enter(node) }
1706
+ listeners[:on_index_target_node_leave]&.each { |listener| listener.on_index_target_node_leave(node) }
1707
+ end
1708
+
1709
+ # Dispatch enter and leave events for InstanceVariableAndWriteNode nodes.
1710
+ def visit_instance_variable_and_write_node(node)
1711
+ listeners[:on_instance_variable_and_write_node_enter]&.each { |listener| listener.on_instance_variable_and_write_node_enter(node) }
1712
+ listeners[:on_instance_variable_and_write_node_leave]&.each { |listener| listener.on_instance_variable_and_write_node_leave(node) }
1713
+ end
1714
+
1715
+ # Dispatch enter and leave events for InstanceVariableOperatorWriteNode nodes.
1716
+ def visit_instance_variable_operator_write_node(node)
1717
+ listeners[:on_instance_variable_operator_write_node_enter]&.each { |listener| listener.on_instance_variable_operator_write_node_enter(node) }
1718
+ listeners[:on_instance_variable_operator_write_node_leave]&.each { |listener| listener.on_instance_variable_operator_write_node_leave(node) }
1719
+ end
1720
+
1721
+ # Dispatch enter and leave events for InstanceVariableOrWriteNode nodes.
1722
+ def visit_instance_variable_or_write_node(node)
1723
+ listeners[:on_instance_variable_or_write_node_enter]&.each { |listener| listener.on_instance_variable_or_write_node_enter(node) }
1724
+ listeners[:on_instance_variable_or_write_node_leave]&.each { |listener| listener.on_instance_variable_or_write_node_leave(node) }
1725
+ end
1726
+
1727
+ # Dispatch enter and leave events for InstanceVariableReadNode nodes.
1728
+ def visit_instance_variable_read_node(node)
1729
+ listeners[:on_instance_variable_read_node_enter]&.each { |listener| listener.on_instance_variable_read_node_enter(node) }
1730
+ listeners[:on_instance_variable_read_node_leave]&.each { |listener| listener.on_instance_variable_read_node_leave(node) }
1731
+ end
1732
+
1733
+ # Dispatch enter and leave events for InstanceVariableTargetNode nodes.
1734
+ def visit_instance_variable_target_node(node)
1735
+ listeners[:on_instance_variable_target_node_enter]&.each { |listener| listener.on_instance_variable_target_node_enter(node) }
1736
+ listeners[:on_instance_variable_target_node_leave]&.each { |listener| listener.on_instance_variable_target_node_leave(node) }
1737
+ end
1738
+
1739
+ # Dispatch enter and leave events for InstanceVariableWriteNode nodes.
1740
+ def visit_instance_variable_write_node(node)
1741
+ listeners[:on_instance_variable_write_node_enter]&.each { |listener| listener.on_instance_variable_write_node_enter(node) }
1742
+ listeners[:on_instance_variable_write_node_leave]&.each { |listener| listener.on_instance_variable_write_node_leave(node) }
1743
+ end
1744
+
1745
+ # Dispatch enter and leave events for IntegerNode nodes.
1746
+ def visit_integer_node(node)
1747
+ listeners[:on_integer_node_enter]&.each { |listener| listener.on_integer_node_enter(node) }
1748
+ listeners[:on_integer_node_leave]&.each { |listener| listener.on_integer_node_leave(node) }
1749
+ end
1750
+
1751
+ # Dispatch enter and leave events for InterpolatedMatchLastLineNode nodes.
1752
+ def visit_interpolated_match_last_line_node(node)
1753
+ listeners[:on_interpolated_match_last_line_node_enter]&.each { |listener| listener.on_interpolated_match_last_line_node_enter(node) }
1754
+ listeners[:on_interpolated_match_last_line_node_leave]&.each { |listener| listener.on_interpolated_match_last_line_node_leave(node) }
1755
+ end
1756
+
1757
+ # Dispatch enter and leave events for InterpolatedRegularExpressionNode nodes.
1758
+ def visit_interpolated_regular_expression_node(node)
1759
+ listeners[:on_interpolated_regular_expression_node_enter]&.each { |listener| listener.on_interpolated_regular_expression_node_enter(node) }
1760
+ listeners[:on_interpolated_regular_expression_node_leave]&.each { |listener| listener.on_interpolated_regular_expression_node_leave(node) }
1761
+ end
1762
+
1763
+ # Dispatch enter and leave events for InterpolatedStringNode nodes.
1764
+ def visit_interpolated_string_node(node)
1765
+ listeners[:on_interpolated_string_node_enter]&.each { |listener| listener.on_interpolated_string_node_enter(node) }
1766
+ listeners[:on_interpolated_string_node_leave]&.each { |listener| listener.on_interpolated_string_node_leave(node) }
1767
+ end
1768
+
1769
+ # Dispatch enter and leave events for InterpolatedSymbolNode nodes.
1770
+ def visit_interpolated_symbol_node(node)
1771
+ listeners[:on_interpolated_symbol_node_enter]&.each { |listener| listener.on_interpolated_symbol_node_enter(node) }
1772
+ listeners[:on_interpolated_symbol_node_leave]&.each { |listener| listener.on_interpolated_symbol_node_leave(node) }
1773
+ end
1774
+
1775
+ # Dispatch enter and leave events for InterpolatedXStringNode nodes.
1776
+ def visit_interpolated_x_string_node(node)
1777
+ listeners[:on_interpolated_x_string_node_enter]&.each { |listener| listener.on_interpolated_x_string_node_enter(node) }
1778
+ listeners[:on_interpolated_x_string_node_leave]&.each { |listener| listener.on_interpolated_x_string_node_leave(node) }
1779
+ end
1780
+
1781
+ # Dispatch enter and leave events for KeywordHashNode nodes.
1782
+ def visit_keyword_hash_node(node)
1783
+ listeners[:on_keyword_hash_node_enter]&.each { |listener| listener.on_keyword_hash_node_enter(node) }
1784
+ listeners[:on_keyword_hash_node_leave]&.each { |listener| listener.on_keyword_hash_node_leave(node) }
1785
+ end
1786
+
1787
+ # Dispatch enter and leave events for KeywordRestParameterNode nodes.
1788
+ def visit_keyword_rest_parameter_node(node)
1789
+ listeners[:on_keyword_rest_parameter_node_enter]&.each { |listener| listener.on_keyword_rest_parameter_node_enter(node) }
1790
+ listeners[:on_keyword_rest_parameter_node_leave]&.each { |listener| listener.on_keyword_rest_parameter_node_leave(node) }
1791
+ end
1792
+
1793
+ # Dispatch enter and leave events for LambdaNode nodes.
1794
+ def visit_lambda_node(node)
1795
+ listeners[:on_lambda_node_enter]&.each { |listener| listener.on_lambda_node_enter(node) }
1796
+ listeners[:on_lambda_node_leave]&.each { |listener| listener.on_lambda_node_leave(node) }
1797
+ end
1798
+
1799
+ # Dispatch enter and leave events for LocalVariableAndWriteNode nodes.
1800
+ def visit_local_variable_and_write_node(node)
1801
+ listeners[:on_local_variable_and_write_node_enter]&.each { |listener| listener.on_local_variable_and_write_node_enter(node) }
1802
+ listeners[:on_local_variable_and_write_node_leave]&.each { |listener| listener.on_local_variable_and_write_node_leave(node) }
1803
+ end
1804
+
1805
+ # Dispatch enter and leave events for LocalVariableOperatorWriteNode nodes.
1806
+ def visit_local_variable_operator_write_node(node)
1807
+ listeners[:on_local_variable_operator_write_node_enter]&.each { |listener| listener.on_local_variable_operator_write_node_enter(node) }
1808
+ listeners[:on_local_variable_operator_write_node_leave]&.each { |listener| listener.on_local_variable_operator_write_node_leave(node) }
1809
+ end
1810
+
1811
+ # Dispatch enter and leave events for LocalVariableOrWriteNode nodes.
1812
+ def visit_local_variable_or_write_node(node)
1813
+ listeners[:on_local_variable_or_write_node_enter]&.each { |listener| listener.on_local_variable_or_write_node_enter(node) }
1814
+ listeners[:on_local_variable_or_write_node_leave]&.each { |listener| listener.on_local_variable_or_write_node_leave(node) }
1815
+ end
1816
+
1817
+ # Dispatch enter and leave events for LocalVariableReadNode nodes.
1818
+ def visit_local_variable_read_node(node)
1819
+ listeners[:on_local_variable_read_node_enter]&.each { |listener| listener.on_local_variable_read_node_enter(node) }
1820
+ listeners[:on_local_variable_read_node_leave]&.each { |listener| listener.on_local_variable_read_node_leave(node) }
1821
+ end
1822
+
1823
+ # Dispatch enter and leave events for LocalVariableTargetNode nodes.
1824
+ def visit_local_variable_target_node(node)
1825
+ listeners[:on_local_variable_target_node_enter]&.each { |listener| listener.on_local_variable_target_node_enter(node) }
1826
+ listeners[:on_local_variable_target_node_leave]&.each { |listener| listener.on_local_variable_target_node_leave(node) }
1827
+ end
1828
+
1829
+ # Dispatch enter and leave events for LocalVariableWriteNode nodes.
1830
+ def visit_local_variable_write_node(node)
1831
+ listeners[:on_local_variable_write_node_enter]&.each { |listener| listener.on_local_variable_write_node_enter(node) }
1832
+ listeners[:on_local_variable_write_node_leave]&.each { |listener| listener.on_local_variable_write_node_leave(node) }
1833
+ end
1834
+
1835
+ # Dispatch enter and leave events for MatchLastLineNode nodes.
1836
+ def visit_match_last_line_node(node)
1837
+ listeners[:on_match_last_line_node_enter]&.each { |listener| listener.on_match_last_line_node_enter(node) }
1838
+ listeners[:on_match_last_line_node_leave]&.each { |listener| listener.on_match_last_line_node_leave(node) }
1839
+ end
1840
+
1841
+ # Dispatch enter and leave events for MatchPredicateNode nodes.
1842
+ def visit_match_predicate_node(node)
1843
+ listeners[:on_match_predicate_node_enter]&.each { |listener| listener.on_match_predicate_node_enter(node) }
1844
+ listeners[:on_match_predicate_node_leave]&.each { |listener| listener.on_match_predicate_node_leave(node) }
1845
+ end
1846
+
1847
+ # Dispatch enter and leave events for MatchRequiredNode nodes.
1848
+ def visit_match_required_node(node)
1849
+ listeners[:on_match_required_node_enter]&.each { |listener| listener.on_match_required_node_enter(node) }
1850
+ listeners[:on_match_required_node_leave]&.each { |listener| listener.on_match_required_node_leave(node) }
1851
+ end
1852
+
1853
+ # Dispatch enter and leave events for MatchWriteNode nodes.
1854
+ def visit_match_write_node(node)
1855
+ listeners[:on_match_write_node_enter]&.each { |listener| listener.on_match_write_node_enter(node) }
1856
+ listeners[:on_match_write_node_leave]&.each { |listener| listener.on_match_write_node_leave(node) }
1857
+ end
1858
+
1859
+ # Dispatch enter and leave events for MissingNode nodes.
1860
+ def visit_missing_node(node)
1861
+ listeners[:on_missing_node_enter]&.each { |listener| listener.on_missing_node_enter(node) }
1862
+ listeners[:on_missing_node_leave]&.each { |listener| listener.on_missing_node_leave(node) }
1863
+ end
1864
+
1865
+ # Dispatch enter and leave events for ModuleNode nodes.
1866
+ def visit_module_node(node)
1867
+ listeners[:on_module_node_enter]&.each { |listener| listener.on_module_node_enter(node) }
1868
+ listeners[:on_module_node_leave]&.each { |listener| listener.on_module_node_leave(node) }
1869
+ end
1870
+
1871
+ # Dispatch enter and leave events for MultiTargetNode nodes.
1872
+ def visit_multi_target_node(node)
1873
+ listeners[:on_multi_target_node_enter]&.each { |listener| listener.on_multi_target_node_enter(node) }
1874
+ listeners[:on_multi_target_node_leave]&.each { |listener| listener.on_multi_target_node_leave(node) }
1875
+ end
1876
+
1877
+ # Dispatch enter and leave events for MultiWriteNode nodes.
1878
+ def visit_multi_write_node(node)
1879
+ listeners[:on_multi_write_node_enter]&.each { |listener| listener.on_multi_write_node_enter(node) }
1880
+ listeners[:on_multi_write_node_leave]&.each { |listener| listener.on_multi_write_node_leave(node) }
1881
+ end
1882
+
1883
+ # Dispatch enter and leave events for NextNode nodes.
1884
+ def visit_next_node(node)
1885
+ listeners[:on_next_node_enter]&.each { |listener| listener.on_next_node_enter(node) }
1886
+ listeners[:on_next_node_leave]&.each { |listener| listener.on_next_node_leave(node) }
1887
+ end
1888
+
1889
+ # Dispatch enter and leave events for NilNode nodes.
1890
+ def visit_nil_node(node)
1891
+ listeners[:on_nil_node_enter]&.each { |listener| listener.on_nil_node_enter(node) }
1892
+ listeners[:on_nil_node_leave]&.each { |listener| listener.on_nil_node_leave(node) }
1893
+ end
1894
+
1895
+ # Dispatch enter and leave events for NoKeywordsParameterNode nodes.
1896
+ def visit_no_keywords_parameter_node(node)
1897
+ listeners[:on_no_keywords_parameter_node_enter]&.each { |listener| listener.on_no_keywords_parameter_node_enter(node) }
1898
+ listeners[:on_no_keywords_parameter_node_leave]&.each { |listener| listener.on_no_keywords_parameter_node_leave(node) }
1899
+ end
1900
+
1901
+ # Dispatch enter and leave events for NumberedParametersNode nodes.
1902
+ def visit_numbered_parameters_node(node)
1903
+ listeners[:on_numbered_parameters_node_enter]&.each { |listener| listener.on_numbered_parameters_node_enter(node) }
1904
+ listeners[:on_numbered_parameters_node_leave]&.each { |listener| listener.on_numbered_parameters_node_leave(node) }
1905
+ end
1906
+
1907
+ # Dispatch enter and leave events for NumberedReferenceReadNode nodes.
1908
+ def visit_numbered_reference_read_node(node)
1909
+ listeners[:on_numbered_reference_read_node_enter]&.each { |listener| listener.on_numbered_reference_read_node_enter(node) }
1910
+ listeners[:on_numbered_reference_read_node_leave]&.each { |listener| listener.on_numbered_reference_read_node_leave(node) }
1911
+ end
1912
+
1913
+ # Dispatch enter and leave events for OptionalKeywordParameterNode nodes.
1914
+ def visit_optional_keyword_parameter_node(node)
1915
+ listeners[:on_optional_keyword_parameter_node_enter]&.each { |listener| listener.on_optional_keyword_parameter_node_enter(node) }
1916
+ listeners[:on_optional_keyword_parameter_node_leave]&.each { |listener| listener.on_optional_keyword_parameter_node_leave(node) }
1917
+ end
1918
+
1919
+ # Dispatch enter and leave events for OptionalParameterNode nodes.
1920
+ def visit_optional_parameter_node(node)
1921
+ listeners[:on_optional_parameter_node_enter]&.each { |listener| listener.on_optional_parameter_node_enter(node) }
1922
+ listeners[:on_optional_parameter_node_leave]&.each { |listener| listener.on_optional_parameter_node_leave(node) }
1923
+ end
1924
+
1925
+ # Dispatch enter and leave events for OrNode nodes.
1926
+ def visit_or_node(node)
1927
+ listeners[:on_or_node_enter]&.each { |listener| listener.on_or_node_enter(node) }
1928
+ listeners[:on_or_node_leave]&.each { |listener| listener.on_or_node_leave(node) }
1929
+ end
1930
+
1931
+ # Dispatch enter and leave events for ParametersNode nodes.
1932
+ def visit_parameters_node(node)
1933
+ listeners[:on_parameters_node_enter]&.each { |listener| listener.on_parameters_node_enter(node) }
1934
+ listeners[:on_parameters_node_leave]&.each { |listener| listener.on_parameters_node_leave(node) }
1935
+ end
1936
+
1937
+ # Dispatch enter and leave events for ParenthesesNode nodes.
1938
+ def visit_parentheses_node(node)
1939
+ listeners[:on_parentheses_node_enter]&.each { |listener| listener.on_parentheses_node_enter(node) }
1940
+ listeners[:on_parentheses_node_leave]&.each { |listener| listener.on_parentheses_node_leave(node) }
1941
+ end
1942
+
1943
+ # Dispatch enter and leave events for PinnedExpressionNode nodes.
1944
+ def visit_pinned_expression_node(node)
1945
+ listeners[:on_pinned_expression_node_enter]&.each { |listener| listener.on_pinned_expression_node_enter(node) }
1946
+ listeners[:on_pinned_expression_node_leave]&.each { |listener| listener.on_pinned_expression_node_leave(node) }
1947
+ end
1948
+
1949
+ # Dispatch enter and leave events for PinnedVariableNode nodes.
1950
+ def visit_pinned_variable_node(node)
1951
+ listeners[:on_pinned_variable_node_enter]&.each { |listener| listener.on_pinned_variable_node_enter(node) }
1952
+ listeners[:on_pinned_variable_node_leave]&.each { |listener| listener.on_pinned_variable_node_leave(node) }
1953
+ end
1954
+
1955
+ # Dispatch enter and leave events for PostExecutionNode nodes.
1956
+ def visit_post_execution_node(node)
1957
+ listeners[:on_post_execution_node_enter]&.each { |listener| listener.on_post_execution_node_enter(node) }
1958
+ listeners[:on_post_execution_node_leave]&.each { |listener| listener.on_post_execution_node_leave(node) }
1959
+ end
1960
+
1961
+ # Dispatch enter and leave events for PreExecutionNode nodes.
1962
+ def visit_pre_execution_node(node)
1963
+ listeners[:on_pre_execution_node_enter]&.each { |listener| listener.on_pre_execution_node_enter(node) }
1964
+ listeners[:on_pre_execution_node_leave]&.each { |listener| listener.on_pre_execution_node_leave(node) }
1965
+ end
1966
+
1967
+ # Dispatch enter and leave events for ProgramNode nodes.
1968
+ def visit_program_node(node)
1969
+ listeners[:on_program_node_enter]&.each { |listener| listener.on_program_node_enter(node) }
1970
+ listeners[:on_program_node_leave]&.each { |listener| listener.on_program_node_leave(node) }
1971
+ end
1972
+
1973
+ # Dispatch enter and leave events for RangeNode nodes.
1974
+ def visit_range_node(node)
1975
+ listeners[:on_range_node_enter]&.each { |listener| listener.on_range_node_enter(node) }
1976
+ listeners[:on_range_node_leave]&.each { |listener| listener.on_range_node_leave(node) }
1977
+ end
1978
+
1979
+ # Dispatch enter and leave events for RationalNode nodes.
1980
+ def visit_rational_node(node)
1981
+ listeners[:on_rational_node_enter]&.each { |listener| listener.on_rational_node_enter(node) }
1982
+ listeners[:on_rational_node_leave]&.each { |listener| listener.on_rational_node_leave(node) }
1983
+ end
1984
+
1985
+ # Dispatch enter and leave events for RedoNode nodes.
1986
+ def visit_redo_node(node)
1987
+ listeners[:on_redo_node_enter]&.each { |listener| listener.on_redo_node_enter(node) }
1988
+ listeners[:on_redo_node_leave]&.each { |listener| listener.on_redo_node_leave(node) }
1989
+ end
1990
+
1991
+ # Dispatch enter and leave events for RegularExpressionNode nodes.
1992
+ def visit_regular_expression_node(node)
1993
+ listeners[:on_regular_expression_node_enter]&.each { |listener| listener.on_regular_expression_node_enter(node) }
1994
+ listeners[:on_regular_expression_node_leave]&.each { |listener| listener.on_regular_expression_node_leave(node) }
1995
+ end
1996
+
1997
+ # Dispatch enter and leave events for RequiredKeywordParameterNode nodes.
1998
+ def visit_required_keyword_parameter_node(node)
1999
+ listeners[:on_required_keyword_parameter_node_enter]&.each { |listener| listener.on_required_keyword_parameter_node_enter(node) }
2000
+ listeners[:on_required_keyword_parameter_node_leave]&.each { |listener| listener.on_required_keyword_parameter_node_leave(node) }
2001
+ end
2002
+
2003
+ # Dispatch enter and leave events for RequiredParameterNode nodes.
2004
+ def visit_required_parameter_node(node)
2005
+ listeners[:on_required_parameter_node_enter]&.each { |listener| listener.on_required_parameter_node_enter(node) }
2006
+ listeners[:on_required_parameter_node_leave]&.each { |listener| listener.on_required_parameter_node_leave(node) }
2007
+ end
2008
+
2009
+ # Dispatch enter and leave events for RescueModifierNode nodes.
2010
+ def visit_rescue_modifier_node(node)
2011
+ listeners[:on_rescue_modifier_node_enter]&.each { |listener| listener.on_rescue_modifier_node_enter(node) }
2012
+ listeners[:on_rescue_modifier_node_leave]&.each { |listener| listener.on_rescue_modifier_node_leave(node) }
2013
+ end
2014
+
2015
+ # Dispatch enter and leave events for RescueNode nodes.
2016
+ def visit_rescue_node(node)
2017
+ listeners[:on_rescue_node_enter]&.each { |listener| listener.on_rescue_node_enter(node) }
2018
+ listeners[:on_rescue_node_leave]&.each { |listener| listener.on_rescue_node_leave(node) }
2019
+ end
2020
+
2021
+ # Dispatch enter and leave events for RestParameterNode nodes.
2022
+ def visit_rest_parameter_node(node)
2023
+ listeners[:on_rest_parameter_node_enter]&.each { |listener| listener.on_rest_parameter_node_enter(node) }
2024
+ listeners[:on_rest_parameter_node_leave]&.each { |listener| listener.on_rest_parameter_node_leave(node) }
2025
+ end
2026
+
2027
+ # Dispatch enter and leave events for RetryNode nodes.
2028
+ def visit_retry_node(node)
2029
+ listeners[:on_retry_node_enter]&.each { |listener| listener.on_retry_node_enter(node) }
2030
+ listeners[:on_retry_node_leave]&.each { |listener| listener.on_retry_node_leave(node) }
2031
+ end
2032
+
2033
+ # Dispatch enter and leave events for ReturnNode nodes.
2034
+ def visit_return_node(node)
2035
+ listeners[:on_return_node_enter]&.each { |listener| listener.on_return_node_enter(node) }
2036
+ listeners[:on_return_node_leave]&.each { |listener| listener.on_return_node_leave(node) }
2037
+ end
2038
+
2039
+ # Dispatch enter and leave events for SelfNode nodes.
2040
+ def visit_self_node(node)
2041
+ listeners[:on_self_node_enter]&.each { |listener| listener.on_self_node_enter(node) }
2042
+ listeners[:on_self_node_leave]&.each { |listener| listener.on_self_node_leave(node) }
2043
+ end
2044
+
2045
+ # Dispatch enter and leave events for SingletonClassNode nodes.
2046
+ def visit_singleton_class_node(node)
2047
+ listeners[:on_singleton_class_node_enter]&.each { |listener| listener.on_singleton_class_node_enter(node) }
2048
+ listeners[:on_singleton_class_node_leave]&.each { |listener| listener.on_singleton_class_node_leave(node) }
2049
+ end
2050
+
2051
+ # Dispatch enter and leave events for SourceEncodingNode nodes.
2052
+ def visit_source_encoding_node(node)
2053
+ listeners[:on_source_encoding_node_enter]&.each { |listener| listener.on_source_encoding_node_enter(node) }
2054
+ listeners[:on_source_encoding_node_leave]&.each { |listener| listener.on_source_encoding_node_leave(node) }
2055
+ end
2056
+
2057
+ # Dispatch enter and leave events for SourceFileNode nodes.
2058
+ def visit_source_file_node(node)
2059
+ listeners[:on_source_file_node_enter]&.each { |listener| listener.on_source_file_node_enter(node) }
2060
+ listeners[:on_source_file_node_leave]&.each { |listener| listener.on_source_file_node_leave(node) }
2061
+ end
2062
+
2063
+ # Dispatch enter and leave events for SourceLineNode nodes.
2064
+ def visit_source_line_node(node)
2065
+ listeners[:on_source_line_node_enter]&.each { |listener| listener.on_source_line_node_enter(node) }
2066
+ listeners[:on_source_line_node_leave]&.each { |listener| listener.on_source_line_node_leave(node) }
2067
+ end
2068
+
2069
+ # Dispatch enter and leave events for SplatNode nodes.
2070
+ def visit_splat_node(node)
2071
+ listeners[:on_splat_node_enter]&.each { |listener| listener.on_splat_node_enter(node) }
2072
+ listeners[:on_splat_node_leave]&.each { |listener| listener.on_splat_node_leave(node) }
2073
+ end
2074
+
2075
+ # Dispatch enter and leave events for StatementsNode nodes.
2076
+ def visit_statements_node(node)
2077
+ listeners[:on_statements_node_enter]&.each { |listener| listener.on_statements_node_enter(node) }
2078
+ listeners[:on_statements_node_leave]&.each { |listener| listener.on_statements_node_leave(node) }
2079
+ end
2080
+
2081
+ # Dispatch enter and leave events for StringNode nodes.
2082
+ def visit_string_node(node)
2083
+ listeners[:on_string_node_enter]&.each { |listener| listener.on_string_node_enter(node) }
2084
+ listeners[:on_string_node_leave]&.each { |listener| listener.on_string_node_leave(node) }
2085
+ end
2086
+
2087
+ # Dispatch enter and leave events for SuperNode nodes.
2088
+ def visit_super_node(node)
2089
+ listeners[:on_super_node_enter]&.each { |listener| listener.on_super_node_enter(node) }
2090
+ listeners[:on_super_node_leave]&.each { |listener| listener.on_super_node_leave(node) }
2091
+ end
2092
+
2093
+ # Dispatch enter and leave events for SymbolNode nodes.
2094
+ def visit_symbol_node(node)
2095
+ listeners[:on_symbol_node_enter]&.each { |listener| listener.on_symbol_node_enter(node) }
2096
+ listeners[:on_symbol_node_leave]&.each { |listener| listener.on_symbol_node_leave(node) }
2097
+ end
2098
+
2099
+ # Dispatch enter and leave events for TrueNode nodes.
2100
+ def visit_true_node(node)
2101
+ listeners[:on_true_node_enter]&.each { |listener| listener.on_true_node_enter(node) }
2102
+ listeners[:on_true_node_leave]&.each { |listener| listener.on_true_node_leave(node) }
2103
+ end
2104
+
2105
+ # Dispatch enter and leave events for UndefNode nodes.
2106
+ def visit_undef_node(node)
2107
+ listeners[:on_undef_node_enter]&.each { |listener| listener.on_undef_node_enter(node) }
2108
+ listeners[:on_undef_node_leave]&.each { |listener| listener.on_undef_node_leave(node) }
2109
+ end
2110
+
2111
+ # Dispatch enter and leave events for UnlessNode nodes.
2112
+ def visit_unless_node(node)
2113
+ listeners[:on_unless_node_enter]&.each { |listener| listener.on_unless_node_enter(node) }
2114
+ listeners[:on_unless_node_leave]&.each { |listener| listener.on_unless_node_leave(node) }
2115
+ end
2116
+
2117
+ # Dispatch enter and leave events for UntilNode nodes.
2118
+ def visit_until_node(node)
2119
+ listeners[:on_until_node_enter]&.each { |listener| listener.on_until_node_enter(node) }
2120
+ listeners[:on_until_node_leave]&.each { |listener| listener.on_until_node_leave(node) }
2121
+ end
2122
+
2123
+ # Dispatch enter and leave events for WhenNode nodes.
2124
+ def visit_when_node(node)
2125
+ listeners[:on_when_node_enter]&.each { |listener| listener.on_when_node_enter(node) }
2126
+ listeners[:on_when_node_leave]&.each { |listener| listener.on_when_node_leave(node) }
2127
+ end
2128
+
2129
+ # Dispatch enter and leave events for WhileNode nodes.
2130
+ def visit_while_node(node)
2131
+ listeners[:on_while_node_enter]&.each { |listener| listener.on_while_node_enter(node) }
2132
+ listeners[:on_while_node_leave]&.each { |listener| listener.on_while_node_leave(node) }
2133
+ end
2134
+
2135
+ # Dispatch enter and leave events for XStringNode nodes.
2136
+ def visit_x_string_node(node)
2137
+ listeners[:on_x_string_node_enter]&.each { |listener| listener.on_x_string_node_enter(node) }
2138
+ listeners[:on_x_string_node_leave]&.each { |listener| listener.on_x_string_node_leave(node) }
2139
+ end
2140
+
2141
+ # Dispatch enter and leave events for YieldNode nodes.
2142
+ def visit_yield_node(node)
2143
+ listeners[:on_yield_node_enter]&.each { |listener| listener.on_yield_node_enter(node) }
2144
+ listeners[:on_yield_node_leave]&.each { |listener| listener.on_yield_node_leave(node) }
2145
+ end
2146
+ end
2147
+
2148
+ private_constant :DispatchOnce
2149
+ end
2150
+ end