prism 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -39,426 +39,426 @@ module Prism
39
39
  node.compact_child_nodes.map { |node| node.accept(self) }
40
40
  end
41
41
 
42
- # Compile a AliasGlobalVariableNode node
42
+ # Compile a AliasGlobalVariableNode node
43
43
  alias visit_alias_global_variable_node visit_child_nodes
44
-
44
+
45
45
  # Compile a AliasMethodNode node
46
46
  alias visit_alias_method_node visit_child_nodes
47
-
47
+
48
48
  # Compile a AlternationPatternNode node
49
49
  alias visit_alternation_pattern_node visit_child_nodes
50
-
50
+
51
51
  # Compile a AndNode node
52
52
  alias visit_and_node visit_child_nodes
53
-
53
+
54
54
  # Compile a ArgumentsNode node
55
55
  alias visit_arguments_node visit_child_nodes
56
-
56
+
57
57
  # Compile a ArrayNode node
58
58
  alias visit_array_node visit_child_nodes
59
-
59
+
60
60
  # Compile a ArrayPatternNode node
61
61
  alias visit_array_pattern_node visit_child_nodes
62
-
62
+
63
63
  # Compile a AssocNode node
64
64
  alias visit_assoc_node visit_child_nodes
65
-
65
+
66
66
  # Compile a AssocSplatNode node
67
67
  alias visit_assoc_splat_node visit_child_nodes
68
-
68
+
69
69
  # Compile a BackReferenceReadNode node
70
70
  alias visit_back_reference_read_node visit_child_nodes
71
-
71
+
72
72
  # Compile a BeginNode node
73
73
  alias visit_begin_node visit_child_nodes
74
-
74
+
75
75
  # Compile a BlockArgumentNode node
76
76
  alias visit_block_argument_node visit_child_nodes
77
-
77
+
78
78
  # Compile a BlockLocalVariableNode node
79
79
  alias visit_block_local_variable_node visit_child_nodes
80
-
80
+
81
81
  # Compile a BlockNode node
82
82
  alias visit_block_node visit_child_nodes
83
-
83
+
84
84
  # Compile a BlockParameterNode node
85
85
  alias visit_block_parameter_node visit_child_nodes
86
-
86
+
87
87
  # Compile a BlockParametersNode node
88
88
  alias visit_block_parameters_node visit_child_nodes
89
-
89
+
90
90
  # Compile a BreakNode node
91
91
  alias visit_break_node visit_child_nodes
92
-
92
+
93
93
  # Compile a CallAndWriteNode node
94
94
  alias visit_call_and_write_node visit_child_nodes
95
-
95
+
96
96
  # Compile a CallNode node
97
97
  alias visit_call_node visit_child_nodes
98
-
98
+
99
99
  # Compile a CallOperatorWriteNode node
100
100
  alias visit_call_operator_write_node visit_child_nodes
101
-
101
+
102
102
  # Compile a CallOrWriteNode node
103
103
  alias visit_call_or_write_node visit_child_nodes
104
-
104
+
105
105
  # Compile a CapturePatternNode node
106
106
  alias visit_capture_pattern_node visit_child_nodes
107
-
107
+
108
108
  # Compile a CaseNode node
109
109
  alias visit_case_node visit_child_nodes
110
-
110
+
111
111
  # Compile a ClassNode node
112
112
  alias visit_class_node visit_child_nodes
113
-
113
+
114
114
  # Compile a ClassVariableAndWriteNode node
115
115
  alias visit_class_variable_and_write_node visit_child_nodes
116
-
116
+
117
117
  # Compile a ClassVariableOperatorWriteNode node
118
118
  alias visit_class_variable_operator_write_node visit_child_nodes
119
-
119
+
120
120
  # Compile a ClassVariableOrWriteNode node
121
121
  alias visit_class_variable_or_write_node visit_child_nodes
122
-
122
+
123
123
  # Compile a ClassVariableReadNode node
124
124
  alias visit_class_variable_read_node visit_child_nodes
125
-
125
+
126
126
  # Compile a ClassVariableTargetNode node
127
127
  alias visit_class_variable_target_node visit_child_nodes
128
-
128
+
129
129
  # Compile a ClassVariableWriteNode node
130
130
  alias visit_class_variable_write_node visit_child_nodes
131
-
131
+
132
132
  # Compile a ConstantAndWriteNode node
133
133
  alias visit_constant_and_write_node visit_child_nodes
134
-
134
+
135
135
  # Compile a ConstantOperatorWriteNode node
136
136
  alias visit_constant_operator_write_node visit_child_nodes
