prism 0.27.0 → 0.29.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +45 -1
- data/config.yml +68 -44
- data/docs/configuration.md +1 -0
- data/ext/prism/api_node.c +854 -847
- data/ext/prism/extconf.rb +27 -23
- data/ext/prism/extension.c +5 -3
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +70 -48
- data/include/prism/diagnostic.h +23 -6
- data/include/prism/options.h +2 -2
- data/include/prism/parser.h +10 -0
- data/include/prism/static_literals.h +8 -6
- data/include/prism/version.h +2 -2
- data/lib/prism/desugar_compiler.rb +4 -4
- data/lib/prism/dot_visitor.rb +54 -38
- data/lib/prism/dsl.rb +24 -24
- data/lib/prism/ffi.rb +4 -4
- data/lib/prism/inspect_visitor.rb +2156 -0
- data/lib/prism/lex_compat.rb +1 -1
- data/lib/prism/mutation_compiler.rb +2 -2
- data/lib/prism/node.rb +737 -1863
- data/lib/prism/node_ext.rb +176 -5
- data/lib/prism/parse_result/comments.rb +1 -1
- data/lib/prism/parse_result/newlines.rb +1 -1
- data/lib/prism/parse_result.rb +78 -0
- data/lib/prism/pattern.rb +12 -6
- data/lib/prism/polyfill/byteindex.rb +13 -0
- data/lib/prism/polyfill/unpack1.rb +14 -0
- data/lib/prism/reflection.rb +20 -20
- data/lib/prism/serialize.rb +32 -15
- data/lib/prism/translation/parser/compiler.rb +156 -26
- data/lib/prism/translation/parser.rb +7 -7
- data/lib/prism/translation/ripper.rb +29 -25
- data/lib/prism/translation/ruby_parser.rb +13 -13
- data/lib/prism.rb +2 -1
- data/prism.gemspec +37 -38
- data/rbi/prism/compiler.rbi +3 -5
- data/rbi/prism/inspect_visitor.rbi +12 -0
- data/rbi/prism/node.rbi +405 -370
- data/rbi/prism/node_ext.rbi +5 -0
- data/rbi/prism/parse_result.rbi +23 -0
- data/rbi/prism/translation/ripper.rbi +1 -11
- data/sig/prism/dsl.rbs +12 -12
- data/sig/prism/inspect_visitor.rbs +22 -0
- data/sig/prism/lex_compat.rbs +10 -0
- data/sig/prism/node.rbs +108 -91
- data/sig/prism/node_ext.rbs +4 -0
- data/sig/prism/parse_result.rbs +12 -0
- data/src/diagnostic.c +66 -33
- data/src/node.c +89 -64
- data/src/options.c +2 -2
- data/src/prettyprint.c +109 -66
- data/src/prism.c +862 -317
- data/src/serialize.c +21 -18
- data/src/static_literals.c +120 -34
- data/src/token_type.c +6 -6
- metadata +8 -9
- data/lib/prism/node_inspector.rb +0 -68
- data/lib/prism/polyfill/string.rb +0 -12
- data/rbi/prism/desugar_compiler.rbi +0 -5
- data/rbi/prism/mutation_compiler.rbi +0 -5
- data/rbi/prism/translation/parser/compiler.rbi +0 -13
- data/rbi/prism/translation/ripper/ripper_compiler.rbi +0 -5
- data/rbi/prism/translation/ruby_parser.rbi +0 -11
data/lib/prism/serialize.rb
CHANGED
@@ -7,7 +7,7 @@ if you are looking to modify the template
|
|
7
7
|
=end
|
8
8
|
|
9
9
|
require "stringio"
|
10
|
-
require_relative "polyfill/
|
10
|
+
require_relative "polyfill/unpack1"
|
11
11
|
|
12
12
|
module Prism
|
13
13
|
# A module responsible for deserializing parse results.
|
@@ -18,7 +18,7 @@ module Prism
|
|
18
18
|
|
19
19
|
# The minor version of prism that we are expecting to find in the serialized
|
20
20
|
# strings.
|
21
|
-
MINOR_VERSION =
|
21
|
+
MINOR_VERSION = 29
|
22
22
|
|
23
23
|
# The patch version of prism that we are expecting to find in the serialized
|
24
24
|
# strings.
|
@@ -27,7 +27,7 @@ module Prism
|
|
27
27
|
# Deserialize the AST represented by the given string into a parse result.
|
28
28
|
def self.load(input, serialized)
|
29
29
|
input = input.dup
|
30
|
-
source = Source.
|
30
|
+
source = Source.for(input)
|
31
31
|
loader = Loader.new(source, serialized)
|
32
32
|
result = loader.load_result
|
33
33
|
|
@@ -133,13 +133,16 @@ module Prism
|
|
133
133
|
:argument_bare_hash,
|
134
134
|
:argument_block_forwarding,
|
135
135
|
:argument_block_multi,
|
136
|
+
:argument_conflict_ampersand,
|
137
|
+
:argument_conflict_star,
|
138
|
+
:argument_conflict_star_star,
|
136
139
|
:argument_formal_class,
|
137
140
|
:argument_formal_constant,
|
138
141
|
:argument_formal_global,
|
139
142
|
:argument_formal_ivar,
|
140
143
|
:argument_forwarding_unbound,
|
141
144
|
:argument_in,
|
142
|
-
:
|
145
|
+
:argument_no_forwarding_ampersand,
|
143
146
|
:argument_no_forwarding_ellipses,
|
144
147
|
:argument_no_forwarding_star,
|
145
148
|
:argument_no_forwarding_star_star,
|
@@ -221,6 +224,7 @@ module Prism
|
|
221
224
|
:expect_expression_after_splat_hash,
|
222
225
|
:expect_expression_after_star,
|
223
226
|
:expect_ident_req_parameter,
|
227
|
+
:expect_in_delimiter,
|
224
228
|
:expect_lparen_req_parameter,
|
225
229
|
:expect_message,
|
226
230
|
:expect_rbracket,
|
@@ -249,16 +253,18 @@ module Prism
|
|
249
253
|
:hash_rocket,
|
250
254
|
:hash_term,
|
251
255
|
:hash_value,
|
256
|
+
:heredoc_identifier,
|
252
257
|
:heredoc_term,
|
253
258
|
:incomplete_question_mark,
|
254
259
|
:incomplete_variable_class,
|
255
|
-
:
|
260
|
+
:incomplete_variable_class_3_3,
|
256
261
|
:incomplete_variable_instance,
|
257
|
-
:
|
262
|
+
:incomplete_variable_instance_3_3,
|
258
263
|
:instance_variable_bare,
|
259
264
|
:invalid_block_exit,
|
260
265
|
:invalid_character,
|
261
266
|
:invalid_encoding_magic_comment,
|
267
|
+
:invalid_escape_character,
|
262
268
|
:invalid_float_exponent,
|
263
269
|
:invalid_local_variable_read,
|
264
270
|
:invalid_local_variable_write,
|
@@ -267,16 +273,19 @@ module Prism
|
|
267
273
|
:invalid_multibyte_escape,
|
268
274
|
:invalid_number_binary,
|
269
275
|
:invalid_number_decimal,
|
276
|
+
:invalid_number_fraction,
|
270
277
|
:invalid_number_hexadecimal,
|
271
278
|
:invalid_number_octal,
|
272
|
-
:
|
279
|
+
:invalid_number_underscore_inner,
|
280
|
+
:invalid_number_underscore_trailing,
|
273
281
|
:invalid_percent,
|
274
282
|
:invalid_printable_character,
|
275
283
|
:invalid_retry_after_else,
|
276
284
|
:invalid_retry_after_ensure,
|
277
285
|
:invalid_retry_without_rescue,
|
286
|
+
:invalid_symbol,
|
278
287
|
:invalid_variable_global,
|
279
|
-
:
|
288
|
+
:invalid_variable_global_3_3,
|
280
289
|
:invalid_yield,
|
281
290
|
:it_not_allowed_numbered,
|
282
291
|
:it_not_allowed_ordinary,
|
@@ -310,6 +319,7 @@ module Prism
|
|
310
319
|
:parameter_assoc_splat_multi,
|
311
320
|
:parameter_block_multi,
|
312
321
|
:parameter_circular,
|
322
|
+
:parameter_forwarding_after_rest,
|
313
323
|
:parameter_method_name,
|
314
324
|
:parameter_name_duplicated,
|
315
325
|
:parameter_no_default,
|
@@ -320,6 +330,7 @@ module Prism
|
|
320
330
|
:parameter_star,
|
321
331
|
:parameter_unexpected_fwd,
|
322
332
|
:parameter_wild_loose_comma,
|
333
|
+
:parameter_unexpected_no_kw,
|
323
334
|
:pattern_capture_duplicate,
|
324
335
|
:pattern_expression_after_bracket,
|
325
336
|
:pattern_expression_after_comma,
|
@@ -331,8 +342,10 @@ module Prism
|
|
331
342
|
:pattern_expression_after_pipe,
|
332
343
|
:pattern_expression_after_range,
|
333
344
|
:pattern_expression_after_rest,
|
345
|
+
:pattern_hash_implicit,
|
334
346
|
:pattern_hash_key,
|
335
347
|
:pattern_hash_key_duplicate,
|
348
|
+
:pattern_hash_key_interpolated,
|
336
349
|
:pattern_hash_key_label,
|
337
350
|
:pattern_hash_key_locals,
|
338
351
|
:pattern_ident_after_hrocket,
|
@@ -373,6 +386,9 @@ module Prism
|
|
373
386
|
:unary_receiver,
|
374
387
|
:undef_argument,
|
375
388
|
:unexpected_block_argument,
|
389
|
+
:unexpected_index_block,
|
390
|
+
:unexpected_index_keywords,
|
391
|
+
:unexpected_safe_navigation,
|
376
392
|
:unexpected_token_close_context,
|
377
393
|
:unexpected_token_ignore,
|
378
394
|
:until_term,
|
@@ -391,7 +407,7 @@ module Prism
|
|
391
407
|
:comparison_after_comparison,
|
392
408
|
:dot_dot_dot_eol,
|
393
409
|
:equal_in_conditional,
|
394
|
-
:
|
410
|
+
:equal_in_conditional_3_3,
|
395
411
|
:end_in_method,
|
396
412
|
:duplicated_hash_key,
|
397
413
|
:duplicated_when_clause,
|
@@ -404,6 +420,7 @@ module Prism
|
|
404
420
|
:keyword_eol,
|
405
421
|
:literal_in_condition_default,
|
406
422
|
:literal_in_condition_verbose,
|
423
|
+
:shareable_constant_value_line,
|
407
424
|
:shebang_carriage_return,
|
408
425
|
:unexpected_carriage_return,
|
409
426
|
:unreachable_statement,
|
@@ -721,7 +738,7 @@ module Prism
|
|
721
738
|
source, load_node, load_location, load_node, location)
|
722
739
|
when 37 then
|
723
740
|
ConstantPathNode.new(
|
724
|
-
source, load_optional_node,
|
741
|
+
source, load_optional_node, load_optional_constant, load_location, load_location, location)
|
725
742
|
when 38 then
|
726
743
|
ConstantPathOperatorWriteNode.new(
|
727
744
|
source, load_node, load_location, load_node, load_required_constant, location)
|
@@ -730,7 +747,7 @@ module Prism
|
|
730
747
|
source, load_node, load_location, load_node, location)
|
731
748
|
when 40 then
|
732
749
|
ConstantPathTargetNode.new(
|
733
|
-
source, load_optional_node,
|
750
|
+
source, load_optional_node, load_optional_constant, load_location, load_location, location)
|
734
751
|
when 41 then
|
735
752
|
ConstantPathWriteNode.new(
|
736
753
|
source, load_node, load_location, load_node, location)
|
@@ -1004,7 +1021,7 @@ module Prism
|
|
1004
1021
|
source, location)
|
1005
1022
|
when 131 then
|
1006
1023
|
ReturnNode.new(
|
1007
|
-
source, load_location, load_optional_node, location)
|
1024
|
+
source, load_varuint, load_location, load_optional_node, location)
|
1008
1025
|
when 132 then
|
1009
1026
|
SelfNode.new(
|
1010
1027
|
source, location)
|
@@ -1256,7 +1273,7 @@ module Prism
|
|
1256
1273
|
-> {
|
1257
1274
|
location = load_location
|
1258
1275
|
ConstantPathNode.new(
|
1259
|
-
source, load_optional_node,
|
1276
|
+
source, load_optional_node, load_optional_constant, load_location, load_location, location)
|
1260
1277
|
},
|
1261
1278
|
-> {
|
1262
1279
|
location = load_location
|
@@ -1271,7 +1288,7 @@ module Prism
|
|
1271
1288
|
-> {
|
1272
1289
|
location = load_location
|
1273
1290
|
ConstantPathTargetNode.new(
|
1274
|
-
source, load_optional_node,
|
1291
|
+
source, load_optional_node, load_optional_constant, load_location, load_location, location)
|
1275
1292
|
},
|
1276
1293
|
-> {
|
1277
1294
|
location = load_location
|
@@ -1727,7 +1744,7 @@ module Prism
|
|
1727
1744
|
-> {
|
1728
1745
|
location = load_location
|
1729
1746
|
ReturnNode.new(
|
1730
|
-
source, load_location, load_optional_node, location)
|
1747
|
+
source, load_varuint, load_location, load_optional_node, location)
|
1731
1748
|
},
|
1732
1749
|
-> {
|
1733
1750
|
location = load_location
|
@@ -328,18 +328,48 @@ module Prism
|
|
328
328
|
[],
|
329
329
|
nil
|
330
330
|
),
|
331
|
-
[node.
|
331
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
332
332
|
visit(node.value)
|
333
333
|
)
|
334
334
|
end
|
335
335
|
|
336
336
|
# foo.bar &&= baz
|
337
337
|
# ^^^^^^^^^^^^^^^
|
338
|
-
|
338
|
+
def visit_call_and_write_node(node)
|
339
|
+
call_operator_loc = node.call_operator_loc
|
340
|
+
|
341
|
+
builder.op_assign(
|
342
|
+
builder.call_method(
|
343
|
+
visit(node.receiver),
|
344
|
+
call_operator_loc.nil? ? nil : [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)],
|
345
|
+
node.message_loc ? [node.read_name, srange(node.message_loc)] : nil,
|
346
|
+
nil,
|
347
|
+
[],
|
348
|
+
nil
|
349
|
+
),
|
350
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
351
|
+
visit(node.value)
|
352
|
+
)
|
353
|
+
end
|
339
354
|
|
340
355
|
# foo.bar ||= baz
|
341
356
|
# ^^^^^^^^^^^^^^^
|
342
|
-
|
357
|
+
def visit_call_or_write_node(node)
|
358
|
+
call_operator_loc = node.call_operator_loc
|
359
|
+
|
360
|
+
builder.op_assign(
|
361
|
+
builder.call_method(
|
362
|
+
visit(node.receiver),
|
363
|
+
call_operator_loc.nil? ? nil : [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)],
|
364
|
+
node.message_loc ? [node.read_name, srange(node.message_loc)] : nil,
|
365
|
+
nil,
|
366
|
+
[],
|
367
|
+
nil
|
368
|
+
),
|
369
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
370
|
+
visit(node.value)
|
371
|
+
)
|
372
|
+
end
|
343
373
|
|
344
374
|
# foo.bar, = 1
|
345
375
|
# ^^^^^^^
|
@@ -419,18 +449,30 @@ module Prism
|
|
419
449
|
def visit_class_variable_operator_write_node(node)
|
420
450
|
builder.op_assign(
|
421
451
|
builder.assignable(builder.cvar(token(node.name_loc))),
|
422
|
-
[node.
|
452
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
423
453
|
visit(node.value)
|
424
454
|
)
|
425
455
|
end
|
426
456
|
|
427
457
|
# @@foo &&= bar
|
428
458
|
# ^^^^^^^^^^^^^
|
429
|
-
|
459
|
+
def visit_class_variable_and_write_node(node)
|
460
|
+
builder.op_assign(
|
461
|
+
builder.assignable(builder.cvar(token(node.name_loc))),
|
462
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
463
|
+
visit(node.value)
|
464
|
+
)
|
465
|
+
end
|
430
466
|
|
431
467
|
# @@foo ||= bar
|
432
468
|
# ^^^^^^^^^^^^^
|
433
|
-
|
469
|
+
def visit_class_variable_or_write_node(node)
|
470
|
+
builder.op_assign(
|
471
|
+
builder.assignable(builder.cvar(token(node.name_loc))),
|
472
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
473
|
+
visit(node.value)
|
474
|
+
)
|
475
|
+
end
|
434
476
|
|
435
477
|
# @@foo, = bar
|
436
478
|
# ^^^^^
|
@@ -458,18 +500,30 @@ module Prism
|
|
458
500
|
def visit_constant_operator_write_node(node)
|
459
501
|
builder.op_assign(
|
460
502
|
builder.assignable(builder.const([node.name, srange(node.name_loc)])),
|
461
|
-
[node.
|
503
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
462
504
|
visit(node.value)
|
463
505
|
)
|
464
506
|
end
|
465
507
|
|
466
508
|
# Foo &&= bar
|
467
509
|
# ^^^^^^^^^^^^
|
468
|
-
|
510
|
+
def visit_constant_and_write_node(node)
|
511
|
+
builder.op_assign(
|
512
|
+
builder.assignable(builder.const([node.name, srange(node.name_loc)])),
|
513
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
514
|
+
visit(node.value)
|
515
|
+
)
|
516
|
+
end
|
469
517
|
|
470
518
|
# Foo ||= bar
|
471
519
|
# ^^^^^^^^^^^^
|
472
|
-
|
520
|
+
def visit_constant_or_write_node(node)
|
521
|
+
builder.op_assign(
|
522
|
+
builder.assignable(builder.const([node.name, srange(node.name_loc)])),
|
523
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
524
|
+
visit(node.value)
|
525
|
+
)
|
526
|
+
end
|
473
527
|
|
474
528
|
# Foo, = bar
|
475
529
|
# ^^^
|
@@ -483,13 +537,13 @@ module Prism
|
|
483
537
|
if node.parent.nil?
|
484
538
|
builder.const_global(
|
485
539
|
token(node.delimiter_loc),
|
486
|
-
[node.
|
540
|
+
[node.name, srange(node.name_loc)]
|
487
541
|
)
|
488
542
|
else
|
489
543
|
builder.const_fetch(
|
490
544
|
visit(node.parent),
|
491
545
|
token(node.delimiter_loc),
|
492
|
-
[node.
|
546
|
+
[node.name, srange(node.name_loc)]
|
493
547
|
)
|
494
548
|
end
|
495
549
|
end
|
@@ -512,18 +566,30 @@ module Prism
|
|
512
566
|
def visit_constant_path_operator_write_node(node)
|
513
567
|
builder.op_assign(
|
514
568
|
builder.assignable(visit(node.target)),
|
515
|
-
[node.
|
569
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
516
570
|
visit(node.value)
|
517
571
|
)
|
518
572
|
end
|
519
573
|
|
520
574
|
# Foo::Bar &&= baz
|
521
575
|
# ^^^^^^^^^^^^^^^^
|
522
|
-
|
576
|
+
def visit_constant_path_and_write_node(node)
|
577
|
+
builder.op_assign(
|
578
|
+
builder.assignable(visit(node.target)),
|
579
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
580
|
+
visit(node.value)
|
581
|
+
)
|
582
|
+
end
|
523
583
|
|
524
584
|
# Foo::Bar ||= baz
|
525
585
|
# ^^^^^^^^^^^^^^^^
|
526
|
-
|
586
|
+
def visit_constant_path_or_write_node(node)
|
587
|
+
builder.op_assign(
|
588
|
+
builder.assignable(visit(node.target)),
|
589
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
590
|
+
visit(node.value)
|
591
|
+
)
|
592
|
+
end
|
527
593
|
|
528
594
|
# Foo::Bar, = baz
|
529
595
|
# ^^^^^^^^
|
@@ -711,18 +777,30 @@ module Prism
|
|
711
777
|
def visit_global_variable_operator_write_node(node)
|
712
778
|
builder.op_assign(
|
713
779
|
builder.assignable(builder.gvar(token(node.name_loc))),
|
714
|
-
[node.
|
780
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
715
781
|
visit(node.value)
|
716
782
|
)
|
717
783
|
end
|
718
784
|
|
719
785
|
# $foo &&= bar
|
720
786
|
# ^^^^^^^^^^^^
|
721
|
-
|
787
|
+
def visit_global_variable_and_write_node(node)
|
788
|
+
builder.op_assign(
|
789
|
+
builder.assignable(builder.gvar(token(node.name_loc))),
|
790
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
791
|
+
visit(node.value)
|
792
|
+
)
|
793
|
+
end
|
722
794
|
|
723
795
|
# $foo ||= bar
|
724
796
|
# ^^^^^^^^^^^^
|
725
|
-
|
797
|
+
def visit_global_variable_or_write_node(node)
|
798
|
+
builder.op_assign(
|
799
|
+
builder.assignable(builder.gvar(token(node.name_loc))),
|
800
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
801
|
+
visit(node.value)
|
802
|
+
)
|
803
|
+
end
|
726
804
|
|
727
805
|
# $foo, = bar
|
728
806
|
# ^^^^
|
@@ -857,18 +935,46 @@ module Prism
|
|
857
935
|
visit_all(arguments),
|
858
936
|
token(node.closing_loc)
|
859
937
|
),
|
860
|
-
[node.
|
938
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
861
939
|
visit(node.value)
|
862
940
|
)
|
863
941
|
end
|
864
942
|
|
865
943
|
# foo[bar] &&= baz
|
866
944
|
# ^^^^^^^^^^^^^^^^
|
867
|
-
|
945
|
+
def visit_index_and_write_node(node)
|
946
|
+
arguments = node.arguments&.arguments || []
|
947
|
+
arguments << node.block if node.block
|
948
|
+
|
949
|
+
builder.op_assign(
|
950
|
+
builder.index(
|
951
|
+
visit(node.receiver),
|
952
|
+
token(node.opening_loc),
|
953
|
+
visit_all(arguments),
|
954
|
+
token(node.closing_loc)
|
955
|
+
),
|
956
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
957
|
+
visit(node.value)
|
958
|
+
)
|
959
|
+
end
|
868
960
|
|
869
961
|
# foo[bar] ||= baz
|
870
962
|
# ^^^^^^^^^^^^^^^^
|
871
|
-
|
963
|
+
def visit_index_or_write_node(node)
|
964
|
+
arguments = node.arguments&.arguments || []
|
965
|
+
arguments << node.block if node.block
|
966
|
+
|
967
|
+
builder.op_assign(
|
968
|
+
builder.index(
|
969
|
+
visit(node.receiver),
|
970
|
+
token(node.opening_loc),
|
971
|
+
visit_all(arguments),
|
972
|
+
token(node.closing_loc)
|
973
|
+
),
|
974
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
975
|
+
visit(node.value)
|
976
|
+
)
|
977
|
+
end
|
872
978
|
|
873
979
|
# foo[bar], = 1
|
874
980
|
# ^^^^^^^^
|
@@ -902,18 +1008,30 @@ module Prism
|
|
902
1008
|
def visit_instance_variable_operator_write_node(node)
|
903
1009
|
builder.op_assign(
|
904
1010
|
builder.assignable(builder.ivar(token(node.name_loc))),
|
905
|
-
[node.
|
1011
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
906
1012
|
visit(node.value)
|
907
1013
|
)
|
908
1014
|
end
|
909
1015
|
|
910
1016
|
# @foo &&= bar
|
911
1017
|
# ^^^^^^^^^^^^
|
912
|
-
|
1018
|
+
def visit_instance_variable_and_write_node(node)
|
1019
|
+
builder.op_assign(
|
1020
|
+
builder.assignable(builder.ivar(token(node.name_loc))),
|
1021
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
1022
|
+
visit(node.value)
|
1023
|
+
)
|
1024
|
+
end
|
913
1025
|
|
914
1026
|
# @foo ||= bar
|
915
1027
|
# ^^^^^^^^^^^^
|
916
|
-
|
1028
|
+
def visit_instance_variable_or_write_node(node)
|
1029
|
+
builder.op_assign(
|
1030
|
+
builder.assignable(builder.ivar(token(node.name_loc))),
|
1031
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
1032
|
+
visit(node.value)
|
1033
|
+
)
|
1034
|
+
end
|
917
1035
|
|
918
1036
|
# @foo, = bar
|
919
1037
|
# ^^^^
|
@@ -1108,18 +1226,30 @@ module Prism
|
|
1108
1226
|
def visit_local_variable_operator_write_node(node)
|
1109
1227
|
builder.op_assign(
|
1110
1228
|
builder.assignable(builder.ident(token(node.name_loc))),
|
1111
|
-
[node.
|
1229
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
1112
1230
|
visit(node.value)
|
1113
1231
|
)
|
1114
1232
|
end
|
1115
1233
|
|
1116
1234
|
# foo &&= bar
|
1117
1235
|
# ^^^^^^^^^^^
|
1118
|
-
|
1236
|
+
def visit_local_variable_and_write_node(node)
|
1237
|
+
builder.op_assign(
|
1238
|
+
builder.assignable(builder.ident(token(node.name_loc))),
|
1239
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
1240
|
+
visit(node.value)
|
1241
|
+
)
|
1242
|
+
end
|
1119
1243
|
|
1120
1244
|
# foo ||= bar
|
1121
1245
|
# ^^^^^^^^^^^
|
1122
|
-
|
1246
|
+
def visit_local_variable_or_write_node(node)
|
1247
|
+
builder.op_assign(
|
1248
|
+
builder.assignable(builder.ident(token(node.name_loc))),
|
1249
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
1250
|
+
visit(node.value)
|
1251
|
+
)
|
1252
|
+
end
|
1123
1253
|
|
1124
1254
|
# foo, = bar
|
1125
1255
|
# ^^^
|
@@ -46,7 +46,7 @@ module Prism
|
|
46
46
|
source = source_buffer.source
|
47
47
|
|
48
48
|
offset_cache = build_offset_cache(source)
|
49
|
-
result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version)), offset_cache)
|
49
|
+
result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), scopes: [[]]), offset_cache)
|
50
50
|
|
51
51
|
build_ast(result.value, offset_cache)
|
52
52
|
ensure
|
@@ -59,7 +59,7 @@ module Prism
|
|
59
59
|
source = source_buffer.source
|
60
60
|
|
61
61
|
offset_cache = build_offset_cache(source)
|
62
|
-
result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version)), offset_cache)
|
62
|
+
result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), scopes: [[]]), offset_cache)
|
63
63
|
|
64
64
|
[
|
65
65
|
build_ast(result.value, offset_cache),
|
@@ -78,7 +78,7 @@ module Prism
|
|
78
78
|
offset_cache = build_offset_cache(source)
|
79
79
|
result =
|
80
80
|
begin
|
81
|
-
unwrap(Prism.parse_lex(source, filepath: source_buffer.name, version: convert_for_prism(version)), offset_cache)
|
81
|
+
unwrap(Prism.parse_lex(source, filepath: source_buffer.name, version: convert_for_prism(version), scopes: [[]]), offset_cache)
|
82
82
|
rescue ::Parser::SyntaxError
|
83
83
|
raise if !recover
|
84
84
|
end
|
@@ -149,17 +149,17 @@ module Prism
|
|
149
149
|
Diagnostic.new(:error, :endless_setter, {}, diagnostic_location, [])
|
150
150
|
when :embdoc_term
|
151
151
|
Diagnostic.new(:error, :embedded_document, {}, diagnostic_location, [])
|
152
|
-
when :incomplete_variable_class, :
|
152
|
+
when :incomplete_variable_class, :incomplete_variable_class_3_3
|
153
153
|
location = location.copy(length: location.length + 1)
|
154
154
|
diagnostic_location = build_range(location, offset_cache)
|
155
155
|
|
156
156
|
Diagnostic.new(:error, :cvar_name, { name: location.slice }, diagnostic_location, [])
|
157
|
-
when :incomplete_variable_instance, :
|
157
|
+
when :incomplete_variable_instance, :incomplete_variable_instance_3_3
|
158
158
|
location = location.copy(length: location.length + 1)
|
159
159
|
diagnostic_location = build_range(location, offset_cache)
|
160
160
|
|
161
161
|
Diagnostic.new(:error, :ivar_name, { name: location.slice }, diagnostic_location, [])
|
162
|
-
when :invalid_variable_global, :
|
162
|
+
when :invalid_variable_global, :invalid_variable_global_3_3
|
163
163
|
Diagnostic.new(:error, :gvar_name, { name: location.slice }, diagnostic_location, [])
|
164
164
|
when :module_in_method
|
165
165
|
Diagnostic.new(:error, :module_in_def, {}, diagnostic_location, [])
|
@@ -284,7 +284,7 @@ module Prism
|
|
284
284
|
def convert_for_prism(version)
|
285
285
|
case version
|
286
286
|
when 33
|
287
|
-
"3.3.
|
287
|
+
"3.3.1"
|
288
288
|
when 34
|
289
289
|
"3.4.0"
|
290
290
|
else
|