prism 0.13.0 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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