137
-
137
+
138
138
  # Compile a ConstantOrWriteNode node
139
139
  alias visit_constant_or_write_node visit_child_nodes
140
-
140
+
141
141
  # Compile a ConstantPathAndWriteNode node
142
142
  alias visit_constant_path_and_write_node visit_child_nodes
143
-
143
+
144
144
  # Compile a ConstantPathNode node
145
145
  alias visit_constant_path_node visit_child_nodes
146
-
146
+
147
147
  # Compile a ConstantPathOperatorWriteNode node
148
148
  alias visit_constant_path_operator_write_node visit_child_nodes
149
-
149
+
150
150
  # Compile a ConstantPathOrWriteNode node
151
151
  alias visit_constant_path_or_write_node visit_child_nodes
152
-
152
+
153
153
  # Compile a ConstantPathTargetNode node
154
154
  alias visit_constant_path_target_node visit_child_nodes
155
-
155
+
156
156
  # Compile a ConstantPathWriteNode node
157
157
  alias visit_constant_path_write_node visit_child_nodes
158
-
158
+
159
159
  # Compile a ConstantReadNode node
160
160
  alias visit_constant_read_node visit_child_nodes
161
-
161
+
162
162
  # Compile a ConstantTargetNode node
163
163
  alias visit_constant_target_node visit_child_nodes
164
-
164
+
165
165
  # Compile a ConstantWriteNode node
166
166
  alias visit_constant_write_node visit_child_nodes
167
-
167
+
168
168
  # Compile a DefNode node
169
169
  alias visit_def_node visit_child_nodes
170
-
170
+
171
171
  # Compile a DefinedNode node
172
172
  alias visit_defined_node visit_child_nodes
173
-
173
+
174
174
  # Compile a ElseNode node
175
175
  alias visit_else_node visit_child_nodes
176
-
176
+
177
177
  # Compile a EmbeddedStatementsNode node
178
178
  alias visit_embedded_statements_node visit_child_nodes
179
-
179
+
180
180
  # Compile a EmbeddedVariableNode node
181
181
  alias visit_embedded_variable_node visit_child_nodes
182
-
182
+
183
183
  # Compile a EnsureNode node
184
184
  alias visit_ensure_node visit_child_nodes
185
-
185
+
186
186
  # Compile a FalseNode node
187
187
  alias visit_false_node visit_child_nodes
188
-
188
+
189
189
  # Compile a FindPatternNode node
190
190
  alias visit_find_pattern_node visit_child_nodes
191
-
191
+
192
192
  # Compile a FlipFlopNode node
193
193
  alias visit_flip_flop_node visit_child_nodes
194
-
194
+
195
195
  # Compile a FloatNode node
196
196
  alias visit_float_node visit_child_nodes
197
-
197
+
198
198
  # Compile a ForNode node
199
199
  alias visit_for_node visit_child_nodes
200
-
200
+
201
201
  # Compile a ForwardingArgumentsNode node
202
202
  alias visit_forwarding_arguments_node visit_child_nodes
203
-
203
+
204
204
  # Compile a ForwardingParameterNode node
205
205
  alias visit_forwarding_parameter_node visit_child_nodes
206
-
206
+
207
207
  # Compile a ForwardingSuperNode node
208
208
  alias visit_forwarding_super_node visit_child_nodes
209
-
209
+
210
210
  # Compile a GlobalVariableAndWriteNode node
211
211
  alias visit_global_variable_and_write_node visit_child_nodes
212
-
212
+
213
213
  # Compile a GlobalVariableOperatorWriteNode node
214
214
  alias visit_global_variable_operator_write_node visit_child_nodes
215
-
215
+
216
216
  # Compile a GlobalVariableOrWriteNode node
217
217
  alias visit_global_variable_or_write_node visit_child_nodes
218
-
218
+
219
219
  # Compile a GlobalVariableReadNode node
220
220
  alias visit_global_variable_read_node visit_child_nodes
221
-
221
+
222
222
  # Compile a GlobalVariableTargetNode node
223
223
  alias visit_global_variable_target_node visit_child_nodes
224
-
224
+
225
225
  # Compile a GlobalVariableWriteNode node
226
226
  alias visit_global_variable_write_node visit_child_nodes
227
-
227
+
228
228
  # Compile a HashNode node
229
229
  alias visit_hash_node visit_child_nodes
230
-
230
+
231
231
  # Compile a HashPatternNode node
232
232
  alias visit_hash_pattern_node visit_child_nodes
233
-
233
+
234
234
  # Compile a IfNode node
235
235
  alias visit_if_node visit_child_nodes
236
-
236
+
237
237
  # Compile a ImaginaryNode node
238
238
  alias visit_imaginary_node visit_child_nodes
239
-
239
+
240
240
  # Compile a ImplicitNode node
241
241
  alias visit_implicit_node visit_child_nodes
242
-
242
+
243
243
  # Compile a InNode node
244
244
  alias visit_in_node visit_child_nodes
245
-
245
+
246
246
  # Compile a InstanceVariableAndWriteNode node
247
247
  alias visit_instance_variable_and_write_node visit_child_nodes
248
-
248
+
249
249
  # Compile a InstanceVariableOperatorWriteNode node
250
250
  alias visit_instance_variable_operator_write_node visit_child_nodes
251
-
251
+
252
252
  # Compile a InstanceVariableOrWriteNode node
253
253
  alias visit_instance_variable_or_write_node visit_child_nodes
254
-
254
+
255
255
  # Compile a InstanceVariableReadNode node
256
256
  alias visit_instance_variable_read_node visit_child_nodes
257
-
257
+
258
258
  # Compile a InstanceVariableTargetNode node
259
259
  alias visit_instance_variable_target_node visit_child_nodes
260
-
260
+
261
261
  # Compile a InstanceVariableWriteNode node
262
262
  alias visit_instance_variable_write_node visit_child_nodes
263
-
263
+
264
264
  # Compile a IntegerNode node
265
265
  alias visit_integer_node visit_child_nodes
266
-
266
+
267
267
  # Compile a InterpolatedMatchLastLineNode node
268
268
  alias visit_interpolated_match_last_line_node visit_child_nodes
269
-
269
+
270
270
  # Compile a InterpolatedRegularExpressionNode node
271
271
  alias visit_interpolated_regular_expression_node visit_child_nodes
272
-
272
+
273
273
  # Compile a InterpolatedStringNode node
274
274
  alias visit_interpolated_string_node visit_child_nodes
275
-
275
+
276
276
  # Compile a InterpolatedSymbolNode node
277
277
  alias visit_interpolated_symbol_node visit_child_nodes
278
-
278
+
279
279
  # Compile a InterpolatedXStringNode node
280
280
  alias visit_interpolated_x_string_node visit_child_nodes
281
-
281
+
282
282
  # Compile a KeywordHashNode node
283
283
  alias visit_keyword_hash_node visit_child_nodes
284
-
284
+
285
285
  # Compile a KeywordParameterNode node
286
286
  alias visit_keyword_parameter_node visit_child_nodes
287
-
287
+
288
288
  # Compile a KeywordRestParameterNode node
289
289
  alias visit_keyword_rest_parameter_node visit_child_nodes
290
-
290
+
291
291
  # Compile a LambdaNode node
292
292
  alias visit_lambda_node visit_child_nodes
293
-
293
+
294
294
  # Compile a LocalVariableAndWriteNode node
295
295
  alias visit_local_variable_and_write_node visit_child_nodes
296
-
296
+
297
297
  # Compile a LocalVariableOperatorWriteNode node
298
298
  alias visit_local_variable_operator_write_node visit_child_nodes
299
-
299
+
300
300
  # Compile a LocalVariableOrWriteNode node
301
301
  alias visit_local_variable_or_write_node visit_child_nodes
302
-
302
+
303
303
  # Compile a LocalVariableReadNode node
304
304
  alias visit_local_variable_read_node visit_child_nodes
305
-
305
+
306
306
  # Compile a LocalVariableTargetNode node
307
307
  alias visit_local_variable_target_node visit_child_nodes
308
-
308
+
309
309
  # Compile a LocalVariableWriteNode node
310
310
  alias visit_local_variable_write_node visit_child_nodes
311
-
311
+
312
312
  # Compile a MatchLastLineNode node
313
313
  alias visit_match_last_line_node visit_child_nodes
314
-
314
+
315
315
  # Compile a MatchPredicateNode node
316
316
  alias visit_match_predicate_node visit_child_nodes
317
-
317
+
318
318
  # Compile a MatchRequiredNode node
319
319
  alias visit_match_required_node visit_child_nodes
320
-
320
+
321
321
  # Compile a MatchWriteNode node
322
322
  alias visit_match_write_node visit_child_nodes
323
-
323
+
324
324
  # Compile a MissingNode node
325
325
  alias visit_missing_node visit_child_nodes
326
-
326
+
327
327
  # Compile a ModuleNode node
328
328
  alias visit_module_node visit_child_nodes
329
-
329
+
330
330
  # Compile a MultiTargetNode node
331
331
  alias visit_multi_target_node visit_child_nodes
332
-
332
+
333
333
  # Compile a MultiWriteNode node
334
334
  alias visit_multi_write_node visit_child_nodes
335
-
335
+
336
336
  # Compile a NextNode node
337
337
  alias visit_next_node visit_child_nodes
338
-
338
+
339
339
  # Compile a NilNode node
340
340
  alias visit_nil_node visit_child_nodes
341
-
341
+
342
342
  # Compile a NoKeywordsParameterNode node
343
343
  alias visit_no_keywords_parameter_node visit_child_nodes
344
-
344
+
345
345
  # Compile a NumberedReferenceReadNode node
346
346
  alias visit_numbered_reference_read_node visit_child_nodes
347
-
347
+
348
348
  # Compile a OptionalParameterNode node
349
349
  alias visit_optional_parameter_node visit_child_nodes
350
-
350
+
351
351
  # Compile a OrNode node
352
352
  alias visit_or_node visit_child_nodes
353
-
353
+
354
354
  # Compile a ParametersNode node
355
355
  alias visit_parameters_node visit_child_nodes
356
-
356
+
357
357
  # Compile a ParenthesesNode node
358
358
  alias visit_parentheses_node visit_child_nodes
359
-
359
+
360
360
  # Compile a PinnedExpressionNode node
361
361
  alias visit_pinned_expression_node visit_child_nodes
362
-
362
+
363
363
  # Compile a PinnedVariableNode node
364
364
  alias visit_pinned_variable_node visit_child_nodes
365
-
365
+
366
366
  # Compile a PostExecutionNode node
367
367
  alias visit_post_execution_node visit_child_nodes
368
-
368
+
369
369
  # Compile a PreExecutionNode node
370
370
  alias visit_pre_execution_node visit_child_nodes
371
-
371
+
372
372
  # Compile a ProgramNode node
373
373
  alias visit_program_node visit_child_nodes
374
-
374
+
375
375
  # Compile a RangeNode node
376
376
  alias visit_range_node visit_child_nodes
377
-
377
+
378
378
  # Compile a RationalNode node
379
379
  alias visit_rational_node visit_child_nodes
380
-
380
+
381
381
  # Compile a RedoNode node
382
382
  alias visit_redo_node visit_child_nodes
383
-
383
+
384
384
  # Compile a RegularExpressionNode node
385
385
  alias visit_regular_expression_node visit_child_nodes
386
-
386
+
387
387
  # Compile a RequiredDestructuredParameterNode node
388
388
  alias visit_required_destructured_parameter_node visit_child_nodes
389
-
389
+
390
390
  # Compile a RequiredParameterNode node
391
391
  alias visit_required_parameter_node visit_child_nodes
392
-
392
+
393
393
  # Compile a RescueModifierNode node
394
394
  alias visit_rescue_modifier_node visit_child_nodes
395
-
395
+
396
396
  # Compile a RescueNode node
397
397
  alias visit_rescue_node visit_child_nodes
398
-
398
+
399
399
  # Compile a RestParameterNode node
400
400
  alias visit_rest_parameter_node visit_child_nodes
401
-
401
+
402
402
  # Compile a RetryNode node
403
403
  alias visit_retry_node visit_child_nodes
404
-
404
+
405
405
  # Compile a ReturnNode node
406
406
  alias visit_return_node visit_child_nodes
407
-
407
+
408
408
  # Compile a SelfNode node
409
409
  alias visit_self_node visit_child_nodes
410
-
410
+
411
411
  # Compile a SingletonClassNode node
412
412
  alias visit_singleton_class_node visit_child_nodes
413
-
413
+
414
414
  # Compile a SourceEncodingNode node
415
415
  alias visit_source_encoding_node visit_child_nodes
416
-
416
+
417
417
  # Compile a SourceFileNode node
418
418
  alias visit_source_file_node visit_child_nodes
419
-
419
+
420
420
  # Compile a SourceLineNode node
421
421
  alias visit_source_line_node visit_child_nodes
422
-
422
+
423
423
  # Compile a SplatNode node
424
424
  alias visit_splat_node visit_child_nodes
425
-
425
+
426
426
  # Compile a StatementsNode node
427
427
  alias visit_statements_node visit_child_nodes
428
-
428
+
429
429
  # Compile a StringConcatNode node
430
430
  alias visit_string_concat_node visit_child_nodes
431
-
431
+
432
432
  # Compile a StringNode node
433
433
  alias visit_string_node visit_child_nodes
434
-
434
+
435
435
  # Compile a SuperNode node
436
436
  alias visit_super_node visit_child_nodes
437
-
437
+
438
438
  # Compile a SymbolNode node
439
439
  alias visit_symbol_node visit_child_nodes
440
-
440
+
441
441
  # Compile a TrueNode node
442
442
  alias visit_true_node visit_child_nodes
443
-
443
+
444
444
  # Compile a UndefNode node
445
445
  alias visit_undef_node visit_child_nodes
446
-
446
+
447
447
  # Compile a UnlessNode node
448
448
  alias visit_unless_node visit_child_nodes
449
-
449
+
450
450
  # Compile a UntilNode node
451
451
  alias visit_until_node visit_child_nodes
452
-
452
+
453
453
  # Compile a WhenNode node
454
454
  alias visit_when_node visit_child_nodes
455
-
455
+
456
456
  # Compile a WhileNode node
457
457
  alias visit_while_node visit_child_nodes
458
-
458
+
459
459
  # Compile a XStringNode node
460
460
  alias visit_x_string_node visit_child_nodes
461
-
461
+
462
462
  # Compile a YieldNode node
463
463
  alias visit_yield_node visit_child_nodes
464
464
  end
data/lib/prism/ffi.rb CHANGED
@@ -234,11 +234,11 @@ module Prism
234
234
  loader = Serialize::Loader.new(source, buffer.read)
235
235
 
236
236
  tokens = loader.load_tokens
237
- node, comments, errors, warnings = loader.load_nodes
237
+ node, comments, magic_comments, errors, warnings = loader.load_nodes
238
238
 
239
239
  tokens.each { |token,| token.value.force_encoding(loader.encoding) }
240
240
 
241
- ParseResult.new([node, tokens], comments, errors, warnings, source)
241
+ ParseResult.new([node, tokens], comments, magic_comments, errors, warnings, source)
242
242
  end
243
243
  end
244
244
 
@@ -370,10 +370,9 @@ module Prism
370
370
  @embexpr_balance -= 1
371
371
  when :on_tstring_content
372
372
  if embexpr_balance == 0
373
- token.value.split(/(?<=\n)/).each_with_index do |line, index|
374
- next if line.strip.empty? && line.end_with?("\n")
375
- next if !(dedent_next || index > 0)
373
+ line = token.value
376
374
 
375
+ if !(line.strip.empty? && line.end_with?("\n")) && dedent_next
377
376
  leading = line[/\A(\s*)\n?/, 1]
378
377
  next_dedent = 0
379
378
 
@@ -430,6 +429,45 @@ module Prism
430
429
  return results
431
430
  end
432
431
 
432
+ # If the minimum common whitespace is 0, then we need to concatenate
433
+ # string nodes together that are immediately adjacent.
434
+ if dedent == 0
435
+ results = []
436
+ embexpr_balance = 0
437
+
438
+ index = 0
439
+ max_index = tokens.length
440
+
441
+ while index < max_index
442
+ token = tokens[index]
443
+ index += 1
444
+
445
+ case token.event
446
+ when :on_embexpr_beg, :on_heredoc_beg
447
+ embexpr_balance += 1
448
+ results << token
449
+ when :on_embexpr_end, :on_heredoc_end
450
+ embexpr_balance -= 1
451
+ results << token
452
+ when :on_tstring_content
453
+ if embexpr_balance == 0
454
+ results << token
455
+
456
+ while index < max_index && tokens[index].event == :on_tstring_content
457
+ token.value << tokens[index].value
458
+ index += 1
459
+ end
460
+ else
461
+ results << token
462
+ end
463
+ else
464
+ results << token
465
+ end
466
+ end
467
+
468
+ return results
469
+ end
470
+
433
471
  # Otherwise, we're going to run through each token in the list and
434
472
  # insert on_ignored_sp tokens for the amount of dedent that we need to
435
473
  # perform. We also need to remove the dedent from the beginning of
@@ -787,11 +825,7 @@ module Prism
787
825
  # We sort by location to compare against Ripper's output
788
826
  tokens.sort_by!(&:location)
789
827
 
790
- if result_value.size - 1 > tokens.size
791
- raise StandardError, "Lost tokens when performing lex_compat"
792
- end
793
-
794
- ParseResult.new(tokens, result.comments, result.errors, result.warnings, [])
828
+ ParseResult.new(tokens, result.comments, result.magic_comments, result.errors, result.warnings, [])
795
829
  end
796
830
  end
797
831